tvi: ^E and ^Y commands - 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 1211e16126a16bac24629d9810462a22a722e75c (DIR) parent bc9dd7dfbc434e6260ca5002cbc6501ced9adcb6 (HTM) Author: Ali Gholami Rudi <ali@rudi.ir> Date: Tue, 12 May 2015 18:11:27 +0430 vi: ^E and ^Y commands Diffstat: M vi.c | 36 ++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) --- (DIR) diff --git a/vi.c b/vi.c t@@ -611,6 +611,24 @@ static void vc_join(int arg) sbuf_free(sb); } +static int vi_scrollforeward(int cnt) +{ + if (xtop >= lbuf_len(xb) - 1) + return 1; + xtop = MIN(lbuf_len(xb) - 1, xtop + cnt); + xrow = MAX(xrow, xtop); + return 0; +} + +static int vi_scrollbackward(int cnt) +{ + if (xtop == 0) + return 1; + xtop = MAX(0, xtop - cnt); + xrow = MIN(xrow, xtop + xrows - 1); + return 0; +} + static void vi(void) { int mark; t@@ -643,21 +661,27 @@ static void vi(void) redraw = 1; break; case TERMCTRL('b'): - if (xtop == 0) + if (vi_scrollbackward((pre1 ? pre1 : 1) * (xrows - 1))) break; - xtop = MAX(0, xtop - xrows + 1); - xrow = MIN(xrow, xtop + xrows - 1); lbuf_postindents(xb, &xrow, &xcol); redraw = 1; break; case TERMCTRL('f'): - if (xtop >= lbuf_len(xb) - 1) + if (vi_scrollforeward((pre1 ? pre1 : 1) * (xrows - 1))) break; - xtop = MIN(lbuf_len(xb) - 1, xtop + xrows - 1); - xrow = MAX(xrow, xtop); lbuf_postindents(xb, &xrow, &xcol); redraw = 1; break; + case TERMCTRL('e'): + if (vi_scrollforeward((pre1 ? pre1 : 1))) + break; + redraw = 1; + break; + case TERMCTRL('y'): + if (vi_scrollbackward((pre1 ? pre1 : 1))) + break; + redraw = 1; + break; case TERMCTRL('r'): lbuf_redo(xb); redraw = 1;