Completion for kitty @ action

This commit is contained in:
Kovid Goyal
2024-02-10 14:01:45 +05:30
parent 54548931b5
commit 97e2d41233
3 changed files with 40 additions and 1 deletions

View File

@@ -32,6 +32,7 @@ from typing import (
import kitty.constants as kc import kitty.constants as kc
from kittens.tui.operations import Mode from kittens.tui.operations import Mode
from kittens.tui.spinners import spinners from kittens.tui.spinners import spinners
from kitty.actions import get_all_actions
from kitty.cli import ( from kitty.cli import (
CompletionSpec, CompletionSpec,
GoOption, GoOption,
@@ -688,6 +689,15 @@ func add_rc_global_opts(cmd *cli.Command) {{
def update_completion() -> None: def update_completion() -> None:
with replace_if_needed('tools/cmd/completion/kitty_generated.go'): with replace_if_needed('tools/cmd/completion/kitty_generated.go'):
generate_completions_for_kitty() 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'): with replace_if_needed('tools/cmd/edit_in_kitty/launch_generated.go'):
print('package edit_in_kitty') print('package edit_in_kitty')
print('import "kitty/tools/cli"') print('import "kitty/tools/cli"')

View File

@@ -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. using this option means that you will not be notified of failures.
''' + '\n\n' + MATCH_WINDOW_OPTION ''' + '\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: def message_to_kitty(self, global_opts: RCOptions, opts: 'CLIOptions', args: ArgsType) -> PayloadType:
return {'action': ' '.join(args), 'self': opts.self, 'match_window': opts.match} return {'action': ' '.join(args), 'self': opts.self, 'match_window': opts.match}

View File

@@ -0,0 +1,26 @@
// License: GPLv3 Copyright: 2024, Kovid Goyal, <kovid at kovidgoyal.net>
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)
}
}
}
}