From 046779615f0a492d567300f08de79eaf5f780d84 Mon Sep 17 00:00:00 2001 From: Henrique Date: Mon, 25 Nov 2019 15:41:58 -0500 Subject: Added some navigation keys to the command bar same way as in a Linux terminal --- mitmproxy/tools/console/commander/commander.py | 42 +++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) (limited to 'mitmproxy') diff --git a/mitmproxy/tools/console/commander/commander.py b/mitmproxy/tools/console/commander/commander.py index d751422b..feaa4e36 100644 --- a/mitmproxy/tools/console/commander/commander.py +++ b/mitmproxy/tools/console/commander/commander.py @@ -67,6 +67,11 @@ class CommandBuffer: else: self._cursor = x + def set_text(self, text: str) -> None: + self.text = text + self._cursor = len(self.text) + self.render() + def render(self): parts, remaining = self.master.commands.parse_partial(self.text) ret = [] @@ -133,6 +138,12 @@ class CommandBuffer: self.cursor = self.cursor - 1 self.completion = None + def delete(self) -> None: + if self.cursor == len(self.text): + return + self.text = self.text[:self.cursor] + self.text[self.cursor + 1:] + self.completion = None + def insert(self, k: str) -> None: """ Inserts text at the cursor. @@ -197,16 +208,37 @@ class CommandEdit(urwid.WidgetWrap): self.update() def keypress(self, size, key) -> None: - if key == "backspace": + if key == "delete": + self.cbuf.delete() + elif key == "ctrl a" or key == 'home': + self.cbuf.cursor = 0 + elif key == "ctrl e" or key == 'end': + self.cbuf.cursor = len(self.cbuf.text) + elif key == "meta b": + self.cbuf.cursor = self.cbuf.text.rfind(' ', 0, self.cbuf.cursor) + elif key == "meta f": + pos = self.cbuf.text.find(' ', self.cbuf.cursor + 1) + if pos == -1: + pos = len(self.cbuf.text) + self.cbuf.cursor = pos + elif key == "ctrl w": + txt = self.cbuf.text.strip() + if(txt != ''): + chunks = txt.split(' ')[0:-1] + if len(chunks) == 0: + self.cbuf.set_text(' '.join(chunks)) + else: + self.cbuf.set_text(' '.join(chunks) + ' ') + elif key == "backspace": self.cbuf.backspace() - elif key == "left": + elif key == "left" or key == "ctrl b": self.cbuf.left() - elif key == "right": + elif key == "right" or key == "ctrl f": self.cbuf.right() - elif key == "up": + elif key == "up" or key == "ctrl p": self.history.add_command(self.cbuf) self.cbuf = self.history.get_prev() or self.cbuf - elif key == "down": + elif key == "down" or key == "ctrl n": self.cbuf = self.history.get_next() or self.cbuf elif key == "shift tab": self.cbuf.cycle_completion(False) -- cgit v1.2.3