diff --git a/shell-completion/hledger-completion.bash.m4 b/shell-completion/hledger-completion.bash.m4 index 7a261489b..c77b88cda 100644 --- a/shell-completion/hledger-completion.bash.m4 +++ b/shell-completion/hledger-completion.bash.m4 @@ -9,6 +9,14 @@ set -o pipefail # contains regex special chars. But it might be no problem because of # COMP_WORDBREAKS. +# TODO compgen and compopt is pretty complicated. Piping to +# grep "^$wordToComplete" +# seems like a hack - I'd rather use +# compgen ... -- "$wordToComplete" +# But what options to use? I don't want to use -W because it may exceed the +# maximum command line length. -C "cat file" is not working either. It would be +# best if compgen can read from stdin but it does not. + # Working with bash arrays is nasty compared to editing a text file. Consider # for example grepping an array or mapping a substitution on it. # Therefore, we create temp files in RAM for completion suggestions (see below). @@ -49,7 +57,9 @@ _hledger_completion_function() { # This does not work because assignment to 'files' in the "pipe # subshell" has no effect! #compgen -df | grep "^$filenameSoFar" | readarray -t files - readarray -t files < <(compgen -df | grep "^$filenameSoFar") + + compopt -o filenames -o dirnames + readarray -t files < <(compgen -f -- "$filenameSoFar") COMPREPLY=( "${files[@]}" ) else