diff options
author | Andrey Borzenkov <bor@users.sourceforge.net> | 2002-05-08 09:18:12 +0000 |
---|---|---|
committer | Andrey Borzenkov <bor@users.sourceforge.net> | 2002-05-08 09:18:12 +0000 |
commit | e484b0f83ca9a795429caee90550955ac5544926 (patch) | |
tree | 34649b241a045c325ab86a2dd8b84e62a7bcbca6 | |
parent | 42080a7fb93b4457f0dd4c8ce28398001738490a (diff) | |
download | zsh-e484b0f83ca9a795429caee90550955ac5544926.tar.gz zsh-e484b0f83ca9a795429caee90550955ac5544926.tar.xz zsh-e484b0f83ca9a795429caee90550955ac5544926.zip |
17075, 17076: _urpmi and chkconfig/services
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | Completion/Mandrake/Command/_urpmi | 272 | ||||
-rw-r--r-- | Completion/Redhat/Command/.distfiles | 1 | ||||
-rw-r--r-- | Completion/Redhat/Command/_service | 22 | ||||
-rw-r--r-- | Completion/Unix/Command/_chkconfig | 7 | ||||
-rw-r--r-- | Completion/Unix/Command/_init_d | 11 | ||||
-rw-r--r-- | Completion/Unix/Type/.distfiles | 2 | ||||
-rw-r--r-- | Completion/Unix/Type/_services | 23 | ||||
-rw-r--r-- | Src/Zle/complete.mdd | 2 |
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" |