#compdef emerge # $Id: _portage,v 3.4 2003/12/24 16:48:14 usata Exp usata $ # ZSH completion function for emerge # Author: baptux # Author: Mamoru KOMACHI _emerge () { local state if (( CURRENT == 2 ));then _arguments -s \ '*:*:->actions' \ "$common_args[@]" "$install_args[@]" && return 0 elif (( CURRENT > 2 ));then case "$words[2]" in unmerge|-C) _arguments -s \ '*:installed pkg:_unmerge' "$common_args[@]" && return 0 ;; clean|depclean|-c|help|-h|info|regen|sync|rsync|--searchdesc|-S|search|-s|inject|-j|prune|-P) ;; *) _arguments -s \ '*:*:->install_portage' \ "$common_args[@]" \ "$install_args[@]" && return 0 ;; esac fi while [[ -n "$state" ]]; do lstate=$state state='' case "$lstate" in actions) _alternative \ ':emerge actions:_actions' \ '*:portage:_listportage' ;; install_portage) _alternative \ '*:portage:_listportage' ;; esac done } #Function to only show installed packages "cat/name" _unmerge(){ installed_portage=(/var/db/pkg/*/*) installed_dir=/var/db/pkg/ installed_pkg=${(M)${${installed_portage//$installed_dir/$rem}%/}:#*-*} _tags -s installed_pkg && { compadd "$@" -k installed_pkg || compadd "$@" ${(kv)=installed_pkg} } } #Function to show all available portage names _listportage(){ portage_list="$portage_pkglist world system" _tags -s portage_list && { compadd "$@" -k portage_list || compadd "$@" ${(kv)=portage_list} } _path_files -/ -W "${portdir}" # XXX: If I add ${portdir_overlay} category completion won't work properly #[[ -n "${portdir_overlay}" ]] && _path_files -/ -W "${portdir_overlay}" _path_files -g \*.ebuild } common_args=( {'(-p)--pretend','(--pretend)-p'}'[simply display what would be done]' {'(-d)--debug','(--debug)-d'}'[Tells emerge to run the emerge command in debug mode]' ) install_args=( {'(--upgradeonly -U--update -u --quiet -q --onlydeps -o --oneshot --nospinner --noreplace -n --nodeps -O --noconfmem -D --deep --changelog --buildpkg -B -b --buildpkgonly --emptytree -e -f --fetchonly)-l','(--upgradeonly -U --update -u --quiet -q --onlydeps -o --nospinner --noreplace -n --nodeps -O --noconfmem -D --deep --emptytree -e -f --fetchonly -l --buildpkg -b -B --buildpkgonly )--changelog'}'[This will show the ChangeLog]' {'(-b --buildpkgonly -B --changelog -l)--buildpkg','(--changelog -l --buildpkg --buildpkgonly -B)-b'}'[Tells emerge to build binary packages]' {'(-B -b --buildpkg --changelog -l)--buildpkgonly','(--changelog -l --buildpkgonly --buildpkg -b)-B'}'[Tells emerge to only build binary packages]' {'(-D --changelog -l)--deep','(-l --changelog --deep)-D'}'[Consider the entire dependency tree of packages]' {'(-e -l --changelog)--emptytree','(--emptytree -l --changelog)-e'}'[Only consider glibc as installed packages]' {'(-f -l --changelog)--fetchonly','(-l --changelog --fetchonly)-f'}'[Just perform fetches for all packages]' '(-l --changelog)--noconfmem''[Causes portage to disregard merge records]' {'(--changelog -l -O)--nodeps','(--nodeps --changelog -l)-O'}'[Merges specified packages without merging dependencies]' {'(-l --changelog -n)--noreplace','(-l --changelog --noreplace)-n'}'[Skip packages already installed]' '(-l --changelog)--nospiner''[Disables the spinner for the session]' '(-l --changelog)--oneshot''[Do not add package to the world profile]' {'(--onlydeps --changelog -l)-o','(--changelog -o -l)--onlydeps'}'[Only merge (or pretend to merge) the dependencies]' {'(--quiet --changelog -l)-q','(-q --changelog -l)--quiet'}'[General outcome is a reduced or condensed output]' {'(--update --changelog -l)-u','(-u --changelog -l)--update'}'[Updates packages to the most recent version available]' {'(--upgradeonly --changelog -l)-U','(-U --changelog -l)--upgradeonly'}'[Do not update packages to a lower version]' {'(--verbose)-v','(-v)--verbose'}'[Tell emerge to run in verbose mode]' ) _options() { _arguments -s \ "$unmerge_args[@]" "$common_args[@]" "$install_args[@]" } _actions() { _values "emerge actions" \ 'sync[Initiates a portage tree update]' \ 'rsync[Initiates a portage tree update]' \ 'unmerge[Removes all matching packages]' \ 'search[Searches for matches]' \ 'regen[Causes portage to check and update the dependency cache]' \ 'prune[Removes all but the latest versions of matching packages]' \ 'inject[Portage thinks that this package is installed]' \ 'info[This is a list of information to include in bug reports]' \ 'help[Displays help]' \ 'depclean[Clean all packages that have no reason for being installed]'\ 'clean[Cleans the system by removing packages]' \ '-c[Cleans the system by removing packages]' \ '-h[Displays help]' \ '-i[Portage thinks that this package is installed]' \ '-P[Removes all but the latest versions of matching packages]' \ '-s[Searches for matches]' \ '-S[Matches the search string against the description field]' \ '--searchdesc[Matches the search string against the description field]' \ '-C[Removes all matching packages]' \ 'world[Represente all packages in the world profiles]' \ 'system[Represent all the system packages]' } #Reading informations from make.conf makeconf=(${${(f)"$(