The Ctrl-W option is implemented in the cread_line_simple() but not in
the full version. This seems odd, so add an implementation.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 common/cli_readline.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/common/cli_readline.c b/common/cli_readline.c
index 458e927e492..687e239bfa7 100644
--- a/common/cli_readline.c
+++ b/common/cli_readline.c
@@ -89,6 +89,14 @@ static char hist_lines[HIST_MAX][HIST_SIZE + 1];     /* Save 
room for NULL */
 
 #define add_idx_minus_one() ((hist_add_idx == 0) ? hist_max : hist_add_idx-1)
 
+static void getcmd_putchars(int count, int ch)
+{
+       int i;
+
+       for (i = 0; i < count; i++)
+               getcmd_putch(ch);
+}
+
 static void hist_init(void)
 {
        int i;
@@ -337,6 +345,29 @@ static int cread_line(const char *const prompt, char *buf, 
unsigned int *len,
                case CTL_CH('o'):
                        insert = !insert;
                        break;
+               case CTL_CH('w'):
+                       if (num) {
+                               uint base;
+
+                               for (base = num - 1;
+                                    base >= 0 && buf[base] == ' ';)
+                                       base--;
+                               for (; base > 0 && buf[base - 1] != ' ';)
+                                       base--;
+
+                               /* now delete chars from base to num */
+                               wlen = num - base;
+                               eol_num -= wlen;
+                               memmove(&buf[base], &buf[num],
+                                       eol_num - base + 1);
+                               num = base;
+                               getcmd_putchars(wlen, CTL_BACKSPACE);
+                               puts(buf + base);
+                               getcmd_putchars(wlen, ' ');
+                               getcmd_putchars(wlen + eol_num - num,
+                                               CTL_BACKSPACE);
+                       }
+                       break;
                case CTL_CH('x'):
                case CTL_CH('u'):
                        BEGINNING_OF_LINE();
-- 
2.42.0.459.ge4e396fd5e-goog

Reply via email to