]> git.gag.com Git - fw/openocd/commitdiff
telnet: allow hiding selected commands during auto-completion
authorAntonio Borneo <borneo.antonio@gmail.com>
Mon, 26 Apr 2021 12:22:06 +0000 (14:22 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 8 May 2021 08:48:03 +0000 (09:48 +0100)
We have TCL procedure and commands that we do not want to show in
the list of auto-completion. E.g. TCL wrappers for deprecated
commands, internal procedures that are not supposed to be exposed
to user, or even commands that the user decides to hide.

Create a TCL procedure to be called by telnet auto-complete code
in place of the hard-coded TCL command. The procedure will run the
same command and will filter-out the unwanted command names.

Initialize the list of commands to be filtered-out with the name
of the TCL procedure above, as it is considered as internal.

Change-Id: I2d83bbf8194502368c589c85cccb617e69128c69
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/6194
Tested-by: jenkins
Reviewed-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
src/server/startup.tcl
src/server/telnet_server.c

index dd1b31e417dd15942a3906dbf3b25a5734aa062e..04a1cc0469099f955c08c5fe1a57b338ee3242b7 100644 (file)
@@ -19,3 +19,20 @@ proc prevent_cps {} {
 
 proc POST {args} { prevent_cps }
 proc Host: {args} { prevent_cps }
+
+# list of commands we don't want to appear in autocomplete
+lappend _telnet_autocomplete_skip _telnet_autocomplete_helper
+
+# helper for telnet autocomplete
+proc _telnet_autocomplete_helper pattern {
+       set cmds [info commands $pattern]
+
+       # skip matches in variable '_telnet_autocomplete_skip'
+       foreach skip $::_telnet_autocomplete_skip {
+               foreach n [lsearch -all -regexp $cmds "^$skip\$"] {
+                       set cmds [lreplace $cmds $n $n]
+               }
+       }
+
+       return [lsort $cmds]
+}
index d5e0353c884b754e119bb0e71aecac40becde25a..acb57efd10b6bf06c083cdf6442182e914f19366 100644 (file)
@@ -470,7 +470,7 @@ static void telnet_auto_complete(struct connection *connection)
        query[usr_cmd_len] = '\0';
 
        /* filter commands */
-       char *query_cmd = alloc_printf("lsort [info commands {%s*}]", query);
+       char *query_cmd = alloc_printf("_telnet_autocomplete_helper {%s*}", query);
 
        if (!query_cmd) {
                LOG_ERROR("Out of memory");