Big rewrite of /etc/zsh/completion.d/, thanks to ft! 0.2.47
authorMichael Prokop <mika@grml.org>
Tue, 17 Apr 2007 07:21:29 +0000 (09:21 +0200)
committerMichael Prokop <mika@grml.org>
Tue, 17 Apr 2007 07:21:29 +0000 (09:21 +0200)
16 files changed:
debian/changelog
etc/zsh/completion.d/_debian_rules [new file with mode: 0644]
etc/zsh/completion.d/_fbset [new file with mode: 0644]
etc/zsh/completion.d/_grml-lang [new file with mode: 0644]
etc/zsh/completion.d/_grml-wallpaper [new file with mode: 0644]
etc/zsh/completion.d/_grmlinitd [moved from etc/zsh/site-functions/_grmlinitd with 100% similarity]
etc/zsh/completion.d/_hg [moved from etc/zsh/site-functions/_hg with 100% similarity]
etc/zsh/completion.d/_iwconfig [new file with mode: 0644]
etc/zsh/completion.d/debian_rules [deleted file]
etc/zsh/completion.d/fbset [deleted file]
etc/zsh/completion.d/grml-lang [deleted file]
etc/zsh/completion.d/grml-wallpaper [deleted file]
etc/zsh/completion.d/iwconfig [deleted file]
etc/zsh/functions.d/grml-wallpaper [new file with mode: 0644]
etc/zsh/zshrc
grml-etc-core.diff [new file with mode: 0644]

index 36b78d0..66d5507 100644 (file)
@@ -1,3 +1,10 @@
+grml-etc-core (0.2.47) unstable; urgency=low
+
+  * Big rewrite of /etc/zsh/completion.d/, thanks to ft!
+    [Testing: issue201]
+
+ -- Michael Prokop <mika@grml.org>  Tue, 17 Apr 2007 09:21:03 +0200
+
 grml-etc-core (0.2.46) unstable; urgency=low
 
   * /etc/zsh/zshrc: deactivate url-quote-magic by default and
diff --git a/etc/zsh/completion.d/_debian_rules b/etc/zsh/completion.d/_debian_rules
new file mode 100644 (file)
index 0000000..9a24d95
--- /dev/null
@@ -0,0 +1,4 @@
+#compdef debian/rules
+# type debian/rules <TAB> inside a source package
+
+words=(make -f debian/rules) _make
diff --git a/etc/zsh/completion.d/_fbset b/etc/zsh/completion.d/_fbset
new file mode 100644 (file)
index 0000000..f7fb0b7
--- /dev/null
@@ -0,0 +1,15 @@
+#compdef fbset
+# simple completion for fbset (switch resolution on console)
+
+fb_modes=(
+  640x480-60 640x480-72 640x480-75 640x480-90 640x480-100
+  768x576-75
+  800x600-48-lace 800x600-56 800x600-60 800x600-70 800x600-72 800x600-75 800x600-90 800x600-100
+  1024x768-43-lace 1024x768-60 1024x768-70 1024x768-72 1024x768-75 1024x768-90 1024x768-100
+  1152x864-43-lace 1152x864-47-lace 1152x864-60 1152x864-70 1152x864-75 1152x864-80
+  1280x960-75-8 1280x960-75 1280x960-75-32
+  1280x1024-43-lace 1280x1024-47-lace 1280x1024-60 1280x1024-70 1280x1024-74 1280x1024-75
+  1600x1200-60 1600x1200-66 1600x1200-76
+)
+
+compadd ${fb_modes}
diff --git a/etc/zsh/completion.d/_grml-lang b/etc/zsh/completion.d/_grml-lang
new file mode 100644 (file)
index 0000000..c78ec36
--- /dev/null
@@ -0,0 +1,3 @@
+#compdef grml-lang
+
+compadd at ch de us
diff --git a/etc/zsh/completion.d/_grml-wallpaper b/etc/zsh/completion.d/_grml-wallpaper
new file mode 100644 (file)
index 0000000..c84be17
--- /dev/null
@@ -0,0 +1,5 @@
+#compdef grml-wallpaper
+
+dirs=(. /usr/share/grml/)
+_description files expl 'set desktop wallpaper on grml system'
+_files "$expl[@]" -W dirs -g '*.{jpg,png}(-.)'
diff --git a/etc/zsh/completion.d/_iwconfig b/etc/zsh/completion.d/_iwconfig
new file mode 100644 (file)
index 0000000..6731597
--- /dev/null
@@ -0,0 +1,86 @@
+#compdef iwconfig
+
+_wlan_interfaces() {
+    local intf
+    intf=$(iwconfig |& egrep 'IEEE 802.11[abg]' | cut -d' ' -f1 | tr ' ' \\n )
+    # intf=$( fgrep ': ' < /proc/net/wireless | cut -d: -f1 | tr \\n ' ' | tr -s " \t" )
+    _wanted interfaces expl 'wireless network interface' \
+        compadd ${intf}
+}
+
+_wlan_networks() {
+    networks=()
+    while read LINE
+    do
+        networks+=$LINE
+    done <<(iwlist scanning 2>/dev/null | grep ESSID | sed -e s/'.*"\(.*\)"'/'\1'/ )
+    _wanted -x names expl 'network name' \
+        compadd off any on ${networks}
+}
+
+local curcontext="$curcontext" state line expl ret=1
+
+_arguments -C \
+  '(1 * -)--help[display help information]' \
+  '(1 * -)--version[display version information]' \
+  '1:network interface:_wlan_interfaces' \
+  '*:parameter:->parameters' && ret=0
+
+if [[ -n "$state" ]]; then
+  local -a arg
+
+  case $words[CURRENT-1] in
+    essid) _wlan_networks;;
+    nwid|domain) _message -e ids 'network id' ;;
+    freq|channel) _message -e channels 'channel or frequency' ;;
+    sens) _message -e levels 'signal level' ;;
+    mode)
+      _wanted modes expl 'operating mode' compadd \
+          Ad-Hoc Managed Master Repeater Secondary Monitor Auto
+    ;;
+    ap) _message -e access-points 'access point' ;;
+    nick*) _message -e names 'nickname' ;;
+    rate|bit*) _message -e bit-rates 'bit rate' ;;
+    rts*|frag*) _message -e sizes 'size' ;;
+    key|enc*) _message -e keys 'key' ;;
+    power)
+      arg=(
+        \*{min,max}'[modifier]'
+    '*off[disable power management]'
+    '*on[enable power management]'
+    '*all[receive all packets]'
+    'unicast[receive unicast packets only]'
+    'multicast[receive multicast and broadcast packets only]'
+      )
+    ;&
+    min|max)
+      _values -S ' ' -w 'parameter' \
+        'period[set the period between wake ups]' \
+    'timeout[set timeout before sleep]' \
+    $arg[@] && ret=0
+    ;;
+    period|timeout) _message -e timeouts 'timeout' ;;
+    txpower) _message -e power 'transmit power' ;;
+    retry) _message -e retries 'retries' ;;
+    *)
+      _values -S ' ' -w 'option' \
+        'essid[set the network name]' \
+    '(nwid domain)'{nwid,domain}'[set the network ID]' \
+    '(freq channel)'{freq,channel}'[set the operating frequency or channel]' \
+    'sens[set the sensitivity threhold]' \
+        'mode[set operating mode]' \
+    'ap[register with given access point]' \
+    '(nick nickname)'nick{,name}'[set the nickname]' \
+    '(rate bit)'{rate,bit}'[set the bitrate]' \
+    'rts[set packet size threshold for sending RTS]' \
+    'frag[set maximum packet fragment size]' \
+    \*{key,enc}'[add encryption key]' \
+    '*power[manipulate power management scheme parameters]' \
+    'txpower[set transmit power]' \
+    'retry[set number of retries]' \
+    'commit[apply changes imediately]' && ret=0
+    ;;
+  esac
+fi
+
+return ret
diff --git a/etc/zsh/completion.d/debian_rules b/etc/zsh/completion.d/debian_rules
deleted file mode 100644 (file)
index 17b3d65..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-  _debian_rules() { words=(make -f debian/rules) _make }
-  compdef _debian_rules debian/rules # type debian/rules <TAB> inside a source package
diff --git a/etc/zsh/completion.d/fbset b/etc/zsh/completion.d/fbset
deleted file mode 100644 (file)
index 073b9f7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# simple completion for fbset (switch resolution on console)
-  _fbmodes() { compadd 640x480-60 640x480-72 640x480-75 640x480-90 640x480-100 768x576-75 800x600-48-lace 800x600-56 800x600-60 800x600-70 800x600-72 800x600-75 800x600-90 800x600-100 1024x768-43-lace 1024x768-60 1024x768-70 1024x768-72 1024x768-75 1024x768-90 1024x768-100 1152x864-43-lace 1152x864-47-lace 1152x864-60 1152x864-70 1152x864-75 1152x864-80 1280x960-75-8 1280x960-75 1280x960-75-32 1280x1024-43-lace 1280x1024-47-lace 1280x1024-60 1280x1024-70 1280x1024-74 1280x1024-75 1600x1200-60 1600x1200-66 1600x1200-76 }
-  compdef _fbmodes fbset
diff --git a/etc/zsh/completion.d/grml-lang b/etc/zsh/completion.d/grml-lang
deleted file mode 100644 (file)
index 73e39ca..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-  _grml-lang() { compadd at ch de us ; }
-  compdef _grml-lang grml-lang
diff --git a/etc/zsh/completion.d/grml-wallpaper b/etc/zsh/completion.d/grml-wallpaper
deleted file mode 100644 (file)
index 63efa0d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-  grml-wallpaper() { 
-    if [ -f /usr/share/grml/"$1" ] ; then
-       Esetroot -scale /usr/share/grml/"$1"
-    else
-       Esetroot -scale $*
-    fi
-  }
-
-  _grml-wallpaper() {
-    dirs=(. /usr/share/grml/)
-    _description files expl 'set desktop wallpaper on grml system'
-    _files "$expl[@]" -W dirs -g '*.{jpg,png}(-.)'
-  }
-  compdef _grml-wallpaper grml-wallpaper
diff --git a/etc/zsh/completion.d/iwconfig b/etc/zsh/completion.d/iwconfig
deleted file mode 100644 (file)
index c3a48f0..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-_wlan_interfaces() {
-    local intf
-    intf=$(iwconfig |& egrep 'IEEE 802.11[abg]' | cut -d' ' -f1 | tr ' ' \\n )
-    # intf=$( fgrep ': ' < /proc/net/wireless | cut -d: -f1 | tr \\n ' ' | tr -s " \t" )
-    _wanted interfaces expl 'wireless network interface' \
-        compadd ${intf}
-}
-
-_wlan_networks() {
-    networks=()
-    while read LINE
-    do
-        networks+=$LINE
-    done <<(iwlist scanning 2>/dev/null | grep ESSID | sed -e s/'.*"\(.*\)"'/'\1'/ )
-    _wanted -x names expl 'network name' \
-        compadd off any on ${networks}
-}
-
-_iwconfig() {
-  local curcontext="$curcontext" state line expl ret=1
-
-  _arguments -C \
-    '(1 * -)--help[display help information]' \
-    '(1 * -)--version[display version information]' \
-    '1:network interface:_wlan_interfaces' \
-    '*:parameter:->parameters' && ret=0
-
-  if [[ -n "$state" ]]; then
-    local -a arg
-
-    case $words[CURRENT-1] in
-      essid) _wlan_networks;;
-      nwid|domain) _message -e ids 'network id' ;;
-      freq|channel) _message -e channels 'channel or frequency' ;;
-      sens) _message -e levels 'signal level' ;;
-      mode)
-        _wanted modes expl 'operating mode' compadd \
-            Ad-Hoc Managed Master Repeater Secondary Monitor Auto
-      ;;
-      ap) _message -e access-points 'access point' ;;
-      nick*) _message -e names 'nickname' ;;
-      rate|bit*) _message -e bit-rates 'bit rate' ;;
-      rts*|frag*) _message -e sizes 'size' ;;
-      key|enc*) _message -e keys 'key' ;;
-      power)
-        arg=(
-          \*{min,max}'[modifier]'
-      '*off[disable power management]'
-      '*on[enable power management]'
-      '*all[receive all packets]'
-      'unicast[receive unicast packets only]'
-      'multicast[receive multicast and broadcast packets only]'
-        )
-      ;&
-      min|max)
-        _values -S ' ' -w 'parameter' \
-          'period[set the period between wake ups]' \
-      'timeout[set timeout before sleep]' \
-      $arg[@] && ret=0
-      ;;
-      period|timeout) _message -e timeouts 'timeout' ;;
-      txpower) _message -e power 'transmit power' ;;
-      retry) _message -e retries 'retries' ;;
-      *)
-        _values -S ' ' -w 'option' \
-          'essid[set the network name]' \
-      '(nwid domain)'{nwid,domain}'[set the network ID]' \
-      '(freq channel)'{freq,channel}'[set the operating frequency or channel]' \
-      'sens[set the sensitivity threhold]' \
-          'mode[set operating mode]' \
-      'ap[register with given access point]' \
-      '(nick nickname)'nick{,name}'[set the nickname]' \
-      '(rate bit)'{rate,bit}'[set the bitrate]' \
-      'rts[set packet size threshold for sending RTS]' \
-      'frag[set maximum packet fragment size]' \
-      \*{key,enc}'[add encryption key]' \
-      '*power[manipulate power management scheme parameters]' \
-      'txpower[set transmit power]' \
-      'retry[set number of retries]' \
-      'commit[apply changes imediately]' && ret=0
-      ;;
-    esac
-  fi
-
-  return ret
-}
-
-compdef _iwconfig iwconfig
diff --git a/etc/zsh/functions.d/grml-wallpaper b/etc/zsh/functions.d/grml-wallpaper
new file mode 100644 (file)
index 0000000..3b6f855
--- /dev/null
@@ -0,0 +1,5 @@
+if [ -f /usr/share/grml/"$1" ] ; then
+   Esetroot -scale /usr/share/grml/"$1"
+else
+   Esetroot -scale "$@"
+fi
index 79294d2..018914c 100644 (file)
 # Search path for the cd comman
 #  cdpath=(.. ~)
 
