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:
chrome-storm-c442
2026-02-24 03:10:06 -05:00
parent 8f55b210b3
commit bf5c4b14a4
2 changed files with 11 additions and 2 deletions

View File

@@ -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