aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2017-10-23 22:49:50 +0200
committerMaximilian Hils <git@maximilianhils.com>2017-10-23 22:49:50 +0200
commit3d66ebd526b3d488e8c91bf32938c82f788b42d0 (patch)
tree01fcbbeaf93f117e851f2c39fd70bb5096c895d2
parent569d275d763f499cce9673fcf118dcc8d59d2eeb (diff)
downloadmitmproxy-3d66ebd526b3d488e8c91bf32938c82f788b42d0.tar.gz
mitmproxy-3d66ebd526b3d488e8c91bf32938c82f788b42d0.tar.bz2
mitmproxy-3d66ebd526b3d488e8c91bf32938c82f788b42d0.zip
fix urwid display on WSL
-rw-r--r--mitmproxy/tools/console/common.py6
-rw-r--r--mitmproxy/tools/console/master.py2
-rw-r--r--mitmproxy/tools/console/window.py13
3 files changed, 19 insertions, 2 deletions
diff --git a/mitmproxy/tools/console/common.py b/mitmproxy/tools/console/common.py
index de024d1a..47a30272 100644
--- a/mitmproxy/tools/console/common.py
+++ b/mitmproxy/tools/console/common.py
@@ -1,9 +1,13 @@
+import platform
+
import urwid
import urwid.util
from functools import lru_cache
from mitmproxy.utils import human
+# Detect Windows Subsystem for Linux
+IS_WSL = "Microsoft" in platform.platform()
METHOD_OPTIONS = [
("get", "g"),
@@ -90,7 +94,7 @@ def fcol(s, attr):
)
-if urwid.util.detected_encoding:
+if urwid.util.detected_encoding and not IS_WSL:
SYMBOL_REPLAY = u"\u21ba"
SYMBOL_RETURN = u"\u2190"
SYMBOL_MARK = u"\u25cf"
diff --git a/mitmproxy/tools/console/master.py b/mitmproxy/tools/console/master.py
index 0d9dee9b..4c7f9cc1 100644
--- a/mitmproxy/tools/console/master.py
+++ b/mitmproxy/tools/console/master.py
@@ -176,7 +176,7 @@ class ConsoleMaster(master.Master):
"Please run mitmproxy in an interactive shell environment.", file=sys.stderr)
sys.exit(1)
- self.ui = urwid.raw_display.Screen()
+ self.ui = window.Screen()
self.ui.set_terminal_properties(256)
self.set_palette(self.options, None)
self.options.subscribe(
diff --git a/mitmproxy/tools/console/window.py b/mitmproxy/tools/console/window.py
index 6145b645..c6ff78f8 100644
--- a/mitmproxy/tools/console/window.py
+++ b/mitmproxy/tools/console/window.py
@@ -1,4 +1,7 @@
+import re
+
import urwid
+from mitmproxy.tools.console import common
from mitmproxy.tools.console import signals
from mitmproxy.tools.console import statusbar
from mitmproxy.tools.console import flowlist
@@ -274,3 +277,13 @@ class Window(urwid.Frame):
k = fs.keypress(size, k)
if k:
return self.master.keymap.handle(fs.keyctx, k)
+
+
+class Screen(urwid.raw_display.Screen):
+
+ def write(self, data):
+ if common.IS_WSL:
+ # replace urwid's SI/SO, which produce artifacts under WSL.
+ # at some point we may figure out what they actually do.
+ data = re.sub("[\x0e\x0f]", "", data)
+ super().write(data)