summaryrefslogtreecommitdiffstats
path: root/lib/readline.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2008-03-01 21:08:14 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2008-03-01 21:08:14 +0100
commitdf31bb46be18edbaca1adbef3dcb16d2033942b9 (patch)
tree98ca794cf8d8753c47135c9b3189a49fd5cb7ea2 /lib/readline.c
parenta1a747af7f7bd816af73d808e1c750f536873c3d (diff)
downloadbarebox-df31bb46be18edbaca1adbef3dcb16d2033942b9.tar.gz
barebox-df31bb46be18edbaca1adbef3dcb16d2033942b9.tar.xz
implement TAB completion
Diffstat (limited to 'lib/readline.c')
-rw-r--r--lib/readline.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/readline.c b/lib/readline.c
index 2cf90eca8d..1bdfe61b9d 100644
--- a/lib/readline.c
+++ b/lib/readline.c
@@ -2,6 +2,7 @@
#include <readkey.h>
#include <init.h>
#include <xfuncs.h>
+#include <complete.h>
/*
* cmdline-editing related codes from vivi.
@@ -179,7 +180,13 @@ int readline(const char *prompt, char *buf, int len)
char ichar;
int insert = 1;
int rc = 0;
+#ifdef CONFIG_AUTO_COMPLETE
+ char tmp;
+ int reprint, i;
+ char *completestr;
+ complete_reset();
+#endif
puts (prompt);
while (1) {
@@ -192,6 +199,22 @@ int readline(const char *prompt, char *buf, int len)
}
switch (ichar) {
+ case '\t':
+#ifdef CONFIG_AUTO_COMPLETE
+ tmp = buf[num];
+ buf[num] = 0;
+ reprint = complete(buf, &completestr);
+ if (reprint)
+ printf("%s%s", prompt, buf);
+
+ i = 0;
+ while (completestr[i])
+ cread_add_char(completestr[i++], insert, &num, &eol_num, buf, len);
+
+ buf[num] = tmp;
+#endif
+ break;
+
case KEY_HOME:
BEGINNING_OF_LINE();
break;