diff --git a/completion/bash/kitty.sh b/completion/bash/kitty.sh new file mode 100644 index 000000000..47a8594fe --- /dev/null +++ b/completion/bash/kitty.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +kitty_completions() { + local src + local limit + # Send all words up to the word the cursor is currently on + let limit=1+$COMP_CWORD + src=$(printf "%s\n" "${COMP_WORDS[@]: 0:$limit}" | kitty +complete bash) + if [[ $? == 0 ]]; then + eval ${src} + fi +} + +complete -F kitty_completions kitty diff --git a/kitty/complete.py b/kitty/complete.py index 0301116fe..b38059dcb 100644 --- a/kitty/complete.py +++ b/kitty/complete.py @@ -44,6 +44,13 @@ def zsh_input_parser(data): return words, new_word +@input_parser +def bash_input_parser(data): + new_word = data.endswith('\n\n') + words = data.rstrip().splitlines() + return words, new_word + + @output_serializer def zsh_output_serializer(ans): lines = [] @@ -59,6 +66,16 @@ def zsh_output_serializer(ans): return '\n'.join(lines) +@output_serializer +def bash_output_serializer(ans): + lines = [] + for matches in ans.match_groups.values(): + for word in matches: + lines.append('COMPREPLY+=({})'.format(shlex.quote(word))) + # debug('\n'.join(lines)) + return '\n'.join(lines) + + def completions_for_first_word(ans, prefix, entry_points, namespaced_entry_points): cmds = ['@' + c for c in cmap] ans.match_groups['Entry points'] = {