From db68dff3febb8a3a7b4ec158957a8ce260fe1812 Mon Sep 17 00:00:00 2001 From: Robert David Date: Sat, 9 Jul 2011 22:29:55 +0200 Subject: [PATCH] Add ZSH completion function --- Makefile | 4 +++ conf/_equo | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 conf/_equo diff --git a/Makefile b/Makefile index b062e72ef..a9cb87267 100644 --- a/Makefile +++ b/Makefile @@ -88,6 +88,10 @@ equo-install: # copy man page install -m 644 docs/man/man1/equo.1 $(DESTDIR)$(PREFIX)/share/man/man1/ + # copy zsh completion + mkdir -p $(DESTDIR)$(PREFIX)/share/zsh/site-functions + install -m 644 conf/_equo $(DESTDIR)$(PREFIX)/share/zsh/site-functions/ + updates-daemon-install: diff --git a/conf/_equo b/conf/_equo new file mode 100644 index 000000000..e513b71fd --- /dev/null +++ b/conf/_equo @@ -0,0 +1,102 @@ +#compdef equo + +local curcontext="$curcontext" state line cmds packages mirrors +typeset -A opt_args + + +_equo_get_mirrors() +{ + mirrors=( ${(f)"$(equo status | grep Repository\ name | cut -d: -f2 | sed 's/^\ *//')"} ) + _describe -t packages 'mirrors' mirrors +} + +_equo_get_cmds() +{ + cmds=( ${(f)"$(equo $1 --help | tr "\t" ":" | grep "^:[^:]" | sed 's/^:\([^:\ ]*\)[^:]*:*/\1:/')"} ) + _describe -t commands 'command params' cmds +} + +_equo_get_installed_packages() +{ + packages=( ${(f)"$(equo query list installed | equo query list installed | sed 's/.*\///')"} ) + _describe -t packages 'installed packages' packages +} + +_equo_get_available_packages() +{ + packages=( ${(f)"$(equo search $1 | grep Package |sed 's/.*\/\([^\ ]*\).*/\1/')"} ) + _describe -t packages 'available packages' packages +} + +_arguments -C \ + "--help[print help]" \ + "--version[print version]" \ + "--nocolor[dont use colors]" \ + "--color[use colors(default)]" \ + "--bashcomp[print bash completion script]"\ + '1:command:->cmds' \ + '*:subcommand:->args' + +case $state in + cmds) + cmds=( ${(f)"$(equo --help |tr "\t" ":" | grep "^:[^:-]" | sed 's/^:\(\w*\).*:\+/\1:/')"} ) + _describe -t commands 'equo command' cmds + ;; + args) + case $line[1] in + remove|config) + _equo_get_cmds $line[1] && return 0 + _equo_get_installed_packages + ;; + install|fetch|search|source|mask|unmask) + _equo_get_cmds $line[1] && return 0 + _equo_get_available_packages $line[-1] + ;; + repo) + case $line[2] in + enable|disable|remove|mirrorsort) + _equo_get_mirrors + ;; + add|merge) + ;; + *) + _equo_get_cmds $line[1] + ;; + esac + ;; + query) + case $line[2] in + changelog|revdeps|files|needed|removal|graph|revgraph) + _equo_get_installed_packages + ;; + list) + case $line[3] in + available) + _equo_get_mirrors + ;; + installed) + ;; + *) + cmds=( ${(f)"$(equo query list --help |tr "\t" ":" | grep "^::[^:]" | sed 's/^::\([^:\ ]*\)[^:]*:*/\1:/')"} ) + _describe -t commands 'command params' cmds + ;; + esac + ;; + belongs|description|license|mimetype|asociate|orphans|required|sets|slots|tags) + ;; + *) + _equo_get_cmds $line[1] + ;; + esac + ;; + notice) + _equo_get_mirrors + ;; + cleanup|status) + ;; + *) + _equo_get_cmds $line[1] + ;; + esac + ;; +esac