Files
modules/init/bash_completion.in
Xavier Delaruelle 62334ed0f7 Improve new {append,prepend,remove}-path commands
Refactor code to call from the module command line modulefile-specific
commands. These commands can only be called from the command line, not
when calling 'module' procedure from a modulefile, to avoid any
ambiguity.

When parsing command line arguments, check context to know if '-d' means
'--default' (avail command) or '--delim' (*-path commands).

Add the new commands to the existing shell completion scripts (bash,
tcsh, fish, zsh).

Document new commands in the module.1 man page.

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.
2017-11-26 10:40:29 +01:00

140 lines
5.3 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 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)
COMPREPLY=( $(compgen -W "$(_module_savelist)" -- "$cur") );;
rm|remove|unload|switch|swap)
COMPREPLY=( $(IFS=: compgen -W "${LOADEDMODULES}" -- "$cur") );;
unuse) COMPREPLY=( $(IFS=: compgen -W "${MODULEPATH}" -- "$cur") );;
use|*-a*) ;; # let readline handle the completion
display|help|show|test|whatis)
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