# HG changeset patch # User Ludovic Chabant # Date 1437027339 25200 # Node ID 3ae6964078ab9fde864855ca763379190ad0ee43 # Parent 0f5b4a36c920fd10649329d153a43b308835eb04# Parent 547df6917df9f0ccccad3353184bc325e2b89bb2 Merge pull request #30 from GitHub. diff -r 547df6917df9 -r 3ae6964078ab autoload/gutentags.vim --- a/autoload/gutentags.vim Mon Jun 01 14:15:04 2015 +0200 +++ b/autoload/gutentags.vim Wed Jul 15 23:15:39 2015 -0700 @@ -95,6 +95,13 @@ return endif + " Don't setup gutentags for anything that's not a normal buffer + " (so don't do anything for help buffers and quickfix windows and + " other such things) + if &buftype != '' + return + endif + " Try and find what tags file we should manage. call gutentags#trace("Scanning buffer '" . bufname('%') . "' for gutentags setup...") try diff -r 547df6917df9 -r 3ae6964078ab autoload/gutentags/ctags.vim --- a/autoload/gutentags/ctags.vim Mon Jun 01 14:15:04 2015 +0200 +++ b/autoload/gutentags/ctags.vim Wed Jul 15 23:15:39 2015 -0700 @@ -14,6 +14,10 @@ let g:gutentags_auto_set_tags = 1 endif +if !exists('g:gutentags_ctags_options_file') + let g:gutentags_ctags_options_file = '.gutctags' +endif + " }}} " Gutentags Module Interface {{{ @@ -57,8 +61,11 @@ if g:gutentags_pause_after_update let l:cmd .= ' -c' endif - let l:proj_options_file = a:proj_dir . '/.ctags' + let l:proj_options_file = a:proj_dir . '/' . + \g:gutentags_ctags_options_file if filereadable(l:proj_options_file) + let l:proj_options_file = s:process_options_file( + \a:proj_dir, l:proj_options_file) let l:cmd .= ' -o "' . l:proj_options_file . '"' endif if g:gutentags_trace @@ -99,3 +106,58 @@ " }}} +" Utilities {{{ + +function! s:process_options_file(proj_dir, path) abort + if g:gutentags_cache_dir == "" + " If we're not using a cache directory to store tag files, we can + " use the options file straight away. + return a:path + endif + + " See if we need to process the options file. + let l:do_process = 0 + let l:proj_dir = gutentags#stripslash(a:proj_dir) + let l:out_path = gutentags#get_cachefile(l:proj_dir, 'options') + if !filereadable(l:out_path) + call gutentags#trace("Processing options file '".a:path."' because ". + \"it hasn't been processed yet.") + let l:do_process = 1 + elseif getftime(a:path) > getftime(l:out_path) + call gutentags#trace("Processing options file '".a:path."' because ". + \"it has changed.") + let l:do_process = 1 + endif + if l:do_process == 0 + " Nothing's changed, return the existing processed version of the + " options file. + return l:out_path + endif + + " We have to process the options file. Right now this only means capturing + " all the 'exclude' rules, and rewrite them to make them absolute. + " + " This is because since `ctags` is run with absolute paths (because we + " want the tag file to be in a cache directory), it will do its path + " matching with absolute paths too, so the exclude rules need to be + " absolute. + let l:lines = readfile(a:path) + let l:outlines = [] + for line in l:lines + let l:exarg = matchend(line, '\v^\-\-exclude=') + if l:exarg < 0 + call add(l:outlines, line) + continue + endif + let l:fullp = gutentags#normalizepath(l:proj_dir.'/'. + \strpart(line, l:exarg + 1)) + let l:ol = '--exclude='.l:fullp + call add(l:outlines, l:ol) + endfor + + call writefile(l:outlines, l:out_path) + return l:out_path +endfunction + +" }}} + diff -r 547df6917df9 -r 3ae6964078ab doc/gutentags.txt --- a/doc/gutentags.txt Mon Jun 01 14:15:04 2015 +0200 +++ b/doc/gutentags.txt Wed Jul 15 23:15:39 2015 -0700 @@ -279,6 +279,20 @@ |GutentagsUpdate| or |GutentagsGenerate| is run. Defaults to 1. + *gutentags_generate_on_new* +g:gutentags_generate_on_new + If set to 1, Gutentags will start generating the tag + file when a new project is open. A new project is + considered open when a buffer is created for a file + whose corresponding tag file has not been "seen" yet + in the current Vim session -- which pretty much means + when you open the first file in a given source control + repository. + When set to 0, Gutentags won't do anything special. + See also |gutentags_generate_on_missing| and + |gutentags_generate_on_write|. + Defaults to 1. + *gutentags_generate_on_write* g:gutentags_generate_on_write If set to 1, Gutentags will update the current