Introduction
Introduction Statistics Contact Development Disclaimer Help
tvi: do not overwrite lines in input mode - neatvi - [fork] simple vi-type edit…
git clone git://src.adamsgaard.dk/neatvi
Log
Files
Refs
README
---
commit 2b735a5576c57027328c3b46e8dadc626423b10e
parent 4f07e5004a8b33bdafd6dd436612ba97ff016df6
Author: Ali Gholami Rudi <[email protected]>
Date: Tue, 9 Jun 2015 09:15:11 +0430
vi: do not overwrite lines in input mode
Diffstat:
M led.c | 4 +++-
M term.c | 11 +++++++++++
M vi.c | 12 ++++++++++++
M vi.h | 1 +
4 files changed, 27 insertions(+), 1 deletion(-)
---
diff --git a/led.c b/led.c
t@@ -169,11 +169,13 @@ static void led_printparts(char *ai, char *pref, char *m…
ren_pos(sbuf_buf(ln), off - 1) < 0 ? -1 : +1;
sbuf_cut(ln, len);
}
+ term_record();
sbuf_str(ln, post);
led_print(sbuf_buf(ln), -1);
pos = ren_cursor(sbuf_buf(ln), ren_pos(sbuf_buf(ln), MAX(0, off - 1)));
term_pos(-1, led_pos(sbuf_buf(ln), pos + idir));
sbuf_free(ln);
+ term_commit();
}
char *led_read(char **kmap)
t@@ -299,10 +301,10 @@ char *led_input(char *pref, char *post, char *ai, int ai…
ai[ai_len] = '\0';
}
pref = NULL;
- term_kill();
free(ln);
if (key != '\n')
break;
+ term_room(1);
while (ai_max && post[0] && (post[0] == ' ' || post[0] == '\t'…
post++;
}
diff --git a/term.c b/term.c
t@@ -85,6 +85,17 @@ void term_kill(void)
term_out("\33[K");
}
+void term_room(int n)
+{
+ char cmd[16];
+ if (n < 0)
+ sprintf(cmd, "\33[%dM", -n);
+ if (n > 0)
+ sprintf(cmd, "\33[%dL", n);
+ if (n)
+ term_out(cmd);
+}
+
void term_pos(int r, int c)
{
char buf[32] = "\r";
diff --git a/vi.c b/vi.c
t@@ -28,6 +28,7 @@ static void vi_drawmsg(void)
vi_msg[0] = '\0';
}
+/* redraw the screen */
static void vi_draw(int xcol)
{
int i;
t@@ -41,6 +42,15 @@ static void vi_draw(int xcol)
term_commit();
}
+/* update the screen by removing lines r1 to r2 before an input command */
+static void vi_drawrm(int r1, int r2, int newln)
+{
+ r1 = MIN(MAX(r1, xtop), xtop + xrows);
+ r2 = MIN(MAX(r2, xtop), xtop + xrows);
+ term_pos(r1 - xtop, 0);
+ term_room(r1 - r2 + newln);
+}
+
static int vi_buf[128];
static int vi_buflen;
t@@ -600,6 +610,7 @@ static void vi_change(int r1, int o1, int r2, int o2, int …
free(region);
pref = lnmode ? vi_indents(lbuf_get(xb, r1)) : uc_sub(lbuf_get(xb, r1)…
post = lnmode ? uc_dup("\n") : uc_sub(lbuf_get(xb, r2), o2, -1);
+ vi_drawrm(r1, r2, 0);
rep = vi_input(pref, post, &row, &off);
if (rep) {
lbuf_rm(xb, r1, r2 + 1);
t@@ -759,6 +770,7 @@ static int vc_insert(int cmd)
off = xoff + 1;
pref = ln && cmd != 'o' && cmd != 'O' ? uc_sub(ln, 0, off) : vi_indent…
post = ln && cmd != 'o' && cmd != 'O' ? uc_sub(ln, off, -1) : uc_dup("…
+ vi_drawrm(xrow, xrow, cmd == 'o' || cmd == 'O');
rep = vi_input(pref, post, &row, &off);
if ((cmd == 'o' || cmd == 'O') && !lbuf_len(xb))
lbuf_put(xb, 0, "\n");
diff --git a/vi.h b/vi.h
t@@ -110,6 +110,7 @@ void term_chr(int ch);
void term_pos(int r, int c);
void term_clear(void);
void term_kill(void);
+void term_room(int n);
int term_rows(void);
int term_cols(void);
int term_read(int timeout);
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.