Mercurial > vim
view src/testdir/test_iminsert.vim @ 31192:dcde141f2d1e v9.0.0930
patch 9.0.0930: cannot debug the Kitty keyboard protocol with TermDebug
Commit: https://github.com/vim/vim/commit/63a2e360cca2c70ab0a85d14771d3259d4b3aafa
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Nov 23 20:20:18 2022 +0000
patch 9.0.0930: cannot debug the Kitty keyboard protocol with TermDebug
Problem: Cannot debug the Kitty keyboard protocol with TermDebug.
Solution: Add Kitty keyboard protocol support to the libvterm fork.
Recognize the escape sequences that the protocol generates. Add
the 'keyprotocol' option to allow the user to specify for which
terminal what protocol is to be used, instead of hard-coding this.
Add recognizing the kitty keyboard protocol status.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 23 Nov 2022 21:30:04 +0100 |
parents | f08ed0738f7a |
children |
line wrap: on
line source
" Test for 'iminsert' source view_util.vim source check.vim import './vim9.vim' as v9 let s:imactivatefunc_called = 0 let s:imstatusfunc_called = 0 let s:imstatus_active = 0 func IM_activatefunc(active) let s:imactivatefunc_called = 1 let s:imstatus_active = a:active endfunc func IM_statusfunc() let s:imstatusfunc_called = 1 return s:imstatus_active endfunc func Test_iminsert2() let s:imactivatefunc_called = 0 let s:imstatusfunc_called = 0 set imactivatefunc=IM_activatefunc set imstatusfunc=IM_statusfunc set iminsert=2 normal! i set iminsert=0 set imactivatefunc= set imstatusfunc= let expected = (has('win32') && has('gui_running')) ? 0 : 1 call assert_equal(expected, s:imactivatefunc_called) call assert_equal(expected, s:imstatusfunc_called) endfunc func Test_getimstatus() if has('win32') CheckFeature multi_byte_ime else CheckFeature xim endif if has('win32') && has('gui_running') set imactivatefunc= set imstatusfunc= else set imactivatefunc=IM_activatefunc set imstatusfunc=IM_statusfunc let s:imstatus_active = 0 endif new set iminsert=2 call feedkeys("i\<C-R>=getimstatus()\<CR>\<ESC>", 'nx') call assert_equal('1', getline(1)) set iminsert=0 call feedkeys("o\<C-R>=getimstatus()\<CR>\<ESC>", 'nx') call assert_equal('0', getline(2)) bw! set imactivatefunc= set imstatusfunc= endfunc func Test_imactivatefunc_imstatusfunc_callback_no_breaks_foldopen() CheckScreendump let lines =<< trim END func IM_activatefunc(active) endfunc func IM_statusfunc() return 0 endfunc set imactivatefunc=IM_activatefunc set imstatusfunc=IM_statusfunc set foldmethod=marker set foldopen=search call setline(1, ['{{{', 'abc', '}}}']) %foldclose END call writefile(lines, 'Xscript', 'D') let buf = RunVimInTerminal('-S Xscript', {}) call assert_notequal('abc', term_getline(buf, 2)) call term_sendkeys(buf, "/abc\n") call WaitForAssert({-> assert_equal('abc', term_getline(buf, 2))}) " clean up call StopVimInTerminal(buf) endfunc " Test for using an lmap in insert mode func Test_lmap_in_insert_mode() new call setline(1, 'abc') lmap { w set iminsert=1 call feedkeys('r{', 'xt') call assert_equal('wbc', getline(1)) set iminsert=2 call feedkeys('$r{', 'xt') call assert_equal('wb{', getline(1)) call setline(1, 'vim web') set iminsert=1 call feedkeys('0f{', 'xt') call assert_equal(5, col('.')) set iminsert& lunmap { close! endfunc " Test for using CTRL-^ to toggle iminsert in insert mode func Test_iminsert_toggle() CheckGui if has('win32') CheckFeature multi_byte_ime else CheckFeature xim endif if has('gui_running') && !has('win32') throw 'Skipped: works only in Win32 GUI version (for some reason)' endif new let save_imdisable = &imdisable let save_iminsert = &iminsert set noimdisable set iminsert=0 exe "normal i\<C-^>" call assert_equal(2, &iminsert) exe "normal i\<C-^>" call assert_equal(0, &iminsert) let &iminsert = save_iminsert let &imdisable = save_imdisable close! endfunc " Test for different ways of setting the 'imactivatefunc' and 'imstatusfunc' " options func Test_imactivatefunc_imstatusfunc_callback() CheckNotMSWindows func IMactivatefunc1(active) let g:IMactivatefunc_called += 1 endfunc func IMstatusfunc1() let g:IMstatusfunc_called += 1 return 1 endfunc set iminsert=2 let lines =<< trim END LET g:IMactivatefunc_called = 0 LET g:IMstatusfunc_called = 0 #" Test for using a function name LET &imactivatefunc = 'g:IMactivatefunc1' LET &imstatusfunc = 'g:IMstatusfunc1' normal! i #" Test for using a function() set imactivatefunc=function('g:IMactivatefunc1') set imstatusfunc=function('g:IMstatusfunc1') normal! i #" Using a funcref variable to set 'completefunc' VAR Fn1 = function('g:IMactivatefunc1') LET &imactivatefunc = Fn1 VAR Fn2 = function('g:IMstatusfunc1') LET &imstatusfunc = Fn2 normal! i #" Using a string(funcref variable) to set 'completefunc' LET &imactivatefunc = string(Fn1) LET &imstatusfunc = string(Fn2) normal! i #" Test for using a funcref() set imactivatefunc=funcref('g:IMactivatefunc1') set imstatusfunc=funcref('g:IMstatusfunc1') normal! i #" Using a funcref variable to set 'imactivatefunc' LET Fn1 = funcref('g:IMactivatefunc1') LET &imactivatefunc = Fn1 LET Fn2 = funcref('g:IMstatusfunc1') LET &imstatusfunc = Fn2 normal! i #" Using a string(funcref variable) to set 'imactivatefunc' LET &imactivatefunc = string(Fn1) LET &imstatusfunc = string(Fn2) normal! i #" Test for using a lambda function VAR optval = "LSTART a LMIDDLE g:IMactivatefunc1(a) LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set imactivatefunc=" .. optval LET optval = "LSTART LMIDDLE g:IMstatusfunc1() LEND" LET optval = substitute(optval, ' ', '\\ ', 'g') exe "set imstatusfunc=" .. optval normal! i #" Set 'imactivatefunc' and 'imstatusfunc' to a lambda expression LET &imactivatefunc = LSTART a LMIDDLE g:IMactivatefunc1(a) LEND LET &imstatusfunc = LSTART LMIDDLE g:IMstatusfunc1() LEND normal! i #" Set 'imactivatefunc' and 'imstatusfunc' to a string(lambda expression) LET &imactivatefunc = 'LSTART a LMIDDLE g:IMactivatefunc1(a) LEND' LET &imstatusfunc = 'LSTART LMIDDLE g:IMstatusfunc1() LEND' normal! i #" Set 'imactivatefunc' 'imstatusfunc' to a variable with a lambda #" expression VAR Lambda1 = LSTART a LMIDDLE g:IMactivatefunc1(a) LEND VAR Lambda2 = LSTART LMIDDLE g:IMstatusfunc1() LEND LET &imactivatefunc = Lambda1 LET &imstatusfunc = Lambda2 normal! i #" Set 'imactivatefunc' 'imstatusfunc' to a string(variable with a lambda #" expression) LET &imactivatefunc = string(Lambda1) LET &imstatusfunc = string(Lambda2) normal! i #" Test for clearing the 'completefunc' option set imactivatefunc='' imstatusfunc='' set imactivatefunc& imstatusfunc& set imactivatefunc=g:IMactivatefunc1 set imstatusfunc=g:IMstatusfunc1 call assert_fails("set imactivatefunc=function('abc')", "E700:") call assert_fails("set imstatusfunc=function('abc')", "E700:") call assert_fails("set imactivatefunc=funcref('abc')", "E700:") call assert_fails("set imstatusfunc=funcref('abc')", "E700:") call assert_fails("LET &imstatusfunc = function('abc')", "E700:") call assert_fails("LET &imactivatefunc = function('abc')", "E700:") normal! i #" set 'imactivatefunc' and 'imstatusfunc' to a non-existing function set imactivatefunc=IMactivatefunc1 set imstatusfunc=IMstatusfunc1 call assert_fails("set imactivatefunc=function('NonExistingFunc')", 'E700:') call assert_fails("set imstatusfunc=function('NonExistingFunc')", 'E700:') call assert_fails("LET &imactivatefunc = function('NonExistingFunc')", 'E700:') call assert_fails("LET &imstatusfunc = function('NonExistingFunc')", 'E700:') normal! i call assert_equal(14, g:IMactivatefunc_called) call assert_equal(28, g:IMstatusfunc_called) END call v9.CheckLegacyAndVim9Success(lines) " Using Vim9 lambda expression in legacy context should fail set imactivatefunc=(a)\ =>\ IMactivatefunc1(a) set imstatusfunc=IMstatusfunc1 call assert_fails('normal! i', 'E117:') set imactivatefunc=IMactivatefunc1 set imstatusfunc=()\ =>\ IMstatusfunc1(a) call assert_fails('normal! i', 'E117:') " set 'imactivatefunc' and 'imstatusfunc' to a partial with dict. This used " to cause a crash. func SetIMFunc() let params1 = {'activate': function('g:DictActivateFunc')} let params2 = {'status': function('g:DictStatusFunc')} let &imactivatefunc = params1.activate let &imstatusfunc = params2.status endfunc func g:DictActivateFunc(_) dict endfunc func g:DictStatusFunc(_) dict endfunc call SetIMFunc() new call SetIMFunc() bw call test_garbagecollect_now() new set imactivatefunc= set imstatusfunc= wincmd w set imactivatefunc= set imstatusfunc= :%bw! delfunc g:DictActivateFunc delfunc g:DictStatusFunc delfunc SetIMFunc " Vim9 tests let lines =<< trim END vim9script # Test for using function() def IMactivatefunc1(active: number): any g:IMactivatefunc_called += 1 return 1 enddef def IMstatusfunc1(): number g:IMstatusfunc_called += 1 return 1 enddef g:IMactivatefunc_called = 0 g:IMstatusfunc_called = 0 set iminsert=2 set imactivatefunc=function('IMactivatefunc1') set imstatusfunc=function('IMstatusfunc1') normal! i set iminsert=0 set imactivatefunc= set imstatusfunc= END call v9.CheckScriptSuccess(lines) " cleanup set iminsert=0 set imactivatefunc& set imstatusfunc& delfunc IMactivatefunc1 delfunc IMstatusfunc1 unlet g:IMactivatefunc_called g:IMstatusfunc_called %bw! endfunc " vim: shiftwidth=2 sts=2 expandtab