diff --git a/autotools/build-bash-completion b/autotools/build-bash-completion index a5e7acfd7e56ecb10068020376e95e6b919a63fb..f7e08681979605259f51fc3af2133274e1af1359 100755 --- a/autotools/build-bash-completion +++ b/autotools/build-bash-completion @@ -520,13 +520,12 @@ def WriteCompletion(sw, scriptname, funcname, @param commands: List of all subcommands in this program """ - sw.Write("%s() {", funcname) + sw.Write("%s_inner() {", funcname) sw.IncIndent() try: - sw.Write("local " + sw.Write("local i first_arg_idx choices compgenargs arg_idx optcur" ' cur="${COMP_WORDS[COMP_CWORD]}"' - ' prev="${COMP_WORDS[COMP_CWORD-1]}"' - ' i first_arg_idx choices compgenargs arg_idx optcur') + ' prev="${COMP_WORDS[COMP_CWORD-1]}"') sw.Write("_gnt_log cur=\"$cur\" prev=\"$prev\"") sw.Write("[[ -n \"$GANETI_COMPL_LOG\" ]] &&" @@ -575,6 +574,25 @@ def WriteCompletion(sw, scriptname, funcname, sw.DecIndent() sw.Write("}") + # Wrapper function to always enable extglob (needed for advanced pattern + # matching) + sw.Write("%s() {", funcname) + sw.IncIndent() + try: + # Get current state of extglob + sw.Write("local -r eg=$(shopt -p extglob || :)") + + # Enable extglob + sw.Write("shopt -s extglob") + + sw.Write("%s_inner \"$@\"", funcname) + + # Reset extglob to original value + sw.Write("[[ -n \"$eg\" ]] && $eg") + finally: + sw.DecIndent() + sw.Write("}") + sw.Write("complete -F %s -o filenames %s", utils.ShellQuote(funcname), utils.ShellQuote(scriptname))