#autoload # Usage: _deb_packages expl... avail|installed|uninstalled _deb_packages_updage_avail () { if (( ! $+_deb_packages_cache_uninstalled )); then _deb_packages_cache_avail=( ${(f)"$(apt-cache dumpavail | awk '/^Package:/ { print $2 }')"} ) fi cachevar=_deb_packages_cache_avail } _deb_packages_updage_installed () { if (( ! $+_deb_packages_cache_installed )); then _deb_packages_cache_installed=( ${${${(f)"$(dpkg --get-selections)"}:#*deinstall}%% *} ) fi cachevar=_deb_packages_cache_installed } _deb_packages_updage_uninstalled () { _deb_packages_updage_avail _deb_packages_updage_installed if (( ! $+_deb_packages_cache_uninstalled )); then _deb_packages_cache_uninstalled=( ${_deb_packages_cache_avail:#${(j:|:)~${_deb_packages_cache_installed:q}}} ) fi cachevar=_deb_packages_cache_uninstalled } _deb_packages () { local command="$argv[$#]" expl cachevar [[ "$command" = (installed|uninstalled|avail) ]] || { _message "_deb_packages:unknown command: $command" return } expl=("${(@)argv[1,-2]}") _deb_packages_updage_$command _tags packages && compadd "$expl[@]" - "${(e):-"\${(@)$cachevar}"}" } _deb_packages "$@"