Version 4.0

Fixes:
Fix the problems in using the taglist plugin with Vim7 tabs. When
Tlist_File_Fold_Auto_Close is set, close the tag fold when leaving a
buffer.  When jumping to a selected tag, if the file is opened in more
than one window, use the previous window from which the user entered
the taglist window.
New features:
Support for displaying the tag prototype as a tooltip.  Support for
specifying additional commands after the taglist commands using the
bar separator.
This commit is contained in:
Yegappan Lakshmanan 2006-09-06 00:00:00 +00:00 committed by Able Scraper
parent fb0331463a
commit 8520cb9123
2 changed files with 155 additions and 52 deletions

View File

@ -2,7 +2,7 @@
Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
For Vim version 6.0 and above
Last change: 2006 April 12
Last change: 2006 September 6
1. Overview |taglist-intro|
2. Taglist on the internet |taglist-internet|
@ -82,16 +82,16 @@ systems).
The taglist plugin will work with Vim version 6.0 and above.
The taglist plugin relies on the exuberant ctags utility to dynamically
generate the tag listing. You can download the exuberant ctags utility from
generate the tag listing. The exuberant ctags utility must be installed in
your system to use this plugin. You should use exuberant ctags version 5.0 and
above. The exuberant ctags utility is shipped with most of the Linux
distributions. You can download the exuberant ctags utility from
>
http://ctags.sourceforge.net
<
The exuberant ctags utility must be installed in your system to use this
plugin. You should use exuberant ctags version 5.0 and above. This plugin
doesn't use or create a tags file and there is no need to create a tags file
to use this plugin. The taglist plugin will not work with the GNU ctags or the
Unix ctags utility. The exuberant ctags utility is shipped with most of the
Linux distributions.
The taglist plugin doesn't use or create a tags file and there is no need to
create a tags file to use this plugin. The taglist plugin will not work with
the GNU ctags or the Unix ctags utility.
This plugin relies on the Vim "filetype" detection mechanism to determine the
type of the current file. You have to turn on the Vim filetype detection by
@ -124,9 +124,10 @@ Vim without the system() function for security reasons.
directory, start Vim and run the ":helptags ." command to process the
taglist help file. Without this step, you cannot jump to the taglist help
topics.
3. If the exuberant ctags utility is not present in your PATH, then set the
'Tlist_Ctags_Cmd' variable to point to the location of the exuberant ctags
utility (not to the directory) in the .vimrc file.
3. If the exuberant ctags utility is not present in one of the directories in
the PATH environment variable, then set the 'Tlist_Ctags_Cmd' variable to
point to the location of the exuberant ctags utility (not to the directory)
in the .vimrc file.
4. If you are running a terminal/console version of Vim and the terminal
doesn't support changing the window width then set the
'Tlist_Inc_Winwidth' variable to 0 in the .vimrc file.
@ -135,10 +136,46 @@ Vim without the system() function for security reasons.
window. You can use the ":help taglist" command to get more information
about using the taglist plugin.
To uninstall the taglist plugin, remove the plugin/taglist.vim and
doc/taglist.txt files.
==============================================================================
*taglist-using*
5. Usage~
The taglist plugin can be used in several different ways.
1. You can open the taglist window and keep it open. On opening the taglist
window, the tags defined in all the files in the Vim buffer list will be
displayed in the taglist window. As you edit files, the tags defined in
them will be added to the taglist window. You can select a tag from the
taglist window and jump to it. The current tag will be highlighted in the
taglist window. You can close the taglist window when you no longer need
the window.
2. You can configure the taglist plugin to process the tags defined in all the
edited files always. In this configuration, even if the taglist window is
closed and the taglist menu is not displayed, the taglist plugin will
processes the tags defined in newly edited files. You can then open the
taglist window only when you need to select a tag and then automatically
close the taglist window after selecting the tag.
3. You can configure the taglist plugin to display only the tags defined in
the current file in the taglist window. By default, the taglist plugin
displays the tags defined in all the files in the Vim buffer list. As you
switch between files, the taglist window will be refreshed to display the
tags defined only in the current file.
4. You can use the Tags pull-down and popup menu created by the taglist plugin
to display the tags defined in the current file and select a tag to jump to
it. You can use the menu without opening the taglist window. By default,
the Tags menu is disabled.
5. You can configure the taglist plugin to display the name of the current tag
in the Vim window status line or in the Vim window title bar. For this to
work without the taglist window or menu, you need to configure the taglist
plugin to process the tags defined in a file always.
6. You can save the tags defined in multiple files to a taglist session file
and load it when needed. You can also configure the taglist plugin to not
update the taglist window when editing new files. You can then manually add
files to the taglist window.
Opening the taglist window~
You can open the taglist window using the ":TlistOpen" or the ":TlistToggle"
commands. The ":TlistOpen" command opens the taglist window and jumps to it.
@ -319,6 +356,10 @@ prototype of the current tag. For example,
:TlistShowPrototype
:TlistShowPrototype myfile.c 50
<
In the taglist window, when the mouse is moved over a tag name, the tag
prototype is displayed in a balloon. This works only in GUI versions where
balloon evaluation is supported.
Taglist window contents~
The tag names are grouped by their type (variable, function, class, etc.). For
tags with scope information (like class members, structures inside structures,
@ -726,10 +767,9 @@ Tlist_File_Fold_Auto_Close~
By default, the tags tree displayed in the taglist window for all the files is
opened. You can close/fold the tags tree for the files manually. To
automatically close the tags tree for inactive files, you can set the
Tlist_File_Fold_Auto_Close variable to 1. When this variable is set to 1, if a
Vim buffer is no longer displayed in a Vim window, the corresponding tags tree
in the taglist window will be collapsed/folded. When a buffer is loaded in a
Vim window, the corresponding tags tree will be opened.
Tlist_File_Fold_Auto_Close variable to 1. When this variable is set to 1, the
tags tree for the current buffer is automatically opened and for all the
buffers is closed.
>
let Tlist_File_Fold_Auto_Close = 1
<

View File

@ -1,7 +1,7 @@
" File: taglist.vim
" Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
" Version: 4.0 Beta 4
" Last Modified: April 12, 2006
" Version: 4.0
" Last Modified: September 6, 2006
"
" The "Tag List" plugin is a source code browser plugin for Vim and provides
" an overview of the structure of the programming language files and allows
@ -252,20 +252,20 @@ if !exists('loaded_taglist')
autocmd BufFilePost __Tag_List__ call s:Tlist_Vim_Session_Load()
" Define the user commands to manage the taglist window
command! -nargs=0 TlistToggle call s:Tlist_Window_Toggle()
command! -nargs=0 TlistOpen call s:Tlist_Window_Open()
command! -nargs=0 -bar TlistToggle call s:Tlist_Window_Toggle()
command! -nargs=0 -bar TlistOpen call s:Tlist_Window_Open()
" For backwards compatiblity define the Tlist command
command! -nargs=0 Tlist TlistToggle
command! -nargs=0 -bar Tlist TlistToggle
command! -nargs=+ -complete=file TlistAddFiles
\ call s:Tlist_Add_Files(<f-args>)
command! -nargs=+ -complete=dir TlistAddFilesRecursive
\ call s:Tlist_Add_Files_Recursive(<f-args>)
command! -nargs=0 TlistClose call s:Tlist_Window_Close()
command! -nargs=0 TlistUpdate call s:Tlist_Update_Current_File()
command! -nargs=0 TlistHighlightTag call s:Tlist_Window_Highlight_Tag(
command! -nargs=0 -bar TlistClose call s:Tlist_Window_Close()
command! -nargs=0 -bar TlistUpdate call s:Tlist_Update_Current_File()
command! -nargs=0 -bar TlistHighlightTag call s:Tlist_Window_Highlight_Tag(
\ fnamemodify(bufname('%'), ':p'), line('.'), 2, 1)
" For backwards compatiblity define the TlistSync command
command! -nargs=0 TlistSync TlistHighlightTag
command! -nargs=0 -bar TlistSync TlistHighlightTag
command! -nargs=* -complete=buffer TlistShowPrototype
\ echo Tlist_Get_Tag_Prototype_By_Line(<f-args>)
command! -nargs=* -complete=buffer TlistShowTag
@ -274,14 +274,14 @@ if !exists('loaded_taglist')
\ call s:Tlist_Session_Load(<q-args>)
command! -nargs=* -complete=file TlistSessionSave
\ call s:Tlist_Session_Save(<q-args>)
command! TlistLock let Tlist_Auto_Update=0
command! TlistUnlock let Tlist_Auto_Update=1
command! TlistLock -bar let Tlist_Auto_Update=0
command! TlistUnlock -bar let Tlist_Auto_Update=1
" Commands for enabling/disabling debug and to display debug messages
command! -nargs=? -complete=file TlistDebug
command! -nargs=? -complete=file -bar TlistDebug
\ call s:Tlist_Debug_Enable(<q-args>)
command! -nargs=0 TlistUndebug call s:Tlist_Debug_Disable()
command! -nargs=0 TlistMessages echo s:tlist_msg
command! -nargs=0 -bar TlistUndebug call s:Tlist_Debug_Disable()
command! -nargs=0 -bar TlistMessages echo s:tlist_msg
" Define autocommands to autoload the taglist plugin when needed.
@ -468,7 +468,7 @@ let s:tlist_def_yacc_settings = 'yacc;l:label'
"------------------- end of language specific options --------------------
" Vim window size is changed by the taglist plugin or not
let s:tlist_winsize_chgd = 0
let s:tlist_winsize_chgd = -1
" Taglist window is maximized or not
let s:tlist_win_maximized = 0
" Name of files in the taglist
@ -1244,20 +1244,22 @@ function! s:Tlist_Window_Create()
" Horizontal window height
let win_size = g:Tlist_WinHeight
else
" Open a vertically split window. Increase the window size, if
" needed, to accomodate the new window
if g:Tlist_Inc_Winwidth &&
\ &columns < (80 + g:Tlist_WinWidth)
" Save the original window position
let s:tlist_pre_winx = getwinposx()
let s:tlist_pre_winy = getwinposy()
if s:tlist_winsize_chgd == -1
" Open a vertically split window. Increase the window size, if
" needed, to accomodate the new window
if g:Tlist_Inc_Winwidth &&
\ &columns < (80 + g:Tlist_WinWidth)
" Save the original window position
let s:tlist_pre_winx = getwinposx()
let s:tlist_pre_winy = getwinposy()
" one extra column is needed to include the vertical split
let &columns= &columns + g:Tlist_WinWidth + 1
" one extra column is needed to include the vertical split
let &columns= &columns + g:Tlist_WinWidth + 1
let s:tlist_winsize_chgd = 1
else
let s:tlist_winsize_chgd = 0
let s:tlist_winsize_chgd = 1
else
let s:tlist_winsize_chgd = 0
endif
endif
if g:Tlist_Use_Right_Window
@ -1315,6 +1317,26 @@ function! s:Tlist_Window_Zoom()
endif
endfunction
" Tlist_Ballon_Expr
" When the mouse cursor is over a tag in the taglist window, display the
" tag prototype (balloon)
function! Tlist_Ballon_Expr()
" Get the file index
let fidx = s:Tlist_Window_Get_File_Index_By_Linenum(v:beval_lnum)
if fidx == -1
return ''
endif
" Get the tag output line for the current tag
let tidx = s:Tlist_Window_Get_Tag_Index(fidx, v:beval_lnum)
if tidx == 0
return ''
endif
" Get the tag search pattern and display it
return s:Tlist_Get_Tag_Prototype(fidx, tidx)
endfunction
" Tlist_Window_Check_Width
" Check the width of the taglist window. For horizontally split windows, the
" 'winfixheight' option is used to fix the height of the window. For
@ -1341,6 +1363,32 @@ function! s:Tlist_Window_Check_Width()
endif
endfunction
" Tlist_Window_Exit_Only_Window
" If the 'Tlist_Exit_OnlyWindow' option is set, then exit Vim if only the
" taglist window is present.
function! s:Tlist_Window_Exit_Only_Window()
" Before quitting Vim, delete the taglist buffer so that
" the '0 mark is correctly set to the previous buffer.
if v:version < 700
if winbufnr(2) == -1
bdelete
quit
endif
else
if winbufnr(2) == -1
if tabpagenr('$') == 1
" Only one tag page is present
bdelete
quit
else
" More than one tab page is present. Close only the current
" tab page
close
endif
endif
endif
endfunction
" Tlist_Window_Init
" Set the default options for the taglist window
function! s:Tlist_Window_Init()
@ -1439,6 +1487,12 @@ function! s:Tlist_Window_Init()
set winfixwidth
endif
" Setup balloon evaluation to display tag prototype
if v:version >= 700 && has('balloon_eval')
setlocal balloonexpr=Tlist_Ballon_Expr()
set ballooneval
endif
" Setup the cpoptions properly for the maps to work
let old_cpoptions = &cpoptions
set cpoptions&vim
@ -1531,17 +1585,15 @@ function! s:Tlist_Window_Init()
" Adjust the Vim window width when taglist window is closed
autocmd BufUnload __Tag_List__ call s:Tlist_Post_Close_Cleanup()
" Close the fold for this buffer when it's not visible in any window
" Close the fold for this buffer when leaving the buffer
if g:Tlist_File_Fold_Auto_Close
autocmd BufWinLeave * silent
autocmd BufWinLeave,BufLeave * silent
\ call s:Tlist_Window_Close_File_Fold(expand('<afile>:p'))
endif
" Exit Vim itself if only the taglist window is present (optional)
if g:Tlist_Exit_OnlyWindow
" Before quitting Vim, delete the taglist buffer so that
" the '0 mark is correctly set to the previous buffer.
autocmd BufEnter __Tag_List__ nested if winbufnr(2) == -1 |
\ bdelete | quit | endif
autocmd BufEnter __Tag_List__ nested
\ call s:Tlist_Window_Exit_Only_Window()
endif
if s:tlist_app_name != "winmanager" &&
\ !g:Tlist_Process_File_Always &&
@ -1670,7 +1722,7 @@ function! s:Tlist_Post_Close_Cleanup()
if s:tlist_app_name != "winmanager"
if g:Tlist_Use_Horiz_Window || g:Tlist_Inc_Winwidth == 0 ||
\ s:tlist_winsize_chgd == 0 ||
\ s:tlist_winsize_chgd != 1 ||
\ &columns < (80 + g:Tlist_WinWidth)
" No need to adjust window width if using horizontally split taglist
" window or if columns is less than 101 or if the user chose not to
@ -1689,6 +1741,8 @@ function! s:Tlist_Post_Close_Cleanup()
endif
endif
let s:tlist_winsize_chgd = -1
" Reset taglist state variables
if s:tlist_app_name == "winmanager"
let s:tlist_app_name = "none"
@ -3006,6 +3060,15 @@ function! s:Tlist_Window_Open_File(win_ctrl, filename, tagpat)
" Mark the window, so that it can be reused.
let w:tlist_file_window = "yes"
else
if v:version >= 700
" If the file is opened in more than one window, then check
" whether the last accessed window has the selected file.
" If it does, then use that window.
let lastwin_bufnum = winbufnr(winnr('#'))
if bufnr(a:filename) == lastwin_bufnum
let winnum = winnr('#')
endif
endif
exe winnum . 'wincmd w'
" If the user asked to jump to the tag in a new window, then split the
@ -3824,21 +3887,21 @@ endfunction
" Open the window only when files present in any of the Vim windows support
" tags.
function! s:Tlist_Window_Check_Auto_Open()
let open = 0
let open_window = 0
let i = 1
let buf_num = winbufnr(i)
while buf_num != -1
let filename = fnamemodify(bufname(buf_num), ':p')
if !s:Tlist_Skip_File(filename, getbufvar(buf_num, '&filetype'))
let open = 1
let open_window = 1
break
endif
let i = i + 1
let buf_num = winbufnr(i)
endwhile
if open
if open_window
call s:Tlist_Window_Toggle()
endif
endfunction