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'
This commit is contained in:
vrubelroman 2026-04-29 15:20:53 +03:00
parent 3b9eb4afa5
commit c8d6976030
3 changed files with 13 additions and 17 deletions

View file

@ -7,7 +7,6 @@ type KeyMap struct {
Visual key.Binding
Caret key.Binding
View key.Binding
Edit key.Binding
Rename key.Binding
Info key.Binding
Archive key.Binding
@ -32,7 +31,7 @@ type KeyMap struct {
Move key.Binding
Mkdir key.Binding
Delete key.Binding
ExtractArchive key.Binding
Unpack key.Binding
Confirm key.Binding
Background key.Binding
ProgressCancel key.Binding
@ -49,7 +48,6 @@ func DefaultKeyMap() KeyMap {
View: key.NewBinding(key.WithKeys("f3", "v"), key.WithHelp("F3/v", "view")),
Visual: key.NewBinding(key.WithKeys("v"), key.WithHelp("v", "visual")),
Caret: key.NewBinding(key.WithKeys("i"), key.WithHelp("i", "caret")),
Edit: key.NewBinding(key.WithKeys("e"), key.WithHelp("e", "edit")),
Archive: key.NewBinding(key.WithKeys("f4", "a"), key.WithHelp("F4/a", "archive")),
Info: key.NewBinding(key.WithKeys("f9", "o"), key.WithHelp("F9/o", "info")),
SelectText: key.NewBinding(key.WithKeys("ctrl+t"), key.WithHelp("C-t", "text select")),
@ -73,7 +71,7 @@ func DefaultKeyMap() KeyMap {
Move: key.NewBinding(key.WithKeys("f6", "m"), key.WithHelp("F6/m", "move")),
Mkdir: key.NewBinding(key.WithKeys("f7", "n"), key.WithHelp("F7/n", "mkdir")),
Delete: key.NewBinding(key.WithKeys("f8", "delete", "x"), key.WithHelp("F8/x", "delete")),
ExtractArchive: key.NewBinding(key.WithKeys("f11", "e"), key.WithHelp("F11/e", "extract archive")),
Unpack: key.NewBinding(key.WithKeys("f11", "e"), key.WithHelp("F11/e", "unpack")),
Confirm: key.NewBinding(key.WithKeys("enter", "y"), key.WithHelp("Enter/y", "confirm")),
Background: key.NewBinding(key.WithKeys("b"), key.WithHelp("b", "background")),
ProgressCancel: key.NewBinding(key.WithKeys("c"), key.WithHelp("c", "cancel transfer")),
@ -85,13 +83,13 @@ func DefaultKeyMap() KeyMap {
}
func (k KeyMap) ShortHelp() []key.Binding {
return []key.Binding{k.Help, k.Rename, k.View, k.Archive, k.Copy, k.Move, k.Mkdir, k.Delete, k.Info, k.Quit, k.ExtractArchive, k.SSH}
return []key.Binding{k.Help, k.Rename, k.View, k.Archive, k.Copy, k.Move, k.Mkdir, k.Delete, k.Info, k.Quit, k.Unpack, k.SSH}
}
func (k KeyMap) FullHelp() [][]key.Binding {
return [][]key.Binding{
{k.Help, k.Up, k.Down, k.SelectUp, k.SelectDown, k.Open, k.Back},
{k.Rename, k.View, k.Caret, k.Edit, k.Archive, k.Copy, k.Move, k.Delete},
{k.ExtractArchive, k.SelectText, k.DirSize, k.Refresh, k.ToggleHidden, k.CycleSort, k.CycleTheme, k.Quit},
{k.Rename, k.View, k.Caret, k.Archive, k.Copy, k.Move, k.Delete},
{k.Unpack, k.SelectText, k.DirSize, k.Refresh, k.ToggleHidden, k.CycleSort, k.CycleTheme, k.Quit},
}
}

View file

@ -1174,8 +1174,6 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return m.toggleVisualMode()
}
return m, nil
case key.Matches(msg, m.keys.Edit):
return m.handleEdit()
case key.Matches(msg, m.keys.Archive):
return m.handleArchive()
case key.Matches(msg, m.keys.Info):
@ -1257,8 +1255,8 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
return m, nil
case key.Matches(msg, m.keys.Delete):
return m.handleDelete()
case key.Matches(msg, m.keys.ExtractArchive):
return m.handleExtractArchive()
case key.Matches(msg, m.keys.Unpack):
return m.handleUnpack()
case key.Matches(msg, m.keys.SSH):
log.Printf("[KEY] SSH toggle — active=%s path=%s", m.active, activePane.Path)
return m.handleSSHToggle()
@ -2350,11 +2348,11 @@ func (m *Model) handleDelete() (tea.Model, tea.Cmd) {
return m, trashPlanCmd(sources)
}
func (m *Model) handleExtractArchive() (tea.Model, tea.Cmd) {
func (m *Model) handleUnpack() (tea.Model, tea.Cmd) {
selected, ok := m.activePane().Selected()
if !ok || !isArchiveEntry(selected) {
log.Printf("[SKIP] ExtractArchive: no archive selected")
m.status = "Select an archive file to extract"
log.Printf("[SKIP] Unpack: no archive selected")
m.status = "Select an archive file to unpack"
return m, nil
}
@ -2362,10 +2360,10 @@ func (m *Model) handleExtractArchive() (tea.Model, tea.Cmd) {
targetPane := m.passivePane()
targetDir := targetPane.Path
log.Printf("[ACTION] ExtractArchive: source=%s target=%s", selected.Path, targetDir)
log.Printf("[ACTION] Unpack: source=%s target=%s", selected.Path, targetDir)
// Show confirm dialog before extracting
title := fmt.Sprintf("Extract %s?", selected.DisplayName())
title := fmt.Sprintf("Unpack %s?", selected.DisplayName())
body := fmt.Sprintf("Archive: %s\nTarget: %s", selected.Path, targetDir)
note := "Enter / y to confirm, Esc / n to cancel"
pending := pendingOperation{

View file

@ -4,7 +4,7 @@ right_path = ''
[ui]
app_title = 'vcom'
theme = 'catppuccin-mocha'
theme = 'one-dark'
icon_mode = 'auto'
show_title_bar = true
show_footer = true