Meta: Add basic Zsh completions for serenity.sh

This patch adds a basic Zsh completion script for the commands and
targets provided by Meta/serenity.sh. There's some room for improvement
here, e.g. we could provide completion for available CMake targets -
currently completion stops after serenity.sh <command> <target>.

You can enable it by adding this to your .zshrc before completions are
loaded:

    fpath=($SERENITY_SOURCE_DIR/Meta/ShellCompletions/zsh $fpath)
This commit is contained in:
Linus Groh 2021-04-22 08:43:36 +02:00
parent a5625686cb
commit 696f23d7a0
2 changed files with 64 additions and 0 deletions

1
.gitignore vendored
View file

@ -4,6 +4,7 @@
!Makefile
!LICENSE
!Base/**
!Meta/ShellCompletions/**
*.o
*.ao

View file

@ -0,0 +1,63 @@
#compdef serenity serenity.sh
_serenity() {
local args
args=(
'1:command:->commands'
'2:target:->targets'
'*:: :->args'
)
local commands
commands=(
'build'
'install'
'image'
'run'
'gdb'
'test'
'delete'
'recreate'
'rebuild'
'kaddr2line'
'addr2line'
'rebuild-toolchain'
'rebuild-world'
)
local targets
targets=(
'i686:Target i686 (default)'
'x86_64:Target x86_64'
'lagom:Target host machine'
)
_arguments -C -S "$args[@]"
local command
command="$line[1]"
local target
target="$line[2]"
case "$state" in
commands)
_describe 'command' commands
;;
targets)
case "$command" in
install|image|kaddr2line|rebuild-toolchain|rebuild-world)
# lagom target is not supported for these, remove from targets
targets[$targets[(i)lagom]]=()
;;
esac
_describe 'target' targets
;;
args)
;;
esac
return 0
}
_serenity