mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	 4adf2123dd
			
		
	
	4adf2123dd
	
	
	
		
			
			Problem:    Modifiers not simplified when timed out or using feedkeys() with
            'n" flag.
Solution:   Adjust how mapped flag and timeout are used. (closes vim/vim#10305)
68a573ce2b
		
	
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| local helpers = require('test.functional.helpers')(after_each)
 | |
| 
 | |
| local clear = helpers.clear
 | |
| local feed = helpers.feed
 | |
| local command = helpers.command
 | |
| local eq = helpers.eq
 | |
| local expect = helpers.expect
 | |
| local eval = helpers.eval
 | |
| local insert = helpers.insert
 | |
| local meths = helpers.meths
 | |
| local sleep = helpers.sleep
 | |
| 
 | |
| describe("'pastetoggle' option", function()
 | |
|   before_each(clear)
 | |
|   it("toggles 'paste'", function()
 | |
|     command('set pastetoggle=a')
 | |
|     eq(0, eval('&paste'))
 | |
|     feed('a')
 | |
|     -- Need another key so that the vgetorpeek() function returns.
 | |
|     feed('j')
 | |
|     eq(1, eval('&paste'))
 | |
|   end)
 | |
|   describe("multiple key 'pastetoggle'", function()
 | |
|     before_each(function()
 | |
|       eq(0, eval('&paste'))
 | |
|       command('set timeoutlen=1 ttimeoutlen=10000')
 | |
|     end)
 | |
|     it('is waited for when chars are typed', function()
 | |
|       local pastetoggle = 'lllll'
 | |
|       command('set pastetoggle=' .. pastetoggle)
 | |
|       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(1, eval('&paste'))
 | |
|     end)
 | |
| 
 | |
|     it('is not waited for when there are no typed chars after mapped chars', function()
 | |
|       command('set pastetoggle=abc')
 | |
|       command('imap d a')
 | |
|       meths.feedkeys('id', 't', true)
 | |
|       -- sleep() for long enough that vgetorpeek() is gotten into, but short
 | |
|       -- enough that ttimeoutlen is not reached.
 | |
|       sleep(200)
 | |
|       feed('bc')
 | |
|       -- Need another key so that the vgetorpeek() function returns.
 | |
|       feed('j')
 | |
|       -- 'ttimeoutlen' should NOT apply
 | |
|       eq(0, eval('&paste'))
 | |
|     end)
 | |
| 
 | |
|     it('is waited for when there are typed chars after mapped chars', function()
 | |
|       command('set pastetoggle=abc')
 | |
|       command('imap d a')
 | |
|       meths.feedkeys('idb', 't', true)
 | |
|       -- sleep() for long enough that vgetorpeek() is gotten into, but short
 | |
|       -- enough that ttimeoutlen is not reached.
 | |
|       sleep(200)
 | |
|       feed('c')
 | |
|       -- Need another key so that the vgetorpeek() function returns.
 | |
|       feed('j')
 | |
|       -- 'ttimeoutlen' should apply
 | |
|       eq(1, eval('&paste'))
 | |
|     end)
 | |
| 
 | |
|     it('is waited for when there are typed chars after noremapped chars', function()
 | |
|       command('set pastetoggle=abc')
 | |
|       command('inoremap d a')
 | |
|       meths.feedkeys('idb', 't', true)
 | |
|       -- sleep() for long enough that vgetorpeek() is gotten into, but short
 | |
|       -- enough that ttimeoutlen is not reached.
 | |
|       sleep(200)
 | |
|       feed('c')
 | |
|       -- Need another key so that the vgetorpeek() function returns.
 | |
|       feed('j')
 | |
|       -- 'ttimeoutlen' should apply
 | |
|       eq(1, eval('&paste'))
 | |
|     end)
 | |
|   end)
 | |
|   it('does not interfere with character-find', function()
 | |
|     insert('foo,bar')
 | |
|     feed('0')
 | |
|     command('set pastetoggle=,sp')
 | |
|     feed('dt,')
 | |
|     expect(',bar')
 | |
|   end)
 | |
| end)
 |