1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
# ========================================
# Glasgow Haskell Compiler Bash Completion
# ========================================
#
# For how to use the GHC bash completion, see the README.
#
# This file implements bash completion for both GHC and GHCi.
#
# - We use GHC's --show-options to get a list of the available
# flags. It is aware that some flags are used for GHC, and others for GHCi.
# - We understand when the argument;
# * has to be a directory name (eg. following -hidir)
# * cannot be completed (eg. following -e)
#
# Future work;
# - Some flags needs their argument after an equal sign;
# eg. -fmax-simplifier-iterations=N
# Currently the flag will be completed without knowledge of
# the required argument.
# - Complete package names/ids.
# eg. -package-id <TAB><TAB> should list valid package-ids
# - The +RTS flags are not supported.
# +RTS <TAB><TAB> should list valid RTS flags.
_ghc ()
{
local completions=`$1 --show-options`
local cur="${COMP_WORDS[COMP_CWORD]}"
local prev="${COMP_WORDS[COMP_CWORD-1]}"
# Complete the current flag based on the previous flag.
case "$prev" in
-hidir|-odir|-stubdir|-dumpdir|-outputdir|-tmpdir|-hpcdir|-dylib-install-name|-framework-path)
# Complete only with directory names.
compopt -o dirnames
return 0
;;
-package-name|-package|-hide-package|-ignore-package|-trust|-distrust)
# Should complete package names. Not implemented.
# To do this well, ghc has to be invoked with --show-packages with all
# package related flags the user has provided.
return 0
;;
-e|-x|-hcsuf|-hisuf|-osuf|-framework)
# Do nothing. Next argument is not a flag.
return 0
;;
esac
# Look at the current flag.
if [[ "$cur" == -* ]]; then
# All GHC flags start with a dash, so we want to see this before we start
# suggesting flags. Otherwise we would complete flags when the user might
# want to type a file name.
COMPREPLY=( $( compgen -W "$completions -x" -- "$cur" ) )
fi
}
complete -F _ghc -o default ghc
complete -F _ghc -o default ghci
|