aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/tools/console/defaultkeys.py138
-rw-r--r--mitmproxy/tools/console/help.py2
-rw-r--r--mitmproxy/tools/console/keymap.py9
-rw-r--r--mitmproxy/tools/console/master.py116
4 files changed, 147 insertions, 118 deletions
diff --git a/mitmproxy/tools/console/defaultkeys.py b/mitmproxy/tools/console/defaultkeys.py
new file mode 100644
index 00000000..2a442fbf
--- /dev/null
+++ b/mitmproxy/tools/console/defaultkeys.py
@@ -0,0 +1,138 @@
+
+def map(km):
+ km.add(":", "console.command ''", ["global"], "Command prompt")
+ km.add("?", "console.view.help", ["global"], "View help")
+ km.add("C", "console.view.commands", ["global"], "View commands")
+ km.add("O", "console.view.options", ["global"], "View options")
+ km.add("E", "console.view.eventlog", ["global"], "View event log")
+ km.add("Q", "console.exit", ["global"], "Exit immediately")
+ km.add("q", "console.view.pop", ["global"], "Exit the current view")
+ km.add("-", "console.layout.cycle", ["global"], "Cycle to next layout")
+ km.add("shift tab", "console.panes.next", ["global"], "Focus next layout pane")
+ km.add("P", "console.view.flow @focus", ["global"], "View flow details")
+
+ km.add("g", "console.nav.start", ["global"], "Go to start")
+ km.add("G", "console.nav.end", ["global"], "Go to end")
+ km.add("k", "console.nav.up", ["global"], "Up")
+ km.add("j", "console.nav.down", ["global"], "Down")
+ km.add("l", "console.nav.right", ["global"], "Right")
+ km.add("h", "console.nav.left", ["global"], "Left")
+ km.add(" ", "console.nav.pagedown", ["global"], "Page down")
+ km.add("ctrl f", "console.nav.pagedown", ["global"], "Page down")
+ km.add("ctrl b", "console.nav.pageup", ["global"], "Page up")
+
+ km.add("i", "console.command set intercept=", ["global"], "Set intercept")
+ km.add("W", "console.command set save_stream_file=", ["global"], "Stream to file")
+ km.add("A", "flow.resume @all", ["flowlist", "flowview"], "Resume all intercepted flows")
+ km.add("a", "flow.resume @focus", ["flowlist", "flowview"], "Resume this intercepted flow")
+ km.add(
+ "b", "console.command cut.save s.content|@focus ''",
+ ["flowlist", "flowview"],
+ "Save response body to file"
+ )
+ km.add("d", "view.remove @focus", ["flowlist", "flowview"], "Delete flow from view")
+ km.add("D", "view.duplicate @focus", ["flowlist", "flowview"], "Duplicate flow")
+ km.add(
+ "e",
+ "console.choose.cmd Format export.formats "
+ "console.command export.file {choice} @focus ''",
+ ["flowlist", "flowview"],
+ "Export this flow to file"
+ )
+ km.add("f", "console.command set view_filter=", ["flowlist"], "Set view filter")
+ km.add("F", "set console_focus_follow=toggle", ["flowlist"], "Set focus follow")
+ km.add(
+ "ctrl l",
+ "console.command cut.clip ",
+ ["flowlist", "flowview"],
+ "Send cuts to clipboard"
+ )
+ km.add("L", "console.command view.load ", ["flowlist"], "Load flows from file")
+ km.add("m", "flow.mark.toggle @focus", ["flowlist"], "Toggle mark on this flow")
+ km.add("M", "view.marked.toggle", ["flowlist"], "Toggle viewing marked flows")
+ km.add(
+ "n",
+ "console.command view.create get https://google.com",
+ ["flowlist"],
+ "Create a new flow"
+ )
+ km.add(
+ "o",
+ "console.choose.cmd Order view.order.options "
+ "set console_order={choice}",
+ ["flowlist"],
+ "Set flow list order"
+ )
+ km.add("r", "replay.client @focus", ["flowlist", "flowview"], "Replay this flow")
+ km.add("S", "console.command replay.server ", ["flowlist"], "Start server replay")
+ km.add("v", "set console_order_reversed=toggle", ["flowlist"], "Reverse flow list order")
+ km.add("U", "flow.mark @all false", ["flowlist"], "Un-set all marks")
+ km.add("w", "console.command save.file @shown ", ["flowlist"], "Save listed flows to file")
+ km.add("V", "flow.revert @focus", ["flowlist", "flowview"], "Revert changes to this flow")
+ km.add("X", "flow.kill @focus", ["flowlist"], "Kill this flow")
+ km.add("z", "view.remove @all", ["flowlist"], "Clear flow list")
+ km.add("Z", "view.remove @hidden", ["flowlist"], "Purge all flows not showing")
+ km.add(
+ "|",
+ "console.command script.run @focus ",
+ ["flowlist", "flowview"],
+ "Run a script on this flow"
+ )
+ km.add("enter", "console.view.flow @focus", ["flowlist"], "View this flow")
+
+ km.add(
+ "e",
+ "console.choose.cmd Part console.edit.focus.options "
+ "console.edit.focus {choice}",
+ ["flowview"],
+ "Edit a flow component"
+ )
+ km.add(
+ "f",
+ "view.setval.toggle @focus fullcontents",
+ ["flowview"],
+ "Toggle viewing full contents on this flow",
+ )
+ km.add("w", "console.command save.file @focus ", ["flowview"], "Save flow to file")
+ km.add(" ", "view.focus.next", ["flowview"], "Go to next flow")
+
+ km.add(
+ "v",
+ "console.choose \"View Part\" request,response "
+ "console.bodyview @focus {choice}",
+ ["flowview"],
+ "View flow body in an external viewer"
+ )
+ km.add("p", "view.focus.prev", ["flowview"], "Go to previous flow")
+ km.add("m", "console.flowview.mode.set", ["flowview"], "Set flow view mode")
+ km.add("tab", "console.nav.right", ["flowview"], "Go to next tab")
+ km.add(
+ "z",
+ "console.choose \"Part\" request,response "
+ "flow.encode.toggle @focus {choice}",
+ ["flowview"],
+ "Encode/decode flow body"
+ )
+
+ km.add("L", "console.command options.load ", ["options"], "Load from file")
+ km.add("S", "console.command options.save ", ["options"], "Save to file")
+ km.add("D", "options.reset", ["options"], "Reset all options")
+ km.add("d", "console.options.reset.current", ["options"], "Reset this option")
+
+ km.add("a", "console.grideditor.add", ["grideditor"], "Add a row after cursor")
+ km.add("A", "console.grideditor.insert", ["grideditor"], "Insert a row before cursor")
+ km.add("tab", "console.grideditor.next", ["grideditor"], "Go to next field")
+ km.add("d", "console.grideditor.delete", ["grideditor"], "Delete this row")
+ km.add(
+ "r",
+ "console.command console.grideditor.readfile",
+ ["grideditor"],
+ "Read unescaped data from file"
+ )
+ km.add(
+ "R",
+ "console.command console.grideditor.readfile_escaped",
+ ["grideditor"],
+ "Read a Python-style escaped string from file"
+ )
+ km.add("e", "console.grideditor.editor", ["grideditor"], "Edit in external editor")
diff --git a/mitmproxy/tools/console/help.py b/mitmproxy/tools/console/help.py
index 6b843e36..959f7763 100644
--- a/mitmproxy/tools/console/help.py
+++ b/mitmproxy/tools/console/help.py
@@ -29,7 +29,7 @@ class HelpView(tabs.Tabs, layoutwidget.LayoutWidget):
k = b.key
if b.key == " ":
k = "space"
- kvs.append((k, b.command))
+ kvs.append((k, b.help or b.command))
return common.format_keyvals(kvs)
def keybindings(self):
diff --git a/mitmproxy/tools/console/keymap.py b/mitmproxy/tools/console/keymap.py
index 43a31530..343c46a6 100644
--- a/mitmproxy/tools/console/keymap.py
+++ b/mitmproxy/tools/console/keymap.py
@@ -15,7 +15,10 @@ SupportedContexts = {
}
-Binding = collections.namedtuple("Binding", ["key", "command", "contexts"])
+Binding = collections.namedtuple(
+ "Binding",
+ ["key", "command", "contexts", "help"]
+)
class Keymap:
@@ -24,7 +27,7 @@ class Keymap:
self.keys = {}
self.bindings = []
- def add(self, key: str, command: str, contexts: typing.Sequence[str]) -> None:
+ def add(self, key: str, command: str, contexts: typing.Sequence[str], help="") -> None:
"""
Add a key to the key map. If context is empty, it's considered to be
a global binding.
@@ -35,7 +38,7 @@ class Keymap:
if c not in SupportedContexts:
raise ValueError("Unsupported context: %s" % c)
- b = Binding(key=key, command=command, contexts=contexts)
+ b = Binding(key=key, command=command, contexts=contexts, help=help)
self.bindings.append(b)
self.bind(b)
diff --git a/mitmproxy/tools/console/master.py b/mitmproxy/tools/console/master.py
index 038e76b2..cf145c70 100644
--- a/mitmproxy/tools/console/master.py
+++ b/mitmproxy/tools/console/master.py
@@ -23,6 +23,7 @@ from mitmproxy import flow
from mitmproxy.addons import intercept
from mitmproxy.addons import readfile
from mitmproxy.addons import view
+from mitmproxy.tools.console import defaultkeys
from mitmproxy.tools.console import keymap
from mitmproxy.tools.console import overlay
from mitmproxy.tools.console import palettes
@@ -428,119 +429,6 @@ class ConsoleAddon:
signals.flow_change.send(self, flow=f)
-def default_keymap(km):
- km.add(":", "console.command ''", ["global"])
- km.add("?", "console.view.help", ["global"])
- km.add("C", "console.view.commands", ["global"])
- km.add("O", "console.view.options", ["global"])
- km.add("E", "console.view.eventlog", ["global"])
- km.add("Q", "console.exit", ["global"])
- km.add("q", "console.view.pop", ["global"])
- km.add("-", "console.layout.cycle", ["global"])
- km.add("shift tab", "console.panes.next", ["global"])
- km.add("P", "console.view.flow @focus", ["global"])
-
- km.add("g", "console.nav.start", ["global"])
- km.add("G", "console.nav.end", ["global"])
- km.add("k", "console.nav.up", ["global"])
- km.add("j", "console.nav.down", ["global"])
- km.add("l", "console.nav.right", ["global"])
- km.add("h", "console.nav.left", ["global"])
- km.add(" ", "console.nav.pagedown", ["global"])
- km.add("ctrl f", "console.nav.pagedown", ["global"])
- km.add("ctrl b", "console.nav.pageup", ["global"])
-
- km.add("i", "console.command set intercept=", ["global"])
- km.add("W", "console.command set save_stream_file=", ["global"])
- km.add("A", "flow.resume @all", ["flowlist", "flowview"])
- km.add("a", "flow.resume @focus", ["flowlist", "flowview"])
- km.add(
- "b", "console.command cut.save s.content|@focus ''",
- ["flowlist", "flowview"]
- )
- km.add("d", "view.remove @focus", ["flowlist", "flowview"])
- km.add("D", "view.duplicate @focus", ["flowlist", "flowview"])
- km.add(
- "e",
- "console.choose.cmd Format export.formats "
- "console.command export.file {choice} @focus ''",
- ["flowlist", "flowview"]
- )
- km.add("f", "console.command set view_filter=", ["flowlist"])
- km.add("F", "set console_focus_follow=toggle", ["flowlist"])
- km.add("ctrl l", "console.command cut.clip ", ["flowlist", "flowview"])
- km.add("L", "console.command view.load ", ["flowlist"])
- km.add("m", "flow.mark.toggle @focus", ["flowlist"])
- km.add("M", "view.marked.toggle", ["flowlist"])
- km.add(
- "n",
- "console.command view.create get https://google.com",
- ["flowlist"]
- )
- km.add(
- "o",
- "console.choose.cmd Order view.order.options "
- "set console_order={choice}",
- ["flowlist"]
- )
- km.add("r", "replay.client @focus", ["flowlist", "flowview"])
- km.add("S", "console.command replay.server ", ["flowlist"])
- km.add("v", "set console_order_reversed=toggle", ["flowlist"])
- km.add("U", "flow.mark @all false", ["flowlist"])
- km.add("w", "console.command save.file @shown ", ["flowlist"])
- km.add("V", "flow.revert @focus", ["flowlist", "flowview"])
- km.add("X", "flow.kill @focus", ["flowlist"])
- km.add("z", "view.remove @all", ["flowlist"])
- km.add("Z", "view.remove @hidden", ["flowlist"])
- km.add("|", "console.command script.run @focus ", ["flowlist", "flowview"])
- km.add("enter", "console.view.flow @focus", ["flowlist"])
-
- km.add(
- "e",
- "console.choose.cmd Part console.edit.focus.options "
- "console.edit.focus {choice}",
- ["flowview"]
- )
- km.add("f", "view.setval.toggle @focus fullcontents", ["flowview"])
- km.add("w", "console.command save.file @focus ", ["flowview"])
- km.add(" ", "view.focus.next", ["flowview"])
- km.add(
- "o",
- "console.choose.cmd Order view.order.options "
- "set console_order={choice}",
- ["flowlist"]
- )
-
- km.add(
- "v",
- "console.choose \"View Part\" request,response "
- "console.bodyview @focus {choice}",
- ["flowview"]
- )
- km.add("p", "view.focus.prev", ["flowview"])
- km.add("m", "console.flowview.mode.set", ["flowview"])
- km.add("tab", "console.nav.right", ["flowview"])
- km.add(
- "z",
- "console.choose \"Part\" request,response "
- "flow.encode.toggle @focus {choice}",
- ["flowview"]
- )
-
- km.add("L", "console.command options.load ", ["options"])
- km.add("S", "console.command options.save ", ["options"])
- km.add("D", "options.reset", ["options"])
- km.add("d", "console.options.reset.current", ["options"])
-
- km.add("a", "console.grideditor.add", ["grideditor"])
- km.add("A", "console.grideditor.insert", ["grideditor"])
- km.add("tab", "console.grideditor.next", ["grideditor"])
- km.add("d", "console.grideditor.delete", ["grideditor"])
- km.add("r", "console.command console.grideditor.readfile", ["grideditor"])
- km.add("R", "console.command console.grideditor.readfile_escaped", ["grideditor"])
- km.add("e", "console.grideditor.editor", ["grideditor"])
-
-
class ConsoleMaster(master.Master):
def __init__(self, options, server):
@@ -556,7 +444,7 @@ class ConsoleMaster(master.Master):
# This line is just for type hinting
self.options = self.options # type: Options
self.keymap = keymap.Keymap(self)
- default_keymap(self.keymap)
+ defaultkeys.map(self.keymap)
self.options.errored.connect(self.options_error)
self.view_stack = []