fix: session restore for nerdtree buffers. (#1405)

This commit is contained in:
Ali Rezvani
2024-02-07 15:07:25 +03:30
committed by GitHub
parent bc606c43e2
commit 60b5e602e9
3 changed files with 51 additions and 7 deletions

View File

@@ -234,6 +234,38 @@ function! nerdtree#pathEquals(lhs, rhs) abort
endif
endfunction
"FUNCTION: nerdtree#onBufLeave() {{{2
" used for handling the nerdtree BufLeave/WinLeave events.
function! nerdtree#onBufLeave() abort
" detect whether we are in the middle of sourcing a session.
" if it is a buffer from the sourced session we need to restore it.
if exists('g:SessionLoad') && !exists('b:NERDTree')
let bname = bufname('%')
" is the buffer for a tab tree?
if bname =~# '^' . g:NERDTreeCreator.BufNamePrefix() . 'tab_\d\+$'
" rename loaded buffer and mark it as trash to prevent this event
" getting fired again
exec 'file TRASH_' . bname
" delete the trash buffer
exec 'bwipeout!'
" rescue the tab tree at the current working directory
call g:NERDTreeCreator.CreateTabTree(getcwd())
" is the buffer for a window tree?
elseif bname =~# '^' . g:NERDTreeCreator.BufNamePrefix(). 'win_\d\+$'
" rescue the window tree at the current working directory
call g:NERDTreeCreator.CreateWindowTree(getcwd())
else " unknown buffer type
" rename buffer to mark it as broken.
exec 'file BROKEN_' . bname
call nerdtree#echoError('Failed to restore "' . bname . '" from session. Is this session created with an older version of NERDTree?')
endif
else
if g:NERDTree.IsOpen()
call b:NERDTree.ui.saveScreenState()
endif
endif
endfunction
" SECTION: View Functions {{{1
"============================================================