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
|
alias = self._current_alias
|
||||||
self._terminal.set_status(t("term_connecting").format(alias=alias), "#ccaa00")
|
self._terminal.set_status(t("term_connecting").format(alias=alias), "#ccaa00")
|
||||||
self._terminal.reset()
|
|
||||||
self._intentional_disconnect = False
|
self._intentional_disconnect = False
|
||||||
|
|
||||||
def _do_connect():
|
def _do_connect():
|
||||||
@@ -81,10 +80,19 @@ class TerminalTab(ctk.CTkFrame):
|
|||||||
cols, rows = self._terminal.get_size()
|
cols, rows = self._terminal.get_size()
|
||||||
session, is_new = self.session_pool.get_or_create_shell_session(alias, server, key_path)
|
session, is_new = self.session_pool.get_or_create_shell_session(alias, server, key_path)
|
||||||
if is_new:
|
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.cols = cols
|
||||||
session.rows = rows
|
session.rows = rows
|
||||||
session.connect()
|
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
|
# Set up callbacks even if session already existed
|
||||||
session.on_data = self._on_data_received
|
session.on_data = self._on_data_received
|
||||||
@@ -92,6 +100,7 @@ class TerminalTab(ctk.CTkFrame):
|
|||||||
self._session = session
|
self._session = session
|
||||||
else:
|
else:
|
||||||
# Legacy behavior without session pool
|
# Legacy behavior without session pool
|
||||||
|
self.after(0, self._terminal.reset)
|
||||||
cols, rows = self._terminal.get_size()
|
cols, rows = self._terminal.get_size()
|
||||||
session = ShellSession(server, key_path, cols=cols, rows=rows)
|
session = ShellSession(server, key_path, cols=cols, rows=rows)
|
||||||
session.on_data = self._on_data_received
|
session.on_data = self._on_data_received
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user