summaryrefslogtreecommitdiff
path: root/autoload/vim_ai.vim
diff options
context:
space:
mode:
Diffstat (limited to 'autoload/vim_ai.vim')
-rw-r--r--autoload/vim_ai.vim27
1 files changed, 22 insertions, 5 deletions
diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim
index a9bac80..3be3caf 100644
--- a/autoload/vim_ai.vim
+++ b/autoload/vim_ai.vim
@@ -207,13 +207,30 @@ function! vim_ai#AIChatRun(uses_range, config, ...) range
if &filetype != 'aichat'
let l:chat_win_ids = win_findbuf(bufnr(s:scratch_buffer_name))
if !empty(l:chat_win_ids)
- " TODO: look for first active chat buffer. If .aichat file is used,
- " then reuse chat in active window
+ " reuse chat in active window or tab
call win_gotoid(l:chat_win_ids[0])
else
- " open new chat window
- let l:open_conf = l:config['ui']['open_chat_command']
- call s:OpenChatWindow(l:open_conf)
+ " 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