mirror of
https://github.com/envmodules/modules.git
synced 2026-06-18 00:06:53 +08:00
Add the ability to configure whether an implicit default version should be defined for modules with no default version explicitly defined. When enabled, which stays the default behavior, a module version is automatically selected (latest one) when the generic name of the module is passed. When implicit default selection is disabled, the name of modules to evaluate should be fully qualified elsewhere an error is returned. This option is set at `./configure` time with the `--enable-implicit-default` and `--disable-implicit-default` options. It could be superseded with the `MODULES_IMPLICIT_DEFAULT` environment variable, that could be set with `config` module sub-command throught the `implicit_default` option. When implicit_default is disabled: - module implicit default versions are excluded from 'module avail -d' results. - false is returned when argument passed to the 'is-avail' sub-command is a directory without an explicit default set in it. - and auto_handling is enabled, the requirement load mechanism will fail on requirement relying on module implicit default version Fixes #179.
169 lines
6.8 KiB
Bash
169 lines
6.8 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 config 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"
|
|
config_opts="--dump-state --reset allow_extra_siteconfig contact auto_handling\
|
|
avail_indepth collection_pin_version collection_target color colors\
|
|
extra_siteconfig implicit_default pager rcfile run_quarantine\
|
|
silent_shell_debug term_background unload_match_order"
|
|
|
|
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";;
|
|
config|--reset) COMPREPLY=( $(compgen -W "$config_opts" -- "$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
|