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'.