From 7d2f8050088f61444fc6117cf1e7bfe8d440d73c Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Wed, 16 Nov 2016 09:42:49 +0100 Subject: 39945: allow further tab presses to move on to menu completion even when compstate[insert] is emptied --- ChangeLog | 6 +++++ Completion/Base/Core/_message | 3 ++- Src/Zle/compcore.c | 1 + Test/Y03arguments.ztst | 61 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 488f1ed45..cdc89a86d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2016-11-16 Oliver Kiddle + + * 39945: Src/Zle/compcore.c, Completion/Base/Core/_message, + Test/Y03arguments.ztst: allow further tab presses to move on + to menu completion even when compstate[insert] is emptied + 2016-11-15 Peter Stephenson * 39949: Src/subst.c, Src/utils.c, Test/B09hash.ztst: "-" is diff --git a/Completion/Base/Core/_message b/Completion/Base/Core/_message index 13c83989f..4d5645eaf 100644 --- a/Completion/Base/Core/_message +++ b/Completion/Base/Core/_message @@ -18,7 +18,8 @@ if [[ "$1" = -e ]]; then ret=0 done - (( $compstate[nmatches] )) || compstate[insert]= + (( ! $compstate[nmatches] )) && [[ $compstate[insert] = *unambiguous* ]] && + compstate[insert]= return ret fi diff --git a/Src/Zle/compcore.c b/Src/Zle/compcore.c index 536bca7b3..d1cf7a08a 100644 --- a/Src/Zle/compcore.c +++ b/Src/Zle/compcore.c @@ -425,6 +425,7 @@ do_completion(UNUSED(Hookdef dummy), Compldat dat) } } else { invalidatelist(); + lastambig = isset(BASHAUTOLIST); if (forcelist) clearlist = 1; zlemetacs = 0; diff --git a/Test/Y03arguments.ztst b/Test/Y03arguments.ztst index 3ada16844..0763c419d 100644 --- a/Test/Y03arguments.ztst +++ b/Test/Y03arguments.ztst @@ -243,6 +243,67 @@ >NO:{-a} >NO:{-b} + tst_arguments --abc --aah :arg: + comptesteval 'setopt bashautolist automenu' + comptest $'tst --a\t\t\t' +0:with message and bashautolist, a third tab will get menu completion +>line: {tst --a}{} +>line: {tst --a}{} +>DESCRIPTION:{arg} +>DESCRIPTION:{option} +>NO:{--aah} +>NO:{--abc} +>line: {tst --aah}{} + + tst_arguments --abc --aah :arg: + comptesteval 'setopt bashautolist noautomenu' + comptest $'tst --a\t\t\t' +0:with message and bashautolist, a third tab is needed to display the list +>line: {tst --a}{} +>line: {tst --a}{} +>DESCRIPTION:{arg} +>DESCRIPTION:{option} +>NO:{--aah} +>NO:{--abc} +>line: {tst --a}{} + + tst_arguments --abc --aah :arg: + comptesteval 'setopt nobashautolist noautomenu' + comptest $'tst --\t\t' +0:with message and noautomenu second tab redisplays the list +>line: {tst --}{} +>DESCRIPTION:{arg} +>DESCRIPTION:{option} +>NO:{--aah} +>NO:{--abc} +>line: {tst --}{} +>DESCRIPTION:{arg} +>DESCRIPTION:{option} +>NO:{--aah} +>NO:{--abc} + + tst_arguments --abc --aah :arg: + comptesteval 'setopt nobashautolist automenu' + comptest $'tst --\t\t' +0:with message two tabs will start menu completion +>line: {tst --}{} +>DESCRIPTION:{arg} +>DESCRIPTION:{option} +>NO:{--aah} +>NO:{--abc} +>line: {tst --aah}{} + + tst_arguments --abc --aah :arg: + comptesteval 'zstyle ":completion:*::::" completer _oldlist _complete' + comptest $'tst --\t\t' +0:with message and _oldlist, two tabs will start menu completion +>line: {tst --}{} +>DESCRIPTION:{arg} +>DESCRIPTION:{option} +>NO:{--aah} +>NO:{--abc} +>line: {tst --aah}{} + %clean zmodload -ui zsh/zpty -- cgit 1.4.1