diff options
| author | Martin Bielik <martin.bielik@instea.sk> | 2024-07-24 22:41:34 +0200 |
|---|---|---|
| committer | Martin Bielik <martin.bielik@instea.sk> | 2024-07-24 22:41:34 +0200 |
| commit | 4e0e82f75beaa31b06b08153a5243cbfaa1fbd8b (patch) | |
| tree | 3e4eab60c30ead46d16e284dd0528aefecbbd511 /autoload/vim_ai.vim | |
| parent | 6356c7457f08ce52f1d89b6728d34eeda3b704a5 (diff) | |
| download | vim-ai-4e0e82f75beaa31b06b08153a5243cbfaa1fbd8b.tar.gz | |
switch to last created buffer in keep open mode
Diffstat (limited to '')
| -rw-r--r-- | autoload/vim_ai.vim | 20 |
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 |