racket/racket-completion.bash
OBS User mrdocs 2a66e01b0d Accepting request 151137 from home:toganm:testing
Racket is Lisp/scheme like language comes with lots goodies
with packages helping to learn programming or develop applications.

The intention is to submit Racket to Factory, so it can be part of the next
release after 12.3

Thanks

Togan

OBS-URL: https://build.opensuse.org/request/show/151137
OBS-URL: https://build.opensuse.org/package/show/devel:languages:misc/racket?expand=0&rev=1
2013-02-05 18:30:59 +00:00

182 lines
5.1 KiB
Bash

# -*- mode: shell-script; sh-basic-offset: 2; indent-tabs-mode: nil -*-
# ex: ts=2 sw=2 noet filetype=sh
# To enable this, add the following line to ~/.bash_completion
#
# source $PLTHOME/collects/meta/contrib/completion/racket-completion.bash
#
# Change $PLTHOME to whatever references your Racket installation. You
# will need to make sure that you have bash completions enabled, usually
# with "source /etc/bash_completion".
# This completes only *.{rkt,ss,scm,scrbl} files unless there are none,
# in which case it completes other things.
_racket_filedir() {
COMPREPLY=()
_filedir "@(rkt|rktl|ss|scm|scrbl)"
if [[ "${#COMPREPLY[@]}" -eq 0 ]]; then _filedir; fi
}
_find_exe() {
local exename="$1"
local dir="$(dirname "${COMP_WORDS[0]}")"
local exe="$(basename "${COMP_WORDS[0]}")"
if [[ "$dir" != "." || "${COMP_WORDS[0]}" = "$dir/$exe" ]]; then
echo "$dir/$exename"
else
echo "$exename"
fi
}
_racket() {
local cur prev singleopts doubleopts
COMPREPLY=()
cur="$(_get_cword)"
prev="${COMP_WORDS[COMP_CWORD-1]}"
doubleopts="--help --version --eval --load --require --lib --script"
doubleopts+=" --require-script --main --repl --no-lib --version --warn"
doubleopts+=" --syslog --collects --search --addon --no-compiled"
doubleopts+=" --no-init-file"
singleopts="-h -e -f -t -l -p -r -u -k -m -i -n -v -W -L -X -S -A -I -U"
singleopts+=" -N -j -d -b -c -q"
warnlevels="none fatal error warning info debug"
# if "--" is already given, complete all kind of files, but no options
for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
if [[ "${COMP_WORDS[i]}" == "--" ]]; then _racket_filedir; return; fi
done
# -k takes *two* integer arguments
if [[ 2 < "${#COMP_WORDS[@]}" ]]; then
if [[ "${COMP_WORDS[COMP_CWORD-2]}" == "-k" ]]; then return; fi
fi
case "$cur" in
"--"* )
COMPREPLY=( $(compgen -W "$doubleopts" -- "$cur") )
;;
"-"* )
COMPREPLY=( $(compgen -W "$singleopts" -- "$cur") )
;;
* )
case "$prev" in
# these do not take anything completable as arguments
"--help" | "-h" | "-e" | "--eval" | "-p" | "-k" )
;;
# these take dirs (not files) as arguments
"-X" | "-S" | "-A" | "--collects" | "--search" | "--addon" )
_filedir -d
;;
# these take warnlevels as arguments
"-W" | "--warn" | "-L" | "--syslog" )
COMPREPLY=( $(compgen -W "$warnlevels" -- "$cur") )
;;
# otherwise, just a file
* )
_racket_filedir
;;
esac
;;
esac
}
complete -F _racket racket
complete -F _racket gracket
complete -F _racket gracket-text
_raco_cmd="$(_find_exe "raco")"
_raco_planet() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local planetcmds=$(
printf '%s\n' "--help"
"${_raco_cmd}" planet --help 2>&1 | awk '/^ *raco planet / { print $3 }'
)
COMPREPLY=( $(compgen -W "$planetcmds" -- "$cur") )
}
_raco_cmds=$()
_racket_cmd="$(_find_exe "racket")"
_raco_help() {
local cur="${COMP_WORDS[COMP_CWORD]}"
if [[ ${#_raco_cmds[@]} -eq 0 ]]; then
_raco_cmds=$(
echo "help"
"$_racket_cmd" -e '(begin (require raco/all-tools)
(for ([(k v) (all-tools)]) (printf "~a\n" k)))'
)
fi
COMPREPLY=( $(compgen -W "$_raco_cmds" -- "$cur") )
}
_racket_collects_dirs=()
_complete_collects() {
local cur="$1"
if [[ "${#_racket_collects_dirs[@]}" -eq 0 ]]; then
_racket_collects_dirs=(
$( $_racket_cmd -e
'(for-each displayln (current-library-collection-paths))' )
)
fi
local wordlist=""
for dir in "${_racket_collects_dirs[@]}"; do
wordlist="$wordlist $(for x in $(compgen -d "$dir"); do basename "$x"; done)"
done
COMPREPLY=( $(compgen -W "$wordlist" -- "$cur") )
}
_raco_setup()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
local prev="${COMP_WORDS[COMP_CWORD-1]}"
if [[ "$COMP_CWORD" -eq 2 ]]; then
_complete_collects ${cur}
else
case "${prev}" in
# specifying a particular collection
"-l" ) _complete_collects "$cur" ;;
* ) _filedir ;;
esac
fi
}
_raco() {
COMPREPLY=()
local cur="${COMP_WORDS[COMP_CWORD]}"
#
# Complete the arguments to some of the basic commands.
#
local makeopts="--disable-inline --no-deps -p --prefix --no-prim -v -vv --help -h"
if [[ "$COMP_CWORD" -eq 1 ]]; then
# removing the empty string on the next line breaks things. such as my brain.
_raco_cmds="$(
echo "help"
$_racket_cmd -e '(begin (require raco/all-tools)
(for ([(k v) (all-tools)]) (printf "~a\n" k)))')"
COMPREPLY=($(compgen -W "$_raco_cmds" -- "$cur"))
elif [[ "$COMP_CWORD" -ge 2 ]]; then
# Here we'll handle the main raco commands
local prev="${COMP_WORDS[1]}"
case "$prev" in
"make" )
case "$cur" in
"-"* ) COMPREPLY=( $(compgen -W "$makeopts" -- "$cur") ) ;;
* ) _filedir ;;
esac ;;
"planet" ) _raco_planet ;;
"help" ) _raco_help ;;
"setup" ) _raco_setup ;;
* ) _filedir ;;
esac
else
_filedir
fi
}
complete -F _raco raco