# HG changeset patch # User Ludovic Chabant # Date 1437108052 25200 # Node ID 6900302dae0b6ce9fe63260b00e3a1f9733e84b0 # Parent 3ae6964078ab9fde864855ca763379190ad0ee43# Parent ca61487b3215f47f188deb6abc6f0e8ab6e0f6e5 Merge pull request #28 from GitHub. diff -r ca61487b3215 -r 6900302dae0b autoload/gutentags.vim --- a/autoload/gutentags.vim Sun May 17 10:53:41 2015 +0200 +++ b/autoload/gutentags.vim Thu Jul 16 21:40:52 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 ca61487b3215 -r 6900302dae0b autoload/gutentags/ctags.vim --- a/autoload/gutentags/ctags.vim Sun May 17 10:53:41 2015 +0200 +++ b/autoload/gutentags/ctags.vim Thu Jul 16 21:40:52 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 ca61487b3215 -r 6900302dae0b doc/gutentags.txt --- a/doc/gutentags.txt Sun May 17 10:53:41 2015 +0200 +++ b/doc/gutentags.txt Thu Jul 16 21:40:52 2015 -0700 @@ -288,6 +288,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 diff -r ca61487b3215 -r 6900302dae0b plat/unix/update_tags.sh --- a/plat/unix/update_tags.sh Sun May 17 10:53:41 2015 +0200 +++ b/plat/unix/update_tags.sh Thu Jul 16 21:40:52 2015 -0700 @@ -67,7 +67,7 @@ echo $$ > "$TAGS_FILE.lock" # Remove lock and temp file if script is stopped unexpectedly. -trap "rm -f \"$TAGS_FILE.lock\" \"$TAGS_FILE.temp\"" 0 3 4 15 +trap "errorcode=$?; rm -f \"$TAGS_FILE.lock\" \"$TAGS_FILE.temp\"; exit $errorcode" INT TERM EXIT if [ -f "$TAGS_FILE" ]; then if [ "$UPDATED_SOURCE" != "" ]; then