tex: show a message after :e, :r, :w, or failed searches - neatvi - [fork] simp… | |
git clone git://src.adamsgaard.dk/neatvi | |
Log | |
Files | |
Refs | |
README | |
--- | |
commit 4135d145fd1d5329c1078e7c59693ab146d0ad39 | |
parent ec086911d042a074ad149289f4200c3248446096 | |
Author: Ali Gholami Rudi <[email protected]> | |
Date: Sat, 16 May 2015 12:42:54 +0430 | |
ex: show a message after :e, :r, :w, or failed searches | |
Diffstat: | |
M ex.c | 51 +++++++++--------------------… | |
M vi.c | 57 ++++++++++++++++++++++++++---… | |
M vi.h | 6 ++++-- | |
3 files changed, 68 insertions(+), 46 deletions(-) | |
--- | |
diff --git a/ex.c b/ex.c | |
t@@ -9,41 +9,6 @@ | |
#define EXLEN 512 | |
-/* read an input line; ex's input function */ | |
-static char *ex_read(char *msg) | |
-{ | |
- struct sbuf *sb; | |
- char c; | |
- if (xled) { | |
- char *s = led_prompt(msg, ""); | |
- if (s) | |
- printf("\n"); | |
- return s; | |
- } | |
- sb = sbuf_make(); | |
- while ((c = getchar()) != EOF) { | |
- if (c == '\n') | |
- break; | |
- sbuf_chr(sb, c); | |
- } | |
- if (c == EOF) { | |
- sbuf_free(sb); | |
- return NULL; | |
- } | |
- return sbuf_done(sb); | |
-} | |
- | |
-/* print an output line; ex's output function */ | |
-static void ex_show(char *msg) | |
-{ | |
- if (xled) { | |
- led_print(msg, -1); | |
- term_chr('\n'); | |
- } else { | |
- printf("%s", msg); | |
- } | |
-} | |
- | |
/* read ex command location */ | |
static char *ex_loc(char *s, char *loc) | |
{ | |
t@@ -188,6 +153,7 @@ static void ec_quit(char *ec) | |
static void ec_edit(char *ec) | |
{ | |
+ char msg[128]; | |
char arg[EXLEN]; | |
int fd; | |
ex_arg(ec, arg); | |
t@@ -214,6 +180,9 @@ static void ec_edit(char *ec) | |
if (fd >= 0) { | |
lbuf_rd(xb, fd, 0); | |
close(fd); | |
+ snprintf(msg, sizeof(msg), "\"%s\" %d lines [r]\n", | |
+ xpath, lbuf_len(xb)); | |
+ ex_show(msg); | |
} | |
xrow = MAX(0, MIN(xrow, lbuf_len(xb) - 1)); | |
lbuf_undofree(xb); | |
t@@ -222,22 +191,29 @@ static void ec_edit(char *ec) | |
static void ec_read(char *ec) | |
{ | |
char arg[EXLEN], loc[EXLEN]; | |
+ char msg[128]; | |
+ char *path; | |
int fd; | |
int beg, end; | |
int n = lbuf_len(xb); | |
ex_arg(ec, arg); | |
ex_loc(ec, loc); | |
- fd = open(arg[0] ? arg : xpath, O_RDONLY); | |
+ path = arg[0] ? arg : xpath; | |
+ fd = open(path, O_RDONLY); | |
if (fd >= 0 && !ex_region(loc, &beg, &end)) { | |
lbuf_rd(xb, fd, lbuf_len(xb) ? end : 0); | |
close(fd); | |
xrow = end + lbuf_len(xb) - n; | |
+ snprintf(msg, sizeof(msg), "\"%s\" %d lines [r]\n", | |
+ path, lbuf_len(xb) - n); | |
+ ex_show(msg); | |
} | |
} | |
static void ec_write(char *ec) | |
{ | |
char cmd[EXLEN], arg[EXLEN], loc[EXLEN]; | |
+ char msg[128]; | |
char *path; | |
int beg, end; | |
int fd; | |
t@@ -255,6 +231,9 @@ static void ec_write(char *ec) | |
if (fd >= 0) { | |
lbuf_wr(xb, fd, beg, end); | |
close(fd); | |
+ snprintf(msg, sizeof(msg), "\"%s\" %d lines [w]\n", | |
+ path, end - beg); | |
+ ex_show(msg); | |
} | |
if (!strcmp("wq", cmd)) | |
ec_quit("wq"); | |
diff --git a/vi.c b/vi.c | |
t@@ -14,6 +14,7 @@ | |
char xpath[PATHLEN]; /* current file */ | |
char xpath_alt[PATHLEN]; /* alternate file */ | |
+char xmsg[512]; /* current message */ | |
struct lbuf *xb; /* current buffer */ | |
int xrow, xcol, xtop; /* current row, column, and top row */ | |
int xrow_alt; /* alternate row, column, and top row */ | |
t@@ -29,6 +30,12 @@ static int vi_charcmd; /* the character find… | |
static int vi_arg1, vi_arg2; /* the first and second arguments */ | |
static int vi_ybuf; /* current yank buffer */ | |
+static void vi_drawmsg(void) | |
+{ | |
+ led_print(xmsg, xrows); | |
+ xmsg[0] = '\0'; | |
+} | |
+ | |
static void vi_draw(void) | |
{ | |
int i; | |
t@@ -37,7 +44,7 @@ static void vi_draw(void) | |
char *s = lbuf_get(xb, i); | |
led_print(s ? s : "~", i - xtop); | |
} | |
- led_print("", xrows); | |
+ vi_drawmsg(); | |
term_pos(xrow, led_pos(lbuf_get(xb, i), xcol)); | |
term_commit(); | |
} | |
t@@ -69,6 +76,38 @@ static char *vi_prompt(char *msg) | |
return led_prompt(msg, ""); | |
} | |
+char *ex_read(char *msg) | |
+{ | |
+ struct sbuf *sb; | |
+ char c; | |
+ if (xled) { | |
+ char *s = led_prompt(msg, ""); | |
+ if (s) | |
+ term_chr('\n'); | |
+ return s; | |
+ } | |
+ sb = sbuf_make(); | |
+ while ((c = getchar()) != EOF && c != '\n') | |
+ sbuf_chr(sb, c); | |
+ if (c == EOF) { | |
+ sbuf_free(sb); | |
+ return NULL; | |
+ } | |
+ return sbuf_done(sb); | |
+} | |
+ | |
+void ex_show(char *msg) | |
+{ | |
+ if (xvis) { | |
+ snprintf(xmsg, sizeof(xmsg), "%s", msg); | |
+ } else if (xled) { | |
+ led_print(msg, -1); | |
+ term_chr('\n'); | |
+ } else { | |
+ printf("%s", msg); | |
+ } | |
+} | |
+ | |
static int vi_yankbuf(void) | |
{ | |
int c = vi_read(); | |
t@@ -233,6 +272,8 @@ static int vi_search(int cmd, int cnt, int *row, int *col) | |
*row += atoi(off); | |
} | |
} | |
+ if (failed) | |
+ snprintf(xmsg, sizeof(xmsg), "\"%s\" not found\n", vi_findlast… | |
return failed; | |
} | |
t@@ -920,12 +961,10 @@ static int vi_scrollbackward(int cnt) | |
return 0; | |
} | |
-static void vi_status(void) | |
+static void vc_status(void) | |
{ | |
- char stat[128]; | |
- sprintf(stat, "[%s] %d lines, %d,%d\n", | |
- xpath[0] ? xpath : "unnamed", lbuf_len(xb), xrow + 1, xcol + 1… | |
- led_print(stat, xrows); | |
+ snprintf(xmsg, sizeof(xmsg), "\"%s\" line %d of %d, col %d\n", | |
+ xpath[0] ? xpath : "unnamed", xrow + 1, lbuf_len(xb), xcol + 1… | |
} | |
static int vc_replace(void) | |
t@@ -1029,7 +1068,7 @@ static void vi(void) | |
redraw = 1; | |
break; | |
case TK_CTL('g'): | |
- vi_status(); | |
+ vc_status(); | |
break; | |
case TK_CTL('^'): | |
ex_command("e #"); | |
t@@ -1116,7 +1155,7 @@ static void vi(void) | |
break; | |
case 'D': | |
vi_back('$'); | |
- if (vc_motion('d')) | |
+ if (!vc_motion('d')) | |
redraw = 1; | |
break; | |
case 'r': | |
t@@ -1150,6 +1189,8 @@ static void vi(void) | |
} | |
if (redraw) | |
vi_draw(); | |
+ if (xmsg[0]) | |
+ vi_drawmsg(); | |
term_pos(xrow - xtop, led_pos(lbuf_get(xb, xrow), | |
ren_cursor(lbuf_get(xb, xrow), xcol))); | |
lbuf_undomark(xb); | |
diff --git a/vi.h b/vi.h | |
t@@ -1,7 +1,5 @@ | |
/* neatvi main header */ | |
-#define PATHLEN 512 | |
- | |
/* helper macros */ | |
#define LEN(a) (sizeof(a) / sizeof((a)[0])) | |
#define MIN(a, b) ((a) < (b) ? (a) : (b)) | |
t@@ -118,11 +116,15 @@ int led_pos(char *s, int pos); | |
/* ex commands */ | |
void ex(void); | |
void ex_command(char *cmd); | |
+char *ex_read(char *msg); | |
+void ex_show(char *msg); | |
/* process management */ | |
char *cmd_pipe(char *cmd, char *s); | |
/* global variables */ | |
+#define PATHLEN 512 | |
+ | |
extern int xvis; | |
extern struct lbuf *xb; | |
extern int xrow; |