From 95c3c2daf1e63f02a37db0e003f01da788acfb7d Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Tue, 30 Aug 2016 14:43:33 +1200 Subject: Handle empty filename completions better Bash 4.4 hangs in an awkward way (probably outputting the literal null char in some unexpected context) without this; I'm not sure if this is a bug or whether it's just been tolerated behaviour until now. --- bash/bash_completion.d/pass.bash | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'bash/bash_completion.d/pass.bash') diff --git a/bash/bash_completion.d/pass.bash b/bash/bash_completion.d/pass.bash index 28941952..feff78ae 100644 --- a/bash/bash_completion.d/pass.bash +++ b/bash/bash_completion.d/pass.bash @@ -15,6 +15,7 @@ _pass() # doesn't seem to do this properly with a null delimiter) local entry while IFS= read -rd '' entry ; do + [[ -n $entry ]] || continue COMPREPLY[${#COMPREPLY[@]}]=$entry done < <( @@ -29,11 +30,14 @@ _pass() entries=("${entries[@]#"$passdir"/}") entries=("${entries[@]%.gpg}") - # Bail if no entries to prevent empty output - ((${#entries[@]})) || exit 1 - - # Print all the entries, null-delimited - printf '%q\0' "${entries[@]}" + # Print quoted entries, null-delimited, if there was at least one; + # otherwise, just print a null character to stop this hanging in Bash + # 4.4 + if ((${#entries[@]})) ; then + printf '%q\0' "${entries[@]}" + else + printf '\0' + fi ) } complete -F _pass pass -- cgit v1.2.3