Attached is the current (and seamingly correctly working) version of the
completion script.

regards,
Sven
#!/bin/bash
have dpkg-source &&
_dpkg_source () {
        local cur prev options work i action packopts unpackopts

        packopts="-c -l -F -V -T -D -U -W -E -sa -i -I -sk -sp -su -sr -ss -sn 
-sA -sK -sP -sU -sR"
        unpackopts="-sp -sn -su"
        options=`echo "-x -b $packopts $unpackopts" | xargs echo | sort -u | 
xargs echo`

        COMPREPLY=()
        if [ "$1" != "dpkg-source" ]; then
                exit 1
        fi
        cur=${COMP_WORDS[COMP_CWORD]}
        prev=${COMP_WORDS[COMP_CWORD-1]}
        action="options"
        for (( i=0; i < [EMAIL PROTECTED]; i++ )); do
                if [[ ${COMP_WORDS[$i]} == "-x" ]]; then
                        action=unpack
                elif [[ ${COMP_WORDS[$i]} == "-b" ]]; then
                        action=pack
                elif [[ ${COMP_WORDS[$i]} == "-h" ]]; then
                        action=help
                fi
        done
        # if currently seeing a complete option, return just itself.
        for i in $options; do
                if [ "$cur" = "$i" ]; then
                        COMPREPLY=( "$cur" )
                        return 0
                fi
        done
        case "$action" in
                "unpack")
                        if [ "$cur" = "-" -o "$cur" = "-s" ]; then
                                COMPREPLY=( $unpackots )
                                return 0
                        fi
                        case "$prev" in
                                "-x")
                                        COMPREPLY=( $( compgen -d -- "$cur" ) \
                                                    $( compgen -f -X '!*.dsc' 
-- "$cur" ) )
                                        return 0
                                        ;;
                                *)
                                        COMPREPLY=( $unpackopts $(compgen -d -f 
-- "$cur" ) )
                                        return 0
                                        ;;
                        esac
                        return 0
                        ;;
                "pack")
                        if [ "$cur" = "-" ]; then
                                COMPREPLY=( $packopts )
                                return 0
                        fi
                        if [ "$cur" = "-s" ]; then
                                COMPREPLY=( "-sa" "-sk" "-sp" "-su" "-sr" "-ss" 
"-sn" \
                                        "-sA" "-sK" "-sP" "-sU" "-sR" )
                                return 0
                        fi
                        case "$prev" in
                                "-b")
                                        COMPREPLY=( $( compgen -d -- "$cur" ) )
                                        return 0
                                        ;;
                                "-c"|"-l"|"-T"|"-i"|"-I")
                                        # -c: get controlfile
                                        # -l: get per-version info from this 
file
                                        # -T: read variables here, not 
debian/substvars
                                        # -i: <regexp> filter out files to 
ignore diffs of.
                                        # -I: filter out files when building 
tarballs.
                                        # return directory names and file names
                                        COMPREPLY=( $( compgen -d -f ) )
                                        return 0
                                        ;;
                                "-F")
                                        # -F: force change log format
                                        COMPREPLY=( $( ( cd 
/usr/lib/dpkg/parsechangelog; compgen -f "$cur" ) ) )
                                        return 0
                                        ;;
                                "-V"|"-D")
                                        # -V: set a substitution variable
                                        # we don't know anything about possible 
variables or values
                                        # so we don't try to suggest any 
completion.
                                        COMPREPLY=()
                                        return 0
                                        ;;
                                "-D")
                                        # -D: override or add a .dsc field and 
value
                                        # if $cur doesn't contain a = yet, 
suggest variable names
                                        if echo -- "$cur" | grep -q "="; then
                                                # $cur contains a "="
                                                COMPREPLY=()
                                                return 0
                                        else
                                                COMPREPLY=( Format Source 
Version Binary Maintainer Uploader Architecture Standards-Version Build-Depends 
Files )
                                                return 0
                                        fi
                                        ;;
                                "-U")
                                        # -U: remove a field
                                        # Suggest possible fieldnames
                                        COMPREPLY=( Format Source Version 
Binary Maintainer Uploader Architecture Standards-Version Build-Depends Files )
                                        return 0
                                        ;;
                                *)
                                        COMPREPLY=( $packopts )
                                        return 0
                                        ;;
                        esac
                        return 0
                        ;;
                *)
                        # if seeing a partial option, return possible 
completions.
                        if [ "$cur" = "-s" ]; then
                                COMPREPLY=( "-sa" "-sk" "-sp" "-su" "-sr" "-ss" 
"-sn" \
                                        "-sA" "-sK" "-sP" "-sU" "-sR" )
                                return 0
                        fi
                        # else return all possible options.
                        COMPREPLY=( $options )
                        return 0
                        ;;
        esac
}
complete -F _dpkg_source dpkg-source

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to