diff options
author | Jeremy Olexa <darkside@gentoo.org> | 2009-06-13 02:17:24 +0000 |
---|---|---|
committer | Jeremy Olexa <darkside@gentoo.org> | 2009-06-13 02:17:24 +0000 |
commit | 1b484f39457b43388418feeb6e11efdceb50fee4 (patch) | |
tree | b00ec0abc29c8112cba374317b77122bd99c143a | |
parent | add missing ebuild options to ebuild(1) completion, bug 270560 (diff) | |
download | gentoo-bashcomp-1b484f39457b43388418feeb6e11efdceb50fee4.tar.gz gentoo-bashcomp-1b484f39457b43388418feeb6e11efdceb50fee4.tar.bz2 gentoo-bashcomp-1b484f39457b43388418feeb6e11efdceb50fee4.zip |
Add support for rc-service, patch by Finn Wilke <wilkefi@googlemail.com>, bug 227139gentoo-bashcomp-20090613
svn path=/trunk/; revision=91
-rw-r--r-- | gentoo | 105 |
1 files changed, 105 insertions, 0 deletions
@@ -1857,4 +1857,109 @@ _metagen() { complete -F _metagen metagen } +have rc-service && { +_rc_service() { + local cur prev numwords opts + local words i x filename + local action actionpos + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + numwords=${#COMP_WORDS[*]} + + if [[ ${prev} == '>' || ${prev} == '<' ]] ; then + COMPREPLY=($(compgen -f -- ${cur})) + return 0 + fi + + # find action + for x in ${COMP_LINE} ; do + if [[ ${x} =~ --(list|exists|resolve) ]] || \ + [[ ${x} =~ -(l|e|r) ]] + then + action=${x} + break + fi + done + if [[ -n ${action} ]]; then + for ((i = 0; i < ${numwords}; i++ )); do + if [[ ${COMP_WORDS[${i}]} == "${action}" ]]; then + actionpos=${i} + break + fi + done + + for ((i = 1; i < ${numwords}; i++ )); do + if [[ ! ${COMP_WORDS[$i]} == -* ]]; then + break + fi + done + fi + + if [[ ${COMP_CWORD} -eq 3 ]]; then + return 1 + fi + + # check if an option was typed + if [[ ${cur} == -* ]]; then + if [[ ${cur} == --* ]]; then + opts="--list --exists --resolve" + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 + elif [[ ${cur} == -* ]]; then + opts="-l -e -r" + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 + fi + + + # NOTE: This slows things down! + # (Adapted from bash_completion by Ian Macdonald <ian@caliban.org>) + # This removes any options from the list of completions that have + # already been specified on the command line. + COMPREPLY=($(echo "${COMP_WORDS[@]}" | \ + (while read -d ' ' i; do + [[ -z ${i} ]] && continue + # flatten array with spaces on either side, + # otherwise we cannot grep on word boundaries of + # first and last word + COMPREPLY=" ${COMPREPLY[@]} " + # remove word from list of completions + COMPREPLY=(${COMPREPLY/ ${i%% *} / }) + done + echo ${COMPREPLY[@]}))) + + return 0 + # if no option typed + else + if [[ ${COMP_CWORD} -eq 1 ]]; then # if first word typed + words="`rc-service -l | grep ^${cur}`" # complete for init scripts + COMPREPLY=($(for i in ${words} ; do \ + [[ ${i} == ${cur}* ]] && echo ${i} ; \ + done)) + return 0 + elif [[ ${COMP_CWORD} -eq 2 ]] && [[ ${prev} != -* ]]; then # if second word typed and we didn't type in a function + filename=`rc-service -r ${prev}` + opts=`cat ${filename} | grep "^\w*()" | sed "s/().*$//"` # Greps the functions included in the init script + if [[ "x${opts}" == "x" ]] ; then # if no options found loosen the grep algorhythm + opts=`cat ${filename} | grep "\w*()" | sed "s/().*$//"` + fi + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 + fi + fi + if [[ ${action} == '--exists' ]] || [[ ${action} == '-e' ]] || \ + [[ ${action} == '--resolve' ]] || [[ ${action} == '-r' ]]; then + words="`rc-service -l | grep ^${cur}`" + COMPREPLY=($(for i in ${words} ; do \ + [[ ${i} == ${cur}* ]] && echo ${i} ; \ + done)) + return 0 + fi + +return 0 +} +complete -F _rc_service rc-service +} + # vim: set ft=sh tw=80 sw=4 et : |