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();