diff options
| author | Martin Bielik <mx.bielik@gmail.com> | 2024-03-24 12:35:59 +0100 |
|---|---|---|
| committer | Martin Bielik <mx.bielik@gmail.com> | 2024-03-24 12:35:59 +0100 |
| commit | 6b9a0ef3771a4c873021e5cfa59a98be4030d0ee (patch) | |
| tree | ef85193e45ecf553e47f8ea0dda2a691a9c1393f /autoload/vim_ai.vim | |
| parent | f19d69e5cd6129eab610470f1c6469f87c36a093 (diff) | |
| download | vim-ai-6b9a0ef3771a4c873021e5cfa59a98be4030d0ee.tar.gz | |
refactoring: extracted to helper function, using guards
Diffstat (limited to '')
| -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 |