Merge #9807 from mhinz/window-local-last-cursormoved

This commit is contained in:
Marco Hinz 2019-03-31 15:13:38 +02:00 committed by GitHub
commit 4c4a570156
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 46 additions and 10 deletions

View File

@ -1035,6 +1035,7 @@ struct window_S {
// current virtual column // current virtual column
linenr_T w_last_cursorline; ///< where last 'cursorline' was drawn linenr_T w_last_cursorline; ///< where last 'cursorline' was drawn
pos_T w_last_cursormoved; ///< for CursorMoved event
// the next seven are used to update the visual part // the next seven are used to update the visual part
char w_old_visual_mode; ///< last known VIsual_mode char w_old_visual_mode; ///< last known VIsual_mode

View File

@ -1398,7 +1398,7 @@ ins_redraw (
// Trigger CursorMoved if the cursor moved. Not when the popup menu is // Trigger CursorMoved if the cursor moved. Not when the popup menu is
// visible, the command might delete it. // visible, the command might delete it.
if (ready && (has_event(EVENT_CURSORMOVEDI) || curwin->w_p_cole > 0) if (ready && (has_event(EVENT_CURSORMOVEDI) || curwin->w_p_cole > 0)
&& !equalpos(last_cursormoved, curwin->w_cursor) && !equalpos(curwin->w_last_cursormoved, curwin->w_cursor)
&& !pum_visible()) { && !pum_visible()) {
// Need to update the screen first, to make sure syntax // Need to update the screen first, to make sure syntax
// highlighting is correct after making a change (e.g., inserting // highlighting is correct after making a change (e.g., inserting
@ -1414,7 +1414,7 @@ ins_redraw (
ins_apply_autocmds(EVENT_CURSORMOVEDI); ins_apply_autocmds(EVENT_CURSORMOVEDI);
} }
conceal_cursor_moved = true; conceal_cursor_moved = true;
last_cursormoved = curwin->w_cursor; curwin->w_last_cursormoved = curwin->w_cursor;
} }
// Trigger TextChangedI if changedtick differs. // Trigger TextChangedI if changedtick differs.

View File

@ -788,8 +788,6 @@ EXTERN char_u *autocmd_fname INIT(= NULL); // fname for <afile> on cmdline
EXTERN int autocmd_bufnr INIT(= 0); // fnum for <abuf> on cmdline EXTERN int autocmd_bufnr INIT(= 0); // fnum for <abuf> on cmdline
EXTERN char_u *autocmd_match INIT(= NULL); // name for <amatch> on cmdline EXTERN char_u *autocmd_match INIT(= NULL); // name for <amatch> on cmdline
EXTERN int did_cursorhold INIT(= false); // set when CursorHold t'gerd EXTERN int did_cursorhold INIT(= false); // set when CursorHold t'gerd
// for CursorMoved event
EXTERN pos_T last_cursormoved INIT(= { 0, 0, 0 });
EXTERN int postponed_split INIT(= 0); /* for CTRL-W CTRL-] command */ EXTERN int postponed_split INIT(= 0); /* for CTRL-W CTRL-] command */
EXTERN int postponed_split_flags INIT(= 0); /* args for win_split() */ EXTERN int postponed_split_flags INIT(= 0); /* args for win_split() */

View File

@ -2175,7 +2175,7 @@ static void changed_common(linenr_T lnum, colnr_T col, linenr_T lnume, long xtra
/* when the cursor line is changed always trigger CursorMoved */ /* when the cursor line is changed always trigger CursorMoved */
if (lnum <= curwin->w_cursor.lnum if (lnum <= curwin->w_cursor.lnum
&& lnume + (xtra < 0 ? -xtra : xtra) > curwin->w_cursor.lnum) && lnume + (xtra < 0 ? -xtra : xtra) > curwin->w_cursor.lnum)
last_cursormoved.lnum = 0; curwin->w_last_cursormoved.lnum = 0;
} }
/* /*

View File

@ -1187,12 +1187,12 @@ static void normal_check_cursor_moved(NormalState *s)
{ {
// Trigger CursorMoved if the cursor moved. // Trigger CursorMoved if the cursor moved.
if (!finish_op && (has_event(EVENT_CURSORMOVED) || curwin->w_p_cole > 0) if (!finish_op && (has_event(EVENT_CURSORMOVED) || curwin->w_p_cole > 0)
&& !equalpos(last_cursormoved, curwin->w_cursor)) { && !equalpos(curwin->w_last_cursormoved, curwin->w_cursor)) {
if (has_event(EVENT_CURSORMOVED)) { if (has_event(EVENT_CURSORMOVED)) {
apply_autocmds(EVENT_CURSORMOVED, NULL, NULL, false, curbuf); apply_autocmds(EVENT_CURSORMOVED, NULL, NULL, false, curbuf);
} }
last_cursormoved = curwin->w_cursor; curwin->w_last_cursormoved = curwin->w_cursor;
} }
} }

View File

@ -4256,9 +4256,12 @@ static void win_enter_ext(win_T *wp, bool undo_sync, int curwin_invalid,
apply_autocmds(EVENT_WINNEW, NULL, NULL, false, curbuf); apply_autocmds(EVENT_WINNEW, NULL, NULL, false, curbuf);
} }
if (trigger_enter_autocmds) { if (trigger_enter_autocmds) {
apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf); apply_autocmds(EVENT_WINENTER, NULL, NULL, false, curbuf);
if (other_buffer) if (other_buffer) {
apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf); apply_autocmds(EVENT_BUFENTER, NULL, NULL, false, curbuf);
}
apply_autocmds(EVENT_CURSORMOVED, NULL, NULL, false, curbuf);
curwin->w_last_cursormoved = curwin->w_cursor;
} }
maketitle(); maketitle();

View File

@ -0,0 +1,34 @@
local helpers = require('test.functional.helpers')(after_each)
local clear = helpers.clear
local eq = helpers.eq
local eval = helpers.eval
local funcs = helpers.funcs
local source = helpers.source
describe('CursorMoved', function()
before_each(clear)
it('is triggered by changing windows', function()
source([[
let g:cursormoved = 0
vsplit
autocmd CursorMoved * let g:cursormoved += 1
wincmd w
wincmd w
]])
eq(2, eval('g:cursormoved'))
end)
it("is not triggered by functions that don't change the window", function()
source([[
let g:cursormoved = 0
let g:buf = bufnr('%')
vsplit foo
autocmd CursorMoved * let g:cursormoved += 1
call nvim_buf_set_lines(g:buf, 0, -1, v:true, ['aaa'])
]])
eq({'aaa'}, funcs.nvim_buf_get_lines(eval('g:buf'), 0, -1, true))
eq(0, eval('g:cursormoved'))
end)
end)