From 8371a1a6cb676b274ccb85acfac1530a846fd682 Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Mon, 18 Oct 2021 16:07:23 -0400 Subject: [PATCH] Support different bash completion options (#1509) https://github.com/spf13/cobra/issues/1508 Based on the documentation found here https://www.gnu.org/software/bash/manual/html_node/Commands-For-Completion.html we remove descriptions for the following completion types: - menu-complete - menu-complete-backward - insert-completions Signed-off-by: Marc Khouzam --- bash_completionsV2.go | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/bash_completionsV2.go b/bash_completionsV2.go index 8859b57c4..82d26c175 100644 --- a/bash_completionsV2.go +++ b/bash_completionsV2.go @@ -138,13 +138,42 @@ __%[1]s_process_completion_results() { _filedir -d fi else - __%[1]s_handle_standard_completion_case + __%[1]s_handle_completion_types fi __%[1]s_handle_special_char "$cur" : __%[1]s_handle_special_char "$cur" = } +__%[1]s_handle_completion_types() { + __%[1]s_debug "__%[1]s_handle_completion_types: COMP_TYPE is $COMP_TYPE" + + case $COMP_TYPE in + 37|42) + # Type: menu-complete/menu-complete-backward and insert-completions + # If the user requested inserting one completion at a time, or all + # completions at once on the command-line we must remove the descriptions. + # https://github.com/spf13/cobra/issues/1508 + local tab comp + tab=$(printf '\t') + while IFS='' read -r comp; do + # Strip any description + comp=${comp%%%%$tab*} + # Only consider the completions that match + comp=$(compgen -W "$comp" -- "$cur") + if [ -n "$comp" ]; then + COMPREPLY+=("$comp") + fi + done < <(printf "%%s\n" "${out[@]}") + ;; + + *) + # Type: complete (normal completion) + __%[1]s_handle_standard_completion_case + ;; + esac +} + __%[1]s_handle_standard_completion_case() { local tab comp tab=$(printf '\t')