aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/libmproxy/console/palettes.py
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/libmproxy/console/palettes.py')
-rw-r--r--mitmproxy/libmproxy/console/palettes.py326
1 files changed, 326 insertions, 0 deletions
diff --git a/mitmproxy/libmproxy/console/palettes.py b/mitmproxy/libmproxy/console/palettes.py
new file mode 100644
index 00000000..bd370181
--- /dev/null
+++ b/mitmproxy/libmproxy/console/palettes.py
@@ -0,0 +1,326 @@
+# Low-color themes should ONLY use the standard foreground and background
+# colours listed here:
+#
+# http://urwid.org/manual/displayattributes.html
+#
+
+
+class Palette:
+ _fields = [
+ 'background',
+ 'title',
+
+ # Status bar & heading
+ 'heading', 'heading_key', 'heading_inactive',
+
+ # Help
+ 'key', 'head', 'text',
+
+ # Options
+ 'option_selected', 'option_active', 'option_active_selected',
+ 'option_selected_key',
+
+ # List and Connections
+ 'method', 'focus',
+ 'code_200', 'code_300', 'code_400', 'code_500', 'code_other',
+ 'error',
+ 'header', 'highlight', 'intercept', 'replay', 'mark',
+
+ # Hex view
+ 'offset',
+
+ # Grid Editor
+ 'focusfield', 'focusfield_error', 'field_error', 'editfield',
+ ]
+ high = None
+
+ 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:
+ 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 and self.low[i][1] == "default":
+ high = [None, low[0], highback]
+ v.extend(high)
+ l.append(tuple(v))
+ return l
+
+
+class LowDark(Palette):
+
+ """
+ Low-color dark background
+ """
+ low = dict(
+ background = ('white', 'black'),
+ title = ('white,bold', 'default'),
+
+ # Status bar & heading
+ heading = ('white', 'dark blue'),
+ heading_key = ('light cyan', 'dark blue'),
+ heading_inactive = ('dark gray', 'light gray'),
+
+ # Help
+ key = ('light cyan', 'default'),
+ head = ('white,bold', 'default'),
+ text = ('light gray', 'default'),
+
+ # Options
+ option_selected = ('black', 'light gray'),
+ option_selected_key = ('light cyan', 'light gray'),
+ option_active = ('light red', 'default'),
+ option_active_selected = ('light red', 'light gray'),
+
+ # List and Connections
+ method = ('dark cyan', 'default'),
+ focus = ('yellow', 'default'),
+
+ code_200 = ('dark green', 'default'),
+ code_300 = ('light blue', 'default'),
+ code_400 = ('light red', 'default'),
+ code_500 = ('light red', 'default'),
+ code_other = ('dark red', 'default'),
+
+ error = ('light red', 'default'),
+
+ header = ('dark cyan', 'default'),
+ highlight = ('white,bold', 'default'),
+ intercept = ('brown', 'default'),
+ replay = ('light green', 'default'),
+ mark = ('light red', 'default'),
+
+ # Hex view
+ offset = ('dark cyan', 'default'),
+
+ # Grid Editor
+ focusfield = ('black', 'light gray'),
+ focusfield_error = ('dark red', 'light gray'),
+ field_error = ('dark red', 'default'),
+ editfield = ('white', 'default'),
+ )
+
+
+class Dark(LowDark):
+ high = dict(
+ heading_inactive = ('g58', 'g11'),
+ intercept = ('#f60', 'default'),
+
+ option_selected = ('g85', 'g45'),
+ option_selected_key = ('light cyan', 'g50'),
+ option_active_selected = ('light red', 'g50'),
+ )
+
+
+class LowLight(Palette):
+
+ """
+ Low-color light background
+ """
+ low = dict(
+ background = ('black', 'white'),
+ title = ('dark magenta', 'default'),
+
+ # Status bar & heading
+ heading = ('white', 'black'),
+ heading_key = ('dark blue', 'black'),
+ heading_inactive = ('black', 'light gray'),
+
+ # Help
+ key = ('dark blue', 'default'),
+ head = ('black', 'default'),
+ text = ('dark gray', 'default'),
+
+ # Options
+ option_selected = ('black', 'light gray'),
+ option_selected_key = ('dark blue', 'light gray'),
+ option_active = ('light red', 'default'),
+ option_active_selected = ('light red', 'light gray'),
+
+ # List and Connections
+ method = ('dark cyan', 'default'),
+ focus = ('black', 'default'),
+
+ code_200 = ('dark green', 'default'),
+ code_300 = ('light blue', 'default'),
+ code_400 = ('dark red', 'default'),
+ code_500 = ('dark red', 'default'),
+ code_other = ('light red', 'default'),
+
+ error = ('light red', 'default'),
+
+ header = ('dark blue', 'default'),
+ highlight = ('black,bold', 'default'),
+ intercept = ('brown', 'default'),
+ replay = ('dark green', 'default'),
+ mark = ('dark red', 'default'),
+
+ # Hex view
+ offset = ('dark blue', 'default'),
+
+ # Grid Editor
+ focusfield = ('black', 'light gray'),
+ focusfield_error = ('dark red', 'light gray'),
+ field_error = ('dark red', 'black'),
+ editfield = ('black', 'default'),
+ )
+
+
+class Light(LowLight):
+ high = dict(
+ background = ('black', 'g100'),
+ heading = ('g99', '#08f'),
+ heading_key = ('#0ff,bold', '#08f'),
+ heading_inactive = ('g35', 'g85'),
+ replay = ('#0a0,bold', 'default'),
+
+ option_selected = ('black', 'g85'),
+ option_selected_key = ('dark blue', 'g85'),
+ option_active_selected = ('light red', 'g85'),
+ )
+
+
+# Solarized palette in Urwid-style terminal high-colour offsets
+# See: http://ethanschoonover.com/solarized
+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_yellow = "h136"
+sol_orange = "h166"
+sol_red = "h160"
+sol_magenta = "h125"
+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'),
+
+ # Status bar & heading
+ heading = (sol_base2, sol_base02),
+ heading_key = (sol_blue, sol_base03),
+ heading_inactive = (sol_base03, sol_base1),
+
+ # Help
+ key = (sol_blue, 'default',),
+ head = (sol_base00, 'default'),
+
+ # Options
+ option_selected = (sol_base03, sol_base2),
+ option_selected_key = (sol_blue, sol_base2),
+ option_active = (sol_orange, 'default'),
+ option_active_selected = (sol_orange, sol_base2),
+
+ # List and Connections
+ method = (sol_cyan, 'default'),
+ focus = (sol_base01, 'default'),
+
+ code_200 = (sol_green, 'default'),
+ code_300 = (sol_blue, 'default'),
+ code_400 = (sol_orange, 'default',),
+ code_500 = (sol_red, 'default'),
+ code_other = (sol_magenta, 'default'),
+
+ error = (sol_red, 'default'),
+
+ header = (sol_blue, 'default'),
+ highlight = (sol_base01, 'default'),
+ intercept = (sol_red, 'default',),
+ replay = (sol_green, 'default',),
+
+ # Hex view
+ offset = (sol_cyan, 'default'),
+
+ # Grid Editor
+ focusfield = (sol_base00, sol_base2),
+ focusfield_error = (sol_red, sol_base2),
+ field_error = (sol_red, 'default'),
+ editfield = (sol_base01, 'default'),
+ )
+
+
+class SolarizedDark(LowDark):
+ high = dict(
+ background = (sol_base2, sol_base03),
+ title = (sol_blue, 'default'),
+ text = (sol_base1, 'default'),
+
+ # Status bar & heading
+ heading = (sol_base2, sol_base01),
+ heading_key = (sol_blue + ",bold", sol_base01),
+ heading_inactive = (sol_base1, sol_base02),
+
+ # Help
+ key = (sol_blue, 'default',),
+ head = (sol_base2, 'default'),
+
+ # Options
+ option_selected = (sol_base03, sol_base00),
+ option_selected_key = (sol_blue, sol_base00),
+ option_active = (sol_orange, 'default'),
+ option_active_selected = (sol_orange, sol_base00),
+
+ # List and Connections
+ method = (sol_cyan, 'default'),
+ focus = (sol_base1, 'default'),
+
+ code_200 = (sol_green, 'default'),
+ code_300 = (sol_blue, 'default'),
+ code_400 = (sol_orange, 'default',),
+ code_500 = (sol_red, 'default'),
+ code_other = (sol_magenta, 'default'),
+
+ error = (sol_red, 'default'),
+
+ header = (sol_blue, 'default'),
+ highlight = (sol_base01, 'default'),
+ intercept = (sol_red, 'default',),
+ replay = (sol_green, 'default',),
+
+ # Hex view
+ offset = (sol_cyan, 'default'),
+
+ # Grid Editor
+ focusfield = (sol_base0, sol_base02),
+ focusfield_error = (sol_red, sol_base02),
+ field_error = (sol_red, 'default'),
+ editfield = (sol_base1, 'default'),
+ )
+
+
+DEFAULT = "dark"
+palettes = {
+ "lowlight": LowLight(),
+ "lowdark": LowDark(),
+ "light": Light(),
+ "dark": Dark(),
+ "solarized_light": SolarizedLight(),
+ "solarized_dark": SolarizedDark(),
+}