Introduction
Introduction Statistics Contact Development Disclaimer Help
tled: extract led_readchar() - neatvi - [fork] simple vi-type editor with UTF-8…
git clone git://src.adamsgaard.dk/neatvi
Log
Files
Refs
README
---
commit 5baa996edd56e5540772d0b8829946dd91944ac3
parent c54948868fdd6994a66acff21cb980fef4356465
Author: Ali Gholami Rudi <[email protected]>
Date: Wed, 17 Jun 2015 20:03:34 +0430
led: extract led_readchar()
Diffstat:
M led.c | 52 ++++++++++++++---------------…
1 file changed, 24 insertions(+), 28 deletions(-)
---
diff --git a/led.c b/led.c
t@@ -178,25 +178,34 @@ static void led_printparts(char *ai, char *pref, char *m…
term_commit();
}
-static char *led_digraph(void)
+/* continue reading the character starting with c */
+static char *led_readchar(int c, char *kmap)
{
+ static char buf[8];
int c1, c2;
int i;
- c1 = term_read(-1);
- if (TK_INT(c1))
- return NULL;
- c2 = term_read(-1);
- if (TK_INT(c2))
+ if (c == TK_CTL('v')) { /* literal character */
+ buf[0] = term_read(-1);
+ buf[1] = '\0';
+ return buf;
+ }
+ if (c == TK_CTL('k')) { /* digraph */
+ c1 = term_read(-1);
+ if (TK_INT(c1))
+ return NULL;
+ c2 = term_read(-1);
+ if (TK_INT(c2))
+ return NULL;
+ for (i = 0; i < LEN(digraphs); i++)
+ if (digraphs[i][0][0] == c1 && digraphs[i][0][1] == c2)
+ return digraphs[i][1];
return NULL;
- for (i = 0; i < LEN(digraphs); i++)
- if (digraphs[i][0][0] == c1 && digraphs[i][0][1] == c2)
- return digraphs[i][1];
- return NULL;
+ }
+ return kmap_map(kmap, c);
}
char *led_read(char **kmap)
{
- static char buf[8];
int c = term_read(-1);
while (!TK_INT(c)) {
switch (c) {
t@@ -206,14 +215,8 @@ char *led_read(char **kmap)
case TK_CTL('e'):
*kmap = kmap_en[0];
break;
- case TK_CTL('v'):
- buf[0] = term_read(-1);
- buf[1] = '\0';
- return buf;
- case TK_CTL('k'):
- return led_digraph();
default:
- return kmap_map(*kmap, c);
+ return led_readchar(c, *kmap);
}
c = term_read(-1);
}
t@@ -225,7 +228,7 @@ static char *led_line(char *pref, char *post, char *ai, in…
struct sbuf *sb;
int ai_len = strlen(ai);
int c, lnmode;
- char *dig;
+ char *cs;
sb = sbuf_make();
if (!pref)
pref = "";
t@@ -249,14 +252,6 @@ static char *led_line(char *pref, char *post, char *ai, i…
case TK_CTL('u'):
sbuf_cut(sb, 0);
break;
- case TK_CTL('k'):
- dig = led_digraph();
- if (dig)
- sbuf_str(sb, dig);
- break;
- case TK_CTL('v'):
- sbuf_chr(sb, term_read(-1));
- break;
case TK_CTL('w'):
if (sbuf_len(sb))
sbuf_cut(sb, led_lastword(sbuf_buf(sb)));
t@@ -277,7 +272,8 @@ static char *led_line(char *pref, char *post, char *ai, in…
default:
if (c == '\n' || TK_INT(c))
break;
- sbuf_str(sb, kmap_map(*kmap, c));
+ if ((cs = led_readchar(c, *kmap)))
+ sbuf_str(sb, cs);
}
if (c == '\n' || TK_INT(c))
break;
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.