Completion: Delegate kitty +complete to kitten

Implement `kitten __complete__ setup` in Go.
Fix zsh completion script to check `kitten`.
This commit is contained in:
pagedown 2023-02-03 18:16:04 +08:00
parent bed4f33be8
commit 370aa3aaa6
No known key found for this signature in database
GPG key ID: E921CF18AC8FF6EB
8 changed files with 120 additions and 3 deletions

View file

@ -11,6 +11,26 @@ import (
var _ = fmt.Print
func bash_completion_script(commands []string) ([]byte, error) {
script := `_ksi_completions() {
builtin local src
builtin local limit
# Send all words up to the word the cursor is currently on
builtin let limit=1+$COMP_CWORD
src=$(builtin printf "%s\n" "${COMP_WORDS[@]:0:$limit}" | builtin command kitten __complete__ bash)
if [[ $? == 0 ]]; then
builtin eval "${src}"
fi
}
builtin complete -F _ksi_completions kitty
builtin complete -F _ksi_completions edit-in-kitty
builtin complete -F _ksi_completions clone-in-kitty
builtin complete -F _ksi_completions kitten
`
return []byte(script), nil
}
func bash_output_serializer(completions []*Completions, shell_state map[string]string) ([]byte, error) {
output := strings.Builder{}
f := func(format string, args ...any) { fmt.Fprintf(&output, format+"\n", args...) }
@ -51,6 +71,7 @@ func bash_init_completions(completions *Completions) {
}
func init() {
completion_scripts["bash"] = bash_completion_script
input_parsers["bash"] = shell_input_parser
output_serializers["bash"] = bash_output_serializer
init_completions["bash"] = bash_init_completions