summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--autoload/vim_ai.vim23
-rw-r--r--plugin/vim-ai.vim12
2 files changed, 21 insertions, 14 deletions
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 - <range> 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 - <range> 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 - <range> 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)
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 <line1>,<line2>call vim_ai#AIRun(<range>, {}, <f-args>)
-command! -range -nargs=? AIEdit <line1>,<line2>call vim_ai#AIEditRun(<range>, {}, <f-args>)
-command! -range -nargs=? AIChat <line1>,<line2>call vim_ai#AIChatRun(<range>, {}, <f-args>)
+" 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\<C-v>]"
+augroup END
+
+command! -range -nargs=? AI <line1>,<line2>call vim_ai#AIRun(g:vim_ai_is_selection_pending, {}, <f-args>)
+command! -range -nargs=? AIEdit <line1>,<line2>call vim_ai#AIEditRun(g:vim_ai_is_selection_pending, {}, <f-args>)
+command! -range -nargs=? AIChat <line1>,<line2>call vim_ai#AIChatRun(g:vim_ai_is_selection_pending, {}, <f-args>)
command! -nargs=? AINewChat call vim_ai#AINewChatRun(<f-args>)
command! AIRedo call vim_ai#AIRedoRun()