diff options
Diffstat (limited to 'autoload')
| -rw-r--r-- | autoload/vim_ai.vim | 27 | ||||
| -rw-r--r-- | autoload/vim_ai_config.vim | 5 |
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 |