summaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
Diffstat (limited to 'autoload')
-rw-r--r--autoload/vim_ai.vim27
-rw-r--r--autoload/vim_ai_config.vim5
2 files changed, 20 insertions, 12 deletions
diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim
index 114c5ad..8d5b3bc 100644
--- a/autoload/vim_ai.vim
+++ b/autoload/vim_ai.vim
@@ -3,6 +3,7 @@ call vim_ai_config#load()
let s:plugin_root = expand('<sfile>:p:h:h')
let s:complete_py = s:plugin_root . "/py/complete.py"
let s:chat_py = s:plugin_root . "/py/chat.py"
+let s:roles_py = s:plugin_root . "/py/roles.py"
" remembers last command parameters to be used in AIRedoRun
let s:last_is_selection = 0
@@ -78,15 +79,14 @@ function! s:OpenChatWindow(open_conf)
endfunction
function! s:set_paste(config)
- if a:config['ui']['paste_mode']
- setlocal paste
- endif
-endfunction
-
-function! s:set_nopaste(config)
- if a:config['ui']['paste_mode']
- setlocal nopaste
- endif
+ if !a:config['ui']['paste_mode'] | return | endif
+ if &paste | return | endif
+ setlocal paste
+ augroup AiPaste
+ autocmd!
+ autocmd ModeChanged i:* exe 'set nopaste'
+ autocmd! AiPaste InsertLeave
+ augroup END
endfunction
function! s:GetSelectionOrRange(is_selection, ...)
@@ -152,7 +152,6 @@ function! vim_ai#AIRun(config, ...) range
endif
execute "py3file " . s:complete_py
execute "normal! " . a:lastline . "G"
- call s:set_nopaste(l:config)
endfunction
" Edit prompt
@@ -183,7 +182,6 @@ function! vim_ai#AIEditRun(config, ...) range
call s:SelectSelectionOrRange(l:is_selection, a:firstline, a:lastline)
execute "normal! c"
execute "py3file " . s:complete_py
- call s:set_nopaste(l:config)
endfunction
function! s:ReuseOrCreateChatWindow(config)
@@ -250,7 +248,6 @@ function! vim_ai#AIChatRun(uses_range, config, ...) range
let s:last_config = a:config
execute "py3file " . s:chat_py
- call s:set_nopaste(l:config)
endfunction
" Start a new chat
@@ -273,3 +270,9 @@ function! vim_ai#AIRedoRun()
call vim_ai#AIChatRun(0, s:last_config)
endif
endfunction
+
+function! vim_ai#RoleCompletion(A,L,P) abort
+ execute "py3file " . s:roles_py
+ call map(l:role_list, '"/" . v:val')
+ return filter(l:role_list, 'v:val =~ "^' . a:A . '"')
+endfunction
diff --git a/autoload/vim_ai_config.vim b/autoload/vim_ai_config.vim
index ef3c863..41932de 100644
--- a/autoload/vim_ai_config.vim
+++ b/autoload/vim_ai_config.vim
@@ -1,3 +1,5 @@
+let s:plugin_root = expand('<sfile>:p:h:h')
+
let g:vim_ai_complete_default = {
\ "engine": "complete",
\ "options": {
@@ -73,6 +75,9 @@ endif
if !exists("g:vim_ai_token_file_path")
let g:vim_ai_token_file_path = "~/.config/openai.token"
endif
+if !exists("g:vim_ai_roles_config_file")
+ let g:vim_ai_roles_config_file = s:plugin_root . "/roles-example.ini"
+endif
function! vim_ai_config#ExtendDeep(defaults, override) abort
let l:result = a:defaults