From 9314a4204473dc81c8719c2401c75b695bb5c792 Mon Sep 17 00:00:00 2001 From: Platon Pronko Date: Thu, 30 Mar 2023 18:15:22 +0800 Subject: [PATCH] fix(_comp_delimited): prepend prefix to all compreply args Fixes #552. Previously prefix was only prepended if COMPREPLY only contained one argument - this commit fixes it so prefix is prepended to all arguments. --- bash_completion | 3 ++- test/t/unit/test_unit_delimited.py | 38 ++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 test/t/unit/test_unit_delimited.py diff --git a/bash_completion b/bash_completion index 084465b4227..d2fd6c32ce1 100644 --- a/bash_completion +++ b/bash_completion @@ -833,7 +833,8 @@ _comp_delimited() COMPREPLY=($(compgen "$@" -- "${cur##*"$delimiter"}")) fi - ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix}) + COMPREPLY=("${COMPREPLY[@]/#/"$prefix"}") + [[ $delimiter != : ]] || __ltrim_colon_completions "$cur" } diff --git a/test/t/unit/test_unit_delimited.py b/test/t/unit/test_unit_delimited.py new file mode 100644 index 00000000000..249dc1b64a3 --- /dev/null +++ b/test/t/unit/test_unit_delimited.py @@ -0,0 +1,38 @@ +import pytest + +from conftest import assert_bash_exec + + +@pytest.mark.bashcomp(cmd=None) +class TestUnitDelimited: + @pytest.fixture(scope="class") + def functions(self, request, bash): + assert_bash_exec( + bash, + "_comp_cmd_test_delim() {" + " local cur prev words cword comp_args;" + " _comp_get_words cur;" + " _comp_delimited , -W 'alpha beta bravo';" + "};" + "complete -F _comp_cmd_test_delim test_delim", + ) + + @pytest.mark.complete("test_delim --opt=a") + def test_1(self, functions, completion): + assert completion == ["lpha"] + + @pytest.mark.complete("test_delim --opt=b") + def test_2(self, functions, completion): + assert completion == ["beta", "bravo"] + + @pytest.mark.complete("test_delim --opt=alpha,b") + def test_3(self, functions, completion): + assert completion == ["alpha,beta", "alpha,bravo"] + + @pytest.mark.complete("test_delim --opt=alpha,be") + def test_4(self, functions, completion): + assert completion == ["ta"] + + @pytest.mark.complete("test_delim --opt=beta,a") + def test_5(self, functions, completion): + assert completion == ["lpha"]