# Debian dpkg-source completion -*- shell-script -*- proc _dpkg_source { local cur prev words cword _init_completion || return local options work i action packopts unpackopts fields setglobal packopts = '"-c -l -F -V -T -D -U -W -E -sa -i -I -sk -sr -ss -sA -sK -sP \ -sU -sR'" setglobal unpackopts = '"-sp -sn -su'" setglobal options = ""-x -b $packopts $unpackopts"" setglobal fields = '"Format Source Version Binary Maintainer Uploader Architecture \ Standards-Version Build-Depends Files'" setglobal action = '"options'" for (( i=0; i < ${#words[@]}-1; i++ )); do if [[ ${words[$i]} == "-x" ]]; then action=unpack elif [[ ${words[$i]} == "-b" ]]; then action=pack elif [[ ${words[$i]} == "-h" ]]; then action=help fi done match $action { with unpack match $prev { with -x _filedir -d _filedir 'dsc' return 0 with * setglobal COMPREPLY = ''( $( compgen -W "$unpackopts" -- "$cur" ) ) _filedir -d _filedir return 0 } return 0 with pack match $prev { with -b _filedir -d return 0 with -c|-l|-T|-i|-I # -c: get controlfile # -l: get per-version info from this file # -T: read variables here, not debian/substvars # -i: filter out files to ignore diffs of. # -I: filter out files when building tarballs. # return directory names and file names _filedir -d _filedir return 0 with -F # -F: force change log format setglobal COMPREPLY = ''( $( command ls /usr/lib/dpkg/parsechangelog ) ) return 0 with -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. setglobal COMPREPLY = ''() return 0 with -D # -D: override or add a .dsc field and value # if $cur doesn't contain a = yet, suggest variable names if [[ "$cur" == *=* ]] { # $cur contains a "=" setglobal COMPREPLY = ''() return 0 } else { setglobal COMPREPLY = ''( $( compgen -W "$fields" -- "$cur" ) ) return 0 } with -U # -U: remove a field # Suggest possible fieldnames setglobal COMPREPLY = ''( $( compgen -W "$fields" -- "$cur" ) ) return 0 with * setglobal COMPREPLY = ''( $( compgen -W "$packopts $unpackopts" -- "$cur" ) ) return 0 } return 0 with * setglobal COMPREPLY = ''( $( compgen -W "$options" -- "$cur" ) ) return 0 } } && complete -F _dpkg_source dpkg-source # ex: ts=4 sw=4 et filetype=sh