summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2018-09-16 15:48:06 +0200
committerBram Moolenaar <Bram@vim.org>2018-09-16 15:48:06 +0200
commite8fa05b5bc2d6d76bf5af50176a63655d00d1110 (patch)
treef044f8dd892e26a8edec54754043668b64b512ca
parent42c63356d774bbfe91712197e8969f60de828a32 (diff)
downloadvim-git-e8fa05b5bc2d6d76bf5af50176a63655d00d1110.tar.gz
patch 8.1.0397: no event triggered after updating diffsv8.1.0397
Problem: No event triggered after updating diffs. Solution: Add the DiffUpdated event.
-rw-r--r--runtime/doc/autocmd.txt5
-rw-r--r--src/diff.c2
-rw-r--r--src/fileio.c1
-rw-r--r--src/testdir/test_diffmode.vim6
-rw-r--r--src/version.c2
-rw-r--r--src/vim.h197
6 files changed, 115 insertions, 98 deletions
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 7b5913042..621e3edbe 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -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
diff --git a/src/diff.c b/src/diff.c
index 02f1c3325..809694a68 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -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);
}
/*
diff --git a/src/fileio.c b/src/fileio.c
index d7e05bfbe..93dbf0c69 100644
--- 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},
diff --git a/src/testdir/test_diffmode.vim b/src/testdir/test_diffmode.vim
index 5ee22e25c..1deb23873 100644
--- 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
diff --git a/src/version.c b/src/version.c
index d207e9458..726e10274 100644
--- 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,
diff --git a/src/vim.h b/src/vim.h
index c30e8db88..1210db503 100644
--- 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;