summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Borzenkov <bor@users.sourceforge.net>2002-05-08 09:18:12 +0000
committerAndrey Borzenkov <bor@users.sourceforge.net>2002-05-08 09:18:12 +0000
commite484b0f83ca9a795429caee90550955ac5544926 (patch)
tree34649b241a045c325ab86a2dd8b84e62a7bcbca6
parent42080a7fb93b4457f0dd4c8ce28398001738490a (diff)
downloadzsh-e484b0f83ca9a795429caee90550955ac5544926.tar.gz
zsh-e484b0f83ca9a795429caee90550955ac5544926.zip
17075, 17076: _urpmi and chkconfig/services
-rw-r--r--ChangeLog14
-rw-r--r--Completion/Mandrake/Command/_urpmi272
-rw-r--r--Completion/Redhat/Command/.distfiles1
-rw-r--r--Completion/Redhat/Command/_service22
-rw-r--r--Completion/Unix/Command/_chkconfig7
-rw-r--r--Completion/Unix/Command/_init_d11
-rw-r--r--Completion/Unix/Type/.distfiles2
-rw-r--r--Completion/Unix/Type/_services23
-rw-r--r--Src/Zle/complete.mdd2
9 files changed, 230 insertions, 124 deletions
diff --git a/ChangeLog b/ChangeLog
index e0b38d5dc..21ff75dcc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,9 +2,19 @@
* 17080: Doc/Zsh/compsys.yo: clarify tag-order style usage
+ * 17076: Completion/Redhat/Command/.distfiles,
+ Completion/Redhat/Command/_service, Completion/Unix/Command/_chkconfig,
+ Completion/Unix/Command/_init_d, Completion/Unix/Type/.distfiles,
+ Completion/Unix/Type/_services: use new helper _services to complete
+ init/xinetd services; make chkconfig use it; completion of
+ service command
+
+ * 17075: Completion/Mandrake/Command/_urpmi: _urpmi
+ completion update
+
* 17074: Completion/Linux/Command/.distfiles,
- Completion/Linux/Command/_mondo: mondoarchive completion
- (with typo correction from Bart)
+ Completion/Linux/Command/_mondo, Src/Zsh/complete.mdd:
+ mondoarchive completion (with typo correction from Bart)
* unposted: .cvsignore: add autom4te.cache. Looks like
autoconf-2.53 generates it for whatever reason
diff --git a/Completion/Mandrake/Command/_urpmi b/Completion/Mandrake/Command/_urpmi
index 76a5375b6..0f39f8635 100644
--- a/Completion/Mandrake/Command/_urpmi
+++ b/Completion/Mandrake/Command/_urpmi
@@ -1,118 +1,170 @@
-#compdef urpmi urpmi.addmedia urpmi.removemedia urpmi.update
+#compdef urpme urpmi urpmi.addmedia urpmi.removemedia urpmi.update urpmq
_urpmi_cache_policy() {
- local -a synthesis
- local i
- synthesis=(/var/lib/urpmi/synthesis.*)
- for i in $synthesis; do
- [[ -e "$1" && -e "$i" && "$1" -nt "$i" ]] && return 1
- done
- return 0
+ local -a synthesis
+ local i
+ synthesis=(/var/lib/urpmi/synthesis.*)
+ for i in $synthesis; do
+ [[ -e "$1" && -e "$i" && "$1" -nt "$i" ]] && return 1
+ done
+ return 0
}
+_urpmi_media() {
+ local source media brace expl
+ local -a all_sources
+
+ [[ -f /etc/urpmi/urpmi.cfg ]] || return 1
+
+ while read source media brace; do
+ [[ "$brace" != "{" ]] && continue
+ all_sources=("$all_sources[@]" $source)
+ done < /etc/urpmi/urpmi.cfg
+
+ _values -s , 'urpmi media' "$all_sources[@]"
+}
+
+_urpmi_rpms() {
+ local pkg ret=1 expl
+
+ _tags rpms files
+
+ while _tags; do
+ if _requested rpms expl 'urpmi RPMs'; then
+ local -a synthesis pkgs
+ synthesis=(/var/lib/urpmi/synthesis.*(N))
+ if [[ $#synthesis -gt 0 ]]; then
+ if _cache_invalid _urpmi_rpms || ! _retrieve_cache _urpmi_rpms; then
+ pkgs=($(zcat $synthesis | \
+ grep @info@ | cut -d @ -f 3 | sed -e 's/\.[^.]*$//'))
+ _store_cache _urpmi_rpms pkgs
+ fi
+ compadd "$expl[@]" -a pkgs && ret=0
+ fi
+ fi
+
+ _requested files expl '(S)RPM files' \
+ _files -g '*.(#i)rpm' && ret=0
+ done
+
+ return $ret
+}
+
+_urpmi_media_url() {
+ local expl ret=1
+
+ if compset -P file:// || compset -P removable://; then
+ _files "$@" -W / -/ && ret=0
+ elif [[ -prefix '(ftp|http)://' ]]; then
+ _urls "$@" && ret=0
+ else
+ _wanted mediatype expl 'type of media' \
+ compadd "$@" -- file:// http:// ftp:// removable:// && ret=0
+ fi
+
+ return $ret
+}
+
+_urpme_package() {
+ local -a _rpms
+ _rpms=( $(_call_program packages rpm -qa 2>/dev/null) )
+ compadd "$@" -a -- _rpms
+}
+
_urpmi() {
- local expl state curcontext="$curcontext" line ret=1
- typeset -A opt_args
-
- case "$service" in
- urpmi.addmedia )
- _arguments -C -A '-*' \
- "(--wget)--curl[use curl to retrieve distant files]" \
- "(:)--distrib[automatically create all media from an installation medium]:media URL:->media_url" \
- "--update[mark as update media]" \
- "(--curl)--wget[use wget to retrieve distant files]" \
- "-c[clean headers cache directory]" \
- "-f[force generation of hdlist files]" \
- "-h[try to find and use synthesis or hdlist file]" \
- "(--distrib):name of media: " \
- "(--distrib):media URL:->media_url" \
- "(--distrib): :(with)" \
- "(--distrib):relative path to hdlist file: " \
- && ret=0
- ;;
- urpmi.removemedia )
- _arguments -C -A '-*' \
- "(:)-a[select all media]" \
- "(-a)"{,\*}": :->urpmi_media" \
- && ret=0
- ;;
- urpmi.update )
- _arguments -C -A '-*' \
- "(--wget)--curl[use curl to retrieve distant files]" \
- "(--curl)--wget[use wget to retrieve distant files]" \
- "(:)-a[select all non-removable media]" \
- "-c[clean /var/cache/urpmi/headers on exit]" \
- "-d[force complete computation of depslist.ordered file]" \
- "*-f[force generation of hdlist files]" \
- "(-a)"{,\*}": :->urpmi_media" \
- && ret=0
- ;;
- urpmi )
- _arguments -C -A '-*' \
- "(: -)--help[print usage information]" \
- "(--help)--allow-medium-change[allow change of removable media]" \
- "(--help)--auto[do not ask any questions]" \
- "(--help)--auto-select[select the packages to update]" \
- "(--help -X)--best-output[automatically select text or X interface]" \
- "(--help)--complete[use parsehdlist server to complete selection]" \
- "(--help --wget)--curl[use curl to retrieve distant files]" \
- "(--help)--force[proceed even when some packages do not exist]" \
- "(--help)--update[use only update media]" \
- "(--help --curl)--wget[use wget to retrieve distant files]" \
- "(--help)-a[select all packages matching command line]" \
- "(--help -m -M)-m[choose minimum closure of requires (default)]" \
- "(--help -m -M)-M[choose maximum closure of requires]" \
- "(--help)-p[allow search in provides]" \
- "(--help -q -v)-q[be quiet]" \
- "(--help -q -v)-v[verbose mode]" \
- "(--help --best-output)-X[use X interface]" \
- "(--help)"{,\*}": :->urpmi_rpms" \
- && ret=0
- ;;
- esac
-
- case "$state" in
- media_url )
- if compset -P file:// || compset -P removable://; then
- _files -W / -/ && ret=0
- elif [[ -prefix '(ftp|http)://' ]]; then
- _urls && ret=0
- else
- _wanted urpmi_media_type expl 'type of media' \
- compadd -- file:// http:// ftp:// removable:// && ret=0
- fi
- ;;
- urpmi_media )
- local source media brace ret=1
- while read source media brace; do
- [[ "$brace" != "{" ]] && continue
- _wanted urpmi_media expl 'available media' \
- compadd -- "$source"
- ret=0
- done < /etc/urpmi/urpmi.cfg
- ;;
- urpmi_rpms )
- local pkg foo expl
- local -a pkgs
- local -a synthesis
- synthesis=(/var/lib/urpmi/synthesis.*(N))
- (( $#synthesis > 0 )) && {
- if _cache_invalid _urpmi_rpms || ! _retrieve_cache _urpmi_rpms; then
- pkgs=($(zcat $synthesis | \
- grep @info@ | cut -d @ -f 3 | sed -e 's/\.[^.]*$//'))
- _store_cache _urpmi_rpms pkgs
- fi
- }
- (( $#pkgs > 0 )) && \
- _wanted urpmi_rpms expl 'urpmi RPMs to install' \
- compadd -a pkgs && ret=0
- (( $EUID == 0 )) && \
- _wanted urpmi_files expl 'RPM files to install' \
- _files -g '*.(#i)rpm' && ret=0
- ;;
- esac
-
- return $ret
+ local state context line ret=1
+ typeset -A opt_args
+
+ case "$service" in
+ urpme )
+ _arguments -A '-*' \
+ "--auto[do not ask any question]" \
+ "-a[find all matches]" \
+ ": :_urpme_package"
+ ;;
+ urpmi.addmedia )
+ _arguments -A '-*' \
+ "(--wget)--curl[use curl to retrieve distant files]" \
+ "(:)--distrib[automatically create all media from an installation medium]:media URL:_urpmi_media_url" \
+ "--update[mark as update media]" \
+ "(--curl)--wget[use wget to retrieve distant files]" \
+ "-c[clean headers cache directory]" \
+ "-f[force generation of hdlist files]" \
+ "-h[try to find and use synthesis or hdlist file]" \
+ "(--distrib):name of media: " \
+ "(--distrib):media URL:_urpmi_media_url" \
+ "(--distrib): :(with)" \
+ "(--distrib):relative path to hdlist file: " \
+ && ret=0
+ ;;
+ urpmi.removemedia )
+ _arguments -A '-*' \
+ "(:)-a[select all media]" \
+ "(-a)"{,\*}": :_urpmi_media" \
+ && ret=0
+ ;;
+ urpmi.update )
+ _arguments -A '-*' \
+ "(--wget)--curl[use curl to retrieve distant files]" \
+ "(--curl)--wget[use wget to retrieve distant files]" \
+ "(:)-a[select all non-removable media]" \
+ "-c[clean /var/cache/urpmi/headers on exit]" \
+ "-d[force complete computation of depslist.ordered file]" \
+ "*-f[force generation of hdlist files]" \
+ "(-a)"{,\*}": :_urpmi_media" \
+ && ret=0
+ ;;
+ urpmi )
+ _arguments -A '-*' \
+ "(: -)--help[print usage information]" \
+ "(--help)--allow-medium-change[allow change of removable media]" \
+ "(--help)--auto[do not ask any questions]" \
+ "(--help)--auto-select[select the packages to update]" \
+ "(--help -X)--best-output[automatically select text or X interface]" \
+ "(--help)--complete[use parsehdlist server to complete selection]" \
+ "(--help --wget)--curl[use curl to retrieve distant files]" \
+ "(--help)--force[proceed even when some packages do not exist]" \
+ "(--help --fuzzy -z)"{--fuzzy,-y}"[return all matches even if exact match exists]" \
+ "(--help)--media[use only the media listed by comma]: :_urpmi_media" \
+ "(--help)--noclean[do not clean RPM cache]" \
+ "(--help --src -s)"{--src,-s}"[next package is source package]" \
+ "(--help)--update[use only update media]" \
+ "(--help --curl)--wget[use wget to retrieve distant files]" \
+ "(--help)-a[select all packages matching command line]" \
+ "(--help -m -M)-m[choose minimum closure of requires (default)]" \
+ "(--help -m -M)-M[choose maximum closure of requires]" \
+ "(--help)-P[do not search in provides]" \
+ "(--help -q -v)-q[be quiet]" \
+ "(--help -q -v)-v[verbose mode]" \
+ "(--help --best-output)-X[use X interface]" \
+ "(--help)"{,\*}": :_urpmi_rpms" \
+ && ret=0
+ ;;
+ urpmq )
+ _arguments -A '-*' \
+ "(--help -h)--auto-select[automatically select packages for upgrading the system]" \
+ "(--help -h)--force[ignore non-existent packages]" \
+ "(--help -h --fuzzy -z)"{--fuzzy,-y}"[return all matches even if exact match exists]" \
+ "(--help -h)--headers[extract headers for package listed from urpmi db to stdout]" \
+ "(--help -h)--media[use only the media listed by comma]: :_urpmi_media" \
+ "(--help -h)--sources[show full path to package file]" \
+ "(--help -h --src -s)"{--src,-s}"[next package is source package]" \
+ "(--help -h)--update[use only update media]" \
+ "(--help -h -c -p -P)-c[choose complete method for resolving requires closure]" \
+ "(--help -h)-d[show package depndencies]" \
+ "(--help -h)-f[print version, release and arch with name]" \
+ "(--help -h)-g[print groups too with name]" \
+ "(--help -h -c -p -P)-p[allow search in provides to find package]" \
+ "(--help -h -c -p -P)-P[do not search in provides to find package]" \
+ "(--help -h)-r[print version and release too with name]" \
+ "(--help -h)-u[remove package if a better version is already installed]" \
+ "(--help -h)-v[verbose mode]" \
+ "(--help -h)*:urpmi package name: " \
+ && ret=0
+ ;;
+ esac
+
+ return $ret
}
local update_policy
diff --git a/Completion/Redhat/Command/.distfiles b/Completion/Redhat/Command/.distfiles
index 11900cf41..0f0981d4e 100644
--- a/Completion/Redhat/Command/.distfiles
+++ b/Completion/Redhat/Command/.distfiles
@@ -1,4 +1,5 @@
DISTFILES_SRC='
.distfiles
_rpm
+_service
'
diff --git a/Completion/Redhat/Command/_service b/Completion/Redhat/Command/_service
new file mode 100644
index 000000000..013acef9f
--- /dev/null
+++ b/Completion/Redhat/Command/_service
@@ -0,0 +1,22 @@
+#compdef service
+
+# *:: for last argument looks more like a hack but it is
+# the simplest way known to me to reset $words and keep
+# _sub_command happy
+
+# we are interested in init service only
+local ctx="${curcontext/%[^:]#:[^:]#/argument-1:}"
+zstyle -T ":completion:$ctx" tag-order && \
+ zstyle ":completion:$ctx" tag-order init -
+
+
+_arguments -s \
+ '(-d --debug)'{-d,--debug}'[turn debugging on]' \
+ '(- :)'{-h,--help}'[print usage]' \
+ '(- :)'{-v,--version}'[print version]' \
+ '(-)'{-f,--full-restart}'[restart service]' \
+ '(- :)'{-R,--full-restart-all}'[restart all services]' \
+ '(- :)'{-s,--status-all}'[print status of all services]' \
+ ':service name:_services' \
+ '*::service argument: _init_d'
+
diff --git a/Completion/Unix/Command/_chkconfig b/Completion/Unix/Command/_chkconfig
index 92bc60c60..912ac3829 100644
--- a/Completion/Unix/Command/_chkconfig
+++ b/Completion/Unix/Command/_chkconfig
@@ -9,13 +9,8 @@ linux*)
'(-)--level[specify runlevels to apply to]:-:_values -s "" "run levels" 1 2 3 4 5 6 7' \
'(- 2)--add[add new service]' \
'(- 2)--del[remove service from chkconfig management]' \
- '1:service name:->services' \
+ '1:service name:_services' \
'2:state:(on off reset)' && ret=0
-
- if [[ -n "$state" ]]; then
- _wanted services expl 'system service' \
- compadd ${${${(f)"$($words[1] --list)"}%%[ :]*}##$'\t'*} && ret=0
- fi
;;
irix*)
_arguments -C \
diff --git a/Completion/Unix/Command/_init_d b/Completion/Unix/Command/_init_d
index b8bd0c61f..3556b85a4 100644
--- a/Completion/Unix/Command/_init_d
+++ b/Completion/Unix/Command/_init_d
@@ -1,21 +1,24 @@
#compdef -P */(init|rc[0-9S]#).d/*
-local magic cmds what
+local magic cmds what script
# This should probably be system specific...
+script=$words[1]
+[[ $script = */* ]] || script=/etc/init.d/$script
+
# If the file starts with `#!' we hope that this is a shell script
# and get lines looking like <space>foo|bar) with the words in $what.
what='(st(art|op|atus)|(force-|)re(start|load)|debug_(up|down)|dump(|_stats)|add|delete|clean|list)'
-[[ -f $words[1] ]] && read -u0k 2 magic < $words[1] && [[ $magic = '#!' ]] &&
- cmds=( ${${(j:|:s:|:)${(M)${(f)"$(< $words[1])"}:#[[:blank:]]#\'#${~what}(\|${~what})#\'#\)*}}//[^a-z_-]} )
+read -u0k 2 magic < $script && [[ $magic = '#!' ]] &&
+ cmds=( ${${(j:|:s:|:)${(M)${(f)"$(< $script)"}:#[[:blank:]]#(\'|)${~what}(\|{~what})#(\'|)\)}}//[^a-z_]} )
# This would be the pattern to use every line of the form <space>foo).
# Some people say this might match too many lines...
#
-# cmds=( ${${(j:|:s:|:)${(M)${(f)"$(< $words[1])"}:#[[:blank:]]#(\'|)[a-z_|]##(\'|)\)}}//[^a-z_]} )
+# cmds=( ${${(j:|:s:|:)${(M)${(f)"$(< $script)"}:#[[:blank:]]#(\'|)[a-z_|]##\'|)\)}}//[^a-z_]} )
(( $#cmds )) || zstyle -a ":completion:${curcontext}:commands" commands cmds ||
cmds=(start stop)
diff --git a/Completion/Unix/Type/.distfiles b/Completion/Unix/Type/.distfiles
index b57c067a6..0ceee0e55 100644
--- a/Completion/Unix/Type/.distfiles
+++ b/Completion/Unix/Type/.distfiles
@@ -9,5 +9,5 @@ _files _pdf _pspdf _users
_groups _perl_basepods _signals _users_on
_hosts _perl_builtin_funcs _tar_archive _time_zone
_file_systems _net_interfaces _terminals _locales
-_java_class
+_java_class _services
'
diff --git a/Completion/Unix/Type/_services b/Completion/Unix/Type/_services
new file mode 100644
index 000000000..837a77586
--- /dev/null
+++ b/Completion/Unix/Type/_services
@@ -0,0 +1,23 @@
+#autoload
+
+local -a inits xinetds alls
+local expl ret=1
+
+if chkconfig --list > /dev/null 2>&1; then
+ alls=( ${(f)"$(LANGUAGE=C LANG=C LC_ALL=C chkconfig --list)"} )
+ inits=( ${${${alls[1,(r)xinetd based*]}[1,-2]}/%[[:space:]]*/} )
+ xinetds=( ${${${${alls[(r)xinetd based*,-1]}[2,-1]}/#[[:space:]]#}/%:*} )
+else
+ inits=( /etc/init.d/*(:t) )
+fi
+
+_tags init xinetd
+
+while _tags; do
+ _requested init expl 'init services' \
+ compadd -a inits && ret=0
+ _requested xinetd expl 'xinetd services' \
+ compadd -a xinetds && ret=0
+done
+
+return $ret
diff --git a/Src/Zle/complete.mdd b/Src/Zle/complete.mdd
index f24ad7bec..eea9645dc 100644
--- a/Src/Zle/complete.mdd
+++ b/Src/Zle/complete.mdd
@@ -1,7 +1,7 @@
name=zsh/complete
link=either
load=yes
-functions='Completion/comp* Completion/AIX/*/* Completion/BSD/*/* Completion/Base/*/* Completion/Debian/*/* Completion/Mandrake/*/* Completion/Redhat/*/* Completion/Unix/*/* Completion/X/*/* Completion/Zsh/*/*'
+functions='Completion/comp* Completion/AIX/*/* Completion/BSD/*/* Completion/Base/*/* Completion/Debian/*/* Completion/Linux/*/* Completion/Mandrake/*/* Completion/Redhat/*/* Completion/Unix/*/* Completion/X/*/* Completion/Zsh/*/*'
moddeps="zsh/zle"