#compdef pkg ## vim:ft=zsh ## pkg completion ## Daniel Friesel ## https://derf.homelinux.org/~derf/dotfiles/zsh/completions/_pkg ## see also: https://derf.homelinux.org/~derf/code/lighty-stats typeset expl function _pkg_action () { _wanted action expl 'action' \ compadd add install delete eval remove info list{,-all} \ local-update log pull push remote-update refresh status update upgrade } function _pkg_installed () { _wanted package expl 'local package' \ compadd $(pkg list) } function _pkg_all () { _wanted package expl 'package' \ compadd $(pkg list-all) } function _pkg_notinstalled () { _wanted package expl 'remote package' \ compadd $(diff <(pkg list) <(pkg list-all) | grep "^>" | cut -d " " -f 2) } if (( CURRENT == 2 )) { _pkg_action } elif (( CURRENT == 3 )) { case ${words[2]} in changelog|check|delete|log|pull|push|refresh|remove|status|upgrade) _pkg_installed ;; info) _pkg_all ;; add|install) _pkg_notinstalled ;; eval) _message 'shell code for evaluation' _wanted function expl 'internal function' \ compadd $(grep -E '^\S*\s*\(\)\s*{' =pkg | cut -d ' ' -f 1) \ $(grep -E 'function \S* (\(\) )?{' =pkg | cut -d ' ' -f 2) ;; *) _message 'no more arguments' ;; esac } elif [[ ${words[2]} = 'eval' ]] { _message 'shell code for evaluation' if (( CURRENT == 4 )) { case ${words[3]} in exec_hook|check_prereqs|*_collected|) _pkg_installed ;; esac } elif (( CURRENT == 5 )) { case ${words[3]} in exec_hook) _wanted hook expl 'package hook' \ compadd $(ls -1 ~/packages/${words[4]}/hooks 2> /dev/null) ;; esac } } else { _message 'no more arguments' }