From dff410ab56554547e8d190be3762c971bd0828fc Mon Sep 17 00:00:00 2001 From: Eric Paris Date: Mon, 4 May 2015 15:44:07 -0400 Subject: [PATCH] make filename extension handling a bash function We were trying to call a bash function with bash stuff like @ () from a variable. Stop that. Just call a function with an arg from a variable instead of trying to pass around the bash. Should fix https://github.com/spf13/cobra/pull/103 --- bash_completions.go | 9 ++++++++- bash_completions_test.go | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/bash_completions.go b/bash_completions.go index 592a5d51..735d2f54 100644 --- a/bash_completions.go +++ b/bash_completions.go @@ -93,6 +93,13 @@ __handle_reply() fi } +# The arguments should be in the form "ext1|ext2|extn" +__handle_filename_extension_flag() +{ + local ext="$1" + _filedir "@(${ext})" +} + __handle_flag() { __debug "${FUNCNAME}: c is $c words[c] is ${words[c]}" @@ -213,7 +220,7 @@ func writeFlagHandler(name string, annotations map[string][]string, out *bytes.B fmt.Fprintf(out, " flags_with_completion+=(%q)\n", name) ext := strings.Join(value, "|") - ext = "_filedir '@(" + ext + ")'" + ext = "__handle_filename_extension_flag " + ext fmt.Fprintf(out, " flags_completion+=(%q)\n", ext) } } diff --git a/bash_completions_test.go b/bash_completions_test.go index 4b7d06c6..ee632cf4 100644 --- a/bash_completions_test.go +++ b/bash_completions_test.go @@ -76,7 +76,7 @@ func TestBashCompletions(t *testing.T) { // check for required nouns check(t, str, `must_have_one_noun+=("pods")`) // check for filename extention flags - check(t, str, `flags_completion+=("_filedir '@(json|yaml|yml)'")`) + check(t, str, `flags_completion+=("__handle_filename_extension_flag json|yaml|yml")`) checkOmit(t, str, cmdDeprecated.Name()) }