-# Support our own site-functions
-  [ -d /etc/zsh/site-functions ] && FPATH=/etc/zsh/site-functions:$FPATH
+# completion functions go to /etc/zsh/completion.d
+# function files may be put into /etc/zsh/functions.d, from where they
+# will be automatically autoloaded.
+  [[ -d /etc/zsh/completion.d ]] && fpath+=( /etc/zsh/completion.d )
+  if [[ -d /etc/zsh/functions.d ]] ; then
+    fpath+=( /etc/zsh/functions.d )
+    for func in /etc/zsh/functions.d/[^_]*[^~] ; do
+      autoload -U ${func:t}
+    done
+  fi
 
 # automatically remove duplicates from these arrays
   typeset -U path cdpath fpath manpath
@@ -764,12 +772,6 @@ Run "grml-tips ssl-certificate" if you need further instructions.
 
 # {{{ completion stuff
 
-# Where to look for autoloaded function definitions
-  if [ -d /etc/zsh/completion.d ] ; then
-    local comp=/etc/zsh/completion.d
-    for func in $comp/*(N-.:t); . ${comp}/${func}
-  fi
-
 # called later (via is4 && grmlcomp)
 # notice: use 'zstyle' for getting current settings
 #         press ^Xh (control-x h) for getting tags in context; ^X? (control-x ?) to run complete_debug with trace output
diff --git a/grml-etc-core.diff b/grml-etc-core.diff
new file mode 100644 (file)
index 0000000..4a6d2e2
--- /dev/null
@@ -0,0 +1,1306 @@
+searching for changes
+changeset:   150:1c8cb321138a
+user:        Frank Terbeck <ft@grml.org>
+date:        Tue Apr 17 01:06:26 2007 +0200
+summary:     moved /etc/zsh/site-functions/_* to /etc/zsh/completion.d/;
+
+diff -r b72fb5695718 -r 1c8cb321138a etc/zsh/completion.d/_grmlinitd
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/etc/zsh/completion.d/_grmlinitd  Tue Apr 17 01:06:26 2007 +0200
+@@ -0,0 +1,4 @@
++#compdef Start Restart Stop Reload
++local scripts
++scripts=( ${$(print /etc/init.d/*(x)):t} )
++_describe "service startup script" scripts
+diff -r b72fb5695718 -r 1c8cb321138a etc/zsh/completion.d/_hg
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/etc/zsh/completion.d/_hg Tue Apr 17 01:06:26 2007 +0200
+@@ -0,0 +1,481 @@
++#compdef hg
++
++# Zsh completion script for mercurial.  Rename this file to _hg and copy
++# it into your zsh function path (/usr/share/zsh/site-functions for
++# instance)
++#
++# Copyright (C) 2005 Steve Borho
++#
++# This is free software; you can redistribute it and/or modify it under
++# the terms of the GNU General Public License as published by the Free
++# Software Foundation; either version 2 of the License, or (at your
++# option) any later version.
++#
++
++local curcontext="$curcontext" state line
++typeset -A opt_args
++local subcmds repos tags newFiles addedFiles includeExclude commitMessage
++
++_mq_state () {
++  case "$state" in
++    (qapplied)
++      compadd $(hg qapplied)
++    ;;
++    (qunapplied)
++      compadd $(hg qunapplied)
++    ;;
++  esac
++}
++
++tags=($(hg tags 2> /dev/null | sed -e 's/[0-9]*:[a-f0-9]\{40\}$//; s/ *$//'))
++subcmds=($(hg -v help | sed -e '1,/^list of commands:/d' \
++      -e '/^global options:/,$d' -e '/^ [^ ]/!d; s/[,:].*//g;'))
++
++# A lot of commands have these arguments
++includeExclude=(
++        '*-I-[include names matching the given patterns]:dir:_files -W $(hg root) -/'
++        '*--include-[include names matching the given patterns]:dir:_files -W $(hg root) -/'
++        '*-X-[exclude names matching the given patterns]:dir:_files -W $(hg root) -/'
++        '*--exclude-[exclude names matching the given patterns]:dir:_files -W $(hg root) -/')
++
++commitMessage=(
++        '(-m --message -l --logfile --edit)-e[edit commit message]'
++        '(-m --message -l --logfile -e)--edit[edit commit message]'
++        '(-e --edit -l --logfile --message)-m[use <text> as commit message]:message:'
++        '(-e --edit -l --logfile -m)--message[use <text> as commit message]:message:'
++        '(-e --edit -m --message --logfile)-l[read the commit message from <file>]:log file:_files'
++        '(-e --edit -m --message -l)--logfile[read the commit message from <file>]:log file:_files')
++
++if [[ $service == "hg" ]]; then
++    _arguments -C -A "-*" \
++    '(--repository)-R[repository root directory]:root:_files -/' \
++    '(-R)--repository[repository root directory]:root:_files -/' \
++    '--cwd[change working directory]:new working directory:_files -/' \
++    '(--noninteractive)-y[do not prompt, assume yes for any required answers]' \
++    '(-y)--noninteractive[do not prompt, assume yes for any required answers]' \
++    '(--verbose)-v[enable additional output]' \
++    '(-v)--verbose[enable additional output]' \
++    '(--quiet)-q[suppress output]' \
++    '(-q)--quiet[suppress output]' \
++    '(--help)-h[display help and exit]' \
++    '(-h)--help[display help and exit]' \
++    '--debug[debug mode]' \
++    '--debugger[start debugger]' \
++    '--traceback[print traceback on exception]' \
++    '--time[time how long the command takes]' \
++    '--profile[profile]' \
++    '--version[output version information and exit]' \
++    '*::command:->subcmd' && return 0
++
++    if (( CURRENT == 1 )); then
++        _wanted commands expl 'hg command' compadd -a subcmds
++        return
++    fi
++    service="$words[1]"
++    curcontext="${curcontext%:*}=$service:"
++fi
++
++case $service in
++    (add)
++        newFiles=(${(ps:\0:)"$(hg status -0un .)"})
++        _arguments $includeExclude \
++        '*:file:->unknown'
++        _wanted files expl 'unknown files' compadd -a newFiles
++    ;;
++
++    (addremove)
++        _arguments $includeExclude \
++        '*:directories:_files -/'  # assume they want to add/remove a dir
++    ;;
++
++    (forget)
++        addedFiles=(${(ps:\0:)"$(hg status -0an .)"})
++        _arguments $includeExclude  \
++        '*:file:->added'
++        _wanted files expl 'newly added files' compadd -a addedFiles
++    ;;
++
++    (remove|rm)
++        _arguments $includeExclude \
++        '*:file:_files'
++    ;;
++
++    (copy|cp)
++        _arguments $includeExclude \
++        '(--after)-A[record a copy that has already occurred]' \
++        '(-A)--after[record a copy that has already occurred]' \
++        '(--force)-f[forcibly copy over an existing managed file]' \
++        '(-f)--force[forcibly copy over an existing managed file]' \
++        '(--parents)-p[append source path to dest]' \
++        '(-p)--parents[append source path to dest]' \
++        '*:files:_files'
++    ;;
++
++    (rename|mv)
++        if (( CURRENT == 2 )); then
++            _arguments $includeExclude \
++            '(--after)-A[record a rename that has already occurred]' \
++            '(-A)--after[record a rename that has already occurred]' \
++            '(--force)-f[replace destination if it exists]' \
++            '(-F)--force[replace destination if it exists]' \
++            '(--parents)-p[append source path to dest]' \
++            '(-p)--parents[append source path to dest]' \
++            '*:files:_files'
++        else
++            _arguments '*:destination:_files'
++        fi
++    ;;
++
++    (diff)
++        _arguments $includeExclude \
++        '*-r[revision]:revision:($tags)' \
++        '*--rev[revision]:revision:($tags)' \
++        '(--text)-a[treat all files as text]' \
++        '(-a)--text[treat all files as text]' \
++        '*:file:_files'
++    ;;
++
++    (status|st)
++        _arguments $includeExclude \
++        '(--no-status)-n[hide status prefix]' \
++        '(-n)--no-status[hide status prefix]' \
++        '(--print0)-0[end filenames with NUL, for use with xargs]' \
++        '(-0)--print0[end filenames with NUL, for use with xargs]' \
++        '(--modified)-m[show only modified files]' \
++        '(-m)--modified[show only modified files]' \
++        '(--added)-a[show only added files]' \
++        '(-a)--added[show only added files]' \
++        '(--removed)-r[show only removed files]' \
++        '(-r)--removed[show only removed files]' \
++        '(--unknown)-u[show only unknown files]' \
++        '(-u)--unknown[show only unknown files]' \
++        '*:search pattern, then files:_files'
++    ;;
++
++    (revert)
++        addedFiles=(${(ps:\0:)"$(hg status -0amrn .)"})
++        _arguments \
++        '(--rev)-r[revision to revert to]:revision:($tags)' \
++        '(-r)--rev[revision to revert to]:revision:($tags)' \
++        '(--nonrecursive)-n[do not recurse into subdirectories]' \
++        '(-n)--nonrecursive[do not recurse into subdirectories]' \
++        '*:file:->modified'
++        _wanted files expl 'mofified files' compadd -a addedFiles
++    ;;
++
++    (commit|ci)
++        addedFiles=(${(ps:\0:)"$(hg status -0amrn .)"})
++        _arguments $includeExclude \
++        '(--addremove)-A[run addremove during commit]' \
++        '(-A)--addremove[run addremove during commit]' \
++        '(--message)-m[use <txt> as commit message]:string:' \
++        '(-m)--message[use <txt> as commit message]:string:' \
++        '(--logfile)-l[read commit message from <file>]:.log file:_file -g \*.txt' \
++        '(-l)--logfile[read commit message from <file>]:.log file:_file -g \*.txt' \
++        '(--date)-d[record datecode as commit date]:date code:' \
++        '(-d)--date[record datecode as commit date]:date code:' \
++        '(--user)-u[record user as commiter]:user:' \
++        '(-u)--user[record user as commiter]:user:' \
++        '*:file:->modified'
++        _wanted files expl 'mofified files' compadd -a addedFiles
++    ;;
++
++    (cat)
++        _arguments $includeExclude \
++        '(--output)-o[print output to file with formatted name]:filespec:' \
++        '(-o)--output[print output to file with formatted name]:filespec:' \
++        '(--rev)-r[revision]:revision:($tags)' \
++        '(-r)--rev[revision]:revision:($tags)' \
++        '*:file:_files'
++    ;;
++
++    (annotate)
++        _arguments $includeExclude \
++        '(--rev)-r[annotate the specified revision]:revision:($tags)' \
++        '(-r)--rev[annotate the specified revision]:revision:($tags)' \
++        '(--text)-a[treat all files as text]' \
++        '(-a)--text[treat all files as text]' \
++        '(--user)-u[list the author]' \
++        '(-u)--user[list the author]' \
++        '(--changeset)-c[list the changeset]' \
++        '(-c)--changeset[list the changeset]' \
++        '(--number)-n[list the revision number (default)]' \
++        '(-n)--number[list the revision number (default)]' \
++        '*:files:_files'
++    ;;
++
++    (grep)
++        _arguments $includeExclude \
++        '*-r[search in given revision range]:revision:($tags)' \
++        '*--rev[search in given revision range]:revision:($tags)' \
++        '--all[print all revisions with matches]' \
++        '(-print0)-0[end filenames with NUL, for use with xargs]' \
++        '(-0)--print0[end filenames with NUL, for use with xargs]' \
++        '(--ignore-case)-i[ignore case when matching]' \
++        '(-i)--ignore-case[ignore case when matching]' \
++        '(--files-with-matches)-l[print names of files and revs that match]' \
++        '(-l)--files-with-matches[print names of files and revs that match]' \
++        '(--line-number)-n[print matching line numbers]' \
++        '(-n)--line-number[print matching line numbers]' \
++        '(--user)-u[print user who committed change]' \
++        '(-u)--user[print user who committed change]' \
++        '*:search pattern:'
++    ;;
++
++    (locate)
++        _arguments $includeExclude \
++        '(--rev)-r[search repository as it stood at revision]:revision:($tags)' \
++        '(-r)--rev[search repository as it stood at revision]:revision:($tags)' \
++        '(--print0)-0[end filenames with NUL, for use with xargs]' \
++        '(-0)--print0[end filenames with NUL, for use with xargs]' \
++        '(--fullpath)-f[print complete paths]' \
++        '(-f)--fullpath[print complete paths]' \
++        '*:search pattern:'
++    ;;
++
++    (log|history)
++        _arguments $includeExclude \
++        '*-r[show the specified revision or range]:revision:($tags)' \
++        '*--rev[show the specified revision or range]:revision:($tags)' \
++        '(--no-merges -M --only-merges)-m[show only merge revisions]' \
++        '(--no-merges -M -m)--only-merges[show only merge revisions]' \
++        '(--only-merges -m --no-merges)-M[do not show merge revisions]' \
++        '(--only-merges -m -M)--no-merges[do not show merge revisions]' \
++        '(--keyword)-k[search for a keyword]:keyword:' \
++        '(-k)--keyword[search for a keyword]:keyword:' \
++        '(--branch)-b[show branches]' \
++        '(-b)--branch[show branches]' \
++        '(--patch)-p[show patch]' \
++        '(-p)--patch[show patch]' \
++        '*:file:_files'
++    ;;
++
++    (update|checkout|co)
++        _arguments \
++        '(--branch)-b[checkout the head of a specific branch]' \
++        '(-b)--branch[checkout the head of a specific branch]' \
++        '(-C --clean --merge)-m[allow merging of branches]' \
++        '(-C --clean -m)--merge[allow merging of branches]' \
++        '(-m --merge --clean)-C[overwrite locally modified files]' \
++        '(-m --merge -C)--clean[overwrite locally modified files]' \
++        '*:revision or tag:($tags)'
++    ;;
++
++    (tag)
++        _arguments \
++        '(--local)-l[make the tag local]' \
++        '(-l)--local[make the tag local]' \
++        '(--message)-m[message for tag commit log entry]:string:' \
++        '(-m)--message[message for tag commit log entry]:string:' \
++        '(--date)-d[record datecode as commit date]:date code:' \
++        '(-d)--date[record datecode as commit date]:date code:' \
++        '(--user)-u[record user as commiter]:user:' \
++        '(-u)--user[record user as commiter]:user:' \
++        '*:name, then revision:($tags)'
++    ;;
++
++    (clone)
++        if (( CURRENT == 2 )); then
++            repos=( $(hg paths | sed -e 's/^.*= //') )
++            _arguments \
++            '(--no-update)-U[do not update the new working directory]' \
++            '(-U)--no-update[do not update the new working directory]' \
++            '(--ssh)-e[specify ssh command to use]:string:' \
++            '(-e)--ssh[specify ssh command to use]:string:' \
++            '--pull[use pull protocol to copy metadata]' \
++            '--remotecmd[specify hg command to run on the remote side]:remote hg:' \
++            '*:local repo:_files -/'
++            _wanted source expl 'source repository' compadd -a repos
++        elif (( CURRENT == 3 )); then
++            _arguments '*:dest repo:_files -/'
++        fi
++    ;;
++
++    (rawcommit)
++        _arguments \
++        '(--parent)-p[parent revision]:revision:($tags)' \
++        '(-p)--parent[parent revision]:revision:($tags)' \
++        '(--date)-d[record datecode as commit date]:date code:' \
++        '(-d)--date[record datecode as commit date]:date code:' \
++        '(--user)-u[record user as commiter]:user:' \
++        '(-u)--user[record user as commiter]:user:' \
++        '(--message)-m[use <txt> as commit message]:string:' \
++        '(-m)--message[use <txt> as commit message]:string:' \
++        '(--logfile)-l[read commit message from <file>]:.log file:_file -g \*.txt' \
++        '(-l)--logfile[read commit message from <file>]:.log file:_file -g \*.txt' \
++        '(--files)-F[file list]:file list:_files' \
++        '(-F)--files[file list]:file list:_files' \
++        '*:files to commit:_files'
++    ;;
++
++    (bundle)
++        if (( CURRENT == 2 )); then
++            _arguments '*:changegroup file:_files -g \*.hg'
++        elif (( CURRENT == 3 )); then
++            _arguments '*:other repo:_files -/'
++        fi
++    ;;
++
++    (unbundle)
++        _arguments '*:changegroup .hg file:_files -g \*.hg'
++    ;;
++
++    (incoming)
++        _arguments \
++        '(--patch)-p[show patch]' \
++        '(-p)--patch[show patch]' \
++        '(--no-merges)-M[do not show merge revisions]' \
++        '(-M)--no-merges[do not show merge revisions]' \
++        '(--newest-first)-n[show newest record first]' \
++        '(-n)--newest-first[show newest record first]' \
++        '*:mercurial repository:_files -/'
++    ;;
++
++    (import|patch)
++        _arguments \
++        '(--strip)-p[directory strip option for patch (default: 1)]:count:' \
++        '(-p)--strip[directory strip option for patch (default: 1)]:count:' \
++        '(--force)-f[skip check for outstanding uncommitted changes]' \
++        '(-f)--force[skip check for outstanding uncommitted changes]' \
++        '(--base)-b[base directory to read patches from]:file:_files -W $(hg root) -/' \
++        '(-b)--base[base directory to read patches from]:file:_files -W $(hg root) -/' \
++        '*:patch file:_files'
++    ;;
++
++    (pull)
++        repos=( $(hg paths | sed -e 's/^.*= //') )
++        _arguments \
++        '(--update)-u[update working directory to tip after pull]' \
++        '(-u)--update[update working directory to tip after pull]' \
++        '(--ssh)-e[specify ssh command to use]:ssh command:' \
++        '(-e)--ssh[specify ssh command to use]:ssh command:' \
++        '--remotecmd[specify hg command to run on the remote side]:remote hg:' \
++        '*:local repo:_files -/'
++        _wanted source expl 'source repository' compadd -a repos
++    ;;
++
++    (outgoing)
++        _arguments \
++        '(--patch)-p[show patch]' \
++        '(-p)--patch[show patch]' \
++        '(--no-merges)-M[do not show merge revisions]' \
++        '(-M)--no-merges[do not show merge revisions]' \
++        '(--newest-first)-n[show newest record first]' \
++        '(-n)--newest-first[show newest record first]' \
++        '*:local repo:_files -/'
++        _wanted source expl 'source repository' compadd -a repos
++    ;;
++
++    (export)
++        _arguments \
++        '(--outout)-o[print output to file with formatted name]:filespec:' \
++        '(-o)--output[print output to file with formatted name]:filespec:' \
++        '(--text)-a[treat all files as text]' \
++        '(-a)--text[treat all files as text]' \
++        '*:revision:->revs'
++        _wanted revs expl 'revision or tag' compadd -a tags
++    ;;
++
++    (push)
++        repos=( $(hg paths | sed -e 's/^.*= //') )
++        _arguments \
++        '(--force)-f[force push]' \
++        '(-f)--force[force push]' \
++        '(--ssh)-e[specify ssh command to use]:ssh command:' \
++        '(-e)--ssh[specify ssh command to use]:ssh command:' \
++        '--remotecmd[specify hg command to run on the remote side]:remote hg:' \
++        '*:local repo:_files -/'
++        _wanted source expl 'source repository' compadd -a repos
++    ;;
++
++    (serve)
++        _arguments \
++        '(--accesslog)-A[name of access log file]:log file:_files' \
++        '(-A)--accesslog[name of access log file]:log file:_files' \
++        '(--errorlog)-E[name of error log file]:log file:_files' \
++        '(-E)--errorlog[name of error log file]:log file:_files' \
++        '(--port)-p[listen port]:listen port:' \
++        '(-p)--port[listen port]:listen port:' \
++        '(--address)-a[interface address]:interface address:' \
++        '(-a)--address[interface address]:interface address:' \
++        '(--name)-n[name to show in web pages]:repository name:' \
++        '(-n)--name[name to show in web pages]:repository name:' \
++        '(--templates)-t[web template directory]:template dir:_files -/' \
++        '(-t)--templates[web template directory]:template dir:_files -/' \
++        '--style[web template style]:style' \
++        '--stdio[for remote clients]' \
++        '(--ipv6)-6[use IPv6 in addition to IPv4]' \
++        '(-6)--ipv6[use IPv6 in addition to IPv4]'
++    ;;
++
++    (help)
++        _wanted commands expl 'hg command' compadd -a subcmds
++    ;;
++
++    (heads)
++        _arguments \
++        '(--branches)-b[find branch info]' \
++        '(-b)--branches[find branch info]'
++    ;;
++
++    (paths)
++        _arguments '*:symbolic name:(default default-push)'
++    ;;
++
++    (init)
++        _arguments '*:new repo directory:_files -/'
++    ;;
++
++    (manifest)
++        _arguments '*:revision:($tags)'
++    ;;
++
++    (parents)
++        _arguments '*:revision:($tags)'
++    ;;
++
++    (identify|recover|root|undo|view|verify|version|ct|tags)
++        # no arguments for these commands
++    ;;
++
++    # MQ commands
++    (qdel*|qrm|qrem*)
++        _arguments \
++            {-k,--keep}'[keep patch file]' \
++            {-r,--rev}'[revision]:applied patch:->qapplied' \
++            '*:unapplied patches:->qunapplied'
++        _mq_state
++    ;;
++
++    (qnew)
++        _arguments $commitMessage \
++            {-f,--force}'[import uncommitted changes into patch]' \
++            ':patch name:'
++    ;;
++
++    (qpo*)
++        applied=( $(hg qapplied) )
++        _arguments \
++            (1){-a,--all}'[pop all patches]' \
++            {-f,--force}'[forget any local changes]' \
++            ':applied patch:->qapplied'
++        _mq_state
++    ;;
++
++    (qpu*)
++        _arguments \
++            (1){-a,--all}'[apply all patches]' \
++            {-f,--force}'[apply if the patch has rejects]' \
++            ':unapplied patch:->qunapplied'
++        _mq_state
++    ;;
++    (qref*)
++        _arguments $commitMessage $includeExclude \
++            {-g,--git}'[use git extended diff format]' \
++            {-s,--short}'[short refresh]'
++    ;;
++
++    (*)
++        _message "unknown hg command completion: $service"
++    ;;
++esac
+diff -r b72fb5695718 -r 1c8cb321138a etc/zsh/site-functions/_grmlinitd
+--- a/etc/zsh/site-functions/_grmlinitd        Sun Apr 15 22:52:43 2007 +0200
++++ /dev/null  Thu Jan 01 00:00:00 1970 +0000
+@@ -1,4 +0,0 @@
+-#compdef Start Restart Stop Reload
+-local scripts
+-scripts=( ${$(print /etc/init.d/*(x)):t} )
+-_describe "service startup script" scripts
+diff -r b72fb5695718 -r 1c8cb321138a etc/zsh/site-functions/_hg
+--- a/etc/zsh/site-functions/_hg       Sun Apr 15 22:52:43 2007 +0200
++++ /dev/null  Thu Jan 01 00:00:00 1970 +0000
+@@ -1,481 +0,0 @@
+-#compdef hg
+-
+-# Zsh completion script for mercurial.  Rename this file to _hg and copy
+-# it into your zsh function path (/usr/share/zsh/site-functions for
+-# instance)
+-#
+-# Copyright (C) 2005 Steve Borho
+-#
+-# This is free software; you can redistribute it and/or modify it under
+-# the terms of the GNU General Public License as published by the Free
+-# Software Foundation; either version 2 of the License, or (at your
+-# option) any later version.
+-#
+-
+-local curcontext="$curcontext" state line
+-typeset -A opt_args
+-local subcmds repos tags newFiles addedFiles includeExclude commitMessage
+-
+-_mq_state () {
+-  case "$state" in
+-    (qapplied)
+-      compadd $(hg qapplied)
+-    ;;
+-    (qunapplied)
+-      compadd $(hg qunapplied)
+-    ;;
+-  esac
+-}
+-
+-tags=($(hg tags 2> /dev/null | sed -e 's/[0-9]*:[a-f0-9]\{40\}$//; s/ *$//'))
+-subcmds=($(hg -v help | sed -e '1,/^list of commands:/d' \
+-      -e '/^global options:/,$d' -e '/^ [^ ]/!d; s/[,:].*//g;'))
+-
+-# A lot of commands have these arguments
+-includeExclude=(
+-        '*-I-[include names matching the given patterns]:dir:_files -W $(hg root) -/'
+-        '*--include-[include names matching the given patterns]:dir:_files -W $(hg root) -/'
+-        '*-X-[exclude names matching the given patterns]:dir:_files -W $(hg root) -/'
+-        '*--exclude-[exclude names matching the given patterns]:dir:_files -W $(hg root) -/')
+-
+-commitMessage=(
+-        '(-m --message -l --logfile --edit)-e[edit commit message]'
+-        '(-m --message -l --logfile -e)--edit[edit commit message]'
+-        '(-e --edit -l --logfile --message)-m[use <text> as commit message]:message:'
+-        '(-e --edit -l --logfile -m)--message[use <text> as commit message]:message:'
+-        '(-e --edit -m --message --logfile)-l[read the commit message from <file>]:log file:_files'
+-        '(-e --edit -m --message -l)--logfile[read the commit message from <file>]:log file:_files')
+-
+-if [[ $service == "hg" ]]; then
+-    _arguments -C -A "-*" \
+-    '(--repository)-R[repository root directory]:root:_files -/' \
+-    '(-R)--repository[repository root directory]:root:_files -/' \
+-    '--cwd[change working directory]:new working directory:_files -/' \
+-    '(--noninteractive)-y[do not prompt, assume yes for any required answers]' \
+-    '(-y)--noninteractive[do not prompt, assume yes for any required answers]' \
+-    '(--verbose)-v[enable additional output]' \
+-    '(-v)--verbose[enable additional output]' \
+-    '(--quiet)-q[suppress output]' \
+-    '(-q)--quiet[suppress output]' \
+-    '(--help)-h[display help and exit]' \
+-    '(-h)--help[display help and exit]' \
+-    '--debug[debug mode]' \
+-    '--debugger[start debugger]' \
+-    '--traceback[print traceback on exception]' \
+-    '--time[time how long the command takes]' \
+-    '--profile[profile]' \
+-    '--version[output version information and exit]' \
+-    '*::command:->subcmd' && return 0
+-
+-    if (( CURRENT == 1 )); then
+-        _wanted commands expl 'hg command' compadd -a subcmds
+-        return
+-    fi
+-    service="$words[1]"
+-    curcontext="${curcontext%:*}=$service:"
+-fi
+-
+-case $service in
+-    (add)
+-        newFiles=(${(ps:\0:)"$(hg status -0un .)"})
+-        _arguments $includeExclude \
+-        '*:file:->unknown'
+-        _wanted files expl 'unknown files' compadd -a newFiles
+-    ;;
+-
+-    (addremove)
+-        _arguments $includeExclude \
+-        '*:directories:_files -/'  # assume they want to add/remove a dir
+-    ;;
+-
+-    (forget)
+-        addedFiles=(${(ps:\0:)"$(hg status -0an .)"})
+-        _arguments $includeExclude  \
+-        '*:file:->added'
+-        _wanted files expl 'newly added files' compadd -a addedFiles
+-    ;;
+-
+-    (remove|rm)
+-        _arguments $includeExclude \
+-        '*:file:_files'
+-    ;;
+-
+-    (copy|cp)
+-        _arguments $includeExclude \
+-        '(--after)-A[record a copy that has already occurred]' \
+-        '(-A)--after[record a copy that has already occurred]' \
+-        '(--force)-f[forcibly copy over an existing managed file]' \
+-        '(-f)--force[forcibly copy over an existing managed file]' \
+-        '(--parents)-p[append source path to dest]' \
+-        '(-p)--parents[append source path to dest]' \
+-        '*:files:_files'
+-    ;;
+-
+-    (rename|mv)
+-        if (( CURRENT == 2 )); then
+-            _arguments $includeExclude \
+-            '(--after)-A[record a rename that has already occurred]' \
+-            '(-A)--after[record a rename that has already occurred]' \
+-            '(--force)-f[replace destination if it exists]' \
+-            '(-F)--force[replace destination if it exists]' \
+-            '(--parents)-p[append source path to dest]' \
+-            '(-p)--parents[append source path to dest]' \
+-            '*:files:_files'
+-        else
+-            _arguments '*:destination:_files'
+-        fi
+-    ;;
+-
+-    (diff)
+-        _arguments $includeExclude \
+-        '*-r[revision]:revision:($tags)' \
+-        '*--rev[revision]:revision:($tags)' \
+-        '(--text)-a[treat all files as text]' \
+-        '(-a)--text[treat all files as text]' \
+-        '*:file:_files'
+-    ;;
+-
+-    (status|st)
+-        _arguments $includeExclude \
+-        '(--no-status)-n[hide status prefix]' \
+-        '(-n)--no-status[hide status prefix]' \
+-        '(--print0)-0[end filenames with NUL, for use with xargs]' \
+-        '(-0)--print0[end filenames with NUL, for use with xargs]' \
+-        '(--modified)-m[show only modified files]' \
+-        '(-m)--modified[show only modified files]' \
+-        '(--added)-a[show only added files]' \
+-        '(-a)--added[show only added files]' \
+-        '(--removed)-r[show only removed files]' \
+-        '(-r)--removed[show only removed files]' \
+-        '(--unknown)-u[show only unknown files]' \
+-        '(-u)--unknown[show only unknown files]' \
+-        '*:search pattern, then files:_files'
+-    ;;
+-
+-    (revert)
+-        addedFiles=(${(ps:\0:)"$(hg status -0amrn .)"})
+-        _arguments \
+-        '(--rev)-r[revision to revert to]:revision:($tags)' \
+-        '(-r)--rev[revision to revert to]:revision:($tags)' \
+-        '(--nonrecursive)-n[do not recurse into subdirectories]' \
+-        '(-n)--nonrecursive[do not recurse into subdirectories]' \
+-        '*:file:->modified'
+-        _wanted files expl 'mofified files' compadd -a addedFiles
+-    ;;
+-
+-    (commit|ci)
+-        addedFiles=(${(ps:\0:)"$(hg status -0amrn .)"})
+-        _arguments $includeExclude \
+-        '(--addremove)-A[run addremove during commit]' \
+-        '(-A)--addremove[run addremove during commit]' \
+-        '(--message)-m[use <txt> as commit message]:string:' \
+-        '(-m)--message[use <txt> as commit message]:string:' \
+-        '(--logfile)-l[read commit message from <file>]:.log file:_file -g \*.txt' \
+-        '(-l)--logfile[read commit message from <file>]:.log file:_file -g \*.txt' \
+-        '(--date)-d[record datecode as commit date]:date code:' \
+-        '(-d)--date[record datecode as commit date]:date code:' \
+-        '(--user)-u[record user as commiter]:user:' \
+-        '(-u)--user[record user as commiter]:user:' \
+-        '*:file:->modified'
+-        _wanted files expl 'mofified files' compadd -a addedFiles
+-    ;;
+-
+-    (cat)
+-        _arguments $includeExclude \
+-        '(--output)-o[print output to file with formatted name]:filespec:' \
+-        '(-o)--output[print output to file with formatted name]:filespec:' \
+-        '(--rev)-r[revision]:revision:($tags)' \
+-        '(-r)--rev[revision]:revision:($tags)' \
+-        '*:file:_files'
+-    ;;
+-
+-    (annotate)
+-        _arguments $includeExclude \
+-        '(--rev)-r[annotate the specified revision]:revision:($tags)' \
+-        '(-r)--rev[annotate the specified revision]:revision:($tags)' \
+-        '(--text)-a[treat all files as text]' \
+-        '(-a)--text[treat all files as text]' \
+-        '(--user)-u[list the author]' \
+-        '(-u)--user[list the author]' \
+-        '(--changeset)-c[list the changeset]' \
+-        '(-c)--changeset[list the changeset]' \
+-        '(--number)-n[list the revision number (default)]' \
+-        '(-n)--number[list the revision number (default)]' \
+-        '*:files:_files'
+-    ;;
+-
+-    (grep)
+-        _arguments $includeExclude \
+-        '*-r[search in given revision range]:revision:($tags)' \
+-        '*--rev[search in given revision range]:revision:($tags)' \
+-        '--all[print all revisions with matches]' \
+-        '(-print0)-0[end filenames with NUL, for use with xargs]' \
+-        '(-0)--print0[end filenames with NUL, for use with xargs]' \
+-        '(--ignore-case)-i[ignore case when matching]' \
+-        '(-i)--ignore-case[ignore case when matching]' \
+-        '(--files-with-matches)-l[print names of files and revs that match]' \
+-        '(-l)--files-with-matches[print names of files and revs that match]' \
+-        '(--line-number)-n[print matching line numbers]' \
+-        '(-n)--line-number[print matching line numbers]' \
+-        '(--user)-u[print user who committed change]' \
+-        '(-u)--user[print user who committed change]' \
+-        '*:search pattern:'
+-    ;;
+-
+-    (locate)
+-        _arguments $includeExclude \
+-        '(--rev)-r[search repository as it stood at revision]:revision:($tags)' \
+-        '(-r)--rev[search repository as it stood at revision]:revision:($tags)' \
+-        '(--print0)-0[end filenames with NUL, for use with xargs]' \
+-        '(-0)--print0[end filenames with NUL, for use with xargs]' \
+-        '(--fullpath)-f[print complete paths]' \
+-        '(-f)--fullpath[print complete paths]' \
+-        '*:search pattern:'
+-    ;;
+-
+-    (log|history)
+-        _arguments $includeExclude \
+-        '*-r[show the specified revision or range]:revision:($tags)' \
+-        '*--rev[show the specified revision or range]:revision:($tags)' \
+-        '(--no-merges -M --only-merges)-m[show only merge revisions]' \
+-        '(--no-merges -M -m)--only-merges[show only merge revisions]' \
+-        '(--only-merges -m --no-merges)-M[do not show merge revisions]' \
+-        '(--only-merges -m -M)--no-merges[do not show merge revisions]' \
+-        '(--keyword)-k[search for a keyword]:keyword:' \
+-        '(-k)--keyword[search for a keyword]:keyword:' \
+-        '(--branch)-b[show branches]' \
+-        '(-b)--branch[show branches]' \
+-        '(--patch)-p[show patch]' \
+-        '(-p)--patch[show patch]' \
+-        '*:file:_files'
+-    ;;
+-
+-    (update|checkout|co)
+-        _arguments \
+-        '(--branch)-b[checkout the head of a specific branch]' \
+-        '(-b)--branch[checkout the head of a specific branch]' \
+-        '(-C --clean --merge)-m[allow merging of branches]' \
+-        '(-C --clean -m)--merge[allow merging of branches]' \
+-        '(-m --merge --clean)-C[overwrite locally modified files]' \
+-        '(-m --merge -C)--clean[overwrite locally modified files]' \
+-        '*:revision or tag:($tags)'
+-    ;;
+-
+-    (tag)
+-        _arguments \
+-        '(--local)-l[make the tag local]' \
+-        '(-l)--local[make the tag local]' \
+-        '(--message)-m[message for tag commit log entry]:string:' \
+-        '(-m)--message[message for tag commit log entry]:string:' \
+-        '(--date)-d[record datecode as commit date]:date code:' \
+-        '(-d)--date[record datecode as commit date]:date code:' \
+-        '(--user)-u[record user as commiter]:user:' \
+-        '(-u)--user[record user as commiter]:user:' \
+-        '*:name, then revision:($tags)'
+-    ;;
+-
+-    (clone)
+-        if (( CURRENT == 2 )); then
+-            repos=( $(hg paths | sed -e 's/^.*= //') )
+-            _arguments \
+-            '(--no-update)-U[do not update the new working directory]' \
+-            '(-U)--no-update[do not update the new working directory]' \
+-            '(--ssh)-e[specify ssh command to use]:string:' \
+-            '(-e)--ssh[specify ssh command to use]:string:' \
+-            '--pull[use pull protocol to copy metadata]' \
+-            '--remotecmd[specify hg command to run on the remote side]:remote hg:' \
+-            '*:local repo:_files -/'
+-            _wanted source expl 'source repository' compadd -a repos
+-        elif (( CURRENT == 3 )); then
+-            _arguments '*:dest repo:_files -/'
+-        fi
+-    ;;
+-
+-    (rawcommit)
+-        _arguments \
+-        '(--parent)-p[parent revision]:revision:($tags)' \
+-        '(-p)--parent[parent revision]:revision:($tags)' \
+-        '(--date)-d[record datecode as commit date]:date code:' \
+-        '(-d)--date[record datecode as commit date]:date code:' \
+-        '(--user)-u[record user as commiter]:user:' \
+-        '(-u)--user[record user as commiter]:user:' \
+-        '(--message)-m[use <txt> as commit message]:string:' \
+-        '(-m)--message[use <txt> as commit message]:string:' \
+-        '(--logfile)-l[read commit message from <file>]:.log file:_file -g \*.txt' \
+-        '(-l)--logfile[read commit message from <file>]:.log file:_file -g \*.txt' \
+-        '(--files)-F[file list]:file list:_files' \
+-        '(-F)--files[file list]:file list:_files' \
+-        '*:files to commit:_files'
+-    ;;
+-
+-    (bundle)
+-        if (( CURRENT == 2 )); then
+-            _arguments '*:changegroup file:_files -g \*.hg'
+-        elif (( CURRENT == 3 )); then
+-            _arguments '*:other repo:_files -/'
+-        fi
+-    ;;
+-
+-    (unbundle)
+-        _arguments '*:changegroup .hg file:_files -g \*.hg'
+-    ;;
+-
+-    (incoming)
+-        _arguments \
+-        '(--patch)-p[show patch]' \
+-        '(-p)--patch[show patch]' \
+-        '(--no-merges)-M[do not show merge revisions]' \
+-        '(-M)--no-merges[do not show merge revisions]' \
+-        '(--newest-first)-n[show newest record first]' \
+-        '(-n)--newest-first[show newest record first]' \
+-        '*:mercurial repository:_files -/'
+-    ;;
+-
+-    (import|patch)
+-        _arguments \
+-        '(--strip)-p[directory strip option for patch (default: 1)]:count:' \
+-        '(-p)--strip[directory strip option for patch (default: 1)]:count:' \
+-        '(--force)-f[skip check for outstanding uncommitted changes]' \
+-        '(-f)--force[skip check for outstanding uncommitted changes]' \
+-        '(--base)-b[base directory to read patches from]:file:_files -W $(hg root) -/' \
+-        '(-b)--base[base directory to read patches from]:file:_files -W $(hg root) -/' \
+-        '*:patch file:_files'
+-    ;;
+-
+-    (pull)
+-        repos=( $(hg paths | sed -e 's/^.*= //') )
+-        _arguments \
+-        '(--update)-u[update working directory to tip after pull]' \
+-        '(-u)--update[update working directory to tip after pull]' \
+-        '(--ssh)-e[specify ssh command to use]:ssh command:' \
+-        '(-e)--ssh[specify ssh command to use]:ssh command:' \
+-        '--remotecmd[specify hg command to run on the remote side]:remote hg:' \
+-        '*:local repo:_files -/'
+-        _wanted source expl 'source repository' compadd -a repos
+-    ;;
+-
+-    (outgoing)
+-        _arguments \
+-        '(--patch)-p[show patch]' \
+-        '(-p)--patch[show patch]' \
+-        '(--no-merges)-M[do not show merge revisions]' \
+-        '(-M)--no-merges[do not show merge revisions]' \
+-        '(--newest-first)-n[show newest record first]' \
+-        '(-n)--newest-first[show newest record first]' \
+-        '*:local repo:_files -/'
+-        _wanted source expl 'source repository' compadd -a repos
+-    ;;
+-
+-    (export)
+-        _arguments \
+-        '(--outout)-o[print output to file with formatted name]:filespec:' \
+-        '(-o)--output[print output to file with formatted name]:filespec:' \
+-        '(--text)-a[treat all files as text]' \
+-        '(-a)--text[treat all files as text]' \
+-        '*:revision:->revs'
+-        _wanted revs expl 'revision or tag' compadd -a tags
+-    ;;
+-
+-    (push)
+-        repos=( $(hg paths | sed -e 's/^.*= //') )
+-        _arguments \
+-        '(--force)-f[force push]' \
+-        '(-f)--force[force push]' \
+-        '(--ssh)-e[specify ssh command to use]:ssh command:' \
+-        '(-e)--ssh[specify ssh command to use]:ssh command:' \
+-        '--remotecmd[specify hg command to run on the remote side]:remote hg:' \
+-        '*:local repo:_files -/'
+-        _wanted source expl 'source repository' compadd -a repos
+-    ;;
+-
+-    (serve)
+-        _arguments \
+-        '(--accesslog)-A[name of access log file]:log file:_files' \
+-        '(-A)--accesslog[name of access log file]:log file:_files' \
+-        '(--errorlog)-E[name of error log file]:log file:_files' \
+-        '(-E)--errorlog[name of error log file]:log file:_files' \
+-        '(--port)-p[listen port]:listen port:' \
+-        '(-p)--port[listen port]:listen port:' \
+-        '(--address)-a[interface address]:interface address:' \
+-        '(-a)--address[interface address]:interface address:' \
+-        '(--name)-n[name to show in web pages]:repository name:' \
+-        '(-n)--name[name to show in web pages]:repository name:' \
+-        '(--templates)-t[web template directory]:template dir:_files -/' \
+-        '(-t)--templates[web template directory]:template dir:_files -/' \
+-        '--style[web template style]:style' \
+-        '--stdio[for remote clients]' \
+-        '(--ipv6)-6[use IPv6 in addition to IPv4]' \
+-        '(-6)--ipv6[use IPv6 in addition to IPv4]'
+-    ;;
+-
+-    (help)
+-        _wanted commands expl 'hg command' compadd -a subcmds
+-    ;;
+-
+-    (heads)
+-        _arguments \
+-        '(--branches)-b[find branch info]' \
+-        '(-b)--branches[find branch info]'
+-    ;;
+-
+-    (paths)
+-        _arguments '*:symbolic name:(default default-push)'
+-    ;;
+-
+-    (init)
+-        _arguments '*:new repo directory:_files -/'
+-    ;;
+-
+-    (manifest)
+-        _arguments '*:revision:($tags)'
+-    ;;
+-
+-    (parents)
+-        _arguments '*:revision:($tags)'
+-    ;;
+-
+-    (identify|recover|root|undo|view|verify|version|ct|tags)
+-        # no arguments for these commands
+-    ;;
+-
+-    # MQ commands
+-    (qdel*|qrm|qrem*)
+-        _arguments \
+-            {-k,--keep}'[keep patch file]' \
+-            {-r,--rev}'[revision]:applied patch:->qapplied' \
+-            '*:unapplied patches:->qunapplied'
+-        _mq_state
+-    ;;
+-
+-    (qnew)
+-        _arguments $commitMessage \
+-            {-f,--force}'[import uncommitted changes into patch]' \
+-            ':patch name:'
+-    ;;
+-
+-    (qpo*)
+-        applied=( $(hg qapplied) )
+-        _arguments \
+-            (1){-a,--all}'[pop all patches]' \
+-            {-f,--force}'[forget any local changes]' \
+-            ':applied patch:->qapplied'
+-        _mq_state
+-    ;;
+-
+-    (qpu*)
+-        _arguments \
+-            (1){-a,--all}'[apply all patches]' \
+-            {-f,--force}'[apply if the patch has rejects]' \
+-            ':unapplied patch:->qunapplied'
+-        _mq_state
+-    ;;
+-    (qref*)
+-        _arguments $commitMessage $includeExclude \
+-            {-g,--git}'[use git extended diff format]' \
+-            {-s,--short}'[short refresh]'
+-    ;;
+-
+-    (*)
+-        _message "unknown hg command completion: $service"
+-    ;;
+-esac
+diff -r b72fb5695718 -r 1c8cb321138a etc/zsh/zshrc
+--- a/etc/zsh/zshrc    Sun Apr 15 22:52:43 2007 +0200
++++ b/etc/zsh/zshrc    Tue Apr 17 01:06:26 2007 +0200
+@@ -88,8 +88,16 @@
+ # Search path for the cd comman
+ #  cdpath=(.. ~)
+-# Support our own site-functions
+-  [ -d /etc/zsh/site-functions ] && FPATH=/etc/zsh/site-functions:$FPATH
++# completion functions go to /etc/zsh/completion.d
++# function files may be put into /etc/zsh/functions.d, from where they
++# will be automatically autoloaded.
++  [[ -d /etc/zsh/completion.d ]] && fpath+=( /etc/zsh/completion.d )
++  if [[ -d /etc/zsh/functions.d ]] ; then
++    fpath+=( /etc/zsh/functions.d )
++    for func in /etc/zsh/functions.d/[^_]*[^~] ; do
++      autoload -U ${func:t}
++    done
++  fi
+ # automatically remove duplicates from these arrays
+   typeset -U path cdpath fpath manpath
+@@ -764,12 +772,6 @@ Run "grml-tips ssl-certificate" if you n
+ # {{{ completion stuff
+-# Where to look for autoloaded function definitions
+-  if [ -d /etc/zsh/completion.d ] ; then
+-    local comp=/etc/zsh/completion.d
+-    for func in $comp/*(N-.:t); . ${comp}/${func}
+-  fi
+-
+ # called later (via is4 && grmlcomp)
+ # notice: use 'zstyle' for getting current settings
+ #         press ^Xh (control-x h) for getting tags in context; ^X? (control-x ?) to run complete_debug with trace output
+
+changeset:   151:af23f3eb99d9
+tag:         tip
+user:        Frank Terbeck <ft@grml.org>
+date:        Tue Apr 17 01:27:50 2007 +0200
+summary:     converting zsh completion functions to match common conventions.
+
+diff -r 1c8cb321138a -r af23f3eb99d9 etc/zsh/completion.d/_debian_rules
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/etc/zsh/completion.d/_debian_rules       Tue Apr 17 01:27:50 2007 +0200
+@@ -0,0 +1,4 @@
++#compdef debian/rules
++# type debian/rules <TAB> inside a source package
++
++words=(make -f debian/rules) _make
+diff -r 1c8cb321138a -r af23f3eb99d9 etc/zsh/completion.d/_fbset
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/etc/zsh/completion.d/_fbset      Tue Apr 17 01:27:50 2007 +0200
+@@ -0,0 +1,15 @@
++#compdef fbset
++# simple completion for fbset (switch resolution on console)
++
++fb_modes=(
++  640x480-60 640x480-72 640x480-75 640x480-90 640x480-100
++  768x576-75
++  800x600-48-lace 800x600-56 800x600-60 800x600-70 800x600-72 800x600-75 800x600-90 800x600-100
++  1024x768-43-lace 1024x768-60 1024x768-70 1024x768-72 1024x768-75 1024x768-90 1024x768-100
++  1152x864-43-lace 1152x864-47-lace 1152x864-60 1152x864-70 1152x864-75 1152x864-80
++  1280x960-75-8 1280x960-75 1280x960-75-32
++  1280x1024-43-lace 1280x1024-47-lace 1280x1024-60 1280x1024-70 1280x1024-74 1280x1024-75
++  1600x1200-60 1600x1200-66 1600x1200-76
++)
++
++compadd ${fb_modes}
+diff -r 1c8cb321138a -r af23f3eb99d9 etc/zsh/completion.d/_grml-lang
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/etc/zsh/completion.d/_grml-lang  Tue Apr 17 01:27:50 2007 +0200
+@@ -0,0 +1,3 @@
++#compdef grml-lang
++
++compadd at ch de us
+diff -r 1c8cb321138a -r af23f3eb99d9 etc/zsh/completion.d/_grml-wallpaper
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/etc/zsh/completion.d/_grml-wallpaper     Tue Apr 17 01:27:50 2007 +0200
+@@ -0,0 +1,5 @@
++#compdef grml-wallpaper
++
++dirs=(. /usr/share/grml/)
++_description files expl 'set desktop wallpaper on grml system'
++_files "$expl[@]" -W dirs -g '*.{jpg,png}(-.)'
+diff -r 1c8cb321138a -r af23f3eb99d9 etc/zsh/completion.d/_iwconfig
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/etc/zsh/completion.d/_iwconfig   Tue Apr 17 01:27:50 2007 +0200
+@@ -0,0 +1,86 @@
++#compdef iwconfig
++
++_wlan_interfaces() {
++    local intf
++    intf=$(iwconfig |& egrep 'IEEE 802.11[abg]' | cut -d' ' -f1 | tr ' ' \\n )
++    # intf=$( fgrep ': ' < /proc/net/wireless | cut -d: -f1 | tr \\n ' ' | tr -s " \t" )
++    _wanted interfaces expl 'wireless network interface' \
++        compadd ${intf}
++}
++
++_wlan_networks() {
++    networks=()
++    while read LINE
++    do
++        networks+=$LINE
++    done <<(iwlist scanning 2>/dev/null | grep ESSID | sed -e s/'.*"\(.*\)"'/'\1'/ )
++    _wanted -x names expl 'network name' \
++        compadd off any on ${networks}
++}
++
++local curcontext="$curcontext" state line expl ret=1
++
++_arguments -C \
++  '(1 * -)--help[display help information]' \
++  '(1 * -)--version[display version information]' \
++  '1:network interface:_wlan_interfaces' \
++  '*:parameter:->parameters' && ret=0
++
++if [[ -n "$state" ]]; then
++  local -a arg
++
++  case $words[CURRENT-1] in
++    essid) _wlan_networks;;
++    nwid|domain) _message -e ids 'network id' ;;
++    freq|channel) _message -e channels 'channel or frequency' ;;
++    sens) _message -e levels 'signal level' ;;
++    mode)
++      _wanted modes expl 'operating mode' compadd \
++          Ad-Hoc Managed Master Repeater Secondary Monitor Auto
++    ;;
++    ap) _message -e access-points 'access point' ;;
++    nick*) _message -e names 'nickname' ;;
++    rate|bit*) _message -e bit-rates 'bit rate' ;;
++    rts*|frag*) _message -e sizes 'size' ;;
++    key|enc*) _message -e keys 'key' ;;
++    power)
++      arg=(
++        \*{min,max}'[modifier]'
++    '*off[disable power management]'
++    '*on[enable power management]'
++    '*all[receive all packets]'
++    'unicast[receive unicast packets only]'
++    'multicast[receive multicast and broadcast packets only]'
++      )
++    ;&
++    min|max)
++      _values -S ' ' -w 'parameter' \
++        'period[set the period between wake ups]' \
++    'timeout[set timeout before sleep]' \
++    $arg[@] && ret=0
++    ;;
++    period|timeout) _message -e timeouts 'timeout' ;;
++    txpower) _message -e power 'transmit power' ;;
++    retry) _message -e retries 'retries' ;;
++    *)
++      _values -S ' ' -w 'option' \
++        'essid[set the network name]' \
++    '(nwid domain)'{nwid,domain}'[set the network ID]' \
++    '(freq channel)'{freq,channel}'[set the operating frequency or channel]' \
++    'sens[set the sensitivity threhold]' \
++        'mode[set operating mode]' \
++    'ap[register with given access point]' \
++    '(nick nickname)'nick{,name}'[set the nickname]' \
++    '(rate bit)'{rate,bit}'[set the bitrate]' \
++    'rts[set packet size threshold for sending RTS]' \
++    'frag[set maximum packet fragment size]' \
++    \*{key,enc}'[add encryption key]' \
++    '*power[manipulate power management scheme parameters]' \
++    'txpower[set transmit power]' \
++    'retry[set number of retries]' \
++    'commit[apply changes imediately]' && ret=0
++    ;;
++  esac
++fi
++
++return ret
+diff -r 1c8cb321138a -r af23f3eb99d9 etc/zsh/completion.d/debian_rules
+--- a/etc/zsh/completion.d/debian_rules        Tue Apr 17 01:06:26 2007 +0200
++++ /dev/null  Thu Jan 01 00:00:00 1970 +0000
+@@ -1,2 +0,0 @@
+-  _debian_rules() { words=(make -f debian/rules) _make }
+-  compdef _debian_rules debian/rules # type debian/rules <TAB> inside a source package
+diff -r 1c8cb321138a -r af23f3eb99d9 etc/zsh/completion.d/fbset
+--- a/etc/zsh/completion.d/fbset       Tue Apr 17 01:06:26 2007 +0200
++++ /dev/null  Thu Jan 01 00:00:00 1970 +0000
+@@ -1,3 +0,0 @@
+-# simple completion for fbset (switch resolution on console)
+-  _fbmodes() { compadd 640x480-60 640x480-72 640x480-75 640x480-90 640x480-100 768x576-75 800x600-48-lace 800x600-56 800x600-60 800x600-70 800x600-72 800x600-75 800x600-90 800x600-100 1024x768-43-lace 1024x768-60 1024x768-70 1024x768-72 1024x768-75 1024x768-90 1024x768-100 1152x864-43-lace 1152x864-47-lace 1152x864-60 1152x864-70 1152x864-75 1152x864-80 1280x960-75-8 1280x960-75 1280x960-75-32 1280x1024-43-lace 1280x1024-47-lace 1280x1024-60 1280x1024-70 1280x1024-74 1280x1024-75 1600x1200-60 1600x1200-66 1600x1200-76 }
+-  compdef _fbmodes fbset
+diff -r 1c8cb321138a -r af23f3eb99d9 etc/zsh/completion.d/grml-lang
+--- a/etc/zsh/completion.d/grml-lang   Tue Apr 17 01:06:26 2007 +0200
++++ /dev/null  Thu Jan 01 00:00:00 1970 +0000
+@@ -1,2 +0,0 @@
+-  _grml-lang() { compadd at ch de us ; }
+-  compdef _grml-lang grml-lang
+diff -r 1c8cb321138a -r af23f3eb99d9 etc/zsh/completion.d/grml-wallpaper
+--- a/etc/zsh/completion.d/grml-wallpaper      Tue Apr 17 01:06:26 2007 +0200
++++ /dev/null  Thu Jan 01 00:00:00 1970 +0000
+@@ -1,14 +0,0 @@
+-  grml-wallpaper() { 
+-    if [ -f /usr/share/grml/"$1" ] ; then
+-       Esetroot -scale /usr/share/grml/"$1"
+-    else
+-       Esetroot -scale $*
+-    fi
+-  }
+-
+-  _grml-wallpaper() {
+-    dirs=(. /usr/share/grml/)
+-    _description files expl 'set desktop wallpaper on grml system'
+-    _files "$expl[@]" -W dirs -g '*.{jpg,png}(-.)'
+-  }
+-  compdef _grml-wallpaper grml-wallpaper
+diff -r 1c8cb321138a -r af23f3eb99d9 etc/zsh/completion.d/iwconfig
+--- a/etc/zsh/completion.d/iwconfig    Tue Apr 17 01:06:26 2007 +0200
++++ /dev/null  Thu Jan 01 00:00:00 1970 +0000
+@@ -1,88 +0,0 @@
+-_wlan_interfaces() {
+-    local intf
+-    intf=$(iwconfig |& egrep 'IEEE 802.11[abg]' | cut -d' ' -f1 | tr ' ' \\n )
+-    # intf=$( fgrep ': ' < /proc/net/wireless | cut -d: -f1 | tr \\n ' ' | tr -s " \t" )
+-    _wanted interfaces expl 'wireless network interface' \
+-        compadd ${intf}
+-}
+-
+-_wlan_networks() {
+-    networks=()
+-    while read LINE
+-    do
+-        networks+=$LINE
+-    done <<(iwlist scanning 2>/dev/null | grep ESSID | sed -e s/'.*"\(.*\)"'/'\1'/ )
+-    _wanted -x names expl 'network name' \
+-        compadd off any on ${networks}
+-}
+-
+-_iwconfig() {
+-  local curcontext="$curcontext" state line expl ret=1
+-
+-  _arguments -C \
+-    '(1 * -)--help[display help information]' \
+-    '(1 * -)--version[display version information]' \
+-    '1:network interface:_wlan_interfaces' \
+-    '*:parameter:->parameters' && ret=0
+-
+-  if [[ -n "$state" ]]; then
+-    local -a arg
+-
+-    case $words[CURRENT-1] in
+-      essid) _wlan_networks;;
+-      nwid|domain) _message -e ids 'network id' ;;
+-      freq|channel) _message -e channels 'channel or frequency' ;;
+-      sens) _message -e levels 'signal level' ;;
+-      mode)
+-        _wanted modes expl 'operating mode' compadd \
+-            Ad-Hoc Managed Master Repeater Secondary Monitor Auto
+-      ;;
+-      ap) _message -e access-points 'access point' ;;
+-      nick*) _message -e names 'nickname' ;;
+-      rate|bit*) _message -e bit-rates 'bit rate' ;;
+-      rts*|frag*) _message -e sizes 'size' ;;
+-      key|enc*) _message -e keys 'key' ;;
+-      power)
+-        arg=(
+-          \*{min,max}'[modifier]'
+-      '*off[disable power management]'
+-      '*on[enable power management]'
+-      '*all[receive all packets]'
+-      'unicast[receive unicast packets only]'
+-      'multicast[receive multicast and broadcast packets only]'
+-        )
+-      ;&
+-      min|max)
+-        _values -S ' ' -w 'parameter' \
+-          'period[set the period between wake ups]' \
+-      'timeout[set timeout before sleep]' \
+-      $arg[@] && ret=0
+-      ;;
+-      period|timeout) _message -e timeouts 'timeout' ;;
+-      txpower) _message -e power 'transmit power' ;;
+-      retry) _message -e retries 'retries' ;;
+-      *)
+-        _values -S ' ' -w 'option' \
+-          'essid[set the network name]' \
+-      '(nwid domain)'{nwid,domain}'[set the network ID]' \
+-      '(freq channel)'{freq,channel}'[set the operating frequency or channel]' \
+-      'sens[set the sensitivity threhold]' \
+-          'mode[set operating mode]' \
+-      'ap[register with given access point]' \
+-      '(nick nickname)'nick{,name}'[set the nickname]' \
+-      '(rate bit)'{rate,bit}'[set the bitrate]' \
+-      'rts[set packet size threshold for sending RTS]' \
+-      'frag[set maximum packet fragment size]' \
+-      \*{key,enc}'[add encryption key]' \
+-      '*power[manipulate power management scheme parameters]' \
+-      'txpower[set transmit power]' \
+-      'retry[set number of retries]' \
+-      'commit[apply changes imediately]' && ret=0
+-      ;;
+-    esac
+-  fi
+-
+-  return ret
+-}
+-
+-compdef _iwconfig iwconfig
+diff -r 1c8cb321138a -r af23f3eb99d9 etc/zsh/functions.d/grml-wallpaper
+--- /dev/null  Thu Jan 01 00:00:00 1970 +0000
++++ b/etc/zsh/functions.d/grml-wallpaper       Tue Apr 17 01:27:50 2007 +0200
+@@ -0,0 +1,5 @@
++if [ -f /usr/share/grml/"$1" ] ; then
++   Esetroot -scale /usr/share/grml/"$1"
++else
++   Esetroot -scale "$@"
++fi
+