diff --git a/doc/tagbar.txt b/doc/tagbar.txt index 805fa7a..c406faf 100644 --- a/doc/tagbar.txt +++ b/doc/tagbar.txt @@ -606,10 +606,6 @@ files. problem in practice anyway. Tags with the same name at any other level are no problem, though. - - The fold state of the Tagbar window is lost when the window is left. - Again, I don't know of any proper way around this that still allows - auto-updating -- |winsaveview()| doesn't really help here. - ============================================================================== 8. History *tagbar-history* @@ -659,5 +655,7 @@ warranty of any kind, either expressed or implied. In no event will the copyright holder be liable for any damamges resulting from the use of this software. +The folding technique was inspired by NERDTree by Martin Grenfell. + ============================================================================== vim: tw=78 ts=8 sw=8 sts=8 noet ft=help diff --git a/plugin/tagbar.vim b/plugin/tagbar.vim index 3ea93d8..6ee00b1 100644 --- a/plugin/tagbar.vim +++ b/plugin/tagbar.vim @@ -70,6 +70,10 @@ if !exists('g:tagbar_expand') let g:tagbar_expand = 0 endif +if !exists('g:tagbar_foldlevel') + let g:tagbar_foldlevel = 99 +endif + let s:type_init_done = 0 let s:autocommands_done = 0 let s:window_expanded = 0 @@ -79,12 +83,16 @@ function! s:InitTypes() " Dictionary of the already processed files, indexed by file name with " complete path. " The entries are again dictionaries with the following fields: - " - mtime: File modification time - " - ftype: The vim file type - " - tags: List of the tags that are present in the file, sorted - " according to the value of 'g:tagbar_sort' - " - fline: Dictionary of the tags, indexed by line number in the file - " - tline: Dictionary of the tags, indexed by line number in the tagbar + " - mtime: File modification time + " - ftype: The vim file type + " - tags: List of the tags that are present in the file, sorted + " according to the value of 'g:tagbar_sort' + " - fline: Dictionary of the tags, indexed by line number in the file + " - tline: Dictionary of the tags, indexed by line number in the tagbar + " - kindfolds: Dictionary of the folding state of 'kind's, indexed by short + " name + " - tagfolds: Dictionary of dictionaries of the folding state of + " individual tags, indexed by kind and full path let s:known_files = {} let s:known_types = {} @@ -93,73 +101,73 @@ function! s:InitTypes() let type_ant = {} let type_ant.ctagstype = 'ant' let type_ant.kinds = [ - \ 'p:projects', - \ 't:targets' + \ {'short' : 'p', 'long' : 'projects', 'fold' : 0}, + \ {'short' : 't', 'long' : 'targets', 'fold' : 0} \ ] let s:known_types.ant = type_ant " Asm {{{3 let type_asm = {} let type_asm.ctagstype = 'asm' let type_asm.kinds = [ - \ 'm:macros', - \ 't:types', - \ 'd:defines', - \ 'l:labels' + \ {'short' : 'm', 'long' : 'macros', 'fold' : 0}, + \ {'short' : 't', 'long' : 'types', 'fold' : 0}, + \ {'short' : 'd', 'long' : 'defines', 'fold' : 0}, + \ {'short' : 'l', 'long' : 'labels', 'fold' : 0} \ ] let s:known_types.asm = type_asm " ASP {{{3 let type_aspvbs = {} let type_aspvbs.ctagstype = 'asp' let type_aspvbs.kinds = [ - \ 'd:constants', - \ 'c:classes', - \ 'f:functions', - \ 's:subroutines', - \ 'v:variables' + \ {'short' : 'd', 'long' : 'constants', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 's', 'long' : 'subroutines', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0} \ ] let s:known_types.aspvbs = type_aspvbs " Awk {{{3 let type_awk = {} let type_awk.ctagstype = 'awk' let type_awk.kinds = [ - \ 'f:functions' + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0} \ ] let s:known_types.awk = type_awk " Basic {{{3 let type_basic = {} let type_basic.ctagstype = 'basic' let type_basic.kinds = [ - \ 'c:constants', - \ 'g:enumerations', - \ 'f:functions', - \ 'l:labels', - \ 't:types', - \ 'v:variables' + \ {'short' : 'c', 'long' : 'constants', 'fold' : 0}, + \ {'short' : 'g', 'long' : 'enumerations', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 'l', 'long' : 'labels', 'fold' : 0}, + \ {'short' : 't', 'long' : 'types', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0} \ ] let s:known_types.basic = type_basic " BETA {{{3 let type_beta = {} let type_beta.ctagstype = 'beta' let type_beta.kinds = [ - \ 'f:fragments', - \ 's:slots', - \ 'v:patterns' + \ {'short' : 'f', 'long' : 'fragments', 'fold' : 0}, + \ {'short' : 's', 'long' : 'slots', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'patterns', 'fold' : 0} \ ] let s:known_types.beta = type_beta " C {{{3 let type_c = {} let type_c.ctagstype = 'c' let type_c.kinds = [ - \ 'd:macros', - \ 'p:prototypes', - \ 'g:enums', - \ 'e:enumerators', - \ 't:typedefs', - \ 's:structs', - \ 'u:unions', - \ 'm:members', - \ 'v:variables', - \ 'f:functions' + \ {'short' : 'd', 'long' : 'macros', 'fold' : 1}, + \ {'short' : 'p', 'long' : 'prototypes', 'fold' : 1}, + \ {'short' : 'g', 'long' : 'enums', 'fold' : 0}, + \ {'short' : 'e', 'long' : 'enumerators', 'fold' : 0}, + \ {'short' : 't', 'long' : 'typedefs', 'fold' : 0}, + \ {'short' : 's', 'long' : 'structs', 'fold' : 0}, + \ {'short' : 'u', 'long' : 'unions', 'fold' : 0}, + \ {'short' : 'm', 'long' : 'members', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0} \ ] let type_c.sro = '::' let type_c.kind2scope = { @@ -177,18 +185,18 @@ function! s:InitTypes() let type_cpp = {} let type_cpp.ctagstype = 'c++' let type_cpp.kinds = [ - \ 'd:macros', - \ 'p:prototypes', - \ 'g:enums', - \ 'e:enumerators', - \ 't:typedefs', - \ 'n:namespaces', - \ 'c:classes', - \ 's:structs', - \ 'u:unions', - \ 'f:functions', - \ 'm:members', - \ 'v:variables' + \ {'short' : 'd', 'long' : 'macros', 'fold' : 1}, + \ {'short' : 'p', 'long' : 'prototypes', 'fold' : 1}, + \ {'short' : 'g', 'long' : 'enums', 'fold' : 0}, + \ {'short' : 'e', 'long' : 'enumerators', 'fold' : 0}, + \ {'short' : 't', 'long' : 'typedefs', 'fold' : 0}, + \ {'short' : 'n', 'long' : 'namespaces', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 's', 'long' : 'structs', 'fold' : 0}, + \ {'short' : 'u', 'long' : 'unions', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 'm', 'long' : 'members', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0} \ ] let type_cpp.sro = '::' let type_cpp.kind2scope = { @@ -210,18 +218,18 @@ function! s:InitTypes() let type_cs = {} let type_cs.ctagstype = 'c#' let type_cs.kinds = [ - \ 'd:macros', - \ 'f:fields', - \ 'g:enums', - \ 'e:enumerators', - \ 't:typedefs', - \ 'n:namespaces', - \ 'i:interfaces', - \ 'c:classes', - \ 's:structs', - \ 'E:events', - \ 'm:methods', - \ 'p:properties' + \ {'short' : 'd', 'long' : 'macros', 'fold' : 1}, + \ {'short' : 'f', 'long' : 'fields', 'fold' : 0}, + \ {'short' : 'g', 'long' : 'enums', 'fold' : 0}, + \ {'short' : 'e', 'long' : 'enumerators', 'fold' : 0}, + \ {'short' : 't', 'long' : 'typedefs', 'fold' : 0}, + \ {'short' : 'n', 'long' : 'namespaces', 'fold' : 0}, + \ {'short' : 'i', 'long' : 'interfaces', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 's', 'long' : 'structs', 'fold' : 0}, + \ {'short' : 'E', 'long' : 'events', 'fold' : 0}, + \ {'short' : 'm', 'long' : 'methods', 'fold' : 0}, + \ {'short' : 'p', 'long' : 'properties', 'fold' : 0} \ ] let type_cs.sro = '.' let type_cs.kind2scope = { @@ -243,28 +251,28 @@ function! s:InitTypes() let type_cobol = {} let type_cobol.ctagstype = 'cobol' let type_cobol.kinds = [ - \ 'd:data items', - \ 'f:file descriptions', - \ 'g:group items', - \ 'p:paragraphs', - \ 'P:program ids', - \ 's:sections' + \ {'short' : 'd', 'long' : 'data items', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'file descriptions', 'fold' : 0}, + \ {'short' : 'g', 'long' : 'group items', 'fold' : 0}, + \ {'short' : 'p', 'long' : 'paragraphs', 'fold' : 0}, + \ {'short' : 'P', 'long' : 'program ids', 'fold' : 0}, + \ {'short' : 's', 'long' : 'sections', 'fold' : 0} \ ] let s:known_types.cobol = type_cobol " DOS Batch {{{3 let type_dosbatch = {} let type_dosbatch.ctagstype = 'dosbatch' let type_dosbatch.kinds = [ - \ 'l:labels', - \ 'v:variables' + \ {'short' : 'l', 'long' : 'labels', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0} \ ] let s:known_types.dosbatch = type_dosbatch " Eiffel {{{3 let type_eiffel = {} let type_eiffel.ctagstype = 'eiffel' let type_eiffel.kinds = [ - \ 'c:classes', - \ 'f:features' + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'features', 'fold' : 0} \ ] let type_eiffel.sro = '.' " Not sure, is nesting even possible? let type_eiffel.kind2scope = { @@ -280,10 +288,10 @@ function! s:InitTypes() let type_erlang = {} let type_erlang.ctagstype = 'erlang' let type_erlang.kinds = [ - \ 'm:modules', - \ 'd:macro definitions', - \ 'f:functions', - \ 'r:record definitions' + \ {'short' : 'm', 'long' : 'modules', 'fold' : 0}, + \ {'short' : 'd', 'long' : 'macro definitions', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 'r', 'long' : 'record definitions', 'fold' : 0} \ ] let type_erlang.sro = '.' " Not sure, is nesting even possible? let type_erlang.kind2scope = { @@ -301,12 +309,12 @@ function! s:InitTypes() let type_mxml = {} let type_mxml.ctagstype = 'flex' let type_mxml.kinds = [ - \ 'v:global variables', - \ 'c:classes', - \ 'm:methods', - \ 'p:properties', - \ 'f:functions', - \ 'x:mxtags' + \ {'short' : 'v', 'long' : 'global variables', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 'm', 'long' : 'methods', 'fold' : 0}, + \ {'short' : 'p', 'long' : 'properties', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 'x', 'long' : 'mxtags', 'fold' : 0} \ ] let type_mxml.sro = '.' let type_mxml.kind2scope = { @@ -320,18 +328,18 @@ function! s:InitTypes() let type_fortran = {} let type_fortran.ctagstype = 'fortran' let type_fortran.kinds = [ - \ 'm:modules', - \ 'p:programs', - \ 'k:components', - \ 't:derived types and structures', - \ 'c:common blocks', - \ 'b:block data', - \ 'e:entry points', - \ 'f:functions', - \ 's:subroutines', - \ 'l:labels', - \ 'n:namelists', - \ 'v:variables' + \ {'short' : 'm', 'long' : 'modules', 'fold' : 0}, + \ {'short' : 'p', 'long' : 'programs', 'fold' : 0}, + \ {'short' : 'k', 'long' : 'components', 'fold' : 0}, + \ {'short' : 't', 'long' : 'derived types and structures', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'common blocks', 'fold' : 0}, + \ {'short' : 'b', 'long' : 'block data', 'fold' : 0}, + \ {'short' : 'e', 'long' : 'entry points', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 's', 'long' : 'subroutines', 'fold' : 0}, + \ {'short' : 'l', 'long' : 'labels', 'fold' : 0}, + \ {'short' : 'n', 'long' : 'namelists', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0} \ ] let type_fortran.sro = '.' " Not sure, is nesting even possible? let type_fortran.kind2scope = { @@ -351,21 +359,21 @@ function! s:InitTypes() let type_html = {} let type_html.ctagstype = 'html' let type_html.kinds = [ - \ 'f:JavaScript funtions', - \ 'a:named anchors' + \ {'short' : 'f', 'long' : 'JavaScript funtions', 'fold' : 0}, + \ {'short' : 'a', 'long' : 'named anchors', 'fold' : 0} \ ] let s:known_types.html = type_html " Java {{{3 let type_java = {} let type_java.ctagstype = 'java' let type_java.kinds = [ - \ 'p:packages', - \ 'f:fields', - \ 'g:enum types', - \ 'e:enum constants', - \ 'i:interfaces', - \ 'c:classes', - \ 'm:methods' + \ {'short' : 'p', 'long' : 'packages', 'fold' : 1}, + \ {'short' : 'f', 'long' : 'fields', 'fold' : 0}, + \ {'short' : 'g', 'long' : 'enum types', 'fold' : 0}, + \ {'short' : 'e', 'long' : 'enum constants', 'fold' : 0}, + \ {'short' : 'i', 'long' : 'interfaces', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 'm', 'long' : 'methods', 'fold' : 0} \ ] let type_java.sro = '.' let type_java.kind2scope = { @@ -386,54 +394,54 @@ function! s:InitTypes() let type_javascript = {} let type_javascript.ctagstype = 'javascript' let type_javascript.kinds = [ - \ 'v:global variables', - \ 'c:classes', - \ 'p:properties', - \ 'm:methods', - \ 'f:functions' + \ {'short' : 'v', 'long' : 'global variables', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 'p', 'long' : 'properties', 'fold' : 0}, + \ {'short' : 'm', 'long' : 'methods', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0} \ ] let s:known_types.javascript = type_javascript " Lisp {{{3 let type_lisp = {} let type_lisp.ctagstype = 'lisp' let type_lisp.kinds = [ - \ 'f:functions' + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0} \ ] let s:known_types.lisp = type_lisp " Lua {{{3 let type_lua = {} let type_lua.ctagstype = 'lua' let type_lua.kinds = [ - \ 'f:functions' + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0} \ ] let s:known_types.lua = type_lua " Make {{{3 let type_make = {} let type_make.ctagstype = 'make' let type_make.kinds = [ - \ 'm:macros' + \ {'short' : 'm', 'long' : 'macros', 'fold' : 0} \ ] let s:known_types.make = type_make " Matlab {{{3 let type_matlab = {} let type_matlab.ctagstype = 'matlab' let type_matlab.kinds = [ - \ 'f:functions' + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0} \ ] let s:known_types.matlab = type_matlab " Ocaml {{{3 let type_ocaml = {} let type_ocaml.ctagstype = 'ocaml' let type_ocaml.kinds = [ - \ 'M:modules or functors', - \ 'v:global variables', - \ 'c:classes', - \ 'C:constructors', - \ 'm:methods', - \ 'e:exceptions', - \ 't:type names', - \ 'f:functions', - \ 'r:structure fields' + \ {'short' : 'M', 'long' : 'modules or functors', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'global variables', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 'C', 'long' : 'constructors', 'fold' : 0}, + \ {'short' : 'm', 'long' : 'methods', 'fold' : 0}, + \ {'short' : 'e', 'long' : 'exceptions', 'fold' : 0}, + \ {'short' : 't', 'long' : 'type names', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 'r', 'long' : 'structure fields', 'fold' : 0} \ ] let type_ocaml.sro = '.' " Not sure, is nesting even possible? let type_ocaml.kind2scope = { @@ -451,49 +459,49 @@ function! s:InitTypes() let type_pascal = {} let type_pascal.ctagstype = 'pascal' let type_pascal.kinds = [ - \ 'f:functions', - \ 'p:procedures' + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 'p', 'long' : 'procedures', 'fold' : 0} \ ] let s:known_types.pascal = type_pascal " Perl {{{3 let type_perl = {} let type_perl.ctagstype = 'perl' let type_perl.kinds = [ - \ 'p:packages', - \ 'c:constants', - \ 'f:formats', - \ 'l:labels', - \ 's:subroutines' + \ {'short' : 'p', 'long' : 'packages', 'fold' : 1}, + \ {'short' : 'c', 'long' : 'constants', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'formats', 'fold' : 0}, + \ {'short' : 'l', 'long' : 'labels', 'fold' : 0}, + \ {'short' : 's', 'long' : 'subroutines', 'fold' : 0} \ ] let s:known_types.perl = type_perl " PHP {{{3 let type_php = {} let type_php.ctagstype = 'php' let type_php.kinds = [ - \ 'i:interfaces', - \ 'c:classes', - \ 'd:constant definitions', - \ 'f:functions', - \ 'v:variables', - \ 'j:javascript functions' + \ {'short' : 'i', 'long' : 'interfaces', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 'd', 'long' : 'constant definitions', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0}, + \ {'short' : 'j', 'long' : 'javascript functions', 'fold' : 0} \ ] let s:known_types.php = type_php " Python {{{3 let type_python = {} let type_python.ctagstype = 'python' let type_python.kinds = [ - \ 'i:imports', - \ 'c:classes', - \ 'f:functions', - \ 'm:members', - \ 'v:variables' + \ {'short' : 'i', 'long' : 'imports', 'fold' : 1}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 'm', 'long' : 'members', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0} \ ] + let type_python.sro = '.' let type_python.kind2scope = { \ 'c' : 'class', \ 'f' : 'function', \ 'm' : 'function' \ } - let type_python.sro = '.' let type_python.scope2kind = { \ 'class' : 'c', \ 'function' : 'f' @@ -503,17 +511,17 @@ function! s:InitTypes() let type_rexx = {} let type_rexx.ctagstype = 'rexx' let type_rexx.kinds = [ - \ 's:subroutines' + \ {'short' : 's', 'long' : 'subroutines', 'fold' : 0} \ ] let s:known_types.rexx = type_rexx " Ruby {{{3 let type_ruby = {} let type_ruby.ctagstype = 'ruby' let type_ruby.kinds = [ - \ 'm:modules', - \ 'c:classes', - \ 'f:methods', - \ 'F:singleton methods' + \ {'short' : 'm', 'long' : 'modules', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'methods', 'fold' : 0}, + \ {'short' : 'F', 'long' : 'singleton methods', 'fold' : 0} \ ] let type_ruby.sro = '.' let type_ruby.kind2scope = { @@ -528,15 +536,15 @@ function! s:InitTypes() let type_scheme = {} let type_scheme.ctagstype = 'scheme' let type_scheme.kinds = [ - \ 'f:functions', - \ 's:sets' + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 's', 'long' : 'sets', 'fold' : 0} \ ] let s:known_types.scheme = type_scheme " Shell script {{{3 let type_sh = {} let type_sh.ctagstype = 'sh' let type_sh.kinds = [ - \ 'f:functions' + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0} \ ] let s:known_types.sh = type_sh let s:known_types.csh = type_sh @@ -545,21 +553,21 @@ function! s:InitTypes() let type_slang = {} let type_slang.ctagstype = 'slang' let type_slang.kinds = [ - \ 'n:namespaces', - \ 'f:functions' + \ {'short' : 'n', 'long' : 'namespaces', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0} \ ] let s:known_types.slang = type_slang " SML {{{3 let type_sml = {} let type_sml.ctagstype = 'sml' let type_sml.kinds = [ - \ 'e:exception declarations', - \ 'f:function definitions', - \ 'c:functor definitions', - \ 's:signature declarations', - \ 'r:structure declarations', - \ 't:type definitions', - \ 'v:value bindings' + \ {'short' : 'e', 'long' : 'exception declarations', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'function definitions', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'functor definitions', 'fold' : 0}, + \ {'short' : 's', 'long' : 'signature declarations', 'fold' : 0}, + \ {'short' : 'r', 'long' : 'structure declarations', 'fold' : 0}, + \ {'short' : 't', 'long' : 'type definitions', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'value bindings', 'fold' : 0} \ ] let s:known_types.sml = type_sml " SQL {{{3 @@ -569,47 +577,47 @@ function! s:InitTypes() let type_sql = {} let type_sql.ctagstype = 'sql' let type_sql.kinds = [ - \ 'c:cursors', - \ 'f:functions', - \ 'F:record fields', - \ 'L:block label', - \ 'P:packages', - \ 'p:procedures', - \ 's:subtypes', - \ 't:tables', - \ 'T:triggers', - \ 'v:variables', - \ 'i:indexes', - \ 'e:events', - \ 'U:publications', - \ 'R:services', - \ 'D:domains', - \ 'V:views', - \ 'n:synonyms', - \ 'x:MobiLink Table Scripts', - \ 'y:MobiLink Conn Scripts' + \ {'short' : 'P', 'long' : 'packages', 'fold' : 1}, + \ {'short' : 'c', 'long' : 'cursors', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 'F', 'long' : 'record fields', 'fold' : 0}, + \ {'short' : 'L', 'long' : 'block label', 'fold' : 0}, + \ {'short' : 'p', 'long' : 'procedures', 'fold' : 0}, + \ {'short' : 's', 'long' : 'subtypes', 'fold' : 0}, + \ {'short' : 't', 'long' : 'tables', 'fold' : 0}, + \ {'short' : 'T', 'long' : 'triggers', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0}, + \ {'short' : 'i', 'long' : 'indexes', 'fold' : 0}, + \ {'short' : 'e', 'long' : 'events', 'fold' : 0}, + \ {'short' : 'U', 'long' : 'publications', 'fold' : 0}, + \ {'short' : 'R', 'long' : 'services', 'fold' : 0}, + \ {'short' : 'D', 'long' : 'domains', 'fold' : 0}, + \ {'short' : 'V', 'long' : 'views', 'fold' : 0}, + \ {'short' : 'n', 'long' : 'synonyms', 'fold' : 0}, + \ {'short' : 'x', 'long' : 'MobiLink Table Scripts', 'fold' : 0}, + \ {'short' : 'y', 'long' : 'MobiLink Conn Scripts', 'fold' : 0} \ ] let s:known_types.sql = type_sql " Tcl {{{3 let type_tcl = {} let type_tcl.ctagstype = 'tcl' let type_tcl.kinds = [ - \ 'c:classes', - \ 'm:methods', - \ 'p:procedures' + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 'm', 'long' : 'methods', 'fold' : 0}, + \ {'short' : 'p', 'long' : 'procedures', 'fold' : 0} \ ] let s:known_types.tcl = type_tcl " LaTeX {{{3 let type_tex = {} let type_tex.ctagstype = 'tex' let type_tex.kinds = [ - \ 'p:parts', - \ 'c:chapters', - \ 's:sections', - \ 'u:subsections', - \ 'b:subsubsections', - \ 'P:paragraphs', - \ 'G:subparagraphs', + \ {'short' : 'p', 'long' : 'parts', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'chapters', 'fold' : 0}, + \ {'short' : 's', 'long' : 'sections', 'fold' : 0}, + \ {'short' : 'u', 'long' : 'subsections', 'fold' : 0}, + \ {'short' : 'b', 'long' : 'subsubsections', 'fold' : 0}, + \ {'short' : 'P', 'long' : 'paragraphs', 'fold' : 0}, + \ {'short' : 'G', 'long' : 'subparagraphs', 'fold' : 0} \ ] let s:known_types.tex = type_tex " Vera {{{3 @@ -617,16 +625,16 @@ function! s:InitTypes() let type_vera = {} let type_vera.ctagstype = 'vera' let type_vera.kinds = [ - \ 'd:macros', - \ 'g:enums', - \ 'T:typedefs', - \ 'c:classes', - \ 'e:enumerators', - \ 'm:members', - \ 'f:functions', - \ 't:tasks', - \ 'v:variables', - \ 'p:programs' + \ {'short' : 'd', 'long' : 'macros', 'fold' : 1}, + \ {'short' : 'g', 'long' : 'enums', 'fold' : 0}, + \ {'short' : 'T', 'long' : 'typedefs', 'fold' : 0}, + \ {'short' : 'c', 'long' : 'classes', 'fold' : 0}, + \ {'short' : 'e', 'long' : 'enumerators', 'fold' : 0}, + \ {'short' : 'm', 'long' : 'members', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 't', 'long' : 'tasks', 'fold' : 0}, + \ {'short' : 'v', 'long' : 'variables', 'fold' : 0}, + \ {'short' : 'p', 'long' : 'programs', 'fold' : 0} \ ] let type_vera.sro = '.' " Nesting doesn't seem to be possible let type_vera.kind2scope = { @@ -644,14 +652,14 @@ function! s:InitTypes() let type_verilog = {} let type_verilog.ctagstype = 'verilog' let type_verilog.kinds = [ - \ 'c:constants', - \ 'e:events', - \ 'f:functions', - \ 'm:modules', - \ 'n:net data types', - \ 'p:ports', - \ 'r:register data types', - \ 't:tasks' + \ {'short' : 'c', 'long' : 'constants', 'fold' : 0}, + \ {'short' : 'e', 'long' : 'events', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 'm', 'long' : 'modules', 'fold' : 0}, + \ {'short' : 'n', 'long' : 'net data types', 'fold' : 0}, + \ {'short' : 'p', 'long' : 'ports', 'fold' : 0}, + \ {'short' : 'r', 'long' : 'register data types', 'fold' : 0}, + \ {'short' : 't', 'long' : 'tasks', 'fold' : 0} \ ] let s:known_types.verilog = type_verilog " VHDL {{{3 @@ -659,32 +667,32 @@ function! s:InitTypes() let type_vhdl = {} let type_vhdl.ctagstype = 'vhdl' let type_vhdl.kinds = [ - \ 'c:constants', - \ 't:types', - \ 'T:subtypes', - \ 'r:records', - \ 'e:entities', - \ 'f:functions', - \ 'p:procedures', - \ 'P:packages' + \ {'short' : 'P', 'long' : 'packages', 'fold' : 1}, + \ {'short' : 'c', 'long' : 'constants', 'fold' : 0}, + \ {'short' : 't', 'long' : 'types', 'fold' : 0}, + \ {'short' : 'T', 'long' : 'subtypes', 'fold' : 0}, + \ {'short' : 'r', 'long' : 'records', 'fold' : 0}, + \ {'short' : 'e', 'long' : 'entities', 'fold' : 0}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 'p', 'long' : 'procedures', 'fold' : 0} \ ] let s:known_types.vhdl = type_vhdl " Vim {{{3 let type_vim = {} let type_vim.ctagstype = 'vim' let type_vim.kinds = [ - \ 'v:variables', - \ 'f:functions', - \ 'a:autocommand groups', - \ 'c:commands', - \ 'm:maps' + \ {'short' : 'v', 'long' : 'variables', 'fold' : 1}, + \ {'short' : 'f', 'long' : 'functions', 'fold' : 0}, + \ {'short' : 'a', 'long' : 'autocommand groups', 'fold' : 1}, + \ {'short' : 'c', 'long' : 'commands', 'fold' : 0}, + \ {'short' : 'm', 'long' : 'maps', 'fold' : 0} \ ] let s:known_types.vim = type_vim " YACC {{{3 let type_yacc = {} let type_yacc.ctagstype = 'yacc' let type_yacc.kinds = [ - \ 'l:labels' + \ {'short' : 'l', 'long' : 'labels', 'fold' : 0} \ ] let s:known_types.yacc = type_yacc " }}}3 @@ -705,7 +713,7 @@ function! s:InitTypes() let i = 0 let type.kinddict = {} for kind in type.kinds - let type.kinddict[kind[0]] = i + let type.kinddict[kind.short] = i let i += 1 endfor endfor @@ -737,7 +745,21 @@ function! s:GetUserTypeDefs() " If the user only specified one of kind2scope and scope2kind use it to " generate the other one + " Also, transform the 'kind' definitions into dictionary format for def in values(defdict) + let kinds = def.kinds + let def.kinds = [] + for kind in kinds + let kindlist = split(kind, ':') + let kinddict = {'short' : kindlist[0], 'long' : kindlist[1]} + if len(kindlist) == 3 + let kinddict.kindfolds = kindlist[2] + else + let kinddict.kindfolds = 0 + endif + call add(def.kinds, kinddict) + endfor + if has_key(def, 'kind2scope') && !has_key(def, 'scope2kind') let def.scope2kind = {} for [key, value] in items(def.kind2scope) @@ -761,16 +783,18 @@ function! s:MapKeys() \ :call JumpToTag() nnoremap