Advertisement
RSFalcon7

Bash completion for modulecmd

Oct 31st, 2013
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.45 KB | None | 0 0
  1. #
  2. # Bash commandline completion (bash 3.0 and above) for Modules 3.2.8
  3. #
  4. _module_avail() {
  5.     /usr/bin/modulecmd bash -t avail 2>&1 | sed '
  6.        /:$/d;
  7.        /:ERROR:/d;
  8.        s#^\(.*\)/\(.\+\)(default)#\1\n\1\/\2#;
  9.        s#/(default)##g;
  10.        s#/*$##g;'
  11. }
  12.  
  13. _module_not_yet_loaded() {
  14.     comm -23  <(_module_avail|sort)  <(tr : '\n' <<<${LOADEDMODULES}|sort)
  15. }
  16.  
  17. _module_long_arg_list() {
  18.     local cur="$1" i
  19.  
  20.     if [[ ${COMP_WORDS[COMP_CWORD-2]} == sw* ]]
  21.     then
  22.         COMPREPLY=( $(compgen -W "$(_module_not_yet_loaded)" -- "$cur") )
  23.         return
  24.     fi
  25.     for ((i = COMP_CWORD - 1; i > 0; i--))
  26.     do case ${COMP_WORDS[$i]} in
  27.        add|load)
  28.         COMPREPLY=( $(compgen -W "$(_module_not_yet_loaded)" -- "$cur") )
  29.         break;;
  30.        rm|remove|unload|switch|swap)
  31.         COMPREPLY=( $(IFS=: compgen -W "${LOADEDMODULES}" -- "$cur") )
  32.         break;;
  33.        esac
  34.     done
  35. }
  36.  
  37. _module() {
  38.     local cur="$2" prev="$3" cmds opts
  39.  
  40.     COMPREPLY=()
  41.  
  42.     cmds="add apropos avail clear display help\
  43.          initadd initclear initlist initprepend initrm initswitch\
  44.          keyword list load purge refresh rm show swap switch\
  45.          unload unuse update use whatis"
  46.  
  47.     opts="-c -f -h -i -l -s -t -u -v -H -V\
  48.          --create --force  --help  --human   --icase\
  49.          --long   --silent --terse --userlvl --verbose --version"
  50.  
  51.     case "$prev" in
  52.     add|load)   COMPREPLY=( $(compgen -W "$(_module_not_yet_loaded)" -- "$cur") );;
  53.     rm|remove|unload|switch|swap)
  54.             COMPREPLY=( $(IFS=: compgen -W "${LOADEDMODULES}" -- "$cur") );;
  55.     unuse)      COMPREPLY=( $(IFS=: compgen -W "${MODULEPATH}" -- "$cur") );;
  56.     use|*-a*)   ;;          # let readline handle the completion
  57.     -u|--userlvl)   COMPREPLY=( $(compgen -W "novice expert advanced" -- "$cur") );;
  58.     display|help|show|whatis)
  59.             COMPREPLY=( $(compgen -W "$(_module_avail)" -- "$cur") );;
  60.     *) if test $COMP_CWORD -gt 2
  61.        then
  62.         _module_long_arg_list "$cur"
  63.        else
  64.         case "$cur" in
  65.         # The mappings below are optional abbreviations for convenience
  66.         ls) COMPREPLY="list";;  # map ls -> list
  67.         r*) COMPREPLY="rm";;    # also covers 'remove'
  68.         sw*)    COMPREPLY="switch";;
  69.  
  70.         -*) COMPREPLY=( $(compgen -W "$opts" -- "$cur") );;
  71.         *)  COMPREPLY=( $(compgen -W "$cmds" -- "$cur") );;
  72.         esac
  73.        fi;;
  74.     esac
  75. }
  76. complete -o default -F _module module
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement