diff --git a/README.md b/README.md index 49971d5..cd75823 100644 --- a/README.md +++ b/README.md @@ -208,7 +208,6 @@ topgrade ## TODO -* add zsh completion * add license * in outermost Cargo.toml, add categories, keywords, readme diff --git a/_completion.zsh b/_completion.zsh new file mode 100644 index 0000000..6b547b2 --- /dev/null +++ b/_completion.zsh @@ -0,0 +1,64 @@ +#compdef pacdef + +_pacdef() { + integer ret=1 + local line + function _actions { + local -a actions + actions=( + 'clean:uninstall packages not managed by pacdef' + 'edit:edit an imported group file' + 'groups:show names of imported groups' + 'import:import a new group file' + 'new:create a new group file' + 'remove:remove a group file' + 'review:review unmanaged packages' + 'search:show the group containing a package' + 'show:show packages under an imported group' + 'sync:install all packages from imported groups' + 'unmanaged:show explicitly installed packages not managed by pacdef' + 'version:show version info' + ) + _describe 'action' actions + } + + _arguments \ + "1: :_actions" \ + "*::arg:->args" + + if [ -z "${XDG_CONFIG_HOME}" ]; then + GROUPDIR="~/.config/pacdef/groups" + else + GROUPDIR="${XDG_CONFIG_HOME}/pacdef/groups" + fi + + + case $line[1] in + edit) + _arguments "1:group file:_files -W '$GROUPDIR'" + ;; + import) + _arguments "*:new group file(s):_files" + ;; + new) + _arguments "*:new group file(s):" + ;; + search) + _arguments "1:package:" + ;; + show) + _arguments "1:group file:_files -W '$GROUPDIR'" + ;; + remove) + _arguments "*:group file:_files -W '$GROUPDIR'" + ;; + "") ;; + *) + _message "no more arguments" + ;; + esac + + return ret +} + +_pacdef