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 --- autoload/vim_ai.vim | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'autoload/vim_ai.vim') diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim index dfd9c3b..6dfe70c 100644 --- a/autoload/vim_ai.vim +++ b/autoload/vim_ai.vim @@ -87,19 +87,19 @@ function! s:set_nopaste(config) endif endfunction -function! s:GetCurrentLineOrSelection(is_selection) +function! s:GetSelectionOrRange(is_selection, ...) if a:is_selection return s:GetVisualSelection() else - return trim(join(getline(a:firstline, a:lastline), "\n")) + return trim(join(getline(a:1, a:2), "\n")) endif endfunction -function! s:SelectCurrentLineOrSelection(is_selection) +function! s:SelectSelectionOrRange(is_selection, ...) if a:is_selection execute "normal! gv" else - execute 'normal! V' + execute 'normal!' . a:1 . 'GV' . a:2 . 'G' endif endfunction @@ -116,15 +116,16 @@ function! s:GetVisualSelection() return join(lines, "\n") endfunction + " Complete prompt -" - is_selection - parameter +" - is_selection - obsoleted by auto updated g:vim_ai_is_selection_pending " - config - function scoped vim_ai_complete config " - a:1 - optional instruction prompt function! vim_ai#AIRun(is_selection, config, ...) range let l:config = vim_ai_config#ExtendDeep(g:vim_ai_complete, a:config) let l:instruction = a:0 ? a:1 : "" - let l:selection = s:GetCurrentLineOrSelection(a:is_selection) + let l:selection = s:GetSelectionOrRange(a:is_selection, a:firstline, a:lastline) let l:prompt = s:MakePrompt(l:selection, l:instruction, l:config) " used for getting in Python script let l:is_selection = a:is_selection @@ -147,14 +148,14 @@ function! vim_ai#AIRun(is_selection, config, ...) range endfunction " Edit prompt -" - is_selection - parameter +" - is_selection - obsoleted by auto updated g:vim_ai_is_selection_pending " - config - function scoped vim_ai_edit config " - a:1 - optional instruction prompt function! vim_ai#AIEditRun(is_selection, config, ...) range let l:config = vim_ai_config#ExtendDeep(g:vim_ai_edit, a:config) let l:instruction = a:0 ? a:1 : "" - let l:selection = s:GetCurrentLineOrSelection(a:is_selection) + let l:selection = s:GetSelectionOrRange(a:is_selection, a:firstline, a:lastline) " used for getting in Python script let l:is_selection = a:is_selection let l:prompt = s:MakePrompt(l:selection, l:instruction, l:config) @@ -165,21 +166,21 @@ function! vim_ai#AIEditRun(is_selection, config, ...) range let s:last_is_selection = a:is_selection call s:set_paste(l:config) - call s:SelectCurrentLineOrSelection(a:is_selection) + call s:SelectSelectionOrRange(a:is_selection, a:firstline, a:lastline) execute "normal! c" execute "py3file " . s:complete_py call s:set_nopaste(l:config) endfunction " Start and answer the chat -" - is_selection - parameter +" - is_selection - obsoleted by auto updated g:vim_ai_is_selection_pending " - config - function scoped vim_ai_chat config " - a:1 - optional instruction prompt function! vim_ai#AIChatRun(is_selection, config, ...) range let l:config = vim_ai_config#ExtendDeep(g:vim_ai_chat, a:config) let l:instruction = "" - let l:selection = s:GetVisualSelection() + let l:selection = s:GetSelectionOrRange(a:is_selection, a:firstline, a:lastline) " used for getting in Python script let l:is_selection = a:is_selection call s:set_paste(l:config) -- cgit v1.2.3