diff options
Diffstat (limited to 'scripts/debdiff.bash_completion')
-rw-r--r-- | scripts/debdiff.bash_completion | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/scripts/debdiff.bash_completion b/scripts/debdiff.bash_completion new file mode 100644 index 0000000..4a34c11 --- /dev/null +++ b/scripts/debdiff.bash_completion @@ -0,0 +1,153 @@ +# /usr/share/bash-completion/completions/debdiff +# Bash command completion for ‘debdiff(1)’. +# Documentation: ‘bash(1)’, section “Programmable Completion”. + +# This is free software, and you are welcome to redistribute it under +# certain conditions; see the end of this file for copyright +# information, grant of license, and disclaimer of warranty. + +_have debdiff && +_debdiff () { + local cur prev words cword + _init_completion || return + + local i + local command_name=debdiff + local options=( + -h --help -v --version + -q --quiet + -d --dirs --nodirs + -w --ignore-space + --diffstat --no-diffstat + --auto-ver-sort --no-auto-ver-sort + --unpack-tarballs --no-unpack-tarballs + --control --nocontrol --controlfiles + --wdiff-source-control --no-wdiff-source-control --wp --wl --wt + --show-moved --noshow-moved --renamed + --debs-dir + --from + --move --move-regex + --exclude + ) + + local file_list_mode=normal + local -i move_from=-1 + local -i move_to=-1 + + unset COMPREPLY + + case "$prev" in + "$command_name") + options+=( --noconf --no-conf ) + ;; + + --debs-dir) + COMPREPLY=( $( compgen -A directory -- "$cur" ) ) + ;; + + esac + + if [[ -v COMPREPLY ]] ; then + return 0 + fi + + for (( i=1; i<${#words[@]}; i++ )); do + if [[ $file_list_mode == @(deb|dsc|changes) ]]; then + if (( i == ${#words[@]}-1 )); then + break + else + COMPREPLY=() + return 0 + fi + fi + if (( ${move_from} == -1 && ${move_to} == -1 )); then + file_list_mode=normal + elif (( ${move_from} >= 0 && ${move_to} == -1 )); then + file_list_mode=from + elif (( ${move_from} >= 0 && ${move_to} >= 0 && ${move_to} < ${move_from} )); then + file_list_mode=to + else + COMPREPLY=() + return 0 + fi + if [[ $file_list_mode == normal && ${words[i]} == --from ]]; then + move_from=0 + file_list_mode=from + elif [[ $file_list_mode == normal && ${words[i]} == *.deb ]]; then + file_list_mode=deb + elif [[ $file_list_mode == normal && ${words[i]} == *.udeb ]]; then + file_list_mode=deb + elif [[ $file_list_mode == normal && ${words[i]} == *.dsc ]]; then + file_list_mode=dsc + elif [[ $file_list_mode == normal && ${words[i]} == *.changes ]]; then + file_list_mode=changes + elif [[ $file_list_mode == from && ${words[i]} == *.deb ]]; then + (( ++move_from )) + elif [[ $file_list_mode == from && ${words[i]} == *.udeb ]]; then + (( ++move_from )) + elif [[ $file_list_mode == from && ${words[i]} == --to ]]; then + move_to=0 + file_list_mode=to + elif [[ $file_list_mode = to && ${words[i]} == *.deb ]]; then + (( ++move_to )) + elif [[ $file_list_mode = to && ${words[i]} == *.udeb ]]; then + (( ++move_to )) + fi + done + + case $file_list_mode in + normal) + if [[ $prev == --debs-dir ]]; then + COMPREPLY=( $( compgen -G "${cur}*" ) ) + compopt -o dirnames + elif [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W "${options[*]}" -- "$cur" ) ) + else + COMPREPLY=( $( compgen -G "${cur}*.@(deb|udeb|dsc|changes)" ) ) + compopt -o filenames + compopt -o plusdirs + fi + ;; + deb|from|to) + COMPREPLY=( $( compgen -G "${cur}*.deb" "${cur}*.udeb" ) ) + if (( $move_from > 0 && $move_to < 0 )) ; then + COMPREPLY+=( $( compgen -W "--to" -- "$cur" ) ) + fi + compopt -o filenames + compopt -o plusdirs + ;; + dsc) + COMPREPLY=( $( compgen -G "${cur}*.dsc" ) ) + compopt -o filenames + compopt -o plusdirs + ;; + changes) + COMPREPLY=( $( compgen -G "${cur}*.changes" ) ) + compopt -o filenames + compopt -o plusdirs + ;; + *) + COMPREPLY=( $( compgen -W "${options[*]}" -- "$cur" ) ) + ;; + esac + + return 0 + +} && +complete -F _debdiff debdiff + + +# Copyright © 2016–2017 Ben Finney <ben+debian@benfinney.id.au> +# Copyright © 2015 Nicholas Bamber <nicholas@periapt.co.uk> +# +# This is free software: you may copy, modify, and/or distribute this work +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; version 2 of that license or any later version. +# No warranty expressed or implied. See the file ‘LICENSE.GPL-2’ for details. + +# Local variables: +# coding: utf-8 +# mode: shell-script +# indent-tabs-mode: nil +# End: +# vim: fileencoding=utf-8 filetype=sh expandtab shiftwidth=4 : |