dblume commited on 2024-04-04 21:44:41
Showing 4 changed files, with 201 additions and 54 deletions.
| ... | ... |
@@ -2,7 +2,7 @@ |
| 2 | 2 |
|
| 3 | 3 |
Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com) |
| 4 | 4 |
For Vim version 6.0 and above |
| 5 |
-Last change: 2007 May 24 |
|
| 5 |
+Last change: 2013 Feburary 26 |
|
| 6 | 6 |
|
| 7 | 7 |
1. Overview |taglist-intro| |
| 8 | 8 |
2. Taglist on the internet |taglist-internet| |
| ... | ... |
@@ -759,6 +759,12 @@ loaded. Examples: |
| 759 | 759 |
> |
| 760 | 760 |
let Tlist_Ctags_Cmd = 'd:\tools\ctags.exe' |
| 761 | 761 |
let Tlist_Ctags_Cmd = '/usr/local/bin/ctags' |
| 762 |
+< |
|
| 763 |
+On Microsoft Windows, if ctags.exe is installed in a directory with space |
|
| 764 |
+characters in the name (e.g. C:\Program Files\ctags\ctags.exe), then you need |
|
| 765 |
+to set the Tlist_Ctags_Cmd variable like this: |
|
| 766 |
+> |
|
| 767 |
+ let Tlist_Ctags_Cmd = '"C:\Program Files\ctags\ctags.exe"' |
|
| 762 | 768 |
< |
| 763 | 769 |
*'Tlist_Display_Prototype'* |
| 764 | 770 |
Tlist_Display_Prototype~ |
| ... | ... |
@@ -841,6 +847,7 @@ If your terminal doesn't support changing the window width from Vim (older |
| 841 | 847 |
version of xterm running in a Unix system) or if you see any weird problems in |
| 842 | 848 |
the screen due to the change in the window width or if you prefer not to |
| 843 | 849 |
adjust the window width then set the 'Tlist_Inc_Winwidth' variable to zero. |
| 850 |
+If you are using GNU Screen, you may want to set this variable to zero. |
|
| 844 | 851 |
CAUTION: If you are using the MS-Windows version of Vim in a MS-DOS command |
| 845 | 852 |
window then you must set this variable to zero, otherwise the system may hang |
| 846 | 853 |
due to a Vim limitation (explained in :help win32-problems) |
| ... | ... |
@@ -1144,6 +1151,7 @@ The taglist plugin provides several global functions that can be used from |
| 1144 | 1151 |
other Vim plugins to interact with the taglist plugin. These functions are |
| 1145 | 1152 |
described below. |
| 1146 | 1153 |
|
| 1154 |
+|Tlist_Get_Filenames()| Return filenames in the taglist |
|
| 1147 | 1155 |
|Tlist_Update_File_Tags()| Update the tags for the specified file |
| 1148 | 1156 |
|Tlist_Get_Tag_Prototype_By_Line()| Return the prototype of the tag at or |
| 1149 | 1157 |
before the specified line number in the |
| ... | ... |
@@ -1154,6 +1162,12 @@ described below. |
| 1154 | 1162 |
|Tlist_Set_App()| Set the name of the application |
| 1155 | 1163 |
controlling the taglist window. |
| 1156 | 1164 |
|
| 1165 |
+ *Tlist_Get_Filenames()* |
|
| 1166 |
+Tlist_Get_Filenames() |
|
| 1167 |
+ Returns a list of filenames in the taglist. Each filename is |
|
| 1168 |
+ separated by a newline (\n) character. If the taglist is empty |
|
| 1169 |
+ an empty string is returned. |
|
| 1170 |
+ |
|
| 1157 | 1171 |
*Tlist_Update_File_Tags()* |
| 1158 | 1172 |
Tlist_Update_File_Tags({filename}, {filetype})
|
| 1159 | 1173 |
Update the tags for the file {filename}. The second argument
|
| ... | ... |
@@ -1,8 +1,8 @@ |
| 1 | 1 |
" File: taglist.vim |
| 2 | 2 |
" Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com) |
| 3 |
-" Version: 4.5 |
|
| 4 |
-" Last Modified: September 21, 2007 |
|
| 5 |
-" Copyright: Copyright (C) 2002-2007 Yegappan Lakshmanan |
|
| 3 |
+" Version: 4.6 |
|
| 4 |
+" Last Modified: Feb 26, 2013 |
|
| 5 |
+" Copyright: Copyright (C) 2002-2013 Yegappan Lakshmanan |
|
| 6 | 6 |
" Permission is hereby granted to use and distribute this code, |
| 7 | 7 |
" with or without modifications, provided that this copyright |
| 8 | 8 |
" notice is copied with it. Like anything else that's free, |
| ... | ... |
@@ -57,7 +57,12 @@ |
| 57 | 57 |
" ****************** Do not modify after this line ************************ |
| 58 | 58 |
|
| 59 | 59 |
" Line continuation used here |
| 60 |
+if !exists('s:cpo_save')
|
|
| 61 |
+ " If the taglist plugin is sourced recursively, the 'cpo' setting will be |
|
| 62 |
+ " set to the default value. To avoid this problem, save the cpo setting |
|
| 63 |
+ " only when the plugin is loaded for the first time. |
|
| 60 | 64 |
let s:cpo_save = &cpo |
| 65 |
+endif |
|
| 61 | 66 |
set cpo&vim |
| 62 | 67 |
|
| 63 | 68 |
if !exists('loaded_taglist')
|
| ... | ... |
@@ -329,6 +334,7 @@ endif |
| 329 | 334 |
if !exists('s:tlist_sid')
|
| 330 | 335 |
" Two or more versions of taglist plugin are installed. Don't |
| 331 | 336 |
" load this version of the plugin. |
| 337 |
+ let &cpo = s:cpo_save |
|
| 332 | 338 |
finish |
| 333 | 339 |
endif |
| 334 | 340 |
|
| ... | ... |
@@ -363,18 +369,28 @@ let loaded_taglist = 'available' |
| 363 | 369 |
" tags of this type |
| 364 | 370 |
" |
| 365 | 371 |
|
| 372 |
+" Ant language |
|
| 373 |
+let s:tlist_def_ant_settings = 'ant;p:projects;t:targets' |
|
| 374 |
+ |
|
| 366 | 375 |
" assembly language |
| 367 | 376 |
let s:tlist_def_asm_settings = 'asm;d:define;l:label;m:macro;t:type' |
| 368 | 377 |
|
| 369 | 378 |
" aspperl language |
| 370 |
-let s:tlist_def_aspperl_settings = 'asp;f:function;s:sub;v:variable' |
|
| 379 |
+let s:tlist_def_aspperl_settings = |
|
| 380 |
+ \ 'asp;c:constants;v:variable;f:function;s:subroutine' |
|
| 371 | 381 |
|
| 372 | 382 |
" aspvbs language |
| 373 |
-let s:tlist_def_aspvbs_settings = 'asp;f:function;s:sub;v:variable' |
|
| 383 |
+let s:tlist_def_aspvbs_settings = |
|
| 384 |
+ \ 'asp;c:constants;v:variable;f:function;s:subroutine' |
|
| 374 | 385 |
|
| 375 | 386 |
" awk language |
| 376 | 387 |
let s:tlist_def_awk_settings = 'awk;f:function' |
| 377 | 388 |
|
| 389 |
+" basic language |
|
| 390 |
+let s:tlist_def_basic_settings = |
|
| 391 |
+ \ 'basic;c:constant;l:label;g:enum;v:variable;' . |
|
| 392 |
+ \ 't:type;f:function' |
|
| 393 |
+ |
|
| 378 | 394 |
" beta language |
| 379 | 395 |
let s:tlist_def_beta_settings = 'beta;f:fragment;s:slot;v:pattern' |
| 380 | 396 |
|
| ... | ... |
@@ -394,6 +410,12 @@ let s:tlist_def_cs_settings = 'c#;d:macro;t:typedef;n:namespace;c:class;' . |
| 394 | 410 |
" cobol language |
| 395 | 411 |
let s:tlist_def_cobol_settings = 'cobol;d:data;f:file;g:group;p:paragraph;' . |
| 396 | 412 |
\ 'P:program;s:section' |
| 413 |
+" D programming language |
|
| 414 |
+let s:tlist_def_d_settings = 'c++;n:namespace;v:variable;t:typedef;' . |
|
| 415 |
+ \'c:class;g:enum;s:struct;u:union;f:function' |
|
| 416 |
+ |
|
| 417 |
+" Dosbatch |
|
| 418 |
+let s:tlist_def_dosbatch_settings = 'dosbatch;l:labels;v:variables' |
|
| 397 | 419 |
|
| 398 | 420 |
" eiffel language |
| 399 | 421 |
let s:tlist_def_eiffel_settings = 'eiffel;c:class;f:feature' |
| ... | ... |
@@ -404,20 +426,28 @@ let s:tlist_def_erlang_settings = 'erlang;d:macro;r:record;m:module;f:function' |
| 404 | 426 |
" expect (same as tcl) language |
| 405 | 427 |
let s:tlist_def_expect_settings = 'tcl;c:class;f:method;p:procedure' |
| 406 | 428 |
|
| 429 |
+" flex |
|
| 430 |
+let s:tlist_def_flex_settings = 'flex;v:global;c:classes;p:properties;'. |
|
| 431 |
+ \ 'm:methods;f:functions;x:mxtags' |
|
| 432 |
+ |
|
| 407 | 433 |
" fortran language |
| 408 | 434 |
let s:tlist_def_fortran_settings = 'fortran;p:program;b:block data;' . |
| 409 | 435 |
\ 'c:common;e:entry;i:interface;k:type;l:label;m:module;' . |
| 410 | 436 |
\ 'n:namelist;t:derived;v:variable;f:function;s:subroutine' |
| 411 | 437 |
|
| 438 |
+" GO language |
|
| 439 |
+let s:tlist_def_go_settings = 'go;f:function;p:package;t:struct' |
|
| 440 |
+ |
|
| 412 | 441 |
" HTML language |
| 413 |
-let s:tlist_def_html_settings = 'html;a:anchor;f:javascript function' |
|
| 442 |
+let s:tlist_def_html_settings = 'html;a:anchor;f:function' |
|
| 414 | 443 |
|
| 415 | 444 |
" java language |
| 416 | 445 |
let s:tlist_def_java_settings = 'java;p:package;c:class;i:interface;' . |
| 417 |
- \ 'f:field;m:method' |
|
| 446 |
+ \ 'g:enum;f:field;m:method' |
|
| 418 | 447 |
|
| 419 | 448 |
" javascript language |
| 420 |
-let s:tlist_def_javascript_settings = 'javascript;f:function' |
|
| 449 |
+let s:tlist_def_javascript_settings = |
|
| 450 |
+ \ 'javascript;c:class;m:method;v:global;f:function;p:properties' |
|
| 421 | 451 |
|
| 422 | 452 |
" lisp language |
| 423 | 453 |
let s:tlist_def_lisp_settings = 'lisp;f:function' |
| ... | ... |
@@ -428,6 +458,13 @@ let s:tlist_def_lua_settings = 'lua;f:function' |
| 428 | 458 |
" makefiles |
| 429 | 459 |
let s:tlist_def_make_settings = 'make;m:macro' |
| 430 | 460 |
|
| 461 |
+" Matlab |
|
| 462 |
+let s:tlist_def_matlab_settings = 'matlab;f:function' |
|
| 463 |
+ |
|
| 464 |
+" Ocamal |
|
| 465 |
+let s:tlist_def_ocamal_settings = 'ocamal;M:module;v:global;t:type;'. |
|
| 466 |
+ \ 'c:class;f:function;m:method;C:constructor;e:exception' |
|
| 467 |
+ |
|
| 431 | 468 |
" pascal language |
| 432 | 469 |
let s:tlist_def_pascal_settings = 'pascal;f:function;p:procedure' |
| 433 | 470 |
|
| ... | ... |
@@ -435,11 +472,15 @@ let s:tlist_def_pascal_settings = 'pascal;f:function;p:procedure' |
| 435 | 472 |
let s:tlist_def_perl_settings = 'perl;c:constant;l:label;p:package;s:subroutine' |
| 436 | 473 |
|
| 437 | 474 |
" php language |
| 438 |
-let s:tlist_def_php_settings = 'php;c:class;d:constant;v:variable;f:function' |
|
| 475 |
+let s:tlist_def_php_settings = |
|
| 476 |
+ \ 'php;c:class;i:interface;d:constant;v:variable;f:function' |
|
| 439 | 477 |
|
| 440 | 478 |
" python language |
| 441 | 479 |
let s:tlist_def_python_settings = 'python;c:class;m:member;f:function' |
| 442 | 480 |
|
| 481 |
+" cython language |
|
| 482 |
+let tlist_pyrex_settings='python;c:classe;m:memder;f:function' |
|
| 483 |
+ |
|
| 443 | 484 |
" rexx language |
| 444 | 485 |
let s:tlist_def_rexx_settings = 'rexx;s:subroutine' |
| 445 | 486 |
|
| ... | ... |
@@ -464,15 +505,28 @@ let s:tlist_def_slang_settings = 'slang;n:namespace;f:function' |
| 464 | 505 |
|
| 465 | 506 |
" sml language |
| 466 | 507 |
let s:tlist_def_sml_settings = 'sml;e:exception;c:functor;s:signature;' . |
| 467 |
- \ 'r:structure;t:type;v:value;f:function' |
|
| 508 |
+ \ 'r:structure;t:type;v:value;c:functor;f:function' |
|
| 468 | 509 |
|
| 469 | 510 |
" sql language |
| 470 |
-let s:tlist_def_sql_settings = 'sql;c:cursor;F:field;P:package;r:record;' . |
|
| 471 |
- \ 's:subtype;t:table;T:trigger;v:variable;f:function;p:procedure' |
|
| 511 |
+let s:tlist_def_sql_settings = 'sql;f:functions;' . |
|
| 512 |
+ \ 'P:packages;p:procedures;t:tables;T:triggers;' . |
|
| 513 |
+ \ 'v:variables;e:events;U:publications;R:services;' . |
|
| 514 |
+ \ 'D:domains;x:MLTableScripts;y:MLConnScripts;z:MLProperties;'. |
|
| 515 |
+ \ 'i:indexes;c:cursors;V:views;'. |
|
| 516 |
+ \ 'd:prototypes;'. |
|
| 517 |
+ \ 'l:local variables;'. |
|
| 518 |
+ \ 'F:record fields;'. |
|
| 519 |
+ \ 'L:block label;'. |
|
| 520 |
+ \ 'r:records;'. |
|
| 521 |
+ \ 's:subtypes' |
|
| 472 | 522 |
|
| 473 | 523 |
" tcl language |
| 474 | 524 |
let s:tlist_def_tcl_settings = 'tcl;c:class;f:method;m:method;p:procedure' |
| 475 | 525 |
|
| 526 |
+" Tex |
|
| 527 |
+let s:tlist_def_tex_settings = 'tex;c:chapters;s:sections;u:subsections;'. |
|
| 528 |
+ \ 'b:subsubsections;p:parts;P:paragraphs;G:subparagraphs' |
|
| 529 |
+ |
|
| 476 | 530 |
" vera language |
| 477 | 531 |
let s:tlist_def_vera_settings = 'vera;c:class;d:macro;e:enumerator;' . |
| 478 | 532 |
\ 'f:function;g:enum;m:member;p:program;' . |
| ... | ... |
@@ -483,8 +537,12 @@ let s:tlist_def_vera_settings = 'vera;c:class;d:macro;e:enumerator;' . |
| 483 | 537 |
let s:tlist_def_verilog_settings = 'verilog;m:module;c:constant;P:parameter;' . |
| 484 | 538 |
\ 'e:event;r:register;t:task;w:write;p:port;v:variable;f:function' |
| 485 | 539 |
|
| 540 |
+" VHDL |
|
| 541 |
+let s:tlist_def_vhdl_settings = 'vhdl;c:constant;t:type;T:subtype;r:record;e:entity;f:function;p:procedure;P:package' |
|
| 542 |
+ |
|
| 486 | 543 |
" vim language |
| 487 |
-let s:tlist_def_vim_settings = 'vim;a:autocmds;v:variable;f:function' |
|
| 544 |
+let s:tlist_def_vim_settings = |
|
| 545 |
+ \ 'vim;v:variable;a:autocmds;c:commands;m:map;f:function' |
|
| 488 | 546 |
|
| 489 | 547 |
" yacc language |
| 490 | 548 |
let s:tlist_def_yacc_settings = 'yacc;l:label' |
| ... | ... |
@@ -542,7 +600,7 @@ function! s:Tlist_Window_Display_Help() |
| 542 | 600 |
call append(7, '" x : Zoom-out/Zoom-in taglist window') |
| 543 | 601 |
call append(8, '" + : Open a fold') |
| 544 | 602 |
call append(9, '" - : Close a fold') |
| 545 |
- call append(10, '" * : Open all folds') |
|
| 603 |
+ call append(10, '" * : (DXB removed) Open all folds') |
|
| 546 | 604 |
call append(11, '" = : Close all folds') |
| 547 | 605 |
call append(12, '" [[ : Move to the start of previous file') |
| 548 | 606 |
call append(13, '" ]] : Move to the start of next file') |
| ... | ... |
@@ -983,6 +1041,12 @@ endfunction |
| 983 | 1041 |
function! s:Tlist_Get_Buffer_Filetype(bnum) |
| 984 | 1042 |
let buf_ft = getbufvar(a:bnum, '&filetype') |
| 985 | 1043 |
|
| 1044 |
+ " Check whether 'filetype' contains multiple file types separated by '.' |
|
| 1045 |
+ " If it is, then use the first file type |
|
| 1046 |
+ if buf_ft =~ '\.' |
|
| 1047 |
+ let buf_ft = matchstr(buf_ft, '[^.]\+') |
|
| 1048 |
+ endif |
|
| 1049 |
+ |
|
| 986 | 1050 |
if bufloaded(a:bnum) |
| 987 | 1051 |
" For loaded buffers, the 'filetype' is already determined |
| 988 | 1052 |
return buf_ft |
| ... | ... |
@@ -1021,6 +1085,7 @@ function! s:Tlist_Discard_TagInfo(fidx) |
| 1021 | 1085 |
unlet! {fidx_i}_tag_type
|
| 1022 | 1086 |
unlet! {fidx_i}_ttype_idx
|
| 1023 | 1087 |
unlet! {fidx_i}_tag_proto
|
| 1088 |
+ unlet! {fidx_i}_tag_scope
|
|
| 1024 | 1089 |
unlet! {fidx_i}_tag_searchpat
|
| 1025 | 1090 |
unlet! {fidx_i}_tag_linenum
|
| 1026 | 1091 |
let i = i + 1 |
| ... | ... |
@@ -1206,6 +1271,7 @@ function! s:Tlist_Remove_File(file_idx, user_request) |
| 1206 | 1271 |
let s:tlist_{j}_{k}_tag_type = s:Tlist_Get_Tag_Type_By_Tag(i, k)
|
| 1207 | 1272 |
let s:tlist_{j}_{k}_ttype_idx = s:tlist_{i}_{k}_ttype_idx
|
| 1208 | 1273 |
let s:tlist_{j}_{k}_tag_proto = s:Tlist_Get_Tag_Prototype(i, k)
|
| 1274 |
+ let s:tlist_{j}_{k}_tag_scope = s:Tlist_Get_Tag_Scope(i, k)
|
|
| 1209 | 1275 |
let s:tlist_{j}_{k}_tag_searchpat = s:Tlist_Get_Tag_SearchPat(i, k)
|
| 1210 | 1276 |
let s:tlist_{j}_{k}_tag_linenum = s:Tlist_Get_Tag_Linenum(i, k)
|
| 1211 | 1277 |
let k = k + 1 |
| ... | ... |
@@ -1328,7 +1394,9 @@ function! s:Tlist_Window_Create() |
| 1328 | 1394 |
endif |
| 1329 | 1395 |
|
| 1330 | 1396 |
" Create the taglist window |
| 1331 |
- exe 'silent! ' . win_dir . ' ' . win_size . 'split ' . wcmd |
|
| 1397 |
+ " Preserve the alternate file |
|
| 1398 |
+ let cmd_mod = (v:version >= 700) ? 'keepalt ' : '' |
|
| 1399 |
+ exe 'silent! ' . cmd_mod . win_dir . ' ' . win_size . 'split ' . wcmd |
|
| 1332 | 1400 |
|
| 1333 | 1401 |
" Save the new window position |
| 1334 | 1402 |
let s:tlist_winx = getwinposx() |
| ... | ... |
@@ -1422,6 +1490,11 @@ function! s:Tlist_Window_Exit_Only_Window() |
| 1422 | 1490 |
if winbufnr(2) == -1 |
| 1423 | 1491 |
if tabpagenr('$') == 1
|
| 1424 | 1492 |
" Only one tag page is present |
| 1493 |
+ " |
|
| 1494 |
+ " When deleting the taglist buffer, autocommands cannot be |
|
| 1495 |
+ " disabled. If autocommands are disabled, then on exiting Vim, |
|
| 1496 |
+ " the window size will not be restored back to the original |
|
| 1497 |
+ " size. |
|
| 1425 | 1498 |
bdelete |
| 1426 | 1499 |
quit |
| 1427 | 1500 |
else |
| ... | ... |
@@ -1526,6 +1599,9 @@ function! s:Tlist_Window_Init() |
| 1526 | 1599 |
" taglist window. So forcefully disable 'number' option for the taglist |
| 1527 | 1600 |
" window |
| 1528 | 1601 |
silent! setlocal nonumber |
| 1602 |
+ if exists('&relativenumber')
|
|
| 1603 |
+ silent! setlocal norelativenumber |
|
| 1604 |
+ endif |
|
| 1529 | 1605 |
|
| 1530 | 1606 |
" Use fixed height when horizontally split window is used |
| 1531 | 1607 |
if g:Tlist_Use_Horiz_Window |
| ... | ... |
@@ -1568,7 +1644,7 @@ function! s:Tlist_Window_Init() |
| 1568 | 1644 |
\ :call <SID>Tlist_Change_Sort('cmd', 'toggle', '')<CR>
|
| 1569 | 1645 |
nnoremap <buffer> <silent> + :silent! foldopen<CR> |
| 1570 | 1646 |
nnoremap <buffer> <silent> - :silent! foldclose<CR> |
| 1571 |
- nnoremap <buffer> <silent> * :silent! %foldopen!<CR> |
|
| 1647 |
+ " DXB removed nnoremap <buffer> <silent> * :silent! %foldopen!<CR> |
|
| 1572 | 1648 |
nnoremap <buffer> <silent> = :silent! %foldclose<CR> |
| 1573 | 1649 |
nnoremap <buffer> <silent> <kPlus> :silent! foldopen<CR> |
| 1574 | 1650 |
nnoremap <buffer> <silent> <kMinus> :silent! foldclose<CR> |
| ... | ... |
@@ -1948,11 +2024,6 @@ function! s:Tlist_Window_Refresh_File(filename, ftype) |
| 1948 | 2024 |
|
| 1949 | 2025 |
let {fidx_ttype}_offset = ttype_start_lnum - file_start
|
| 1950 | 2026 |
|
| 1951 |
- " create a fold for this tag type |
|
| 1952 |
- let fold_start = ttype_start_lnum |
|
| 1953 |
- let fold_end = fold_start + {fidx_ttype}_count
|
|
| 1954 |
- exe fold_start . ',' . fold_end . 'fold' |
|
| 1955 |
- |
|
| 1956 | 2027 |
" Adjust the cursor position |
| 1957 | 2028 |
if g:Tlist_Compact_Format == 0 |
| 1958 | 2029 |
exe ttype_start_lnum + {fidx_ttype}_count
|
| ... | ... |
@@ -1976,10 +2047,7 @@ function! s:Tlist_Window_Refresh_File(filename, ftype) |
| 1976 | 2047 |
|
| 1977 | 2048 |
let s:tlist_{fidx}_end = line('.') - 1
|
| 1978 | 2049 |
|
| 1979 |
- " Create a fold for the entire file |
|
| 1980 |
- exe s:tlist_{fidx}_start . ',' . s:tlist_{fidx}_end . 'fold'
|
|
| 1981 |
- exe 'silent! ' . s:tlist_{fidx}_start . ',' .
|
|
| 1982 |
- \ s:tlist_{fidx}_end . 'foldopen!'
|
|
| 2050 |
+ call s:Tlist_Create_Folds_For_File(fidx) |
|
| 1983 | 2051 |
|
| 1984 | 2052 |
" Goto the starting line for this file, |
| 1985 | 2053 |
exe s:tlist_{fidx}_start
|
| ... | ... |
@@ -2087,6 +2155,25 @@ function! s:Tlist_Get_Tag_Prototype(fidx, tidx) |
| 2087 | 2155 |
return {tproto_var}
|
| 2088 | 2156 |
endfunction |
| 2089 | 2157 |
|
| 2158 |
+" Tlist_Get_Tag_Scope |
|
| 2159 |
+" Get the scope (e.g. C++ class) of a tag |
|
| 2160 |
+" |
|
| 2161 |
+" Tag scope is the last field after the 'line:<num>\t' field |
|
| 2162 |
+function! s:Tlist_Get_Tag_Scope(fidx, tidx) |
|
| 2163 |
+ let tscope_var = 's:tlist_' . a:fidx . '_' . a:tidx . '_tag_scope' |
|
| 2164 |
+ |
|
| 2165 |
+ " Already parsed and have the tag scope |
|
| 2166 |
+ if exists(tscope_var) |
|
| 2167 |
+ return {tscope_var}
|
|
| 2168 |
+ endif |
|
| 2169 |
+ |
|
| 2170 |
+ " Parse and extract the tag scope |
|
| 2171 |
+ let tag_line = s:tlist_{a:fidx}_{a:tidx}_tag
|
|
| 2172 |
+ let {tscope_var} = s:Tlist_Extract_Tag_Scope(tag_line)
|
|
| 2173 |
+ |
|
| 2174 |
+ return {tscope_var}
|
|
| 2175 |
+endfunction |
|
| 2176 |
+ |
|
| 2090 | 2177 |
" Tlist_Get_Tag_SearchPat |
| 2091 | 2178 |
function! s:Tlist_Get_Tag_SearchPat(fidx, tidx) |
| 2092 | 2179 |
let tpat_var = 's:tlist_' . a:fidx . '_' . a:tidx . '_tag_searchpat' |
| ... | ... |
@@ -2186,7 +2273,7 @@ function! s:Tlist_Parse_Tagline(tag_line) |
| 2186 | 2273 |
" Add the tag scope, if it is available and is configured. Tag |
| 2187 | 2274 |
" scope is the last field after the 'line:<num>\t' field |
| 2188 | 2275 |
if g:Tlist_Display_Tag_Scope |
| 2189 |
- let tag_scope = s:Tlist_Extract_Tag_Scope(a:tag_line) |
|
| 2276 |
+ let tag_scope = s:Tlist_Get_Tag_Scope(s:fidx, s:tidx) |
|
| 2190 | 2277 |
if tag_scope != '' |
| 2191 | 2278 |
let ttxt = ttxt . ' [' . tag_scope . ']' |
| 2192 | 2279 |
endif |
| ... | ... |
@@ -2275,9 +2362,13 @@ function! s:Tlist_Process_File(filename, ftype) |
| 2275 | 2362 |
" Contributed by: David Fishburn. |
| 2276 | 2363 |
let s:taglist_tempfile = fnamemodify(tempname(), ':h') . |
| 2277 | 2364 |
\ '\taglist.cmd' |
| 2365 |
+ if v:version >= 700 |
|
| 2366 |
+ call writefile([ctags_cmd], s:taglist_tempfile, "b") |
|
| 2367 |
+ else |
|
| 2278 | 2368 |
exe 'redir! > ' . s:taglist_tempfile |
| 2279 | 2369 |
silent echo ctags_cmd |
| 2280 | 2370 |
redir END |
| 2371 |
+ endif |
|
| 2281 | 2372 |
|
| 2282 | 2373 |
call s:Tlist_Log_Msg('Cmd inside batch file: ' . ctags_cmd)
|
| 2283 | 2374 |
let ctags_cmd = '"' . s:taglist_tempfile . '"' |
| ... | ... |
@@ -2401,7 +2492,7 @@ function! s:Tlist_Process_File(filename, ftype) |
| 2401 | 2492 |
" Add the tag scope, if it is available and is configured. Tag |
| 2402 | 2493 |
" scope is the last field after the 'line:<num>\t' field |
| 2403 | 2494 |
if g:Tlist_Display_Tag_Scope |
| 2404 |
- let tag_scope = s:Tlist_Extract_Tag_Scope(one_line) |
|
| 2495 |
+ let tag_scope = s:Tlist_Get_Tag_Scope(fidx, tidx) |
|
| 2405 | 2496 |
if tag_scope != '' |
| 2406 | 2497 |
let ttxt = ttxt . ' [' . tag_scope . ']' |
| 2407 | 2498 |
endif |
| ... | ... |
@@ -2968,7 +3059,7 @@ function! s:Tlist_Change_Sort(caller, action, sort_type) |
| 2968 | 3059 |
|
| 2969 | 3060 |
if a:caller == 'cmd' |
| 2970 | 3061 |
" Save the current line for later restoration |
| 2971 |
- let curline = '\V\^' . getline('.') . '\$'
|
|
| 3062 |
+ let curline = '\V\^' . escape(getline('.'), "\\") . '\$'
|
|
| 2972 | 3063 |
|
| 2973 | 3064 |
call s:Tlist_Window_Refresh_File(s:tlist_{fidx}_filename,
|
| 2974 | 3065 |
\ s:tlist_{fidx}_filetype)
|
| ... | ... |
@@ -3019,7 +3110,7 @@ function! s:Tlist_Window_Update_File() |
| 3019 | 3110 |
match none |
| 3020 | 3111 |
|
| 3021 | 3112 |
" Save the current line for later restoration |
| 3022 |
- let curline = '\V\^' . getline('.') . '\$'
|
|
| 3113 |
+ let curline = '\V\^' . escape(getline('.'), "\\") . '\$'
|
|
| 3023 | 3114 |
|
| 3024 | 3115 |
let s:tlist_{fidx}_valid = 0
|
| 3025 | 3116 |
|
| ... | ... |
@@ -3210,16 +3301,17 @@ function! s:Tlist_Window_Open_File(win_ctrl, filename, tagpat) |
| 3210 | 3301 |
exe "edit " . escape(a:filename, ' ') |
| 3211 | 3302 |
else |
| 3212 | 3303 |
" Open a new window |
| 3304 |
+ let cmd_mod = (v:version >= 700) ? 'keepalt ' : '' |
|
| 3213 | 3305 |
if g:Tlist_Use_Horiz_Window |
| 3214 |
- exe 'leftabove split ' . escape(a:filename, ' ') |
|
| 3306 |
+ exe cmd_mod . 'leftabove split ' . escape(a:filename, ' ') |
|
| 3215 | 3307 |
else |
| 3216 | 3308 |
if winbufnr(2) == -1 |
| 3217 | 3309 |
" Only the taglist window is present |
| 3218 | 3310 |
if g:Tlist_Use_Right_Window |
| 3219 |
- exe 'leftabove vertical split ' . |
|
| 3311 |
+ exe cmd_mod . 'leftabove vertical split ' . |
|
| 3220 | 3312 |
\ escape(a:filename, ' ') |
| 3221 | 3313 |
else |
| 3222 |
- exe 'rightbelow vertical split ' . |
|
| 3314 |
+ exe cmd_mod . 'rightbelow vertical split ' . |
|
| 3223 | 3315 |
\ escape(a:filename, ' ') |
| 3224 | 3316 |
endif |
| 3225 | 3317 |
|
| ... | ... |
@@ -3236,7 +3328,7 @@ function! s:Tlist_Window_Open_File(win_ctrl, filename, tagpat) |
| 3236 | 3328 |
else |
| 3237 | 3329 |
" A plugin or help window is also present |
| 3238 | 3330 |
wincmd w |
| 3239 |
- exe 'leftabove split ' . escape(a:filename, ' ') |
|
| 3331 |
+ exe cmd_mod . 'leftabove split ' . escape(a:filename, ' ') |
|
| 3240 | 3332 |
endif |
| 3241 | 3333 |
endif |
| 3242 | 3334 |
endif |
| ... | ... |
@@ -3413,7 +3505,8 @@ function! s:Tlist_Window_Show_Info() |
| 3413 | 3505 |
endif |
| 3414 | 3506 |
|
| 3415 | 3507 |
" Get the tag search pattern and display it |
| 3416 |
- echo s:Tlist_Get_Tag_Prototype(fidx, tidx) |
|
| 3508 |
+ let proto = s:Tlist_Get_Tag_Prototype(fidx, tidx) |
|
| 3509 |
+ echo strpart(proto, 0, &columns - 1) |
|
| 3417 | 3510 |
endfunction |
| 3418 | 3511 |
|
| 3419 | 3512 |
" Tlist_Find_Nearest_Tag_Idx |
| ... | ... |
@@ -3709,7 +3802,33 @@ function! Tlist_Get_Tagname_By_Line(...) |
| 3709 | 3802 |
return "" |
| 3710 | 3803 |
endif |
| 3711 | 3804 |
|
| 3712 |
- return s:tlist_{fidx}_{tidx}_tag_name
|
|
| 3805 |
+ let name = s:tlist_{fidx}_{tidx}_tag_name
|
|
| 3806 |
+ |
|
| 3807 |
+ if g:Tlist_Display_Tag_Scope |
|
| 3808 |
+ " Add the scope of the tag |
|
| 3809 |
+ let tag_scope = s:tlist_{fidx}_{tidx}_tag_scope
|
|
| 3810 |
+ if tag_scope != '' |
|
| 3811 |
+ let name = name . ' [' . tag_scope . ']' |
|
| 3812 |
+ endif |
|
| 3813 |
+ endif |
|
| 3814 |
+ |
|
| 3815 |
+ return name |
|
| 3816 |
+endfunction |
|
| 3817 |
+ |
|
| 3818 |
+" Tlist_Get_Filenames |
|
| 3819 |
+" Return the list of file names in the taglist. The names are separated |
|
| 3820 |
+" by a newline ('\n')
|
|
| 3821 |
+function! Tlist_Get_Filenames() |
|
| 3822 |
+ let fnames = '' |
|
| 3823 |
+ |
|
| 3824 |
+ let i = 0 |
|
| 3825 |
+ |
|
| 3826 |
+ while i < s:tlist_file_count |
|
| 3827 |
+ let fnames = fnames . s:tlist_{i}_filename . "\n"
|
|
| 3828 |
+ let i = i + 1 |
|
| 3829 |
+ endwhile |
|
| 3830 |
+ |
|
| 3831 |
+ return fnames |
|
| 3713 | 3832 |
endfunction |
| 3714 | 3833 |
|
| 3715 | 3834 |
" Tlist_Window_Move_To_File |
| ... | ... |
@@ -4092,6 +4211,28 @@ function! s:Tlist_Window_Check_Auto_Open() |
| 4092 | 4211 |
endif |
| 4093 | 4212 |
endfunction |
| 4094 | 4213 |
|
| 4214 |
+" Tlist_Create_Folds_For_File |
|
| 4215 |
+" Create the folds in the taglist window for the specified file |
|
| 4216 |
+function! s:Tlist_Create_Folds_For_File(fidx) |
|
| 4217 |
+ let ftype = s:tlist_{a:fidx}_filetype
|
|
| 4218 |
+ |
|
| 4219 |
+ " Create the folds for each tag type in a file |
|
| 4220 |
+ let j = 1 |
|
| 4221 |
+ while j <= s:tlist_{ftype}_count
|
|
| 4222 |
+ let ttype = s:tlist_{ftype}_{j}_name
|
|
| 4223 |
+ if s:tlist_{a:fidx}_{ttype}_count
|
|
| 4224 |
+ let s = s:tlist_{a:fidx}_start + s:tlist_{a:fidx}_{ttype}_offset
|
|
| 4225 |
+ let e = s + s:tlist_{a:fidx}_{ttype}_count
|
|
| 4226 |
+ exe s . ',' . e . 'fold' |
|
| 4227 |
+ endif |
|
| 4228 |
+ let j = j + 1 |
|
| 4229 |
+ endwhile |
|
| 4230 |
+ |
|
| 4231 |
+ exe s:tlist_{a:fidx}_start . ',' . s:tlist_{a:fidx}_end . 'fold'
|
|
| 4232 |
+ exe 'silent! ' . s:tlist_{a:fidx}_start . ',' .
|
|
| 4233 |
+ \ s:tlist_{a:fidx}_end . 'foldopen!'
|
|
| 4234 |
+endfunction |
|
| 4235 |
+ |
|
| 4095 | 4236 |
" Tlist_Refresh_Folds |
| 4096 | 4237 |
" Remove and create the folds for all the files displayed in the taglist |
| 4097 | 4238 |
" window. Used after entering a tab. If this is not done, then the folds |
| ... | ... |
@@ -4108,28 +4249,18 @@ function! s:Tlist_Refresh_Folds() |
| 4108 | 4249 |
" First remove all the existing folds |
| 4109 | 4250 |
normal! zE |
| 4110 | 4251 |
|
| 4111 |
- " Create the folds for each in the tag list |
|
| 4252 |
+ if g:Tlist_Show_One_File |
|
| 4253 |
+ " If only one file is displayed in the taglist window, then there |
|
| 4254 |
+ " is no need to refresh the folds for the tags as the tags for the |
|
| 4255 |
+ " current file will be removed anyway. |
|
| 4256 |
+ else |
|
| 4257 |
+ " Create the folds for each file in the tag list |
|
| 4112 | 4258 |
let fidx = 0 |
| 4113 | 4259 |
while fidx < s:tlist_file_count |
| 4114 |
- let ftype = s:tlist_{fidx}_filetype
|
|
| 4115 |
- |
|
| 4116 |
- " Create the folds for each tag type in a file |
|
| 4117 |
- let j = 1 |
|
| 4118 |
- while j <= s:tlist_{ftype}_count
|
|
| 4119 |
- let ttype = s:tlist_{ftype}_{j}_name
|
|
| 4120 |
- if s:tlist_{fidx}_{ttype}_count
|
|
| 4121 |
- let s = s:tlist_{fidx}_start + s:tlist_{fidx}_{ttype}_offset
|
|
| 4122 |
- let e = s + s:tlist_{fidx}_{ttype}_count
|
|
| 4123 |
- exe s . ',' . e . 'fold' |
|
| 4124 |
- endif |
|
| 4125 |
- let j = j + 1 |
|
| 4126 |
- endwhile |
|
| 4127 |
- |
|
| 4128 |
- exe s:tlist_{fidx}_start . ',' . s:tlist_{fidx}_end . 'fold'
|
|
| 4129 |
- exe 'silent! ' . s:tlist_{fidx}_start . ',' .
|
|
| 4130 |
- \ s:tlist_{fidx}_end . 'foldopen!'
|
|
| 4260 |
+ call s:Tlist_Create_Folds_For_File(fidx) |
|
| 4131 | 4261 |
let fidx = fidx + 1 |
| 4132 | 4262 |
endwhile |
| 4263 |
+ endif |
|
| 4133 | 4264 |
|
| 4134 | 4265 |
exe save_wnum . 'wincmd w' |
| 4135 | 4266 |
endfunction |
| ... | ... |
@@ -212,6 +212,7 @@ nmap <leader>e :call ToggleNetrw()<cr> |
| 212 | 212 |
let Tlist_GainFocus_On_ToggleOpen = 1 " Jump to taglist window on open |
| 213 | 213 |
let Tlist_Exit_OnlyWindow = 1 " if you are the last, kill yourself |
| 214 | 214 |
let Tlist_Close_On_Select = 1 " Close taglist window on select |
| 215 |
+let Tlist_Inc_Winwidth = 0 " Only needed for neovim in tmux |
|
| 215 | 216 |
nmap <leader>l :TlistToggle<cr> |
| 216 | 217 |
|
| 217 | 218 |
" install vim-bbye |
| 218 | 219 |