pyte 0.8.2 doesn't handle DCS string sequences (ESC P ... ST). When
nano/ncurses sends DECRQSS queries, pyte consumed the introducer but
rendered the payload as visible text. Added regex pre-filter to strip
DCS/APC/PM/SOS sequences before feeding data to pyte.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ctrl+key shortcuts now use physical keycodes as fallback, so Ctrl+S (save
in nano), Ctrl+Q (XON), Ctrl+A/E/R/W/T etc. work regardless of whether
the keyboard layout is English, Russian, or any other.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add core/icons.py — centralized icon text helper with emoji/symbol support
- Add Windows SSH command sanitization in ssh.py (Linux→Windows auto-translation)
- Improve embedded RDP: launch tab connect/disconnect, fullscreen toggle
- Refactor sidebar: cleaner server type badges
- Update server_dialog: adaptive fields per server type
- Add setup_openssh.bat tool
- Update skill-ssh.md and CLAUDE.md docs for Windows SSH support
- Cleanup old releases, add v1.8.48-v1.8.52
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Global keycode-based handler for Ctrl shortcuts (works with Russian, Chinese, any layout)
- Tkinter maps <<Paste>> to <Control-v> by keysym which fails on non-Latin layouts
- New handler intercepts <Control-Key> at 'all' level, checks keycodes and generates correct virtual events
- Added Undo/Redo support for Entry widgets (tk.Entry has no built-in undo)
- Tab switch focus management: terminal releases focus when switching away
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
tkinter rejects Cyrillic chars in bind(). Use keycode-based
<Control-Key> dispatch instead (same approach as terminal_widget).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
tk.Entry has no built-in undo (unlike tk.Text), so _entry.config(undo=True)
crashed. Replaced with custom entry_undo.py that tracks history manually
and binds Ctrl+Z/Ctrl+Y (+ Russian layout support).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace Cyrillic char bindings (tkinter rejects them) with keycode dispatch
- <Control-Key> handler routes by physical keycode (67=C, 86=V, etc.)
- Works with Russian, Ukrainian, and any other keyboard layout
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Cyrillic key bindings for Ctrl+C/V/D/L/Z and Ctrl+Shift+C/V
- Russian layout: с=C, м=V, в=D, д=L, я=Z
- Fixes: Ctrl+C (SIGINT/copy), Ctrl+V (paste) not working with РУС layout
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Single Ctrl+C with selection → copy
- Single Ctrl+C without selection → hint "Press again to send SIGINT"
- Double Ctrl+C within 1.5s → sends SIGINT
- Prevents accidental process termination
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Tighten sudo auto-password to only match "[sudo] password for" in last line (fixes journalctl hang)
- Remove state="disabled" from terminal widget (fixes copy/paste on Windows)
- Copy: Ctrl+C (with selection), Ctrl+Shift+C, right-click menu
- Paste: Ctrl+V, Ctrl+Shift+V, right-click menu
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
pyte.screens.Char is a namedtuple (immutable), so fields can't be
mutated directly. Also 'width' doesn't exist — the correct field is
'blink'. Now creates new Char(...) objects for buffer restoration.
Fixes server switching being completely broken (AttributeError on save).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
- SessionPool: LRU cache for SSH/SFTP sessions across server switches
- Sidebar: green dot indicators for servers with active sessions
- Sidebar: active sessions count label
- Terminal: buffer preservation on server switch via get_current_buffer()
- FilesTab/TerminalTab: pool integration for session reuse
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- SFTP cleanup on app close and language switch
- Windows drive selector in local panel
- Browse and Refresh buttons for local panel
- Recursive upload/download/delete of folders
- Drag-and-drop between local and remote panels
- Sudo mode toggle for privileged file operations
- New i18n keys for EN/RU/ZH
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Ctrl+wheel/Ctrl±/Ctrl+0 font zoom (6-28), persisted in settings.json
- Font fallback: Cascadia Mono → Consolas → Courier New (per platform)
- Visual "Copied!" flash in status bar on copy
- Closes audit items #27 (copy feedback) and #29 (font fallback)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Single Ctrl+C with selection → copies text to clipboard.
Single Ctrl+C without selection → sends SIGINT.
Double Ctrl+C (within 300ms) → always sends SIGINT.
Protects against accidentally killing programs when trying to copy.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- mc/vim/htop enable Application Cursor Mode (DECCKM ?1h) which
requires arrow keys to send \eOA..D instead of \e[A..D
- Detect DECCKM in pyte screen mode and send correct sequences
- Fix thread-safety: use queue.Queue for SSH→main thread data transfer
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove LNM mode that corrupted cursor positioning for TUI programs
- Add render debouncing (~60fps) to prevent UI thread blocking
- Add data batching in terminal tab to reduce render calls
- Increase SSH recv buffer from 4KB to 64KB
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add network interface selection per server (VPN/multi-NIC support)
- Fix "Install Everything" button hanging on error
- Add interactive SSH terminal with PTY (pyte + xterm-256color)
- Add release.py for automated versioning and changelog generation
- Add CLAUDE.md with project instructions
- Add screenshots and release binaries for v1.1–v1.4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CustomTkinter desktop app for managing remote servers.
Features: SSH terminal, SFTP file transfer, key management,
background status monitoring, server CRUD with dark theme.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>