Files
modules/init/bash_completion.in
Xavier Delaruelle 00ffadfa17 init: add --dumpname option to completion scripts
Signed-off-by: Xavier Delaruelle <xavier.delaruelle@cea.fr>
2024-11-23 17:06:30 -05:00

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