Cleanup PATH manipulations
This commit is contained in:
parent
f35112378f
commit
46625d207b
@ -6,14 +6,14 @@ import os
|
|||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
from contextlib import contextmanager, suppress
|
from contextlib import contextmanager, suppress
|
||||||
from typing import Any, Dict, Generator, List, MutableMapping, Optional, Sequence, Tuple
|
from typing import Any, Dict, Generator, List, Optional, Sequence, Tuple
|
||||||
|
|
||||||
from .borders import load_borders_program
|
from .borders import load_borders_program
|
||||||
from .boss import Boss
|
from .boss import Boss
|
||||||
from .child import set_default_env
|
from .child import set_default_env
|
||||||
from .cli import create_opts, parse_args
|
from .cli import create_opts, parse_args
|
||||||
from .cli_stub import CLIOptions
|
from .cli_stub import CLIOptions
|
||||||
from .conf.utils import BadLine
|
from .conf.utils import BadLine, uniq
|
||||||
from .config import cached_values_for
|
from .config import cached_values_for
|
||||||
from .constants import (
|
from .constants import (
|
||||||
appname, beam_cursor_data_file, config_dir, glfw_path, is_macos,
|
appname, beam_cursor_data_file, config_dir, glfw_path, is_macos,
|
||||||
@ -268,20 +268,25 @@ def expand_listen_on(listen_on: str, from_config_file: bool) -> str:
|
|||||||
return listen_on
|
return listen_on
|
||||||
|
|
||||||
|
|
||||||
def ensure_path(env: MutableMapping[str, str]) -> None:
|
def ensure_kitty_in_path() -> None:
|
||||||
# Ensure the correct kitty is in PATH
|
# Ensure the correct kitty is in PATH
|
||||||
rpath = sys._xoptions.get('bundle_exe_dir')
|
rpath = sys._xoptions.get('bundle_exe_dir')
|
||||||
|
if not rpath:
|
||||||
|
return
|
||||||
if rpath:
|
if rpath:
|
||||||
modify_path = is_macos or getattr(sys, 'frozen', False) or sys._xoptions.get('kitty_from_source') == '1'
|
modify_path = is_macos or getattr(sys, 'frozen', False) or sys._xoptions.get('kitty_from_source') == '1'
|
||||||
env_path = env.get('PATH', '')
|
existing = shutil.which('kitty')
|
||||||
existing = env_path and shutil.which('kitty', path=env_path)
|
|
||||||
if modify_path or not existing:
|
if modify_path or not existing:
|
||||||
|
env_path = os.environ.get('PATH', '')
|
||||||
|
correct_kitty = os.path.join(rpath, 'kitty')
|
||||||
|
|
||||||
def cpath(x: str) -> str:
|
def cpath(x: str) -> str:
|
||||||
return os.path.abspath(os.path.realpath(x))
|
return os.path.abspath(os.path.realpath(x))
|
||||||
if not existing or cpath(existing) != cpath(os.path.join(rpath, 'kitty')):
|
|
||||||
|
if not existing or cpath(existing) != cpath(correct_kitty):
|
||||||
existing_paths = list(filter(None, env_path.split(os.pathsep)))
|
existing_paths = list(filter(None, env_path.split(os.pathsep)))
|
||||||
existing_paths.insert(0, rpath)
|
existing_paths.insert(0, rpath)
|
||||||
env['PATH'] = os.pathsep.join(existing_paths)
|
os.environ['PATH'] = os.pathsep.join(existing_paths)
|
||||||
|
|
||||||
|
|
||||||
def setup_environment(opts: Options, cli_opts: CLIOptions) -> None:
|
def setup_environment(opts: Options, cli_opts: CLIOptions) -> None:
|
||||||
@ -293,10 +298,16 @@ def setup_environment(opts: Options, cli_opts: CLIOptions) -> None:
|
|||||||
cli_opts.listen_on = expand_listen_on(cli_opts.listen_on, from_config_file)
|
cli_opts.listen_on = expand_listen_on(cli_opts.listen_on, from_config_file)
|
||||||
os.environ['KITTY_LISTEN_ON'] = cli_opts.listen_on
|
os.environ['KITTY_LISTEN_ON'] = cli_opts.listen_on
|
||||||
env = opts.env.copy()
|
env = opts.env.copy()
|
||||||
|
ensure_kitty_in_path()
|
||||||
setup_shell_integration(opts, env)
|
setup_shell_integration(opts, env)
|
||||||
ensure_path(os.environ)
|
kitty_path = shutil.which('kitty')
|
||||||
if env.get('PATH') not in (None, '', DELETE_ENV_VAR):
|
if kitty_path:
|
||||||
ensure_path(env)
|
child_path = env.get('PATH')
|
||||||
|
# if child_path is None it will be inherited from os.environ,
|
||||||
|
# the other values mean the user doesn't want a PATH
|
||||||
|
if child_path not in ('', DELETE_ENV_VAR) and child_path is not None:
|
||||||
|
paths = uniq([os.path.dirname(kitty_path)] + child_path.split(os.pathsep))
|
||||||
|
env['PATH'] = os.pathsep.join(paths)
|
||||||
set_default_env(env)
|
set_default_env(env)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user