diff options
| -rw-r--r-- | README.rst | 1 | ||||
| -rw-r--r-- | mitmproxy/tools/console/commander/commander.py | 49 | 
2 files changed, 42 insertions, 8 deletions
| @@ -183,7 +183,6 @@ with the following command:      :target: https://pypi.python.org/pypi/mitmproxy      :alt: Supported Python versions -.. _`advanced installation`: https://docs.mitmproxy.org/stable/overview-installation/#advanced-installation  .. _virtualenv: https://virtualenv.pypa.io/  .. _`pytest`: http://pytest.org/  .. _tox: https://tox.readthedocs.io/ diff --git a/mitmproxy/tools/console/commander/commander.py b/mitmproxy/tools/console/commander/commander.py index a5bd65f9..0feae28e 100644 --- a/mitmproxy/tools/console/commander/commander.py +++ b/mitmproxy/tools/console/commander/commander.py @@ -65,6 +65,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 = [] @@ -131,6 +136,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. @@ -157,25 +168,50 @@ 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": +            prev_cursor = self.cbuf.cursor +            pos = self.cbuf.text.rfind(' ', 0, self.cbuf.cursor - 1) +            if pos == -1: +                new_text = self.cbuf.text[self.cbuf.cursor:] +                cursor_pos = 0 +            else: +                txt_after = self.cbuf.text[self.cbuf.cursor:] +                txt_before = self.cbuf.text[0:pos] +                new_text = f"{txt_before} {txt_after}" +                cursor_pos = prev_cursor - (prev_cursor - pos) + 1 +            self.cbuf.set_text(new_text) +            self.cbuf.cursor = cursor_pos +        elif key == "backspace":              self.cbuf.backspace()              if self.cbuf.text == '':                  self.active_filter = False                  self.master.commands.call("commands.history.filter", "")                  self.filter_str = '' -        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":              if self.active_filter is False:                  self.active_filter = True                  self.filter_str = self.cbuf.text                  self.master.commands.call("commands.history.filter", self.cbuf.text) -              cmd = self.master.commands.execute("commands.history.prev")              self.cbuf = CommandBuffer(self.master, cmd) -        elif key == "down": +        elif key == "down" or key == "ctrl n":              prev_cmd = self.cbuf.text              cmd = self.master.commands.execute("commands.history.next") @@ -189,7 +225,6 @@ class CommandEdit(urwid.WidgetWrap):                      self.cbuf = CommandBuffer(self.master, '')              else:                  self.cbuf = CommandBuffer(self.master, cmd) -          elif key == "shift tab":              self.cbuf.cycle_completion(False)          elif key == "tab": | 
