From 06f94a5c855fc38c0583a3b65c27c1c814a90bac Mon Sep 17 00:00:00 2001 From: Michal Suchanek Date: Mon, 30 Mar 2020 19:48:39 +0200 Subject: [PATCH] Revert "_filedir: avoid duplicate dirs internally, and a compgen -d call for files" This reverts commit da99bc55954e9f60b9c3a9e9071ff6301d7015cb. References: https://github.com/scop/bash-completion/issues/378 boo#1167952 The solution without calling compgen -d proves unrealiable. Until this is fixed revert to calling compgen -d for completions with file pattern. --- bash_completion | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/bash_completion b/bash_completion index 0fc89e51..015fea12 100644 --- a/bash_completion +++ b/bash_completion @@ -560,34 +560,25 @@ _filedir() local -a toks local reset - if [[ "$1" == -d ]]; then - reset=$(shopt -po noglob); set -o noglob - toks=( $(compgen -d -- "$cur") ) - IFS=' '; $reset; IFS=$'\n' - else + reset=$(shopt -po noglob); set -o noglob + toks=( $(compgen -d -- "$cur") ) + IFS=' '; $reset; IFS=$'\n' + + if [[ "$1" != -d ]]; then local quoted _quote_readline_by_ref "$cur" quoted # Munge xspec to contain uppercase version too # http://thread.gmane.org/gmane.comp.shells.bash.bugs/15294/focus=15306 - local xspec=${1:+"!*.@($1|${1^^})"} plusdirs=() - - # Use plusdirs to get dir completions if we have a xspec; if we don't, - # there's no need, dirs come along with other completions. Don't use - # plusdirs quite yet if fallback is in use though, in order to not ruin - # the fallback condition with the "plus" dirs. - local opts=( -f -X "$xspec" ) - [[ $xspec ]] && plusdirs=(-o plusdirs) - [[ ${COMP_FILEDIR_FALLBACK-} ]] || opts+=( "${plusdirs[@]}" ) - + local xspec=${1:+"!*.@($1|${1^^})"} reset=$(shopt -po noglob); set -o noglob - toks+=( $(compgen "${opts[@]}" -- $quoted) ) + toks+=( $(compgen -f -X "$xspec" -- $quoted) ) IFS=' '; $reset; IFS=$'\n' # Try without filter if it failed to produce anything and configured to [[ -n ${COMP_FILEDIR_FALLBACK:-} && -n "$1" && ${#toks[@]} -lt 1 ]] && { reset=$(shopt -po noglob); set -o noglob - toks+=( $(compgen -f "${plusdirs[@]}" -- $quoted) ) + toks+=( $(compgen -f -- $quoted) ) IFS=' '; $reset; IFS=$'\n' } fi -- 2.25.1