summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonfekt <Konfekt@users.noreply.github.com>2024-03-08 17:25:27 +0100
committerKonfekt <Konfekt@users.noreply.github.com>2024-03-08 17:25:27 +0100
commit3178df3e2a77efc2d3e866b8a920d6a1bd5521ed (patch)
tree6f1084cbc9955f9cd5078fb3a47a4f7f791c93fb
parente0e03cf9ca218cd3f8f9afe0a219aca7470fa4f5 (diff)
downloadvim-ai-3178df3e2a77efc2d3e866b8a920d6a1bd5521ed.tar.gz
allow overriding range if called on visual selection
Check if the start and end line of range equals that of visual selection. If so, take the visual selection; otherwise the supplied range
-rw-r--r--autoload/vim_ai.vim22
1 files changed, 17 insertions, 5 deletions
diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim
index ffc5fa3..940b4a2 100644
--- a/autoload/vim_ai.vim
+++ b/autoload/vim_ai.vim
@@ -125,8 +125,14 @@ endfunction
function! vim_ai#AIRun(config, ...) range
let l:config = vim_ai_config#ExtendDeep(g:vim_ai_complete, a:config)
let l:instruction = a:0 > 0 ? a:1 : ""
- " used for getting in Python script
- let l:is_selection = a:0 > 1 ? a:2 : g:vim_ai_is_selection_pending
+ " l:is_selection used in Python script
+ if a:0 > 1
+ let l:is_selection = a:2
+ else
+ let l:is_selection = g:vim_ai_is_selection_pending &&
+ \ a:firstline == line("'>") && a:lastline == line("'>")
+ endif
+
let l:selection = s:GetSelectionOrRange(l:is_selection, a:firstline, a:lastline)
let l:prompt = s:MakePrompt(l:selection, l:instruction, l:config)
@@ -156,8 +162,13 @@ endfunction
function! vim_ai#AIEditRun(config, ...) range
let l:config = vim_ai_config#ExtendDeep(g:vim_ai_edit, a:config)
let l:instruction = a:0 > 0 ? a:1 : ""
- " used for getting in Python script
- let l:is_selection = a:0 > 1 ? a:2 : g:vim_ai_is_selection_pending
+ " l:is_selection used in Python script
+ if a:0 > 1
+ let l:is_selection = a:2
+ else
+ let l:is_selection = g:vim_ai_is_selection_pending &&
+ \ a:firstline == line("'>") && a:lastline == line("'>")
+ endif
let l:selection = s:GetSelectionOrRange(l:is_selection, a:firstline, a:lastline)
let l:prompt = s:MakePrompt(l:selection, l:instruction, l:config)
@@ -184,7 +195,8 @@ function! vim_ai#AIChatRun(uses_range, config, ...) range
let l:instruction = ""
" l:is_selection used in Python script
if a:uses_range
- let l:is_selection = g:vim_ai_is_selection_pending
+ let l:is_selection = g:vim_ai_is_selection_pending &&
+ \ a:firstline == line("'>") && a:lastline == line("'>")
let l:selection = s:GetSelectionOrRange(l:is_selection, a:firstline, a:lastline)
else
let l:is_selection = 0