aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2015-09-15 09:37:56 +0200
committerMarc André Tanner <mat@brain-dump.org>2015-10-05 15:57:13 +0200
commitd61df439c79bdce0923d14aea7f96501a908fdb1 (patch)
tree8e5e356ee226908e5d2f7b1b476541e5a7fb4988
parent3df417c154e30f3726a9a0a2118a93acce86a054 (diff)
downloadvis-d61df439c79bdce0923d14aea7f96501a908fdb1.tar.gz
vis-d61df439c79bdce0923d14aea7f96501a908fdb1.tar.xz
vis: convert insert verbatim to new input handling code
-rw-r--r--vis.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/vis.c b/vis.c
index d5c7d1b..91355e2 100644
--- a/vis.c
+++ b/vis.c
@@ -1249,13 +1249,12 @@ static const char *prompt_backspace(const char *keys, const Arg *arg) {
}
static const char *insert_verbatim(const char *keys, const Arg *arg) {
- int len = 0, count = 0, base;
Rune rune = 0;
- const char *key = getkey();
- if (!key)
- return keys;
- char buf[4], type = key[0];
+ char buf[4], type = keys[0];
+ int len = 0, count = 0, base;
switch (type) {
+ case '\0':
+ return NULL;
case 'o':
case 'O':
count = 3;
@@ -1282,24 +1281,26 @@ static const char *insert_verbatim(const char *keys, const Arg *arg) {
break;
}
- while (count-- > 0) {
- key = getkey();
+ for (keys++; keys[0] && count > 0; keys++, count--) {
int v = 0;
- if (!key)
- break;
- else if (base == 8 && '0' <= key[0] && key[0] <= '7')
- v = key[0] - '0';
- else if ((base == 10 || base == 16) && '0' <= key[0] && key[0] <= '9')
- v = key[0] - '0';
- else if (base == 16 && 'a' <= key[0] && key[0] <= 'f')
- v = 10 + key[0] - 'a';
- else if (base == 16 && 'A' <= key[0] && key[0] <= 'F')
- v = 10 + key[0] - 'A';
- else
+ if (base == 8 && '0' <= keys[0] && keys[0] <= '7') {
+ v = keys[0] - '0';
+ } else if ((base == 10 || base == 16) && '0' <= keys[0] && keys[0] <= '9') {
+ v = keys[0] - '0';
+ } else if (base == 16 && 'a' <= keys[0] && keys[0] <= 'f') {
+ v = 10 + keys[0] - 'a';
+ } else if (base == 16 && 'A' <= keys[0] && keys[0] <= 'F') {
+ v = 10 + keys[0] - 'A';
+ } else {
+ count = 0;
break;
+ }
rune = rune * base + v;
}
+ if (count > 0)
+ return NULL;
+
if (type == 'u' || type == 'U') {
len = runetochar(buf, &rune);
} else {