local helpers = require('test.functional.helpers')(after_each) local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert local command = helpers.command local expect = helpers.expect local funcs = helpers.funcs local eq = helpers.eq describe('meta-keys #8226 #13042', function() before_each(function() clear() end) it('ALT/META, normal-mode', function() -- Unmapped ALT-chords behave as ESC+c insert('hello') feed('0') expect('llo') -- Mapped ALT-chord behaves as mapped. command('nnoremap Ameta-l') command('nnoremap Aalt-j') feed('') expect('lloalt-jmeta-l') end) it('ALT/META, visual-mode', function() -- Unmapped ALT-chords behave as ESC+c insert('peaches') feed('viwviw') expect('peach') -- Mapped ALT-chord behaves as mapped. command('vnoremap Ameta-l') command('vnoremap Aalt-j') feed('viwviw') expect('peachalt-jmeta-l') end) it('ALT/META insert-mode', function() -- Mapped ALT-chord behaves as mapped. command('inoremap meta-l') command('inoremap alt-j') feed('i xxx a') expect('meta-l xxx alt-j') eq({ 0, 1, 14, 0, }, funcs.getpos('.')) -- Unmapped ALT-chord behaves as ESC+c. command('iunmap ') feed('0i') eq({ 0, 1, 2, 0, }, funcs.getpos('.')) -- Unmapped ALT-chord has same `undo` characteristics as ESC+ command('0,$d') feed('ahello') expect('hellohello') feed('u') expect('hello') end) end)