fix: restore terminal buffer when switching back to pooled session
Instead of unconditionally resetting the terminal, reused sessions now restore the saved screen content from the session pool. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -69,7 +69,6 @@ class TerminalTab(ctk.CTkFrame):
|
||||
|
||||
alias = self._current_alias
|
||||
self._terminal.set_status(t("term_connecting").format(alias=alias), "#ccaa00")
|
||||
self._terminal.reset()
|
||||
self._intentional_disconnect = False
|
||||
|
||||
def _do_connect():
|
||||
@@ -81,10 +80,19 @@ class TerminalTab(ctk.CTkFrame):
|
||||
cols, rows = self._terminal.get_size()
|
||||
session, is_new = self.session_pool.get_or_create_shell_session(alias, server, key_path)
|
||||
if is_new:
|
||||
# Configure the session with proper terminal dimensions
|
||||
# New session — reset terminal for clean start
|
||||
self.after(0, self._terminal.reset)
|
||||
session.cols = cols
|
||||
session.rows = rows
|
||||
session.connect()
|
||||
else:
|
||||
# Reused session — restore saved buffer instead of resetting
|
||||
saved_buf = self.session_pool.get_shell_state(alias)
|
||||
def _restore_buffer():
|
||||
self._terminal.reset()
|
||||
if saved_buf:
|
||||
self._terminal.feed(saved_buf + b"\n")
|
||||
self.after(0, _restore_buffer)
|
||||
|
||||
# Set up callbacks even if session already existed
|
||||
session.on_data = self._on_data_received
|
||||
@@ -92,6 +100,7 @@ class TerminalTab(ctk.CTkFrame):
|
||||
self._session = session
|
||||
else:
|
||||
# Legacy behavior without session pool
|
||||
self.after(0, self._terminal.reset)
|
||||
cols, rows = self._terminal.get_size()
|
||||
session = ShellSession(server, key_path, cols=cols, rows=rows)
|
||||
session.on_data = self._on_data_received
|
||||
|
||||
Reference in New Issue
Block a user