changeset 14770:27055ad9276b v8.1.0397

patch 8.1.0397: no event triggered after updating diffs commit https://github.com/vim/vim/commit/e8fa05b5bc2d6d76bf5af50176a63655d00d1110 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Sep 16 15:48:06 2018 +0200 patch 8.1.0397: no event triggered after updating diffs Problem: No event triggered after updating diffs. Solution: Add the DiffUpdated event.
author Christian Brabandt <cb@256bit.org>
date Sun, 16 Sep 2018 16:00:07 +0200
parents a81c7ba51880
children f1b704503b03
files runtime/doc/autocmd.txt src/diff.c src/fileio.c src/testdir/test_diffmode.vim src/version.c src/vim.h
diffstat 6 files changed, 114 insertions(+), 97 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -656,6 +656,11 @@ FileChangedRO			Before making the first 
 							*E881*
 				If the number of lines changes saving for undo
 				may fail and the change will be aborted.
+							*DiffUpdated*
+DiffUpdated			After diffs have been updated.  Depending on
+				what kind of diff is being used (internal or
+				external) this can be triggered on every
+				change or when doing |:diffupdate|.
 							*DirChanged*
 DirChanged			The working directory has changed in response
 				to the |:cd| or |:lcd| commands, or as a
--- a/src/diff.c
+++ b/src/diff.c
@@ -942,6 +942,8 @@ ex_diffupdate(exarg_T *eap)	// "eap" can
     curwin->w_valid_cursor.lnum = 0;
 
     diff_redraw(TRUE);
+
+    apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
 }
 
 /*
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -7761,6 +7761,7 @@ static struct event_name
     {"CursorHoldI",	EVENT_CURSORHOLDI},
     {"CursorMoved",	EVENT_CURSORMOVED},
     {"CursorMovedI",	EVENT_CURSORMOVEDI},
+    {"DiffUpdated",	EVENT_DIFFUPDATED},
     {"DirChanged",	EVENT_DIRCHANGED},
     {"EncodingChanged",	EVENT_ENCODINGCHANGED},
     {"ExitPre",		EVENT_EXITPRE},
--- a/src/testdir/test_diffmode.vim
+++ b/src/testdir/test_diffmode.vim
@@ -4,6 +4,9 @@ source screendump.vim
 
 func Test_diff_fold_sync()
   enew!
+  let g:update_count = 0
+  au DiffUpdated * let g:update_count += 1
+
   let l = range(50)
   call setline(1, l)
   diffthis
@@ -29,6 +32,9 @@ func Test_diff_fold_sync()
   call win_gotoid(winone)
   call assert_equal(23, getcurpos()[1])
 
+  call assert_equal(1, g:update_count)
+  au! DiffUpdated
+
   windo diffoff
   close!
   set nomodified
--- a/src/version.c
+++ b/src/version.c
@@ -795,6 +795,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    397,
+/**/
     396,
 /**/
     395,
