mirror of
https://github.com/envmodules/modules.git
synced 2026-05-30 00:12:31 +08:00
210 lines
9.5 KiB
Bash
210 lines
9.5 KiB
Bash
# shellcheck shell=bash
|
|
#
|
|
# Bash commandline completion
|
|
#
|
|
_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 -eq 1 ] && [ "${val: -1:1}" = '/' ]; then
|
|
# Bash >=4.0 is required for compopt
|
|
type compopt &>/dev/null && 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" ] || [ "${cur:0:1}" != '-' ]; then
|
|
module avail --color=never -s -t -S --no-indepth -o 'alias:indesym' "$cur" 2>&1
|
|
fi
|
|
}
|
|
|
|
_module_spider() {
|
|
local cur="${1:-}"
|
|
# skip spider call if word currently being completed is an option keyword
|
|
if [ -z "$cur" ] || [ "${cur:0:1}" != '-' ]; then
|
|
module spider --color=never -s -t -S --no-indepth -o 'alias:indesym' "$cur" 2>&1
|
|
fi
|
|
}
|
|
|
|
_module_savelist() {
|
|
module savelist --color=never -s -t 2>&1 | sed '
|
|
/No named collection\.$/d;
|
|
/Named collection list$/d;
|
|
/:$/d;'
|
|
}
|
|
|
|
_module_stashlist() {
|
|
module stashlist --color=never -s -t 2>&1 | sed '
|
|
/No stash collection\.$/d;
|
|
/Stash collection list$/d;
|
|
/:$/d;'
|
|
}
|
|
|
|
_module_not_yet_loaded() {
|
|
_module_avail "${1:-}" | sort | @SED_ERE@ "\%^(${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
|
|
}
|
|
|
|
_module() {
|
|
local cur="$2" prev="$3"
|
|
|
|
COMPREPLY=()
|
|
|
|
case "$prev" in
|
|
add|add-any|load|load-any|try-add|try-load)
|
|
_module_comgen_words_and_files "@comp_load_opts@ $(_module_not_yet_loaded "$cur")" "$cur";;
|
|
avail) _module_comgen_words_and_files "@comp_avail_opts@ $(_module_avail "$cur")" "$cur";;
|
|
spider) _module_comgen_words_and_files "@comp_avail_opts@ $(_module_spider "$cur")" "$cur";;
|
|
edit) _module_comgen_words_and_files "$(_module_avail "$cur")" "$cur";;
|
|
aliases) COMPREPLY=( $(compgen -W "@comp_aliases_opts@" -- "$cur") );;
|
|
list|savelist) COMPREPLY=( $(compgen -W "@comp_list_opts@" -- "$cur") );;
|
|
stashlist) COMPREPLY=( $(compgen -W "@comp_stashlist_opts@" -- "$cur") );;
|
|
stashpop|stashshow|stashrm)
|
|
COMPREPLY=( $(compgen -W "$(_module_stashlist)" -- "$cur") );;
|
|
clear) COMPREPLY=( $(compgen -W "@comp_clear_opts@" -- "$cur") );;
|
|
restore|save|saveshow|saverm|is-saved)
|
|
COMPREPLY=( $(compgen -W "$(_module_savelist)" -- "$cur") );;
|
|
rm|del|remove|unload)
|
|
COMPREPLY=( $(compgen -W "@comp_unload_opts@ ${LOADEDMODULES//:/ }" -- "$cur") );;
|
|
switch|swap) COMPREPLY=( $(compgen -W "@comp_load_opts@ ${LOADEDMODULES//:/ }" -- "$cur") );;
|
|
unuse|is-used) COMPREPLY=( $(IFS=: compgen -W "${MODULEPATH}" -- "$cur") );;
|
|
use|-a|--append|cachebuild) ;; # let readline handle the completion
|
|
display|help|show|test|path|paths|is-loaded|info-loaded)
|
|
_module_comgen_words_and_files "@comp_mfile_opts@ $(_module_avail "$cur")" "$cur";;
|
|
is-avail)
|
|
_module_comgen_words_and_files "@comp_isavail_opts@ $(_module_avail "$cur")" "$cur";;
|
|
lint)
|
|
_module_comgen_words_and_files "@comp_lint_opts@ $(_module_avail "$cur")" "$cur";;
|
|
mod-to-sh)
|
|
_module_comgen_words_and_files "@comp_modtosh_opts@ $(_module_not_yet_loaded "$cur")" "$cur";;
|
|
whatis)
|
|
_module_comgen_words_and_files "@comp_whatis_opts@ $(_module_avail "$cur")" "$cur";;
|
|
apropos|keyword|search)
|
|
COMPREPLY=( $(compgen -W "@comp_search_opts@" -- "$cur") );;
|
|
config|--reset) COMPREPLY=( $(compgen -W "@comp_config_opts@" -- "$cur") );;
|
|
-h|--help|-V|--version|--dumpname|purge|refresh|reload|sh-to-mod|source|state|reset|stash|stashclear|cacheclear)
|
|
;;
|
|
append-path|prepend-path)
|
|
COMPREPLY=( $(compgen -W "@comp_path_opts@" -- "$cur") );;
|
|
remove-path)
|
|
COMPREPLY=( $(compgen -W "@comp_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 "@comp_opts@" -- "$cur") );;
|
|
*) COMPREPLY=( $(compgen -W "@comp_opts@ @comp_cmds@" -- "$cur") );;
|
|
esac
|
|
fi;;
|
|
esac
|
|
}
|
|
|
|
# define completion for ml command if command exists
|
|
if type -t ml >/dev/null; then
|
|
_ml() {
|
|
local cur="$2" prev="$3"
|
|
|
|
COMPREPLY=()
|
|
|
|
case "$prev" in
|
|
add|add-any|load|load-any|try-add|try-load)
|
|
_module_comgen_words_and_files "@comp_load_opts@ $(_module_not_yet_loaded "$cur")" "$cur";;
|
|
avail) _module_comgen_words_and_files "@comp_avail_opts@ $(_module_avail "$cur")" "$cur";;
|
|
spider) _module_comgen_words_and_files "@comp_avail_opts@ $(_module_spider "$cur")" "$cur";;
|
|
edit) _module_comgen_words_and_files "$(_module_avail "$cur")" "$cur";;
|
|
aliases) COMPREPLY=( $(compgen -W "@comp_aliases_opts@" -- "$cur") );;
|
|
list|savelist) COMPREPLY=( $(compgen -W "@comp_list_opts@" -- "$cur") );;
|
|
stashlist) COMPREPLY=( $(compgen -W "@comp_stashlist_opts@" -- "$cur") );;
|
|
stashpop|stashshow|stashrm)
|
|
COMPREPLY=( $(compgen -W "$(_module_stashlist)" -- "$cur") );;
|
|
clear) COMPREPLY=( $(compgen -W "@comp_clear_opts@" -- "$cur") );;
|
|
restore|save|saveshow|saverm|is-saved)
|
|
COMPREPLY=( $(compgen -W "$(_module_savelist)" -- "$cur") );;
|
|
rm|del|remove|unload)
|
|
COMPREPLY=( $(compgen -W "@comp_unload_opts@ ${LOADEDMODULES//:/ }" -- "$cur") );;
|
|
switch|swap) COMPREPLY=( $(compgen -W "@comp_load_opts@ ${LOADEDMODULES//:/ }" -- "$cur") );;
|
|
unuse|is-used) COMPREPLY=( $(IFS=: compgen -W "${MODULEPATH}" -- "$cur") );;
|
|
use|-a|--append|cachebuild) ;; # let readline handle the completion
|
|
display|help|show|test|path|paths|is-loaded|info-loaded)
|
|
_module_comgen_words_and_files "@comp_mfile_opts@ $(_module_avail "$cur")" "$cur";;
|
|
is-avail)
|
|
_module_comgen_words_and_files "@comp_isavail_opts@ $(_module_avail "$cur")" "$cur";;
|
|
lint)
|
|
_module_comgen_words_and_files "@comp_lint_opts@ $(_module_avail "$cur")" "$cur";;
|
|
mod-to-sh)
|
|
_module_comgen_words_and_files "@comp_modtosh_opts@ $(_module_not_yet_loaded "$cur")" "$cur";;
|
|
whatis)
|
|
_module_comgen_words_and_files "@comp_whatis_opts@ $(_module_avail "$cur")" "$cur";;
|
|
apropos|keyword|search)
|
|
COMPREPLY=( $(compgen -W "@comp_search_opts@" -- "$cur") );;
|
|
config|--reset) COMPREPLY=( $(compgen -W "@comp_config_opts@" -- "$cur") );;
|
|
-h|--help|-V|--version|--dumpname|purge|refresh|reload|sh-to-mod|source|state|reset|stash|stashclear|cacheclear)
|
|
;;
|
|
append-path|prepend-path)
|
|
COMPREPLY=( $(compgen -W "@comp_path_opts@" -- "$cur") );;
|
|
remove-path)
|
|
COMPREPLY=( $(compgen -W "@comp_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 "@comp_opts@" -- "$cur") )
|
|
loaded_modules=""
|
|
for i in ${LOADEDMODULES//:/ }; do
|
|
loaded_modules+="-${i} "
|
|
done
|
|
COMPREPLY=( "${COMPREPLY[@]}" $(compgen -W "@comp_load_opts@ $loaded_modules" -- "$cur") );;
|
|
*) _module_comgen_words_and_files "@comp_load_opts@ $(_module_not_yet_loaded "$cur")" "$cur"
|
|
COMPREPLY=( "${COMPREPLY[@]}" $(compgen -W "@comp_opts@ @comp_cmds@" -- "$cur") )
|
|
loaded_modules=""
|
|
for i in ${LOADEDMODULES//:/ }; do
|
|
loaded_modules+="-${i} "
|
|
done
|
|
COMPREPLY=( "${COMPREPLY[@]}" $(compgen -W "@comp_load_opts@ $loaded_modules" -- "$cur") );;
|
|
esac
|
|
fi;;
|
|
esac
|
|
}
|
|
complete -o default -F _ml ml
|
|
fi
|
|
complete -o default -F _module module
|