summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2014-05-19 13:43:19 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2014-05-19 22:23:55 +0200
commite5c59c386784d9c52505823ee293c94f633a8744 (patch)
tree6996935cbfa9941616dc83afed2e8b58bc6dc343 /common
parent46e8eb82199de1725805821df9b689fc38b95c7f (diff)
downloadbarebox-e5c59c386784d9c52505823ee293c94f633a8744.tar.gz
barebox-e5c59c386784d9c52505823ee293c94f633a8744.tar.xz
complete: Fix completion after options
the command specific complete callbacks only work when no option is typed already. For example "devinfo <tab><tab>" correctly completes the devices, but "devinfo -x <tab><tab>" does nothing. That is because the options are passed to the input string of the completion handlers. Skip the option string by finding the last space in the input string. This is not perfect since "devinfo -f<tab><tab>" still does not work, but it's better than what we have now. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common')
-rw-r--r--common/complete.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/common/complete.c b/common/complete.c
index 9206ef02a5..368321f921 100644
--- a/common/complete.c
+++ b/common/complete.c
@@ -277,11 +277,16 @@ static char* cmd_complete_lookup(struct string_list *sl, char *instr)
int len;
int ret = COMPLETE_END;
char *res = NULL;
+ char *t;
for_each_command(cmdtp) {
len = strlen(cmdtp->name);
if (!strncmp(instr, cmdtp->name, len) && instr[len] == ' ') {
instr += len + 1;
+ t = strrchr(instr, ' ');
+ if (t)
+ instr = t + 1;
+
if (cmdtp->complete) {
ret = cmdtp->complete(sl, instr);
res = instr;