console: teach keymap to understand "space"

Urwid uses " ", which is not a great user experience.
This commit is contained in:
Aldo Cortesi 2017-06-13 15:36:00 +12:00
parent 08972c3f5b
commit 4a7cafee9e
3 changed files with 19 additions and 8 deletions

View File

@ -20,7 +20,7 @@ def map(km):
km.add("h", "console.nav.left", ["global"], "Left") km.add("h", "console.nav.left", ["global"], "Left")
km.add("tab", "console.nav.next", ["global"], "Next") km.add("tab", "console.nav.next", ["global"], "Next")
km.add("enter", "console.nav.select", ["global"], "Select") km.add("enter", "console.nav.select", ["global"], "Select")
km.add(" ", "console.nav.pagedown", ["global"], "Page down") km.add("space", "console.nav.pagedown", ["global"], "Page down")
km.add("ctrl f", "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("ctrl b", "console.nav.pageup", ["global"], "Page up")
@ -102,7 +102,7 @@ def map(km):
"Toggle viewing full contents on this flow", "Toggle viewing full contents on this flow",
) )
km.add("w", "console.command save.file @focus ", ["flowview"], "Save flow to file") 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("space", "view.focus.next", ["flowview"], "Go to next flow")
km.add( km.add(
"v", "v",

View File

@ -1,5 +1,4 @@
import typing import typing
import collections
from mitmproxy.tools.console import commandeditor from mitmproxy.tools.console import commandeditor
@ -16,10 +15,17 @@ SupportedContexts = {
} }
Binding = collections.namedtuple( class Binding:
"Binding", def __init__(self, key, command, contexts, help):
["key", "command", "contexts", "help"] self.key, self.command, self.contexts = key, command, contexts
) self.help = help
def keyspec(self):
"""
Translate the key spec from a convenient user specification to one
Urwid understands.
"""
return self.key.replace("space", " ")
class Keymap: class Keymap:
@ -46,7 +52,7 @@ class Keymap:
def bind(self, binding): def bind(self, binding):
for c in binding.contexts: for c in binding.contexts:
d = self.keys.setdefault(c, {}) d = self.keys.setdefault(c, {})
d[binding.key] = binding.command d[binding.keyspec()] = binding.command
def get(self, context: str, key: str) -> typing.Optional[str]: def get(self, context: str, key: str) -> typing.Optional[str]:
if context in self.keys: if context in self.keys:

View File

@ -4,6 +4,11 @@ from unittest import mock
import pytest import pytest
def test_binding():
b = keymap.Binding("space", "cmd", ["options"], "")
assert b.keyspec() == " "
def test_bind(): def test_bind():
with taddons.context() as tctx: with taddons.context() as tctx:
km = keymap.Keymap(tctx.master) km = keymap.Keymap(tctx.master)