summaryrefslogtreecommitdiff
path: root/plugin/vim-ai.vim
diff options
context:
space:
mode:
authorKonfekt <Konfekt@users.noreply.github.com>2024-02-24 18:13:33 +0100
committerKonfekt <Konfekt@users.noreply.github.com>2024-02-26 10:10:18 +0100
commit46e3d5a609fdaa2ddb2af6cc5cb4e754b8b39bfa (patch)
treeb5621a29369c413b57602b7732e2a75642b51137 /plugin/vim-ai.vim
parent1eb6438983250623ca42d0c1bd839c1bfc2af8c9 (diff)
downloadvim-ai-46e3d5a609fdaa2ddb2af6cc5cb4e754b8b39bfa.tar.gz
prefer less frequent ModeChanged event to CursorMoved if available
Diffstat (limited to 'plugin/vim-ai.vim')
-rw-r--r--plugin/vim-ai.vim25
1 files changed, 23 insertions, 2 deletions
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\<C-v>]"
+ 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\<C-v>]"
+ 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 <line1>,<line2>call vim_ai#AIRun(g:vim_ai_is_selection_pending, {}, <f-args>)