From f6a3bd15b3b8c3d30abf6e5209e10cff3c4784e0 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Tue, 7 Apr 2015 10:01:18 +1200 Subject: [PATCH] console: All palettes now explicitly set a background colour There's a new option --palette-transparent to turn this off if you want to use your own terminal background. --- libmproxy/cmdline.py | 5 ++++ libmproxy/console/__init__.py | 4 ++- libmproxy/console/palettes.py | 50 ++++++++++++++++++++++++++--------- libmproxy/console/window.py | 9 +++++-- libmproxy/main.py | 1 + test/test_console_palettes.py | 4 ++- 6 files changed, 56 insertions(+), 17 deletions(-) diff --git a/libmproxy/cmdline.py b/libmproxy/cmdline.py index 51ecea15d..7ea9be8c5 100644 --- a/libmproxy/cmdline.py +++ b/libmproxy/cmdline.py @@ -580,6 +580,11 @@ def mitmproxy(): choices=sorted(palettes.palettes.keys()), help="Select color palette: " + ", ".join(palettes.palettes.keys()) ) + parser.add_argument( + "--palette-transparent", + action="store_true", dest="palette_transparent", default=False, + help="Set transparent background for palette." + ) parser.add_argument( "-e", "--eventlog", action="store_true", dest="eventlog", diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py index 1fdf503a7..804f73bc7 100644 --- a/libmproxy/console/__init__.py +++ b/libmproxy/console/__init__.py @@ -132,6 +132,7 @@ class Options(object): "wfile", "nopop", "palette", + "palette_transparent" ] def __init__(self, **kwargs): @@ -183,6 +184,7 @@ class ConsoleMaster(flow.FlowMaster): self.nopop = options.nopop self.showhost = options.showhost self.palette = options.palette + self.palette_transparent = options.palette_transparent self.eventlog = options.eventlog self.eventlist = urwid.SimpleListWalker([]) @@ -393,7 +395,7 @@ class ConsoleMaster(flow.FlowMaster): def set_palette(self, name): self.palette = name self.ui.register_palette( - palettes.palettes[name].palette() + palettes.palettes[name].palette(self.palette_transparent) ) self.ui.clear() diff --git a/libmproxy/console/palettes.py b/libmproxy/console/palettes.py index a6ad3f451..52d7ab8fe 100644 --- a/libmproxy/console/palettes.py +++ b/libmproxy/console/palettes.py @@ -1,4 +1,3 @@ - # Low-color themes should ONLY use the standard foreground and background # colours listed here: # @@ -6,9 +5,9 @@ # - class Palette: _fields = [ + 'background', 'title', # Status bar & heading @@ -35,15 +34,33 @@ class Palette: ] high = None - def palette(self): + def palette(self, transparent): l = [] + highback, lowback = None, None + if not transparent: + if self.high and self.high.get("background"): + highback = self.high["background"][1] + lowback = self.low["background"][1] + for i in self._fields: - v = [i] - v.extend(self.low[i]) - if self.high and i in self.high: - v.append(None) - v.extend(self.high[i]) - l.append(tuple(v)) + if transparent and i == "background": + l.append(["background", "default", "default"]) + else: + v = [i] + low = list(self.low[i]) + if lowback and low[1] == "default": + low[1] = lowback + v.extend(low) + if self.high and i in self.high: + v.append(None) + high = list(self.high[i]) + if highback and high[1] == "default": + high[1] = highback + v.extend(high) + elif highback: + high = [None, low[0], highback] + v.extend(high) + l.append(tuple(v)) return l @@ -52,6 +69,7 @@ class LowDark(Palette): Low-color dark background """ low = dict( + background = ('white', 'black'), title = ('white,bold', 'default'), # Status bar & heading @@ -110,6 +128,7 @@ class LowLight(Palette): Low-color light background """ low = dict( + background = ('black', 'white'), title = ('dark magenta', 'default'), # Status bar & heading @@ -158,6 +177,7 @@ class LowLight(Palette): class Light(LowLight): high = dict( + background = ('black', 'g100'), heading = ('g99', '#08f'), heading_key = ('#0ff,bold', '#08f'), heading_inactive = ('g35', 'g85'), @@ -171,10 +191,10 @@ sol_base03 = "h234" sol_base02 = "h235" sol_base01 = "h240" sol_base00 = "h241" -sol_base0 = "h244" -sol_base1 = "h245" -sol_base2 = "h254" -sol_base3 = "h230" +sol_base0 = "h244" +sol_base1 = "h245" +sol_base2 = "h254" +sol_base3 = "h230" sol_yellow = "h136" sol_orange = "h166" sol_red = "h160" @@ -183,8 +203,11 @@ sol_violet = "h61" sol_blue = "h33" sol_cyan = "h37" sol_green = "h64" + + class SolarizedLight(LowLight): high = dict( + background = (sol_base00, sol_base3), title = (sol_cyan, 'default'), text = (sol_base00, 'default'), @@ -233,6 +256,7 @@ class SolarizedLight(LowLight): class SolarizedDark(LowDark): high = dict( + background = (sol_base2, sol_base03), title = (sol_blue, 'default'), text = (sol_base1, 'default'), diff --git a/libmproxy/console/window.py b/libmproxy/console/window.py index af9da81f5..d64e83df4 100644 --- a/libmproxy/console/window.py +++ b/libmproxy/console/window.py @@ -1,10 +1,15 @@ import urwid -from . import grideditor, signals, contentview +from . import signals class Window(urwid.Frame): def __init__(self, master, body, header, footer, helpctx): - urwid.Frame.__init__(self, body, header=header, footer=footer) + urwid.Frame.__init__( + self, + urwid.AttrWrap(body, "background"), + header = urwid.AttrWrap(header, "background") if header else None, + footer = urwid.AttrWrap(footer, "background") if footer else None + ) self.master = master self.helpctx = helpctx signals.focus.connect(self.sig_focus) diff --git a/libmproxy/main.py b/libmproxy/main.py index e5b7f56b2..7d22b48cc 100644 --- a/libmproxy/main.py +++ b/libmproxy/main.py @@ -89,6 +89,7 @@ def mitmproxy(): # pragma: nocover proxy_config = process_proxy_options(parser, options) console_options = console.Options(**cmdline.get_common_options(options)) console_options.palette = options.palette + console_options.palette_transparent = options.palette_transparent console_options.eventlog = options.eventlog console_options.intercept = options.intercept diff --git a/test/test_console_palettes.py b/test/test_console_palettes.py index 3f8e280a4..a3b7fe4f7 100644 --- a/test/test_console_palettes.py +++ b/test/test_console_palettes.py @@ -8,4 +8,6 @@ import libmproxy.console.palettes as palettes class TestPalette: def test_helptext(self): for i in palettes.palettes.values(): - assert i.palette() + assert i.palette(False) + for i in palettes.palettes.values(): + assert i.palette(True)