bash_completion | 17 +++++++++++++++-- bash_completion.sh.in | 2 +- completions/apt-get | 10 +++++----- completions/aptitude | 22 ++++------------------ completions/rpm | 7 ++++--- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/bash_completion b/bash_completion index 7abb198c..f2f13d57 100644 --- a/bash_completion +++ b/bash_completion @@ -2282,16 +2282,29 @@ __load_completion() backslash=\\ fi + local compfile_fail= for dir in "${dirs[@]}"; do [[ -d $dir ]] || continue + compfile_fail=1 for compfile in "$cmd" "$cmd.bash" "_$cmd"; do compfile="$dir/$compfile" # Avoid trying to source dirs; https://bugzilla.redhat.com/903540 if [[ -f $compfile ]] && . "$compfile" &>/dev/null; then - [[ $backslash ]] && $(complete -p "$cmd") "\\$cmd" - return 0 + compfile_fail=0 + break fi done + if [[ $compfile_fail = 0 ]]; then + for compfiles in "$cmd-*" "$cmd-*.bash" "_$cmd-*"; do + compfiles="$dir/$compfiles" + for compfile in $compfiles; do + # Avoid trying to source dirs; https://bugzilla.redhat.com/903540 + [[ -f $compfile ]] && . "$compfile" &>/dev/null + done + done + [[ $backslash ]] && $(complete -p "$cmd") "\\$cmd" + return 0 + fi done # Look up simple "xspec" completions diff --git a/bash_completion.sh.in b/bash_completion.sh.in index b2a527eb..1a7ad480 100644 --- a/bash_completion.sh.in +++ b/bash_completion.sh.in @@ -7,7 +7,7 @@ if [ "x${BASH_VERSION-}" != x -a "x${PS1-}" != x -a "x${BASH_COMPLETION_VERSINFO [ "${BASH_VERSINFO[0]}" -eq 4 -a "${BASH_VERSINFO[1]}" -ge 2 ]; then [ -r "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" ] && . "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" - if shopt -q progcomp && [ -r @datadir@/@PACKAGE@/bash_completion ]; then + if shopt -q progcomp 2>/dev/null && [ -r @datadir@/@PACKAGE@/bash_completion ]; then # Source completion code. . @datadir@/@PACKAGE@/bash_completion fi diff --git a/completions/apt-get b/completions/apt-get index 543d29c4..eeb9bfb8 100644 --- a/completions/apt-get +++ b/completions/apt-get @@ -20,7 +20,7 @@ _apt_get() local special i for ((i = 1; i < ${#words[@]} - 1; i++)); do - if [[ ${words[i]} == @(install|remove|autoremove|purge|source|build-dep|download|changelog) ]]; then + if [[ ${words[i]} == @(install|remove|autoremove|source|build-dep) ]]; then special=${words[i]} break fi @@ -28,7 +28,7 @@ _apt_get() if [[ -v special ]]; then case $special in - remove | autoremove | purge) + remove|autoremove) _comp_cmd_apt_get_installed_packages ;; source) @@ -38,7 +38,7 @@ _apt_get() ;; install) if [[ $cur == */* ]]; then - _filedir deb + _filedir '@(rpm|RPM)' return elif [[ $cur == *=* ]]; then package="${cur%%=*}" @@ -98,8 +98,8 @@ _apt_get() --version --config-file --option' -- "$cur")) else COMPREPLY=($(compgen -W 'update upgrade dist-upgrade - dselect-upgrade install remove purge source build-dep check - download clean autoclean autoremove changelog indextargets' \ + install remove source build-dep check + clean autoclean autoremove dedup' \ -- "$cur")) fi diff --git a/completions/aptitude b/completions/aptitude index e5ea1636..396c9e7a 100644 --- a/completions/aptitude +++ b/completions/aptitude @@ -1,18 +1,5 @@ # Debian aptitude(1) completion -*- shell-script -*- -_have grep-status && { - _comp_dpkg_hold_packages() - { - grep-status -P -e "^$1" -a -FStatus 'hold' -n -s Package - } -} || { - _comp_dpkg_hold_packages() - { - command grep -B 2 'hold' /var/lib/dpkg/status | - awk "/Package: $1/ { print \$2 }" - } -} - _aptitude() { local cur prev words cword @@ -20,7 +7,7 @@ _aptitude() local special i for ((i = 1; i < ${#words[@]} - 1; i++)); do - if [[ ${words[i]} == @(@(|re)install|@(|un)hold|@(|un)markauto|@(dist|full|safe)-upgrade|download|show|forbid-version|purge|remove|changelog|why@(|-not)|keep@(|-all)|build-dep|@(add|remove)-user-tag|versions) ]]; then + if [[ ${words[i]} == @(@(|re)install|@(|un)hold|@(|un)markauto|@(dist|full)-upgrade|download|show|forbid-version|remove|changelog|why@(|-not)|keep@(|-all)|build-dep) ]]; then special=${words[i]} break fi @@ -107,10 +94,9 @@ _aptitude() COMPREPLY=($(compgen -W '${COMPREPLY[@]}' -- "$cur")) else COMPREPLY=($(compgen -W 'update upgrade safe-upgrade forget-new - clean autoclean install reinstall remove hold unhold purge markauto - unmarkauto why why-not dist-upgrade full-upgrade download search - show forbid-version changelog keep keep-all build-dep add-user-tag - remove-user-tag versions' -- "$cur")) + clean autoclean install reinstall remove hold unhold markauto + unmarkauto dist-upgrade full-upgrade download search + show forbid-version build-dep' -- "$cur")) fi } && diff --git a/completions/rpm b/completions/rpm index f771325a..11696037 100644 --- a/completions/rpm +++ b/completions/rpm @@ -14,7 +14,7 @@ _rpm_installed_packages() # SUSE's rpmqpack is faster than rpm -qa COMPREPLY=($(compgen -W '$(rpmqpack)' -- "$cur")) else - COMPREPLY=($(${1:-rpm} -qa --nodigest --nosignature \ + COMPREPLY=($(${1:-rpm} -qa --nodigest \ --queryformat='%{NAME} ' "$cur*" 2>/dev/null)) fi } @@ -22,7 +22,7 @@ _rpm_installed_packages() _rpm_groups() { local IFS=$'\n' - COMPREPLY=($(compgen -W "$(${1:-rpm} -qa --nodigest --nosignature \ + COMPREPLY=($(compgen -W "$(${1:-rpm} -qa --nodigest \ --queryformat='%{GROUP}\n' 2>/dev/null)" -- "$cur")) } @@ -119,7 +119,7 @@ _rpm() # options common to all modes local -a opts=( - --define= --eval= --macros= --nodigest --nosignature --rcfile= --quiet + --define= --eval= --macros= --nodigest --rcfile= --quiet --pipe --verbose ) @@ -154,6 +154,7 @@ _rpm() --obsoletes --pipe --provides --queryformat= --requires --scripts --suggests --triggers --xml --recommends --supplements --filetriggers --licensefiles + --changes-since --lastchange ) if [[ ${words[*]} == *\ -@(*([^ -])f|-file )* ]]; then