Commit graph

12 commits

Author SHA1 Message Date
vrubelroman
92e72bc8c6 feat: theme selector dialog with live preview (t key)
Replace the simple cycleTheme() with a modal dialog that shows all
19 themes with color swatches, live preview on Up/Down navigation,
and commit/revert on Enter/Esc.

Changes:
- Add modalThemeSelect kind to modalKind enum
- Add themeSelectorState struct + field to Model
- Add openThemeSelector() replacing cycleTheme() call
- Add handleModalKey case for modalThemeSelect (Up/Down/Enter/Esc)
- Add applyThemePreview() and finalizeTheme() helper methods
- Add renderThemeSelectModal() with aligned theme names + swatches
- Update renderModal() dispatch and widen modal for theme selector
- Update help text: 't' now shows 'select theme'
2026-04-29 16:13:29 +03:00
vrubelroman
cd877ab584 feat: mirror pane (p), cursor memory, clean up help dialog
- Add Mirror pane keybinding p (for 'Pane'), SSH restored on s
- Add session-scoped cursor memory per directory
- Fix cursor memory bug: DisplayName() adds trailing / for directories
- Fix remote mirror: use active.Path instead of mount.RemotePath
- Remove F-key/Mouse/b/c entries from F1 help dialog
- Remove Mirror from ShortHelp footer (F-keys only)
- Add missing letter-key bindings to help: p, s, a, n, x
2026-04-29 16:03:34 +03:00
vrubelroman
c8d6976030 refactor: remove Edit key binding, rename ExtractArchive -> Unpack
- Remove unused Edit key binding (no keys assigned, duplicated Enter)
- Rename ExtractArchive to Unpack across KeyMap struct, DefaultKeyMap(),
  ShortHelp(), FullHelp(), and Model.Update() handler
- Rename handleExtractArchive() -> handleUnpack()
- Update help text, status messages, and dialog titles to 'unpack'
2026-04-29 15:20:53 +03:00
vrubelroman
1ed2d3defb SSH connection status indicators
- Add Connected bool field to vfs.Entry and RemoteMount
- Track connection status in sshState.connectedHosts
- Show status icon (connected/disconnected) in pane header when browsing remote host
- Async SSH connection test with cancel support for Add Host dialog
- Colored labels and styled help text in SSH dialogs
- Confirmation dialog when deleting manually-added SSH hosts
2026-04-29 03:11:53 +03:00
vrubelroman
d38945f595 remove duplicate theme aliases (gruvbox, nord-frost); add 4 new themes: one-dark, everforest, github-dark, catppuccin-macchiato 2026-04-27 20:19:43 +03:00
vrubelroman
bba8783f10 Fix directory preview layout to exactly match browser pane columns
Root cause: renderPreviewPane() was stuffing directory entries into the
viewport model via SetContent(), then rendering through
renderPreviewContent() which wraps the viewport in an additional
border+padding box. This reduced the effective content width by 4
characters compared to the browser pane's innerWidth (width-2), causing
column misalignment where the date column would wrap to the next line.

Fix: For directory previews, directly render entries using the same
renderPaneRows() and renderColumnsHeader() functions as the browser
pane, at the same innerWidth. A temporary BrowserPane is created with
the directory entries, and renderPaneRows() is called with active=false,
producing pixel-identical output to the main file browser.

Removed renderDirectoryPreviewBody() which is no longer needed.
2026-04-27 16:52:44 +03:00
vrubelroman
33974cdcb7 Fix archive cursor, navigation, and format cycling color
- Reset cursor to '..' (position 0) when entering an archive so it
  doesn't stay at the previous directory's cursor position
- Fix archive exit landing in /tmp when pressing Enter on '..' inside
  an archive by delegating to archive-aware goParent() in enterSelected()
- Fix goParent() to handle ALL navigation within archive mounts
  explicitly instead of falling through to filepath.Dir which may
  navigate outside the mount to /tmp
- Fix format cycling text color reset by preserving '(f to change)'
  hint in modal note, ensuring renderModalNoteLine applies proper
  key/action styling via the '(' separator match
2026-04-27 15:30:39 +03:00
vrubelroman
3e34944f99 feat: add 11 new color themes (ayu-dark, breeze, catppuccin-lavender, cyberpunk, dracula, eldritch, kanagawa, kanagawa-paper, rose-pine, solarized-dark, vesper) 2026-04-27 14:40:44 +03:00
vrubelroman
ce2f488c89 fix: preserve panel background in cursor mode (renderTextCursorContent)
Replace full ANSI reset sequences (\x1b[0m) added by lipgloss.Render() for
gutter markers, cursor highlights, and selection highlights with
background-preserving resets (\x1b[39;22;23;24;59;48;2;R;G;Bm) that restore
the panel background color.

Without this fix, every \x1b[0m from lipgloss-styled elements in
renderTextCursorContent resets the panel background (set by the outer
renderPreviewContent wrapper), causing some letters to have incorrect or
missing background color in caret mode.
2026-04-27 14:15:20 +03:00
vrubelroman
e890e1871b feat: add copy path button in info panel 2026-04-27 13:49:45 +03:00
vrubelroman
6a518896b8 Add archive-as-folder navigation and extraction copy flow 2026-04-24 15:14:05 +03:00
vrubelroman
059f925e00 Initial vcom TUI prototype 2026-04-22 22:10:50 +03:00