tvi: ^A to search for the word under the cursor - 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 322e61144baa724aee78a2e257647336c65b8f77
(DIR) parent ad5b762c322fa1b8512706f0b7967d4e93514164
(HTM) Author: Ali Gholami Rudi <ali@rudi.ir>
Date: Fri, 22 May 2015 19:15:06 +0430
vi: ^A to search for the word under the cursor
Diffstat:
M vi.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+), 0 deletions(-)
---
(DIR) diff --git a/vi.c b/vi.c
t@@ -399,6 +399,28 @@ static int vi_motionln(int *row, int cmd)
return c;
}
+static char *lbuf_curword(struct lbuf *lb, int row, int col)
+{
+ struct sbuf *sb;
+ char *ln = lbuf_get(lb, row);
+ char *beg, *end;
+ if (!ln)
+ return NULL;
+ beg = uc_chr(ln, ren_off(ln, ren_noeol(ln, col)));
+ end = beg;
+ while (*end && uc_kind(end) == 1)
+ end = uc_next(end);
+ while (beg > ln && uc_kind(uc_beg(ln, beg - 1)) == 1)
+ beg = uc_beg(ln, beg - 1);
+ if (beg >= end)
+ return NULL;
+ sb = sbuf_make();
+ sbuf_str(sb, "\\<");
+ sbuf_mem(sb, beg, end - beg);
+ sbuf_str(sb, "\\>");
+ return sbuf_done(sb);
+}
+
/* read a motion */
static int vi_motion(int *row, int *col)
{
t@@ -547,6 +569,15 @@ static int vi_motion(int *row, int *col)
if (vi_search(mv, cnt, row, col))
return -1;
break;
+ case TK_CTL('a'):
+ if (!(cs = lbuf_curword(xb, *row, *col)))
+ return -1;
+ strcpy(vi_findlast, cs);
+ free(cs);
+ vi_finddir = +1;
+ if (vi_search('n', cnt, row, col))
+ return -1;
+ break;
case 127:
case TK_CTL('h'):
for (i = 0; i < cnt; i++)