diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2008-03-02 17:23:10 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2008-03-02 17:23:10 +0100 |
commit | 23d1cead89190823609cfd9ce1112237bd310843 (patch) | |
tree | 37ea247fdf7a0fa95b62dbe81820aa8c4dfec93a /lib | |
parent | 1a8e0f589f55a0ac2625f7d885944451b41a2eed (diff) | |
download | barebox-23d1cead89190823609cfd9ce1112237bd310843.tar.gz barebox-23d1cead89190823609cfd9ce1112237bd310843.tar.xz |
readline: Fix a bug when tab completion is used in the middle
of the line.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/readline.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/readline.c b/lib/readline.c index 1bdfe61b9d..503f4efaea 100644 --- a/lib/readline.c +++ b/lib/readline.c @@ -201,17 +201,25 @@ int readline(const char *prompt, char *buf, int len) switch (ichar) { case '\t': #ifdef CONFIG_AUTO_COMPLETE + buf[eol_num] = 0; tmp = buf[num]; + buf[num] = 0; reprint = complete(buf, &completestr); - if (reprint) + buf[num] = tmp; + + if (reprint) { printf("%s%s", prompt, buf); + if (tmp) + for (i = 0; i < eol_num - num; i++) + getcmd_putch(CTL_BACKSPACE); + } + i = 0; while (completestr[i]) - cread_add_char(completestr[i++], insert, &num, &eol_num, buf, len); - - buf[num] = tmp; + cread_add_char(completestr[i++], insert, &num, + &eol_num, buf, len); #endif break; |