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.
This commit is contained in:
Aldo Cortesi 2015-04-07 10:01:18 +12:00
parent 1cb1ee411b
commit f6a3bd15b3
6 changed files with 56 additions and 17 deletions

View File

@ -580,6 +580,11 @@ def mitmproxy():
choices=sorted(palettes.palettes.keys()), choices=sorted(palettes.palettes.keys()),
help="Select color palette: " + ", ".join(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( parser.add_argument(
"-e", "--eventlog", "-e", "--eventlog",
action="store_true", dest="eventlog", action="store_true", dest="eventlog",

View File

@ -132,6 +132,7 @@ class Options(object):
"wfile", "wfile",
"nopop", "nopop",
"palette", "palette",
"palette_transparent"
] ]
def __init__(self, **kwargs): def __init__(self, **kwargs):
@ -183,6 +184,7 @@ class ConsoleMaster(flow.FlowMaster):
self.nopop = options.nopop self.nopop = options.nopop
self.showhost = options.showhost self.showhost = options.showhost
self.palette = options.palette self.palette = options.palette
self.palette_transparent = options.palette_transparent
self.eventlog = options.eventlog self.eventlog = options.eventlog
self.eventlist = urwid.SimpleListWalker([]) self.eventlist = urwid.SimpleListWalker([])
@ -393,7 +395,7 @@ class ConsoleMaster(flow.FlowMaster):
def set_palette(self, name): def set_palette(self, name):
self.palette = name self.palette = name
self.ui.register_palette( self.ui.register_palette(
palettes.palettes[name].palette() palettes.palettes[name].palette(self.palette_transparent)
) )
self.ui.clear() self.ui.clear()

View File

@ -1,4 +1,3 @@
# Low-color themes should ONLY use the standard foreground and background # Low-color themes should ONLY use the standard foreground and background
# colours listed here: # colours listed here:
# #
@ -6,9 +5,9 @@
# #
class Palette: class Palette:
_fields = [ _fields = [
'background',
'title', 'title',
# Status bar & heading # Status bar & heading
@ -35,15 +34,33 @@ class Palette:
] ]
high = None high = None
def palette(self): def palette(self, transparent):
l = [] 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: for i in self._fields:
v = [i] if transparent and i == "background":
v.extend(self.low[i]) l.append(["background", "default", "default"])
if self.high and i in self.high: else:
v.append(None) v = [i]
v.extend(self.high[i]) low = list(self.low[i])
l.append(tuple(v)) 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 return l
@ -52,6 +69,7 @@ class LowDark(Palette):
Low-color dark background Low-color dark background
""" """
low = dict( low = dict(
background = ('white', 'black'),
title = ('white,bold', 'default'), title = ('white,bold', 'default'),
# Status bar & heading # Status bar & heading
@ -110,6 +128,7 @@ class LowLight(Palette):
Low-color light background Low-color light background
""" """
low = dict( low = dict(
background = ('black', 'white'),
title = ('dark magenta', 'default'), title = ('dark magenta', 'default'),
# Status bar & heading # Status bar & heading
@ -158,6 +177,7 @@ class LowLight(Palette):
class Light(LowLight): class Light(LowLight):
high = dict( high = dict(
background = ('black', 'g100'),
heading = ('g99', '#08f'), heading = ('g99', '#08f'),
heading_key = ('#0ff,bold', '#08f'), heading_key = ('#0ff,bold', '#08f'),
heading_inactive = ('g35', 'g85'), heading_inactive = ('g35', 'g85'),
@ -171,10 +191,10 @@ sol_base03 = "h234"
sol_base02 = "h235" sol_base02 = "h235"
sol_base01 = "h240" sol_base01 = "h240"
sol_base00 = "h241" sol_base00 = "h241"
sol_base0 = "h244" sol_base0 = "h244"
sol_base1 = "h245" sol_base1 = "h245"
sol_base2 = "h254" sol_base2 = "h254"
sol_base3 = "h230" sol_base3 = "h230"
sol_yellow = "h136" sol_yellow = "h136"
sol_orange = "h166" sol_orange = "h166"
sol_red = "h160" sol_red = "h160"
@ -183,8 +203,11 @@ sol_violet = "h61"
sol_blue = "h33" sol_blue = "h33"
sol_cyan = "h37" sol_cyan = "h37"
sol_green = "h64" sol_green = "h64"
class SolarizedLight(LowLight): class SolarizedLight(LowLight):
high = dict( high = dict(
background = (sol_base00, sol_base3),
title = (sol_cyan, 'default'), title = (sol_cyan, 'default'),
text = (sol_base00, 'default'), text = (sol_base00, 'default'),
@ -233,6 +256,7 @@ class SolarizedLight(LowLight):
class SolarizedDark(LowDark): class SolarizedDark(LowDark):
high = dict( high = dict(
background = (sol_base2, sol_base03),
title = (sol_blue, 'default'), title = (sol_blue, 'default'),
text = (sol_base1, 'default'), text = (sol_base1, 'default'),

View File

@ -1,10 +1,15 @@
import urwid import urwid
from . import grideditor, signals, contentview from . import signals
class Window(urwid.Frame): class Window(urwid.Frame):
def __init__(self, master, body, header, footer, helpctx): 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.master = master
self.helpctx = helpctx self.helpctx = helpctx
signals.focus.connect(self.sig_focus) signals.focus.connect(self.sig_focus)

View File

@ -89,6 +89,7 @@ def mitmproxy(): # pragma: nocover
proxy_config = process_proxy_options(parser, options) proxy_config = process_proxy_options(parser, options)
console_options = console.Options(**cmdline.get_common_options(options)) console_options = console.Options(**cmdline.get_common_options(options))
console_options.palette = options.palette console_options.palette = options.palette
console_options.palette_transparent = options.palette_transparent
console_options.eventlog = options.eventlog console_options.eventlog = options.eventlog
console_options.intercept = options.intercept console_options.intercept = options.intercept

View File

@ -8,4 +8,6 @@ import libmproxy.console.palettes as palettes
class TestPalette: class TestPalette:
def test_helptext(self): def test_helptext(self):
for i in palettes.palettes.values(): for i in palettes.palettes.values():
assert i.palette() assert i.palette(False)
for i in palettes.palettes.values():
assert i.palette(True)