From 31f0d53511791fba5a51fe1bef6129ed0af5997f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 10 May 2026 09:58:59 +0000 Subject: [PATCH 1/8] Initial plan From 589711401f7e7dca6b50108918a8dd6c6928baa6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 10 May 2026 10:04:59 +0000 Subject: [PATCH 2/8] fix: handle keep_state enabled detection across mode transitions Agent-Logs-Url: https://github.com/vim-skk/eskk.vim/sessions/7f17574e-5a80-4f2b-8073-0997f4bbdd87 Co-authored-by: Shougo <41495+Shougo@users.noreply.github.com> --- autoload/eskk.vim | 9 +++++-- test/02-input/05-keep-state-toggle.vim | 37 ++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 test/02-input/05-keep-state-toggle.vim diff --git a/autoload/eskk.vim b/autoload/eskk.vim index f9debe77..7508f077 100644 --- a/autoload/eskk.vim +++ b/autoload/eskk.vim @@ -1842,8 +1842,13 @@ endfunction "}}} " Enable/Disable IM function! eskk#is_enabled() abort "{{{ - return eskk#is_initialized() - \ && &iminsert is 1 + if !eskk#is_initialized() + return 0 + endif + if &iminsert is 1 + return 1 + endif + return has_key(eskk#get_buffer_instance(), 'prev_lang_keys') endfunction "}}} function! eskk#toggle() abort "{{{ if !eskk#is_initialized() diff --git a/test/02-input/05-keep-state-toggle.vim b/test/02-input/05-keep-state-toggle.vim new file mode 100644 index 00000000..3e9b2b85 --- /dev/null +++ b/test/02-input/05-keep-state-toggle.vim @@ -0,0 +1,37 @@ +" vim:foldmethod=marker:fen: +scriptencoding utf-8 + +" Saving 'cpoptions' {{{ +let s:save_cpo = &cpo +set cpo&vim +" }}} + + +function! s:run() abort "{{{ + let save_iminsert = &l:iminsert + try + call eskk#enable() + let inst = eskk#get_buffer_instance() + OK has_key(inst, 'prev_lang_keys') + OK eskk#is_enabled() + + let &l:iminsert = 0 + OK eskk#is_enabled() + + call eskk#toggle() + let inst = eskk#get_buffer_instance() + OK !has_key(inst, 'prev_lang_keys') + OK !eskk#is_enabled() + finally + call eskk#disable() + let &l:iminsert = save_iminsert + endtry +endfunction "}}} + +call s:run() +Done + + +" Restore 'cpoptions' {{{ +let &cpo = s:save_cpo +" }}} From 6a2160842dc047872a51ab0b4b8fe8d17bcdf90e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 10:09:40 +0000 Subject: [PATCH 3/8] fix: handle iminsert mismatch in keep-state enable/disable transitions Agent-Logs-Url: https://github.com/vim-skk/eskk.vim/sessions/40c0e4d6-7c32-4184-a23e-ac64d410280c Co-authored-by: Shougo <41495+Shougo@users.noreply.github.com> --- autoload/eskk.vim | 11 ++++++++++- test/02-input/05-keep-state-toggle.vim | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/autoload/eskk.vim b/autoload/eskk.vim index 7508f077..12aa69dd 100644 --- a/autoload/eskk.vim +++ b/autoload/eskk.vim @@ -1865,6 +1865,14 @@ function! eskk#enable() abort "{{{ if eskk#is_enabled() " Initialize mode. call eskk#set_mode(g:eskk#initial_mode) + if mode() =~# '^[ic]$' && &l:iminsert isnot 1 + " NOTE: Vim can't enter lang-mode immediately + " in insert-mode or commandline-mode. + " We have to use i_CTRL-^ . + setlocal iminsert=1 imsearch=1 + redrawstatus + return "\" + endif return '' endif if exists('b:skk_on') && b:skk_on @@ -1951,10 +1959,11 @@ function! eskk#disable() abort "{{{ " NOTE: Vim can't escape lang-mode immediately " in insert-mode or commandline-mode. " We have to use i_CTRL-^ . + let was_iminsert = (&l:iminsert is 1) setlocal iminsert=0 imsearch=0 redrawstatus let kakutei_str = eskk#get_preedit().generate_kakutei_str() - let ret = kakutei_str . "\" + let ret = kakutei_str . (was_iminsert ? "\" : '') call s:dict_update_rank() else setlocal iminsert=0 imsearch=0 diff --git a/test/02-input/05-keep-state-toggle.vim b/test/02-input/05-keep-state-toggle.vim index 3e9b2b85..83765853 100644 --- a/test/02-input/05-keep-state-toggle.vim +++ b/test/02-input/05-keep-state-toggle.vim @@ -22,6 +22,15 @@ function! s:run() abort "{{{ let inst = eskk#get_buffer_instance() OK !has_key(inst, 'prev_lang_keys') OK !eskk#is_enabled() + + call eskk#enable() + let &l:iminsert = 0 + OK eskk#is_enabled() + + call eskk#disable() + let inst = eskk#get_buffer_instance() + OK !has_key(inst, 'prev_lang_keys') + OK !eskk#is_enabled() finally call eskk#disable() let &l:iminsert = save_iminsert From 41af4405bd4fc8abb90aff8f13ae636691691023 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 10:10:19 +0000 Subject: [PATCH 4/8] style: use idiomatic numeric comparisons in keep-state fix Agent-Logs-Url: https://github.com/vim-skk/eskk.vim/sessions/40c0e4d6-7c32-4184-a23e-ac64d410280c Co-authored-by: Shougo <41495+Shougo@users.noreply.github.com> --- autoload/eskk.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/autoload/eskk.vim b/autoload/eskk.vim index 12aa69dd..c96b455e 100644 --- a/autoload/eskk.vim +++ b/autoload/eskk.vim @@ -1865,7 +1865,7 @@ function! eskk#enable() abort "{{{ if eskk#is_enabled() " Initialize mode. call eskk#set_mode(g:eskk#initial_mode) - if mode() =~# '^[ic]$' && &l:iminsert isnot 1 + if mode() =~# '^[ic]$' && &l:iminsert !=# 1 " NOTE: Vim can't enter lang-mode immediately " in insert-mode or commandline-mode. " We have to use i_CTRL-^ . @@ -1959,7 +1959,7 @@ function! eskk#disable() abort "{{{ " NOTE: Vim can't escape lang-mode immediately " in insert-mode or commandline-mode. " We have to use i_CTRL-^ . - let was_iminsert = (&l:iminsert is 1) + let was_iminsert = (&l:iminsert ==# 1) setlocal iminsert=0 imsearch=0 redrawstatus let kakutei_str = eskk#get_preedit().generate_kakutei_str() From d0f3b0cf80011faeae08976843775166559b444e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 10:23:06 +0000 Subject: [PATCH 5/8] fix: use imsearch for cmdline keep-state toggle transitions Agent-Logs-Url: https://github.com/vim-skk/eskk.vim/sessions/7a0de3f6-f857-487d-b56b-c04a8104144f Co-authored-by: Shougo <41495+Shougo@users.noreply.github.com> --- autoload/eskk.vim | 11 ++++++++--- test/02-input/05-keep-state-toggle.vim | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/autoload/eskk.vim b/autoload/eskk.vim index c96b455e..8b0d0e53 100644 --- a/autoload/eskk.vim +++ b/autoload/eskk.vim @@ -1865,7 +1865,12 @@ function! eskk#enable() abort "{{{ if eskk#is_enabled() " Initialize mode. call eskk#set_mode(g:eskk#initial_mode) - if mode() =~# '^[ic]$' && &l:iminsert !=# 1 + if mode() =~# '^[ic]$' + let im_on = mode() ==# 'c' ? &l:imsearch : &l:iminsert + else + let im_on = 1 + endif + if mode() =~# '^[ic]$' && im_on !=# 1 " NOTE: Vim can't enter lang-mode immediately " in insert-mode or commandline-mode. " We have to use i_CTRL-^ . @@ -1959,11 +1964,11 @@ function! eskk#disable() abort "{{{ " NOTE: Vim can't escape lang-mode immediately " in insert-mode or commandline-mode. " We have to use i_CTRL-^ . - let was_iminsert = (&l:iminsert ==# 1) + let was_im_enabled = mode() ==# 'c' ? (&l:imsearch ==# 1) : (&l:iminsert ==# 1) setlocal iminsert=0 imsearch=0 redrawstatus let kakutei_str = eskk#get_preedit().generate_kakutei_str() - let ret = kakutei_str . (was_iminsert ? "\" : '') + let ret = kakutei_str . (was_im_enabled ? "\" : '') call s:dict_update_rank() else setlocal iminsert=0 imsearch=0 diff --git a/test/02-input/05-keep-state-toggle.vim b/test/02-input/05-keep-state-toggle.vim index 83765853..313bd1a4 100644 --- a/test/02-input/05-keep-state-toggle.vim +++ b/test/02-input/05-keep-state-toggle.vim @@ -25,6 +25,7 @@ function! s:run() abort "{{{ call eskk#enable() let &l:iminsert = 0 + let &l:imsearch = 1 OK eskk#is_enabled() call eskk#disable() From 33dfd45b883758baa2801e1d6e0b1b3867711928 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 10:23:40 +0000 Subject: [PATCH 6/8] refactor: simplify cmdline IM state check in enable path Agent-Logs-Url: https://github.com/vim-skk/eskk.vim/sessions/7a0de3f6-f857-487d-b56b-c04a8104144f Co-authored-by: Shougo <41495+Shougo@users.noreply.github.com> --- autoload/eskk.vim | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/autoload/eskk.vim b/autoload/eskk.vim index 8b0d0e53..5a8378a9 100644 --- a/autoload/eskk.vim +++ b/autoload/eskk.vim @@ -1867,16 +1867,14 @@ function! eskk#enable() abort "{{{ call eskk#set_mode(g:eskk#initial_mode) if mode() =~# '^[ic]$' let im_on = mode() ==# 'c' ? &l:imsearch : &l:iminsert - else - let im_on = 1 - endif - if mode() =~# '^[ic]$' && im_on !=# 1 - " NOTE: Vim can't enter lang-mode immediately - " in insert-mode or commandline-mode. - " We have to use i_CTRL-^ . - setlocal iminsert=1 imsearch=1 - redrawstatus - return "\" + if im_on !=# 1 + " NOTE: Vim can't enter lang-mode immediately + " in insert-mode or commandline-mode. + " We have to use i_CTRL-^ . + setlocal iminsert=1 imsearch=1 + redrawstatus + return "\" + endif endif return '' endif From 58232f93912bc03ed13526746559687d22da8281 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 10:24:35 +0000 Subject: [PATCH 7/8] refactor: share mode-aware IM state check in enable/disable Agent-Logs-Url: https://github.com/vim-skk/eskk.vim/sessions/7a0de3f6-f857-487d-b56b-c04a8104144f Co-authored-by: Shougo <41495+Shougo@users.noreply.github.com> --- autoload/eskk.vim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/autoload/eskk.vim b/autoload/eskk.vim index 5a8378a9..17af87c3 100644 --- a/autoload/eskk.vim +++ b/autoload/eskk.vim @@ -1850,6 +1850,9 @@ function! eskk#is_enabled() abort "{{{ endif return has_key(eskk#get_buffer_instance(), 'prev_lang_keys') endfunction "}}} +function! s:is_im_enabled_in_current_mode() abort "{{{ + return mode() ==# 'c' ? (&l:imsearch ==# 1) : (&l:iminsert ==# 1) +endfunction "}}} function! eskk#toggle() abort "{{{ if !eskk#is_initialized() call eskk#logger#warn('eskk is not initialized.') @@ -1866,8 +1869,7 @@ function! eskk#enable() abort "{{{ " Initialize mode. call eskk#set_mode(g:eskk#initial_mode) if mode() =~# '^[ic]$' - let im_on = mode() ==# 'c' ? &l:imsearch : &l:iminsert - if im_on !=# 1 + if !s:is_im_enabled_in_current_mode() " NOTE: Vim can't enter lang-mode immediately " in insert-mode or commandline-mode. " We have to use i_CTRL-^ . @@ -1962,7 +1964,7 @@ function! eskk#disable() abort "{{{ " NOTE: Vim can't escape lang-mode immediately " in insert-mode or commandline-mode. " We have to use i_CTRL-^ . - let was_im_enabled = mode() ==# 'c' ? (&l:imsearch ==# 1) : (&l:iminsert ==# 1) + let was_im_enabled = s:is_im_enabled_in_current_mode() setlocal iminsert=0 imsearch=0 redrawstatus let kakutei_str = eskk#get_preedit().generate_kakutei_str() From 995b8316411abaadf41defd2bcd89b6adcbff9f7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 10:25:29 +0000 Subject: [PATCH 8/8] fix: use effective imsearch/iminsert in mode-aware state check Agent-Logs-Url: https://github.com/vim-skk/eskk.vim/sessions/7a0de3f6-f857-487d-b56b-c04a8104144f Co-authored-by: Shougo <41495+Shougo@users.noreply.github.com> --- autoload/eskk.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/eskk.vim b/autoload/eskk.vim index 17af87c3..20d5e575 100644 --- a/autoload/eskk.vim +++ b/autoload/eskk.vim @@ -1851,7 +1851,7 @@ function! eskk#is_enabled() abort "{{{ return has_key(eskk#get_buffer_instance(), 'prev_lang_keys') endfunction "}}} function! s:is_im_enabled_in_current_mode() abort "{{{ - return mode() ==# 'c' ? (&l:imsearch ==# 1) : (&l:iminsert ==# 1) + return mode() ==# 'c' ? (&imsearch ==# 1) : (&iminsert ==# 1) endfunction "}}} function! eskk#toggle() abort "{{{ if !eskk#is_initialized()