From f6be9435a8932a5a1ca7275169e6499fecfd23f6 Mon Sep 17 00:00:00 2001 From: Gubarz <1037896+Gubarz@users.noreply.github.com> Date: Tue, 19 May 2026 02:06:26 -0600 Subject: [PATCH] fix: arrow keys on variable selection --- internal/ui/var_resolve.go | 5 +++++ internal/ui/var_resolve_test.go | 36 +++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 internal/ui/var_resolve_test.go diff --git a/internal/ui/var_resolve.go b/internal/ui/var_resolve.go index d4e2e11..c2ceb9e 100644 --- a/internal/ui/var_resolve.go +++ b/internal/ui/var_resolve.go @@ -351,6 +351,11 @@ func (m *mainModel) handleVarResolveKey(msg tea.KeyMsg) tea.Cmd { return nil case "enter": return m.acceptVarValue() + case "up", "ctrl+p", "down", "ctrl+n", "pgup", "pgdown": + if !m.varState.isPromptOnly && m.varState.picker != nil { + m.varState.picker.HandleKey(msg) + } + return nil case "tab": if m.completePathFromInput() { return nil diff --git a/internal/ui/var_resolve_test.go b/internal/ui/var_resolve_test.go new file mode 100644 index 0000000..68a9714 --- /dev/null +++ b/internal/ui/var_resolve_test.go @@ -0,0 +1,36 @@ +package ui + +import ( + "testing" + + tea "github.com/charmbracelet/bubbletea" + "github.com/gubarz/cheatmd/pkg/parser" +) + +func TestVarResolveArrowKeysMoveSelection(t *testing.T) { + m := newMainModel([]*parser.Cheat{{Header: "One"}}, parser.NewCheatIndex(), nil) + items := []FilteredOption{ + {Display: "alpha", Original: "alpha", SearchText: "alpha"}, + {Display: "beta", Original: "beta", SearchText: "beta"}, + {Display: "gamma", Original: "gamma", SearchText: "gamma"}, + } + m.phase = phaseVarResolve + m.varState = &varResolveState{ + isPromptOnly: false, + picker: NewPicker(items, func(opt FilteredOption, words []string) bool { + return matchesAllWords(opt.SearchText, words) + }), + } + + model, _ := m.updateVarResolve(tea.KeyMsg{Type: tea.KeyDown}) + got := model.(*mainModel) + if got.varState.picker.Cursor != 1 { + t.Fatalf("cursor after down = %d, want 1", got.varState.picker.Cursor) + } + + model, _ = got.updateVarResolve(tea.KeyMsg{Type: tea.KeyUp}) + got = model.(*mainModel) + if got.varState.picker.Cursor != 0 { + t.Fatalf("cursor after up = %d, want 0", got.varState.picker.Cursor) + } +}