]> git.lizzy.rs Git - linenoise.git/commitdiff
Support for ctrl-d deleting the char at right of the cursor added
authorantirez <antirez@gmail.com>
Tue, 22 Feb 2011 16:38:49 +0000 (17:38 +0100)
committerantirez <antirez@gmail.com>
Tue, 22 Feb 2011 16:38:49 +0000 (17:38 +0100)
linenoise.c

index bfed5ea863f5511967b952bc76e709bd0e64e046..18a15cc45ccb6d739b0ed9f2ed2a5b43e2d5c391 100644 (file)
@@ -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];