From 56b26838ce19cf24227c2fb64ec0440a019967f4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 20 May 2025 14:34:52 +0530 Subject: [PATCH] Handle backspace and esc keys --- kittens/choose_files/main.go | 17 +++++++++++++++++ kittens/choose_files/search-bar.go | 14 +++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/kittens/choose_files/main.go b/kittens/choose_files/main.go index d641683cd..8b09061bf 100644 --- a/kittens/choose_files/main.go +++ b/kittens/choose_files/main.go @@ -77,6 +77,21 @@ func (h *Handler) OnInitialize() (ans string, err error) { return } +func (h *Handler) OnKeyEvent(ev *loop.KeyEvent) (err error) { + switch { + case h.handle_edit_keys(ev): + h.draw_screen() + case ev.MatchesPressOrRepeat("esc"): + h.lp.Quit(1) + } + return +} + +func (h *Handler) OnText(text string, from_key_event, in_bracketed_paste bool) (err error) { + h.state.search_text += text + return h.draw_screen() +} + var default_cwd string func main(_ *cli.Command, opts *Options, args []string) (rc int, err error) { @@ -101,6 +116,8 @@ func main(_ *cli.Command, opts *Options, args []string) (rc int, err error) { handler.init_sizes(new_size) return handler.draw_screen() } + lp.OnKeyEvent = handler.OnKeyEvent + lp.OnText = handler.OnText err = lp.Run() if err != nil { return 1, err diff --git a/kittens/choose_files/search-bar.go b/kittens/choose_files/search-bar.go index 9f3562dbe..c5cdb19d9 100644 --- a/kittens/choose_files/search-bar.go +++ b/kittens/choose_files/search-bar.go @@ -35,7 +35,6 @@ func (h *Handler) draw_frame(width, height int) { func (h *Handler) draw_search_text(available_width int) { text := h.state.SearchText() - text = "abcdefghijklmnopqrstuvwxyz1234" available_width /= 2 if wcswidth.Stringwidth(text) > available_width { g := wcswidth.SplitIntoGraphemes(text) @@ -58,3 +57,16 @@ func (h *Handler) draw_search_bar(y int) (height int, err error) { return } + +func (h *Handler) handle_edit_keys(ev *loop.KeyEvent) bool { + switch { + case ev.MatchesPressOrRepeat("backspace"): + if h.state.SearchText() == "" { + h.lp.Beep() + } else { + h.state.search_text = h.state.search_text[:len(h.state.search_text)-1] + return true + } + } + return false +}