tled: switching keymaps when reading a single character - neatvi - [fork] simpl… | |
git clone git://src.adamsgaard.dk/neatvi | |
Log | |
Files | |
Refs | |
README | |
--- | |
commit 2dc24f819262d48c8a7f6b2d1ce6a7fe992b4310 | |
parent c7dcceb5c62060da479326a72bc9e1170f18654c | |
Author: Ali Gholami Rudi <[email protected]> | |
Date: Tue, 26 May 2015 08:36:08 +0430 | |
led: switching keymaps when reading a single character | |
Diffstat: | |
M led.c | 29 ++++++++++++++++++++++++----- | |
M vi.c | 3 +-- | |
M vi.h | 2 +- | |
3 files changed, 26 insertions(+), 8 deletions(-) | |
--- | |
diff --git a/led.c b/led.c | |
t@@ -36,11 +36,6 @@ static int led_posctx(int dir, int pos) | |
return dir >= 0 ? pos : xcols - pos - 1; | |
} | |
-char *led_keymap(char *kmap, int c) | |
-{ | |
- return c >= 0 ? kmap_map(kmap, c) : NULL; | |
-} | |
- | |
static char *led_render(char *s0) | |
{ | |
int n, maxcol = 0; | |
t@@ -153,6 +148,30 @@ static void led_printparts(char *ai, char *pref, char *ma… | |
sbuf_free(ln); | |
} | |
+char *led_read(char **kmap) | |
+{ | |
+ static char buf[8]; | |
+ int c = term_read(-1); | |
+ while (!TK_INT(c)) { | |
+ switch (c) { | |
+ case TK_CTL('f'): | |
+ *kmap = conf_kmapalt(); | |
+ break; | |
+ case TK_CTL('e'): | |
+ *kmap = kmap_en[0]; | |
+ break; | |
+ case TK_CTL('v'): | |
+ buf[0] = term_read(-1); | |
+ buf[1] = '\0'; | |
+ return buf; | |
+ default: | |
+ return kmap_map(*kmap, c); | |
+ } | |
+ c = term_read(-1); | |
+ } | |
+ return NULL; | |
+} | |
+ | |
static char *led_line(char *pref, char *post, char *ai, int ai_max, int *key, … | |
{ | |
struct sbuf *sb; | |
diff --git a/vi.c b/vi.c | |
t@@ -56,8 +56,7 @@ static void vi_back(int c) | |
static char *vi_char(void) | |
{ | |
- int key = vi_read(); | |
- return TK_INT(key) ? NULL : led_keymap(vi_kmap, key); | |
+ return led_read(&vi_kmap); | |
} | |
static char *vi_prompt(char *msg, char **kmap) | |
diff --git a/vi.h b/vi.h | |
t@@ -113,8 +113,8 @@ char *term_att(int att, int old); | |
/* line-oriented input and output */ | |
char *led_prompt(char *pref, char *post, char **kmap); | |
char *led_input(char *pref, char *post, char *ai, int ai_max, char **kmap); | |
+char *led_read(char **kmap); | |
void led_print(char *msg, int row); | |
-char *led_keymap(char *kmap, int c); | |
int led_pos(char *s, int pos); | |
/* ex commands */ |