]> granicus.if.org Git - vim/commitdiff
patch 8.1.0397: no event triggered after updating diffs v8.1.0397
authorBram Moolenaar <Bram@vim.org>
Sun, 16 Sep 2018 13:48:06 +0000 (15:48 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 16 Sep 2018 13:48:06 +0000 (15:48 +0200)
Problem:    No event triggered after updating diffs.
Solution:   Add the DiffUpdated event.

runtime/doc/autocmd.txt
src/diff.c
src/fileio.c
src/testdir/test_diffmode.vim
src/version.c
src/vim.h

index 7b5913042e161d77eb81ad00df8d87257cea7ad2..621e3edbe27e17fd697cb0574e45ec8da955ad22 100644 (file)
@@ -656,6 +656,11 @@ FileChangedRO                      Before making the first change to a read-only
                                                        *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
index 02f1c332560ce3ba366e9edc0a641bb8fa8bdd81..809694a68c21e7fce022a7ab6f9ed8f54668a120 100644 (file)
@@ -942,6 +942,8 @@ ex_diffupdate(exarg_T *eap) // "eap" can be NULL
     curwin->w_valid_cursor.lnum = 0;
 
     diff_redraw(TRUE);
+
+    apply_autocmds(EVENT_DIFFUPDATED, NULL, NULL, FALSE, curbuf);
 }
 
 /*
index d7e05bfbe03c17ac342829ade366fcc3feb5d369..93dbf0c6990099ac25a7d5de7aff004f5b14d52b 100644 (file)
@@ -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},
index 5ee22e25cde55c5205a4f8e4a9ced8de03a5d6a2..1deb238735c9d4f836a3c9c0db383e031377fc45 100644 (file)
@@ -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
index d207e945826f3f488d5b02a840e0c2968c78a265..726e102746a28b232d18bad91e35a63d81eb06eb 100644 (file)
@@ -794,6 +794,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    397,
 /**/
     396,
 /**/
index c30e8db880a9de89b24bd8a8d7ea5b7bebe702fe..1210db5034c730b8046439d6a7e1da96e795063c 100644 (file)
--- 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 */
-
-    NUM_EVENTS                 /* MUST be the last one */
+    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
 };
 
 typedef enum auto_event event_T;