From 610b5579a781be825d78d57b38510dbd9c8baa3a Mon Sep 17 00:00:00 2001 From: Per-Olov Jernberg Date: Sun, 6 Oct 2019 15:03:23 +0200 Subject: [PATCH] idf_monitor: Exit with CTRL+X in menu Currently, the only way of exiting the idf_monitor program is to hit the CTRL+] button, if your keyboard doesn't have that key unless you hit another modifier key, it's not super trivial to exit. This change adds the option to exit with CTRL+T (for menu) then hitting X (or CTRL+X) for exiting. Closes https://github.com/espressif/esp-idf/pull/4167 Closes https://github.com/espressif/esp-idf/issues/4129 --- tools/idf_monitor.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/idf_monitor.py b/tools/idf_monitor.py index 8ff925add4..0d766eb1e1 100755 --- a/tools/idf_monitor.py +++ b/tools/idf_monitor.py @@ -62,6 +62,7 @@ CTRL_R = '\x12' CTRL_T = '\x14' CTRL_Y = '\x19' CTRL_P = '\x10' +CTRL_X = '\x18' CTRL_RBRACKET = '\x1d' # Ctrl+] # ANSI terminal codes (if changed, regular expressions in LineMatcher need to be udpated) @@ -487,6 +488,9 @@ class Monitor(object): self.serial.setRTS(False) # EN=HIGH, chip out of reset time.sleep(0.45) # timeouts taken from esptool.py, includes esp32r0 workaround. defaults: 0.05 self.serial.setDTR(False) # IO0=HIGH, done + elif c in [CTRL_X, 'x', 'X']: # Exiting from within the menu + self.console_reader.stop() + self.serial_reader.stop() else: red_print('--- unknown menu character {} --'.format(key_description(c))) @@ -505,6 +509,7 @@ class Monitor(object): --- {appmake:7} Build & flash app only --- {output:7} Toggle output display --- {pause:7} Reset target into bootloader to pause app via RTS line +--- {menuexit:7} Exit program """.format(version=__version__, exit=key_description(self.exit_key), menu=key_description(self.menu_key), @@ -512,7 +517,8 @@ class Monitor(object): makecmd=key_description(CTRL_F), appmake=key_description(CTRL_A), output=key_description(CTRL_Y), - pause=key_description(CTRL_P)) + pause=key_description(CTRL_P), + menuexit=key_description(CTRL_X) + ' (or X)') def __enter__(self): """ Use 'with self' to temporarily disable monitoring behaviour """