cmdline: rename return values of vt100
[libcmdline.git] / src / lib / cmdline_rdline.c
index d5eac3b..5783d65 100644 (file)
@@ -164,19 +164,21 @@ rdline_get_buffer(struct rdline *rdl)
 }
 
 static void
-display_right_buffer(struct rdline *rdl)
+display_right_buffer(struct rdline *rdl, int force)
 {
        unsigned int i;
        char tmp;
 
+       if (!force && CIRBUF_IS_EMPTY(&rdl->right))
+               return;
+
        rdline_puts(rdl, vt100_clear_right);
-       if (!CIRBUF_IS_EMPTY(&rdl->right)) {
-               CIRBUF_FOREACH(&rdl->right, i, tmp) {
-                       rdl->write_char(rdl, tmp);
-               }
+       CIRBUF_FOREACH(&rdl->right, i, tmp) {
+               rdl->write_char(rdl, tmp);
+       }
+       if (!CIRBUF_IS_EMPTY(&rdl->right))
                rdline_miniprintf(rdl, vt100_multi_left,
                                  CIRBUF_GET_LEN(&rdl->right));
-       }
 }
 
 void
@@ -191,7 +193,7 @@ rdline_redisplay(struct rdline *rdl)
        CIRBUF_FOREACH(&rdl->left, i, tmp) {
                rdl->write_char(rdl, tmp);
        }
-       display_right_buffer(rdl);
+       display_right_buffer(rdl, 1);
 }
 
 int
@@ -210,10 +212,10 @@ rdline_char_in(struct rdline *rdl, char c)
                return RDLINE_RES_NOT_RUNNING;
 
        cmd = vt100_parser(&rdl->vt100, c);
-       if (cmd == -2)
+       if (cmd == VT100_NOT_COMPLETE)
                return RDLINE_RES_SUCCESS;
 
-       if (cmd >= 0) {
+       if (cmd != VT100_STD_CHAR) {
                switch (cmd) {
                case CMDLINE_KEY_CTRL_B:
                case CMDLINE_KEY_LEFT_ARR:
@@ -272,11 +274,12 @@ rdline_char_in(struct rdline *rdl, char c)
                case CMDLINE_KEY_BKSPACE:
                        if(!cirbuf_del_tail_safe(&rdl->left)) {
                                rdline_puts(rdl, vt100_bs);
-                               display_right_buffer(rdl);
+                               display_right_buffer(rdl, 1);
                        }
                        break;
 
                case CMDLINE_KEY_META_BKSPACE:
+               case CMDLINE_KEY_CTRL_W:
                        while (! CIRBUF_IS_EMPTY(&rdl->left) && isblank2(cirbuf_get_tail(&rdl->left))) {
                                rdline_puts(rdl, vt100_bs);
                                cirbuf_del_tail(&rdl->left);
@@ -285,7 +288,15 @@ rdline_char_in(struct rdline *rdl, char c)
                                rdline_puts(rdl, vt100_bs);
                                cirbuf_del_tail(&rdl->left);
                        }
-                       display_right_buffer(rdl);
+                       display_right_buffer(rdl, 1);
+                       break;
+
+               case CMDLINE_KEY_META_D:
+                       while (! CIRBUF_IS_EMPTY(&rdl->right) && isblank2(cirbuf_get_head(&rdl->right)))
+                               cirbuf_del_head(&rdl->right);
+                       while (! CIRBUF_IS_EMPTY(&rdl->right) && !isblank2(cirbuf_get_head(&rdl->right)))
+                               cirbuf_del_head(&rdl->right);
+                       display_right_buffer(rdl, 1);
                        break;
 
                case CMDLINE_KEY_SUPPR:
@@ -296,7 +307,7 @@ rdline_char_in(struct rdline *rdl, char c)
                                return RDLINE_RES_EOF;
                        }
                        if (!cirbuf_del_head_safe(&rdl->right)) {
-                               display_right_buffer(rdl);
+                               display_right_buffer(rdl, 1);
                        }
                        break;
 
@@ -341,7 +352,7 @@ rdline_char_in(struct rdline *rdl, char c)
                                rdl->write_char(rdl, rdl->kill_buf[i]);
                                i++;
                        }
-                       display_right_buffer(rdl);
+                       display_right_buffer(rdl, 0);
                        break;
 #endif /* !NO_RDLINE_KILL_BUF */
 
@@ -389,7 +400,7 @@ rdline_char_in(struct rdline *rdl, char c)
                                                rdl->write_char(rdl, tmp_buf[i]);
                                                i++;
                                        }
-                                       display_right_buffer(rdl);
+                                       display_right_buffer(rdl, 1);
                                        return RDLINE_RES_COMPLETE; /* ?? */
                                }
 
@@ -428,6 +439,7 @@ rdline_char_in(struct rdline *rdl, char c)
 
 #ifndef NO_RDLINE_HISTORY
                case CMDLINE_KEY_UP_ARR:
+               case CMDLINE_KEY_CTRL_P:
                        if (rdl->history_cur_line == 0) {
                                rdline_remove_first_history_item(rdl);
                        }
@@ -449,6 +461,7 @@ rdline_char_in(struct rdline *rdl, char c)
                        break;
 
                case CMDLINE_KEY_DOWN_ARR:
+               case CMDLINE_KEY_CTRL_N:
                        if (rdl->history_cur_line - 1 < 0)
                                break;
 
@@ -484,7 +497,7 @@ rdline_char_in(struct rdline *rdl, char c)
                return RDLINE_RES_SUCCESS;
 
        rdl->write_char(rdl, c);
-       display_right_buffer(rdl);
+       display_right_buffer(rdl, 0);
 
        return RDLINE_RES_SUCCESS;
 }