Introduction
Introduction Statistics Contact Development Disclaimer Help
tvi: ^ motion - neatvi - [fork] simple vi-type editor with UTF-8 support
git clone git://src.adamsgaard.dk/neatvi
Log
Files
Refs
README
---
commit 0b878c42f286e746c004dbd23127ed0fda2bf553
parent 03dbd564421f1a855bba75c78b67687460e3b3f6
Author: Ali Gholami Rudi <[email protected]>
Date: Sun, 3 May 2015 18:41:24 +0430
vi: ^ motion
Diffstat:
M vi.c | 33 +++++++++++++++++++++++++----…
1 file changed, 27 insertions(+), 6 deletions(-)
---
diff --git a/vi.c b/vi.c
t@@ -66,7 +66,7 @@ static int vi_prefix(void)
static int lbuf_lnnext(struct lbuf *lb, int *r, int *c, int dir)
{
char *ln = lbuf_get(lb, *r);
- int col = ren_next(ln, *c, dir);
+ int col = ln ? ren_next(ln, *c, dir) : -1;
if (col < 0)
return -1;
*c = col;
t@@ -113,12 +113,28 @@ static char *lbuf_chr(struct lbuf *lb, int r, int c)
return "";
}
+static int lbuf_indents(struct lbuf *lb, int r)
+{
+ char *ln = lbuf_get(lb, r);
+ int n;
+ char **chrs;
+ int i = 0;
+ if (!ln)
+ return 0;
+ chrs = uc_chop(ln ? ln : "", &n);
+ while (i < n && chrs[i][0] != '\n' && uc_isspace(chrs[i]))
+ i++;
+ free(chrs);
+ return i;
+}
+
static void lbuf_postindents(struct lbuf *lb, int *r, int *c)
{
- lbuf_eol(lb, r, c, -1);
- while (uc_isspace(lbuf_chr(lb, *r, *c)))
- if (lbuf_lnnext(lb, r, c, +1))
- break;
+ char *ln = lbuf_get(lb, *r);
+ if (ln)
+ *c = ren_pos(ln, lbuf_indents(lb, *r));
+ else
+ lbuf_eol(lb, r, c, -1);
}
static void lbuf_findchar(struct lbuf *lb, int *row, int *col, char *cs, int d…
t@@ -329,6 +345,9 @@ static int vi_motion(int *row, int *col, int pre1, int pre…
case '0':
lbuf_eol(xb, row, col, -1);
break;
+ case '^':
+ lbuf_postindents(xb, row, col);
+ break;
case '$':
lbuf_eol(xb, row, col, +1);
lbuf_lnnext(xb, row, col, -1);
t@@ -402,7 +421,7 @@ static void vc_motion(int c, int pre1)
lbuf_eol(xb, &r1, &c1, -1);
lbuf_eol(xb, &r2, &c2, +1);
} else if ((mv = vi_motion(&r2, &c2, pre1, pre2))) {
- if (strchr("0bBhlwW ", mv))
+ if (strchr("^0bBhlwW ", mv))
closed = 0;
} else {
return;
t@@ -516,6 +535,7 @@ static void vi(void)
case TERMCTRL('b'):
xtop = MAX(0, xtop - xrows + 1);
xrow = xtop + xrows - 1;
+ lbuf_postindents(xb, &xrow, &xcol);
redraw = 1;
break;
case TERMCTRL('f'):
t@@ -524,6 +544,7 @@ static void vi(void)
else
xtop = 0;
xrow = xtop;
+ lbuf_postindents(xb, &xrow, &xcol);
redraw = 1;
break;
case TERMCTRL('r'):
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.