From 195d9b80e1a94f6bae954022979ea1350c95f7c2 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Thu, 7 Apr 2022 16:41:34 -0700 Subject: [PATCH] shell: Fix not able to auto complete commands with submenu prefix If the command was given with submenu prefix the code wasn't able to detect the command to be able to generate the auto complete for its arguments. --- src/shared/shell.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/shared/shell.c b/src/shared/shell.c index 72232f7c0..dfda8128a 100644 --- a/src/shared/shell.c +++ b/src/shared/shell.c @@ -911,6 +911,26 @@ static char **menu_completion(const struct bt_shell_menu_entry *entry, return matches; } +static char **submenu_completion(const char *text, int argc, char *input_cmd) +{ + const struct bt_shell_menu *menu; + char *cmd; + + if (data.main != data.menu) + return NULL; + + cmd = strrchr(input_cmd, '.'); + if (!cmd) + return NULL; + + menu = find_menu(input_cmd, cmd - input_cmd, NULL); + if (!menu) + return NULL; + + return menu_completion(menu->entries, text, argc, + input_cmd + strlen(menu->name) + 1); +} + static char **shell_completion(const char *text, int start, int end) { char **matches = NULL; @@ -928,10 +948,14 @@ static char **shell_completion(const char *text, int start, int end) matches = menu_completion(default_menu, text, w.we_wordc, w.we_wordv[0]); - if (!matches) + if (!matches) { matches = menu_completion(data.menu->entries, text, w.we_wordc, w.we_wordv[0]); + if (!matches) + matches = submenu_completion(text, w.we_wordc, + w.we_wordv[0]); + } wordfree(&w); } else { -- 2.47.3