fix: proper terminal buffer save/restore with full pyte screen state

Save complete pyte screen state (characters, colors, attributes,
cursor position, modes) via pickle serialization instead of just
plain text. Restore via direct buffer manipulation + full redraw.
Fixes broken/garbled layout when switching between servers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
chrome-storm-c442
2026-02-24 03:16:47 -05:00
parent bf5c4b14a4
commit afa75b6d9c
3 changed files with 79 additions and 18 deletions

View File

@@ -86,12 +86,13 @@ class TerminalTab(ctk.CTkFrame):
session.rows = rows
session.connect()
else:
# Reused session — restore saved buffer instead of resetting
# Reused session — restore full screen state from pool
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._terminal.restore_buffer(saved_buf)
else:
self._terminal.reset()
self.after(0, _restore_buffer)
# Set up callbacks even if session already existed