# # 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 -a "${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" -o "${cur:0:1}" != '-' ]; then module avail --color=never -s -t -S --no-indepth -o '' $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_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" cmds opts 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";; 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") );; 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) ;; # 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";; 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|purge|refresh|reload|sh-to-mod|source|state) ;; 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" cmds opts 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";; 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") );; 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) ;; # 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";; 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|purge|refresh|reload|sh-to-mod|source|state) ;; 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