From 3e4e64c2b66192ca0d481c2fad6a56e3a175af5e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 1 Jun 2025 08:16:56 +0530 Subject: [PATCH] Implement Tab to change current dir --- kittens/choose_files/main.go | 23 +++++++++++++++++++++++ kittens/choose_files/results.go | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/kittens/choose_files/main.go b/kittens/choose_files/main.go index 140883885..2284d9f9f 100644 --- a/kittens/choose_files/main.go +++ b/kittens/choose_files/main.go @@ -3,6 +3,7 @@ package choose_files import ( "fmt" "os" + "path/filepath" "regexp" "strconv" "strings" @@ -53,6 +54,13 @@ func (s *State) SetSearchText(val string) { s.current_idx = 0 } } +func (s *State) SetCurrentDir(val string) { + if s.CurrentDir() != val { + s.search_text = "" + s.current_idx = 0 + s.current_dir = val + } +} func (s State) ExcludePatterns() []*regexp.Regexp { return s.exclude_patterns } func (s State) ScorePatterns() []ScorePattern { return s.score_patterns } func (s State) CurrentIndex() int { return s.current_idx } @@ -129,6 +137,21 @@ func (h *Handler) OnKeyEvent(ev *loop.KeyEvent) (err error) { h.draw_screen() case ev.MatchesPressOrRepeat("esc") || ev.MatchesPressOrRepeat("ctrl+c"): h.lp.Quit(1) + case ev.MatchesPressOrRepeat("tab"): + matches, in_progress := h.get_results() + if len(matches) > 0 && !in_progress { + if idx := h.state.CurrentIndex(); idx < len(matches) { + m := matches[idx].abspath + if st, err := os.Stat(m); err == nil { + if !st.IsDir() { + m = filepath.Dir(m) + } + h.state.SetCurrentDir(m) + return h.draw_screen() + } + } + } + h.lp.Beep() } return } diff --git a/kittens/choose_files/results.go b/kittens/choose_files/results.go index ec0c1bcd9..3d0e6ae2a 100644 --- a/kittens/choose_files/results.go +++ b/kittens/choose_files/results.go @@ -18,7 +18,7 @@ import ( var _ = fmt.Print func (h *Handler) draw_results_title() { - text := filepath.Clean(h.state.BaseDir()) + text := filepath.Clean(h.state.CurrentDir()) home := filepath.Clean(utils.Expanduser("~")) if strings.HasPrefix(text, home) { text = "~" + text[len(home):]