Package: quintuple-agent
Version: 1.0.4-4
Severity: wishlist
Tags: patch

Install attached file as /etc/bash_completion.d/quintuple-agent
for q-client bash completion.

It is my first bash completion function, but so far, it works quite well
for me.

-- System Information:
Debian Release: 3.1
  APT prefers testing
  APT policy: (990, 'testing'), (800, 'unstable'), (100, 'experimental')
Architecture: i386 (i686)
Kernel: Linux 2.6.11-rc2-vs1.9.4-rc3-ndim-1
Locale: LANG=C, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)

Versions of packages quintuple-agent depends on:
ii  libc6                   2.3.2.ds1-20     GNU C Library: Shared libraries an
ii  libcap2                 0.cvs.20010529-4 Support for POSIX.1e capabilities
ii  libglib1.2              1.2.10-9         The GLib library of C routines
ii  libgtk1.2               1.2.10-17        The GIMP Toolkit set of widgets fo
ii  libx11-6                4.3.0.dfsg.1-10  X Window System protocol client li
ii  libxext6                4.3.0.dfsg.1-10  X Window System miscellaneous exte
ii  libxi6                  4.3.0.dfsg.1-10  X Window System Input extension li
ii  xlibs                   4.3.0.dfsg.1-10  X Keyboard Extension (XKB) configu

-- no debconf information
# bash completion for quintuple-agent
# Copyright 2005 Hans Ulrich Niedermann <[EMAIL PROTECTED]>
# License: GNU GPL v2 or later
#  * only handle completion for q-client
#  * handles all the common cases
#  * does not complete IDs for put, TTLs, and query parameters
#  * allows undefined combinations (stuff like having the same option twice)
#  * but it still is very useful

have q-client &&
_q-client()
{
        COMPREPLY=()

        local cur prev
        cur=${COMP_WORDS[COMP_CWORD]}
        prev="${COMP_WORDS[COMP_CWORD-1]}"

        local commands options
        commands="put get delete list"
        options="-d --debug --help --version"
        options="${options} -i --insure -q --query-options -t --time-to-live"

        # the command itself
        if [ "x$prev" = "xq-client" ]; then
                COMPREPLY=($( compgen -W "$commands $options" -- "$cur" ))
                return 0
        fi

        # if extglob is on, accept all numbers as TTL
        if [ "$(shopt extglob | cut -f2)" = "on" ] &&
           [ "x$prev" = "x-t" -o "x$prev" = "x--time-to-live" ]
        then
                case "$cur" in
                        +([[:digit:]]))
                        COMPREPLY=("$cur")
                        return 0
                        ;;
                esac
        fi

        COMPREPLY=()

        # walk through the options and commands
        case "$prev" in
        get|delete)
                # list stored items
                local items
                items=($(q-client list 2>&1 | cut -f1))
                if [ "$?" -eq 0 ]; then
                        # only if we could connect to q-agent process
                        COMPREPLY=($( compgen -W "${items[*]}" -- "$cur"))
                fi
                ;;
        list)
                ;;
        put)
                ;;
        --help)
                ;;
        --version)
                ;;
        -i|--insure)
                COMPREPLY=($( compgen -W "put ${options}" -- "$cur"))
                ;;
        -d|--debug)
                COMPREPLY=($( compgen -W "${commands} ${options}" -- "$cur"))
                ;;
        *)
                # unhandled, i.e. TTL or query option string
                if [ "$COMP_CWORD" -ge 2 ]; then
                        local pprev
                        pprev="${COMP_WORDS[COMP_CWORD-2]}"
                        case "$pprev" in
                        -q|--query-options)
                                COMPREPLY=($( compgen -W "put ${options}" -- 
"$cur"))
                                ;;
                        -t|--time-to-live)
                                COMPREPLY=($( compgen -W "put ${options}" -- 
"$cur"))
                                ;;
                        esac
                fi
                ;;
        esac

        return 0
}

[ "$have" ] && complete -F _q-client q-client

Reply via email to