# bash completion for lintian(1) and lintian-info(1) -*- shell-script -*- proc _lintian_tags { local match search tags setvar tags = $( awk '/^Tag/ { print $2 }' /usr/share/lintian/checks/*.desc ) if [[ "$cur" == *, ]] { setvar search = ${cur//,/ } for item in $search { setvar match = $( command grep -nE "^Tag: $item$" \ /usr/share/lintian/checks/*.desc | cut -d: -f1 ) setvar tags = $( sed -e "s/\<$item\>//g" <<<$tags ) } setvar COMPREPLY = ''( $(compgen -W "$tags") ) } elif [[ "$cur" == *,* ]] { setvar COMPREPLY = ''( $(compgen -P "${cur%,*}," -W "$tags" -- "${cur##*,}") ) } else { setvar COMPREPLY = ''( $(compgen -W "$tags" -- "$cur") ) } return 0 } proc _lintian_checks { local match search todisable checks setvar checks = $( awk '/^(Check-Script|Abbrev)/ { print $2 }' \ /usr/share/lintian/checks/*.desc ) if [[ "$cur" == *, ]] { setvar search = ${cur//,/ } for item in $search { setvar match = $( command grep -nE "^(Check-Script|Abbrev): $item$" \ /usr/share/lintian/checks/*.desc | cut -d: -f1 ) setvar todisable = $( awk '/^(Check-Script|Abbrev)/ { print $2 }' $match ) for name in $todisable { setvar checks = $( sed -e "s/\<$name\>//g" <<<$checks ) } } setvar COMPREPLY = ''( $(compgen -W "$checks") ) } elif [[ "$cur" == *,* ]] { setvar COMPREPLY = ''( $(compgen -P "${cur%,*}," -W "$checks" -- "${cur##*,}") ) } else { setvar COMPREPLY = ''( $(compgen -W "$checks" -- "$cur") ) } return 0 } proc _lintian_infos { local match search infos setvar infos = $( awk '/^Collector/ { print $2 }' \ /usr/share/lintian/collection/*.desc ) if [[ "$cur" == *, ]] { setvar search = ${cur//,/ } for item in $search { setvar match = $( command grep -nE "^Collector: $item$" \ /usr/share/lintian/collection/*.desc | cut -d: -f1 ) setvar infos = $( sed -e "s/\<$item\>//g" <<<$infos ) } setvar COMPREPLY = ''( $(compgen -W "$infos") ) } elif [[ "$cur" == *,* ]] { setvar COMPREPLY = ''( $(compgen -P "${cur%,*}," -W "$infos" -- "${cur##*,}") ) } else { setvar COMPREPLY = ''( $(compgen -W "$infos" -- "$cur") ) } return 0 } proc _lintian_arches { return 0 } proc _lintian { local cur prev words cword _init_completion || return local action lint_actions general_opts behaviour_opts \ configuration_opts selection_opts setvar lint_actions = ""--setup-lab --remove-lab --check --check-part --tags --tags-from-file --ftp-master-rejects --dont-check-part --unpack --remove"" setvar general_opts = ""--help --version --print-version --verbose --debug --quiet"" setvar 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"" setvar configuration_opts = ""--cfg --lab --archivedir --dist --area --section --arch --root"" setvar selection_opts = ""--all --binary --source --udeb --packages-file"" if [[ "$prev" == -* ]] { case (prev) { -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 { setvar COMPREPLY = ''($(compgen -W "never always auto html" -- "$cur")) } -U|--unpack-info { _lintian_infos } --area|--section { setvar COMPREPLY = ''($(compgen -W "main contrib non-free" -- "$cur")) } --arch { } } } case (cur) { --* { setvar 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) { -C|--check-part|-X|--dont-check-part { _lintian_checks } -T|--tags|--suppress-tags { _lintian_tags } -U|--unpack-info { _lintian_infos } } } * { _filedir '@(?(u)deb|changes|dsc)' } } return 0 } && complete -F _lintian lintian proc _lintian_info { local cur prev words cword _init_completion || return case (prev) { -t|--tags { _lintian_tags return 0 } } case (cur) { --* { setvar COMPREPLY = ''($(compgen -W "--annotate --help --tags" -- "$cur")) } * { _filedir } } return 0 } && complete -F _lintian_info lintian-info # ex: ts=4 sw=4 et filetype=sh