From 9bde9935eb25b90ad8b434d3dea908cad0edab8a Mon Sep 17 00:00:00 2001 From: Ethan Dalool Date: Sun, 6 Dec 2020 15:03:17 -0800 Subject: [PATCH] Add shortcut.py to produce lnk files. Thanks to winshell. --- shortcut.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 shortcut.py diff --git a/shortcut.py b/shortcut.py new file mode 100644 index 0000000..b1919de --- /dev/null +++ b/shortcut.py @@ -0,0 +1,55 @@ +import argparse +import sys +import winshell + +from voussoirkit import pathclass + +def shortcut(lnk_name, target, start_in=None, icon=None): + lnk = pathclass.Path(lnk_name) + if lnk.extension != 'lnk': + lnk = lnk.add_extension('lnk') + + lnk.assert_not_exists() + + target = pathclass.Path(target) + target.assert_exists() + + if start_in is not None: + start_in = pathclass.Path(start_in) + start_in.assert_is_directory() + + if icon is not None: + icon = pathclass.Path(icon) + icon.assert_is_file() + + lnk = winshell.Shortcut(lnk.absolute_path) + lnk.path = target.absolute_path + if start_in is not None: + lnk.working_directory = start_in.absolute_path + if icon is not None: + lnk.icon_location = (icon.absolute_path, 0) + + lnk.write() + +def shortcut_argparse(args): + return shortcut( + lnk_name=args.lnk_name, + target=args.target, + start_in=args.start_in, + icon=args.icon, + ) + +def main(argv): + parser = argparse.ArgumentParser(description=__doc__) + + parser.add_argument('lnk_name') + parser.add_argument('target') + parser.add_argument('--start_in', '--start-in', '--startin', dest='start_in', default=None) + parser.add_argument('--icon', dest='icon', default=None) + parser.set_defaults(func=shortcut_argparse) + + args = parser.parse_args(argv) + return args.func(args) + +if __name__ == '__main__': + raise SystemExit(main(sys.argv[1:]))