From 60e2d61eb47a150236d8ba9eea5b7f39915f225f Mon Sep 17 00:00:00 2001 From: newwares <45801973+waresnew@users.noreply.github.com> Date: Sat, 7 Feb 2026 20:09:52 -0500 Subject: [PATCH 1/2] edit-in-kitty: Warn if SSH connection has dropped when attempting to update remote file --- kitty/launch.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/kitty/launch.py b/kitty/launch.py index 233fedf54..167e55e01 100644 --- a/kitty/launch.py +++ b/kitty/launch.py @@ -962,8 +962,9 @@ class EditCmd: def __del__(self) -> None: if self.tdir: - with suppress(OSError): - shutil.rmtree(self.tdir) + if not self.abort_signaled == 'disconnected': + with suppress(OSError): + shutil.rmtree(self.tdir) self.tdir = '' def read_data(self) -> bytes: @@ -1002,6 +1003,12 @@ class EditCmd: self.schedule_check() def send_data(self, window: Window, data_type: str, data: bytes = b'') -> None: + if not self.is_local_file and not window.child_is_remote: + self.abort_signaled = 'disconnected' + get_boss().show_error( + 'edit-in-kitty', f'Failed to sync file due to the SSH connection dropping. Your local changes can still be found at {self.file_localpath}' + ) + return window.write_to_child(f'KITTY_DATA_START\n{data_type}\n') if data: import base64 From 828bd56fa54ea144270ecefe9287505acf11ec87 Mon Sep 17 00:00:00 2001 From: newwares <45801973+waresnew@users.noreply.github.com> Date: Sat, 7 Feb 2026 20:10:18 -0500 Subject: [PATCH 2/2] ssh kitten: Push and pop keyboard encoding flags --- kittens/ssh/main.go | 4 ++-- tools/tui/loop/terminal-state.go | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/kittens/ssh/main.go b/kittens/ssh/main.go index 0eb90f4c0..4178b2a3f 100644 --- a/kittens/ssh/main.go +++ b/kittens/ssh/main.go @@ -736,12 +736,12 @@ func run_ssh(ssh_args, server_args, found_extra_args []string) (rc int, err erro cd.hostname_for_match, cd.username = hostname_for_match, uname escape_codes_to_set_colors, err := change_colors(cd.host_opts.Color_scheme) if err == nil { - err = term.WriteAllString(escape_codes_to_set_colors + loop.SAVE_PRIVATE_MODE_VALUES + loop.HANDLE_TERMIOS_SIGNALS.EscapeCodeToSet()) + err = term.WriteAllString(escape_codes_to_set_colors + loop.SAVE_PRIVATE_MODE_VALUES + loop.PUSH_KEY_FLAGS + loop.HANDLE_TERMIOS_SIGNALS.EscapeCodeToSet()) } if err != nil { return 1, err } - restore_escape_codes := loop.RESTORE_PRIVATE_MODE_VALUES + loop.HANDLE_TERMIOS_SIGNALS.EscapeCodeToReset() + restore_escape_codes := loop.RESTORE_PRIVATE_MODE_VALUES + loop.POP_KEY_FLAGS + loop.HANDLE_TERMIOS_SIGNALS.EscapeCodeToReset() if escape_codes_to_set_colors != "" { restore_escape_codes += "\x1b[#Q" } diff --git a/tools/tui/loop/terminal-state.go b/tools/tui/loop/terminal-state.go index daa62e7b0..dae8746c4 100644 --- a/tools/tui/loop/terminal-state.go +++ b/tools/tui/loop/terminal-state.go @@ -31,6 +31,8 @@ const ( RESTORE_COLORS = "\033[#Q" DECSACE_DEFAULT_REGION_SELECT = "\033[*x" CLEAR_SCREEN = "\033[H\033[2J" + POP_KEY_FLAGS = "\033[