#compdef port # ------------------------------------------------------------------------------ # Description # ----------- # # Completion script for MacPorts (http://www.macports.org). # # ------------------------------------------------------------------------------ # Authors # ------- # # * Matt Cable # * Sorin Ionescu # * Aljaž Srebrnič # # ------------------------------------------------------------------------------ _port() { # Variables for _argument typeset -A opt_args local context state state_descr line local actions pseudo_common pseudo_advanced select_options port_prefix port_prefix=$(which port | sed 's|/bin/port||') actions=( activate archive archivefetch build cat cd checksum clean configure contents deactivate dependents deps destroot dir distcheck distfiles dmg dpkg echo edit exit extract fetch file gohome help info install installed lint list livecheck load location log logfile mdmg mirror mpkg notes outdated patch pkg platform portpkg provides quit rdependents rdeps rev-upgrade rpm search select selfupdate setrequested space srpm submit sync test unarchive uninstall unload unsetrequested upgrade url usage variants version work ) pseudo_common=(all current active inactive actinact installed uninstalled outdated obsolete requested unrequested leaves) pseudo_advanced=('variants:' 'variant:' 'description:' 'depends:' 'depends_lib:' 'depends_run:' 'depends_build:' 'depends_fetch:' 'depends_extract:' 'portdir:' 'homepage:' 'epoch:' 'platforms:' 'platform:' 'name:' 'long_description:' 'maintainers:' 'maintainer:' 'categories:' 'category:' 'version:' 'revision:' 'license:') select_options=( '--list:List available versions for the group' '--set:Select the given version for the group' '--show:Show which version is currently selected for the group (default if none given)' ) local cache_policy zstyle -s ":completion:${curcontext}:" cache-policy cache_policy if [[ -z "$cache_policy" ]]; then zstyle ":completion:${curcontext}:" cache-policy _port_caching_policy fi _arguments -s -C \ '-v[verbose mode (generate verbose messages)]' \ '-d[debug mode (generate debugging messages, implies -v)]' \ '-q[quiet mode (suppress messages)]' \ "-n[don't upgrade dependencies (affects upgrade and install)]" \ "-R[also upgrade dependents (only affects upgrade) - note that this does not upgrade dependents' dependencies]" \ '-u[uninstall non-active ports when upgrading and uninstalling]' \ '-f[force mode (ignore state file)]' \ '-o[honor state files even if the Portfile has been modified since (called -o because it used to mean "older")]' \ '-s[source-only mode (build and install from source, do not attempt to fetch binary archives)]' \ '-b[binary-only mode (build and install from binary archives, ignore source, abort if no archive available)]' \ '-c[autoclean mode (execute clean after install)]' \ "-k[keep mode (don't autoclean after install)]" \ '-D[specify portdir]' \ '-F[Read and process the file of commands specified by the argument.]' \ '-p[Despite any errors encountered, proceed to process multiple ports and commands.]' \ '-y[Perform a dry run.]' \ '-t[enable trace mode debug facilities on platforms that support it (Mac OS X).]' \ "1:Port actions:($actions)" \ '*:extra:_port_dispatch' \ && return 0 } _port_dispatch() { case "$words[2]" in provides) _files ;; search) _message 'pattern' ;; help) _describe -t actions 'Port actions' actions ;; select) _call_function - _port_select ;; contents|deactivate|setrequested|space|uninstall|unsetrequested) # Cache the list of installed ports. if ( [[ ${+_port_installed_packages} -eq 0 ]] || _cache_invalid PORT_INSTALLED_PACKAGES ) && ! _retrieve_cache PORT_INSTALLED_PACKAGES; then _port_installed_packages=( $(_call_program path-all "port echo all") ) _store_cache PORT_INSTALLED_PACKAGES _port_installed_packages fi _alternative \ "ports:Installed ports:($_port_installed_packages)" \ "pseudo-common:Common Pseudo-portnames:($pseudo_common)" \ "pseudo-advanced:Advanced Pseudo-portnames:($pseudo_advanced)" ;; upgrade) local outdated_packages outdated_packages=("${(f)$(port outdated | sed -e '1 d' -e 's/^\([[:graph:]]*\).*/\1/')}") _describe "Outdated ports" outdated_packages ;; *) # Cache the list of all ports. if ( [[ ${+_port_available_packages} -eq 0 ]] || _cache_invalid PORT_AVAILABLE_PACKAGES ) && ! _retrieve_cache PORT_AVAILABLE_PACKAGES; then _port_available_packages=( $(_call_program path-all "port echo all") ) _store_cache PORT_AVAILABLE_PACKAGES _port_available_packages fi _alternative \ "ports:Available ports:($_port_available_packages)" \ "pseudo-common:Common Pseudo-portnames:($pseudo_common)" \ "pseudo-advanced:Advanced Pseudo-portnames:($pseudo_advanced)" ;; esac } _port_select() { if (( CURRENT == 3 )); then _describe 'Port select options' select_options elif (( CURRENT == 4 )); then local select_group select_group=() for f in $port_prefix/etc/select/*; do select_group+=$(basename $f) done _describe "Port select groups" select_group elif [[ $CURRENT -eq 5 && $words[3] == '--set' ]]; then local select_variants select_variants=("${(f)$(port select --list $words[4] | sed -e '1 d' -e 's/^[ \t]*//' -e 's/ (active)$//')}") _describe "Port select group $words[4] variants" select_variants fi } _port_caching_policy() { local reg_time comp_time reg_time=$(stat -c '%Z' $port_prefix/var/macports/registry/registry.db) comp_time=$(stat -c '%Z' $1) return $(( reg_time < comp_time )) } _port "$@"