From 249cc6d11e7ef560fe23a1c6e665a7afb8abdb20 Mon Sep 17 00:00:00 2001 From: Konfekt Date: Wed, 21 Feb 2024 12:45:51 +0100 Subject: fix selection handling in vim_ai functions addresses https://github.com/madox2/vim-ai/issues/76 --- plugin/vim-ai.vim | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'plugin') diff --git a/plugin/vim-ai.vim b/plugin/vim-ai.vim index 1d03177..6bcb919 100644 --- a/plugin/vim-ai.vim +++ b/plugin/vim-ai.vim @@ -4,8 +4,14 @@ if !has('python3') finish endif -command! -range -nargs=? AI ,call vim_ai#AIRun(, {}, ) -command! -range -nargs=? AIEdit ,call vim_ai#AIEditRun(, {}, ) -command! -range -nargs=? AIChat ,call vim_ai#AIChatRun(, {}, ) +" to detect if a selection pending: https://stackoverflow.com/a/20133772 +augroup vim_ai + autocmd! + autocmd CursorMoved * let g:vim_ai_is_selection_pending = mode() =~# "^[vV\]" +augroup END + +command! -range -nargs=? AI ,call vim_ai#AIRun(g:vim_ai_is_selection_pending, {}, ) +command! -range -nargs=? AIEdit ,call vim_ai#AIEditRun(g:vim_ai_is_selection_pending, {}, ) +command! -range -nargs=? AIChat ,call vim_ai#AIChatRun(g:vim_ai_is_selection_pending, {}, ) command! -nargs=? AINewChat call vim_ai#AINewChatRun() command! AIRedo call vim_ai#AIRedoRun() -- cgit v1.2.3 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') 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 From dec808e78845cb981a7d8d23ac1a1c0eac58d114 Mon Sep 17 00:00:00 2001 From: Konfekt Date: Mon, 26 Feb 2024 08:20:16 +0100 Subject: drop superfluous selection argument and fix instruction argument --- plugin/vim-ai.vim | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'plugin') diff --git a/plugin/vim-ai.vim b/plugin/vim-ai.vim index 1ffac9a..b276355 100644 --- a/plugin/vim-ai.vim +++ b/plugin/vim-ai.vim @@ -31,8 +31,11 @@ augroup vim_ai endif augroup END -command! -range -nargs=? AI ,call vim_ai#AIRun(g:vim_ai_is_selection_pending, {}, ) -command! -range -nargs=? AIEdit ,call vim_ai#AIEditRun(g:vim_ai_is_selection_pending, {}, ) -command! -range -nargs=? AIChat ,call vim_ai#AIChatRun(g:vim_ai_is_selection_pending, {}, ) -command! -nargs=? AINewChat call vim_ai#AINewChatRun() -command! AIRedo call vim_ai#AIRedoRun() +command! -range -nargs=? AI ,call vim_ai#AIRun({}, ) +command! -range -nargs=? AIEdit ,call vim_ai#AIEditRun({}, ) +" Whereas AI and AIEdit default to passing the current line as range +" AIChat defaults to passing nothing which is achieved by -range=0 and passing +" as described at https://stackoverflow.com/a/20133772 +command! -range=0 -nargs=? AIChat ,call vim_ai#AIChatRun(, {}, ) +command! -nargs=? AINewChat call vim_ai#AINewChatRun() +command! AIRedo call vim_ai#AIRedoRun() -- cgit v1.2.3 From d9c2669517c5da3dc51d79901c2c1ba8f236f075 Mon Sep 17 00:00:00 2001 From: Konfekt Date: Mon, 26 Feb 2024 21:30:13 +0100 Subject: revert ModeChanged because visual to command mode is not detected --- plugin/vim-ai.vim | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) (limited to 'plugin') diff --git a/plugin/vim-ai.vim b/plugin/vim-ai.vim index b276355..5d156c3 100644 --- a/plugin/vim-ai.vim +++ b/plugin/vim-ai.vim @@ -4,31 +4,12 @@ if !has('python3') finish endif -" detect if a visual selection is pending +" detect if a visual selection is pending: https://stackoverflow.com/a/20133772 let g:vim_ai_is_selection_pending = 0 augroup vim_ai autocmd! - 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({}, ) -- cgit v1.2.3