tvi: for ex messages use "---" filetype - 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 d9562b264f00d015c0bcd75bd8fa3e4cece9eddb (DIR) parent 89738c4b7ea3a3d705c408090a85c14610158251 (HTM) Author: Ali Gholami Rudi <ali@rudi.ir> Date: Fri, 10 Mar 2017 14:10:40 +0330 vi: for ex messages use "---" filetype Diffstat: M led.c | 22 +++++++++++++++++++--- M vi.c | 2 +- M vi.h | 1 + 3 files changed, 21 insertions(+), 4 deletions(-) --- (DIR) diff --git a/led.c b/led.c t@@ -1,3 +1,4 @@ +/* line editing and drawing */ #include <ctype.h> #include <stdio.h> #include <string.h> t@@ -33,6 +34,7 @@ static int led_offdir(char **chrs, int *pos, int i) return 0; } +/* highlight text in reverse direction */ static void led_markrev(int n, char **chrs, int *pos, int *att) { int i = 0, j; t@@ -51,7 +53,8 @@ static void led_markrev(int n, char **chrs, int *pos, int *att) } } -static char *led_render(char *s0, int cbeg, int cend) +/* render and highlight a line */ +static char *led_render(char *s0, int cbeg, int cend, char *syn) { int n; int *pos; /* pos[i]: the screen position of the i-th character */ t@@ -75,7 +78,7 @@ static char *led_render(char *s0, int cbeg, int cend) for (j = 0; j < curwid; j++) off[led_posctx(ctx, pos[i] + j, cbeg, cend)] = i; } - att = syn_highlight(ex_filetype(), s0); + att = syn_highlight(syn, s0); led_markrev(n, chrs, pos, att); out = sbuf_make(); i = cbeg; t@@ -107,9 +110,20 @@ static char *led_render(char *s0, int cbeg, int cend) return sbuf_done(out); } +/* print a line on the screen */ void led_print(char *s, int row) { - char *r = led_render(s, xleft, xleft + xcols); + char *r = led_render(s, xleft, xleft + xcols, ex_filetype()); + term_pos(row, 0); + term_kill(); + term_str(r); + free(r); +} + +/* print a line on the screen; for ex messages */ +void led_printmsg(char *s, int row) +{ + char *r = led_render(s, xleft, xleft + xcols, "---"); term_pos(row, 0); term_kill(); term_str(r); t@@ -199,6 +213,7 @@ static char *led_readchar(int c, char *kmap) return kmap_map(kmap, c); } +/* read a character from the terminal */ char *led_read(char **kmap) { int c = term_read(); t@@ -218,6 +233,7 @@ char *led_read(char **kmap) return NULL; } +/* read a line from the terminal */ static char *led_line(char *pref, char *post, char *ai, int ai_max, int *key, char **kmap) { struct sbuf *sb; (DIR) diff --git a/vi.c b/vi.c t@@ -45,7 +45,7 @@ static void vi_drawmsg(void) { int oleft = xleft; xleft = 0; - led_print(vi_msg, xrows); + led_printmsg(vi_msg, xrows); vi_msg[0] = '\0'; xleft = oleft; } (DIR) diff --git a/vi.h b/vi.h t@@ -133,6 +133,7 @@ char *led_prompt(char *pref, char *post, char **kmap); char *led_input(char *pref, char *post, char **kmap); char *led_read(char **kmap); void led_print(char *msg, int row); +void led_printmsg(char *s, int row); int led_pos(char *s, int pos); /* ex commands */