aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2019-09-22 16:07:28 -0700
committerBruce Hill <bruce@bruce-hill.com>2019-09-22 16:07:28 -0700
commit8e5b1497fae8ed73ab4bb1f510189b99537d571e (patch)
tree8f9486011799470a7fe26287fd4934aeb801e13f
parent5d3344815d6c7e6a277a8ae4dd3270a5342fbba0 (diff)
Ctrl-D exits when line is empty.
-rw-r--r--ask.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/ask.c b/ask.c
index 7b47178..77b7f39 100644
--- a/ask.c
+++ b/ask.c
@@ -231,6 +231,7 @@ static char *get_input(FILE *in, FILE *out, const char *prompt, const char *init
case '\r':
goto finished;
case KEY_CTRL_C: case KEY_ESC:
+ cleanup:
free(buf);
buf = NULL;
picked = NULL;
@@ -283,7 +284,10 @@ static char *get_input(FILE *in, FILE *out, const char *prompt, const char *init
buf[--len] = 0;
}
break;
- case KEY_DELETE: case KEY_CTRL_D:
+ case KEY_CTRL_D:
+ if (len == 0) goto cleanup;
+ // fallthrough
+ case KEY_DELETE:
if (b < len) {
memmove(buf+b, buf+b+1, (size_t)(len-b));
buf[--len] = 0;