mirror of
https://github.com/envmodules/modules.git
synced 2026-06-03 00:33:18 +08:00
Leverage --force command-line switch on 'clear' sub-command to skip confirmation dialog. Fixes #268.
163 lines
6.4 KiB
Bash
163 lines
6.4 KiB
Bash
#
|
|
# Bash commandline completion (bash 3.0 and above)
|
|
#
|
|
_module_comgen_words_and_files() {
|
|
local k=0
|
|
local setnospace=1
|
|
# do not append space to word completed if it is a directory (ends with /)
|
|
for val in $(compgen -W "$1" -- "$2"); do
|
|
if [ !$setnospace -a "${val: -1:1}" = '/' ]; then
|
|
compopt -o nospace
|
|
setnospace=0
|
|
fi
|
|
COMPREPLY[k++]="$val"
|
|
done
|
|
}
|
|
|
|
_module_avail() {
|
|
local cur="${1:-}"
|
|
# skip avail call if word currently being completed is an option keyword
|
|
if [ -z "$cur" -o "${cur:0:1}" != '-' ]; then
|
|
module avail --color=never -t --no-indepth $cur 2>&1 | sed '
|
|
/^-\+/d; /^\s*$/d;
|
|
/->.*$/d;
|
|
/:$/d;
|
|
/:ERROR:/d;
|
|
s#^\(.*\)/\(.\+\)(.*default.*)#\1\n\1\/\2#;
|
|
s#(.*)$##g;
|
|
s#\s*$##g;'
|
|
fi
|
|
}
|
|
|
|
_module_savelist() {
|
|
module savelist --color=never -t 2>&1 | sed '
|
|
/No named collection\.$/d;
|
|
/Named collection list$/d;
|
|
/:$/d;
|
|
/:ERROR:/d;'
|
|
}
|
|
|
|
_module_not_yet_loaded() {
|
|
_module_avail ${1:-} | sort | sed -E "\%^(${LOADEDMODULES//:/|})$%d"
|
|
}
|
|
|
|
_module_long_arg_list() {
|
|
local cur="$1" i
|
|
|
|
if [[ ${COMP_WORDS[COMP_CWORD-2]} == sw* ]]
|
|
then
|
|
_module_comgen_words_and_files "$(_module_not_yet_loaded $cur)" "$cur"
|
|
return
|
|
fi
|
|
for ((i = COMP_CWORD - 1; i > 0; i--))
|
|
do case ${COMP_WORDS[$i]} in
|
|
add|load)
|
|
_module_comgen_words_and_files "$(_module_not_yet_loaded $cur)" "$cur"
|
|
break;;
|
|
rm|del|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 del help\
|
|
@compatversion@ initadd initclear initlist initprepend initrm initswitch\
|
|
@compatversion@ keyword list load purge refresh remove 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|del|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 clear del display help initadd\
|
|
initclear initlist initprepend initrm is-loaded is-saved is-used\
|
|
is-avail info-loaded keyword list load path paths purge prepend-path\
|
|
refresh reload restore rm remove remove-path save savelist saveshow\
|
|
saverm search show source swap switch test unload unuse use whatis"
|
|
|
|
opts="-D -h -V --debug --help --version --paginate --no-pager --color --color="
|
|
load_opts="--auto --no-auto --force -f"
|
|
list_opts="-l -t --long --terse"
|
|
clear_opts="--force -f"
|
|
path_opts="-d --delim --duplicates"
|
|
rm_path_opts="-d --delim --index"
|
|
avail_opts="-d -L -l -t --default --latest --long --terse --indepth --no-indepth"
|
|
|
|
case "$prev" in
|
|
add|load) _module_comgen_words_and_files "$load_opts $(_module_not_yet_loaded $cur)" "$cur";;
|
|
avail) _module_comgen_words_and_files "$avail_opts $(_module_avail $cur)" "$cur";;
|
|
list|savelist) COMPREPLY=( $(compgen -W "$list_opts" -- "$cur") );;
|
|
clear) COMPREPLY=( $(compgen -W "$clear_opts" -- "$cur") );;
|
|
restore|save|saveshow|saverm|is-saved)
|
|
COMPREPLY=( $(compgen -W "$(_module_savelist)" -- "$cur") );;
|
|
rm|del|remove|unload|switch|swap)
|
|
COMPREPLY=( $(compgen -W "$load_opts ${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|info-loaded)
|
|
_module_comgen_words_and_files "$(_module_avail $cur)" "$cur";;
|
|
-h|--help|-V|--version|aliases|apropos|keyword|purge|refresh|reload|search|source)
|
|
;;
|
|
append-path|prepend-path)
|
|
COMPREPLY=( $(compgen -W "$path_opts" -- "$cur") );;
|
|
remove-path)
|
|
COMPREPLY=( $(compgen -W "$rm_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
|