diff options
author | Rom Grk <romgrk.cc@gmail.com> | 2020-10-19 12:27:17 -0400 |
---|---|---|
committer | Rom Grk <romgrk.cc@gmail.com> | 2020-10-21 16:18:20 -0400 |
commit | b83d8223ffee099634a4352443cb56a94ebfcc22 (patch) | |
tree | 185b78fe3292f93a24744dc36c9b081af2be0d88 /src/nvim/edit.c | |
parent | 0f590ae2a8bcebcb1398cb30997bd718d6f466e5 (diff) | |
download | rneovim-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.c | 25 |
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); |