Allow CONFIG_AUTO_COMPLETE and command history CONFIG_CMDLINE_EDITING at the sametime
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Sat, 22 Dec 2007 14:52:58 +0000 (15:52 +0100)
committerWolfgang Denk <wd@denx.de>
Wed, 9 Jan 2008 10:54:36 +0000 (11:54 +0100)
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
common/main.c

index 379695cc426b8c496c18b9b10295d0970c3a9690..4253eac2d4f54a0fffd1557dd1d4bac1130549fc 100644 (file)
@@ -696,7 +696,7 @@ static void cread_add_str(char *str, int strsize, int insert, unsigned long *num
        }
 }
 
-static int cread_line(char *buf, unsigned int *len)
+static int cread_line(const char *const prompt, char *buf, unsigned int *len)
 {
        unsigned long num = 0;
        unsigned long eol_num = 0;
@@ -818,6 +818,7 @@ static int cread_line(char *buf, unsigned int *len)
                        insert = !insert;
                        break;
                case CTL_CH('x'):
+               case CTL_CH('u'):
                        BEGINNING_OF_LINE();
                        ERASE_TO_EOL();
                        break;
@@ -867,6 +868,27 @@ static int cread_line(char *buf, unsigned int *len)
                        REFRESH_TO_EOL();
                        continue;
                }
+#ifdef CONFIG_AUTO_COMPLETE
+               case '\t': {
+                       int num2, col;
+
+                       /* do not autocomplete when in the middle */
+                       if (num < eol_num) {
+                               getcmd_cbeep();
+                               break;
+                       }
+
+                       buf[num] = '\0';
+                       col = strlen(prompt) + eol_num;
+                       num2 = num;
+                       if (cmd_auto_complete(prompt, buf, &num2, &col)) {
+                               col = num2 - num;
+                               num += col;
+                               eol_num += col;
+                       }
+                       break;
+               }
+#endif
                default:
                        cread_add_char(ichar, insert, &num, &eol_num, buf, *len);
                        break;
@@ -909,7 +931,7 @@ int readline (const char *const prompt)
 
        puts (prompt);
 
-       rc = cread_line(p, &len);
+       rc = cread_line(prompt, p, &len);
        return rc < 0 ? rc : len;
 #else
        char   *p = console_buffer;