From fbfdb38260786d444e52b805c01f73fabcd4d2b6 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 20 May 2025 12:32:43 +0530 Subject: [PATCH] Start work on choose files kitten --- kittens/choose_files/__init__.py | 0 kittens/choose_files/main.go | 58 ++++++++++++++++++++++++++++++++ kittens/choose_files/main.py | 32 ++++++++++++++++++ tools/cmd/tool/main.go | 3 ++ 4 files changed, 93 insertions(+) create mode 100644 kittens/choose_files/__init__.py create mode 100644 kittens/choose_files/main.go create mode 100644 kittens/choose_files/main.py diff --git a/kittens/choose_files/__init__.py b/kittens/choose_files/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/kittens/choose_files/main.go b/kittens/choose_files/main.go new file mode 100644 index 000000000..56555f3b4 --- /dev/null +++ b/kittens/choose_files/main.go @@ -0,0 +1,58 @@ +package choose_files + +import ( + "fmt" + "os" + + "github.com/kovidgoyal/kitty/tools/cli" + "github.com/kovidgoyal/kitty/tools/tty" + "github.com/kovidgoyal/kitty/tools/tui/loop" +) + +var _ = fmt.Print +var debugprintln = tty.DebugPrintln + +type Handler struct { + lp *loop.Loop + Current_base_dir string +} + +func (h *Handler) OnInitialize() (ans string, err error) { + return +} + +func main(_ *cli.Command, opts *Options, args []string) (rc int, err error) { + cwd := "" + switch len(args) { + case 0: + os.Getwd() + if cwd, err = os.Getwd(); err != nil { + return + } + case 1: + cwd = args[0] + default: + return 1, fmt.Errorf("Can only specify one directory to search in") + } + lp, err := loop.New() + if err != nil { + return 1, err + } + handler := Handler{Current_base_dir: cwd, lp: lp} + lp.OnInitialize = handler.OnInitialize + err = lp.Run() + if err != nil { + return 1, err + } + ds := lp.DeathSignalName() + if ds != "" { + fmt.Println("Killed by signal: ", ds) + lp.KillIfSignalled() + return 1, nil + } + return +} + +func EntryPoint(parent *cli.Command) { + create_cmd(parent, main) +} diff --git a/kittens/choose_files/main.py b/kittens/choose_files/main.py new file mode 100644 index 000000000..09a615234 --- /dev/null +++ b/kittens/choose_files/main.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +# License: GPLv3 Copyright: 2025, Kovid Goyal + +import sys + +from kitty.simple_cli_definitions import CompletionSpec + + +def main(args: list[str]) -> None: + raise SystemExit('This must be run as kitten choose-files') + + +usage = '[directory to start choosing files in]' + + +OPTIONS = ''' +'''.format + + +help_text = '''\ +''' + + +if __name__ == '__main__': + main(sys.argv) +elif __name__ == '__doc__': + cd = sys.cli_docs # type: ignore + cd['usage'] = usage + cd['options'] = OPTIONS + cd['help_text'] = help_text + cd['short_desc'] = 'Choose files, fast' + cd['args_completion'] = CompletionSpec.from_string('type:directory') diff --git a/tools/cmd/tool/main.go b/tools/cmd/tool/main.go index 7a4725526..338496e62 100644 --- a/tools/cmd/tool/main.go +++ b/tools/cmd/tool/main.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/kovidgoyal/kitty/kittens/ask" + "github.com/kovidgoyal/kitty/kittens/choose_files" "github.com/kovidgoyal/kitty/kittens/choose_fonts" "github.com/kovidgoyal/kitty/kittens/clipboard" "github.com/kovidgoyal/kitty/kittens/desktop_ui" @@ -94,6 +95,8 @@ func KittyToolEntryPoints(root *cli.Command) { show_error.EntryPoint(root) // choose-fonts choose_fonts.EntryPoint(root) + // choose-files + choose_files.EntryPoint(root) // query-terminal query_terminal.EntryPoint(root) // __pytest__