diff options
-rw-r--r-- | mitmproxy/optmanager.py | 4 | ||||
-rw-r--r-- | mitmproxy/tools/console/options.py | 33 |
2 files changed, 24 insertions, 13 deletions
diff --git a/mitmproxy/optmanager.py b/mitmproxy/optmanager.py index 5064ff44..c878528c 100644 --- a/mitmproxy/optmanager.py +++ b/mitmproxy/optmanager.py @@ -61,7 +61,7 @@ class _Option: self.value = unset def has_changed(self) -> bool: - return self.value is not unset + return self.current() != self.default def __eq__(self, other) -> bool: for i in self.__slots__: @@ -172,7 +172,7 @@ class OptManager: """ for o in self._options.values(): o.reset() - self.changed.send(self._options.keys()) + self.changed.send(self, updated=set(self._options.keys())) def update_known(self, **kwargs): """ diff --git a/mitmproxy/tools/console/options.py b/mitmproxy/tools/console/options.py index 94b80f83..2f874c1f 100644 --- a/mitmproxy/tools/console/options.py +++ b/mitmproxy/tools/console/options.py @@ -6,17 +6,18 @@ from mitmproxy.tools.console import common footer = [ - ('heading_key', "enter/space"), ":toggle ", - ('heading_key', "C"), ":clear all ", - ('heading_key', "W"), ":save ", + ('heading_key', "enter"), ":edit ", + ('heading_key', "?"), ":help ", ] def _mkhelp(): text = [] keys = [ - ("enter/space", "activate option"), - ("C", "clear all options"), + ("enter", "edit option"), + ("D", "reset all to defaults"), + ("g", "go to start of list"), + ("G", "go to end of list"), ("w", "save options"), ] text.extend(common.format_keyvals(keys, key="key", val="text", indent=4)) @@ -81,11 +82,7 @@ class OptionItem(urwid.WidgetWrap): def keypress(self, xxx_todo_changeme, key): if key == "enter": if self.opt.typespec == bool: - setattr( - self.master.options, - self.opt.name, - not self.opt.current() - ) + self.master.options.toggler(self.opt.name)() else: return key @@ -135,7 +132,18 @@ class OptionListWalker(urwid.ListWalker): class OptionsList(urwid.ListBox): def __init__(self, master): self.master = master - super().__init__(OptionListWalker(master)) + self.walker = OptionListWalker(master) + super().__init__(self.walker) + + def keypress(self, size, key): + if key == "g": + self.set_focus(0) + self.walker._modified() + elif key == "G": + self.set_focus(len(self.walker.opts) - 1) + self.walker._modified() + else: + return urwid.ListBox.keypress(self, size, key) class OptionHelp(urwid.Frame): @@ -186,6 +194,9 @@ class Options(urwid.Pile): ) % len(self.widget_list) self.widget_list[1].active(self.focus_position == 1) key = None + elif key == "D": + self.master.options.reset() + key = None # This is essentially a copypasta from urwid.Pile's keypress handler. # So much for "closed for modification, but open for extension". |