Skip to content

Commit

Permalink
Remote control launch: Fix --env not implemented when using --cwd=cur…
Browse files Browse the repository at this point in the history
…rent with the SSH kitten

Fixes #6438
  • Loading branch information
kovidgoyal committed Jul 11, 2023
1 parent 343aaf6 commit 4c3d625
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 6 deletions.
2 changes: 2 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ Detailed list of changes

- macOS: Fix a regression that caused rendering to hang when transitioning to full screen with :opt:`macos_colorspace` set to ``default`` (:iss:`6435`)

- Remote control launch: Fix ``--env`` not implemented when using ``--cwd=current`` with the SSH kitten (:iss:`6438`)

0.29.0 [2023-07-10]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Expand Down
22 changes: 19 additions & 3 deletions kittens/ssh/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,25 @@ def get_ssh_data(msg: str, request_id: str) -> Iterator[bytes]:
yield b'KITTY_DATA_END\n'


def set_env_in_cmdline(env: Dict[str, str], argv: List[str]) -> None:
patch_cmdline('clone_env', create_shared_memory(env, 'ksse-'), argv)

def set_env_in_cmdline(env: Dict[str, str], argv: List[str], clone: bool = True) -> None:
from kitty.options.utils import DELETE_ENV_VAR
if clone:
patch_cmdline('clone_env', create_shared_memory(env, 'ksse-'), argv)
return
idx = argv.index('ssh')
for i in range(idx, len(argv)):
if argv[i] == '--kitten':
idx = i + 1
elif argv[i].startswith('--kitten='):
idx = i
env_dirs = []
for k, v in env.items():
if v is DELETE_ENV_VAR:
x = f'--kitten=env={k}'
else:
x = f'--kitten=env={k}={v}'
env_dirs.append(x)
argv[idx+1:idx+1] = env_dirs


def get_ssh_cli() -> Tuple[Set[str], Set[str]]:
Expand Down
2 changes: 1 addition & 1 deletion kitty/child.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ def __init__(
self.argv = list(argv)
if cwd_from:
try:
cwd = cwd_from.modify_argv_for_launch_with_cwd(self.argv) or cwd
cwd = cwd_from.modify_argv_for_launch_with_cwd(self.argv, env) or cwd
except Exception as err:
log_error(f'Failed to read cwd of {cwd_from} with error: {err}')
else:
Expand Down
6 changes: 4 additions & 2 deletions kitty/window.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ def cwd_of_child(self) -> str:
return window.get_cwd_of_root_child() or ''
return window.get_cwd_of_child(oldest=self.request_type is CwdRequestType.oldest) or ''

def modify_argv_for_launch_with_cwd(self, argv: List[str]) -> str:
def modify_argv_for_launch_with_cwd(self, argv: List[str], env: Optional[Dict[str, str]]=None) -> str:
window = self.window
if not window:
return ''
Expand All @@ -154,12 +154,14 @@ def modify_argv_for_launch_with_cwd(self, argv: List[str]) -> str:
if ssh_kitten_cmdline:
run_shell = argv[0] == resolved_shell(get_options())[0]
server_args = [] if run_shell else list(argv)
from kittens.ssh.utils import set_cwd_in_cmdline, set_server_args_in_cmdline
from kittens.ssh.utils import set_cwd_in_cmdline, set_env_in_cmdline, set_server_args_in_cmdline
argv[:] = ssh_kitten_cmdline
if argv and argv[0] == 'kitten':
argv[0] = kitten_exe()
set_cwd_in_cmdline(reported_cwd, argv)
set_server_args_in_cmdline(server_args, argv, allocate_tty=not run_shell)
if env is not None:
set_env_in_cmdline(env, argv, clone=False)
return ''
if not window.child_is_remote and (self.request_type is CwdRequestType.last_reported or window.at_prompt):
return reported_cwd
Expand Down

0 comments on commit 4c3d625

Please sign in to comment.