mirror of
https://github.com/envmodules/modules.git
synced 2026-06-07 00:25:05 +08:00
Like for 'append-path', register 'is-avail' modulefile Tcl command as a module sub-command to make it reachable from the command line. Add the new command to the existing shell completion scripts (bash, tcsh fish, zsh). Document new command in the module.1 man page. Check 'is-avail' command argument error in 071-args tests of 00-init suite. Test 'module is-avail' cannot be called from a modulefile with 151-module-onlytop in 50-cmds suite. Add 155-is-avail tests in 70-maint suite to validate new sub-command. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913.
140 lines
5.4 KiB
Bash
140 lines
5.4 KiB
Bash
#
|
|
# Bash commandline completion (bash 3.0 and above)
|
|
#
|
|
_module_avail() {
|
|
module avail -t 2>&1 | sed '
|
|
/^-\+/d; /^\s*$/d;
|
|
/->.*$/d;
|
|
/:$/d;
|
|
/:ERROR:/d;
|
|
s#^\(.*\)/\(.\+\)(.*default.*)#\1\n\1\/\2#;
|
|
s#(.*)$##g;
|
|
s#\s*$##g;
|
|
s#/*$##g;'
|
|
}
|
|
|
|
_module_savelist() {
|
|
module savelist -t 2>&1 | sed '
|
|
/Named collection list$/d;
|
|
/:$/d;
|
|
/:ERROR:/d;'
|
|
}
|
|
|
|
_module_not_yet_loaded() {
|
|
_module_avail | sort | sed -r "\%^(${LOADEDMODULES//:/|})$%d"
|
|
}
|
|
|
|
_module_long_arg_list() {
|
|
local cur="$1" i
|
|
|
|
if [[ ${COMP_WORDS[COMP_CWORD-2]} == sw* ]]
|
|
then
|
|
COMPREPLY=( $(compgen -W "$(_module_not_yet_loaded)" -- "$cur") )
|
|
return
|
|
fi
|
|
for ((i = COMP_CWORD - 1; i > 0; i--))
|
|
do case ${COMP_WORDS[$i]} in
|
|
add|load)
|
|
COMPREPLY=( $(compgen -W "$(_module_not_yet_loaded)" -- "$cur") )
|
|
break;;
|
|
rm|remove|unload|switch|swap)
|
|
COMPREPLY=( $(IFS=: compgen -W "${LOADEDMODULES}" -- "$cur") )
|
|
break;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
@compatversion@# define completion relative to active version
|
|
@compatversion@if [ "$MODULES_USE_COMPAT_VERSION" = '1' ]; then
|
|
@compatversion@_module() {
|
|
@compatversion@ local cur="$2" prev="$3" cmds opts
|
|
@compatversion@
|
|
@compatversion@ COMPREPLY=()
|
|
@compatversion@
|
|
@compatversion@ cmds="add apropos avail clear display help\
|
|
@compatversion@ initadd initclear initlist initprepend initrm initswitch\
|
|
@compatversion@ keyword list load purge refresh rm show swap switch\
|
|
@compatversion@ unload unuse update use whatis"
|
|
@compatversion@
|
|
@compatversion@ opts="-c -f -h -i -l -s -t -u -v -H -V\
|
|
@compatversion@ --create --force --help --human --icase\
|
|
@compatversion@ --long --silent --terse --userlvl --verbose --version"
|
|
@compatversion@
|
|
@compatversion@ case "$prev" in
|
|
@compatversion@ add|load) COMPREPLY=( $(compgen -W "$(_module_not_yet_loaded)" -- "$cur") );;
|
|
@compatversion@ rm|remove|unload|switch|swap)
|
|
@compatversion@ COMPREPLY=( $(IFS=: compgen -W "${LOADEDMODULES}" -- "$cur") );;
|
|
@compatversion@ unuse) COMPREPLY=( $(IFS=: compgen -W "${MODULEPATH}" -- "$cur") );;
|
|
@compatversion@ use|*-a*) ;; # let readline handle the completion
|
|
@compatversion@ -u|--userlvl) COMPREPLY=( $(compgen -W "novice expert advanced" -- "$cur") );;
|
|
@compatversion@ av*|disp*|help|show|whatis)
|
|
@compatversion@ COMPREPLY=( $(compgen -W "$(_module_avail)" -- "$cur") );;
|
|
@compatversion@ *) if test $COMP_CWORD -gt 2
|
|
@compatversion@ then
|
|
@compatversion@ _module_long_arg_list "$cur"
|
|
@compatversion@ else
|
|
@compatversion@ case "$cur" in
|
|
@compatversion@ # The mappings below are optional abbreviations for convenience
|
|
@compatversion@ ls) COMPREPLY="list";; # map ls -> list
|
|
@compatversion@ r*) COMPREPLY="rm";; # also covers 'remove'
|
|
@compatversion@ sw*) COMPREPLY="switch";;
|
|
@compatversion@
|
|
@compatversion@ -*) COMPREPLY=( $(compgen -W "$opts" -- "$cur") );;
|
|
@compatversion@ *) COMPREPLY=( $(compgen -W "$cmds" -- "$cur") );;
|
|
@compatversion@ esac
|
|
@compatversion@ fi;;
|
|
@compatversion@ esac
|
|
@compatversion@}
|
|
@compatversion@else
|
|
_module() {
|
|
local cur="$2" prev="$3" cmds opts
|
|
|
|
COMPREPLY=()
|
|
|
|
cmds="add apropos aliases avail append-path display help initadd\
|
|
initclear initlist initprepend initrm is-loaded is-saved is-used\
|
|
is-avail keyword list load path paths purge prepend-path refresh\
|
|
reload restore rm remove-path save savelist saveshow saverm search\
|
|
show source swap switch test unload unuse use whatis"
|
|
|
|
opts="-D -h -V --debug --help --version"
|
|
list_opts="-l -t --long --terse"
|
|
path_opts="-d --delim"
|
|
avail_opts="-d -L -l -t --default --latest --long --terse"
|
|
|
|
case "$prev" in
|
|
add|load) COMPREPLY=( $(compgen -W "$(_module_not_yet_loaded)" -- "$cur") );;
|
|
avail) COMPREPLY=( $(compgen -W "$avail_opts $(_module_avail)" -- "$cur") );;
|
|
list|savelist) COMPREPLY=( $(compgen -W "$list_opts" -- "$cur") );;
|
|
restore|save|saveshow|saverm|is-saved)
|
|
COMPREPLY=( $(compgen -W "$(_module_savelist)" -- "$cur") );;
|
|
rm|remove|unload|switch|swap)
|
|
COMPREPLY=( $(IFS=: compgen -W "${LOADEDMODULES}" -- "$cur") );;
|
|
unuse|is-used) COMPREPLY=( $(IFS=: compgen -W "${MODULEPATH}" -- "$cur") );;
|
|
use|-a|--append) ;; # let readline handle the completion
|
|
display|help|show|test|whatis|is-loaded|is-avail)
|
|
COMPREPLY=( $(compgen -W "$(_module_avail)" -- "$cur") );;
|
|
-h|--help|-V|--version|aliases|apropos|keyword|purge|refresh|reload|search|source)
|
|
;;
|
|
append-path|prepend-path|remove-path)
|
|
COMPREPLY=( $(compgen -W "$path_opts" -- "$cur") );;
|
|
initadd|initclear|initlist|initprepend|initrm)
|
|
;;
|
|
*) if test $COMP_CWORD -gt 2
|
|
then
|
|
_module_long_arg_list "$cur"
|
|
else
|
|
case "$cur" in
|
|
# The mappings below are optional abbreviations for convenience
|
|
ls) COMPREPLY="list";; # map ls -> list
|
|
sw*) COMPREPLY="switch";;
|
|
|
|
-*) COMPREPLY=( $(compgen -W "$opts" -- "$cur") );;
|
|
*) COMPREPLY=( $(compgen -W "$opts $cmds" -- "$cur") );;
|
|
esac
|
|
fi;;
|
|
esac
|
|
}
|
|
@compatversion@fi
|
|
complete -o default -F _module module
|