aboutsummaryrefslogtreecommitdiff
path: root/vis.c
diff options
context:
space:
mode:
Diffstat (limited to 'vis.c')
-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 {