Den onsdag 3 februari 2016 kl. 14:04:46 UTC+1 skrev Anton Lindqvist:
> Hi,
> This patch add a autocmd event called TagNotFound triggered when the requested
> tag was not found. The motivation for this event is as follows: I usually add
> the following to my vimrc in order to ensure my tags file is up-to-date:
> 
>   au BufWritePost * if filereadable('tags') | silent exe '!ctags -a %' | endif
> 
> However this seems wasteful since the majority of my writes don't include new
> identifiers to be indexed. With this patch the command above could be replaced
> with:
> 
>   au TagNotFound * if filereadable('tags') | silent exe '!ctags' | endif
> 
> Thus indexing would only be performed when a missing tag is requested. 
> 
> Another use-case for this new event would be to trigger a psearch when the tag
> was not found:
> 
>   au TagNotFound * exe 'psearch /' . expand('<amatch>') . '/'
> 
> BTW: what's the recommended cinoptions for the Vim codebase?

A unintentional change to one of the Makefile was present in the patch. See the 
attached revised patch.

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 4de5b16..06f1578 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -284,6 +284,7 @@ Name			triggered by ~
 |SpellFileMissing|	a spell file is used but it can't be found
 |SourcePre|		before sourcing a Vim script
 |SourceCmd|		before sourcing a Vim script |Cmd-event|
+|TagNotFound|		the tag was not found in the tag file(s)
 
 |VimResized|		after the Vim window size changed
 |FocusGained|		Vim got input focus
@@ -879,6 +880,10 @@ TabEnter			Just after entering a tab page. |tab-page|
 TabLeave			Just before leaving a tab page. |tab-page|
 				A WinLeave event will have been triggered
 				first.
+							*TagNotFound*
+TagNotFound			When the requested tag was not found in the
+				tag file(s). The pattern is matched against
+				the tag name. <amatch> is the tag name.
 							*TermChanged*
 TermChanged			After the value of 'term' has changed.  Useful
 				for re-loading the syntax file to update the
diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
index 8186678..55d8d97 100644
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -820,7 +820,8 @@ Note: these are typed literally, they are not special keys!
 	<amatch>   When executing autocommands, is replaced with the match for
 		   which this autocommand was executed.  It differs from
 		   <afile> only when the file name isn't used to match with
-		   (for FileType, Syntax and SpellFileMissing events).
+		   (for FileType, Syntax, SpellFileMissing and TagNotFound
+		   events).
 	<sfile>    When executing a ":source" command, is replaced with the
 		   file name of the sourced file.  *E498*
 		   When executing a function, is replaced with:
diff --git a/src/fileio.c b/src/fileio.c
index ecec757..fa2ec72 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -7711,6 +7711,7 @@ static struct event_name
     {"Syntax",		EVENT_SYNTAX},
     {"TabEnter",	EVENT_TABENTER},
     {"TabLeave",	EVENT_TABLEAVE},
+    {"TagNotFound",	EVENT_TAGNOTFOUND},
     {"TermChanged",	EVENT_TERMCHANGED},
     {"TermResponse",	EVENT_TERMRESPONSE},
     {"TextChanged",	EVENT_TEXTCHANGED},
@@ -9357,6 +9358,7 @@ apply_autocmds_group(
 		|| event == EVENT_FUNCUNDEFINED
 		|| event == EVENT_REMOTEREPLY
 		|| event == EVENT_SPELLFILEMISSING
+		|| event == EVENT_TAGNOTFOUND
 		|| event == EVENT_QUICKFIXCMDPRE
 		|| event == EVENT_COLORSCHEME
 		|| event == EVENT_OPTIONSET
diff --git a/src/tag.c b/src/tag.c
index d2fdee6..b24212e 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -569,6 +569,10 @@ do_tag(
 
 	if (num_matches <= 0)
 	{
+#ifdef FEAT_AUTOCMD
+	    apply_autocmds(EVENT_TAGNOTFOUND, name, curbuf->b_fname,
+			   FALSE, curbuf);
+#endif
 	    if (verbose)
 		EMSG2(_("E426: tag not found: %s"), name);
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
diff --git a/src/vim.h b/src/vim.h
index 18610f5..80491d0 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -1314,6 +1314,7 @@ enum auto_event
     EVENT_TEXTCHANGEDI,		/* text was modified in Insert mode*/
     EVENT_CMDUNDEFINED,		/* command undefined */
     EVENT_OPTIONSET,		/* option was set */
+    EVENT_TAGNOTFOUND,		/* tag not found */
     NUM_EVENTS			/* MUST be the last one */
 };
 

Raspunde prin e-mail lui