aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@corte.si>2017-03-17 11:46:59 +1300
committerAldo Cortesi <aldo@corte.si>2017-03-19 10:32:22 +1300
commit3a949f35f83f94e55083d552f33b9ed21c6df84d (patch)
tree48050b696fc71daa77f24a59ace084d5d390cb96
parentd759150734e19c1b253ca112b723440c4e773074 (diff)
downloadmitmproxy-3a949f35f83f94e55083d552f33b9ed21c6df84d.tar.gz
mitmproxy-3a949f35f83f94e55083d552f33b9ed21c6df84d.tar.bz2
mitmproxy-3a949f35f83f94e55083d552f33b9ed21c6df84d.zip
console options: better defaults display, g/G/D keyboard shortcuts
-rw-r--r--mitmproxy/optmanager.py4
-rw-r--r--mitmproxy/tools/console/options.py33
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".