It's quite usual to have RAM or flash address stored in env vars.
Use $ auto-completion for such arguments.

Signed-off-by: Boris Brezillon <boris.brezil...@bootlin.com>
---
 cmd/mtd.c | 40 +++++++++++++++++++++++++++++++++++-----
 1 file changed, 35 insertions(+), 5 deletions(-)

diff --git a/cmd/mtd.c b/cmd/mtd.c
index cda702d18b16..b13dbef3e888 100644
--- a/cmd/mtd.c
+++ b/cmd/mtd.c
@@ -517,6 +517,36 @@ static int mtd_name_complete(int argc, char * const 
argv[], char last_char,
 
        return n_found;
 }
+
+static int subcmd_complete(int maxargs, int argc, char * const argv[],
+                          char last_char, int maxv, char *cmdv[])
+{
+       if (argc > maxargs)
+               return 0;
+
+       if (argc <= 2)
+               return mtd_name_complete(argc, argv, last_char, maxv, cmdv);
+
+       return dollar_complete(argc, argv, last_char, maxv, cmdv);
+}
+
+static int four_args_complete(int argc, char * const argv[], char last_char,
+                             int maxv, char *cmdv[])
+{
+       return subcmd_complete(5, argc, argv, last_char, maxv, cmdv);
+}
+
+static int three_args_complete(int argc, char * const argv[], char last_char,
+                              int maxv, char *cmdv[])
+{
+       return subcmd_complete(4, argc, argv, last_char, maxv, cmdv);
+}
+
+static int one_arg_complete(int argc, char * const argv[], char last_char,
+                           int maxv, char *cmdv[])
+{
+       return subcmd_complete(2, argc, argv, last_char, maxv, cmdv);
+}
 #endif /* CONFIG_AUTO_COMPLETE */
 
 static char mtd_help_text[] =
@@ -548,12 +578,12 @@ static char mtd_help_text[] =
 U_BOOT_CMD_WITH_SUBCMDS(mtd, "MTD utils", mtd_help_text,
                U_BOOT_SUBCMD_MKENT(list, 1, 1, do_mtd_list),
                U_BOOT_SUBCMD_MKENT_COMPLETE(read, 5, 0, do_mtd_io,
-                                            mtd_name_complete),
+                                            four_args_complete),
                U_BOOT_SUBCMD_MKENT_COMPLETE(write, 5, 0, do_mtd_io,
-                                            mtd_name_complete),
+                                            four_args_complete),
                U_BOOT_SUBCMD_MKENT_COMPLETE(dump, 4, 0, do_mtd_io,
-                                            mtd_name_complete),
+                                            three_args_complete),
                U_BOOT_SUBCMD_MKENT_COMPLETE(erase, 4, 0, do_mtd_erase,
-                                            mtd_name_complete),
+                                            three_args_complete),
                U_BOOT_SUBCMD_MKENT_COMPLETE(bad, 2, 1, do_mtd_bad,
-                                            mtd_name_complete));
+                                            one_arg_complete));
-- 
2.17.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to