From: Brian Brooks Date: Sun, 18 Oct 2020 13:37:09 +0000 (-0500) Subject: server/telnet: Handle Ctrl+K X-Git-Tag: v0.11.0-rc1~96 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=9e2a0effb2b7b933db00543f1e6879541707a2f3 server/telnet: Handle Ctrl+K Handle Ctrl+K shortcut which clears the line from the cursor position to the end of line. Change-Id: I2ecff5284473cef7c11cf9cb7e1c0c97d55f6c1c Signed-off-by: Brian Brooks Reviewed-on: http://openocd.zylin.com/5868 Reviewed-by: Antonio Borneo Tested-by: jenkins Reviewed-by: Marc Schink --- diff --git a/src/server/telnet_server.c b/src/server/telnet_server.c index 0243c6328e..407ab68aef 100644 --- a/src/server/telnet_server.c +++ b/src/server/telnet_server.c @@ -538,7 +538,17 @@ static int telnet_input(struct connection *connection) telnet_move_cursor(connection, 0); else if (*buf_p == CTRL('E')) telnet_move_cursor(connection, t_con->line_size); - else + else if (*buf_p == CTRL('K')) { /* kill line to end */ + if (t_con->line_cursor < t_con->line_size) { + /* overwrite with space, until end of line, move back */ + for (size_t i = t_con->line_cursor; i < t_con->line_size; i++) + telnet_write(connection, " ", 1); + for (size_t i = t_con->line_cursor; i < t_con->line_size; i++) + telnet_write(connection, "\b", 1); + t_con->line[t_con->line_cursor] = '\0'; + t_con->line_size = t_con->line_cursor; + } + } else LOG_DEBUG("unhandled nonprintable: %2.2x", *buf_p); } }