_clm() { local cur prev opts COMPRREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" opts="-I -IL -P -w -nw -d -nd -sa -nsa -mv -ms -O -PO -S -PS -ABC -PABC -c -lt -nlt -lat -nlat -lset -ci -nci -ou -nou -fusion -nfusion -pt -npt -desc -exl -tst -funcmayfail -varnotused -funcnotused -nowarn -ns -no-opt-link -l -sl -e -E -aC -h -s -b -sc -t -nt -gc -ngc -st -nst -nr -gcm -gcc -gcf -gci -dynamics -nortsopts -p -pic -optabc -bytecode" case $prev in "-IL") # Complete Clean libraries opts="$(find "$CLEAN_HOME/lib" -mindepth 1 -type d -not -name exe -regex ".*/lib/\([^/]*\|Platform/Deprecated/[^/]*\)" | cut -c $((${#CLEAN_HOME}+6))-)" COMPREPLY=($(compgen -W "$opts" -- $cur)) return 0 ;; "-I") # Complete directories _filedir for index in "${!COMPREPLY[@]}"; do [ -d "${COMPREPLY[index]}" ] || unset -v 'COMPREPLY[$index]' done return 0 ;; "-l" | "-sl") # Complete files _filedir for index in "${!COMPREPLY[@]}"; do [ -f "${COMPREPLY[index]}" ] || unset -v 'COMPREPLY[$index]' done return 0 ;; "-P" | "-e" | "-E" | "-h" | "-s" | "-gcf" | "-gci") # Complete nothing return 0 ;; esac if [[ $cur == -* ]]; then # Complete options COMPREPLY=($(compgen -W "$opts" -- $cur)) return 0 else # Main module; complete icl module names opts="$(find -name '*.icl' -maxdepth 4 -type f -print 2>/dev/null | sed 's:^\./::;s:/:.:g;s:\.icl$::' | grep -v '[- ]')" COMPREPLY=($(compgen -W "$opts" -- $cur)) return 0 fi } complete -F _clm clm