summaryrefslogtreecommitdiff
path: root/dev-lang/ghc/files/ghc-bash-completion
diff options
context:
space:
mode:
Diffstat (limited to 'dev-lang/ghc/files/ghc-bash-completion')
-rw-r--r--dev-lang/ghc/files/ghc-bash-completion218
1 files changed, 0 insertions, 218 deletions
diff --git a/dev-lang/ghc/files/ghc-bash-completion b/dev-lang/ghc/files/ghc-bash-completion
deleted file mode 100644
index 0ee2149cd81b..000000000000
--- a/dev-lang/ghc/files/ghc-bash-completion
+++ /dev/null
@@ -1,218 +0,0 @@
-# ghc-pkg command line completion for bash
-#
-# Copyright 2006-2007 Lennart Kolmodin <kolmodin@dtek.chalmers.se>
-
-_ghc-pkg-get-ghc-pkg()
-{
- echo ghc-pkg
-}
-
-_ghc-pkg-pkg-fields()
-{
- # usage: _ghc-pkg-pkg-fields pkg-id
- #
- # list all fields of the pkg-id
-
- # same fields for all packages but different in different versions of
- # ghc-pkg? this can probably be done better/faster
-
- if [[ -z "$1" ]]; then
- echo "usage: _ghc-pkg-pkg-fields pkg-id"
- return 1
- fi
-
- local fields
-
- fields="$( $(_ghc-pkg-get-ghc-pkg) describe $1 )"
-
- #if [[ fields != *"cannot find package"* ]]; then
- echo "$fields" | grep ".*:.*" | sed "s/^\(.*\):.*\$/\1/"
- #fi
-}
-
-_ghc-pkg-pkg-ids()
-{
- # usage: _ghc-pkg-pkg-ids
- #
- # simply lists all package ids known by ghc-pkg.
- $(_ghc-pkg-get-ghc-pkg) list --simple-output
-}
-
-_ghc-pkg-pkgs()
-{
- # usage: _ghc-pkg-pkgs [include-pkgs] [include-ids]
- #
- # with optional parameter include-pkgs it will list all packages known
- # to ghc-pkg.
- # with optional parameter include-ids it will list all package-ids known
- # to ghc-pkg.
- local pkgs
- local result
- pkgs=( $( _ghc-pkg-pkg-ids ) )
- result=( )
-
- local withPkgs="no" withIds="no"
- while [[ -n "$1" ]]; do
- case "$1" in
- include-pkgs)
- withPkgs="yes" ;;
- include-ids)
- withIds="yes" ;;
- *)
- echo "unknown parameter '$1' to _ghc-pkg-pkgs"
- return 1 ;;
- esac
- shift
- done
-
- # user must supply either include-pkgs, include-ids or both
- if [[ $withPkgs != "yes" && $withIds != "yes" ]]; then
- echo "usage: _ghc-pkg-pkgs [include-pkgs] [include-ids]"
- return 1
- fi
-
- # find all packages if the user requested them
- if [[ $withPkgs == "yes" ]]; then
- # O(n^2) algorithm to exclude duplicates
- for p in ${pkgs[*]}; do
- p="${p//-[0-9.]*/}"
- for existing in ${result[*]}; do
- if [[ "$existing" == "$p" ]]; then
- continue 2
- fi
- done
- result=( "${result[@]}" "${p}" )
- done
- fi
-
- # include all pkg-ids if requested
- if [[ $withIds == "yes" ]]; then
- result=( "${result[@]}" "${pkgs[@]}" )
- fi
-
- # we are finished, echo the result
- echo "${result[*]}"
-
- # happy ending
- return 0
-}
-
-_ghc-pkg()
-{
- local cur
- cur=${COMP_WORDS[COMP_CWORD]}
-
- COMPREPLY=()
-
- local actions flags
- actions='register update unregister expose hide list latest describe field'
- dbflags="--user \
- --global \
- -f --package-conf= \
- --global-conf="
- registerflags="--force \
- -g --auto-ghci-libs \
- -D --define-name="
- listflags="--simple-output"
- flags="$dbflags \
- $registerflags \
- $listflags \
- -? --help \
- -V --version"
-
- # if it's the users first word; complete it and return
- if (($COMP_CWORD == 1)); then
- COMPREPLY=( $( compgen -W "$actions $flags" -- $cur ) )
- return 0
- fi
-
- # now we know we have at least one word written
-
- local action="unknown" \
- prev numwords \
- cword act
- prev=${COMP_WORDS[COMP_CWORD-1]}
- numwords=${#COMP_WORDS[@]}
-
- # find the action with O(n*m) algorithm
- # where n = ${#COMP_WORDS[*]}
- # m = number of actions
- for cword in ${COMP_WORDS[*]}; do
- for act in $actions; do
- if [[ "$cword" == "$act" ]]; then
- action=$cword
- fi
- done
- done
-
- case $action in
- register|update)
- # we want to complete both flags and paths, how?
- # we do it by checking if the user has started to write a flag
- # or a path, and then decide what to complete.
- # that is, to complete a flag, the user must start to write a '-'
- if [[ "$cur" == -* ]]; then
- # (we assume) it's the start of a flag
- # set COMPREPLY to flags relevant to these actions
- COMPREPLY=( $( compgen -W "$dbflags $registerflags" -- $cur ) )
- fi
- ;;
- unregister|expose|hide|list|describe)
- # all these actions can be completed with exactly one argument,
- # a pkg-id.
- COMPREPLY=( $( compgen -W "$dbflags" -- $cur ) )
-
- # add special flags for some actions
- if [[ "$action" == "list" ]]; then
- COMPREPLY+=( $( compgen -W "$listflags" -- $cur ) )
- fi
-
- COMPREPLY+=( $( compgen -W "$( _ghc-pkg-pkgs include-ids )" -- $cur ) )
- ;;
- latest)
- # complete only packages, not package ids
- COMPREPLY=( $( compgen -W "$( _ghc-pkg-pkgs include-pkgs )" -- $cur ) )
- ;;
- field)
- # we should always complete on the flags...
- COMPREPLY=( $( compgen -W "$dbflags" -- $cur ) )
-
- # then, we should either complete the package name or the field
- # lets find out which one
-
- # find the number of words in COMP_WORDS before COMP_CWORD that
- # isn't flags. it should be 2 or 3 for us to complete it,
- # exactly 2 if we should complete the package name
- # exactly 3 if we should complete the field name
- # otherwise, don't do any additional completion except the
- # flags
-
- # count the number of non flags up till the current word
- local numnonflags=0 lastword i
- for (( i=0 ; $i < $COMP_CWORD ; i++ )); do
- if [[ ${COMP_WORDS[$i]} != -* ]]; then
- lastword=${COMP_WORDS[$i]}
- numnonflags=$(( ++numnonflags ))
- fi
- done
-
- case $numnonflags in
- 2)
- # complete on pkg-ids
- COMPREPLY+=( $( compgen -W "$( _ghc-pkg-pkgs include-ids )" -- $cur ) ) ;;
- 3)
- # complete on fields
- COMPREPLY+=( $( compgen -W "$( _ghc-pkg-pkg-fields $lastword )" -- $cur ) ) ;;
- esac
- ;;
- *)
- # unknown action, not yet given by the user
- # return all possible completions
- COMPREPLY=( $( compgen -W "$actions $flags" -- $cur ) )
- ;;
- esac
-}
-
-complete -F _ghc-pkg -o default ghc-pkg
-
-# vim: set ft=sh tw=80 sw=4 et :