aboutsummaryrefslogtreecommitdiff
path: root/src/server/telnet_server.c
diff options
context:
space:
mode:
authorMarc Schink <openocd-dev@marcschink.de>2015-10-04 20:21:00 +0200
committerPaul Fertser <fercerpav@gmail.com>2018-01-13 09:41:26 +0000
commite0010c3e6fe09d9d332b279e661858fc449c0645 (patch)
tree29025c15b5d31caa8e6684538961b44a231aa64b /src/server/telnet_server.c
parent9cd74c113c3a92dd41485ad4d9ba0a275682712b (diff)
downloadriscv-openocd-e0010c3e6fe09d9d332b279e661858fc449c0645.zip
riscv-openocd-e0010c3e6fe09d9d332b279e661858fc449c0645.tar.gz
riscv-openocd-e0010c3e6fe09d9d332b279e661858fc449c0645.tar.bz2
server/telnet: Handle Ctrl+A and Ctrl+E
Handle the Ctrl+A and Ctrl+E shortcuts which move the cursor to the beginning and end of the command line, respectively. Change-Id: I89fa5fd3c5edeb08a3f9320fda766f72ce9d7f64 Signed-off-by: Marc Schink <openocd-dev@marcschink.de> Reviewed-on: http://openocd.zylin.com/3415 Tested-by: jenkins Reviewed-by: Paul Fertser <fercerpav@gmail.com>
Diffstat (limited to 'src/server/telnet_server.c')
-rw-r--r--src/server/telnet_server.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/server/telnet_server.c b/src/server/telnet_server.c
index 7507afe..06a9c7a 100644
--- a/src/server/telnet_server.c
+++ b/src/server/telnet_server.c
@@ -303,6 +303,30 @@ static void telnet_history_down(struct connection *connection)
telnet_history_go(connection, next_history);
}
+static void telnet_move_cursor(struct connection *connection, size_t pos)
+{
+ struct telnet_connection *tc;
+ size_t tmp;
+
+ tc = connection->priv;
+
+ if (pos < tc->line_cursor) {
+ tmp = tc->line_cursor - pos;
+
+ for (size_t i = 0; i < tmp; i += 16)
+ telnet_write(connection, "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",
+ MIN(tmp - i, 16));
+ } else {
+ tmp = pos - tc->line_cursor;
+
+ for (size_t i = 0; i < tmp; i += 16)
+ telnet_write(connection, tc->line + tc->line_cursor + i,
+ MIN(tmp - i, 16));
+ }
+
+ tc->line_cursor = pos;
+}
+
static int telnet_input(struct connection *connection)
{
int bytes_read;
@@ -482,6 +506,10 @@ static int telnet_input(struct connection *connection)
telnet_history_up(connection);
else if (*buf_p == CTRL('N')) /* cursor down */
telnet_history_down(connection);
+ else if (*buf_p == CTRL('A'))
+ telnet_move_cursor(connection, 0);
+ else if (*buf_p == CTRL('E'))
+ telnet_move_cursor(connection, t_con->line_size);
else
LOG_DEBUG("unhandled nonprintable: %2.2x", *buf_p);
}