aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/edit.c
diff options
context:
space:
mode:
authorRom Grk <romgrk.cc@gmail.com>2020-10-19 12:27:17 -0400
committerRom Grk <romgrk.cc@gmail.com>2020-10-21 16:18:20 -0400
commitb83d8223ffee099634a4352443cb56a94ebfcc22 (patch)
tree185b78fe3292f93a24744dc36c9b081af2be0d88 /src/nvim/edit.c
parent0f590ae2a8bcebcb1398cb30997bd718d6f466e5 (diff)
downloadrneovim-b83d8223ffee099634a4352443cb56a94ebfcc22.tar.gz
rneovim-b83d8223ffee099634a4352443cb56a94ebfcc22.tar.bz2
rneovim-b83d8223ffee099634a4352443cb56a94ebfcc22.zip
implement scroll autocommand
Diffstat (limited to 'src/nvim/edit.c')
-rw-r--r--src/nvim/edit.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index de2346a9d8..447f922767 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -1482,6 +1482,31 @@ static void ins_redraw(
}
}
+ if (ready && has_event(EVENT_SCROLL)
+ && (curwin->w_last_topline != curwin->w_topline ||
+ curwin->w_last_leftcol != curwin->w_leftcol)) {
+
+ // XXX is the buf changedtick thing necessary?
+ // XXX apply_autocmds vs ins_apply_autocmds?
+ // XXX why can't we re-use normal_check_window_scrolled()?
+
+ aco_save_T aco;
+ varnumber_T tick = buf_get_changedtick(curbuf);
+
+ // save and restore curwin and curbuf, in case the autocmd changes them
+ aucmd_prepbuf(&aco, curbuf);
+ apply_autocmds(EVENT_SCROLL, NULL, NULL, false, curbuf);
+ aucmd_restbuf(&aco);
+ curbuf->b_last_changedtick_pum = buf_get_changedtick(curbuf);
+ if (tick != buf_get_changedtick(curbuf)) { // see ins_apply_autocmds()
+ u_save(curwin->w_cursor.lnum,
+ (linenr_T)(curwin->w_cursor.lnum + 1));
+ }
+
+ curwin->w_last_topline = curwin->w_topline;
+ curwin->w_last_leftcol = curwin->w_leftcol;
+ }
+
if (curwin->w_p_cole > 0 && conceal_cursor_line(curwin)
&& conceal_cursor_moved) {
redrawWinline(curwin, curwin->w_cursor.lnum);