summaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
authorMartin Bielik <martin.bielik@instea.sk>2024-07-24 22:41:34 +0200
committerMartin Bielik <martin.bielik@instea.sk>2024-07-24 22:41:34 +0200
commit4e0e82f75beaa31b06b08153a5243cbfaa1fbd8b (patch)
tree3e4eab60c30ead46d16e284dd0528aefecbbd511 /autoload
parent6356c7457f08ce52f1d89b6728d34eeda3b704a5 (diff)
downloadvim-ai-4e0e82f75beaa31b06b08153a5243cbfaa1fbd8b.tar.gz
switch to last created buffer in keep open mode
Diffstat (limited to 'autoload')
-rw-r--r--autoload/vim_ai.vim20
1 files changed, 18 insertions, 2 deletions
diff --git a/autoload/vim_ai.vim b/autoload/vim_ai.vim
index a9a3431..94a5b3f 100644
--- a/autoload/vim_ai.vim
+++ b/autoload/vim_ai.vim
@@ -15,6 +15,21 @@ let s:last_config = {}
let s:scratch_buffer_name = ">>> AI chat"
+function! s:StartsWith(longer, shorter) abort
+ return a:longer[0:len(a:shorter)-1] ==# a:shorter
+endfunction
+
+function! s:GetLastScratchBufferName()
+ let l:all_buffer_names = map(map(filter(copy(getbufinfo()), 'v:val.listed'), 'v:val.bufnr'), 'bufname(v:val)')
+ let l:buffer_name = -1
+ for l:name in l:all_buffer_names
+ if s:StartsWith(l:name, s:scratch_buffer_name)
+ let l:buffer_name = l:name
+ endif
+ endfor
+ return l:buffer_name
+endfunction
+
" Configures ai-chat scratch window.
" - scratch_buffer_keep_open = 0
" - opens new ai-chat every time
@@ -23,9 +38,10 @@ let s:scratch_buffer_name = ">>> AI chat"
" - keeps the buffer in the buffer list
function! vim_ai#MakeScratchWindow(force_new) abort
let l:keep_open = g:vim_ai_chat['ui']['scratch_buffer_keep_open']
- if l:keep_open && bufexists(s:scratch_buffer_name) && !a:force_new
+ let l:last_scratch_buffer_name = s:GetLastScratchBufferName()
+ if l:keep_open && bufexists(l:last_scratch_buffer_name) && !a:force_new
" reuse chat buffer
- execute "buffer " . s:scratch_buffer_name
+ execute "buffer " . l:last_scratch_buffer_name
return
endif
setlocal buftype=nofile