--- a/src/vim.h
+++ b/src/vim.h
@@ -1251,104 +1251,105 @@ typedef struct {
  */
 enum auto_event
 {
-    EVENT_BUFADD = 0,		/* after adding a buffer to the buffer list */
-    EVENT_BUFDELETE,		/* deleting a buffer from the buffer list */
-    EVENT_BUFENTER,		/* after entering a buffer */
-    EVENT_BUFFILEPOST,		/* after renaming a buffer */
-    EVENT_BUFFILEPRE,		/* before renaming a buffer */
-    EVENT_BUFHIDDEN,		/* just after buffer becomes hidden */
-    EVENT_BUFLEAVE,		/* before leaving a buffer */
-    EVENT_BUFNEW,		/* after creating any buffer */
-    EVENT_BUFNEWFILE,		/* when creating a buffer for a new file */
-    EVENT_BUFREADCMD,		/* read buffer using command */
-    EVENT_BUFREADPOST,		/* after reading a buffer */
-    EVENT_BUFREADPRE,		/* before reading a buffer */
-    EVENT_BUFUNLOAD,		/* just before unloading a buffer */
-    EVENT_BUFWINENTER,		/* after showing a buffer in a window */
-    EVENT_BUFWINLEAVE,		/* just after buffer removed from window */
-    EVENT_BUFWIPEOUT,		/* just before really deleting a buffer */
-    EVENT_BUFWRITECMD,		/* write buffer using command */
-    EVENT_BUFWRITEPOST,		/* after writing a buffer */
-    EVENT_BUFWRITEPRE,		/* before writing a buffer */
-    EVENT_CMDLINECHANGED,	/* command line was modified*/
-    EVENT_CMDLINEENTER,		/* after entering the command line */
-    EVENT_CMDLINELEAVE,		/* before leaving the command line */
-    EVENT_CMDUNDEFINED,		/* command undefined */
-    EVENT_CMDWINENTER,		/* after entering the cmdline window */
-    EVENT_CMDWINLEAVE,		/* before leaving the cmdline window */
-    EVENT_COLORSCHEME,		/* after loading a colorscheme */
-    EVENT_COLORSCHEMEPRE,	/* before loading a colorscheme */
-    EVENT_COMPLETEDONE,		/* after finishing insert complete */
-    EVENT_CURSORHOLD,		/* cursor in same position for a while */
-    EVENT_CURSORHOLDI,		/* idem, in Insert mode */
-    EVENT_CURSORMOVED,		/* cursor was moved */
-    EVENT_CURSORMOVEDI,		/* cursor was moved in Insert mode */
-    EVENT_DIRCHANGED,		/* after user changed directory */
-    EVENT_ENCODINGCHANGED,	/* after changing the 'encoding' option */
-    EVENT_EXITPRE,		/* before exiting */
-    EVENT_FILEAPPENDCMD,	/* append to a file using command */
-    EVENT_FILEAPPENDPOST,	/* after appending to a file */
-    EVENT_FILEAPPENDPRE,	/* before appending to a file */
-    EVENT_FILECHANGEDRO,	/* before first change to read-only file */
-    EVENT_FILECHANGEDSHELL,	/* after shell command that changed file */
-    EVENT_FILECHANGEDSHELLPOST,	/* after (not) reloading changed file */
-    EVENT_FILEREADCMD,		/* read from a file using command */
-    EVENT_FILEREADPOST,		/* after reading a file */
-    EVENT_FILEREADPRE,		/* before reading a file */
-    EVENT_FILETYPE,		/* new file type detected (user defined) */
-    EVENT_FILEWRITECMD,		/* write to a file using command */
-    EVENT_FILEWRITEPOST,	/* after writing a file */
-    EVENT_FILEWRITEPRE,		/* before writing a file */
-    EVENT_FILTERREADPOST,	/* after reading from a filter */
-    EVENT_FILTERREADPRE,	/* before reading from a filter */
-    EVENT_FILTERWRITEPOST,	/* after writing to a filter */
-    EVENT_FILTERWRITEPRE,	/* before writing to a filter */
-    EVENT_FOCUSGAINED,		/* got the focus */
-    EVENT_FOCUSLOST,		/* lost the focus to another app */
-    EVENT_FUNCUNDEFINED,	/* if calling a function which doesn't exist */
-    EVENT_GUIENTER,		/* after starting the GUI */
-    EVENT_GUIFAILED,		/* after starting the GUI failed */
-    EVENT_INSERTCHANGE,		/* when changing Insert/Replace mode */
-    EVENT_INSERTCHARPRE,	/* before inserting a char */
-    EVENT_INSERTENTER,		/* when entering Insert mode */
-    EVENT_INSERTLEAVE,		/* when leaving Insert mode */
-    EVENT_MENUPOPUP,		/* just before popup menu is displayed */
-    EVENT_OPTIONSET,		/* option was set */
-    EVENT_QUICKFIXCMDPOST,	/* after :make, :grep etc. */
-    EVENT_QUICKFIXCMDPRE,	/* before :make, :grep etc. */
-    EVENT_QUITPRE,		/* before :quit */
-    EVENT_REMOTEREPLY,		/* upon string reception from a remote vim */
-    EVENT_SESSIONLOADPOST,	/* after loading a session file */
-    EVENT_SHELLCMDPOST,		/* after ":!cmd" */
-    EVENT_SHELLFILTERPOST,	/* after ":1,2!cmd", ":w !cmd", ":r !cmd". */
-    EVENT_SOURCECMD,		/* sourcing a Vim script using command */
-    EVENT_SOURCEPRE,		/* before sourcing a Vim script */
-    EVENT_SPELLFILEMISSING,	/* spell file missing */
-    EVENT_STDINREADPOST,	/* after reading from stdin */
-    EVENT_STDINREADPRE,		/* before reading from stdin */
-    EVENT_SWAPEXISTS,		/* found existing swap file */
-    EVENT_SYNTAX,		/* syntax selected */
-    EVENT_TABCLOSED,		/* after closing a tab page */
-    EVENT_TABENTER,		/* after entering a tab page */
-    EVENT_TABLEAVE,		/* before leaving a tab page */
-    EVENT_TABNEW,		/* when entering a new tab page */
-    EVENT_TERMCHANGED,		/* after changing 'term' */
-    EVENT_TERMINALOPEN,		/* after a terminal buffer was created */
-    EVENT_TERMRESPONSE,		/* after setting "v:termresponse" */
-    EVENT_TEXTCHANGED,		/* text was modified not in Insert mode */
-    EVENT_TEXTCHANGEDI,         /* text was modified in Insert mode */
-    EVENT_TEXTCHANGEDP,         /* TextChangedI with popup menu visible */
-    EVENT_TEXTYANKPOST,		/* after some text was yanked */
-    EVENT_USER,			/* user defined autocommand */
-    EVENT_VIMENTER,		/* after starting Vim */
-    EVENT_VIMLEAVE,		/* before exiting Vim */
-    EVENT_VIMLEAVEPRE,		/* before exiting Vim and writing .viminfo */
-    EVENT_VIMRESIZED,		/* after Vim window was resized */
-    EVENT_WINENTER,		/* after entering a window */
-    EVENT_WINLEAVE,		/* before leaving a window */
-    EVENT_WINNEW,		/* when entering a new window */
+    EVENT_BUFADD = 0,		// after adding a buffer to the buffer list
+    EVENT_BUFDELETE,		// deleting a buffer from the buffer list
+    EVENT_BUFENTER,		// after entering a buffer
+    EVENT_BUFFILEPOST,		// after renaming a buffer
+    EVENT_BUFFILEPRE,		// before renaming a buffer
+    EVENT_BUFHIDDEN,		// just after buffer becomes hidden
+    EVENT_BUFLEAVE,		// before leaving a buffer
+    EVENT_BUFNEW,		// after creating any buffer
+    EVENT_BUFNEWFILE,		// when creating a buffer for a new file
+    EVENT_BUFREADCMD,		// read buffer using command
+    EVENT_BUFREADPOST,		// after reading a buffer
+    EVENT_BUFREADPRE,		// before reading a buffer
+    EVENT_BUFUNLOAD,		// just before unloading a buffer
+    EVENT_BUFWINENTER,		// after showing a buffer in a window
+    EVENT_BUFWINLEAVE,		// just after buffer removed from window
+    EVENT_BUFWIPEOUT,		// just before really deleting a buffer
+    EVENT_BUFWRITECMD,		// write buffer using command
+    EVENT_BUFWRITEPOST,		// after writing a buffer
+    EVENT_BUFWRITEPRE,		// before writing a buffer
+    EVENT_CMDLINECHANGED,	// command line was modified*/
+    EVENT_CMDLINEENTER,		// after entering the command line
+    EVENT_CMDLINELEAVE,		// before leaving the command line
+    EVENT_CMDUNDEFINED,		// command undefined
+    EVENT_CMDWINENTER,		// after entering the cmdline window
+    EVENT_CMDWINLEAVE,		// before leaving the cmdline window
+    EVENT_COLORSCHEME,		// after loading a colorscheme
+    EVENT_COLORSCHEMEPRE,	// before loading a colorscheme
+    EVENT_COMPLETEDONE,		// after finishing insert complete
+    EVENT_CURSORHOLD,		// cursor in same position for a while
+    EVENT_CURSORHOLDI,		// idem, in Insert mode
+    EVENT_CURSORMOVED,		// cursor was moved
+    EVENT_CURSORMOVEDI,		// cursor was moved in Insert mode
+    EVENT_DIFFUPDATED,		// after diffs were updated
+    EVENT_DIRCHANGED,		// after user changed directory
+    EVENT_ENCODINGCHANGED,	// after changing the 'encoding' option
+    EVENT_EXITPRE,		// before exiting
+    EVENT_FILEAPPENDCMD,	// append to a file using command
+    EVENT_FILEAPPENDPOST,	// after appending to a file
+    EVENT_FILEAPPENDPRE,	// before appending to a file
+    EVENT_FILECHANGEDRO,	// before first change to read-only file
+    EVENT_FILECHANGEDSHELL,	// after shell command that changed file
+    EVENT_FILECHANGEDSHELLPOST,	// after (not) reloading changed file
+    EVENT_FILEREADCMD,		// read from a file using command
+    EVENT_FILEREADPOST,		// after reading a file
+    EVENT_FILEREADPRE,		// before reading a file
+    EVENT_FILETYPE,		// new file type detected (user defined)
+    EVENT_FILEWRITECMD,		// write to a file using command
+    EVENT_FILEWRITEPOST,	// after writing a file
+    EVENT_FILEWRITEPRE,		// before writing a file
+    EVENT_FILTERREADPOST,	// after reading from a filter
+    EVENT_FILTERREADPRE,	// before reading from a filter
+    EVENT_FILTERWRITEPOST,	// after writing to a filter
+    EVENT_FILTERWRITEPRE,	// before writing to a filter
+    EVENT_FOCUSGAINED,		// got the focus
+    EVENT_FOCUSLOST,		// lost the focus to another app
+    EVENT_FUNCUNDEFINED,	// if calling a function which doesn't exist
+    EVENT_GUIENTER,		// after starting the GUI
+    EVENT_GUIFAILED,		// after starting the GUI failed
+    EVENT_INSERTCHANGE,		// when changing Insert/Replace mode
+    EVENT_INSERTCHARPRE,	// before inserting a char
+    EVENT_INSERTENTER,		// when entering Insert mode
+    EVENT_INSERTLEAVE,		// when leaving Insert mode
+    EVENT_MENUPOPUP,		// just before popup menu is displayed
+    EVENT_OPTIONSET,		// option was set
+    EVENT_QUICKFIXCMDPOST,	// after :make, :grep etc.
+    EVENT_QUICKFIXCMDPRE,	// before :make, :grep etc.
+    EVENT_QUITPRE,		// before :quit
+    EVENT_REMOTEREPLY,		// upon string reception from a remote vim
+    EVENT_SESSIONLOADPOST,	// after loading a session file
+    EVENT_SHELLCMDPOST,		// after ":!cmd"
+    EVENT_SHELLFILTERPOST,	// after ":1,2!cmd", ":w !cmd", ":r !cmd".
+    EVENT_SOURCECMD,		// sourcing a Vim script using command
+    EVENT_SOURCEPRE,		// before sourcing a Vim script
+    EVENT_SPELLFILEMISSING,	// spell file missing
+    EVENT_STDINREADPOST,	// after reading from stdin
+    EVENT_STDINREADPRE,		// before reading from stdin
+    EVENT_SWAPEXISTS,		// found existing swap file
+    EVENT_SYNTAX,		// syntax selected
+    EVENT_TABCLOSED,		// after closing a tab page
+    EVENT_TABENTER,		// after entering a tab page
+    EVENT_TABLEAVE,		// before leaving a tab page
+    EVENT_TABNEW,		// when entering a new tab page
+    EVENT_TERMCHANGED,		// after changing 'term'
+    EVENT_TERMINALOPEN,		// after a terminal buffer was created
+    EVENT_TERMRESPONSE,		// after setting "v:termresponse"
+    EVENT_TEXTCHANGED,		// text was modified not in Insert mode
+    EVENT_TEXTCHANGEDI,         // text was modified in Insert mode
+    EVENT_TEXTCHANGEDP,         // TextChangedI with popup menu visible
+    EVENT_TEXTYANKPOST,		// after some text was yanked
+    EVENT_USER,			// user defined autocommand
+    EVENT_VIMENTER,		// after starting Vim
+    EVENT_VIMLEAVE,		// before exiting Vim
+    EVENT_VIMLEAVEPRE,		// before exiting Vim and writing .viminfo
+    EVENT_VIMRESIZED,		// after Vim window was resized
+    EVENT_WINENTER,		// after entering a window
+    EVENT_WINLEAVE,		// before leaving a window
+    EVENT_WINNEW,		// when entering a new window
 
-    NUM_EVENTS			/* MUST be the last one */
+    NUM_EVENTS			// MUST be the last one
 };
 
 typedef enum auto_event event_T;