# HG changeset patch # User Christian Brabandt # Date 1537106407 -7200 # Node ID 27055ad9276b95ab84fd13f8052e9efdb783964f # Parent a81c7ba518803c75307c0c4bd7564abea978201b patch 8.1.0397: no event triggered after updating diffs commit https://github.com/vim/vim/commit/e8fa05b5bc2d6d76bf5af50176a63655d00d1110 Author: Bram Moolenaar 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. diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt --- 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 diff --git a/src/diff.c b/src/diff.c --- 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); } /* diff --git a/src/fileio.c b/src/fileio.c --- 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 --- 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 --- 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 --- 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;