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;