Introduction
Introduction Statistics Contact Development Disclaimer Help
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;
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.