diff options
-rw-r--r-- | runtime/doc/options.txt | 3 | ||||
-rw-r--r-- | src/nvim/getchar.c | 2 | ||||
-rw-r--r-- | test/functional/options/pastetoggle_spec.lua | 35 |
3 files changed, 22 insertions, 18 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 0e8feb6321..2097cbf32b 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -4368,7 +4368,8 @@ A jump table for the options with a short description can be found at |Q_op|. Note that typing <F10> in paste mode inserts "<F10>", since in paste mode everything is inserted literally, except the 'pastetoggle' key sequence. - When the value has several bytes 'ttimeoutlen' applies. + No timeout is used, this means that a multi-key 'pastetoggle' can not + be triggered manually. *'pex'* *'patchexpr'* 'patchexpr' 'pex' string (default "") diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index 382caa8548..4e42042959 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -1908,7 +1908,7 @@ static int vgetorpeek(int advance) } if ((mp == NULL || max_mlen >= mp_match_len) - && keylen != KEYLEN_PART_MAP && keylen != KEYLEN_PART_KEY) { + && keylen != KEYLEN_PART_MAP) { // No matching mapping found or found a non-matching mapping that // matches at least what the matching mapping matched keylen = 0; diff --git a/test/functional/options/pastetoggle_spec.lua b/test/functional/options/pastetoggle_spec.lua index ec3c60fe37..a1f86f73ff 100644 --- a/test/functional/options/pastetoggle_spec.lua +++ b/test/functional/options/pastetoggle_spec.lua @@ -6,32 +6,35 @@ local command = helpers.command local eq = helpers.eq local eval = helpers.eval local sleep = helpers.sleep +local expect = helpers.expect describe("'pastetoggle' option", function() before_each(function() clear() command('set nopaste') - command('set pastetoggle=a') end) + it("toggles 'paste'", function() - eq(eval('&paste'), 0) + command('set pastetoggle=a') + eq(0, eval('&paste')) feed('a') -- Need another key so that the vgetorpeek() function returns. feed('j') - eq(eval('&paste'), 1) + eq(1, eval('&paste')) end) - it("multiple key 'pastetoggle' is waited for", function() - eq(eval('&paste'), 0) - local pastetoggle = 'lllll' - command('set pastetoggle=' .. pastetoggle) - command('set timeoutlen=1 ttimeoutlen=10000') - feed(pastetoggle:sub(0, 2)) - -- sleep() for long enough that vgetorpeek() is gotten into, but short - -- enough that ttimeoutlen is not reached. - sleep(200) - feed(pastetoggle:sub(3, -1)) - -- Need another key so that the vgetorpeek() function returns. - feed('j') - eq(eval('&paste'), 1) + + + it('does not wait for timeout', function() + command('set pastetoggle=abc') + command('set ttimeoutlen=9999999') + eq(0, eval('&paste')) + -- n.b. need <esc> to return from vgetorpeek() + feed('abc<esc>') + eq(1, eval('&paste')) + feed('ab') + sleep(10) + feed('c<esc>') + expect('bc') + eq(1, eval('&paste')) end) end) |