summaryrefslogtreecommitdiff
path: root/deps/linenoise
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2011-02-22 17:40:33 +0100
committerantirez <antirez@gmail.com>2011-02-22 17:46:11 +0100
commit802fd01b7c441b0cc0db36b02cde9edf7836e6a0 (patch)
tree8fb7332707b5fbea9ba4c1085f428d3ab10b140b /deps/linenoise
parent4a67d194e9437e48e076d15c746414d3d14faa35 (diff)
downloadredis-802fd01b7c441b0cc0db36b02cde9edf7836e6a0.tar.gz
linenoise updated
Diffstat (limited to 'deps/linenoise')
-rw-r--r--deps/linenoise/linenoise.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/deps/linenoise/linenoise.c b/deps/linenoise/linenoise.c
index bfed5ea86..18a15cc45 100644
--- a/deps/linenoise/linenoise.c
+++ b/deps/linenoise/linenoise.c
@@ -320,10 +320,9 @@ static int linenoisePrompt(int fd, char *buf, size_t buflen, const char *prompt)
switch(c) {
case 13: /* enter */
- case 4: /* ctrl-d */
history_len--;
free(history[history_len]);
- return (len == 0 && c == 4) ? -1 : (int)len;
+ return (int)len;
case 3: /* ctrl-c */
errno = EAGAIN;
return -1;
@@ -337,6 +336,18 @@ static int linenoisePrompt(int fd, char *buf, size_t buflen, const char *prompt)
refreshLine(fd,prompt,buf,len,pos,cols);
}
break;
+ case 4: /* ctrl-d, remove char at right of cursor */
+ if (len > 1 && pos < (len-1)) {
+ memmove(buf+pos,buf+pos+1,len-pos);
+ len--;
+ buf[len] = '\0';
+ refreshLine(fd,prompt,buf,len,pos,cols);
+ } else if (len == 0) {
+ history_len--;
+ free(history[history_len]);
+ return -1;
+ }
+ break;
case 20: /* ctrl-t */
if (pos > 0 && pos < len) {
int aux = buf[pos-1];