diff --git a/autoload/tagbar.vim b/autoload/tagbar.vim index 01ffc66..9aab69b 100644 --- a/autoload/tagbar.vim +++ b/autoload/tagbar.vim @@ -1045,6 +1045,7 @@ function! s:CloseWindow() abort " Other windows are open, only close the tagbar one let curfile = tagbar#state#get_current_file(0) + let s:is_maximized = 0 close @@ -1326,9 +1327,9 @@ function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort " universal-ctags deprecated this argument name if s:ctags_is_uctags - let ctags_args += [ '--extras=' ] + let ctags_args += [ '--extras=+F' ] else - let ctags_args += [ '--extra=' ] + let ctags_args += [ '--extra=', '--file-scope=yes' ] endif let ctags_args = ctags_args + [ @@ -1337,7 +1338,6 @@ function! s:ExecuteCtagsOnFile(fname, realfname, typeinfo) abort \ '--format=2', \ '--excmd=pattern', \ '--fields=nksSaf', - \ '--file-scope=yes', \ '--sort=no', \ '--append=no' \ ] @@ -3526,6 +3526,32 @@ endfunction " Autoload functions {{{1 " Wrappers {{{2 +function! tagbar#GetTagNearLine(lnum, ...) abort + if a:0 > 0 + let fmt = a:1 + let longsig = a:2 =~# 's' + let fullpath = a:2 =~# 'f' + let prototype = a:2 =~# 'p' + else + let fmt = '%s' + let longsig = 0 + let fullpath = 0 + let prototype = 0 + endif + + let taginfo = s:GetNearbyTag(0, 1, a:lnum) + + if empty(taginfo) + return '' + endif + + if prototype + return taginfo.getPrototype(1) + else + return printf(fmt, taginfo.str(longsig, fullpath)) + endif +endfunction + function! tagbar#ToggleWindow(...) abort let flags = a:0 > 0 ? a:1 : '' call s:ToggleWindow(flags) @@ -3730,7 +3756,7 @@ function! tagbar#currenttagtype(fmt, default) abort let typeinfo = tag.fileinfo.typeinfo let plural = typeinfo.kinds[typeinfo.kinddict[kind]].long - if has_key(plural) + if has_key(s:singular_types, plural) let singular = s:singular_types[plural] else let singular = plural diff --git a/doc/tagbar.txt b/doc/tagbar.txt index d8b009a..3695ed3 100644 --- a/doc/tagbar.txt +++ b/doc/tagbar.txt @@ -320,6 +320,24 @@ FUNCTIONS *tagbar-functions* update tag information. This should be called after you have used |tagbar#currenttag| manually. +*tagbar#GetTagNearLine()* + Get the current tag near the specified line number (lnum). Optionally + takes a fmt and signature specification using the same method as the + |tagbar#currenttag()| function. Defaults to GetTagNearLine(lnum, '%s', ''). + + This could be used in a custom foldtext function to show the current tag + the fold current fold is located in. + + Example: + > + set foldtext=MyFoldFunc() + function! MyFoldFunc() + let tag = tagbar#GetTagNearLine(v:foldend, '%s', 'p') + let lines = v:foldend - v:foldstart + 1 + return tag . ' --- ' . lines . ' lines' + endfunction +< + ------------------------------------------------------------------------------ KEY MAPPINGS *tagbar-keys*