tex: basic global command - neatvi - [fork] simple vi-type editor with UTF-8 su… | |
git clone git://src.adamsgaard.dk/neatvi | |
Log | |
Files | |
Refs | |
README | |
--- | |
commit dd40b8405b61a172a6712593ef0ceaa75ae0c5d3 | |
parent e37053452cdbb0bf04ede57a6c01c633f67d6067 | |
Author: Ali Gholami Rudi <[email protected]> | |
Date: Fri, 25 Dec 2015 21:30:51 +0330 | |
ex: basic global command | |
Diffstat: | |
M ex.c | 43 ++++++++++++++++++++++++++++++ | |
1 file changed, 43 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/ex.c b/ex.c | |
t@@ -720,6 +720,46 @@ static int ec_cmap(char *ec) | |
return 0; | |
} | |
+static int ec_glob(char *ec) | |
+{ | |
+ char loc[EXLEN], cmd[EXLEN]; | |
+ struct rset *re; | |
+ int offs[32]; | |
+ int beg, end, not; | |
+ char *pats[1]; | |
+ char *pat, *s; | |
+ int delim; | |
+ int i; | |
+ ex_cmd(ec, cmd); | |
+ ex_loc(ec, loc); | |
+ if (ex_region(loc, &beg, &end)) | |
+ return 1; | |
+ not = strchr(cmd, '!') || cmd[0] == 'v'; | |
+ s = ex_argeol(ec); | |
+ delim = (unsigned char) *s++; | |
+ pat = readuntil(&s, delim); | |
+ if (pat[0]) | |
+ snprintf(xfindkwd, sizeof(xfindkwd), "%s", pat); | |
+ free(pat); | |
+ pats[0] = xfindkwd; | |
+ if (!(re = rset_make(1, pats, xic ? RE_ICASE : 0))) | |
+ return 1; | |
+ i = beg; | |
+ while (i < end) { | |
+ char *ln = lbuf_get(xb, i); | |
+ if ((rset_find(re, ln, LEN(offs) / 2, offs, 0) < 0) == not) { | |
+ int len = lbuf_len(xb); | |
+ xrow = i; | |
+ ex_command(s); | |
+ i += lbuf_len(xb) - len; | |
+ end += lbuf_len(xb) - len; | |
+ } | |
+ i++; | |
+ } | |
+ rset_free(re); | |
+ return 0; | |
+} | |
+ | |
static struct option { | |
char *abbr; | |
char *name; | |
t@@ -796,12 +836,15 @@ static struct excmd { | |
{"c", "change", ec_insert}, | |
{"e", "edit", ec_edit}, | |
{"e!", "edit!", ec_edit}, | |
+ {"g", "global", ec_glob}, | |
+ {"g!", "global!", ec_glob}, | |
{"=", "=", ec_lnum}, | |
{"k", "mark", ec_mark}, | |
{"pu", "put", ec_put}, | |
{"q", "quit", ec_quit}, | |
{"q!", "quit!", ec_quit}, | |
{"r", "read", ec_read}, | |
+ {"v", "vglobal", ec_glob}, | |
{"w", "write", ec_write}, | |
{"wq", "wq", ec_write}, | |
{"u", "undo", ec_undo}, |