From: Rubén Justo Date: Thu, 29 Feb 2024 00:04:36 GMT Subject: Re: [PATCH v2 1/1] completion: dir-type optargs for am, format-patch Message-ID: <6683f24e-7e56-489d-be2d-8afe1fc38d2b@gmail.com> In-Reply-To: On Mon, Feb 12, 2024 at 13:52:53 -0900, Britton Kerin wrote: > __git_complete_dir () > { > local cur_="$cur" > > while test $# != 0; do > case "$1" in > --cur=*) cur_="${1##--cur=}" ;; > *) return 1 ;; > esac > shift > done > > # This rev-parse invocation amounts to a pwd which respects -C options > local context_dir=$(__git rev-parse --show-toplevel > --show-prefix 2>/dev/null | paste -s -d '/' 2>/dev/null) > [ -d "$context_dir" ] || return 1 > > compopt -o noquote > > local IFS=$'\n' > local unescaped_candidates=($(cd "$context_dir" 2>/dev/null && > compgen -d -S / -- "$cur_")) > for ii in "${!unescaped_candidates[@]}"; do > COMPREPLY[$ii]=$(printf "%q" "${unescaped_candidates[$ii]}") > done > } > > This one works for all weird characters that I've tried in bash 5.2 at > least, and in frameworks that do their own escaping also (e.g. > ble.sh). Since your advice so far was so good I thought I'd ask if > there is anything obvious to you that is still wrong here? > If not I guess what's left is special code to make it work better with > old versions of bash. I'm a little sceptical that this is worth it > since bash 5 is already 5 years old and it's only completion code > we're talking about but I guess it could be done. I don't think you need to dig too much into old Bash versions. If it works with a recent one, it's a good start. Have you considered adding some tests to t/t9902-completion.sh? It is desirable to see some tests at least for __git_complete_dir. Perhaps it would also help you to polish the function. Sorry for the late response. I just found your message while reviewing the topics in the 'What's cooking'.