From 97e2d4123321b7a7ff2e71ef44f8334a7806c8ff Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 10 Feb 2024 14:01:45 +0530 Subject: [PATCH] Completion for kitty @ action --- gen/go_code.py | 10 ++++++++++ kitty/rc/action.py | 5 ++++- tools/cmd/at/complete_actions.go | 26 ++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 tools/cmd/at/complete_actions.go diff --git a/gen/go_code.py b/gen/go_code.py index f700fc35f..6776f8330 100755 --- a/gen/go_code.py +++ b/gen/go_code.py @@ -32,6 +32,7 @@ from typing import ( import kitty.constants as kc from kittens.tui.operations import Mode from kittens.tui.spinners import spinners +from kitty.actions import get_all_actions from kitty.cli import ( CompletionSpec, GoOption, @@ -688,6 +689,15 @@ func add_rc_global_opts(cmd *cli.Command) {{ def update_completion() -> None: with replace_if_needed('tools/cmd/completion/kitty_generated.go'): generate_completions_for_kitty() + + with replace_if_needed('tools/cmd/at/kitty_actions_generated.go'): + print("package at") + print("const KittyActionNames = `", end='') + for grp, actions in get_all_actions().items(): + for ac in actions: + print(ac.name) + print('`') + with replace_if_needed('tools/cmd/edit_in_kitty/launch_generated.go'): print('package edit_in_kitty') print('import "kitty/tools/cli"') diff --git a/kitty/rc/action.py b/kitty/rc/action.py index 655537787..817c5eeba 100644 --- a/kitty/rc/action.py +++ b/kitty/rc/action.py @@ -51,7 +51,10 @@ Don't wait for a response indicating the success of the action. Note that using this option means that you will not be notified of failures. ''' + '\n\n' + MATCH_WINDOW_OPTION - args = RemoteCommand.Args(spec='ACTION [ARGS FOR ACTION...]', json_field='action', minimum_count=1) + args = RemoteCommand.Args( + spec='ACTION [ARGS FOR ACTION...]', json_field='action', minimum_count=1, + completion=RemoteCommand.CompletionSpec.from_string('type:special group:complete_actions') + ) def message_to_kitty(self, global_opts: RCOptions, opts: 'CLIOptions', args: ArgsType) -> PayloadType: return {'action': ' '.join(args), 'self': opts.self, 'match_window': opts.match} diff --git a/tools/cmd/at/complete_actions.go b/tools/cmd/at/complete_actions.go new file mode 100644 index 000000000..79a3e0766 --- /dev/null +++ b/tools/cmd/at/complete_actions.go @@ -0,0 +1,26 @@ +// License: GPLv3 Copyright: 2024, Kovid Goyal, + +package at + +import ( + "fmt" + "strings" + + "kitty/tools/cli" + "kitty/tools/utils" +) + +var _ = fmt.Print + +func complete_actions(completions *cli.Completions, word string, arg_num int) { + if arg_num < 2 { + scanner := utils.NewLineScanner(KittyActionNames) + mg := completions.AddMatchGroup("Actions") + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if line != "" && strings.HasPrefix(line, word) { + mg.AddMatch(line) + } + } + } +}