From 696f23d7a0f57d9920ecfdbc86406fb553242777 Mon Sep 17 00:00:00 2001 From: Linus Groh Date: Thu, 22 Apr 2021 08:43:36 +0200 Subject: [PATCH] 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 . You can enable it by adding this to your .zshrc before completions are loaded: fpath=($SERENITY_SOURCE_DIR/Meta/ShellCompletions/zsh $fpath) --- .gitignore | 1 + Meta/ShellCompletions/zsh/_serenity | 63 +++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 Meta/ShellCompletions/zsh/_serenity diff --git a/.gitignore b/.gitignore index 078038e3996..b5260309e18 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ !Makefile !LICENSE !Base/** +!Meta/ShellCompletions/** *.o *.ao diff --git a/Meta/ShellCompletions/zsh/_serenity b/Meta/ShellCompletions/zsh/_serenity new file mode 100644 index 00000000000..880fd29fb07 --- /dev/null +++ b/Meta/ShellCompletions/zsh/_serenity @@ -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