# bash completion for lintian(1) and lintian-info(1) -*- shell-script -*- _lintian_tags() { local match search tags tags=$( grep -e ^Tag /usr/share/lintian/checks/*.desc | cut -d\ -f2 ) if [[ "$cur" == *, ]]; then search=${cur//,/ } for item in $search; do match=$(grep -nE "^Tag: $item$" /usr/share/lintian/checks/*.desc \ | cut -d: -f1 ) tags=$( sed -e "s/\<$item\>//g" <<<$tags ) done COMPREPLY+=( $(compgen -W "$tags") ) elif [[ "$cur" == *,* ]]; then COMPREPLY+=( $(compgen -P "${cur%,*}," -W "$tags" -- "${cur##*,}") ) else COMPREPLY+=( $(compgen -W "$tags" -- "$cur") ) fi return 0 } _lintian_checks() { local match search todisable checks checks=$(grep -e ^Check-Script -e ^Abbrev \ /usr/share/lintian/checks/*.desc | cut -d\ -f2 ) if [[ "$cur" == *, ]]; then search=${cur//,/ } for item in $search; do match=$(grep -nE "^(Check-Script|Abbrev): $item$" \ /usr/share/lintian/checks/*.desc | cut -d: -f1 ) todisable=$(grep -e ^Check-Script -e ^Abbrev $match | \ cut -d\ -f2 ) for name in $todisable; do checks=$( sed -e "s/\<$name\>//g" <<<$checks ) done done COMPREPLY+=( $(compgen -W "$checks") ) elif [[ "$cur" == *,* ]]; then COMPREPLY+=( $(compgen -P "${cur%,*}," -W "$checks" -- "${cur##*,}") ) else COMPREPLY+=( $(compgen -W "$checks" -- "$cur") ) fi return 0 } _lintian_infos() { local match search infos infos=$(grep -e ^Collector /usr/share/lintian/collection/*.desc \ | cut -d\ -f2 ) if [[ "$cur" == *, ]]; then search=${cur//,/ } for item in $search; do match=$( grep -nE "^Collector: $item$" \ /usr/share/lintian/collection/*.desc | cut -d: -f1 ) infos=$( sed -e "s/\<$item\>//g" <<<$infos ) done COMPREPLY+=( $(compgen -W "$infos") ) elif [[ "$cur" == *,* ]]; then COMPREPLY+=( $(compgen -P "${cur%,*}," -W "$infos" -- "${cur##*,}") ) else COMPREPLY+=( $(compgen -W "$infos" -- "$cur") ) fi return 0 } _lintian_arches() { return 0 } _lintian() { local cur prev words cword _init_completion || return local action lint_actions general_opts behaviour_opts \ configuration_opts selection_opts lint_actions="--setup-lab --remove-lab --check --check-part --tags --tags-from-file --ftp-master-rejects --dont-check-part --unpack --remove" general_opts="--help --version --print-version --verbose --debug --quiet" behaviour_opts="--info --display-info --display-experimental --pedantic --display-level --suppress-tags --suppress-tags-from-file --no-override --show-overrides --color --unpack-info --md5sums --checksums --allow-root --fail-on-warnings --keep-lab" configuration_opts="--cfg --lab --archivedir --dist --area --section --arch --root" selection_opts="--all --binary --source --udeb --packages-file" if [[ "$prev" = -* ]]; then case $prev in -C|--check-part|-X|--dont-check-part) _lintian_checks ;; -T|--tags|--suppress-tags) _lintian_tags ;; --tags-from-file|--suppress-tags-from-file|--cfg|-p|\ --packages-file) _filedir ;; --lab|--archivedir|--dist|--root) _filedir -d ;; --color) COMPREPLY=($(compgen -W "never always auto html" -- "$cur")) ;; -U|--unpack-info) _lintian_infos ;; --area|--section) COMPREPLY=($(compgen -W "main contrib non-free" -- "$cur")) ;; --arch) ;; esac fi case "$cur" in --*) COMPREPLY=($(compgen -W "$lint_actions $general_opts $behaviour_opts $configuration_opts" -- "$cur")) ;; *,) # If we're here, the user is trying to complete on # --action tag,tag, # Only few actions permit that, re-complete them now. case "$prev" in -C|--check-part|-X|--dont-check-part) _lintian_checks ;; -T|--tags|--suppress-tags) _lintian_tags ;; -U|--unpack-info) _lintian_infos ;; esac ;; *) _filedir '@(?(u)deb|changes|dsc)' ;; esac return 0 } && complete -F _lintian lintian _lintian_info() { local cur prev words cword _init_completion || return case "$prev" in -t|--tags) _lintian_tags return 0 ;; esac case "$cur" in --*) COMPREPLY=($(compgen -W "--annotate --help --tags" -- "$cur")) ;; *) _filedir ;; esac return 0 } && complete -F _lintian_info lintian-info # ex: ts=4 sw=4 et filetype=sh