1
0
mirror of https://github.com/gryf/tagbar.git synced 2025-12-17 11:30:28 +01:00

Give each tab its own tagbar buffer

This commit is contained in:
Martin Vuille
2016-09-24 17:48:52 -04:00
parent 7e35a40715
commit 7c56066685

View File

@@ -65,6 +65,8 @@ let s:short_help = 1
let s:nearby_disabled = 0
let s:paused = 0
let s:pwin_by_tagbar = 0
let s:vim_quitting = 0
let s:buffer_seqno = 0
let s:window_expanded = 0
let s:expand_bufnr = -1
@@ -943,7 +945,7 @@ function! s:RestoreSession() abort
let curfile = fnamemodify(bufname('%'), ':p')
let tagbarwinnr = bufwinnr('__Tagbar__')
let tagbarwinnr = bufwinnr(s:TagbarBufName())
if tagbarwinnr == -1
" Tagbar wasn't open in the saved session, nothing to do
return
@@ -1030,16 +1032,16 @@ function! s:CreateAutocommands() abort
augroup TagbarAutoCmds
autocmd!
autocmd CursorHold __Tagbar__ call s:ShowPrototype(1)
autocmd WinEnter __Tagbar__ call s:SetStatusLine()
autocmd WinLeave __Tagbar__ call s:SetStatusLine()
autocmd CursorHold __Tagbar__.* call s:ShowPrototype(1)
autocmd WinEnter __Tagbar__.* call s:SetStatusLine()
autocmd WinLeave __Tagbar__.* call s:SetStatusLine()
if g:tagbar_autopreview
autocmd CursorMoved __Tagbar__ nested call s:ShowInPreviewWin()
autocmd CursorMoved __Tagbar__.* nested call s:ShowInPreviewWin()
endif
autocmd WinEnter * nested call s:QuitIfOnlyWindow()
autocmd WinEnter * if bufwinnr('__Tagbar__') == -1 |
autocmd WinEnter * if bufwinnr(s:TagbarBufName()) == -1 |
\ call s:ShrinkIfExpanded() |
\ endif
@@ -1766,7 +1768,7 @@ endfunction
function! s:ToggleWindow() abort
call s:debug('ToggleWindow called')
let tagbarwinnr = bufwinnr("__Tagbar__")
let tagbarwinnr = bufwinnr(s:TagbarBufName())
if tagbarwinnr != -1
call s:CloseWindow()
return
@@ -1790,7 +1792,7 @@ function! s:OpenWindow(flags) abort
" If the tagbar window is already open check jump flag
" Also set the autoclose flag if requested
let tagbarwinnr = bufwinnr('__Tagbar__')
let tagbarwinnr = bufwinnr(s:TagbarBufName())
if tagbarwinnr != -1
if winnr() != tagbarwinnr && jump
call s:goto_win(tagbarwinnr)
@@ -1827,7 +1829,7 @@ function! s:OpenWindow(flags) abort
let openpos = g:tagbar_left ? 'leftabove ' : 'rightbelow '
let width = g:tagbar_vertical
endif
exe 'silent keepalt ' . openpos . width . 'split ' . '__Tagbar__'
exe 'silent keepalt ' . openpos . width . 'split ' . s:TagbarBufName()
unlet s:window_opening
call s:InitWindow(autoclose)
@@ -1923,7 +1925,7 @@ endfunction
function! s:CloseWindow() abort
call s:debug('CloseWindow called')
let tagbarwinnr = bufwinnr('__Tagbar__')
let tagbarwinnr = bufwinnr(s:TagbarBufName())
if tagbarwinnr == -1
return
endif
@@ -1931,7 +1933,7 @@ function! s:CloseWindow() abort
" Close the preview window if it was opened by us
if s:pwin_by_tagbar
pclose
let tagbarwinnr = bufwinnr('__Tagbar__')
let tagbarwinnr = bufwinnr(s:TagbarBufName())
endif
if winnr() == tagbarwinnr
@@ -2039,7 +2041,7 @@ endfunction
" g:tagbar_left is set. This should work around it by jumping to the window of
" the current file after startup.
function! s:CorrectFocusOnStartup() abort
if bufwinnr('__Tagbar__') != -1 && !g:tagbar_autofocus && !s:last_autofocus
if bufwinnr(s:TagbarBufName()) != -1 && !g:tagbar_autofocus && !s:last_autofocus
let curfile = s:state.getCurrent(1)
if !empty(curfile) && curfile.fpath != fnamemodify(bufname('%'), ':p')
let winnr = bufwinnr(curfile.fpath)
@@ -2263,7 +2265,7 @@ function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort
call s:debug(ctags_output)
" Only display an error message if the Tagbar window is open and we
" haven't seen the error before.
if bufwinnr("__Tagbar__") != -1 &&
if bufwinnr(s:TagbarBufName()) != -1 &&
\ (!s:known_files.has(a:realfname) ||
\ !empty(s:known_files.get(a:realfname)))
call s:warning('Tagbar: Could not execute ctags for ' . a:realfname . '!')
@@ -2687,7 +2689,7 @@ function! s:RenderContent(...) abort
return
endif
let tagbarwinnr = bufwinnr('__Tagbar__')
let tagbarwinnr = bufwinnr(s:TagbarBufName())
if &filetype == 'tagbar'
let in_tagbar = 1
@@ -3001,7 +3003,7 @@ function! s:HighlightTag(openfolds, ...) abort
let s:last_highlight_tline = tagline
endif
let tagbarwinnr = bufwinnr('__Tagbar__')
let tagbarwinnr = bufwinnr(s:TagbarBufName())
if tagbarwinnr == -1
return
endif
@@ -3520,7 +3522,7 @@ function! s:AutoUpdate(fname, force) abort
" Display the tagbar content if the tags have been updated or a different
" file is being displayed
if bufwinnr('__Tagbar__') != -1 && !s:paused &&
if bufwinnr(s:TagbarBufName()) != -1 && !s:paused &&
\ (s:new_window || updated ||
\ (!empty(s:state.getCurrent(0)) &&
\ a:fname != s:state.getCurrent(0).fpath))
@@ -3790,7 +3792,7 @@ function! s:GetTagInfo(linenr, ignorepseudo) abort
endif
" Don't do anything in empty and comment lines
let curline = getbufline(bufnr('__Tagbar__'), a:linenr)[0]
let curline = getbufline(bufnr(s:TagbarBufName()), a:linenr)[0]
if curline =~ '^\s*$' || curline[0] == '"'
return {}
endif
@@ -3969,7 +3971,7 @@ endfunction
" s:SetStatusLine() {{{2
function! s:SetStatusLine()
" Make sure we're actually in the Tagbar window
let tagbarwinnr = bufwinnr('__Tagbar__')
let tagbarwinnr = bufwinnr(s:TagbarBufName())
if tagbarwinnr == -1
return
endif
@@ -4014,7 +4016,7 @@ endfunction
" s:QuitIfOnlyWindow() {{{2
function! s:QuitIfOnlyWindow() abort
let tagbarwinnr = bufwinnr('__Tagbar__')
let tagbarwinnr = bufwinnr(s:TagbarBufName())
if tagbarwinnr == -1
return
endif
@@ -4082,6 +4084,15 @@ function! s:NextNormalWindow() abort
return -1
endfunction
function! s:TagbarBufName() abort
if !exists('t:tagbar_buf_name')
let s:buffer_seqno += 1
let t:tagbar_buf_name = '__Tagbar__.' . s:buffer_seqno
endif
return t:tagbar_buf_name
endfunction
" s:goto_win() {{{2
function! s:goto_win(winnr, ...) abort
let cmd = type(a:winnr) == type(0) ? a:winnr . 'wincmd w'
@@ -4100,7 +4111,7 @@ endfunction
" s:goto_tagbar() {{{2
function! s:goto_tagbar(...) abort
let noauto = a:0 > 0 ? a:1 : 0
call s:goto_win(bufwinnr('__Tagbar__'), noauto)
call s:goto_win(bufwinnr(s:TagbarBufName()), noauto)
endfunction
" s:mark_window() {{{2
@@ -4210,7 +4221,7 @@ function! tagbar#SetFoldLevel(level, force) abort
endfunction
function! tagbar#highlighttag(openfolds, force) abort
let tagbarwinnr = bufwinnr('__Tagbar__')
let tagbarwinnr = bufwinnr(s:TagbarBufName())
if tagbarwinnr == -1
echohl WarningMsg
echomsg "Warning: Can't highlight tag, Tagbar window not open"