summaryrefslogtreecommitdiff
path: root/Completion/Linux
diff options
context:
space:
mode:
authorTanaka Akira <akr@users.sourceforge.net>1999-09-06 09:04:47 +0000
committerTanaka Akira <akr@users.sourceforge.net>1999-09-06 09:04:47 +0000
commit4a198fed6e426cd6084967a9b51849b0862f93e4 (patch)
tree1f5e9e0e9b8fdf09fd16e505372b8de7e56861ad /Completion/Linux
parent4a34edc4855ef9d6a74c4658a2ed4f0f8bc1f130 (diff)
downloadzsh-4a198fed6e426cd6084967a9b51849b0862f93e4.tar.gz
zsh-4a198fed6e426cd6084967a9b51849b0862f93e4.zip
Initial revision
Diffstat (limited to 'Completion/Linux')
-rw-r--r--Completion/Linux/_rpm215
1 files changed, 215 insertions, 0 deletions
diff --git a/Completion/Linux/_rpm b/Completion/Linux/_rpm
new file mode 100644
index 000000000..7fdc80ab0
--- /dev/null
+++ b/Completion/Linux/_rpm
@@ -0,0 +1,215 @@
+#compdef rpm
+
+# This uses `_arguments' in a state-machine kind of way. These states
+# have names and before executing the default action for such a state
+# we try to call a function with the name `_rpm_<state>'. If such a
+# function exists, we return with it's return status immediatly. This
+# allows users to override the default completions by simply defining
+# these functions.
+# The states (and possible values for the `<state>' above) are:
+#
+# query
+# complete for `rpm -q' query
+# verify
+# complete for `rpm --verify'
+# install
+# complete for `rpm -i' or `rpm --install'
+# upgrade
+# complete for `rpm -U' or `rpm --upgrade'
+# uninstall
+# complete for `rpm -e' or `rpm --erase'
+# build_b
+# complete for `rpm -bx' (the stage `x' is already completed)
+# build_t
+# complete for `rpm -tx' (the stage `x' is already completed)
+# sigcheck
+# complete for `rpm --sigcheck'
+# rebuild
+# complete for `rpm --rebuild'
+# package
+# complete a RPM package name
+# package_file
+# complete a RPM package file name
+# package_or_file
+# the previous two together
+# tags
+# complete a tag name
+# capability
+# complete a capability
+# relocate
+# complete a `old=new' pair of paths
+
+local ret=1 tmp expl
+
+# Used by `_arguments', made local here.
+
+local state lstate line
+tyeset -A options
+
+state=''
+
+# Do simple completions or get the first state.
+
+_arguments \
+ '--rcfile:resource file:_files' \
+ '--ftpproxy:FTP proxy server:_hosts' \
+ '--ftpport:FTP port number:' \
+ '-q:*:query:->query' \
+ -{V,v,vv,y,-{setperms,setugids,querytags,initdb,showrc}} \
+ '-pipe:*:pipe command:_command_names -e' \
+ '--verify:*:verify:->verify' \
+ -{i,-install}':*:install:->install' \
+ -{U,-upgrade}':*:upgrade:->upgrade' \
+ -{e,-erase}':*:uninstall:->uninstall' \
+ -'b+:build stage:((p\:execute\ \%prep\ stage l\:do\ a\ list\ check c\:execute\ build\ stage i\:execute\ install\ stage b\:build\ a\ binary\ package a\:build\ binary\ and\ source\ packages)):*:build:->build_b' \
+ -'t+:build stage:((p\:execute\ \%prep\ stage l\:do\ a\ list\ check c\:execute\ build\ stage i\:execute\ install\ stage b\:build\ a\ binary\ package a\:build\ binary\ and\ source\ packages)):*:build:->build_t' \
+ --{rebuild,rmsource,recompile,resign,addsign}':*:RPM package:->package' \
+ -{K,-checksig}':*:sigcheck:->sigcheck' \
+ '--rebuilddb:*:rebuild:->rebuild' && ret=0
+
+# As long as we have a state name...
+
+while [[ -n "$state" ]]; do
+
+ # First try to call a user-defined function.
+
+ funcall ret _rpm_$state && return ret
+
+ # Copy the state and reset `state', to simplify the test above.
+
+ lstate="$state"
+ state=''
+ tmp=()
+
+ # Dispatch...
+
+ case "$lstate" in
+ query)
+ _arguments \
+ -{v,vv} \
+ '--rcfile:resource file:_files' \
+ '--ftpproxy:FTP proxy server:_hosts' \
+ '--ftpport:FTP port number:' \
+ '--root:RPM root directory:_files -/' \
+ '--dbpath:RPM database path:_files -/' \
+ '--queryformat:RPM query format:->tags' \
+ '-f:file:_files' \
+ '-p:RPM package file:->package_file' \
+ '--triggeredby:RPM package:->package' \
+ '--whatprovides:RPM capability:->capability' \
+ '--whatrequires:RPM capability:->capability' \
+ '*:RPM package:->package_or_file' && ret=0
+ ;;
+ verify)
+ _arguments \
+ -{v,vv} \
+ '--rcfile:resource file:_files' \
+ '--ftpproxy:FTP proxy server:_hosts' \
+ '--ftpport:FTP port number:' \
+ --no{deps,md5,files} \
+ '--root:RPM root directory:_files -/' \
+ '--dbpath:RPM database path:_files -/' \
+ '*:RPM package:->package' && ret=0
+ ;;
+ upgrade)
+ tmp=( --oldpackage )
+ ;&
+ install)
+ _arguments "$tmp[@]" \
+ -{v,vv} \
+ '--rcfile:resource file:_files' \
+ '--ftpproxy:FTP proxy server:_hosts' \
+ '--ftpport:FTP port number:' \
+ -{-{badreloc,excludedocs,force,hash,allfiles,ignorearch,ignoreos,includedocs,justdb,nodeps,noorder,noscripts,notriggers,percent,replacefiles,replacepkgs,test},h} \
+ '--relocate:relocate:->relocate' \
+ '--prefix:package prefix directory:_files -/' \
+ '--root:RPM root directory:_files -/' \
+ '--dbpath:RPM database path:_files -/' \
+ '*:pkg file:->package_file' && ret=0
+ ;;
+ uninstall)
+ _arguments \
+ -{v,vv} \
+ '--rcfile:resource file:_files' \
+ '--ftpproxy:FTP proxy server:_hosts' \
+ '--ftpport:FTP port number:' \
+ --{allmatches,justdb,nodeps,noorder,noscripts,notriggers} \
+ '--root:RPM root directory:_files -/' \
+ '--dbpath:RPM database path:_files -/' \
+ '*:RPM package:->package' && ret=0
+ ;;
+ build_b)
+ tmp=( '*:RPM package:->package' )
+ ;&
+ build_t)
+ (( $#tmp )) || tmp=( '*:tar file:_files -g \*.\(\#i\)tar\(.\*\|\)' )
+
+ _arguments \
+ -{v,vv} \
+ '--rcfile:resource file:_files' \
+ '--ftpproxy:FTP proxy server:_hosts' \
+ '--ftpport:FTP port number:' \
+ --{short-circuit,clean,rmsource,sign,test} \
+ '--buildroot:build root directory:_files -/' \
+ '--buildarch:architecture for which to build:' \
+ '--buildos:ositecture for which to build:' \
+ '--timecheck:time check (seconds):' "$tmp[1]" && ret=0
+ ;;
+ sigcheck)
+ _arguments \
+ -{v,vv} \
+ '--rcfile:resource file:_files' \
+ '--ftpproxy:FTP proxy server:_hosts' \
+ '--ftpport:FTP port number:' \
+ --no{pgp,md5} \
+ '*:RPM package file:->package_or_file' && ret=0
+ ;;
+ rebuild)
+ _arguments \
+ -{v,vv} \
+ '--rcfile:resource file:_files' \
+ '--ftpproxy:FTP proxy server:_hosts' \
+ '--ftpport:FTP port number:' \
+ '--root:RPM root directory:_files -/' \
+ '--dbpath:RPM database path:_files -/' \
+ '*:RPM source package file:->package_file' && ret=0
+ ;;
+ package_or_file)
+ state=package_file
+ ;&
+ package)
+ _description expl 'RPM package'
+ compadd "$expl[@]" -M 'r:|-=* r:|=*' - $(rpm -qa) && ret=0
+ ;;
+ package_file)
+ if compset -P ftp:; then
+ _hosts -S/ && ret=0
+ else
+ _files -g '*.(#i)rpm' && ret=0
+ fi
+ ;;
+ tags)
+ if compset -P '*\{'; then
+ _description expl 'RPM tag'
+ compadd "$expl[@]" -M 'm:{a-z}={A-Z}' -S '}' - \
+ "${(@)${(@f)$(rpm --querytags)}#RPMTAG_}" && ret=0
+ else
+ _message 'RPM format'
+ fi
+ ;;
+ capability)
+ _message 'RPM capability'
+ ;;
+ relocate)
+ if compset -P '*\='; then
+ _description expl 'new path'
+ else
+ _description expl 'old path'
+ fi
+
+ _files "$expl[@]" -/ && ret=0
+ ;;
+ esac
+done
+
+return ret