mirror of
https://github.com/kovidgoyal/kitty.git
synced 2026-08-04 14:46:03 +00:00
Output selected items
This commit is contained in:
parent
a16ad78de8
commit
23a21a60bd
1 changed files with 38 additions and 8 deletions
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
|
|
@ -84,6 +85,7 @@ type State struct {
|
|||
mode Mode
|
||||
window_title string
|
||||
|
||||
selections []string
|
||||
current_idx int
|
||||
num_of_matches_at_last_render int
|
||||
num_of_slots_per_column_at_last_render int
|
||||
|
|
@ -122,6 +124,11 @@ func (s State) WindowTitle() string {
|
|||
}
|
||||
return s.window_title
|
||||
}
|
||||
func (s *State) AddSelection(abspath string) {
|
||||
if !slices.Contains(s.selections, abspath) {
|
||||
s.selections = append(s.selections, abspath)
|
||||
}
|
||||
}
|
||||
|
||||
type ScreenSize struct {
|
||||
width, height, cell_width, cell_height, width_px, height_px int
|
||||
|
|
@ -181,6 +188,25 @@ func (h *Handler) OnInitialize() (ans string, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func (h *Handler) current_abspath() string {
|
||||
matches, in_progress := h.get_results()
|
||||
if len(matches) > 0 && !in_progress {
|
||||
if idx := h.state.CurrentIndex(); idx < len(matches) {
|
||||
return matches[idx].abspath
|
||||
}
|
||||
}
|
||||
return ""
|
||||
|
||||
}
|
||||
|
||||
func (h *Handler) add_selection_if_possible() {
|
||||
m := h.current_abspath()
|
||||
if m != "" {
|
||||
h.state.AddSelection(m)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (h *Handler) OnKeyEvent(ev *loop.KeyEvent) (err error) {
|
||||
switch {
|
||||
case h.handle_edit_keys(ev), h.handle_result_list_keys(ev):
|
||||
|
|
@ -190,15 +216,13 @@ func (h *Handler) OnKeyEvent(ev *loop.KeyEvent) (err error) {
|
|||
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()
|
||||
m := h.current_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()
|
||||
|
|
@ -216,6 +240,9 @@ func (h *Handler) OnKeyEvent(ev *loop.KeyEvent) (err error) {
|
|||
return h.draw_screen()
|
||||
}
|
||||
h.lp.Beep()
|
||||
case ev.MatchesPressOrRepeat("enter"):
|
||||
h.add_selection_if_possible()
|
||||
h.lp.Quit(0)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
@ -319,6 +346,9 @@ func main(_ *cli.Command, opts *Options, args []string) (rc int, err error) {
|
|||
lp.KillIfSignalled()
|
||||
return 1, nil
|
||||
}
|
||||
if rc = lp.ExitCode(); rc == 0 {
|
||||
fmt.Print(strings.Join(handler.state.selections, "\n"))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue