This is an automated email from Gerrit.

Antonio Borneo ([email protected]) just uploaded a new patch set to 
Gerrit, which you can find at http://openocd.zylin.com/6194

-- gerrit

commit 85fce72eadec570c5fbd14442bb57e20bf0e04f0
Author: Antonio Borneo <[email protected]>
Date:   Mon Apr 26 14:22:06 2021 +0200

    telnet: allow hiding selected commands during auto-completion
    
    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 used 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 <[email protected]>

diff --git a/src/server/startup.tcl b/src/server/startup.tcl
index dd1b31e..04a1cc0 100644
--- a/src/server/startup.tcl
+++ b/src/server/startup.tcl
@@ -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]
+}
diff --git a/src/server/telnet_server.c b/src/server/telnet_server.c
index d5e0353..acb57ef 100644
--- a/src/server/telnet_server.c
+++ b/src/server/telnet_server.c
@@ -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");

-- 

Reply via email to