1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
|
#compdef module
# Main dispatcher
_module()
{
_arguments -s \
'(-H --help)'{--help,-H}'[display usage info]' \
'(-V --version)'{--version,-V}'[module command version and configuration options]' \
'(-f --force)'{--force,-f}'[force active dependency resolution]' \
'(-t --terse)'{--terse,-t}'[display avail and list output in short format]' \
'(-l --long)'{--long,-l}'[display avail and list output in long format]' \
'(-h --human)'{--human,-h}'[display short output in human-readable format]' \
'(-v --verbose)'{--verbose,-v}'[verbose]' \
'(-s --silent)'{--silent,-s}'[disable verbose messages]' \
'(-c --create)'{--create,-c}'[create caches]' \
'(-i --icase)'{--icase,-i}'[case insensitive]' \
'(-u --userlvl)'{--userlvl,-u}'[set user level to value]:level:(novice expert advanced)' \
'*::module command:_module_command'
}
(( $+functions[_module_command] )) || _module_command()
{
local -a _module_cmds
_module_cmds=(
"help:print the usage of each sub-command"
"load:load a module into the shell environment"
"add:load a module into the shell environment"
"unload:remove a module from the shell environment"
"rm:remove a module from the shell environment"
"switch:switch loaded a loaded module with another module"
"swap:switch loaded a loaded module with another module"
"display:display information about a module"
"show:display information about a module"
"list:list loaded modules"
"avail:list all available modules"
"use:add a directory to MODULEPATH"
"unuse:remove a directory from MODULEPATH"
"update:reload all loaded modules"
"clear:clear loaded modules information"
"purge:unload all loaded modules"
"refresh:refresh all non-persistent components of loaded modules"
"whatis:display module information"
"apropos:search for a given keyword in modules"
"keyword:search for a given keyword in modules"
"initadd:add or append a module to the user's shell init file"
"initprepend:add or prepend a module to the user's shell init files"
"initrm:remove a module from the user's shell init file"
"initswitch:switch modules in the user's shell init file"
"initlist:list all loaded modules in the user's shell init files"
"initclear:clear all modules from the user's shell init files"
)
if (( CURRENT == 1 )); then
_describe -t commands 'module command' _module_cmds
else
local curcontext="$curcontext" ret
cmd="${${_module_cmds[(r)$words[1]:*]%%:*}}"
# Deal with any aliases
case $cmd in
add) cmd="load";;
rm) cmd="unload";;
swap) cmd="switch";;
show) cmd="display";;
keyword) cmd="apropos";;
esac
if (( $#cmd ));
then
local update_policy
curcontext="${curcontext%:*:*}:module-${cmd}:"
zstyle -s ":completion:${curcontext}:" cache-policy update_policy
_call_function ret _module_$cmd || _message 'no more arguments'
else
_message "unknown module command: $words[1]"
fi
return ret
fi
}
# Fills the available modules cache
_module_available_modules()
{
if [[ -n $MODULEPATH ]] && [[ ${+_available_modules} -eq 0 ]]
then
_available_modules=(${$(find -L ${(e)=MODULEPATH//:/ } -type f -print 2>/dev/null | grep -v \\.version | sed -e 's,\('${${(e)=MODULEPATH//:/\/\\\|}%\\\|}'\),,g' -e 's,^/*,,g' -e 's,\.lua$,,g'):#*\~})
fi
}
# Completion function for help
(( $+functions[_module_help] )) || _module_help()
{
_module_available_modules
_multi_parts / "($_available_modules)"
}
# Completion function for load|add
(( $+functions[_module_load] )) || _module_load()
{
_module_available_modules
_multi_parts / "($_available_modules)"
}
# Completion function for unload|rm
(( $+functions[_module_unload] )) || _module_unload()
{
compadd "$@" -- ${=LOADEDMODULES//:/ }
}
# Completion function for switch|swap
(( $+functions[_module_switch] )) || _module_switch()
{
# Actually first argument could be a loaded module
_module_available_modules
_multi_parts / "($_available_modules)"
}
# Completion function for display|show
(( $+functions[_module_display] )) || _module_display()
{
_module_available_modules
_multi_parts / "($_available_modules)"
}
# Completion function for avail
### No completion (yet?)
# Completion function for use
(( $+functions[_module_use] )) || _module_use()
{
_arguments -s \
'(-a --append)'{--append,-a}'[append the directories instead of prepending]' \
'*:directory:_files -/'
}
# Completion function for unuse
(( $+functions[_module_unuse] )) || _module_unuse()
{
compadd "$@" -- ${=MODULEPATH//:/ }
}
# Completion function for whatis
(( $+functions[_module_whatis] )) || _module_whatis()
{
_module_available_modules
_multi_parts / "($_available_modules)"
}
# Completion function for initadd
(( $+functions[_module_initadd] )) || _module_initadd()
{
_module_available_modules
_multi_parts / "($_available_modules)"
}
# Completion function for initprepend
(( $+functions[_module_initprepend] )) || _module_initprepend()
{
_module_available_modules
_multi_parts / "($_available_modules)"
}
# Completion function for initrm
(( $+functions[_module_initrm] )) || _module_initrm()
{
_module_available_modules
_multi_parts / "($_available_modules)"
}
# Completion function for initswitch
(( $+functions[_module_initswitch] )) || _module_initswitch()
{
_module_available_modules
_multi_parts / "($_available_modules)"
}
_module "$@"
|