From 46e3d5a609fdaa2ddb2af6cc5cb4e754b8b39bfa Mon Sep 17 00:00:00 2001 From: Konfekt Date: Sat, 24 Feb 2024 18:13:33 +0100 Subject: prefer less frequent ModeChanged event to CursorMoved if available --- plugin/vim-ai.vim | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'plugin/vim-ai.vim') diff --git a/plugin/vim-ai.vim b/plugin/vim-ai.vim index 6bcb919..1ffac9a 100644 --- a/plugin/vim-ai.vim +++ b/plugin/vim-ai.vim @@ -4,10 +4,31 @@ if !has('python3') finish endif -" to detect if a selection pending: https://stackoverflow.com/a/20133772 +" detect if a visual selection is pending +let g:vim_ai_is_selection_pending = 0 augroup vim_ai autocmd! - autocmd CursorMoved * let g:vim_ai_is_selection_pending = mode() =~# "^[vV\]" + if exists('##ModeChanged') + autocmd ModeChanged *:[vV\x16]* + \ let g:vim_ai_is_selection_pending = 1 + autocmd ModeChanged [vV\x16]*:* + \ let g:vim_ai_is_selection_pending = + \ v:event.new_mode =~# '^c' && + \ (getcmdtype() =~# '[/?]' || + \ getcmdtype() ==# ':' && getcmdline() =~# "^\s*'<'>") + else + " workaround for version < 8.2.3424 from https://stackoverflow.com/a/20133772 + autocmd CursorMoved * + \ let g:vim_ai_is_selection_pending = mode() =~# "^[vV\]" + autocmd CmdLineEnter,CmdwinEnter * + \ if g:vim_ai_is_selection_pending && getcmdtype() ==# ':' | + \ let g:vim_ai_is_selection_pending = getcmdline() =~# "^\s*'<'>" | + \ endif + autocmd CmdLineLeave,CmdwinLeave * + \ if g:vim_ai_is_selection_pending && getcmdtype() !~# '[/?]' | + \ let g:vim_ai_is_selection_pending = 0 | + \ endif + endif augroup END command! -range -nargs=? AI ,call vim_ai#AIRun(g:vim_ai_is_selection_pending, {}, ) -- cgit v1.2.3