From 2e570e21a0096e1483cb32d289c5e79408b49e89 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 12 Dec 2017 21:20:02 +0530 Subject: [PATCH] Ensure kitty is on the PATH when running from kitty.app --- kitty/main.py | 6 ++++++ linux-launcher.c | 2 ++ 2 files changed, 8 insertions(+) diff --git a/kitty/main.py b/kitty/main.py index 9dc2741f9..94df039c2 100644 --- a/kitty/main.py +++ b/kitty/main.py @@ -111,6 +111,12 @@ def main(): locale.setlocale(locale.LC_ALL, '') except Exception: print('Failed to set locale with no LANG, ignoring', file=sys.stderr) + rpath = getattr(sys, 'bundle_exe_dir', None) + if rpath: + # Ensure kitty bin directory is in PATH + items = frozenset(os.environ['PATH'].split(os.pathsep)) + if rpath not in items: + os.environ['PATH'] += os.pathsep + rpath if os.environ.pop('KITTY_LAUNCHED_BY_LAUNCH_SERVICES', None) == '1' and getattr(sys, 'frozen', True): os.chdir(os.path.expanduser('~')) diff --git a/linux-launcher.c b/linux-launcher.c index 065d9f7d6..c5c9acdc9 100644 --- a/linux-launcher.c +++ b/linux-launcher.c @@ -37,6 +37,7 @@ static int run_embedded(const char* exe_dir_, int argc, wchar_t **argv) { int ret = 1; wchar_t *exe_dir = Py_DecodeLocale(exe_dir_, NULL); if (exe_dir == NULL) { fprintf(stderr, "Fatal error: cannot decode exe_dir\n"); return 1; } + PyObject *ed = PyUnicode_FromWideChar(exe_dir, -1); wchar_t stdlib[PATH_MAX+1] = {0}; num = swprintf(stdlib, PATH_MAX, L"%ls/../Resources/Python/lib/python%s:%ls/../Resources/Python/lib/python%s/lib-dynload", exe_dir, PYVER, exe_dir, PYVER); if (num < 0 || num >= PATH_MAX) { fprintf(stderr, "Failed to create path to python stdlib\n"); return 1; } @@ -47,6 +48,7 @@ static int run_embedded(const char* exe_dir_, int argc, wchar_t **argv) { Py_Initialize(); PySys_SetArgvEx(argc - 1, argv + 1, 0); PySys_SetObject("frozen", Py_True); // dont care if this fails + if (ed) { PySys_SetObject("bundle_exe_dir", ed); Py_CLEAR(ed); } PyObject *kitty = PyUnicode_FromWideChar(stdlib, -1); if (kitty == NULL) { fprintf(stderr, "Failed to allocate python kitty lib object\n"); goto end; } PyObject *runpy = PyImport_ImportModule("runpy");