tvi: center the current line for long jumps - neatvi - [fork] simple vi-type editor with UTF-8 support (HTM) git clone git://src.adamsgaard.dk/neatvi (DIR) Log (DIR) Files (DIR) Refs (DIR) README --- (DIR) commit 69f88a475e1d3633b0f944a1917ba7cc74da823a (DIR) parent 9724b248644e35bd73ecf9fa0a2adae08f372f14 (HTM) Author: Ali Gholami Rudi <ali@rudi.ir> Date: Mon, 18 May 2015 17:09:46 +0430 vi: center the current line for long jumps Diffstat: M vi.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) --- (DIR) diff --git a/vi.c b/vi.c t@@ -1025,6 +1025,7 @@ static void vi(void) int redraw = 0; int nrow = xrow; int ncol = ren_noeol(lbuf_get(xb, xrow), xcol); + int otop = xtop; int mv, n; vi_arg2 = 0; vi_ybuf = vi_yankbuf(); t@@ -1197,11 +1198,13 @@ static void vi(void) } if (xrow < 0 || xrow >= lbuf_len(xb)) xrow = lbuf_len(xb) ? lbuf_len(xb) - 1 : 0; - if (xrow < xtop || xrow >= xtop + xrows) { - xtop = xrow < xtop ? xrow : MAX(0, xrow - xrows + 1); - redraw = 1; - } - if (redraw) + if (xtop > xrow) + xtop = xtop - xrows / 2 > xrow ? + MAX(0, xrow - xrows / 2) : xrow; + if (xtop + xrows <= xrow) + xtop = xtop + xrows + xrows / 2 <= xrow ? + xrow - xrows / 2 : xrow - xrows + 1; + if (redraw || xtop != otop) vi_draw(); if (xmsg[0]) vi_drawmsg();