From d727ac0cb7b03747d0688d939210af07da4cad60 Mon Sep 17 00:00:00 2001 From: Kenny Stuart Date: Fri, 24 Jun 2011 02:23:48 +0200 Subject: Allow enabling both dynamic and file type tags files When both options are enabled, project specific tags files take precedence if they exist and are writable, otherwise a file type tags file is used. (Stuart wrote this code, Peter added the check for supported file types) --- README.md | 4 ++++ autoload/xolox/easytags.vim | 19 ++++++++++++------- doc/easytags.txt | 9 +++++++++ plugin/easytags.vim | 4 ++-- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f8524b5..870c928 100644 --- a/README.md +++ b/README.md @@ -66,12 +66,16 @@ You can enable this option so that the project specific tags files are written i When you enable this option, the easytags plug-in will use the first filename returned by [tagfiles()](http://vimdoc.sourceforge.net/htmldoc/eval.html#tagfiles%28%29) as the tags file to write. Note that `tagfiles()` is reevaluated every time the plug-in runs. +If you've also enabled `g:easytags_by_filetype` the project specific tags file must exist, even if it's empty; otherwise `g:easytags_by_filetype` will take precedence. + ### The `g:easytags_by_filetype` option By default all tags are stored in a global tags file. When the tags file grows beyond a certain size Vim will be slowed down by the easytags plug-in because it has to read and process a large number of tags very frequently. To avoid this problem you can set `g:easytags_by_filetype` to the path of an existing directory. The easytags plug-in will create separate tags files for each file type in the configured directory. These tags files are automatically registered by the easytags plug-in when the file type of a buffer is set. +If you've also enabled `g:easytags_dynamic_files` and the project specific tags file exists, and is writable, it will take precedence. If the project specific tags file doesn't exist you can indicate you want to use project specific tags by creating it. + Note that if you already have a global tags file you can create file type specific tags files from the global tags file using the command `:TagsByFileType`. ### The `g:easytags_always_enabled` option diff --git a/autoload/xolox/easytags.vim b/autoload/xolox/easytags.vim index e9944c9..6a1de96 100644 --- a/autoload/xolox/easytags.vim +++ b/autoload/xolox/easytags.vim @@ -1,6 +1,6 @@ " Vim script " Author: Peter Odding -" Last Change: June 18, 2011 +" Last Change: June 24, 2011 " URL: http://peterodding.com/code/vim/easytags/ " Public interface through (automatic) commands. {{{1 @@ -483,16 +483,21 @@ function! s:cache_tagged_files_in(fname, ftime, entries) " {{{3 endfunction function! xolox#easytags#get_tagsfile() " {{{2 + " Look for a writable project specific tags file? + if g:easytags_dynamic_files + let files = tagfiles() + if len(files) > 0 && filewritable(files[0]) == 1 + return files[0] + endif + endif + " Default to the global tags file. let tagsfile = expand(g:easytags_file) - if !empty(g:easytags_by_filetype) && !empty(&filetype) + " Check if a file type specific tags file is useful? + if !empty(g:easytags_by_filetype) && index(xolox#easytags#supported_filetypes(), &ft) >= 0 let directory = xolox#misc#path#absolute(g:easytags_by_filetype) let tagsfile = xolox#misc#path#merge(directory, &filetype) - elseif g:easytags_dynamic_files - let files = tagfiles() - if len(files) > 0 - let tagsfile = files[0] - endif endif + " If the tags file exists, make sure it is writable! if filereadable(tagsfile) && filewritable(tagsfile) != 1 let message = "The tags file %s isn't writable!" throw printf(message, fnamemodify(tagsfile, ':~')) diff --git a/doc/easytags.txt b/doc/easytags.txt index 852716f..3269541 100644 --- a/doc/easytags.txt +++ b/doc/easytags.txt @@ -139,6 +139,10 @@ When you enable this option, the easytags plug-in will use the first filename returned by |tagfiles()| as the tags file to write. Note that 'tagfiles()' is reevaluated every time the plug-in runs. +If you've also enabled |g:easytags_by_filetype| the project specific tags file +must exist, even if it's empty; otherwise |g:easytags_by_filetype| will take +precedence. + ------------------------------------------------------------------------------- The *g:easytags_by_filetype* option @@ -151,6 +155,11 @@ existing directory. The easytags plug-in will create separate tags files for each file type in the configured directory. These tags files are automatically registered by the easytags plug-in when the file type of a buffer is set. +If you've also enabled |g:easytags_dynamic_files| and the project specific +tags file exists, and is writable, it will take precedence. If the project +specific tags file doesn't exist you can indicate you want to use project +specific tags by creating it. + Note that if you already have a global tags file you can create file type specific tags files from the global tags file using the command ':TagsByFileType'. diff --git a/plugin/easytags.vim b/plugin/easytags.vim index d2c3740..7590dcd 100644 --- a/plugin/easytags.vim +++ b/plugin/easytags.vim @@ -1,6 +1,6 @@ " Vim plug-in " Author: Peter Odding -" Last Change: June 18, 2011 +" Last Change: June 24, 2011 " URL: http://peterodding.com/code/vim/easytags/ " Requires: Exuberant Ctags (http://ctags.sf.net) @@ -12,7 +12,7 @@ if &cp || exists('g:loaded_easytags') finish endif -let g:easytags_version = '2.4.3' +let g:easytags_version = '2.4.4' " Configuration defaults and initialization. {{{1 -- cgit v1.2.3