Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH: updated _modutils



Now handles modinfo and lsmod, makes use of the grouping of options with
the same description, better exclusion lists and more resilient to
modprobe not being in your path.

Oliver

--- Completion/Linux/Command/_modutils	Tue Apr  1 14:09:37 2003
+++ Completion/Linux/Command/_modutils	Wed Apr 16 15:21:09 2003
@@ -1,87 +1,83 @@
-#compdef modprobe rmmod
+#compdef lsmod modinfo modprobe rmmod
 
-local curcontext="$curcontext" state line expl loaded
+local curcontext="$curcontext" expl state line modules ign args
 
-_modutils_loaded_modules() {
-
-if [[ -r /proc/modules ]]; then
- loaded=(${${(f)"$(</proc/modules)"}%% *})
-elif [[ -x /sbin/lsmod ]]; then
- loaded=(${${(f)"$(/sbin/lsmod)"}[2,-1]%% *})
-else
- return 1
-fi
-
-_wanted modules expl 'loaded module' compadd -a loaded
-}
+args=(
+  '(-)'{-V,--version}'[print version]'
+  '(-)'{-h,--help}'[print help text]'
+)
 
 case "$service" in
-  rmmod)
-
-  _arguments '(--all)-a[remove all unused autocleanable modules]' \
-             '(-a)--all' \
-             '(--persist)-e[save persistent data]' \
-             '(-e)--persist' \
-             '(--help)-h[print help text]' \
-             '(-h)--help' \
-             '(--stacks)-r[remove a module stack]' \
-             '(-r)--stacks' \
-             '(--syslog)-s[output to syslog]' \
-             '(-s)--syslog' \
-             '(--verbose)-v[be verbose]' \
-             '(-v)--verbose' \
-             '(--version)-V[print version]' \
-             '(-V)--version' \
-             '*:loaded module:_modutils_loaded_modules' && return 0
+  lsmod) _arguments -s "$args[@]" && return ;;
+  
+  modinfo)
+    _arguments -s -C "$args[@]" \
+      '(-)'{-a,--author}"[display the module's author]" \
+      '(-)'{-d,--description}"[display the module's description]" \
+      '(-)'{-f+,--format}'[display module info in specified format]' \
+      '(-)'{-l,--license}"[display the module's license]" \
+      '(-)'{-n,--filename}"[display the module's filename]" \
+      '(-)'{-p,--parameters}'[display the typed parameters that a module may support]' \
+      '1:module file:->all_modules' && return
   ;;
 
   modprobe)
-
-  _modprobe_arguments=(
-             '(--all)-a[all]' \
-             '(-a)--all' \
-             '(--showconfig)-c[showconfig]' \
-             '(-c)--showconfig' \
-             '(--debug)-d[debug]' \
-             '(-d)--debug' \
-             '(--autoclean)-k[set autoclean]' \
-             '(-k)--autoclean' \
-             '(--show)-n[do not act]' \
-             '(-n)--show' \
-             '(--quiet)-q[do not complain about insmod failures]' \
-             '(-q)--quiet' \
-             '(--syslog)-s[report via syslog instead of stderr]' \
-             '(-s)--syslog' \
-             '(--type)-t[module type]:moduletype:' \
-             '(-t)--type:moduletype:' \
-             '(--verbose)-v[print all commands as executed]' \
-             '(-v)--verbose' \
-             '(--version)-V[show release version]' \
-             '(-V)--version' \
-             '(--config)-C[config file]:config file:_files' \
-             '(-C)--config:config file:_files'
-  )
-
-  _arguments -C '(--remove)-r[remove]:*:loaded module:->modprobe_remove' \
-             '(-r)--remove:*:loaded module:->modprobe_remove' \
-             '(--list)-l[list matching modules]:*:module file:->modprobe_list' \
-             '(-l)--list:*:module file:->modprobe_list' \
-	     "$_modprobe_arguments[@]" && return 0
-
+    ign='-h --help -V --version -c --showconfig'
+    _arguments -s -C "$args[@]" \
+      "(-a --all $ign)"{-a,--all}'[load all matching modules]' \
+      '(-)'{-c,--showconfig}'[show current configuration]' \
+      "(-d --debug $ign)"{-d,--debug}'[print debug info]' \
+      "(-k --autoclean $ign)"{-k,--autoclean}'[set autoclean]' \
+      "(-n --show $ign)"{-n,--show}"[don't actually perform action]" \
+      "(-q --quiet $ign)"{-q,--quiet}"[don't complain about insmod failures]" \
+      "(-s --syslog $ign)"{-s,--syslog}'[report via syslog instead of stderr]' \
+      "(* -t --type $ign)"{-t,--type}'[module type]:module type' \
+      "(-v --verbose $ign)"{-v,--verbose}'[print all commands as executed]' \
+      '(-C --config)'{-C,--config}'[specify config file]:config file:_files' \
+      "(-r --remove -l --list -t --type -a --all $ign)"{-r,--remove}'[remove module (stacks)]' \
+      "(* -l --list -r --remove $ign)"{-l,--list}'[list matching modules]' \
+      "(-c $ign)1:modules:->all_modules" \
+      "(-c -l --list -t --type $ign)*:modules:->params" && return
+      
+      [[ -n $state ]] && (( $+opt_args[-r] )) && state=loaded_modules        
   ;;
 
+  rmmod)
+    _arguments -s -C "$args[@]" \
+      '(-a --all)'{-a,--all}'[remove all unused autocleanable modules]' \
+      '(-e --persist)'{-e,--persist}'[save persistent data]' \
+      '(-r --stacks)'{-r,--stacks}'[remove a module stack]' \
+      '(-s --syslog)'{-s,--syslog}'[output to syslog]' \
+      '(-v --verbose)'{-v,--verbose}'[be verbose]' \
+      '*:loaded module:->loaded_modules' && return
+  ;;
 esac 
 
 case "$state" in
-  modprobe_remove)
-        _call_function ret _modutils_$state && return ret
-        _arguments "$_modprobe_arguments[@]" \
-                   '*:loaded module:_modutils_loaded_modules'
+  loaded_modules)
+    if [[ -r /proc/modules ]]; then
+     modules=(${${(f)"$(</proc/modules)"}%% *})
+    elif [[ -x /sbin/lsmod ]]; then
+     modules=(${${(f)"$(/sbin/lsmod)"}[2,-1]%% *})
+    else
+     return 1
+    fi
+    
+    _wanted modules expl 'loaded module' compadd -a modules && return
   ;;
 
-  modprobe_list)
-        _call_function ret _modutils_$state && return ret
-        _arguments "$_modprobe_arguments[@]" \
-                   '*:module file:compadd ${^${(M)${(f)"$(modprobe -c)"}:#path*}#*[=]}/**/*.o(:t)'
+  all_modules)
+    modules=( ${${(M)${(f)"$(_call_program modules ${(M)words[1]##*/}modprobe -c 2>/dev/null)"}:#path*}#*[=]} )
+    _wanted modules expl module compadd ${^modules}/**/*.o(:t:r) && return
+  ;;
 
+  params)
+    if compset -P '*='; then
+      _message -e value 'parameter value'
+    else
+      _message -e parameter 'module parameter'
+    fi
+  ;;
 esac
+
+return 1



Messages sorted by: Reverse Date, Date, Thread, Author