tvi: ignore failed motions - neatvi - [fork] simple vi-type editor with UTF-8 s… | |
git clone git://src.adamsgaard.dk/neatvi | |
Log | |
Files | |
Refs | |
README | |
--- | |
commit 935b8d71369e450e05f330e50caf3594243a0439 | |
parent a64cb496ec7b0bed834969f1cf845e7d3c0b6d31 | |
Author: Ali Gholami Rudi <[email protected]> | |
Date: Thu, 14 May 2015 18:17:12 +0430 | |
vi: ignore failed motions | |
Diffstat: | |
M vi.c | 37 ++++++++++++++++++++++-------… | |
1 file changed, 26 insertions(+), 11 deletions(-) | |
--- | |
diff --git a/vi.c b/vi.c | |
t@@ -128,7 +128,7 @@ static void lbuf_postindents(struct lbuf *lb, int *r, int … | |
break; | |
} | |
-static void lbuf_findchar(struct lbuf *lb, int *row, int *col, char *cs, int c… | |
+static int lbuf_findchar(struct lbuf *lb, int *row, int *col, char *cs, int cm… | |
{ | |
int dir = (cmd == 'f' || cmd == 't') ? +1 : -1; | |
int c = *col; | |
t@@ -145,6 +145,7 @@ static void lbuf_findchar(struct lbuf *lb, int *row, int *… | |
*col = c; | |
if (!n && (cmd == 't' || cmd == 'T')) | |
lbuf_lnnext(lb, row, col, -dir); | |
+ return n != 0; | |
} | |
static int lbuf_search(struct lbuf *lb, char *kw, int dir, int *r, int *c, int… | |
t@@ -360,19 +361,23 @@ static int vi_motion(int *row, int *col, int pre1, int p… | |
break; | |
case 'f': | |
if ((cs = vi_char())) | |
- lbuf_findchar(xb, row, col, cs, mv, pre); | |
+ if (lbuf_findchar(xb, row, col, cs, mv, pre)) | |
+ return -1; | |
break; | |
case 'F': | |
if ((cs = vi_char())) | |
- lbuf_findchar(xb, row, col, cs, mv, pre); | |
+ if (lbuf_findchar(xb, row, col, cs, mv, pre)) | |
+ return -1; | |
break; | |
case ';': | |
if (vi_charlast[0]) | |
- lbuf_findchar(xb, row, col, vi_charlast, vi_charcmd, p… | |
+ if (lbuf_findchar(xb, row, col, vi_charlast, vi_charcm… | |
+ return -1; | |
break; | |
case ',': | |
if (vi_charlast[0]) | |
- lbuf_findchar(xb, row, col, vi_charlast, vi_charcmd, -… | |
+ if (lbuf_findchar(xb, row, col, vi_charlast, vi_charcm… | |
+ return -1; | |
break; | |
case 'h': | |
for (i = 0; i < pre; i++) | |
t@@ -386,11 +391,13 @@ static int vi_motion(int *row, int *col, int pre1, int p… | |
break; | |
case 't': | |
if ((cs = vi_char())) | |
- lbuf_findchar(xb, row, col, cs, mv, pre); | |
+ if (lbuf_findchar(xb, row, col, cs, mv, pre)) | |
+ return -1; | |
break; | |
case 'T': | |
if ((cs = vi_char())) | |
- lbuf_findchar(xb, row, col, cs, mv, pre); | |
+ if (lbuf_findchar(xb, row, col, cs, mv, pre)) | |
+ return -1; | |
break; | |
case 'B': | |
for (i = 0; i < pre; i++) | |
t@@ -436,16 +443,20 @@ static int vi_motion(int *row, int *col, int pre1, int p… | |
*col = pre - 1; | |
break; | |
case '/': | |
- vi_search(mv, pre, row, col); | |
+ if (vi_search(mv, pre, row, col)) | |
+ return -1; | |
break; | |
case '?': | |
- vi_search(mv, pre, row, col); | |
+ if (vi_search(mv, pre, row, col)) | |
+ return -1; | |
break; | |
case 'n': | |
- vi_search(mv, pre, row, col); | |
+ if (vi_search(mv, pre, row, col)) | |
+ return -1; | |
break; | |
case 'N': | |
- vi_search(mv, pre, row, col); | |
+ if (vi_search(mv, pre, row, col)) | |
+ return -1; | |
break; | |
case 127: | |
case TK_CTL('h'): | |
t@@ -644,6 +655,8 @@ static void vc_motion(int cmd, int pre1) | |
} else if (!(mv = vi_motion(&r2, &c2, pre1, pre2))) { | |
return; | |
} | |
+ if (mv < 0) | |
+ return; | |
if (!strchr("fFtTeE$", mv)) | |
closed = 0; | |
lnmode = c2 < 0; | |
t@@ -849,6 +862,8 @@ static void vi(void) | |
if ((pre1 = vi_prefix()) < 0) | |
continue; | |
mv = vi_motion(&xrow, &xcol, pre1, 0); | |
+ if (mv < 0) | |
+ continue; | |
if (mv) { | |
if (strchr("\'GHML/?", mv)) | |
lbuf_mark(xb, '\'', orow); |