diff options
| -rw-r--r-- | autoload/vim_ai.vim | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim index 6baf484..114c5ad 100644 --- a/autoload/vim_ai.vim +++ b/autoload/vim_ai.vim @@ -186,6 +186,40 @@ function! vim_ai#AIEditRun(config, ...) range call s:set_nopaste(l:config) endfunction +function! s:ReuseOrCreateChatWindow(config) + if &filetype != 'aichat' + " reuse chat in active window or tab + let l:chat_win_ids = win_findbuf(bufnr(s:scratch_buffer_name)) + if !empty(l:chat_win_ids) + call win_gotoid(l:chat_win_ids[0]) + return + endif + + " reuse .aichat file on the same tab + let buffer_list_tab = tabpagebuflist(tabpagenr()) + let buffer_list_tab = filter(buffer_list_tab, 'getbufvar(v:val, "&filetype") ==# "aichat"') + if len(buffer_list_tab) > 0 + call win_gotoid(win_findbuf(buffer_list_tab[0])[0]) + return + endif + + " reuse any .aichat buffer in the session + let buffer_list = [] + for i in range(tabpagenr('$')) + call extend(buffer_list, tabpagebuflist(i + 1)) + endfor + let buffer_list = filter(buffer_list, 'getbufvar(v:val, "&filetype") ==# "aichat"') + if len(buffer_list) > 0 + call win_gotoid(win_findbuf(buffer_list[0])[0]) + return + endif + + " open new chat window if no active buffer found + let l:open_conf = a:config['ui']['open_chat_command'] + call s:OpenChatWindow(l:open_conf) + endif +endfunction + " Start and answer the chat " - uses_range - true if range passed " - config - function scoped vim_ai_chat config @@ -204,35 +238,7 @@ function! vim_ai#AIChatRun(uses_range, config, ...) range endif call s:set_paste(l:config) - if &filetype != 'aichat' - let l:chat_win_ids = win_findbuf(bufnr(s:scratch_buffer_name)) - if !empty(l:chat_win_ids) - " reuse chat in active window or tab - call win_gotoid(l:chat_win_ids[0]) - else - " allow .aichat files windows to be switched to, preferably on same tab - let buffer_list_tab = tabpagebuflist(tabpagenr()) - let buffer_list_tab = filter(buffer_list_tab, 'getbufvar(v:val, "&filetype") ==# "aichat"') - - if len(buffer_list_tab) > 0 - call win_gotoid(win_findbuf(buffer_list_tab[0])[0]) - else - let buffer_list = [] - for i in range(tabpagenr('$')) - call extend(buffer_list, tabpagebuflist(i + 1)) - endfor - let buffer_list = filter(buffer_list, 'getbufvar(v:val, "&filetype") ==# "aichat"') - - if len(buffer_list) > 0 - call win_gotoid(win_findbuf(buffer_list[0])[0]) - else - " open new chat window - let l:open_conf = l:config['ui']['open_chat_command'] - call s:OpenChatWindow(l:open_conf) - endif - endif - endif - endif + call s:ReuseOrCreateChatWindow(l:config) let l:prompt = "" if a:0 > 0 || a:uses_range |