diff --git a/.flake8 b/.flake8
index 9c58b931..c244ad3f 100644
--- a/.flake8
+++ b/.flake8
@@ -1,6 +1,16 @@
[flake8]
-ignore = E226,E302,E41,E402,F401,F821,C901,E722
+ignore =
+ E226,
+ E302,
+ E41,
+ E402,
+ F401,
+ F821,
+ C901,
+ E722,
+ W503, # line break before binary operator
+ E231, # missing whitespace after ','
max-line-length = 100
exclude = env
max-complexity = 25
diff --git a/.yapf b/.yapf
deleted file mode 100644
index 04afa93e..00000000
--- a/.yapf
+++ /dev/null
@@ -1,19 +0,0 @@
-
-[style]
-based_on_style = pep8
-column_limit = 100
-indent_dictionary_value = true
-split_before_first_argument = false
-split_penalty_after_opening_bracket = 15000
-align_closing_bracket_with_visual_indent = true
-blank_line_before_class_docstring = true
-coalesce_brackets = true
-continuation_indent_width = 4
-dedent_closing_brackets = true
-; each_dict_entry_on_separate_line = true
-blank_line_before_nested_class_or_def = true
-spaces_around_power_operator = true
-spaces_before_comment = 2
-split_before_logical_operator = false
-split_arguments_when_comma_terminated = true
-allow_split_before_dict_value = false
diff --git a/Makefile b/Makefile
index c8238d9c..e4e8f78b 100644
--- a/Makefile
+++ b/Makefile
@@ -180,22 +180,16 @@ compile-glib-schemas-dev: clean-schemas
clean-schemas:
rm -f $(DEV_DATA_DIR)/gschemas.compiled
-style: fiximports autopep8 yapf
+style: black
-fiximports:
- @for fil in $$(find setup.py guake -name "*.py"); do \
- echo "Sorting imports from: $$fil"; \
- pipenv run fiximports $$fil; \
- done
-
-autopep8:
- pipenv run autopep8 --in-place --recursive setup.py $(MODULE)
-
-yapf:
- pipenv run yapf --style .yapf --recursive -i $(MODULE)
+black:
+ pipenv run black $(MODULE)
-checks: flake8 pylint reno-lint
+checks: black-check flake8 pylint reno-lint
+
+black-check:
+ pipenv run black --check $(MODULE)
flake8:
pipenv run python setup.py flake8
diff --git a/guake/__init__.py b/guake/__init__.py
index c6c73a1a..07df5f82 100644
--- a/guake/__init__.py
+++ b/guake/__init__.py
@@ -18,31 +18,34 @@ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301 USA
"""
+# pylint: disable=import-outside-toplevel
+
def guake_version():
# Do not import in the module root to speed up the dbus communication as much as possible
import pbr.version
- return pbr.version.VersionInfo('guake').version_string()
+
+ return pbr.version.VersionInfo("guake").version_string()
def vte_version():
import gi
- gi.require_version('Vte', '2.91')
+
+ gi.require_version("Vte", "2.91")
from gi.repository import Vte
- s = "{}.{}.{}".format(
- Vte.MAJOR_VERSION,
- Vte.MINOR_VERSION,
- Vte.MICRO_VERSION,
- )
+
+ s = "{}.{}.{}".format(Vte.MAJOR_VERSION, Vte.MINOR_VERSION, Vte.MICRO_VERSION,)
return s
def vte_runtime_version():
import gi
- gi.require_version('Vte', '2.91')
+
+ gi.require_version("Vte", "2.91")
from gi.repository import Vte
+
return "{}.{}.{}".format(
Vte.get_major_version(), Vte.get_minor_version(), Vte.get_micro_version()
)
@@ -50,6 +53,8 @@ def vte_runtime_version():
def gtk_version():
import gi
- gi.require_version('Gtk', '3.0')
+
+ gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
+
return "{}.{}.{}".format(Gtk.MAJOR_VERSION, Gtk.MINOR_VERSION, Gtk.MICRO_VERSION)
diff --git a/guake/about.py b/guake/about.py
index 442503a7..d4a3b4c0 100644
--- a/guake/about.py
+++ b/guake/about.py
@@ -20,7 +20,8 @@ Boston, MA 02110-1301 USA
"""
import gi
-gi.require_version('Gtk', '3.0')
+
+gi.require_version("Gtk", "3.0")
from gi.repository import GObject
from gi.repository import Gtk
@@ -37,8 +38,8 @@ class AboutDialog(SimpleGladeApp):
"""
def __init__(self):
- super(AboutDialog, self).__init__(gladefile('about.glade'), root='aboutdialog')
- dialog = self.get_widget('aboutdialog')
+ super(AboutDialog, self).__init__(gladefile("about.glade"), root="aboutdialog")
+ dialog = self.get_widget("aboutdialog")
# images
# ipath = pixmapfile('guake-notification.png')
@@ -46,11 +47,11 @@ class AboutDialog(SimpleGladeApp):
# img = pixmapfile('guake-notification.png')
image = Gtk.Image()
- image.set_from_file(pixmapfile('guake-notification.png'))
+ image.set_from_file(pixmapfile("guake-notification.png"))
pixbuf = image.get_pixbuf()
- dialog.set_property('logo', pixbuf)
+ dialog.set_property("logo", pixbuf)
- dialog.set_name(_('Guake Terminal'))
+ dialog.set_name(_("Guake Terminal"))
dialog.set_version(guake_version())
dialog.connect("response", lambda x, y: dialog.destroy())
diff --git a/guake/boxes.py b/guake/boxes.py
index 669c57b4..d0904516 100644
--- a/guake/boxes.py
+++ b/guake/boxes.py
@@ -4,8 +4,9 @@ import time
from locale import gettext as _
import gi
-gi.require_version('Vte', '2.91') # vte-0.42
-gi.require_version('Gtk', '3.0')
+
+gi.require_version("Vte", "2.91") # vte-0.42
+gi.require_version("Gtk", "3.0")
from gi.repository import GLib
from gi.repository import GObject
from gi.repository import Gdk
@@ -29,7 +30,7 @@ log = logging.getLogger(__name__)
# TODO remove calls to guake
-class TerminalHolder():
+class TerminalHolder:
UP = 0
DOWN = 1
RIGHT = 2
@@ -64,7 +65,6 @@ class TerminalHolder():
class RootTerminalBox(Gtk.Overlay, TerminalHolder):
-
def __init__(self, guake, parent_notebook):
super().__init__()
self.guake = guake
@@ -89,24 +89,24 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
--------------------------------------|
"""
self.search_revealer = Gtk.Revealer()
- self.search_frame = Gtk.Frame(name='search-frame')
+ self.search_frame = Gtk.Frame(name="search-frame")
self.search_box = Gtk.HBox()
# Search
self.search_close_btn = Gtk.Button()
self.search_close_btn.set_can_focus(False)
- close_icon = Gio.ThemedIcon(name='window-close-symbolic')
+ close_icon = Gio.ThemedIcon(name="window-close-symbolic")
close_image = Gtk.Image.new_from_gicon(close_icon, Gtk.IconSize.BUTTON)
self.search_close_btn.set_image(close_image)
self.search_entry = Gtk.SearchEntry()
self.search_prev_btn = Gtk.Button()
self.search_prev_btn.set_can_focus(False)
- prev_icon = Gio.ThemedIcon(name='go-up-symbolic')
+ prev_icon = Gio.ThemedIcon(name="go-up-symbolic")
prev_image = Gtk.Image.new_from_gicon(prev_icon, Gtk.IconSize.BUTTON)
self.search_prev_btn.set_image(prev_image)
self.search_next_btn = Gtk.Button()
self.search_next_btn.set_can_focus(False)
- next_icon = Gio.ThemedIcon(name='go-down-symbolic')
+ next_icon = Gio.ThemedIcon(name="go-down-symbolic")
next_image = Gtk.Image.new_from_gicon(next_icon, Gtk.IconSize.BUTTON)
self.search_next_btn.set_image(next_image)
@@ -121,16 +121,13 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
# Frame
self.search_frame.set_margin_end(12)
- self.search_frame.get_style_context().add_class('background')
+ self.search_frame.get_style_context().add_class("background")
css_provider = Gtk.CssProvider()
css_provider.load_from_data(
- b'#search-frame border {'
- b' padding: 5px 5px 5px 5px;'
- b' border: none;'
- b'}'
+ b"#search-frame border {" b" padding: 5px 5px 5px 5px;" b" border: none;" b"}"
)
Gtk.StyleContext.add_provider_for_screen(
- Gdk.Screen.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
+ Gdk.Screen.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION,
)
# Add to revealer
@@ -144,14 +141,14 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
self.add_overlay(self.search_revealer)
# Events
- self.search_entry.connect('key-press-event', self.on_search_entry_keypress)
- self.search_entry.connect('changed', self.set_search)
- self.search_entry.connect('activate', self.do_search)
- self.search_entry.connect('focus-in-event', self.on_search_entry_focus_in)
- self.search_entry.connect('focus-out-event', self.on_search_entry_focus_out)
- self.search_next_btn.connect('clicked', self.on_search_next_clicked)
- self.search_prev_btn.connect('clicked', self.on_search_prev_clicked)
- self.search_close_btn.connect('clicked', self.close_search_box)
+ self.search_entry.connect("key-press-event", self.on_search_entry_keypress)
+ self.search_entry.connect("changed", self.set_search)
+ self.search_entry.connect("activate", self.do_search)
+ self.search_entry.connect("focus-in-event", self.on_search_entry_focus_in)
+ self.search_entry.connect("focus-out-event", self.on_search_entry_focus_out)
+ self.search_next_btn.connect("clicked", self.on_search_next_clicked)
+ self.search_prev_btn.connect("clicked", self.on_search_prev_clicked)
+ self.search_close_btn.connect("clicked", self.close_search_box)
self.search_prev = True
# Search revealer visible
@@ -161,9 +158,9 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
self.search_revealer.hide()
self.search_revealer_show_cb_id = self.search_revealer.connect(
- 'show', search_revealer_show_cb
+ "show", search_revealer_show_cb
)
- self.search_frame.connect('unmap', lambda x: self.search_revealer.hide())
+ self.search_frame.connect("unmap", lambda x: self.search_revealer.hide())
def get_terminals(self):
return self.get_child().get_terminals()
@@ -211,21 +208,23 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
a full binary tree in list.
"""
if not box:
- panes.append({'type': None, 'directory': None})
+ panes.append({"type": None, "directory": None})
return
if isinstance(box, DualTerminalBox):
- btype = 'dual' + ('_h' if box.orient is DualTerminalBox.ORIENT_V else '_v')
- panes.append({'type': btype, 'directory': None})
+ btype = "dual" + ("_h" if box.orient is DualTerminalBox.ORIENT_V else "_v")
+ panes.append({"type": btype, "directory": None})
self.save_box_layout(box.get_child1(), panes)
self.save_box_layout(box.get_child2(), panes)
elif isinstance(box, TerminalBox):
- btype = 'term'
+ btype = "term"
directory = box.terminal.get_current_directory()
- panes.append({
- 'type': btype,
- 'directory': directory,
- 'custom_colors': box.terminal.get_custom_colors_dict(),
- })
+ panes.append(
+ {
+ "type": btype,
+ "directory": directory,
+ "custom_colors": box.terminal.get_custom_colors_dict(),
+ }
+ )
def restore_box_layout(self, box, panes: list):
"""Restore box layout by `panes`
@@ -237,7 +236,7 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
return
cur = panes.pop(0)
- if cur['type'].startswith('dual'):
+ if cur["type"].startswith("dual"):
while True:
if self.guake:
# If Guake are not visible, we should pending the restore, then do the
@@ -246,8 +245,9 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
# Otherwise we will stuck in the infinite loop, since new DualTerminalBox
# cannot get any allocation when Guake is invisible
if (
- not self.guake.window.get_property('visible') or self.get_notebook() is
- not self.guake.notebook_manager.get_current_notebook()
+ not self.guake.window.get_property("visible")
+ or self.get_notebook()
+ is not self.guake.notebook_manager.get_current_notebook()
):
panes.insert(0, cur)
self.guake._failed_restore_page_split.append((self, box, panes))
@@ -256,7 +256,7 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
# UI didn't update, wait for it
alloc = box.get_allocation()
if alloc.width == 1 and alloc.height == 1:
- time.sleep(.01)
+ time.sleep(0.01)
else:
break
@@ -264,7 +264,7 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
while Gtk.events_pending():
Gtk.main_iteration()
- if cur['type'].endswith('v'):
+ if cur["type"].endswith("v"):
box = box.split_v()
else:
box = box.split_h()
@@ -282,8 +282,8 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
box.unset_terminal()
# Replace term in the TerminalBox
- term = self.get_notebook().terminal_spawn(cur['directory'])
- term.set_custom_colors_from_dict(cur.get('custom_colors', None))
+ term = self.get_notebook().terminal_spawn(cur["directory"])
+ term.set_custom_colors_from_dict(cur.get("custom_colors", None))
box.set_terminal(term)
self.get_notebook().terminal_attached(term)
@@ -306,14 +306,12 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
def block_notebook_on_button_press_id(self):
GObject.signal_handler_block(
- self.get_notebook(),
- self.get_notebook().notebook_on_button_press_id
+ self.get_notebook(), self.get_notebook().notebook_on_button_press_id
)
def unblock_notebook_on_button_press_id(self):
GObject.signal_handler_unblock(
- self.get_notebook(),
- self.get_notebook().notebook_on_button_press_id
+ self.get_notebook(), self.get_notebook().notebook_on_button_press_id
)
def show_search_box(self):
@@ -357,9 +355,9 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
def on_search_entry_keypress(self, widget, event):
key = Gdk.keyval_name(event.keyval)
- if key == 'Escape':
+ if key == "Escape":
self.hide_search_box()
- elif key == 'Return':
+ elif key == "Return":
# Combine with Shift?
if event.state & Gdk.ModifierType.SHIFT_MASK:
self.search_prev = False
@@ -368,7 +366,7 @@ class RootTerminalBox(Gtk.Overlay, TerminalHolder):
self.search_prev = True
def reset_term_search(self, term):
- term.search_set_gregex(GLib.Regex('', 0, 0), 0)
+ term.search_set_gregex(GLib.Regex("", 0, 0), 0)
term.search_find_next()
def set_search(self, widget):
@@ -417,7 +415,7 @@ class TerminalBox(Gtk.Box, TerminalHolder):
self.terminal.connect("button-press-event", self.on_button_press, None)
)
self.terminal.handler_ids.append(
- self.terminal.connect('child-exited', self.on_terminal_exited)
+ self.terminal.connect("child-exited", self.on_terminal_exited)
)
self.pack_start(self.terminal, True, True, 0)
self.terminal.show()
@@ -432,7 +430,7 @@ class TerminalBox(Gtk.Box, TerminalHolder):
self.pack_start(self.scroll, False, False, 0)
self.terminal.handler_ids.append(
- self.terminal.connect('scroll-event', self.__scroll_event_cb)
+ self.terminal.connect("scroll-event", self.__scroll_event_cb)
)
def __scroll_event_cb(self, widget, event):
@@ -440,8 +438,8 @@ class TerminalBox(Gtk.Box, TerminalHolder):
adj = self.scroll.get_adjustment()
page_size = adj.get_page_size()
if (
- event.get_state() & Gdk.ModifierType.SHIFT_MASK and
- event.get_state() & Gdk.ModifierType.CONTROL_MASK
+ event.get_state() & Gdk.ModifierType.SHIFT_MASK
+ and event.get_state() & Gdk.ModifierType.CONTROL_MASK
):
# Ctrl + Shift + Mouse Scroll (4 pages)
adj.set_page_increment(page_size * 40)
@@ -516,7 +514,7 @@ class TerminalBox(Gtk.Box, TerminalHolder):
return self.get_parent().get_notebook()
def remove_dead_child(self, child):
- print("Can't do, have no \"child\"")
+ print('Can\'t do, have no "child"')
def on_terminal_focus(self, *args):
self.get_root_box().set_last_terminal_focused(self.terminal)
@@ -534,11 +532,15 @@ class TerminalBox(Gtk.Box, TerminalHolder):
return True
menu = mk_terminal_context_menu(
- self.terminal, self.get_window(), self.get_settings(),
+ self.terminal,
+ self.get_window(),
+ self.get_settings(),
TerminalContextMenuCallbacks(
- self.terminal, self.get_window(), self.get_settings(),
- self.get_root_box().get_notebook()
- )
+ self.terminal,
+ self.get_window(),
+ self.get_settings(),
+ self.get_root_box().get_notebook(),
+ ),
)
menu.connect("hide", MenuHideCallback(self.get_window()).on_hide)
HidePrevention(self.get_window()).prevent()
@@ -635,7 +637,6 @@ class DualTerminalBox(Gtk.Paned, TerminalHolder):
class TabLabelEventBox(Gtk.EventBox):
-
def __init__(self, notebook, text, settings):
super().__init__()
self.notebook = notebook
@@ -643,11 +644,11 @@ class TabLabelEventBox(Gtk.EventBox):
self.label = Gtk.Label(text, visible=True)
self.close_button = Gtk.Button(
image=Gtk.Image.new_from_icon_name("window-close", Gtk.IconSize.MENU),
- relief=Gtk.ReliefStyle.NONE
+ relief=Gtk.ReliefStyle.NONE,
)
- self.close_button.connect('clicked', self.on_close)
+ self.close_button.connect("clicked", self.on_close)
settings.general.bind(
- 'tab-close-buttons', self.close_button, 'visible', Gio.SettingsBindFlags.GET
+ "tab-close-buttons", self.close_button, "visible", Gio.SettingsBindFlags.GET
)
self.box.pack_start(self.label, True, True, 0)
self.box.pack_end(self.close_button, False, False, 0)
@@ -677,7 +678,7 @@ class TabLabelEventBox(Gtk.EventBox):
menu.popup(None, None, None, None, event.button, event.get_time())
return True
if event.button == 2:
- prompt_cfg = self.notebook.guake.settings.general.get_int('prompt-on-close-tab')
+ prompt_cfg = self.notebook.guake.settings.general.get_int("prompt-on-close-tab")
self.notebook.delete_page_by_label(self, prompt=prompt_cfg)
return True
if event.button == 1 and event.type == Gdk.EventType._2BUTTON_PRESS:
@@ -716,5 +717,5 @@ class TabLabelEventBox(Gtk.EventBox):
self.grab_focus_on_last_focused_terminal()
def on_close(self, user_data):
- prompt_cfg = self.notebook.guake.settings.general.get_int('prompt-on-close-tab')
+ prompt_cfg = self.notebook.guake.settings.general.get_int("prompt-on-close-tab")
self.notebook.delete_page_by_label(self, prompt=prompt_cfg)
diff --git a/guake/callbacks.py b/guake/callbacks.py
index b491b982..04bf08c8 100644
--- a/guake/callbacks.py
+++ b/guake/callbacks.py
@@ -1,5 +1,6 @@
import gi
-gi.require_version('Gtk', '3.0')
+
+gi.require_version("Gtk", "3.0")
from gi.repository import Gdk
from gi.repository import Gtk
from guake.about import AboutDialog
@@ -13,8 +14,7 @@ from guake.utils import get_server_time
from urllib.parse import quote_plus
-class TerminalContextMenuCallbacks():
-
+class TerminalContextMenuCallbacks:
def __init__(self, terminal, window, settings, notebook):
self.terminal = terminal
self.window = window
@@ -87,15 +87,13 @@ class TerminalContextMenuCallbacks():
self.terminal.kill()
-class NotebookScrollCallback():
-
+class NotebookScrollCallback:
def __init__(self, notebook):
self.notebook = notebook
def on_scroll(self, widget, event):
direction = event.get_scroll_direction().direction
- if direction is Gdk.ScrollDirection.DOWN or \
- direction is Gdk.ScrollDirection.RIGHT:
+ if direction is Gdk.ScrollDirection.DOWN or direction is Gdk.ScrollDirection.RIGHT:
self.notebook.next_page()
else:
self.notebook.prev_page()
@@ -104,8 +102,7 @@ class NotebookScrollCallback():
return True
-class MenuHideCallback():
-
+class MenuHideCallback:
def __init__(self, window):
self.window = window
diff --git a/guake/common.py b/guake/common.py
index 26d7c143..f2fdb6fa 100644
--- a/guake/common.py
+++ b/guake/common.py
@@ -23,8 +23,9 @@ import os
import sys
import gi
-gi.require_version('Gtk', '3.0')
-gi.require_version('Vte', '2.91') # vte-0.38
+
+gi.require_version("Gtk", "3.0")
+gi.require_version("Vte", "2.91") # vte-0.38
from gi.repository import Gtk
from guake.paths import GLADE_DIR
@@ -33,20 +34,22 @@ from guake.paths import IMAGE_DIR
log = logging.getLogger(__name__)
__all__ = [
- 'get_binaries_from_path',
- 'gladefile',
- 'hexify_color',
- 'pixmapfile',
- 'ShowableError',
+ "get_binaries_from_path",
+ "gladefile",
+ "hexify_color",
+ "pixmapfile",
+ "ShowableError",
]
def ShowableError(parent, title, msg, exit_code=1):
d = Gtk.MessageDialog(
- parent, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
- Gtk.MessageType.WARNING, Gtk.ButtonsType.CLOSE
+ parent,
+ Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
+ Gtk.MessageType.WARNING,
+ Gtk.ButtonsType.CLOSE,
)
- d.set_markup('%s' % title)
+ d.set_markup("%s" % title)
d.format_secondary_markup(msg)
d.run()
d.destroy()
@@ -55,28 +58,27 @@ def ShowableError(parent, title, msg, exit_code=1):
def pixmapfile(x):
f = os.path.join(IMAGE_DIR, x)
if not os.path.exists(f):
- raise IOError('No such file or directory: %s' % f)
+ raise IOError("No such file or directory: %s" % f)
return os.path.abspath(f)
def gladefile(x):
f = os.path.join(GLADE_DIR, x)
if not os.path.exists(f):
- raise IOError('No such file or directory: %s' % f)
+ raise IOError("No such file or directory: %s" % f)
return os.path.abspath(f)
def hexify_color(c):
-
def h(x):
- return hex(x).replace('0x', '').zfill(4)
+ return hex(x).replace("0x", "").zfill(4)
- return '#%s%s%s' % (h(c.red), h(c.green), h(c.blue))
+ return "#%s%s%s" % (h(c.red), h(c.green), h(c.blue))
def get_binaries_from_path(compiled_re):
ret = []
- for i in os.environ.get('PATH', '').split(os.pathsep):
+ for i in os.environ.get("PATH", "").split(os.pathsep):
if os.path.isdir(i):
for j in os.listdir(i):
if compiled_re.match(j):
diff --git a/guake/customcommands.py b/guake/customcommands.py
index cc5f3bea..aa9f611e 100644
--- a/guake/customcommands.py
+++ b/guake/customcommands.py
@@ -5,13 +5,14 @@ import gi
import logging
from locale import gettext as _
-gi.require_version('Gtk', '3.0')
+
+gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
log = logging.getLogger(__name__)
-class CustomCommands():
+class CustomCommands:
"""
Example for a custom commands file
@@ -42,11 +43,11 @@ class CustomCommands():
self.callback = callback
def should_load(self):
- file_path = self.settings.general.get_string('custom-command-file')
+ file_path = self.settings.general.get_string("custom-command-file")
return file_path is not None
def get_file_path(self):
- return os.path.expanduser(self.settings.general.get_string('custom-command-file'))
+ return os.path.expanduser(self.settings.general.get_string("custom-command-file"))
def _load_json(self, file_name):
if not os.path.exists(file_name):
@@ -71,20 +72,20 @@ class CustomCommands():
return menu
def _parse_custom_commands(self, json_object, menu):
- if json_object.get('type') == "menu":
+ if json_object.get("type") == "menu":
newmenu = Gtk.Menu()
- newmenuitem = Gtk.MenuItem(json_object['description'])
+ newmenuitem = Gtk.MenuItem(json_object["description"])
newmenuitem.set_submenu(newmenu)
newmenuitem.show()
menu.append(newmenuitem)
- for item in json_object['items']:
+ for item in json_object["items"]:
self._parse_custom_commands(item, newmenu)
else:
- menu_item = Gtk.MenuItem(json_object['description'])
+ menu_item = Gtk.MenuItem(json_object["description"])
custom_command = ""
space = ""
- for command in json_object['cmd']:
- custom_command += (space + command)
+ for command in json_object["cmd"]:
+ custom_command += space + command
space = " "
menu_item.connect("activate", self.on_menu_item_activated, custom_command)
menu.append(menu_item)
diff --git a/guake/dbusiface.py b/guake/dbusiface.py
index 53ef9f38..b1eb656f 100755
--- a/guake/dbusiface.py
+++ b/guake/dbusiface.py
@@ -28,12 +28,11 @@ log = logging.getLogger(__name__)
dbus.glib.threads_init()
-DBUS_PATH = '/org/guake3/RemoteControl'
-DBUS_NAME = 'org.guake3.RemoteControl'
+DBUS_PATH = "/org/guake3/RemoteControl"
+DBUS_NAME = "org.guake3.RemoteControl"
class DbusManager(dbus.service.Object):
-
def __init__(self, guakeinstance):
self.guake = guakeinstance
self.bus = dbus.SessionBus()
@@ -70,35 +69,36 @@ class DbusManager(dbus.service.Object):
def unfullscreen(self):
self.guake.unfullscreen()
- @dbus.service.method(DBUS_NAME, in_signature='s')
- def add_tab(self, directory=''):
+ @dbus.service.method(DBUS_NAME, in_signature="s")
+ def add_tab(self, directory=""):
return self.guake.add_tab(directory)
- @dbus.service.method(DBUS_NAME, in_signature='i')
+ @dbus.service.method(DBUS_NAME, in_signature="i")
def select_tab(self, tab_index=0):
return self.guake.get_notebook().set_current_page(int(tab_index))
- @dbus.service.method(DBUS_NAME, out_signature='i')
+ @dbus.service.method(DBUS_NAME, out_signature="i")
def get_selected_tab(self):
return self.guake.get_notebook().get_current_page()
- @dbus.service.method(DBUS_NAME, out_signature='s')
+ @dbus.service.method(DBUS_NAME, out_signature="s")
def get_selected_tablabel(self):
- return self.guake.get_notebook(
- ).get_tab_text_index(self.guake.get_notebook().get_current_page())
+ return self.guake.get_notebook().get_tab_text_index(
+ self.guake.get_notebook().get_current_page()
+ )
- @dbus.service.method(DBUS_NAME, out_signature='i')
+ @dbus.service.method(DBUS_NAME, out_signature="i")
def get_tab_count(self):
return len(self.guake.notebook_manager.get_terminals())
- @dbus.service.method(DBUS_NAME, in_signature='i')
+ @dbus.service.method(DBUS_NAME, in_signature="i")
def select_terminal(self, term_index=0):
notebook = self.guake.get_notebook()
current_page_index = notebook.get_current_page()
terminals = notebook.get_terminals_for_page(current_page_index)
return terminals[term_index].grab_focus()
- @dbus.service.method(DBUS_NAME, out_signature='i')
+ @dbus.service.method(DBUS_NAME, out_signature="i")
def get_selected_terminal(self):
notebook = self.guake.get_notebook()
current_page_index = notebook.get_current_page()
@@ -108,30 +108,30 @@ class DbusManager(dbus.service.Object):
return i
return -1
- @dbus.service.method(DBUS_NAME, out_signature='i')
+ @dbus.service.method(DBUS_NAME, out_signature="i")
def get_term_count(self):
notebook = self.guake.get_notebook()
current_page_index = notebook.get_current_page()
terminals = notebook.get_terminals_for_page(current_page_index)
return len(terminals)
- @dbus.service.method(DBUS_NAME, in_signature='s')
+ @dbus.service.method(DBUS_NAME, in_signature="s")
def set_bgcolor(self, bgcolor):
return self.guake.set_bgcolor(bgcolor)
- @dbus.service.method(DBUS_NAME, in_signature='s')
+ @dbus.service.method(DBUS_NAME, in_signature="s")
def set_fgcolor(self, fgcolor):
return self.guake.set_fgcolor(fgcolor)
- @dbus.service.method(DBUS_NAME, in_signature='s')
+ @dbus.service.method(DBUS_NAME, in_signature="s")
def set_bgcolor_current_terminal(self, bgcolor):
return self.guake.set_bgcolor(bgcolor, current_terminal_only=True)
- @dbus.service.method(DBUS_NAME, in_signature='s')
+ @dbus.service.method(DBUS_NAME, in_signature="s")
def set_fgcolor_current_terminal(self, fgcolor):
return self.guake.set_fgcolor(fgcolor, current_terminal_only=True)
- @dbus.service.method(DBUS_NAME, in_signature='s')
+ @dbus.service.method(DBUS_NAME, in_signature="s")
def change_palette_name(self, palette_name):
self.guake.change_palette_name(palette_name)
@@ -145,23 +145,23 @@ class DbusManager(dbus.service.Object):
self.guake.reset_terminal_custom_colors(current_terminal=True)
self.guake.set_colors_from_settings_on_page(current_terminal_only=True)
- @dbus.service.method(DBUS_NAME, in_signature='s')
+ @dbus.service.method(DBUS_NAME, in_signature="s")
def execute_command(self, command):
self.guake.execute_command(command)
- @dbus.service.method(DBUS_NAME, in_signature='i', out_signature='s')
+ @dbus.service.method(DBUS_NAME, in_signature="i", out_signature="s")
def get_tab_name(self, tab_index=0):
return self.guake.get_notebook().get_tab_text_index(tab_index)
- @dbus.service.method(DBUS_NAME, in_signature='ss')
+ @dbus.service.method(DBUS_NAME, in_signature="ss")
def rename_tab_uuid(self, tab_uuid, new_text):
self.guake.rename_tab_uuid(tab_uuid, new_text, True)
- @dbus.service.method(DBUS_NAME, in_signature='is')
+ @dbus.service.method(DBUS_NAME, in_signature="is")
def rename_tab(self, tab_index, new_text):
self.guake.get_notebook().rename_page(tab_index, new_text, True)
- @dbus.service.method(DBUS_NAME, in_signature='s')
+ @dbus.service.method(DBUS_NAME, in_signature="s")
def rename_current_tab(self, new_text):
self.guake.rename_current_tab(new_text, True)
@@ -177,15 +177,15 @@ class DbusManager(dbus.service.Object):
def quit(self):
self.guake.quit()
- @dbus.service.method(DBUS_NAME, in_signature='i', out_signature='s')
+ @dbus.service.method(DBUS_NAME, in_signature="i", out_signature="s")
def get_gtktab_name(self, tab_index=0):
return self.guake.get_notebook().get_tab_text_index(tab_index)
- @dbus.service.method(DBUS_NAME, out_signature='s')
+ @dbus.service.method(DBUS_NAME, out_signature="s")
def get_selected_uuidtab(self):
return self.guake.get_selected_uuidtab()
- @dbus.service.method(DBUS_NAME, in_signature='ss')
+ @dbus.service.method(DBUS_NAME, in_signature="ss")
def execute_command_by_uuid(self, tab_uuid, command):
self.guake.execute_command_by_uuid(tab_uuid, command)
@@ -197,6 +197,6 @@ class DbusManager(dbus.service.Object):
def h_split_current_terminal(self):
self.guake.get_notebook().get_current_terminal().get_parent().split_h()
- @dbus.service.method(DBUS_NAME, in_signature='s')
+ @dbus.service.method(DBUS_NAME, in_signature="s")
def execute_command_current_termbox(self, command):
self.guake.get_notebook().get_current_terminal().execute_command(command)
diff --git a/guake/dialogs.py b/guake/dialogs.py
index 750d233b..516d197f 100644
--- a/guake/dialogs.py
+++ b/guake/dialogs.py
@@ -1,19 +1,21 @@
import gi
-gi.require_version('Gtk', '3.0')
+
+gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from locale import gettext as _
class RenameDialog(Gtk.Dialog):
-
def __init__(self, window, current_name):
super().__init__(
- _("Rename tab"), window, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
- (Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT, Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT)
+ _("Rename tab"),
+ window,
+ Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT, Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT,),
)
self.entry = Gtk.Entry()
self.entry.set_text(current_name)
- self.entry.set_property('can-default', True)
+ self.entry.set_property("can-default", True)
self.entry.show()
vbox = Gtk.VBox()
@@ -38,14 +40,16 @@ class PromptQuitDialog(Gtk.MessageDialog):
def __init__(self, parent, procs, tabs, notebooks):
super(PromptQuitDialog, self).__init__(
- parent, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
- Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO
+ parent,
+ Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
+ Gtk.MessageType.QUESTION,
+ Gtk.ButtonsType.YES_NO,
)
if tabs == -1:
primary_msg = _("Do you want to close the tab?")
- tab_str = ''
- notebooks_str = ''
+ tab_str = ""
+ notebooks_str = ""
else:
primary_msg = _("Do you really want to quit Guake?")
if tabs == 1:
@@ -53,9 +57,9 @@ class PromptQuitDialog(Gtk.MessageDialog):
else:
tab_str = _(" and {0} tabs open").format(tabs)
if notebooks > 1:
- notebooks_str = _(' on {0} workspaces').format(notebooks)
+ notebooks_str = _(" on {0} workspaces").format(notebooks)
else:
- notebooks_str = ''
+ notebooks_str = ""
if procs == 0:
proc_str = _("There are no processes running")
@@ -94,8 +98,10 @@ class PromptResetColorsDialog(Gtk.MessageDialog):
def __init__(self, parent):
super(PromptResetColorsDialog, self).__init__(
- parent, Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
- Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO
+ parent,
+ Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
+ Gtk.MessageType.QUESTION,
+ Gtk.ButtonsType.YES_NO,
)
primary_msg = _("Do you want to reset custom colors for this tab?")
@@ -115,11 +121,12 @@ class PromptResetColorsDialog(Gtk.MessageDialog):
class SaveTerminalDialog(Gtk.FileChooserDialog):
-
def __init__(self, terminal, window):
super().__init__(
- _("Save to..."), window, Gtk.FileChooserAction.SAVE,
- (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.OK)
+ _("Save to..."),
+ window,
+ Gtk.FileChooserAction.SAVE,
+ (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_SAVE, Gtk.ResponseType.OK,),
)
self.set_default_response(Gtk.ResponseType.OK)
self.terminal = terminal
diff --git a/guake/globals.py b/guake/globals.py
index aa8a7a13..500d4bc7 100644
--- a/guake/globals.py
+++ b/guake/globals.py
@@ -23,13 +23,13 @@ import logging
import os
__all__ = [
- 'ALIGN_BOTTOM',
- 'ALIGN_CENTER',
- 'ALIGN_LEFT',
- 'ALIGN_RIGHT',
- 'ALIGN_TOP',
- 'ALWAYS_ON_PRIMARY',
- 'NAME',
+ "ALIGN_BOTTOM",
+ "ALIGN_CENTER",
+ "ALIGN_LEFT",
+ "ALIGN_RIGHT",
+ "ALIGN_TOP",
+ "ALWAYS_ON_PRIMARY",
+ "NAME",
]
log = logging.getLogger(__name__)
@@ -49,9 +49,12 @@ def bindtextdomain(app_name, locale_dir=None):
If omitted or None, then the current binding for app_name is used.
"""
+ # pylint: disable=import-outside-toplevel
import locale
from locale import gettext as _
+ # pylint: enable=import-outside-toplevel
+
log.info("Local binding for app '%s', local dir: %s", app_name, locale_dir)
locale.bindtextdomain(app_name, locale_dir)
@@ -60,10 +63,10 @@ def bindtextdomain(app_name, locale_dir=None):
def is_run_from_git_workdir():
self_path = os.path.abspath(inspect.getfile(inspect.currentframe()))
- return os.path.exists('%s.in' % self_path)
+ return os.path.exists("%s.in" % self_path)
-NAME = 'guake'
+NAME = "guake"
ALIGN_CENTER, ALIGN_LEFT, ALIGN_RIGHT = range(3)
ALIGN_TOP, ALIGN_BOTTOM = range(2)
@@ -71,16 +74,16 @@ ALWAYS_ON_PRIMARY = -1
# TODO this is not as fancy as as it could be
# pylint: disable=anomalous-backslash-in-string
-TERMINAL_MATCH_TAGS = ('schema', 'http', 'https', 'email', 'ftp')
+TERMINAL_MATCH_TAGS = ("schema", "http", "https", "email", "ftp")
# Beware this is a PRCE (Perl) regular expression, not a Python one!
# Edit: use regex101.com with PCRE syntax
TERMINAL_MATCH_EXPRS = [
- "(news:|telnet:|nntp:|file:\/|https?:|ftps?:|webcal:)\/\/([-[:alnum:]]+"
- "(:[-[:alnum:],?;.:\/!%$^\*&~\"#']+)?\@)?[-[:alnum:]]+(\.[-[:alnum:]]+)*"
- "(:[0-9]{1,5})?(\/[-[:alnum:]_$.+!*(),;:@&=?\/~#'%]*[^].> \t\r\n,\\\"])?",
- "(www|ftp)[-[:alnum:]]*\.[-[:alnum:]]+(\.[-[:alnum:]]+)*(:[0-9]{1,5})?"
- "(\/[-[:alnum:]_$.+!*(),;:@&=?\/~#%]*[^]'.>) \t\r\n,\\\"])?",
- "(mailto:)?[-[:alnum:]][-[:alnum:].]*@[-[:alnum:]]+\.[-[:alnum:]]+(\\.[-[:alnum:]]+)*"
+ r"(news:|telnet:|nntp:|file:\/|https?:|ftps?:|webcal:)\/\/([-[:alnum:]]+"
+ r"(:[-[:alnum:],?;.:\/!%$^\*&~\"#']+)?\@)?[-[:alnum:]]+(\.[-[:alnum:]]+)*"
+ r"(:[0-9]{1,5})?(\/[-[:alnum:]_$.+!*(),;:@&=?\/~#'%]*[^].> \t\r\n,\\\"])?",
+ r"(www|ftp)[-[:alnum:]]*\.[-[:alnum:]]+(\.[-[:alnum:]]+)*(:[0-9]{1,5})?"
+ r"(\/[-[:alnum:]_$.+!*(),;:@&=?\/~#%]*[^]'.>) \t\r\n,\\\"])?",
+ r"(mailto:)?[-[:alnum:]][-[:alnum:].]*@[-[:alnum:]]+\.[-[:alnum:]]+(\\.[-[:alnum:]]+)*",
]
# tuple (title/quick matcher/filename and line number extractor)
QUICK_OPEN_MATCHERS = [
@@ -88,16 +91,13 @@ QUICK_OPEN_MATCHERS = [
"Python traceback",
r"^\s*File\s\".*\",\sline\s[0-9]+",
r"^\s*File\s\"(.*)\",\sline\s([0-9]+)",
- ), (
- "Python pytest report",
- r"^\s.*\:\:[a-zA-Z0-9\_]+\s",
- r"^\s*(.*\:\:[a-zA-Z0-9\_]+)\s",
),
+ ("Python pytest report", r"^\s.*\:\:[a-zA-Z0-9\_]+\s", r"^\s*(.*\:\:[a-zA-Z0-9\_]+)\s",),
(
"line starts by 'Filename:line' pattern (GCC/make). File path should exists.",
r"^\s*[a-zA-Z0-9\/\_\-\.\ ]+\.?[a-zA-Z0-9]+\:[0-9]+",
r"^\s*(.*)\:([0-9]+)",
- )
+ ),
]
# Transparency max level (should be always 100)
diff --git a/guake/gsettings.py b/guake/gsettings.py
index e698ae7f..358b453c 100644
--- a/guake/gsettings.py
+++ b/guake/gsettings.py
@@ -23,8 +23,9 @@ import subprocess
from xml.sax.saxutils import escape as xml_escape
import gi
-gi.require_version('Gtk', '3.0')
-gi.require_version('Vte', '2.91') # vte-0.38
+
+gi.require_version("Gtk", "3.0")
+gi.require_version("Vte", "2.91") # vte-0.38
from gi.repository import Gdk
from gi.repository import Gio
from gi.repository import Gtk
@@ -38,7 +39,7 @@ from locale import gettext as _
log = logging.getLogger(__name__)
-class GSettingHandler():
+class GSettingHandler:
"""Handles gconf changes, if any gconf variable is changed, a
different method is called to handle this change.
@@ -56,40 +57,40 @@ class GSettingHandler():
# set_final_window_rect polls gconf and is called whenever Guake is
# shown or resized
- settings.general.onChangedValue('use-trayicon', self.trayicon_toggled)
- settings.general.onChangedValue('window-ontop', self.ontop_toggled)
- settings.general.onChangedValue('tab-ontop', self.tab_ontop_toggled)
- settings.general.onChangedValue('window-tabbar', self.tabbar_toggled)
+ settings.general.onChangedValue("use-trayicon", self.trayicon_toggled)
+ settings.general.onChangedValue("window-ontop", self.ontop_toggled)
+ settings.general.onChangedValue("tab-ontop", self.tab_ontop_toggled)
+ settings.general.onChangedValue("window-tabbar", self.tabbar_toggled)
settings.general.onChangedValue(
- 'fullscreen-hide-tabbar', self.fullscreen_hide_tabbar_toggled
+ "fullscreen-hide-tabbar", self.fullscreen_hide_tabbar_toggled
)
- settings.general.onChangedValue('window-height', self.size_changed)
- settings.general.onChangedValue('window-width', self.size_changed)
- settings.general.onChangedValue('window-valignment', self.alignment_changed)
- settings.general.onChangedValue('window-halignment', self.alignment_changed)
- settings.general.onChangedValue('window-vertical-displacement', self.alignment_changed)
- settings.general.onChangedValue('window-horizontal-displacement', self.alignment_changed)
- settings.style.onChangedValue('cursor-blink-mode', self.cursor_blink_mode_changed)
- settings.style.onChangedValue('cursor-shape', self.cursor_shape_changed)
+ settings.general.onChangedValue("window-height", self.size_changed)
+ settings.general.onChangedValue("window-width", self.size_changed)
+ settings.general.onChangedValue("window-valignment", self.alignment_changed)
+ settings.general.onChangedValue("window-halignment", self.alignment_changed)
+ settings.general.onChangedValue("window-vertical-displacement", self.alignment_changed)
+ settings.general.onChangedValue("window-horizontal-displacement", self.alignment_changed)
+ settings.style.onChangedValue("cursor-blink-mode", self.cursor_blink_mode_changed)
+ settings.style.onChangedValue("cursor-shape", self.cursor_shape_changed)
- settings.general.onChangedValue('use-scrollbar', self.scrollbar_toggled)
- settings.general.onChangedValue('history-size', self.history_size_changed)
- settings.general.onChangedValue('infinite-history', self.infinite_history_changed)
- settings.general.onChangedValue('scroll-output', self.keystroke_output)
- settings.general.onChangedValue('scroll-keystroke', self.keystroke_toggled)
+ settings.general.onChangedValue("use-scrollbar", self.scrollbar_toggled)
+ settings.general.onChangedValue("history-size", self.history_size_changed)
+ settings.general.onChangedValue("infinite-history", self.infinite_history_changed)
+ settings.general.onChangedValue("scroll-output", self.keystroke_output)
+ settings.general.onChangedValue("scroll-keystroke", self.keystroke_toggled)
- settings.general.onChangedValue('use-default-font', self.default_font_toggled)
- settings.styleFont.onChangedValue('style', self.fstyle_changed)
- settings.styleFont.onChangedValue('palette', self.fpalette_changed)
- settings.styleFont.onChangedValue('allow-bold', self.allow_bold_toggled)
- settings.styleFont.onChangedValue('bold-is-bright', self.bold_is_bright_toggled)
- settings.styleBackground.onChangedValue('transparency', self.bgtransparency_changed)
+ settings.general.onChangedValue("use-default-font", self.default_font_toggled)
+ settings.styleFont.onChangedValue("style", self.fstyle_changed)
+ settings.styleFont.onChangedValue("palette", self.fpalette_changed)
+ settings.styleFont.onChangedValue("allow-bold", self.allow_bold_toggled)
+ settings.styleFont.onChangedValue("bold-is-bright", self.bold_is_bright_toggled)
+ settings.styleBackground.onChangedValue("transparency", self.bgtransparency_changed)
- settings.general.onChangedValue('compat-backspace', self.backspace_changed)
- settings.general.onChangedValue('compat-delete', self.delete_changed)
- settings.general.onChangedValue('custom-command_file', self.custom_command_file_changed)
- settings.general.onChangedValue('max-tab-name-length', self.max_tab_name_length_changed)
- settings.general.onChangedValue('display-tab-names', self.display_tab_names_changed)
+ settings.general.onChangedValue("compat-backspace", self.backspace_changed)
+ settings.general.onChangedValue("compat-delete", self.delete_changed)
+ settings.general.onChangedValue("custom-command_file", self.custom_command_file_changed)
+ settings.general.onChangedValue("max-tab-name-length", self.max_tab_name_length_changed)
+ settings.general.onChangedValue("display-tab-names", self.display_tab_names_changed)
def custom_command_file_changed(self, settings, key, user_data):
self.guake.load_custom_commands()
@@ -98,7 +99,7 @@ class GSettingHandler():
"""If the gconf var use_trayicon be changed, this method will
be called and will show/hide the trayicon.
"""
- if hasattr(self.guake.tray_icon, 'set_status'):
+ if hasattr(self.guake.tray_icon, "set_status"):
self.guake.tray_icon.set_status(settings.get_boolean(key))
else:
self.guake.tray_icon.set_visible(settings.get_boolean(key))
@@ -154,18 +155,24 @@ class GSettingHandler():
def cursor_blink_mode_changed(self, settings, key, user_data):
"""Called when cursor blink mode settings has been changed
"""
- terminal = self.guake.notebook_manager.get_terminal_by_uuid(user_data.get('terminal_uuid'))\
- if user_data else None
- terminals = (terminal, ) if terminal else self.guake.notebook_manager.iter_terminals()
+ terminal = (
+ self.guake.notebook_manager.get_terminal_by_uuid(user_data.get("terminal_uuid"))
+ if user_data
+ else None
+ )
+ terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals()
for term in terminals:
term.set_property("cursor-blink-mode", settings.get_int(key))
def cursor_shape_changed(self, settings, key, user_data):
"""Called when the cursor shape settings has been changed
"""
- terminal = self.guake.notebook_manager.get_terminal_by_uuid(user_data.get('terminal_uuid'))\
- if user_data else None
- terminals = (terminal, ) if terminal else self.guake.notebook_manager.iter_terminals()
+ terminal = (
+ self.guake.notebook_manager.get_terminal_by_uuid(user_data.get("terminal_uuid"))
+ if user_data
+ else None
+ )
+ terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals()
for term in terminals:
term.set_property("cursor-shape", settings.get_int(key))
@@ -173,9 +180,12 @@ class GSettingHandler():
"""If the gconf var use_scrollbar be changed, this method will
be called and will show/hide scrollbars of all terminals open.
"""
- terminal = self.guake.notebook_manager.get_terminal_by_uuid(user_data.get('terminal_uuid'))\
- if user_data else None
- terminals = (terminal, ) if terminal else self.guake.notebook_manager.iter_terminals()
+ terminal = (
+ self.guake.notebook_manager.get_terminal_by_uuid(user_data.get("terminal_uuid"))
+ if user_data
+ else None
+ )
+ terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals()
for term in terminals:
# There is an hbox in each tab of the main notebook and it
# contains a Terminal and a Scrollbar. Since only have the
@@ -196,9 +206,12 @@ class GSettingHandler():
terminals open.
"""
lines = settings.get_int(key)
- terminal = self.guake.notebook_manager.get_terminal_by_uuid(user_data.get('terminal_uuid'))\
- if user_data else None
- terminals = (terminal, ) if terminal else self.guake.notebook_manager.iter_terminals()
+ terminal = (
+ self.guake.notebook_manager.get_terminal_by_uuid(user_data.get("terminal_uuid"))
+ if user_data
+ else None
+ )
+ terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals()
for i in terminals:
i.set_scrollback_lines(lines)
@@ -207,9 +220,12 @@ class GSettingHandler():
lines = -1
else:
lines = self.settings.general.get_int("history-size")
- terminal = self.guake.notebook_manager.get_terminal_by_uuid(user_data.get('terminal_uuid'))\
- if user_data else None
- terminals = (terminal, ) if terminal else self.guake.notebook_manager.iter_terminals()
+ terminal = (
+ self.guake.notebook_manager.get_terminal_by_uuid(user_data.get("terminal_uuid"))
+ if user_data
+ else None
+ )
+ terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals()
for i in terminals:
i.set_scrollback_lines(lines)
@@ -218,9 +234,12 @@ class GSettingHandler():
be called and will set the scroll_on_output in all terminals
open.
"""
- terminal = self.guake.notebook_manager.get_terminal_by_uuid(user_data.get('terminal_uuid'))\
- if user_data else None
- terminals = (terminal, ) if terminal else self.guake.notebook_manager.iter_terminals()
+ terminal = (
+ self.guake.notebook_manager.get_terminal_by_uuid(user_data.get("terminal_uuid"))
+ if user_data
+ else None
+ )
+ terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals()
for i in terminals:
i.set_scroll_on_output(settings.get_boolean(key))
@@ -229,9 +248,12 @@ class GSettingHandler():
will be called and will set the scroll_on_keystroke in all
terminals open.
"""
- terminal = self.guake.notebook_manager.get_terminal_by_uuid(user_data.get('terminal_uuid'))\
- if user_data else None
- terminals = (terminal, ) if terminal else self.guake.notebook_manager.iter_terminals()
+ terminal = (
+ self.guake.notebook_manager.get_terminal_by_uuid(user_data.get("terminal_uuid"))
+ if user_data
+ else None
+ )
+ terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals()
for i in terminals:
i.set_scroll_on_keystroke(settings.get_boolean(key))
@@ -243,10 +265,10 @@ class GSettingHandler():
"""
font_name = None
if settings.get_boolean(key):
- gio_settings = Gio.Settings('org.gnome.desktop.interface')
- font_name = gio_settings.get_string('monospace-font-name')
+ gio_settings = Gio.Settings("org.gnome.desktop.interface")
+ font_name = gio_settings.get_string("monospace-font-name")
else:
- font_name = self.settings.styleFont.get_string('style')
+ font_name = self.settings.styleFont.get_string("style")
if not font_name:
log.error("Error: unable to find font name (%s)", font_name)
return
@@ -254,9 +276,12 @@ class GSettingHandler():
if not font:
log.error("Error: unable to load font (%s)", font_name)
return
- terminal = self.guake.notebook_manager.get_terminal_by_uuid(user_data.get('terminal_uuid'))\
- if user_data else None
- terminals = (terminal, ) if terminal else self.guake.notebook_manager.iter_terminals()
+ terminal = (
+ self.guake.notebook_manager.get_terminal_by_uuid(user_data.get("terminal_uuid"))
+ if user_data
+ else None
+ )
+ terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals()
for i in terminals:
i.set_font(font)
@@ -265,9 +290,12 @@ class GSettingHandler():
and will change the VTE terminal o.
displaying characters in bold font.
"""
- terminal = self.guake.notebook_manager.get_terminal_by_uuid(user_data.get('terminal_uuid'))\
- if user_data else None
- terminals = (terminal, ) if terminal else self.guake.notebook_manager.iter_terminals()
+ terminal = (
+ self.guake.notebook_manager.get_terminal_by_uuid(user_data.get("terminal_uuid"))
+ if user_data
+ else None
+ )
+ terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals()
for term in terminals:
term.set_allow_bold(settings.get_boolean(key))
@@ -277,9 +305,9 @@ class GSettingHandler():
"""
try:
terminal = self.guake.notebook_manager.get_terminal_by_uuid(
- user_data.get('terminal_uuid') if user_data else None
+ user_data.get("terminal_uuid") if user_data else None
)
- terminals = (terminal, ) if terminal else self.guake.notebook_manager.iter_terminals()
+ terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals()
for term in terminals:
term.set_bold_is_bright(settings.get_boolean(key))
except: # pylint: disable=bare-except
@@ -290,18 +318,18 @@ class GSettingHandler():
will be called and will change the font color and the background color to the color
defined in the palette.
"""
- self.settings.styleFont.triggerOnChangedValue(self.settings.styleFont, 'palette')
+ self.settings.styleFont.triggerOnChangedValue(self.settings.styleFont, "palette")
def fstyle_changed(self, settings, key, user_data):
"""If the gconf var style/font/style be changed, this method
will be called and will change the font style in all terminals
open.
"""
- terminal_uuid = user_data.get('terminal_uuid') if user_data else None
+ terminal_uuid = user_data.get("terminal_uuid") if user_data else None
if terminal_uuid:
terminal = self.guake.notebook_manager.get_terminal_by_uuid(terminal_uuid)
- terminals = (terminal, ) if terminal else tuple()
+ terminals = (terminal,) if terminal else tuple()
else:
terminals = self.guake.notebook_manager.iter_terminals()
@@ -315,7 +343,7 @@ class GSettingHandler():
open.
"""
self.guake.set_colors_from_settings(
- terminal_uuid=user_data.get('terminal_uuid') if user_data else None
+ terminal_uuid=user_data.get("terminal_uuid") if user_data else None
)
def bgtransparency_changed(self, settings, key, user_data):
@@ -324,7 +352,7 @@ class GSettingHandler():
properties in all terminals open.
"""
self.guake.set_background_color_from_settings(
- terminal_uuid=user_data.get('terminal_uuid') if user_data else None
+ terminal_uuid=user_data.get("terminal_uuid") if user_data else None
)
def getEraseBinding(self, str):
@@ -344,9 +372,12 @@ class GSettingHandler():
will be called and will change the binding configuration in
all terminals open.
"""
- terminal = self.guake.notebook_manager.get_terminal_by_uuid(user_data.get('terminal_uuid'))\
- if user_data else None
- terminals = (terminal, ) if terminal else self.guake.notebook_manager.iter_terminals()
+ terminal = (
+ self.guake.notebook_manager.get_terminal_by_uuid(user_data.get("terminal_uuid"))
+ if user_data
+ else None
+ )
+ terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals()
for i in terminals:
i.set_backspace_binding(self.getEraseBinding(settings.get_string(key)))
@@ -355,9 +386,12 @@ class GSettingHandler():
will be called and will change the binding configuration in
all terminals open.
"""
- terminal = self.guake.notebook_manager.get_terminal_by_uuid(user_data.get('terminal_uuid'))\
- if user_data else None
- terminals = (terminal, ) if terminal else self.guake.notebook_manager.iter_terminals()
+ terminal = (
+ self.guake.notebook_manager.get_terminal_by_uuid(user_data.get("terminal_uuid"))
+ if user_data
+ else None
+ )
+ terminals = (terminal,) if terminal else self.guake.notebook_manager.iter_terminals()
for i in terminals:
i.set_delete_binding(self.getEraseBinding(settings.get_string(key)))
@@ -370,8 +404,12 @@ class GSettingHandler():
if self.guake.notebook_manager.get_current_notebook().get_current_terminal() is None:
return
# avoid get window title before terminal is ready
- if self.guake.notebook_manager.get_current_notebook().get_current_terminal(
- ).get_window_title() is None:
+ if (
+ self.guake.notebook_manager.get_current_notebook()
+ .get_current_terminal()
+ .get_window_title()
+ is None
+ ):
return
self.guake.recompute_tabs_titles()
@@ -380,5 +418,5 @@ class GSettingHandler():
"""If the gconf var display-tab-names was changed, this method will
be called and will update tab names.
"""
- self.guake.display_tab_names = settings.get_int('display-tab-names')
+ self.guake.display_tab_names = settings.get_int("display-tab-names")
self.guake.recompute_tabs_titles()
diff --git a/guake/guake_app.py b/guake/guake_app.py
index 561f91ff..357287b7 100644
--- a/guake/guake_app.py
+++ b/guake/guake_app.py
@@ -34,10 +34,11 @@ from urllib.parse import quote_plus
from xml.sax.saxutils import escape as xml_escape
import gi
-gi.require_version('Gtk', '3.0')
-gi.require_version('Gdk', '3.0')
-gi.require_version('Vte', '2.91') # vte-0.42
-gi.require_version('Keybinder', '3.0')
+
+gi.require_version("Gtk", "3.0")
+gi.require_version("Gdk", "3.0")
+gi.require_version("Vte", "2.91") # vte-0.42
+gi.require_version("Keybinder", "3.0")
from gi.repository import GLib
from gi.repository import GObject
from gi.repository import Gdk
@@ -117,7 +118,6 @@ class Guake(SimpleGladeApp):
"""
def __init__(self):
-
def load_schema():
log.info("Loading Gnome schema from: %s", SCHEMA_DIR)
return Gio.SettingsSchemaSource.new_from_directory(
@@ -134,15 +134,15 @@ class Guake(SimpleGladeApp):
log.info("Language previously loaded from: %s", LOCALE_DIR)
- super(Guake, self).__init__(gladefile('guake.glade'))
+ super(Guake, self).__init__(gladefile("guake.glade"))
select_gtk_theme(self.settings)
patch_gtk_theme(self.get_widget("window-root").get_style_context(), self.settings)
self.add_callbacks(self)
- log.info('Guake Terminal %s', guake_version())
- log.info('VTE %s', vte_version())
- log.info('Gtk %s', gtk_version())
+ log.info("Guake Terminal %s", guake_version())
+ log.info("VTE %s", vte_version())
+ log.info("Gtk %s", gtk_version())
self.hidden = True
self.forceHide = False
@@ -150,15 +150,15 @@ class Guake(SimpleGladeApp):
# trayicon! Using SVG handles better different OS trays
# img = pixmapfile('guake-tray.svg')
# trayicon!
- img = pixmapfile('guake-tray.png')
+ img = pixmapfile("guake-tray.png")
try:
- import appindicator
+ import appindicator # pylint: disable=import-outside-toplevel
except ImportError:
self.tray_icon = Gtk.StatusIcon()
self.tray_icon.set_from_file(img)
self.tray_icon.set_tooltip_text(_("Guake Terminal"))
- self.tray_icon.connect('popup-menu', self.show_menu)
- self.tray_icon.connect('activate', self.show_hide)
+ self.tray_icon.connect("popup-menu", self.show_menu)
+ self.tray_icon.connect("activate", self.show_hide)
else:
# TODO PORT test this on a system with app indicator
self.tray_icon = appindicator.Indicator(
@@ -166,20 +166,20 @@ class Guake(SimpleGladeApp):
)
self.tray_icon.set_icon(img)
self.tray_icon.set_status(appindicator.STATUS_ACTIVE)
- menu = self.get_widget('tray-menu')
- show = Gtk.MenuItem(_('Show'))
+ menu = self.get_widget("tray-menu")
+ show = Gtk.MenuItem(_("Show"))
show.set_sensitive(True)
- show.connect('activate', self.show_hide)
+ show.connect("activate", self.show_hide)
show.show()
menu.prepend(show)
self.tray_icon.set_menu(menu)
# important widgets
- self.window = self.get_widget('window-root')
- self.window.set_name('guake-terminal')
+ self.window = self.get_widget("window-root")
+ self.window.set_name("guake-terminal")
self.window.set_keep_above(True)
- self.mainframe = self.get_widget('mainframe')
- self.mainframe.remove(self.get_widget('notebook-teminals'))
+ self.mainframe = self.get_widget("mainframe")
+ self.mainframe.remove(self.get_widget("notebook-teminals"))
# Pending restore for terminal split after show-up
# [(RootTerminalBox, TerminaBox, panes), ...]
@@ -191,17 +191,19 @@ class Guake(SimpleGladeApp):
# Workspace tracking
self.notebook_manager = NotebookManager(
- self.window, self.mainframe,
- self.settings.general.get_boolean('workspace-specific-tab-sets'), self.terminal_spawned,
- self.page_deleted
+ self.window,
+ self.mainframe,
+ self.settings.general.get_boolean("workspace-specific-tab-sets"),
+ self.terminal_spawned,
+ self.page_deleted,
)
- self.notebook_manager.connect('notebook-created', self.notebook_created)
+ self.notebook_manager.connect("notebook-created", self.notebook_created)
self.notebook_manager.set_workspace(0)
self.set_tab_position()
# check and set ARGB for real transparency
self.update_visual()
- self.window.get_screen().connect('composited-changed', self.update_visual)
+ self.window.get_screen().connect("composited-changed", self.update_visual)
# Debounce accel_search_terminal
self.prev_accel_search_terminal_time = 0.0
@@ -220,7 +222,7 @@ class Guake(SimpleGladeApp):
self.display_tab_names = 0
- self.window.connect('focus-out-event', self.on_window_losefocus)
+ self.window.connect("focus-out-event", self.on_window_losefocus)
# Handling the delete-event of the main window to avoid
# problems when closing it.
@@ -231,8 +233,8 @@ class Guake(SimpleGladeApp):
def window_event(*args):
return self.window_event(*args)
- self.window.connect('delete-event', destroy)
- self.window.connect('window-state-event', window_event)
+ self.window.connect("delete-event", destroy)
+ self.window.connect("window-state-event", window_event)
# this line is important to resize the main window and make it
# smaller.
@@ -253,26 +255,28 @@ class Guake(SimpleGladeApp):
Keybindings(self)
self.load_config()
- if self.settings.general.get_boolean('start-fullscreen'):
+ if self.settings.general.get_boolean("start-fullscreen"):
self.fullscreen()
refresh_user_start(self.settings)
# Restore tabs when startup
- if self.settings.general.get_boolean('restore-tabs-startup'):
+ if self.settings.general.get_boolean("restore-tabs-startup"):
self.restore_tabs(suppress_notify=True)
# Pop-up that shows that guake is working properly (if not
# unset in the preferences windows)
- if self.settings.general.get_boolean('use-popup'):
- key = self.settings.keybindingsGlobal.get_string('show-hide')
+ if self.settings.general.get_boolean("use-popup"):
+ key = self.settings.keybindingsGlobal.get_string("show-hide")
keyval, mask = Gtk.accelerator_parse(key)
label = Gtk.accelerator_get_label(keyval, mask)
- filename = pixmapfile('guake-notification.png')
+ filename = pixmapfile("guake-notification.png")
notifier.showMessage(
_("Guake Terminal"),
- _("Guake is now running,\n"
- "press {!s} to use it.").format(xml_escape(label)), filename
+ _("Guake is now running,\n" "press {!s} to use it.").format(
+ xml_escape(label)
+ ),
+ filename,
)
log.info("Guake initialized")
@@ -284,7 +288,7 @@ class Guake(SimpleGladeApp):
notebook.attach_guake(self)
# Tracking when reorder page
- notebook.connect('page-reordered', self.on_page_reorder)
+ notebook.connect("page-reordered", self.on_page_reorder)
def update_visual(self, user_data=None):
screen = self.window.get_screen()
@@ -297,11 +301,11 @@ class Guake(SimpleGladeApp):
self.window.set_app_paintable(True)
self.window.transparency = True
self.window.realize()
- if self.window.get_property('visible'):
+ if self.window.get_property("visible"):
self.hide()
self.show()
else:
- log.warn('System doesn\'t support transparency')
+ log.warn("System doesn't support transparency")
self.window.transparency = False
self.window.set_visual(screen.get_system_visual())
@@ -310,7 +314,7 @@ class Guake(SimpleGladeApp):
def _load_palette(self):
colorRGBA = Gdk.RGBA(0, 0, 0, 0)
paletteList = list()
- for color in self.settings.styleFont.get_string("palette").split(':'):
+ for color in self.settings.styleFont.get_string("palette").split(":"):
colorRGBA.parse(color)
paletteList.append(colorRGBA.copy())
return paletteList
@@ -324,7 +328,7 @@ class Guake(SimpleGladeApp):
return self._apply_transparency_to_color(bg_color)
def _apply_transparency_to_color(self, bg_color):
- transparency = self.settings.styleBackground.get_int('transparency')
+ transparency = self.settings.styleBackground.get_int("transparency")
if not self.transparency_toggled:
bg_color.alpha = 1 / 100 * transparency
else:
@@ -445,8 +449,8 @@ class Guake(SimpleGladeApp):
log.info("Palette name %s not found", palette_name)
return
log.debug("Settings palette name to %s", palette_name)
- self.settings.styleFont.set_string('palette', PALETTES[palette_name])
- self.settings.styleFont.set_string('palette-name', palette_name)
+ self.settings.styleFont.set_string("palette", PALETTES[palette_name])
+ self.settings.styleFont.set_string("palette-name", palette_name)
self.set_colors_from_settings()
def execute_command(self, command, tab=None):
@@ -461,8 +465,8 @@ class Guake(SimpleGladeApp):
if not self.get_notebook().has_page():
self.add_tab()
- if command[-1] != '\n':
- command += '\n'
+ if command[-1] != "\n":
+ command += "\n"
terminal = self.get_notebook().get_current_terminal()
terminal.feed_child(command)
@@ -471,12 +475,13 @@ class Guake(SimpleGladeApp):
# TODO DBUS_ONLY
"""Execute the `command' in the tab whose terminal has the `tab_uuid' uuid
"""
- if command[-1] != '\n':
- command += '\n'
+ if command[-1] != "\n":
+ command += "\n"
try:
tab_uuid = uuid.UUID(tab_uuid)
- page_index, = (
- index for index, t in enumerate(self.get_notebook().iter_terminals())
+ (page_index,) = (
+ index
+ for index, t in enumerate(self.get_notebook().iter_terminals())
if t.get_uuid() == tab_uuid
)
except ValueError:
@@ -493,8 +498,8 @@ class Guake(SimpleGladeApp):
if not HidePrevention(self.window).may_hide():
return
- value = self.settings.general.get_boolean('window-losefocus')
- visible = window.get_property('visible')
+ value = self.settings.general.get_boolean("window-losefocus")
+ visible = window.get_property("visible")
self.losefocus_time = get_server_time(self.window)
if visible and value:
log.info("Hiding on focus lose")
@@ -503,7 +508,7 @@ class Guake(SimpleGladeApp):
def show_menu(self, status_icon, button, activate_time):
"""Show the tray icon menu.
"""
- menu = self.get_widget('tray-menu')
+ menu = self.get_widget("tray-menu")
menu.popup(None, None, None, Gtk.StatusIcon.position_menu, button, activate_time)
def show_about(self, *args):
@@ -550,7 +555,7 @@ class Guake(SimpleGladeApp):
if not self.win_prepare():
return
- if not self.window.get_property('visible'):
+ if not self.window.get_property("visible"):
log.info("Showing the terminal")
self.show()
self.set_terminal_focus()
@@ -591,27 +596,31 @@ class Guake(SimpleGladeApp):
def win_prepare(self, *args):
event_time = self.hotkeys.get_current_event_time()
- if not self.settings.general.get_boolean('window-refocus') and \
- self.window.get_window() and self.window.get_property('visible'):
+ if (
+ not self.settings.general.get_boolean("window-refocus")
+ and self.window.get_window()
+ and self.window.get_property("visible")
+ ):
pass
- elif not self.settings.general.get_boolean('window-losefocus'):
+ elif not self.settings.general.get_boolean("window-losefocus"):
if self.losefocus_time and self.losefocus_time < event_time:
- if self.window.get_window() and self.window.get_property('visible') and \
- not self.window.get_window().get_state() & Gdk.WindowState.FOCUSED:
+ if (
+ self.window.get_window()
+ and self.window.get_property("visible")
+ and not self.window.get_window().get_state() & Gdk.WindowState.FOCUSED
+ ):
log.debug("DBG: Restoring the focus to the terminal")
self.window.get_window().focus(event_time)
self.set_terminal_focus()
self.losefocus_time = 0
return False
- elif self.losefocus_time and self.settings.general.get_boolean('window-losefocus'):
- if self.losefocus_time >= event_time and \
- (self.losefocus_time - event_time) < 10:
+ elif self.losefocus_time and self.settings.general.get_boolean("window-losefocus"):
+ if self.losefocus_time >= event_time and (self.losefocus_time - event_time) < 10:
self.losefocus_time = 0
return False
# limit rate at which the visibility can be toggled.
- if self.prev_showhide_time and event_time and \
- (event_time - self.prev_showhide_time) < 65:
+ if self.prev_showhide_time and event_time and (event_time - self.prev_showhide_time) < 65:
return False
self.prev_showhide_time = event_time
@@ -639,8 +648,8 @@ class Guake(SimpleGladeApp):
self._failed_restore_page_split = []
for root, box, panes in self.pending_restore_page_split:
if (
- self.window.get_property('visible') and
- root.get_notebook() == self.notebook_manager.get_current_notebook()
+ self.window.get_property("visible")
+ and root.get_notebook() == self.notebook_manager.get_current_notebook()
):
root.restore_box_layout(box, panes)
else:
@@ -675,7 +684,7 @@ class Guake(SimpleGladeApp):
# this works around an issue in fluxbox
if not self.fullscreen_manager.is_fullscreen():
- self.settings.general.triggerOnChangedValue(self.settings.general, 'window-height')
+ self.settings.general.triggerOnChangedValue(self.settings.general, "window-height")
time = get_server_time(self.window)
@@ -716,12 +725,12 @@ class Guake(SimpleGladeApp):
# This is here because vte color configuration works only after the
# widget is shown.
- self.settings.styleFont.triggerOnChangedValue(self.settings.styleFont, 'color')
- self.settings.styleBackground.triggerOnChangedValue(self.settings.styleBackground, 'color')
+ self.settings.styleFont.triggerOnChangedValue(self.settings.styleFont, "color")
+ self.settings.styleBackground.triggerOnChangedValue(self.settings.styleBackground, "color")
log.debug("Current window position: %r", self.window.get_position())
self.restore_pending_terminal_split()
- self.execute_hook('show')
+ self.execute_hook("show")
def hide_from_remote(self):
"""
@@ -747,7 +756,7 @@ class Guake(SimpleGladeApp):
if not HidePrevention(self.window).may_hide():
return
self.hidden = True
- self.get_widget('window-root').unstick()
+ self.get_widget("window-root").unstick()
self.window.hide() # Don't use hide_all here!
# Hide popover
@@ -769,92 +778,92 @@ class Guake(SimpleGladeApp):
"""
user_data = {}
if terminal_uuid:
- user_data['terminal_uuid'] = terminal_uuid
+ user_data["terminal_uuid"] = terminal_uuid
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'use-trayicon', user_data=user_data
+ self.settings.general, "use-trayicon", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'prompt-on-quit', user_data=user_data
+ self.settings.general, "prompt-on-quit", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'prompt-on-close-tab', user_data=user_data
+ self.settings.general, "prompt-on-close-tab", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'window-tabbar', user_data=user_data
+ self.settings.general, "window-tabbar", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'fullscreen-hide-tabbar', user_data=user_data
+ self.settings.general, "fullscreen-hide-tabbar", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'mouse-display', user_data=user_data
+ self.settings.general, "mouse-display", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'display-n', user_data=user_data
+ self.settings.general, "display-n", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'window-ontop', user_data=user_data
+ self.settings.general, "window-ontop", user_data=user_data
)
if not self.fullscreen_manager.is_fullscreen():
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'window-height', user_data=user_data
+ self.settings.general, "window-height", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'window-width', user_data=user_data
+ self.settings.general, "window-width", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'use-scrollbar', user_data=user_data
+ self.settings.general, "use-scrollbar", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'history-size', user_data=user_data
+ self.settings.general, "history-size", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'infinite-history', user_data=user_data
+ self.settings.general, "infinite-history", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'use-vte-titles', user_data=user_data
+ self.settings.general, "use-vte-titles", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'set-window-title', user_data=user_data
+ self.settings.general, "set-window-title", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'display-tab-names', user_data=user_data
+ self.settings.general, "display-tab-names", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'max-tab-name-length', user_data=user_data
+ self.settings.general, "max-tab-name-length", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'quick-open-enable', user_data=user_data
+ self.settings.general, "quick-open-enable", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'quick-open-command-line', user_data=user_data
+ self.settings.general, "quick-open-command-line", user_data=user_data
)
self.settings.style.triggerOnChangedValue(
- self.settings.style, 'cursor-shape', user_data=user_data
+ self.settings.style, "cursor-shape", user_data=user_data
)
self.settings.styleFont.triggerOnChangedValue(
- self.settings.styleFont, 'style', user_data=user_data
+ self.settings.styleFont, "style", user_data=user_data
)
self.settings.styleFont.triggerOnChangedValue(
- self.settings.styleFont, 'palette', user_data=user_data
+ self.settings.styleFont, "palette", user_data=user_data
)
self.settings.styleFont.triggerOnChangedValue(
- self.settings.styleFont, 'palette-name', user_data=user_data
+ self.settings.styleFont, "palette-name", user_data=user_data
)
self.settings.styleFont.triggerOnChangedValue(
- self.settings.styleFont, 'allow-bold', user_data=user_data
+ self.settings.styleFont, "allow-bold", user_data=user_data
)
self.settings.styleBackground.triggerOnChangedValue(
- self.settings.styleBackground, 'transparency', user_data=user_data
+ self.settings.styleBackground, "transparency", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'use-default-font', user_data=user_data
+ self.settings.general, "use-default-font", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'compat-backspace', user_data=user_data
+ self.settings.general, "compat-backspace", user_data=user_data
)
self.settings.general.triggerOnChangedValue(
- self.settings.general, 'compat-delete', user_data=user_data
+ self.settings.general, "compat-delete", user_data=user_data
)
def accel_search_terminal(self, *args):
@@ -884,8 +893,8 @@ class Guake(SimpleGladeApp):
procs = self.notebook_manager.get_running_fg_processes_count()
tabs = self.notebook_manager.get_n_pages()
notebooks = self.notebook_manager.get_n_notebooks()
- prompt_cfg = self.settings.general.get_boolean('prompt-on-quit')
- prompt_tab_cfg = self.settings.general.get_int('prompt-on-close-tab')
+ prompt_cfg = self.settings.general.get_boolean("prompt-on-quit")
+ prompt_tab_cfg = self.settings.general.get_int("prompt-on-close-tab")
# "Prompt on tab close" config overrides "prompt on quit" config
if prompt_cfg or (prompt_tab_cfg == 1 and procs > 0) or (prompt_tab_cfg == 2):
log.debug("Remaining procs=%r", procs)
@@ -922,31 +931,31 @@ class Guake(SimpleGladeApp):
def accel_increase_height(self, *args):
"""Callback to increase height.
"""
- height = self.settings.general.get_int('window-height')
- self.settings.general.set_int('window-height', min(height + 2, 100))
+ height = self.settings.general.get_int("window-height")
+ self.settings.general.set_int("window-height", min(height + 2, 100))
return True
def accel_decrease_height(self, *args):
"""Callback to decrease height.
"""
- height = self.settings.general.get_int('window-height')
- self.settings.general.set_int('window-height', max(height - 2, 0))
+ height = self.settings.general.get_int("window-height")
+ self.settings.general.set_int("window-height", max(height - 2, 0))
return True
def accel_increase_transparency(self, *args):
"""Callback to increase transparency.
"""
- transparency = self.settings.styleBackground.get_int('transparency')
+ transparency = self.settings.styleBackground.get_int("transparency")
if int(transparency) > 0:
- self.settings.styleBackground.set_int('transparency', int(transparency) - 2)
+ self.settings.styleBackground.set_int("transparency", int(transparency) - 2)
return True
def accel_decrease_transparency(self, *args):
"""Callback to decrease transparency.
"""
- transparency = self.settings.styleBackground.get_int('transparency')
+ transparency = self.settings.styleBackground.get_int("transparency")
if int(transparency) < MAX_TRANSPARENCY:
- self.settings.styleBackground.set_int('transparency', int(transparency) + 2)
+ self.settings.styleBackground.set_int("transparency", int(transparency) + 2)
return True
def accel_toggle_transparency(self, *args):
@@ -954,7 +963,7 @@ class Guake(SimpleGladeApp):
"""
self.transparency_toggled = not self.transparency_toggled
self.settings.styleBackground.triggerOnChangedValue(
- self.settings.styleBackground, 'transparency'
+ self.settings.styleBackground, "transparency"
)
return True
@@ -967,7 +976,7 @@ class Guake(SimpleGladeApp):
def accel_add_home(self, *args):
"""Callback to add a new tab in home directory. Called by the accel key.
"""
- self.add_tab(os.environ['HOME'])
+ self.add_tab(os.environ["HOME"])
return True
def accel_prev(self, *args):
@@ -1005,8 +1014,9 @@ class Guake(SimpleGladeApp):
return True
def move_tab(self, old_tab_pos, new_tab_pos):
- self.get_notebook(
- ).reorder_child(self.get_notebook().get_nth_page(old_tab_pos), new_tab_pos)
+ self.get_notebook().reorder_child(
+ self.get_notebook().get_nth_page(old_tab_pos), new_tab_pos
+ )
self.get_notebook().set_current_page(new_tab_pos)
def gen_accel_switch_tabN(self, N):
@@ -1054,10 +1064,10 @@ class Guake(SimpleGladeApp):
"""Callback toggle whether the window should hide when it loses
focus. Called by the accel key.
"""
- if self.settings.general.get_boolean('window-losefocus'):
- self.settings.general.set_boolean('window-losefocus', False)
+ if self.settings.general.get_boolean("window-losefocus"):
+ self.settings.general.set_boolean("window-losefocus", False)
else:
- self.settings.general.set_boolean('window-losefocus', True)
+ self.settings.general.set_boolean("window-losefocus", True)
return True
def accel_toggle_fullscreen(self, *args):
@@ -1093,11 +1103,11 @@ class Guake(SimpleGladeApp):
try:
current_directory = vte.get_current_directory()
if self.display_tab_names == 1 and vte_title.endswith(current_directory):
- parts = current_directory.split('/')
+ parts = current_directory.split("/")
parts = [s[:1] for s in parts[:-1]] + [parts[-1]]
- vte_title = vte_title[:len(vte_title) - len(current_directory)] + '/'.join(parts)
+ vte_title = vte_title[: len(vte_title) - len(current_directory)] + "/".join(parts)
if self.display_tab_names == 2:
- vte_title = current_directory.split('/')[-1]
+ vte_title = current_directory.split("/")[-1]
if not vte_title:
vte_title = "(root)"
except OSError:
@@ -1110,7 +1120,7 @@ class Guake(SimpleGladeApp):
if not term.get_parent():
return
box = term.get_parent().get_root_box()
- use_vte_titles = self.settings.general.get_boolean('use-vte-titles')
+ use_vte_titles = self.settings.general.get_boolean("use-vte-titles")
if not use_vte_titles:
return
@@ -1123,7 +1133,7 @@ class Guake(SimpleGladeApp):
if page_num != -1:
break
# if tab has been renamed by user, don't override.
- if not getattr(box, 'custom_label_set', False):
+ if not getattr(box, "custom_label_set", False):
title = self.compute_tab_title(vte)
nb.rename_page(page_num, title, False)
self.update_window_title(title)
@@ -1133,7 +1143,7 @@ class Guake(SimpleGladeApp):
self.update_window_title(text)
def update_window_title(self, title):
- if self.settings.general.get_boolean('set-window-title') is True:
+ if self.settings.general.get_boolean("set-window-title") is True:
self.window.set_title(title)
else:
self.window.set_title(self.default_window_title)
@@ -1145,15 +1155,16 @@ class Guake(SimpleGladeApp):
def close_tab(self, *args):
"""Closes the current tab.
"""
- prompt_cfg = self.settings.general.get_int('prompt-on-close-tab')
+ prompt_cfg = self.settings.general.get_int("prompt-on-close-tab")
self.get_notebook().delete_page_current(prompt=prompt_cfg)
def rename_tab_uuid(self, term_uuid, new_text, user_set=True):
"""Rename an already added tab by its UUID
"""
term_uuid = uuid.UUID(term_uuid)
- page_index, = (
- index for index, t in enumerate(self.get_notebook().iter_terminals())
+ (page_index,) = (
+ index
+ for index, t in enumerate(self.get_notebook().iter_terminals())
if t.get_uuid() == term_uuid
)
self.get_notebook().rename_page(page_index, new_text, user_set)
@@ -1165,7 +1176,7 @@ class Guake(SimpleGladeApp):
def terminal_spawned(self, notebook, terminal, pid):
self.load_config(terminal_uuid=terminal.uuid)
terminal.handler_ids.append(
- terminal.connect('window-title-changed', self.on_terminal_title_changed, terminal)
+ terminal.connect("window-title-changed", self.on_terminal_title_changed, terminal)
)
@save_tabs_when_changed
@@ -1173,7 +1184,7 @@ class Guake(SimpleGladeApp):
"""Adds a new tab to the terminal notebook.
"""
position = None
- if self.settings.general.get_boolean('new-tab-after'):
+ if self.settings.general.get_boolean("new-tab-after"):
position = 1 + self.get_notebook().get_current_page()
self.get_notebook().new_page_with_focus(directory, position=position)
@@ -1184,10 +1195,17 @@ class Guake(SimpleGladeApp):
search_text = Gtk.TextView()
dialog = Gtk.Dialog(
- _("Find"), self.window, Gtk.DialogFlags.DESTROY_WITH_PARENT, (
- _("Forward"), RESPONSE_FORWARD, _("Backward"), RESPONSE_BACKWARD, Gtk.STOCK_CANCEL,
- Gtk.ResponseType.NONE
- )
+ _("Find"),
+ self.window,
+ Gtk.DialogFlags.DESTROY_WITH_PARENT,
+ (
+ _("Forward"),
+ RESPONSE_FORWARD,
+ _("Backward"),
+ RESPONSE_BACKWARD,
+ Gtk.STOCK_CANCEL,
+ Gtk.ResponseType.NONE,
+ ),
)
dialog.vbox.pack_end(search_text, True, True, 0)
dialog.buffer = search_text.get_buffer()
@@ -1208,8 +1226,9 @@ class Guake(SimpleGladeApp):
search_string = start.get_text(end)
log.debug(
- "Searching for %r %s\n", search_string,
- "forward" if response_id == RESPONSE_FORWARD else "backward"
+ "Searching for %r %s\n",
+ search_string,
+ "forward" if response_id == RESPONSE_FORWARD else "backward",
)
current_term = self.get_notebook().get_current_terminal()
@@ -1233,7 +1252,7 @@ class Guake(SimpleGladeApp):
self.set_terminal_focus()
self.was_deleted_tab = True
- self.display_tab_names = self.settings.general.get_int('display-tab-names')
+ self.display_tab_names = self.settings.general.get_int("display-tab-names")
self.recompute_tabs_titles()
def set_terminal_focus(self):
@@ -1263,26 +1282,28 @@ class Guake(SimpleGladeApp):
if search_query:
# TODO search provider should be selectable (someone might
# prefer bing.com, the internet is a strange place ¯\_(ツ)_/¯ )
- search_url = "https://www.google.com/#q={!s}&safe=off".format(search_query, )
+ search_url = "https://www.google.com/#q={!s}&safe=off".format(search_query,)
Gtk.show_uri(self.window.get_screen(), search_url, get_server_time(self.window))
return True
def set_tab_position(self, *args):
- if self.settings.general.get_boolean('tab-ontop'):
+ if self.settings.general.get_boolean("tab-ontop"):
self.get_notebook().set_tab_pos(Gtk.PositionType.TOP)
else:
self.get_notebook().set_tab_pos(Gtk.PositionType.BOTTOM)
def execute_hook(self, event_name):
"""Execute shell commands related to current event_name"""
- hook = self.settings.hooks.get_string('{!s}'.format(event_name))
+ hook = self.settings.hooks.get_string("{!s}".format(event_name))
if hook is not None and hook != "":
hook = hook.split()
try:
subprocess.Popen(hook)
except OSError as oserr:
if oserr.errno == 8:
- log.error("Hook execution failed! Check shebang at first line of %s!", hook)
+ log.error(
+ "Hook execution failed! Check shebang at first line of %s!", hook,
+ )
log.debug(traceback.format_exc())
else:
log.error(str(oserr))
@@ -1298,14 +1319,14 @@ class Guake(SimpleGladeApp):
pass
def get_xdg_config_directory(self):
- xdg_config_home = os.environ.get('XDG_CONFIG_HOME', '~/.config')
- return Path(xdg_config_home, 'guake').expanduser()
+ xdg_config_home = os.environ.get("XDG_CONFIG_HOME", "~/.config")
+ return Path(xdg_config_home, "guake").expanduser()
- def save_tabs(self, filename='session.json'):
+ def save_tabs(self, filename="session.json"):
config = {
- 'schema_version': TABS_SESSION_SCHEMA_VERSION,
- 'timestamp': int(pytime.time()),
- 'workspace': {}
+ "schema_version": TABS_SESSION_SCHEMA_VERSION,
+ "timestamp": int(pytime.time()),
+ "workspace": {},
}
for key, nb in self.notebook_manager.get_notebooks().items():
@@ -1316,84 +1337,89 @@ class Guake(SimpleGladeApp):
if page.child:
panes = []
page.save_box_layout(page.child, panes)
- tabs.append({
- 'panes': panes,
- 'label': nb.get_tab_text_index(index),
- 'custom_label_set': getattr(page, 'custom_label_set', False)
- })
+ tabs.append(
+ {
+ "panes": panes,
+ "label": nb.get_tab_text_index(index),
+ "custom_label_set": getattr(page, "custom_label_set", False),
+ }
+ )
except FileNotFoundError:
# discard same broken tabs
pass
# NOTE: Maybe we will have frame inside the workspace in future
# So lets use list to store the tabs (as for each frame)
- config['workspace'][key] = [tabs]
+ config["workspace"][key] = [tabs]
if not self.get_xdg_config_directory().exists():
self.get_xdg_config_directory().mkdir(parents=True)
session_file = self.get_xdg_config_directory() / filename
- with session_file.open('w') as f:
+ with session_file.open("w") as f:
json.dump(config, f, ensure_ascii=False, indent=4)
- log.info('Guake tabs saved to %s', session_file)
+ log.info("Guake tabs saved to %s", session_file)
- def restore_tabs(self, filename='session.json', suppress_notify=False):
+ def restore_tabs(self, filename="session.json", suppress_notify=False):
session_file = self.get_xdg_config_directory() / filename
if not session_file.exists():
- log.info('Cannot find session.json file')
+ log.info("Cannot find session.json file")
return
with session_file.open() as f:
try:
config = json.load(f)
except Exception:
- log.warning('%s is broken', session_file)
+ log.warning("%s is broken", session_file)
shutil.copy(
- session_file,
- self.get_xdg_config_directory() / '{0}.bak'.format(filename)
+ session_file, self.get_xdg_config_directory() / "{0}.bak".format(filename),
)
- img_filename = pixmapfile('guake-notification.png')
+ img_filename = pixmapfile("guake-notification.png")
notifier.showMessage(
- _('Guake Terminal'),
- _('Your {session_filename} file is broken, backup to {session_filename}.bak'
- ).format(session_filename=filename), img_filename
+ _("Guake Terminal"),
+ _(
+ "Your {session_filename} file is broken, backup to {session_filename}.bak"
+ ).format(session_filename=filename),
+ img_filename,
)
return
# Check schema_version exist
- if 'schema_version' not in config:
- img_filename = pixmapfile('guake-notification.png')
+ if "schema_version" not in config:
+ img_filename = pixmapfile("guake-notification.png")
notifier.showMessage(
- _('Guake Terminal'),
+ _("Guake Terminal"),
_(
- 'Tabs session restore abort.\n'
- 'Your session file ({session_filename}) missing schema_version as key'
- ).format(session_filename=session_file), img_filename
+ "Tabs session restore abort.\n"
+ "Your session file ({session_filename}) missing schema_version as key"
+ ).format(session_filename=session_file),
+ img_filename,
)
return
# Check schema version is not higher than current version
- if config['schema_version'] > TABS_SESSION_SCHEMA_VERSION:
- img_filename = pixmapfile('guake-notification.png')
+ if config["schema_version"] > TABS_SESSION_SCHEMA_VERSION:
+ img_filename = pixmapfile("guake-notification.png")
notifier.showMessage(
- _('Guake Terminal'),
+ _("Guake Terminal"),
_(
- 'Tabs session restore abort.\n'
- 'Your session file schema version is higher than current version '
- '({session_file_schema_version} > {current_schema_version}).'
+ "Tabs session restore abort.\n"
+ "Your session file schema version is higher than current version "
+ "({session_file_schema_version} > {current_schema_version})."
).format(
- session_file_schema_version=config['schema_version'],
- current_schema_version=TABS_SESSION_SCHEMA_VERSION
- ), img_filename
+ session_file_schema_version=config["schema_version"],
+ current_schema_version=TABS_SESSION_SCHEMA_VERSION,
+ ),
+ img_filename,
)
return
# Disable auto save tabs
- v = self.settings.general.get_boolean('save-tabs-when-changed')
- self.settings.general.set_boolean('save-tabs-when-changed', False)
+ v = self.settings.general.get_boolean("save-tabs-when-changed")
+ self.settings.general.set_boolean("save-tabs-when-changed", False)
# Restore all tabs for all workspaces
self.pending_restore_page_split = []
self._failed_restore_page_split = []
try:
- for key, frames in config['workspace'].items():
+ for key, frames in config["workspace"].items():
nb = self.notebook_manager.get_notebook(int(key))
current_pages = nb.get_n_pages()
@@ -1401,42 +1427,47 @@ class Guake(SimpleGladeApp):
# NOTE: If frame implement in future, we will need to update this code
for tabs in frames:
for index, tab in enumerate(tabs):
- directory = tab['panes'][0]['directory'] if len(
- tab.get('panes', [])
- ) == 1 else tab.get('directory', None)
- box, page_num, term = nb.new_page_with_focus(
- directory, tab['label'], tab['custom_label_set']
+ directory = (
+ tab["panes"][0]["directory"]
+ if len(tab.get("panes", [])) == 1
+ else tab.get("directory", None)
)
- if tab.get('panes', False):
+ box, page_num, term = nb.new_page_with_focus(
+ directory, tab["label"], tab["custom_label_set"]
+ )
+ if tab.get("panes", False):
# if directory:
# continue
- box.restore_box_layout(box.child, tab['panes'])
+ box.restore_box_layout(box.child, tab["panes"])
# Remove original pages in notebook
for i in range(current_pages):
nb.delete_page(0)
except KeyError:
- log.warning('%s schema is broken', session_file)
- shutil.copy(session_file, self.get_xdg_config_directory() / '{}.bak'.format(filename))
- with (self.get_xdg_config_directory() / '{}.log.err'.format(filename)).open('w') as f:
+ log.warning("%s schema is broken", session_file)
+ shutil.copy(
+ session_file, self.get_xdg_config_directory() / "{}.bak".format(filename),
+ )
+ with (self.get_xdg_config_directory() / "{}.log.err".format(filename)).open("w") as f:
traceback.print_exc(file=f)
- img_filename = pixmapfile('guake-notification.png')
+ img_filename = pixmapfile("guake-notification.png")
notifier.showMessage(
- _('Guake Terminal'),
+ _("Guake Terminal"),
_(
- 'Your {session_filename} schema is broken, backup to {session_filename}.bak, '
- 'and error message has been saved to {session_filename}.log.err.'.format(
+ "Your {session_filename} schema is broken, backup to {session_filename}.bak, "
+ "and error message has been saved to {session_filename}.log.err.".format(
session_filename=filename
)
- ), img_filename
+ ),
+ img_filename,
)
# Reset auto save tabs
- self.settings.general.set_boolean('save-tabs-when-changed', v)
+ self.settings.general.set_boolean("save-tabs-when-changed", v)
# Notify the user
- if (self.settings.general.get_boolean('restore-tabs-notify') and not suppress_notify):
- filename = pixmapfile('guake-notification.png')
+ if self.settings.general.get_boolean("restore-tabs-notify") and not suppress_notify:
+ filename = pixmapfile("guake-notification.png")
notifier.showMessage(_("Guake Terminal"), _("Your tabs has been restored!"), filename)
- log.info('Guake tabs restored from %s', session_file)
+ log.info("Guake tabs restored from %s", session_file)
diff --git a/guake/guake_logging.py b/guake/guake_logging.py
index cf5b3d54..743fc574 100644
--- a/guake/guake_logging.py
+++ b/guake/guake_logging.py
@@ -23,7 +23,7 @@ import logging.config
try:
from colorlog import ColoredFormatter
-except ImportError as ie:
+except ImportError:
ColoredFormatter = None
log = logging.getLogger(__name__)
@@ -37,37 +37,33 @@ def setupLogging(debug_mode):
if ColoredFormatter:
level_str = logging.getLevelName(base_logging_level)
- logging.config.dictConfig({
- 'version': 1,
- 'disable_existing_loggers': False,
- 'loggers': {
- '': {
- 'handlers': ['default'],
- 'level': level_str,
- 'propagate': True
- },
- },
- 'handlers': {
- 'default': {
- 'level': level_str,
- 'class': 'logging.StreamHandler',
- 'formatter': "default",
- },
- },
- 'formatters': {
- 'default': {
- '()': 'colorlog.ColoredFormatter',
- 'format': "%(log_color)s%(levelname)-8s%(reset)s %(message)s",
- 'log_colors': {
- 'DEBUG': 'cyan',
- 'INFO': 'green',
- 'WARNING': 'yellow',
- 'ERROR': 'red',
- 'CRITICAL': 'red,bg_white',
+ logging.config.dictConfig(
+ {
+ "version": 1,
+ "disable_existing_loggers": False,
+ "loggers": {"": {"handlers": ["default"], "level": level_str, "propagate": True,},},
+ "handlers": {
+ "default": {
+ "level": level_str,
+ "class": "logging.StreamHandler",
+ "formatter": "default",
},
- }
- },
- })
+ },
+ "formatters": {
+ "default": {
+ "()": "colorlog.ColoredFormatter",
+ "format": "%(log_color)s%(levelname)-8s%(reset)s %(message)s",
+ "log_colors": {
+ "DEBUG": "cyan",
+ "INFO": "green",
+ "WARNING": "yellow",
+ "ERROR": "red",
+ "CRITICAL": "red,bg_white",
+ },
+ }
+ },
+ }
+ )
else:
logging.basicConfig(level=base_logging_level, format="%(message)s")
log.setLevel(base_logging_level)
diff --git a/guake/guake_toggle.py b/guake/guake_toggle.py
index d6d5eaa4..4a65f017 100644
--- a/guake/guake_toggle.py
+++ b/guake/guake_toggle.py
@@ -1,9 +1,9 @@
def toggle_guake_by_dbus():
- import dbus
+ import dbus # pylint: disable=import-outside-toplevel
try:
bus = dbus.SessionBus()
- remote_object = bus.get_object('org.guake3.RemoteControl', '/org/guake3/RemoteControl')
+ remote_object = bus.get_object("org.guake3.RemoteControl", "/org/guake3/RemoteControl")
print("Sending 'toggle' message to Guake3")
remote_object.show_hide()
except dbus.DBusException:
diff --git a/guake/keybindings.py b/guake/keybindings.py
index 51b53bcc..21f2ec4f 100644
--- a/guake/keybindings.py
+++ b/guake/keybindings.py
@@ -20,7 +20,8 @@ Boston, MA 02110-1301 USA
import logging
import gi
-gi.require_version('Gtk', '3.0')
+
+gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from guake import notifier
@@ -32,7 +33,7 @@ from locale import gettext as _
log = logging.getLogger(__name__)
-class Keybindings():
+class Keybindings:
"""Handles changes in keyboard shortcuts.
"""
@@ -46,7 +47,7 @@ class Keybindings():
# Setup global keys
self.globalhotkeys = {}
- globalkeys = ['show-hide', 'show-focus']
+ globalkeys = ["show-hide", "show-focus"]
for key in globalkeys:
guake.settings.keybindingsGlobal.onChangedValue(key, self.reload_global)
guake.settings.keybindingsGlobal.triggerOnChangedValue(
@@ -55,17 +56,50 @@ class Keybindings():
# Setup local keys
keys = [
- 'toggle-fullscreen', 'new-tab', 'new-tab-home', 'close-tab', 'rename-current-tab',
- 'previous-tab', 'next-tab', 'clipboard-copy', 'clipboard-paste', 'quit', 'zoom-in',
- 'zoom-out', 'increase-height', 'decrease-height', 'increase-transparency',
- 'decrease-transparency', 'toggle-transparency', "search-on-web", 'move-tab-left',
- 'move-tab-right', 'switch-tab1', 'switch-tab2', 'switch-tab3', 'switch-tab4',
- 'switch-tab5', 'switch-tab6', 'switch-tab7', 'switch-tab8', 'switch-tab9',
- 'switch-tab10', 'switch-tab-last', 'reset-terminal', 'split-tab-vertical',
- 'split-tab-horizontal', 'close-terminal', 'focus-terminal-up', 'focus-terminal-down',
- 'focus-terminal-right', 'focus-terminal-left', 'move-terminal-split-up',
- 'move-terminal-split-down', 'move-terminal-split-left', 'move-terminal-split-right',
- 'search-terminal'
+ "toggle-fullscreen",
+ "new-tab",
+ "new-tab-home",
+ "close-tab",
+ "rename-current-tab",
+ "previous-tab",
+ "next-tab",
+ "clipboard-copy",
+ "clipboard-paste",
+ "quit",
+ "zoom-in",
+ "zoom-out",
+ "increase-height",
+ "decrease-height",
+ "increase-transparency",
+ "decrease-transparency",
+ "toggle-transparency",
+ "search-on-web",
+ "move-tab-left",
+ "move-tab-right",
+ "switch-tab1",
+ "switch-tab2",
+ "switch-tab3",
+ "switch-tab4",
+ "switch-tab5",
+ "switch-tab6",
+ "switch-tab7",
+ "switch-tab8",
+ "switch-tab9",
+ "switch-tab10",
+ "switch-tab-last",
+ "reset-terminal",
+ "split-tab-vertical",
+ "split-tab-horizontal",
+ "close-terminal",
+ "focus-terminal-up",
+ "focus-terminal-down",
+ "focus-terminal-right",
+ "focus-terminal-left",
+ "move-terminal-split-up",
+ "move-terminal-split-down",
+ "move-terminal-split-left",
+ "move-terminal-split-right",
+ "search-terminal",
]
for key in keys:
guake.settings.keybindingsLocal.onChangedValue(key, self.reload_accelerators)
@@ -73,12 +107,12 @@ class Keybindings():
def reload_global(self, settings, key, user_data):
value = settings.get_string(key)
- if value == 'disabled':
+ if value == "disabled":
return
try:
self.guake.hotkeys.unbind(self.globalhotkeys[key])
- except Exception as e:
+ except BaseException:
pass
self.globalhotkeys[key] = value
@@ -87,14 +121,16 @@ class Keybindings():
if not self.guake.hotkeys.bind(value, self.guake.show_hide):
keyval, mask = Gtk.accelerator_parse(value)
label = Gtk.accelerator_get_label(keyval, mask)
- filename = pixmapfile('guake-notification.png')
+ filename = pixmapfile("guake-notification.png")
notifier.showMessage(
- _('Guake Terminal'),
+ _("Guake Terminal"),
_(
- 'A problem happened when binding %s key.\n'
- 'Please use Guake Preferences dialog to choose another '
- 'key'
- ) % label, filename
+ "A problem happened when binding %s key.\n"
+ "Please use Guake Preferences dialog to choose another "
+ "key"
+ )
+ % label,
+ filename,
)
elif key == "show-focus":
if not self.guake.hotkeys.bind(value, self.guake.show_focus):
@@ -119,141 +155,141 @@ class Keybindings():
def getk(x):
return self.guake.settings.keybindingsLocal.get_string(x)
- key, mask = Gtk.accelerator_parse(getk('reset-terminal'))
+ key, mask = Gtk.accelerator_parse(getk("reset-terminal"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_reset_terminal
)
- key, mask = Gtk.accelerator_parse(getk('quit'))
+ key, mask = Gtk.accelerator_parse(getk("quit"))
if key > 0:
self.accel_group.connect(key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_quit)
- key, mask = Gtk.accelerator_parse(getk('new-tab'))
+ key, mask = Gtk.accelerator_parse(getk("new-tab"))
if key > 0:
self.accel_group.connect(key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_add)
- key, mask = Gtk.accelerator_parse(getk('new-tab-home'))
+ key, mask = Gtk.accelerator_parse(getk("new-tab-home"))
if key > 0:
self.accel_group.connect(key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_add_home)
- key, mask = Gtk.accelerator_parse(getk('close-tab'))
+ key, mask = Gtk.accelerator_parse(getk("close-tab"))
if key > 0:
def x(*args):
- prompt_cfg = self.guake.settings.general.get_int('prompt-on-close-tab')
+ prompt_cfg = self.guake.settings.general.get_int("prompt-on-close-tab")
self.guake.get_notebook().delete_page_current(prompt=prompt_cfg)
self.accel_group.connect(key, mask, Gtk.AccelFlags.VISIBLE, x)
- key, mask = Gtk.accelerator_parse(getk('previous-tab'))
+ key, mask = Gtk.accelerator_parse(getk("previous-tab"))
if key > 0:
self.accel_group.connect(key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_prev)
- key, mask = Gtk.accelerator_parse(getk('next-tab'))
+ key, mask = Gtk.accelerator_parse(getk("next-tab"))
if key > 0:
self.accel_group.connect(key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_next)
- key, mask = Gtk.accelerator_parse(getk('move-tab-left'))
+ key, mask = Gtk.accelerator_parse(getk("move-tab-left"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_move_tab_left
)
- key, mask = Gtk.accelerator_parse(getk('move-tab-right'))
+ key, mask = Gtk.accelerator_parse(getk("move-tab-right"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_move_tab_right
)
- key, mask = Gtk.accelerator_parse(getk('rename-current-tab'))
+ key, mask = Gtk.accelerator_parse(getk("rename-current-tab"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_rename_current_tab
)
- key, mask = Gtk.accelerator_parse(getk('clipboard-copy'))
+ key, mask = Gtk.accelerator_parse(getk("clipboard-copy"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_copy_clipboard
)
- key, mask = Gtk.accelerator_parse(getk('clipboard-paste'))
+ key, mask = Gtk.accelerator_parse(getk("clipboard-paste"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_paste_clipboard
)
- key, mask = Gtk.accelerator_parse(getk('toggle-fullscreen'))
+ key, mask = Gtk.accelerator_parse(getk("toggle-fullscreen"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_toggle_fullscreen
)
- key, mask = Gtk.accelerator_parse(getk('toggle-hide-on-lose-focus'))
+ key, mask = Gtk.accelerator_parse(getk("toggle-hide-on-lose-focus"))
if key > 0:
self.accel_group.connect(
- key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_toggle_hide_on_lose_focus
+ key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_toggle_hide_on_lose_focus,
)
- key, mask = Gtk.accelerator_parse(getk('zoom-in'))
+ key, mask = Gtk.accelerator_parse(getk("zoom-in"))
if key > 0:
self.accel_group.connect(key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_zoom_in)
- key, mask = Gtk.accelerator_parse(getk('zoom-in-alt'))
+ key, mask = Gtk.accelerator_parse(getk("zoom-in-alt"))
if key > 0:
self.accel_group.connect(key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_zoom_in)
- key, mask = Gtk.accelerator_parse(getk('zoom-out'))
+ key, mask = Gtk.accelerator_parse(getk("zoom-out"))
if key > 0:
self.accel_group.connect(key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_zoom_out)
- key, mask = Gtk.accelerator_parse(getk('increase-height'))
+ key, mask = Gtk.accelerator_parse(getk("increase-height"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_increase_height
)
- key, mask = Gtk.accelerator_parse(getk('decrease-height'))
+ key, mask = Gtk.accelerator_parse(getk("decrease-height"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_decrease_height
)
- key, mask = Gtk.accelerator_parse(getk('increase-transparency'))
+ key, mask = Gtk.accelerator_parse(getk("increase-transparency"))
if key > 0:
self.accel_group.connect(
- key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_increase_transparency
+ key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_increase_transparency,
)
- key, mask = Gtk.accelerator_parse(getk('decrease-transparency'))
+ key, mask = Gtk.accelerator_parse(getk("decrease-transparency"))
if key > 0:
self.accel_group.connect(
- key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_decrease_transparency
+ key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_decrease_transparency,
)
- key, mask = Gtk.accelerator_parse(getk('toggle-transparency'))
+ key, mask = Gtk.accelerator_parse(getk("toggle-transparency"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_toggle_transparency
)
for tab in range(1, 11):
- key, mask = Gtk.accelerator_parse(getk('switch-tab%d' % tab))
+ key, mask = Gtk.accelerator_parse(getk("switch-tab%d" % tab))
if key > 0:
self.accel_group.connect(
- key, mask, Gtk.AccelFlags.VISIBLE, self.guake.gen_accel_switch_tabN(tab - 1)
+ key, mask, Gtk.AccelFlags.VISIBLE, self.guake.gen_accel_switch_tabN(tab - 1),
)
- key, mask = Gtk.accelerator_parse(getk('switch-tab-last'))
+ key, mask = Gtk.accelerator_parse(getk("switch-tab-last"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_switch_tab_last
)
try:
- key, mask = Gtk.accelerator_parse(getk('search-on-web'))
+ key, mask = Gtk.accelerator_parse(getk("search-on-web"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.search_on_web
@@ -261,112 +297,148 @@ class Keybindings():
except Exception:
log.exception("Exception occured")
- key, mask = Gtk.accelerator_parse(getk('split-tab-vertical'))
+ key, mask = Gtk.accelerator_parse(getk("split-tab-vertical"))
if key > 0:
self.accel_group.connect(
key,
mask,
Gtk.AccelFlags.VISIBLE,
(
- lambda *args: # keep make style from concat this lines
- self.guake.get_notebook().get_current_terminal().get_parent().split_v() or True
- )
+ lambda *args: self.guake.get_notebook()
+ .get_current_terminal()
+ .get_parent()
+ .split_v()
+ or True
+ ),
)
- key, mask = Gtk.accelerator_parse(getk('split-tab-horizontal'))
+ key, mask = Gtk.accelerator_parse(getk("split-tab-horizontal"))
if key > 0:
self.accel_group.connect(
key,
mask,
Gtk.AccelFlags.VISIBLE,
(
- lambda *args: # keep make style from concat this lines
- self.guake.get_notebook().get_current_terminal().get_parent().split_h() or True
- )
+ lambda *args: self.guake.get_notebook()
+ .get_current_terminal()
+ .get_parent()
+ .split_h()
+ or True
+ ),
)
- key, mask = Gtk.accelerator_parse(getk('close-terminal'))
+ key, mask = Gtk.accelerator_parse(getk("close-terminal"))
if key > 0:
self.accel_group.connect(
- key, mask, Gtk.AccelFlags.VISIBLE,
- (lambda *args: self.guake.get_notebook().get_current_terminal().kill() or True)
+ key,
+ mask,
+ Gtk.AccelFlags.VISIBLE,
+ (lambda *args: self.guake.get_notebook().get_current_terminal().kill() or True),
)
- key, mask = Gtk.accelerator_parse(getk('focus-terminal-up'))
- if key > 0:
- self.accel_group.connect(
- key, mask, Gtk.AccelFlags.VISIBLE, (
- lambda *args: FocusMover(self.guake.window).
- move_up(self.guake.get_notebook().get_current_terminal()) or True
- )
- )
- key, mask = Gtk.accelerator_parse(getk('focus-terminal-down'))
- if key > 0:
- self.accel_group.connect(
- key, mask, Gtk.AccelFlags.VISIBLE, (
- lambda *args: FocusMover(self.guake.window).
- move_down(self.guake.get_notebook().get_current_terminal()) or True
- )
- )
- key, mask = Gtk.accelerator_parse(getk('focus-terminal-right'))
- if key > 0:
- self.accel_group.connect(
- key, mask, Gtk.AccelFlags.VISIBLE, (
- lambda *args: FocusMover(self.guake.window).
- move_right(self.guake.get_notebook().get_current_terminal()) or True
- )
- )
- key, mask = Gtk.accelerator_parse(getk('focus-terminal-left'))
- if key > 0:
- self.accel_group.connect(
- key, mask, Gtk.AccelFlags.VISIBLE, (
- lambda *args: FocusMover(self.guake.window).
- move_left(self.guake.get_notebook().get_current_terminal()) or True
- )
- )
- key, mask = Gtk.accelerator_parse(getk('move-terminal-split-up'))
+ key, mask = Gtk.accelerator_parse(getk("focus-terminal-up"))
if key > 0:
self.accel_group.connect(
key,
mask,
Gtk.AccelFlags.VISIBLE,
(
- lambda *args: # keep make style from concat this lines
- SplitMover.move_up(self.guake.get_notebook().get_current_terminal()) or True
- )
+ lambda *args: FocusMover(self.guake.window).move_up(
+ self.guake.get_notebook().get_current_terminal()
+ )
+ or True
+ ),
)
- key, mask = Gtk.accelerator_parse(getk('move-terminal-split-down'))
+ key, mask = Gtk.accelerator_parse(getk("focus-terminal-down"))
if key > 0:
self.accel_group.connect(
key,
mask,
Gtk.AccelFlags.VISIBLE,
(
- lambda *args: # keep make style from concat this lines
- SplitMover.move_down(self.guake.get_notebook().get_current_terminal()) or True
- )
+ lambda *args: FocusMover(self.guake.window).move_down(
+ self.guake.get_notebook().get_current_terminal()
+ )
+ or True
+ ),
)
- key, mask = Gtk.accelerator_parse(getk('move-terminal-split-left'))
+ key, mask = Gtk.accelerator_parse(getk("focus-terminal-right"))
if key > 0:
self.accel_group.connect(
key,
mask,
Gtk.AccelFlags.VISIBLE,
(
- lambda *args: # keep make style from concat this lines
- SplitMover.move_left(self.guake.get_notebook().get_current_terminal()) or True
- )
+ lambda *args: FocusMover(self.guake.window).move_right(
+ self.guake.get_notebook().get_current_terminal()
+ )
+ or True
+ ),
)
- key, mask = Gtk.accelerator_parse(getk('move-terminal-split-right'))
+ key, mask = Gtk.accelerator_parse(getk("focus-terminal-left"))
if key > 0:
self.accel_group.connect(
key,
mask,
Gtk.AccelFlags.VISIBLE,
(
- lambda *args: # keep make style from concat this lines
- SplitMover.move_right(self.guake.get_notebook().get_current_terminal()) or True
- )
+ lambda *args: FocusMover(self.guake.window).move_left(
+ self.guake.get_notebook().get_current_terminal()
+ )
+ or True
+ ),
+ )
+ key, mask = Gtk.accelerator_parse(getk("move-terminal-split-up"))
+ if key > 0:
+ self.accel_group.connect(
+ key,
+ mask,
+ Gtk.AccelFlags.VISIBLE,
+ (
+ lambda *args: SplitMover.move_up( # keep make style from concat this lines
+ self.guake.get_notebook().get_current_terminal()
+ )
+ or True
+ ),
+ )
+ key, mask = Gtk.accelerator_parse(getk("move-terminal-split-down"))
+ if key > 0:
+ self.accel_group.connect(
+ key,
+ mask,
+ Gtk.AccelFlags.VISIBLE,
+ (
+ lambda *args: SplitMover.move_down( # keep make style from concat this lines
+ self.guake.get_notebook().get_current_terminal()
+ )
+ or True
+ ),
+ )
+ key, mask = Gtk.accelerator_parse(getk("move-terminal-split-left"))
+ if key > 0:
+ self.accel_group.connect(
+ key,
+ mask,
+ Gtk.AccelFlags.VISIBLE,
+ (
+ lambda *args: SplitMover.move_left( # keep make style from concat this lines
+ self.guake.get_notebook().get_current_terminal()
+ )
+ or True
+ ),
+ )
+ key, mask = Gtk.accelerator_parse(getk("move-terminal-split-right"))
+ if key > 0:
+ self.accel_group.connect(
+ key,
+ mask,
+ Gtk.AccelFlags.VISIBLE,
+ (
+ lambda *args: SplitMover.move_right( # keep make style from concat this lines
+ self.guake.get_notebook().get_current_terminal()
+ )
+ or True
+ ),
)
- key, mask = Gtk.accelerator_parse(getk('search-terminal'))
+ key, mask = Gtk.accelerator_parse(getk("search-terminal"))
if key > 0:
self.accel_group.connect(
key, mask, Gtk.AccelFlags.VISIBLE, self.guake.accel_search_terminal
diff --git a/guake/main.py b/guake/main.py
index 5495fb9e..be90a30a 100644
--- a/guake/main.py
+++ b/guake/main.py
@@ -42,13 +42,17 @@ from guake.support import print_support
from guake.utils import restore_preferences
from guake.utils import save_preferences
-# When we are in the document generation on readthedocs, we do not have paths.py generated
+# When we are in the document generation on readthedocs,
+# we do not have paths.py generated
try:
from guake.paths import LOCALE_DIR
+
bindtextdomain(NAME, LOCALE_DIR)
except: # pylint: disable=bare-except
pass
+# pylint: disable=import-outside-toplevel
+
def main():
"""Parses the command line parameters and decide if dbus methods
@@ -65,297 +69,292 @@ def main():
# do not use version keywords here, pbr might be slow to find the version of Guake module
parser = OptionParser()
parser.add_option(
- '-V',
- '--version',
- dest='version',
- action='store_true',
+ "-V",
+ "--version",
+ dest="version",
+ action="store_true",
default=False,
- help=_('Show Guake version number and exit')
+ help=_("Show Guake version number and exit"),
)
parser.add_option(
- '-v',
- '--verbose',
- dest='verbose',
- action='store_true',
+ "-v",
+ "--verbose",
+ dest="verbose",
+ action="store_true",
default=False,
- help=_('Enable verbose logging')
+ help=_("Enable verbose logging"),
)
parser.add_option(
- '-f',
- '--fullscreen',
- dest='fullscreen',
- action='store_true',
+ "-f",
+ "--fullscreen",
+ dest="fullscreen",
+ action="store_true",
default=False,
- help=_('Put Guake in fullscreen mode')
+ help=_("Put Guake in fullscreen mode"),
)
parser.add_option(
- '--unfullscreen',
- dest='unfullscreen',
- action='store_true',
+ "--unfullscreen",
+ dest="unfullscreen",
+ action="store_true",
default=False,
- help=_('Put Guake out from fullscreen mode')
+ help=_("Put Guake out from fullscreen mode"),
)
parser.add_option(
- '-t',
- '--toggle-visibility',
- dest='show_hide',
- action='store_true',
+ "-t",
+ "--toggle-visibility",
+ dest="show_hide",
+ action="store_true",
default=False,
- help=_('Toggles the visibility of the terminal window')
+ help=_("Toggles the visibility of the terminal window"),
)
parser.add_option(
- '--show',
+ "--show",
dest="show",
- action='store_true',
+ action="store_true",
default=False,
- help=_('Shows Guake main window')
+ help=_("Shows Guake main window"),
)
parser.add_option(
- '--hide',
- dest='hide',
- action='store_true',
+ "--hide",
+ dest="hide",
+ action="store_true",
default=False,
- help=_('Hides Guake main window')
+ help=_("Hides Guake main window"),
)
parser.add_option(
- '-p',
- '--preferences',
- dest='show_preferences',
- action='store_true',
+ "-p",
+ "--preferences",
+ dest="show_preferences",
+ action="store_true",
default=False,
- help=_('Shows Guake preference window')
+ help=_("Shows Guake preference window"),
)
parser.add_option(
- '-a',
- '--about',
- dest='show_about',
- action='store_true',
+ "-a",
+ "--about",
+ dest="show_about",
+ action="store_true",
default=False,
- help=_('Shows Guake\'s about info')
+ help=_("Shows Guake's about info"),
)
parser.add_option(
- '-n',
- '--new-tab',
- dest='new_tab',
- action='store',
- default='',
- help=_('Add a new tab (with current directory set to NEW_TAB)')
+ "-n",
+ "--new-tab",
+ dest="new_tab",
+ action="store",
+ default="",
+ help=_("Add a new tab (with current directory set to NEW_TAB)"),
)
parser.add_option(
- '-s',
- '--select-tab',
- dest='select_tab',
- action='store',
- default='',
- help=_('Select a tab (SELECT_TAB is the index of the tab)')
+ "-s",
+ "--select-tab",
+ dest="select_tab",
+ action="store",
+ default="",
+ help=_("Select a tab (SELECT_TAB is the index of the tab)"),
)
parser.add_option(
- '-g',
- '--selected-tab',
- dest='selected_tab',
- action='store_true',
+ "-g",
+ "--selected-tab",
+ dest="selected_tab",
+ action="store_true",
default=False,
- help=_('Return the selected tab index.')
+ help=_("Return the selected tab index."),
)
parser.add_option(
- '-l',
- '--selected-tablabel',
- dest='selected_tablabel',
- action='store_true',
+ "-l",
+ "--selected-tablabel",
+ dest="selected_tablabel",
+ action="store_true",
default=False,
- help=_('Return the selected tab label.')
+ help=_("Return the selected tab label."),
)
parser.add_option(
- '-S',
- '--select-terminal',
- dest='select_terminal',
- metavar='TERMINAL_INDEX',
- action='store',
- default='',
+ "-S",
+ "--select-terminal",
+ dest="select_terminal",
+ metavar="TERMINAL_INDEX",
+ action="store",
+ default="",
help=_(
- 'Select a specific terminal in a split tab. ' +
- 'Only useful with split terminals (TERMINAL_INDEX is the index of the tab)'
- )
+ "Select a specific terminal in a split tab. "
+ + "Only useful with split terminals (TERMINAL_INDEX is the index of the tab)"
+ ),
)
parser.add_option(
- '--selected-terminal',
- dest='selected_terminal',
- action='store_true',
+ "--selected-terminal",
+ dest="selected_terminal",
+ action="store_true",
default=False,
- help=_('Return the selected terminal index.')
+ help=_("Return the selected terminal index."),
)
parser.add_option(
- '--split-vertical',
- dest='split_vertical',
- action='store_true',
+ "--split-vertical",
+ dest="split_vertical",
+ action="store_true",
default=False,
- help=_('Split the selected tab vertically.')
+ help=_("Split the selected tab vertically."),
)
parser.add_option(
- '--split-horizontal',
- dest='split_horizontal',
- action='store_true',
+ "--split-horizontal",
+ dest="split_horizontal",
+ action="store_true",
default=False,
- help=_('Split the selected tab horizontally.')
+ help=_("Split the selected tab horizontally."),
)
parser.add_option(
- '-e',
- '--execute-command',
- dest='command',
- action='store',
- default='',
- help=_('Execute an arbitrary command in the selected tab.')
+ "-e",
+ "--execute-command",
+ dest="command",
+ action="store",
+ default="",
+ help=_("Execute an arbitrary command in the selected tab."),
)
parser.add_option(
- '-i',
- '--tab-index',
- dest='tab_index',
- action='store',
- default='0',
- help=_('Specify the tab to rename. Default is 0. Can be used to select tab by UUID.')
+ "-i",
+ "--tab-index",
+ dest="tab_index",
+ action="store",
+ default="0",
+ help=_("Specify the tab to rename. Default is 0. Can be used to select tab by UUID."),
)
parser.add_option(
- '--bgcolor',
- dest='bgcolor',
- action='store',
- default='',
- help=_('Set the hexadecimal (#rrggbb) background color of '
- 'the selected tab.')
+ "--bgcolor",
+ dest="bgcolor",
+ action="store",
+ default="",
+ help=_("Set the hexadecimal (#rrggbb) background color of " "the selected tab."),
)
parser.add_option(
- '--fgcolor',
- dest='fgcolor',
- action='store',
- default='',
- help=_('Set the hexadecimal (#rrggbb) foreground color of the '
- 'selected tab.')
+ "--fgcolor",
+ dest="fgcolor",
+ action="store",
+ default="",
+ help=_("Set the hexadecimal (#rrggbb) foreground color of the " "selected tab."),
)
parser.add_option(
- '--bgcolor-current',
- dest='bgcolor_current',
- action='store',
- default='',
- help=_('Set the hexadecimal (#rrggbb) background color of '
- 'the current terminal.')
+ "--bgcolor-current",
+ dest="bgcolor_current",
+ action="store",
+ default="",
+ help=_("Set the hexadecimal (#rrggbb) background color of " "the current terminal."),
)
parser.add_option(
- '--fgcolor-current',
- dest='fgcolor_current',
- action='store',
- default='',
- help=_('Set the hexadecimal (#rrggbb) foreground color of '
- 'the current terminal.')
+ "--fgcolor-current",
+ dest="fgcolor_current",
+ action="store",
+ default="",
+ help=_("Set the hexadecimal (#rrggbb) foreground color of " "the current terminal."),
)
parser.add_option(
- '--change-palette',
- dest='palette_name',
- action='store',
- default='',
- help=_('Change Guake palette scheme')
+ "--change-palette",
+ dest="palette_name",
+ action="store",
+ default="",
+ help=_("Change Guake palette scheme"),
)
parser.add_option(
- '--reset-colors',
- dest='reset_colors',
- action='store_true',
+ "--reset-colors",
+ dest="reset_colors",
+ action="store_true",
default=False,
- help=_('Set colors from settings.')
+ help=_("Set colors from settings."),
)
parser.add_option(
- '--reset-colors-current',
- dest='reset_colors_current',
- action='store_true',
+ "--reset-colors-current",
+ dest="reset_colors_current",
+ action="store_true",
default=False,
- help=_('Set colors of the current terminal from settings.')
+ help=_("Set colors of the current terminal from settings."),
)
parser.add_option(
- '--rename-tab',
- dest='rename_tab',
- metavar='TITLE',
- action='store',
- default='',
+ "--rename-tab",
+ dest="rename_tab",
+ metavar="TITLE",
+ action="store",
+ default="",
help=_(
- 'Rename the specified tab by --tab-index. Reset to default if TITLE is '
+ "Rename the specified tab by --tab-index. Reset to default if TITLE is "
'a single dash "-".'
- )
+ ),
)
parser.add_option(
- '-r',
- '--rename-current-tab',
- dest='rename_current_tab',
- metavar='TITLE',
- action='store',
- default='',
- help=_('Rename the current tab. Reset to default if TITLE is a '
- 'single dash "-".')
+ "-r",
+ "--rename-current-tab",
+ dest="rename_current_tab",
+ metavar="TITLE",
+ action="store",
+ default="",
+ help=_("Rename the current tab. Reset to default if TITLE is a " 'single dash "-".'),
)
parser.add_option(
- '-q',
- '--quit',
- dest='quit',
- action='store_true',
+ "-q",
+ "--quit",
+ dest="quit",
+ action="store_true",
default=False,
- help=_('Says to Guake go away =(')
+ help=_("Says to Guake go away =("),
)
parser.add_option(
- '-u',
- '--no-startup-script',
- dest='execute_startup_script',
- action='store_false',
+ "-u",
+ "--no-startup-script",
+ dest="execute_startup_script",
+ action="store_false",
default=True,
- help=_('Do not execute the start up script')
+ help=_("Do not execute the start up script"),
)
parser.add_option(
- '--save-preferences',
- dest='save_preferences',
- action='store',
+ "--save-preferences",
+ dest="save_preferences",
+ action="store",
default=None,
- help=_('Save Guake preferences to this filename')
+ help=_("Save Guake preferences to this filename"),
)
parser.add_option(
- '--restore-preferences',
- dest='restore_preferences',
- action='store',
+ "--restore-preferences",
+ dest="restore_preferences",
+ action="store",
default=None,
- help=_('Restore Guake preferences from this file')
+ help=_("Restore Guake preferences from this file"),
)
parser.add_option(
- '--support',
- dest='support',
- action='store_true',
+ "--support",
+ dest="support",
+ action="store_true",
default=False,
- help=_('Show support infomation')
+ help=_("Show support infomation"),
)
# checking mandatory dependencies
@@ -363,20 +362,21 @@ def main():
missing_deps = False
try:
import gi
- gi.require_version('Gtk', '3.0')
- gi.require_version('Gdk', '3.0')
+
+ gi.require_version("Gtk", "3.0")
+ gi.require_version("Gdk", "3.0")
except ValueError:
print("[ERROR] missing mandatory dependency: GtK 3.0")
missing_deps = True
try:
- gi.require_version('Vte', '2.91') # vte-0.42
+ gi.require_version("Vte", "2.91") # vte-0.42
except ValueError:
print("[ERROR] missing mandatory dependency: Vte >= 0.42")
missing_deps = True
try:
- gi.require_version('Keybinder', '3.0')
+ gi.require_version("Keybinder", "3.0")
except ValueError:
print("[ERROR] missing mandatory dependency: Keybinder 3")
missing_deps = True
@@ -416,14 +416,15 @@ def main():
from guake import guake_version
from guake import vte_version
from guake import vte_runtime_version
- print('Guake Terminal: {}'.format(guake_version()))
- print('VTE: {}'.format(vte_version()))
- print('VTE runtime: {}'.format(vte_runtime_version()))
- print('Gtk: {}'.format(gtk_version()))
+
+ print("Guake Terminal: {}".format(guake_version()))
+ print("VTE: {}".format(vte_version()))
+ print("VTE runtime: {}".format(vte_runtime_version()))
+ print("Gtk: {}".format(gtk_version()))
sys.exit(0)
if options.save_preferences and options.restore_preferences:
- parser.error('options --save-preferences and --restore-preferences are mutually exclusive')
+ parser.error("options --save-preferences and --restore-preferences are mutually exclusive")
if options.save_preferences:
save_preferences(options.save_preferences)
sys.exit(0)
@@ -459,11 +460,12 @@ def main():
# gnome-terminal.
# To avoid confusing applications running inside Guake, clean up COLORTERM at startup.
if "COLORTERM" in os.environ:
- del os.environ['COLORTERM']
+ del os.environ["COLORTERM"]
log.info("Guake not running, starting it")
# late loading of the Guake object, to speed up dbus comm
from guake.guake_app import Guake
+
instance = Guake()
remote_object = DbusManager(instance)
already_running = False
@@ -496,17 +498,17 @@ def main():
if 0 <= selected < tab_count:
remote_object.select_tab(selected)
else:
- sys.stderr.write('invalid index: %d\n' % selected)
+ sys.stderr.write("invalid index: %d\n" % selected)
only_show_hide = options.show
if options.selected_tab:
selected = remote_object.get_selected_tab()
- sys.stdout.write('%d\n' % selected)
+ sys.stdout.write("%d\n" % selected)
only_show_hide = options.show
if options.selected_tablabel:
selectedlabel = remote_object.get_selected_tablabel()
- sys.stdout.write('%s\n' % selectedlabel)
+ sys.stdout.write("%s\n" % selectedlabel)
only_show_hide = options.show
if options.split_vertical:
@@ -519,7 +521,7 @@ def main():
if options.selected_terminal:
selected = remote_object.get_selected_terminal()
- sys.stdout.write('%d\n' % selected)
+ sys.stdout.write("%d\n" % selected)
only_show_hide = options.show
if options.select_terminal:
@@ -528,7 +530,7 @@ def main():
if 0 <= selected < term_count:
remote_object.select_terminal(selected)
else:
- sys.stderr.write('invalid index: %d\n' % selected)
+ sys.stderr.write("invalid index: %d\n" % selected)
only_show_hide = options.show
if options.command:
@@ -595,12 +597,14 @@ def main():
startup_script = instance.settings.general.get_string("startup-script")
if startup_script:
log.info("Calling startup script: %s", startup_script)
- pid = subprocess.Popen([startup_script],
- shell=True,
- stdin=None,
- stdout=None,
- stderr=None,
- close_fds=True)
+ pid = subprocess.Popen(
+ [startup_script],
+ shell=True,
+ stdin=None,
+ stdout=None,
+ stderr=None,
+ close_fds=True,
+ )
log.info("Startup script started with pid: %s", pid)
# Please ensure this is the last line !!!!
else:
@@ -617,10 +621,12 @@ def exec_main():
# Load gi pretty late, to speed up as much as possible the parsing of the option for DBus
# comm through command line
import gi
- gi.require_version('Gtk', '3.0')
+
+ gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
+
Gtk.main()
-if __name__ == '__main__':
+if __name__ == "__main__":
exec_main()
diff --git a/guake/menus.py b/guake/menus.py
index 7846c7ef..b66e5430 100644
--- a/guake/menus.py
+++ b/guake/menus.py
@@ -1,12 +1,15 @@
import gi
-gi.require_version('Gtk', '3.0')
+
+gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from locale import gettext as _
-gi.require_version('Vte', '2.91') # vte-0.42
+
+gi.require_version("Vte", "2.91") # vte-0.42
from gi.repository import Vte
from guake.customcommands import CustomCommands
import logging
+
log = logging.getLogger(__name__)
@@ -123,7 +126,7 @@ def mk_terminal_context_menu(terminal, window, settings, callback_object):
# implementation does not support this at the moment
if link:
if len(link) >= FILE_SELECTION_LENGTH:
- mi.set_label(_("Open Link: {!s}...").format(link[:FILE_SELECTION_LENGTH - 3]))
+ mi.set_label(_("Open Link: {!s}...").format(link[: FILE_SELECTION_LENGTH - 3]))
else:
mi.set_label(_("Open Link: {!s}").format(link))
mi.set_sensitive(True)
@@ -136,7 +139,7 @@ def mk_terminal_context_menu(terminal, window, settings, callback_object):
if selection:
search_text = selection.rstrip()
if len(search_text) > SEARCH_SELECTION_LENGTH:
- search_text = search_text[:SEARCH_SELECTION_LENGTH - 3] + "..."
+ search_text = search_text[: SEARCH_SELECTION_LENGTH - 3] + "..."
mi.set_label(_("Search on Web: '%s'") % search_text)
mi.set_sensitive(True)
else:
@@ -150,7 +153,7 @@ def mk_terminal_context_menu(terminal, window, settings, callback_object):
filename_str = str(filename)
if len(filename_str) > FILE_SELECTION_LENGTH:
mi.set_label(
- _("Quick Open: {!s}...").format(filename_str[:FILE_SELECTION_LENGTH - 3])
+ _("Quick Open: {!s}...").format(filename_str[: FILE_SELECTION_LENGTH - 3])
)
else:
mi.set_label(_("Quick Open: {!s}").format(filename_str))
diff --git a/guake/notebook.py b/guake/notebook.py
index 23a1a676..ee50929f 100644
--- a/guake/notebook.py
+++ b/guake/notebook.py
@@ -33,8 +33,9 @@ from guake.utils import save_tabs_when_changed
import gi
import os
-gi.require_version('Gtk', '3.0')
-gi.require_version('Wnck', '3.0')
+
+gi.require_version("Gtk", "3.0")
+gi.require_version("Wnck", "3.0")
from gi.repository import GObject
from gi.repository import Gdk
from gi.repository import Gtk
@@ -49,7 +50,6 @@ log = logging.getLogger(__name__)
class TerminalNotebook(Gtk.Notebook):
-
def __init__(self, *args, **kwargs):
Gtk.Notebook.__init__(self, *args, **kwargs)
self.last_terminal_focused = None
@@ -66,35 +66,38 @@ class TerminalNotebook(Gtk.Notebook):
self.set_property("is-focus", True)
self.set_property("expand", True)
- if GObject.signal_lookup('terminal-spawned', TerminalNotebook) == 0:
+ if GObject.signal_lookup("terminal-spawned", TerminalNotebook) == 0:
GObject.signal_new(
- 'terminal-spawned', TerminalNotebook, GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE,
- (GObject.TYPE_PYOBJECT, GObject.TYPE_INT)
+ "terminal-spawned",
+ TerminalNotebook,
+ GObject.SIGNAL_RUN_LAST,
+ GObject.TYPE_NONE,
+ (GObject.TYPE_PYOBJECT, GObject.TYPE_INT),
)
GObject.signal_new(
- 'page-deleted', TerminalNotebook, GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, ()
+ "page-deleted", TerminalNotebook, GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, (),
)
self.scroll_callback = NotebookScrollCallback(self)
self.add_events(Gdk.EventMask.SCROLL_MASK)
- self.connect('scroll-event', self.scroll_callback.on_scroll)
+ self.connect("scroll-event", self.scroll_callback.on_scroll)
self.notebook_on_button_press_id = self.connect(
"button-press-event", self.on_button_press, None
)
# Action box
self.new_page_button = Gtk.Button(
- image=Gtk.Image.new_from_icon_name("tab-new", Gtk.IconSize.MENU), visible=True
+ image=Gtk.Image.new_from_icon_name("tab-new", Gtk.IconSize.MENU), visible=True,
)
self.new_page_button.connect("clicked", self.on_new_tab)
self.tab_selection_button = Gtk.Button(
- image=Gtk.Image.new_from_icon_name('pan-down-symbolic', Gtk.IconSize.MENU),
- visible=True
+ image=Gtk.Image.new_from_icon_name("pan-down-symbolic", Gtk.IconSize.MENU),
+ visible=True,
)
self.popover = Gtk.Popover()
self.popover_window = None
- self.tab_selection_button.connect('clicked', self.on_tab_selection)
+ self.tab_selection_button.connect("clicked", self.on_tab_selection)
self.action_box = Gtk.Box(visible=True)
self.action_box.pack_start(self.new_page_button, 0, 0, 0)
@@ -136,22 +139,25 @@ class TerminalNotebook(Gtk.Notebook):
# ref: epiphany
css_provider = Gtk.CssProvider()
css_provider.load_from_data(
- b'#popover-window list { border-style: none; background-color: transparent; }'
+ b"#popover-window list { border-style: none; background-color: transparent; }"
)
Gtk.StyleContext.add_provider_for_screen(
- Gdk.Screen.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
+ Gdk.Screen.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION,
)
# Construct popover properties
BOX_HEIGHT = 30
LISTBOX_MARGIN = 12
- self.popover_window = Gtk.ScrolledWindow(name='popover-window')
+ self.popover_window = Gtk.ScrolledWindow(name="popover-window")
self.popover_listbox = Gtk.ListBox()
- self.popover_listbox.set_property('margin', LISTBOX_MARGIN)
+ self.popover_listbox.set_property("margin", LISTBOX_MARGIN)
self.popover_window.add_with_viewport(self.popover_listbox)
- max_height = self.guake.window.get_allocation().height - BOX_HEIGHT if \
- self.guake else BOX_HEIGHT * 10
+ max_height = (
+ self.guake.window.get_allocation().height - BOX_HEIGHT
+ if self.guake
+ else BOX_HEIGHT * 10
+ )
height = BOX_HEIGHT * self.get_n_pages() + LISTBOX_MARGIN * 4
self.popover_window.set_min_content_height(min(max_height, height))
self.popover_window.set_min_content_width(325)
@@ -168,14 +174,14 @@ class TerminalNotebook(Gtk.Notebook):
label.set_xalign(0.0)
box.pack_start(label, 0, 0, 5)
row.add(box)
- setattr(row, 'page_index', i)
+ setattr(row, "page_index", i)
self.popover_listbox.add(row)
if current_term in self.get_terminals_for_page(i):
self.popover_listbox.select_row(row)
selected_row = i
# Signal
- self.popover_listbox.connect('row-activated', self.on_popover_tab_select)
+ self.popover_listbox.connect("row-activated", self.on_popover_tab_select)
# Show popup
self.popover.set_position(Gtk.PositionType.TOP)
@@ -198,13 +204,13 @@ class TerminalNotebook(Gtk.Notebook):
adj.set_value(part * (selected_row + 1))
def on_popover_tab_select(self, list_box, row):
- page_index = getattr(row, 'page_index', -1)
+ page_index = getattr(row, "page_index", -1)
if page_index != -1:
self.set_current_page(page_index)
self.get_terminals_for_page(page_index)[0].grab_focus()
def set_tabbar_visible(self, v):
- self.set_property('show-tabs', v)
+ self.set_property("show-tabs", v)
def set_last_terminal_focused(self, terminal):
self.last_terminal_focused = terminal
@@ -250,7 +256,8 @@ class TerminalNotebook(Gtk.Notebook):
total_procs += 1
except OSError:
log.debug(
- "Cannot retrieve any pid from terminal %s, looks like it is already dead", index
+ "Cannot retrieve any pid from terminal %s, looks like it is already dead",
+ index,
)
return 0
return total_procs
@@ -311,7 +318,7 @@ class TerminalNotebook(Gtk.Notebook):
page = self.get_nth_page(self.get_current_page())
if page.get_terminals():
page.get_terminals()[0].grab_focus()
- self.emit('page-deleted')
+ self.emit("page-deleted")
def delete_page_by_label(self, label, kill=True, prompt=0):
self.delete_page(self.find_tab_index_by_label(label), kill, prompt)
@@ -344,19 +351,19 @@ class TerminalNotebook(Gtk.Notebook):
terminal = GuakeTerminal(self.guake)
terminal.grab_focus()
if not isinstance(directory, str):
- directory = os.environ['HOME']
+ directory = os.environ["HOME"]
try:
- if self.guake.settings.general.get_boolean('open-tab-cwd'):
+ if self.guake.settings.general.get_boolean("open-tab-cwd"):
# Do last focused terminal still alive?
active_terminal = self.get_current_terminal()
if not active_terminal:
# If not alive, can we get any focused terminal?
active_terminal = self.get_focused_terminal()
- directory = os.path.expanduser('~')
+ directory = os.path.expanduser("~")
if active_terminal:
# If found, we will use its directory as new terminal's directory
directory = active_terminal.get_current_directory()
- except Exception as e:
+ except BaseException:
pass
log.info("Spawning new terminal at %s", directory)
terminal.spawn_sync_pid(directory)
@@ -364,7 +371,7 @@ class TerminalNotebook(Gtk.Notebook):
def terminal_attached(self, terminal):
terminal.emit("focus", Gtk.DirectionType.TAB_FORWARD)
- self.emit('terminal-spawned', terminal, terminal.pid)
+ self.emit("terminal-spawned", terminal, terminal.pid)
def new_page_with_focus(self, directory=None, label=None, user_set=False, position=None):
box, page_num, terminal = self.new_page(directory, position=position)
@@ -389,7 +396,7 @@ class TerminalNotebook(Gtk.Notebook):
else:
label = TabLabelEventBox(self, new_text, self.guake.settings)
label.add_events(Gdk.EventMask.SCROLL_MASK)
- label.connect('scroll-event', self.scroll_callback.on_scroll)
+ label.connect("scroll-event", self.scroll_callback.on_scroll)
self.set_tab_label(page, label)
if user_set:
@@ -437,12 +444,12 @@ class TerminalNotebook(Gtk.Notebook):
flags=Gtk.DialogFlags.MODAL,
buttons=Gtk.ButtonsType.OK_CANCEL,
message_format=_(
- 'You are going to restore *all* the tabs!\n'
- 'which means all your terminals & pages '
- 'will be replaced.\n\nDo you want to continue?'
- )
+ "You are going to restore *all* the tabs!\n"
+ "which means all your terminals & pages "
+ "will be replaced.\n\nDo you want to continue?"
+ ),
)
- dialog.connect('response', self.restore_tabs_dialog_response)
+ dialog.connect("response", self.restore_tabs_dialog_response)
dialog.show()
def restore_tabs_dialog_response(self, widget, response_id):
@@ -452,15 +459,17 @@ class TerminalNotebook(Gtk.Notebook):
class NotebookManager(GObject.Object):
-
def __init__(
- self, window, notebook_parent, workspaces_enabled, terminal_spawned_cb, page_deleted_cb
+ self, window, notebook_parent, workspaces_enabled, terminal_spawned_cb, page_deleted_cb,
):
GObject.Object.__init__(self)
- if not GObject.signal_lookup('notebook-created', self):
+ if not GObject.signal_lookup("notebook-created", self):
GObject.signal_new(
- 'notebook-created', self, GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE,
- (GObject.TYPE_PYOBJECT, GObject.TYPE_INT)
+ "notebook-created",
+ self,
+ GObject.SIGNAL_RUN_LAST,
+ GObject.TYPE_NONE,
+ (GObject.TYPE_PYOBJECT, GObject.TYPE_INT),
)
self.current_notebook = 0
self.notebooks = {}
@@ -482,9 +491,9 @@ class NotebookManager(GObject.Object):
def get_notebook(self, workspace_index: int):
if not self.has_notebook_for_workspace(workspace_index):
self.notebooks[workspace_index] = TerminalNotebook()
- self.emit('notebook-created', self.notebooks[workspace_index], workspace_index)
- self.notebooks[workspace_index].connect('terminal-spawned', self.terminal_spawned_cb)
- self.notebooks[workspace_index].connect('page-deleted', self.page_deleted_cb)
+ self.emit("notebook-created", self.notebooks[workspace_index], workspace_index)
+ self.notebooks[workspace_index].connect("terminal-spawned", self.terminal_spawned_cb)
+ self.notebooks[workspace_index].connect("page-deleted", self.page_deleted_cb)
log.info("created fresh notebook for workspace %d", self.current_notebook)
# add a tab if there is none
@@ -505,8 +514,7 @@ class NotebookManager(GObject.Object):
log.info("current workspace is %d", self.current_notebook)
notebook = self.get_current_notebook()
self.notebook_parent.add(notebook)
- if self.window.get_property('visible') and \
- notebook.last_terminal_focused is not None:
+ if self.window.get_property("visible") and notebook.last_terminal_focused is not None:
notebook.last_terminal_focused.grab_focus()
# Restore pending page terminal split
diff --git a/guake/notifier.py b/guake/notifier.py
index 59beac2d..0a817f80 100644
--- a/guake/notifier.py
+++ b/guake/notifier.py
@@ -19,13 +19,14 @@ Boston, MA 02110-1301 USA
"""
import gi
-gi.require_version('Notify', '0.7')
+
+gi.require_version("Notify", "0.7")
from gi.repository import GLib
from gi.repository import Notify
Notify.init("Guake")
-__all__ = ['showMessage']
+__all__ = ["showMessage"]
def showMessage(brief, body=None, icon=None):
diff --git a/guake/palettes.py b/guake/palettes.py
index 2ed4c7b5..fd4c063f 100644
--- a/guake/palettes.py
+++ b/guake/palettes.py
@@ -38,1000 +38,1000 @@ Boston, MA 02110-1301 USA
# index 17: Foreground Color
PALETTES = {
- '3024 Day': (
- '#090903030000:#DBDB2D2D2020:#0101A2A25252:#FDFDEDED0202:#0101A0A0E4E4:'
- '#A1A16A6A9494:#B5B5E4E4F4F4:#A5A5A2A2A2A2:#5C5C58585555:#E8E8BBBBD0D0:'
- '#3A3A34343232:#4A4A45454343:#80807D7D7C7C:#D6D6D5D5D4D4:#CDCDABAB5353:'
- '#F7F7F7F7F7F7:#4A4A45454343:#F7F7F7F7F7F7'
- ),
- '3024 Night': (
- '#090903030000:#DBDB2D2D2020:#0101A2A25252:#FDFDEDED0202:#0101A0A0E4E4:'
- '#A1A16A6A9494:#B5B5E4E4F4F4:#A5A5A2A2A2A2:#5C5C58585555:#E8E8BBBBD0D0:'
- '#3A3A34343232:#4A4A45454343:#80807D7D7C7C:#D6D6D5D5D4D4:#CDCDABAB5353:'
- '#F7F7F7F7F7F7:#A5A5A2A2A2A2:#090903030000'
- ),
- 'Adventure Time': (
- '#050504040404:#BCBC00001313:#4949B1B11717:#E6E674741D1D:#0F0F4949C6C6:'
- '#666659599292:#6F6FA4A49797:#F8F8DBDBC0C0:#4E4E7B7BBFBF:#FCFC5E5E5959:'
- '#9D9DFFFF6E6E:#EFEFC1C11A1A:#18189696C6C6:#9A9A59595252:#C8C8F9F9F3F3:'
- '#F5F5F4F4FBFB:#F8F8DBDBC0C0:#1E1E1C1C4444'
- ),
- 'Afterglow': (
- '#151515151515:#ACAC41414242:#7E7E8D8D5050:#E5E5B5B56767:#6C6C9999BABA:'
- '#9E9E4E4E8585:#7D7DD5D5CFCF:#D0D0D0D0D0D0:#505050505050:#ACAC41414242:'
- '#7E7E8D8D5050:#E5E5B5B56666:#6C6C9999BBBB:#9E9E4E4E8585:#7D7DD5D5CFCF:'
- '#F5F5F5F5F5F5:#D0D0D0D0D0D0:#202020202020'
- ),
- 'Alien Blood': (
- '#111126261515:#7F7F2B2B2626:#2F2F7E7E2525:#70707F7F2323:#2F2F69697F7F:'
- '#474757577E7E:#31317F7F7676:#64647D7D7575:#3C3C47471111:#DFDF80800808:'
- '#1818E0E00000:#BDBDE0E00000:#0000A9A9DFDF:#00005858DFDF:#0000DFDFC3C3:'
- '#7373F9F99090:#63637D7D7575:#0F0F16160F0F'
- ),
- 'Argonaut': (
- '#222222222222:#FFFF00000F0F:#8C8CE0E00A0A:#FFFFB9B90000:#00008D8DF8F8:'
- '#6C6C4343A5A5:#0000D7D7EBEB:#FFFFFFFFFFFF:#444444444444:#FFFF27273F3F:'
- '#ABABE0E05A5A:#FFFFD1D14141:#00009292FFFF:#9A9A5F5FEBEB:#6767FFFFEFEF:'
- '#FFFFFFFFFFFF:#FFFFFAFAF3F3:#0D0D0F0F1818'
- ),
- 'Arthur': (
- '#3D3D35352A2A:#CDCD5C5C5C5C:#8686AFAF8080:#E8E8AEAE5B5B:#64649595EDED:'
- '#DEDEB8B88787:#B0B0C4C4DEDE:#BBBBAAAA9999:#555544444444:#CCCC55553333:'
- '#8888AAAA2222:#FFFFA7A75D5D:#8787CECEEBEB:#999966660000:#B0B0C4C4DEDE:'
- '#DDDDCCCCBBBB:#DDDDEEEEDDDD:#1C1C1C1C1C1C'
- ),
- 'Atom': (
- '#000000000000:#FCFC5E5EF0F0:#8787C3C38A8A:#FFFFD7D7B1B1:#8585BEBEFDFD:'
- '#B9B9B5B5FCFC:#8585BEBEFDFD:#DFDFDFDFDFDF:#000000000000:#FCFC5E5EF0F0:'
- '#9494F9F93636:#F5F5FFFFA7A7:#9696CBCBFEFE:#B9B9B5B5FCFC:#8585BEBEFDFD:'
- '#DFDFDFDFDFDF:#C5C5C8C8C6C6:#161617171818'
- ),
- 'Belafonte Day': (
- '#202011111B1B:#BEBE10100E0E:#858581816262:#EAEAA5A54949:#42426A6A7979:'
- '#979752522C2C:#98989A9A9C9C:#96968C8C8383:#5E5E52525252:#BEBE10100E0E:'
- '#858581816262:#EAEAA5A54949:#42426A6A7979:#979752522C2C:#98989A9A9C9C:'
- '#D5D5CCCCBABA:#454537373C3C:#D5D5CCCCBABA'
- ),
- 'Belafonte Night': (
- '#202011111B1B:#BEBE10100E0E:#858581816262:#EAEAA5A54949:#42426A6A7979:'
- '#979752522C2C:#98989A9A9C9C:#96968C8C8383:#5E5E52525252:#BEBE10100E0E:'
- '#858581816262:#EAEAA5A54949:#42426A6A7979:#979752522C2C:#98989A9A9C9C:'
- '#D5D5CCCCBABA:#96968C8C8383:#202011111B1B'
- ),
- 'Birdsofparadise': (
- '#57573D3D2525:#BEBE2D2D2626:#6B6BA0A08A8A:#E9E99C9C2929:#5A5A8686ACAC:'
- '#ABAB8080A6A6:#7474A5A5ACAC:#DFDFDADAB7B7:#9A9A6B6B4949:#E8E845452626:'
- '#9494D7D7BABA:#D0D0D0D04F4F:#B8B8D3D3EDED:#D0D09D9DCACA:#9292CECED6D6:'
- '#FFFFF9F9D4D4:#DFDFDADAB7B7:#2A2A1E1E1D1D'
- ),
- 'Blazer': (
- '#000000000000:#B8B87A7A7A7A:#7A7AB8B87A7A:#B8B8B8B87A7A:#7A7A7A7AB8B8:'
- '#B8B87A7AB8B8:#7A7AB8B8B8B8:#D9D9D9D9D9D9:#262626262626:#DBDBBDBDBDBD:'
- '#BDBDDBDBBDBD:#DBDBDBDBBDBD:#BDBDBDBDDBDB:#DBDBBDBDDBDB:#BDBDDBDBDBDB:'
- '#FFFFFFFFFFFF:#D9D9E6E6F2F2:#0D0D19192626'
- ),
- 'Bluloco': (
- '#505050505050:#FFFF2E2E3F3F:#6F6FD6D65D5D:#FFFF6F6F2323:#34347676FFFF:'
- '#98986161F8F8:#0000CDCDB3B3:#FFFFFCFCC2C2:#7C7C7C7C7C7C:#FFFF64648080:'
- '#3F3FC5C56B6B:#F9F9C8C85959:#0000B1B1FEFE:#B6B68D8DFFFF:#B3B38B8B7D7D:'
- '#FFFFFEFEE3E3:#DEDEE0E0DFDF:#262626262626'
- ),
- 'Borland': (
- '#4E4E4E4E4E4E:#FFFF6B6B6060:#A7A7FFFF6060:#FFFFFFFFB6B6:#9696CACAFDFD:'
- '#FFFF7373FDFD:#C6C6C4C4FDFD:#EEEEEEEEEEEE:#7C7C7C7C7C7C:#FFFFB6B6B0B0:'
- '#CECEFFFFABAB:#FFFFFFFFCBCB:#B5B5DCDCFEFE:#FFFF9C9CFEFE:#DFDFDFDFFEFE:'
- '#FFFFFFFFFFFF:#FFFFFFFF4E4E:#00000000A4A4'
- ),
- 'Broadcast': (
- '#000000000000:#DADA49493939:#51519F9F5050:#FFFFD2D24A4A:#6D6D9C9CBEBE:'
- '#D0D0D0D0FFFF:#6E6E9C9CBEBE:#FFFFFFFFFFFF:#323232323232:#FFFF7B7B6B6B:'
- '#8383D1D18282:#FFFFFFFF7C7C:#9F9FCECEF0F0:#FFFFFFFFFFFF:#A0A0CECEF0F0:'
- '#FFFFFFFFFFFF:#E6E6E1E1DCDC:#2B2B2B2B2B2B'
- ),
- 'Brogrammer': (
- '#1F1F1F1F1F1F:#F7F711111818:#2C2CC5C55D5D:#ECECB9B90F0F:#2A2A8484D2D2:'
- '#4E4E5959B7B7:#0F0F8080D5D5:#D6D6DADAE4E4:#D6D6DADAE4E4:#DEDE34342E2E:'
- '#1D1DD2D26060:#F2F2BDBD0909:#0F0F8080D5D5:#52524F4FB9B9:#0F0F7C7CDADA:'
- '#FFFFFFFFFFFF:#D6D6DADAE4E4:#131313131313'
- ),
- 'C64': (
- '#090903030000:#888839393232:#5555A0A04949:#BFBFCECE7272:#404031318D8D:'
- '#8B8B3F3F9696:#6767B6B6BDBD:#FFFFFFFFFFFF:#000000000000:#888839393232:'
- '#5555A0A04949:#BFBFCECE7272:#404031318D8D:#8B8B3F3F9696:#6767B6B6BDBD:'
- '#F7F7F7F7F7F7:#78786969C4C4:#404031318D8D'
- ),
- 'Chalk': (
- '#7C7C8A8A8F8F:#B2B23A3A5151:#78789A9A6969:#B9B9ABAB4A4A:#2A2A7F7FACAC:'
- '#BCBC4F4F5A5A:#4444A7A79999:#D2D2D8D8D9D9:#888888888888:#F2F248484040:'
- '#8080C4C46F6F:#FFFFEBEB6262:#40409595FFFF:#FBFB51517575:#5252CCCCBDBD:'
- '#D2D2D8D8D9D9:#D2D2D8D8D9D9:#2B2B2C2C2E2E'
- ),
- 'Chalkboard': (
- '#000000000000:#C3C373737272:#7272C3C37373:#C2C2C3C37272:#73737272C3C3:'
- '#C3C37272C2C2:#7272C2C2C3C3:#D9D9D9D9D9D9:#323232323232:#DBDBAAAAAAAA:'
- '#AAAADBDBAAAA:#DADADBDBAAAA:#AAAAAAAADBDB:#DBDBAAAADADA:#AAAADADADBDB:'
- '#FFFFFFFFFFFF:#D9D9E6E6F2F2:#292926262F2F'
- ),
- 'Ciapre': (
- '#181818181818:#808000000909:#484851513B3B:#CCCC8A8A3E3E:#56566D6D8C8C:'
- '#72724C4C7C7C:#5B5B4F4F4A4A:#ADADA3A37E7E:#555555555555:#ABAB38383434:'
- '#A6A6A6A65D5D:#DCDCDEDE7B7B:#2F2F9797C6C6:#D3D330306060:#F3F3DADAB1B1:'
- '#F3F3F3F3F3F3:#ADADA3A37A7A:#18181C1C2727'
- ),
- 'Clrs': (
- '#000000000000:#F7F727272929:#323289895C5C:#F9F96F6F1C1C:#12125C5CCFCF:'
- '#9F9F0000BCBC:#3232C2C2C0C0:#B2B2B2B2B2B2:#545457575353:#FBFB04041616:'
- '#2C2CC6C63131:#FCFCD6D62727:#15156F6FFEFE:#E8E80000B0B0:#3939D5D5CECE:'
- '#EDEDEDEDECEC:#262626262626:#FFFFFFFFFFFF'
- ),
- 'Cobalt Neon': (
- '#141426263030:#FFFF23232020:#3A3AA5A5FFFF:#E9E9E7E75C5C:#8F8FF5F58686:'
- '#78781A1AA0A0:#8F8FF5F58686:#BABA4545B1B1:#FFFFF6F68888:#D4D431312E2E:'
- '#8F8FF5F58686:#E9E9F0F06D6D:#3C3C7D7DD2D2:#82823030A7A7:#6C6CBCBC6767:'
- '#8F8FF5F58686:#8F8FF5F58686:#141428283838'
- ),
- 'Cobalt2': (
- '#000000000000:#FFFF00000000:#3737DDDD2121:#FEFEE4E40909:#14146060D2D2:'
- '#FFFF00005D5D:#0000BBBBBBBB:#BBBBBBBBBBBB:#555555555555:#F4F40D0D1717:'
- '#3B3BCFCF1D1D:#ECECC8C80909:#55555555FFFF:#FFFF5555FFFF:#6A6AE3E3F9F9:'
- '#FFFFFFFFFFFF:#FFFFFFFFFFFF:#121226263737'
- ),
- 'Crayon Pony Fish': (
- '#2A2A1A1A1C1C:#909000002A2A:#575795952323:#AAAA30301B1B:#8B8B8787AFAF:'
- '#68682E2E5050:#E8E8A7A76666:#686852525959:#3C3C2A2A2E2E:#C5C524245C5C:'
- '#8D8DFFFF5656:#C7C737371D1D:#CFCFC9C9FFFF:#FBFB6C6CB9B9:#FFFFCECEAEAE:'
- '#AFAF94949D9D:#686852525959:#141406060707'
- ),
- 'Dark Pastel': (
- '#000000000000:#FFFF55555555:#5555FFFF5555:#FFFFFFFF5555:#55555555FFFF:'
- '#FFFF5555FFFF:#5555FFFFFFFF:#BBBBBBBBBBBB:#555555555555:#FFFF55555555:'
- '#5555FFFF5555:#FFFFFFFF5555:#55555555FFFF:#FFFF5555FFFF:#5555FFFFFFFF:'
- '#FFFFFFFFFFFF:#FFFFFFFFFFFF:#000000000000'
- ),
- 'Darkside': (
- '#000000000000:#E8E834341C1C:#6868C2C25656:#F2F2D3D32C2C:#1C1C9898E8E8:'
- '#8E8E6969C9C9:#1C1C9898E8E8:#BABABABABABA:#000000000000:#DFDF5A5A4F4F:'
- '#7676B7B76868:#EEEED6D64A4A:#38387B7BD2D2:#95957B7BBDBD:#3D3D9696E2E2:'
- '#BABABABABABA:#BABABABABABA:#222223232424'
- ),
- 'Desert': (
- '#4D4D4D4D4D4D:#FFFF2B2B2B2B:#9898FBFB9898:#F0F0E6E68C8C:#CDCD85853F3F:'
- '#FFFFDEDEADAD:#FFFFA0A0A0A0:#F5F5DEDEB3B3:#555555555555:#FFFF55555555:'
- '#5555FFFF5555:#FFFFFFFF5555:#8787CECEFFFF:#FFFF5555FFFF:#FFFFD7D70000:'
- '#FFFFFFFFFFFF:#FFFFFFFFFFFF:#333333333333'
- ),
- 'Dimmed Monokai': (
- '#3A3A3C3C4343:#BEBE3E3E4848:#86869A9A3A3A:#C4C4A5A53535:#4E4E7676A1A1:'
- '#85855B5B8D8D:#56568E8EA3A3:#B8B8BCBCB9B9:#888889898787:#FBFB00001E1E:'
- '#0E0E71712E2E:#C3C370703333:#17176C6CE3E3:#FBFB00006767:#2D2D6F6F6C6C:'
- '#FCFCFFFFB8B8:#B8B8BCBCB9B9:#1E1E1E1E1E1E'
- ),
- 'Dracula': (
- '#000000000000:#FFFF55555555:#5050FAFA7B7B:#F1F1FAFA8C8C:#BDBD9393F9F9:'
- '#FFFF7979C6C6:#8B8BE9E9FDFD:#BBBBBBBBBBBB:#555555555555:#FFFF55555555:'
- '#5050FAFA7B7B:#F1F1FAFA8C8C:#BDBD9393F9F9:#FFFF7979C6C6:#8B8BE9E9FDFD:'
- '#FFFFFFFFFFFF:#F8F8F8F8F2F2:#1E1E1F1F2828'
- ),
- 'Earthsong': (
- '#111114141717:#C8C841413434:#8484C4C44B4B:#F4F4AEAE2E2E:#13139797B9B9:'
- '#D0D062623C3C:#4F4F94945252:#E5E5C5C5A9A9:#66665E5E5454:#FFFF64645959:'
- '#9797E0E03535:#DFDFD5D56161:#5E5ED9D9FFFF:#FFFF91916868:#8383EFEF8888:'
- '#F6F6F6F6ECEC:#E5E5C6C6A8A8:#282824242020'
- ),
- 'Elemental': (
- '#3C3C3B3B3030:#979728280F0F:#474799994242:#7F7F71711010:#49497F7F7D7D:'
- '#7E7E4E4E2E2E:#38387F7F5858:#808079797474:#545454544444:#DFDF50502A2A:'
- '#6060E0E06F6F:#D6D698982727:#7878D8D8D8D8:#CDCD7C7C5353:#5858D5D59898:'
- '#FFFFF1F1E8E8:#808079797373:#212121211C1C'
- ),
- 'Elementary Loki': (
- '#070736364242:#DCDC32322F2F:#858599990000:#B5B589890000:#26268B8BD2D2:'
- '#ECEC00004848:#2A2AA1A19898:#9494A3A3A5A5:#58586E6E7575:#CBCB4B4B1616:'
- '#858599990000:#B5B589890000:#26268B8BD2D2:#D3D336368282:#2A2AA1A19898:'
- '#EEEEEEEEEEEE:#9494A3A3A5A5:#25252E2E3232'
- ),
- 'Espresso Libre': (
- '#000000000000:#CCCC00000000:#1A1A92921C1C:#EFEFE4E43A3A:#00006666FFFF:'
- '#C5C565656B6B:#050598989A9A:#D3D3D7D7CFCF:#545457575353:#EFEF28282828:'
- '#9A9AFFFF8787:#FFFFFAFA5C5C:#4343A8A8EDED:#FFFF80808989:#3434E2E2E2E2:'
- '#EDEDEDEDECEC:#B8B8A8A89898:#2A2A21211C1C'
- ),
- 'Espresso': (
- '#343434343434:#D2D251515151:#A5A5C2C26161:#FFFFC6C66D6D:#6C6C9999BBBB:'
- '#D1D19797D9D9:#BEBED6D6FFFF:#EEEEEEEEECEC:#535353535353:#F0F00C0C0C0C:'
- '#C2C2E0E07575:#E1E1E3E38B8B:#8A8AB7B7D9D9:#EFEFB5B5F7F7:#DCDCF3F3FFFF:'
- '#FFFFFFFFFFFF:#FFFFFFFFFFFF:#323232323232'
- ),
- 'Fideloper': (
- '#28282F2F3232:#CACA1D1D2C2C:#EDEDB7B7ABAB:#B7B7AAAA9A9A:#2E2E7878C1C1:'
- '#C0C022226E6E:#303091918585:#E9E9E2E2CDCD:#090920202727:#D3D35F5F5A5A:'
- '#D3D35F5F5A5A:#A8A865657171:#7C7C8484C4C4:#5B5B5D5DB2B2:#818190908F8F:'
- '#FCFCF4F4DEDE:#DADAD9D9DFDF:#28282F2F3232'
- ),
- 'Fishtank': (
- '#030306063C3C:#C6C600004949:#ABABF1F15757:#FDFDCDCD5E5E:#52525F5FB8B8:'
- '#97976F6F8181:#969686866262:#ECECEFEFFCFC:#6C6C5A5A3030:#D9D94A4A8A8A:'
- '#DADAFFFFA8A8:#FEFEE6E6A8A8:#B1B1BDBDF9F9:#FDFDA4A4CCCC:#A4A4BCBC8686:'
- '#F6F6FFFFECEC:#ECECEFEFFDFD:#222224243636'
- ),
- 'Flat': (
- '#22222D2D3F3F:#A8A823232020:#3232A5A54848:#E5E58D8D1111:#31316767ACAC:'
- '#78781A1AA0A0:#2C2C93937070:#B0B0B6B6BABA:#21212C2C3C3C:#D4D431312E2E:'
- '#2D2D94944040:#E5E5BEBE0C0C:#3C3C7D7DD2D2:#82823030A7A7:#3535B3B38787:'
- '#E7E7ECECEDED:#2C2CC5C55D5D:#000022224040'
- ),
- 'Flatland': (
- '#1C1C1D1D1919:#F1F182823838:#9E9ED2D26464:#F3F3EFEF6D6D:#4F4F9696BEBE:'
- '#69695A5ABBBB:#D5D538386464:#FEFEFFFFFEFE:#1C1C1D1D1919:#D1D12A2A2424:'
- '#A7A7D3D32C2C:#FFFF89894848:#6161B8B8D0D0:#69695A5ABBBB:#D5D538386464:'
- '#FEFEFFFFFEFE:#B8B8DADAEEEE:#1C1C1E1E2020'
- ),
- 'Frontend Delight': (
- '#242424242626:#F8F850501A1A:#565657574646:#F9F976761D1D:#2C2C7070B7B7:'
- '#F0F02D2D4E4E:#3B3BA0A0A5A5:#ACACACACACAC:#5E5EACAC6C6C:#F6F643431919:'
- '#7474EBEB4C4C:#FCFCC2C22424:#33339393C9C9:#E7E75E5E4E4E:#4E4EBCBCE5E5:'
- '#8B8B73735A5A:#ACACACACACAC:#1B1B1B1B1D1D'
- ),
- 'Frontend Fun Forrest': (
- '#000000000000:#D5D525252B2B:#90909B9B0000:#BDBD8A8A1313:#46469898A2A2:'
- '#8C8C42423131:#D9D981811212:#DDDDC1C16565:#7E7E69695454:#E4E459591B1B:'
- '#BFBFC6C65959:#FFFFCACA1B1B:#7C7CC9C9CECE:#D1D163634949:#E6E6A9A96B6B:'
- '#FFFFE9E9A3A3:#DDDDC1C16565:#242412120000'
- ),
- 'Frontend Galaxy': (
- '#000000000000:#F9F955555F5F:#2020AFAF8989:#FDFDF0F02929:#58589C9CF5F5:'
- '#93934D4D9595:#1E1E9E9EE6E6:#BBBBBBBBBBBB:#555555555555:#FAFA8B8B8E8E:'
- '#3434BBBB9999:#FFFFFFFF5555:#58589C9CF5F5:#E7E755559898:#39397878BBBB:'
- '#FFFFFFFFFFFF:#FFFFFFFFFFFF:#1C1C28283636'
- ),
- 'Github': (
- '#3E3E3E3E3E3E:#97970B0B1616:#070796962A2A:#F8F8EEEEC7C7:#00003E3E8A8A:'
- '#E9E946469191:#8989D1D1ECEC:#FFFFFFFFFFFF:#666666666666:#DEDE00000000:'
- '#8787D5D5A2A2:#F1F1D0D00707:#2E2E6C6CBABA:#FFFFA2A29F9F:#1C1CFAFAFEFE:'
- '#FFFFFFFFFFFF:#3E3E3E3E3E3E:#F4F4F4F4F4F4'
- ),
- 'Grape': (
- '#2D2D28283E3E:#ECEC21216060:#1F1FA9A91B1B:#8D8DDCDC1F1F:#48487C7CF4F4:'
- '#8C8C3535C8C8:#3A3ADDDDEDED:#9E9E9E9EA0A0:#585850506A6A:#F0F071719A9A:'
- '#5252A9A95D5D:#B2B2DCDC8787:#A9A9BBBBEBEB:#ACAC8181C1C1:#9C9CE3E3EAEA:'
- '#A1A18888F7F7:#9E9E9E9EA0A0:#161614142323'
- ),
- 'Grass': (
- '#000000000000:#BBBB00000000:#0000BBBB0000:#E7E7B0B00000:#00000000A3A3:'
- '#959500006161:#0000BBBBBBBB:#BBBBBBBBBBBB:#555555555555:#BBBB00000000:'
- '#0000BBBB0000:#E7E7B0B00000:#00000000BBBB:#FFFF5555FFFF:#5555FFFFFFFF:'
- '#FFFFFFFFFFFF:#FFFFF0F0A5A5:#131377773C3C'
- ),
- 'Hardcore': (
- '#1B1B1D1D1E1E:#F9F926267272:#A6A6E2E22E2E:#FDFD97971F1F:#6666D9D9EFEF:'
- '#9E9E6F6FFEFE:#5E5E71717575:#CCCCCCCCC6C6:#505053535454:#FFFF66669D9D:'
- '#BEBEEDED5F5F:#E6E6DBDB7474:#6666D9D9EFEF:#9E9E6F6FFEFE:#A3A3BABABFBF:'
- '#F8F8F8F8F2F2:#A0A0A0A0A0A0:#121212121212'
- ),
- 'Harper': (
- '#010101010101:#F8F8B6B63F3F:#7F7FB5B5E1E1:#D6D6DADA2525:#48489E9E4848:'
- '#B2B29696C6C6:#F5F5BFBFD7D7:#A8A8A4A49D9D:#72726E6E6A6A:#F8F8B6B63F3F:'
- '#7F7FB5B5E1E1:#D6D6DADA2525:#48489E9E4848:#B2B29696C6C6:#F5F5BFBFD7D7:'
- '#FEFEFBFBEAEA:#A8A8A4A49D9D:#010101010101'
- ),
- 'Highway': (
- '#000000000000:#CFCF0D0D1717:#121280803333:#FFFFCACA3D3D:#00006A6AB3B3:'
- '#6A6A26267474:#383845456363:#EDEDEDEDEDED:#5C5C4F4F4949:#EFEF7D7D1717:'
- '#B1B1D1D13030:#FFFFF1F11F1F:#4F4FC2C2FDFD:#DEDE00007070:#5C5C4F4F4949:'
- '#FEFEFFFFFEFE:#EDEDEDEDEDED:#212122222424'
- ),
- 'Hipster Green': (
- '#000000000000:#B6B620204A4A:#0000A6A60000:#BEBEBEBE0000:#24246D6DB2B2:'
- '#B2B20000B2B2:#0000A6A6B2B2:#BFBFBFBFBFBF:#666666666666:#E5E500000000:'
- '#8686A8A83E3E:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:'
- '#E5E5E5E5E5E5:#8484C1C13737:#0F0F0A0A0505'
- ),
- 'Homebrew': (
- '#000000000000:#999900000000:#0000A6A60000:#999999990000:#00000000B2B2:'
- '#B2B20000B2B2:#0000A6A6B2B2:#BFBFBFBFBFBF:#666666666666:#E5E500000000:'
- '#0000D9D90000:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:'
- '#E5E5E5E5E5E5:#0000FFFF0000:#000000000000'
- ),
- 'Hurtado': (
- '#575757575757:#FFFF1B1B0000:#A5A5DFDF5555:#FBFBE7E74A4A:#484863638787:'
- '#FCFC5E5EF0F0:#8585E9E9FEFE:#CBCBCBCBCBCB:#252525252525:#D4D41C1C0000:'
- '#A5A5DFDF5555:#FBFBE7E74949:#8989BDBDFFFF:#BFBF0000C0C0:#8585E9E9FEFE:'
- '#DBDBDBDBDBDB:#DADADBDBDADA:#000000000000'
- ),
- 'Hybrid': (
- '#2A2A2E2E3333:#B7B74D4D5050:#B3B3BEBE5A5A:#E3E3B5B55E5E:#6D6D9090B0B0:'
- '#A0A07E7EABAB:#7F7FBEBEB3B3:#B5B5B8B8B6B6:#1D1D1E1E2121:#8C8C2D2D3232:'
- '#787883833131:#E5E589894F4F:#4B4B6B6B8888:#6E6E4F4F7979:#4D4D7B7B7373:'
- '#5A5A61616969:#B7B7BCBCB9B9:#161617171818'
- ),
- 'Ic Green Ppl': (
- '#1E1E1E1E1E1E:#FBFB00002929:#32329B9B2424:#64649A9A2525:#14149B9B4545:'
- '#5353B8B82B2B:#2B2BB7B76767:#DFDFFEFEEEEE:#030326260F0F:#A6A6FFFF3E3E:'
- '#9F9FFFFF6D6D:#D1D1FFFF6D6D:#7272FFFFB5B5:#5050FFFF3D3D:#2222FFFF7171:'
- '#DADAEEEED0D0:#D9D9EEEED2D2:#3A3A3C3C3E3E'
- ),
- 'Ic Orange Ppl': (
- '#000000000000:#C0C039390000:#A3A3A9A90000:#CACAAEAE0000:#BDBD6C6C0000:'
- '#FBFB5D5D0000:#F7F794940000:#FFFFC8C88A8A:#6A6A4E4E2929:#FFFF8B8B6767:'
- '#F6F6FFFF3F3F:#FFFFE3E36E6E:#FFFFBDBD5454:#FCFC87874F4F:#C5C597975252:'
- '#F9F9F9F9FEFE:#FFFFCBCB8383:#262626262626'
- ),
- 'Idle Toes': (
- '#323232323232:#D2D252525252:#7F7FE1E17373:#FFFFC6C66D6D:#40409898FFFF:'
- '#F5F57F7FFFFF:#BEBED6D6FFFF:#EEEEEEEEECEC:#535353535353:#F0F070707070:'
- '#9D9DFFFF9090:#FFFFE4E48B8B:#5E5EB7B7F7F7:#FFFF9D9DFFFF:#DCDCF4F4FFFF:'
- '#FFFFFFFFFFFF:#FFFFFFFFFFFF:#323232323232'
- ),
- 'Ir Black': (
- '#4F4F4F4F4F4F:#FAFA6C6C5F5F:#A8A8FEFE6060:#FFFFFEFEB6B6:#9696CACAFDFD:'
- '#FAFA7272FCFC:#C6C6C4C4FDFD:#EEEEEDEDEEEE:#7B7B7B7B7B7B:#FCFCB6B6AFAF:'
- '#CECEFFFFABAB:#FFFFFEFECCCC:#B5B5DCDCFEFE:#FBFB9B9BFEFE:#DFDFDFDFFDFD:'
- '#FEFEFFFFFEFE:#F1F1F1F1F1F1:#000000000000'
- ),
- 'Jackie Brown': (
- '#2C2C1D1D1616:#EFEF57573434:#2B2BAFAF2B2B:#BDBDBEBE0000:#24246D6DB2B2:'
- '#CFCF5E5EC0C0:#0000ACACEEEE:#BFBFBFBFBFBF:#666666666666:#E5E500000000:'
- '#8686A8A83E3E:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:'
- '#E5E5E5E5E5E5:#FFFFCCCC2F2F:#2C2C1C1C1515'
- ),
- 'Japanesque': (
- '#343438383535:#CECE3E3E6060:#7B7BB7B75B5B:#E8E8B3B32A2A:#4C4C9999D3D3:'
- '#A5A57F7FC4C4:#38389A9AACAC:#F9F9FAFAF6F6:#58585A5A5858:#D1D18E8EA6A6:'
- '#76767E7E2B2B:#777759592E2E:#131358587979:#5F5F41419090:#7676BBBBCACA:'
- '#B1B1B5B5AEAE:#F7F7F6F6ECEC:#1D1D1D1D1D1D'
- ),
- 'Jellybeans': (
- '#929292929292:#E2E273737373:#9393B9B97979:#FFFFBABA7B7B:#9797BEBEDCDC:'
- '#E1E1C0C0FAFA:#000098988E8E:#DEDEDEDEDEDE:#BDBDBDBDBDBD:#FFFFA1A1A1A1:'
- '#BDBDDEDEABAB:#FFFFDCDCA0A0:#B1B1D8D8F6F6:#FBFBDADAFFFF:#1A1AB2B2A8A8:'
- '#FFFFFFFFFFFF:#DEDEDEDEDEDE:#121212121212'
- ),
- 'Kibble': (
- '#4D4D4D4D4D4D:#C7C700003131:#2929CFCF1313:#D8D8E3E30E0E:#34344949D1D1:'
- '#84840000FFFF:#07079898ABAB:#E2E2D1D1E3E3:#5A5A5A5A5A5A:#F0F015157878:'
- '#6C6CE0E05C5C:#F3F3F7F79E9E:#9797A4A4F7F7:#C4C49595F0F0:#6868F2F2E0E0:'
- '#FFFFFFFFFFFF:#F7F7F7F7F7F7:#0E0E10100A0A'
- ),
- 'Later This Evening': (
- '#2B2B2B2B2B2B:#D3D35A5A5F5F:#AFAFBABA6666:#E5E5D2D28989:#A0A0B9B9D5D5:'
- '#BFBF9292D5D5:#9191BEBEB6B6:#3B3B3C3C3C3C:#444447474747:#D3D322222E2E:'
- '#AAAABBBB3939:#E4E4BDBD3939:#65659999D5D5:#AAAA5252D5D5:#5F5FBFBFADAD:'
- '#C0C0C2C2C2C2:#949494949494:#212121212121'
- ),
- 'Lavandula': (
- '#232300004545:#7C7C15152525:#33337E7E6F6F:#7F7F6F6F4949:#4F4F4A4A7F7F:'
- '#59593F3F7E7E:#575776767F7F:#73736E6E7D7D:#37372C2C4646:#DFDF50506666:'
- '#5252E0E0C4C4:#E0E0C2C28686:#8E8E8686DFDF:#A6A67575DFDF:#9A9AD3D3DFDF:'
- '#8C8C9191FAFA:#73736E6E7D7D:#050500001414'
- ),
- 'Linux Console': (
- '#000000000000:#aaaa00000000:#0000aaaa0000:#aaaa55550000:#00000000aaaa:'
- '#aaaa0000aaaa:#0000aaaaaaaa:#aaaaaaaaaaaa:#555555555556:#ffff55555555:'
- '#5555ffff5555:#ffffffff5555:#55555555ffff:#ffff5555ffff:#5555ffffffff:'
- '#ffffffffffff:#ffffffffffff:#000000000000'
- ),
- 'Liquid Carbon Transparent': (
- '#000000000000:#FFFF2F2F2F2F:#54549A9A6F6F:#CCCCACAC0000:#00009999CCCC:'
- '#CCCC6868C8C8:#7979C4C4CCCC:#BCBCCCCCCCCC:#000000000000:#FFFF2F2F2F2F:'
- '#54549A9A6F6F:#CCCCACAC0000:#00009999CCCC:#CCCC6868C8C8:#7979C4C4CCCC:'
- '#BCBCCCCCCCCC:#AFAFC2C2C2C2:#000000000000'
- ),
- 'Liquid Carbon': (
- '#000000000000:#FFFF2F2F2F2F:#54549A9A6F6F:#CCCCACAC0000:#00009999CCCC:'
- '#CCCC6868C8C8:#7979C4C4CCCC:#BCBCCCCCCCCC:#000000000000:#FFFF2F2F2F2F:'
- '#54549A9A6F6F:#CCCCACAC0000:#00009999CCCC:#CCCC6868C8C8:#7979C4C4CCCC:'
- '#BCBCCCCCCCCC:#AFAFC2C2C2C2:#2F2F2F2F2F2F'
- ),
- 'Lucario': (
- '#4E4E4E4E4E4E:#FFFF6B6B6060:#FAFAB0B03636:#FFFFFFFFB6B6:#56569696EDED:'
- '#FFFF7373FDFD:#8E8EE4E47878:#EEEEEEEEEEEE:#4F4F4F4F4F4F:#F9F968686060:'
- '#FAFAB0B03636:#FDFDFFFFB8B8:#6B6B9F9FEDED:#FCFC6E6EF9F9:#8E8EE4E47878:'
- '#FFFFFFFFFFFF:#F8F8F8F8F2F2:#2B2B3E3E5050'
- ),
- 'Man Page': (
- '#000000000000:#CCCC00000000:#0000A6A60000:#999999990000:#00000000B2B2:'
- '#B2B20000B2B2:#0000A6A6B2B2:#CCCCCCCCCCCC:#666666666666:#E5E500000000:'
- '#0000D9D90000:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:'
- '#E5E5E5E5E5E5:#000000000000:#FEFEF4F49C9C'
- ),
- 'Mathias': (
- '#000000000000:#E5E522222222:#A6A6E3E32D2D:#FCFC95951E1E:#C4C48D8DFFFF:'
- '#FAFA25257373:#6767D9D9F0F0:#F2F2F2F2F2F2:#555555555555:#FFFF55555555:'
- '#5555FFFF5555:#FFFFFFFF5555:#55555555FFFF:#FFFF5555FFFF:#5555FFFFFFFF:'
- '#FFFFFFFFFFFF:#BBBBBBBBBBBB:#000000000000'
- ),
- 'Medallion': (
- '#000000000000:#B5B54C4C0000:#7C7C8A8A1616:#D2D2BDBD2525:#60606B6BAFAF:'
- '#8B8B59599090:#90906B6B2525:#C9C9C1C19999:#5E5E51511818:#FFFF91914848:'
- '#B1B1C9C93A3A:#FFFFE4E44949:#ABABB8B8FFFF:#FEFE9F9FFFFF:#FFFFBBBB5151:'
- '#FEFED5D59797:#CACAC2C29696:#1D1D18180808'
- ),
- 'Misterioso': (
- '#000000000000:#FFFF42424242:#7474AFAF6868:#FFFFADAD2929:#33338F8F8686:'
- '#94941313E5E5:#2323D7D7D7D7:#E1E1E1E1E0E0:#555555555555:#FFFF32324242:'
- '#7474CDCD6868:#FFFFB9B92929:#2323D7D7D7D7:#FFFF3737FFFF:#0000EDEDE1E1:'
- '#FFFFFFFFFFFF:#E1E1E1E1E0E0:#2D2D37374343'
- ),
- 'Molokai': (
- '#121212121212:#FAFA25257373:#9797E1E12323:#DFDFD4D46060:#0F0F7F7FCFCF:'
- '#87870000FFFF:#4242A7A7CFCF:#BBBBBBBBBBBB:#555555555555:#F5F566669C9C:'
- '#B0B0E0E05E5E:#FEFEF2F26C6C:#0000AFAFFFFF:#AFAF8787FFFF:#5050CDCDFEFE:'
- '#FFFFFFFFFFFF:#BBBBBBBBBBBB:#121212121212'
- ),
- 'Mona Lisa': (
- '#34341A1A0D0D:#9B9B28281B1B:#626261613232:#C2C26E6E2727:#51515B5B5C5C:'
- '#9B9B1D1D2929:#585880805656:#F6F6D7D75C5C:#878742422727:#FFFF42423030:'
- '#B3B3B1B16363:#FFFF95956565:#9E9EB2B2B3B3:#FFFF5B5B6A6A:#8989CCCC8E8E:'
- '#FFFFE5E59797:#F6F6D5D56A6A:#11110B0B0D0D'
- ),
- 'Monokai Cobalt2': (
- '#1C1C1D1D1919:#D0D01B1B2424:#A7A7D3D32C2C:#D8D8CFCF6767:#6161B8B8D0D0:'
- '#69695A5ABBBB:#D5D538386464:#FEFEFFFFFEFE:#1C1C1D1D1919:#D0D01B1B2424:'
- '#A7A7D3D32C2C:#D8D8CFCF6767:#6161B8B8D0D0:#69695A5ABBBB:#D5D538386464:'
- '#FEFEFFFFFEFE:#FFFFFFFFFFFF:#121226263737'
- ),
- 'Monokai Soda': (
- '#191919191919:#F3F300005F5F:#9797E0E02323:#FAFA84841919:#9C9C6464FEFE:'
- '#F3F300005F5F:#5757D1D1EAEA:#C4C4C4C4B5B5:#61615E5E4B4B:#F3F300005F5F:'
- '#9797E0E02323:#DFDFD5D56161:#9C9C6464FEFE:#F3F300005F5F:#5757D1D1EAEA:'
- '#F6F6F6F6EEEE:#C4C4C4C4B5B5:#191919191919'
- ),
- 'Monokai': (
- '#1C1C1D1D1919:#D0D01B1B2424:#A7A7D3D32C2C:#D8D8CFCF6767:#6161B8B8D0D0:'
- '#69695A5ABBBB:#D5D538386464:#FEFEFFFFFEFE:#1C1C1D1D1919:#D0D01B1B2424:'
- '#A7A7D3D32C2C:#D8D8CFCF6767:#6161B8B8D0D0:#69695A5ABBBB:#D5D538386464:'
- '#FEFEFFFFFEFE:#F6F6F5F5EEEE:#232325252626'
- ),
- 'N0tch2k': (
- '#383838383838:#A9A955555151:#666666666666:#A9A980805151:#65657D7D3E3E:'
- '#767676767676:#C9C9C9C9C9C9:#D0D0B8B8A3A3:#474747474747:#A9A977777575:'
- '#8C8C8C8C8C8C:#A9A991917575:#9898BDBD5E5E:#A3A3A3A3A3A3:#DCDCDCDCDCDC:'
- '#D8D8C8C8BBBB:#A0A0A0A0A0A0:#222222222222'
- ),
- 'Neopolitan': (
- '#000000000000:#808000000000:#6161CECE3C3C:#FBFBDEDE2D2D:#25253B3B7676:'
- '#FFFF00008080:#8D8DA6A6CECE:#F8F8F8F8F8F8:#000000000000:#808000000000:'
- '#6161CECE3C3C:#FBFBDEDE2D2D:#25253B3B7676:#FFFF00008080:#8D8DA6A6CECE:'
- '#F8F8F8F8F8F8:#FFFFFFFFFFFF:#27271F1F1919'
- ),
- 'Neutron': (
- '#222225252B2B:#B5B53F3F3636:#5A5AB9B97777:#DDDDB5B56666:#6A6A7B7B9292:'
- '#A3A379799D9D:#3F3F9393A8A8:#E6E6E8E8EEEE:#222225252B2B:#B5B53F3F3636:'
- '#5A5AB9B97777:#DDDDB5B56666:#6A6A7B7B9292:#A3A379799D9D:#3F3F9393A8A8:'
- '#EBEBEDEDF2F2:#E6E6E8E8EEEE:#1B1B1D1D2222'
- ),
- 'Nightlion V1': (
- '#4C4C4C4C4C4C:#BBBB00000000:#5E5EDEDE8F8F:#F2F2F0F06767:#26266A6AD7D7:'
- '#BBBB0000BBBB:#0000D9D9DFDF:#BBBBBBBBBBBB:#555555555555:#FFFF55555555:'
- '#5555FFFF5555:#FFFFFFFF5555:#55555555FFFF:#FFFF5555FFFF:#5555FFFFFFFF:'
- '#FFFFFFFFFFFF:#BBBBBBBBBBBB:#000000000000'
- ),
- 'Nightlion V2': (
- '#4C4C4C4C4C4C:#BBBB00000000:#0303F6F62222:#F2F2F0F06767:#6363D0D0F0F0:'
- '#CECE6F6FDADA:#0000D9D9DFDF:#BBBBBBBBBBBB:#555555555555:#FFFF55555555:'
- '#7D7DF6F61C1C:#FFFFFFFF5555:#6262CACAE7E7:#FFFF9A9AF5F5:#0000CCCCD7D7:'
- '#FFFFFFFFFFFF:#BBBBBBBBBBBB:#171717171717'
- ),
- 'Nord': (
- '#3B3B42425252:#BFBF61616A6A:#A3A3BEBE8C8C:#EBEBCBCB8B8B:#8181A1A1C1C1:'
- '#B4B48E8EADAD:#8888C0C0D0D0:#E5E5E9E9F0F0:#4C4C56566A6A:#BFBF61616A6A:'
- '#A3A3BEBE8C8C:#EBEBCBCB8B8B:#8181A1A1C1C1:#B4B48E8EADAD:#8F8FBCBCBBBB:'
- '#ECECEFEFF4F4:#D8D8DEDEE9E9:#2E2E34344040'
- ),
- 'Novel': (
- '#000000000000:#CCCC00000000:#000096960000:#D0D06B6B0000:#00000000CCCC:'
- '#CCCC0000CCCC:#00008787CCCC:#CCCCCCCCCCCC:#7F7F7F7F7F7F:#CCCC00000000:'
- '#000096960000:#D0D06B6B0000:#00000000CCCC:#CCCC0000CCCC:#00008686CBCB:'
- '#FFFFFFFFFFFF:#3B3B23232222:#DFDFDBDBC3C3'
- ),
- 'Obsidian': (
- '#000000000000:#A5A500000101:#0000BBBB0000:#FEFECCCC2222:#39399B9BDADA:'
- '#BBBB0000BBBB:#0000BBBBBBBB:#BBBBBBBBBBBB:#555555555555:#FFFF00000303:'
- '#9292C7C76363:#FEFEF7F77373:#A0A0D6D6FFFF:#FFFF5555FFFF:#5555FFFFFFFF:'
- '#FFFFFFFFFFFF:#CCCCCCCCCCCC:#272730303232'
- ),
- 'Ocean': (
- '#000000000000:#999900000000:#0000A6A60000:#999999990000:#00000000B2B2:'
- '#B2B20000B2B2:#0000A6A6B2B2:#BFBFBFBFBFBF:#666666666666:#E5E500000000:'
- '#0000D9D90000:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:'
- '#E5E5E5E5E5E5:#FFFFFFFFFFFF:#22224F4FBCBC'
- ),
- 'Ocean Dark': (
- '#2B2B30303B3B:#BFBF61616A6A:#A3A3BEBE8C8C:#EBEBCBCB8B8B:#8F8FA1A1B3B3:'
- '#B4B48E8EADAD:#9696B5B5B4B4:#C0C0C5C5CECE:#656573737E7E:#BFBF61616A6A:'
- '#A3A3BEBE8C8C:#EBEBCBCB8B8B:#8F8FA1A1B3B3:#B4B48E8EADAD:#9696B5B5B4B4:'
- '#EFEFF1F1F5F5:#C0C0C5C5CECE:#2B2B30303B3B'
- ),
- 'Ocean Light': (
- '#EFEFF1F1F5F5:#BFBF61616A6A:#A3A3BEBE8C8C:#EBEBCBCB8B8B:#8F8FA1A1B3B3:'
- '#B4B48E8EADAD:#9696B5B5B4B4:#C0C0C5C5CECE:#656573737E7E:#BFBF61616A6A:'
- '#A3A3BEBE8C8C:#EBEBCBCB8B8B:#8F8FA1A1B3B3:#B4B48E8EADAD:#9696B5B5B4B4:'
- '#2B2B30303B3B:#4F4F5B5B6666:#EFEFF1F1F5F5'
- ),
- 'Oceanic Next Dark': (
- '#1B1B2B2B3434:#ECEC5f5f6767:#9999C7C79494:#FAFAC8C86363:#66669999CCCC:'
- '#C5C59494C5C5:#5F5FB3B3B3B3:#C0C0C5C5CECE:#656573737E7E:#ECEC5f5f6767:'
- '#9999C7C79494:#FAFAC8C86363:#66669999CCCC:#C5C59494C5C5:#5F5FB3B3B3B3:'
- '#D8D8DEDEE9E9:#C0C0C5C5CECE:#1B1B2B2B3434'
- ),
- 'Oceanic Next Light': (
- '#D8D8DEDEE9E9:#ECEC5f5f6767:#9999C7C79494:#FAFAC8C86363:#66669999CCCC:'
- '#C5C59494C5C5:#5F5FB3B3B3B3:#C0C0C5C5CECE:#656573737E7E:#ECEC5f5f6767:'
- '#9999C7C79494:#FAFAC8C86363:#66669999CCCC:#C5C59494C5C5:#5F5FB3B3B3B3:'
- '#1B1B2B2B3434:#4F4F5B5B6666:#D8D8DEDEE9E9'
- ),
- 'Ollie': (
- '#000000000000:#ABAB2E2E3030:#3131ABAB6060:#ABAB42420000:#2C2C5656ABAB:'
- '#AFAF84842727:#1F1FA5A5ABAB:#8A8A8D8DABAB:#5A5A36362525:#FFFF3D3D4848:'
- '#3B3BFFFF9999:#FFFF5E5E1E1E:#44448787FFFF:#FFFFC2C21C1C:#1E1EFAFAFFFF:'
- '#5B5B6D6DA7A7:#8A8A8D8DAEAE:#212120202424'
- ),
- 'One Dark': (
- '#000000000000:#B0B058586969:#7676A6A66565:#CFCFB0B07373:#4A4AA4A4B8B8:'
- '#A1A16565C1C1:#4A4AA4A4B8B8:#B1B1B1B1B1B1:#4C4C57577272:#B0B058586969:'
- '#7676A6A66565:#CFCFB0B07373:#4A4AA4A4B8B8:#A1A16565C1C1:#4A4AA4A4B8B8:'
- '#DEDEDEDEDEDE:#4C4C57577171:#171718181C1C'
- ),
- 'Paul Millr': (
- '#2A2A2A2A2A2A:#FFFF00000000:#7979FFFF0F0F:#E7E7BFBF0000:#38386B6BD7D7:'
- '#B3B34949BEBE:#6666CCCCFFFF:#BBBBBBBBBBBB:#666666666666:#FFFF00008080:'
- '#6666FFFF6666:#F3F3D6D64E4E:#70709A9AEDED:#DBDB6767E6E6:#7979DFDFF2F2:'
- '#FFFFFFFFFFFF:#F2F2F2F2F2F2:#000000000000'
- ),
- 'Pencil Dark': (
- '#212121212121:#C3C307077171:#1010A7A77878:#A8A89C9C1414:#00008E8EC4C4:'
- '#52523C3C7979:#2020A5A5BABA:#D9D9D9D9D9D9:#424242424242:#FBFB00007A7A:'
- '#5F5FD7D7AFAF:#F3F3E4E43030:#2020BBBBFCFC:#68685555DEDE:#4F4FB8B8CCCC:'
- '#F1F1F1F1F1F1:#F1F1F1F1F1F1:#212121212121'
- ),
- 'Pencil Light': (
- '#212121212121:#C3C307077171:#1010A7A77878:#A8A89C9C1414:#00008E8EC4C4:'
- '#52523C3C7979:#2020A5A5BABA:#D9D9D9D9D9D9:#424242424242:#FBFB00007A7A:'
- '#5F5FD7D7AFAF:#F3F3E4E43030:#2020BBBBFCFC:#68685555DEDE:#4F4FB8B8CCCC:'
- '#F1F1F1F1F1F1:#424242424242:#F1F1F1F1F1F1'
- ),
- 'Pnevma': (
- '#2F2F2E2E2D2D:#A3A366666666:#9090A5A57D7D:#D7D7AFAF8787:#7F7FA5A5BDBD:'
- '#C7C79E9EC4C4:#8A8ADBDBB4B4:#D0D0D0D0D0D0:#4A4A48484545:#D7D787878787:'
- '#AFAFBEBEA2A2:#E4E4C9C9AFAF:#A1A1BDBDCECE:#D7D7BEBEDADA:#B1B1E7E7DDDD:'
- '#EFEFEFEFEFEF:#D0D0D0D0D0D0:#1C1C1C1C1C1C'
- ),
- 'Pro': (
- '#000000000000:#999900000000:#0000A6A60000:#999999990000:#1F1F0808DBDB:'
- '#B2B20000B2B2:#0000A6A6B2B2:#BFBFBFBFBFBF:#666666666666:#E5E500000000:'
- '#0000D9D90000:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:'
- '#E5E5E5E5E5E5:#F2F2F2F2F2F2:#000000000000'
- ),
- 'Red Alert': (
- '#000000000000:#D5D52E2E4D4D:#7171BEBE6B6B:#BEBEB8B86B6B:#47479B9BEDED:'
- '#E8E87878D6D6:#6B6BBEBEB8B8:#D6D6D6D6D6D6:#262626262626:#E0E024245353:'
- '#AFAFF0F08B8B:#DFDFDDDDB7B7:#6565A9A9F0F0:#DDDDB7B7DFDF:#B7B7DFDFDDDD:'
- '#FFFFFFFFFFFF:#FFFFFFFFFFFF:#767624242323'
- ),
- 'Red Sands': (
- '#000000000000:#FFFF3F3F0000:#0000BBBB0000:#E7E7B0B00000:#00007171FFFF:'
- '#BBBB0000BBBB:#0000BBBBBBBB:#BBBBBBBBBBBB:#555555555555:#BBBB00000000:'
- '#0000BBBB0000:#E7E7B0B00000:#00007171AEAE:#FFFF5555FFFF:#5555FFFFFFFF:'
- '#FFFFFFFFFFFF:#D7D7C9C9A7A7:#797924241E1E'
- ),
- 'Rippedcasts': (
- '#000000000000:#CDCDAFAF9595:#A7A7FFFF6060:#BFBFBBBB1F1F:#7575A5A5B0B0:'
- '#FFFF7373FDFD:#595964647E7E:#BFBFBFBFBFBF:#666666666666:#EEEECBCBADAD:'
- '#BCBCEEEE6868:#E5E5E5E50000:#8686BDBDC9C9:#E5E50000E5E5:#8C8C9B9BC3C3:'
- '#E5E5E5E5E5E5:#FFFFFFFFFFFF:#2B2B2B2B2B2B'
- ),
- 'Royal': (
- '#24241F1F2A2A:#909027274B4B:#232380801C1C:#B4B49D9D2727:#64648080AFAF:'
- '#66664D4D9696:#8A8AAAAABDBD:#515149496565:#31312D2D3C3C:#D4D434346C6C:'
- '#2C2CD8D84545:#FDFDE8E83A3A:#8F8FB9B9F9F9:#A4A47979E2E2:#ABABD3D3EBEB:'
- '#9D9D8B8BBDBD:#505048486868:#101008081414'
- ),
- 'Rxvt': (
- '#000000000000:#cdcd00000000:#0000cdcd0000:#cdcdcdcd0000:#00000000cdcd:'
- '#cdcd0000cdcd:#0000cdcdcdcd:#fafaebebd7d7:#404040404040:#ffff00000000:'
- '#0000ffff0000:#ffffffff0000:#00000000ffff:#ffff0000ffff:#0000ffffffff:'
- '#ffffffffffff:#ffffffffffff:#000000000000'
- ),
- 'Sea Shells': (
- '#171738384C4C:#D1D150502323:#02027C7C9B9B:#FCFCA0A02F2F:#1E1E49495050:'
- '#6868D3D3F1F1:#5050A3A3B5B5:#DEDEB8B88D8D:#42424B4B5252:#D3D386867777:'
- '#61618C8C9898:#FDFDD2D29E9E:#1B1BBCBCDDDD:#BBBBE3E3EEEE:#8686ABABB3B3:'
- '#FEFEE3E3CDCD:#DEDEB8B88D8D:#080813131A1A'
- ),
- 'Seafoam Pastel': (
- '#757575757575:#82825D5D4D4D:#71718C8C6161:#ADADA1A16D6D:#4D4D7B7B8282:'
- '#8A8A71716767:#717193939393:#E0E0E0E0E0E0:#8A8A8A8A8A8A:#CFCF93937979:'
- '#9898D9D9AAAA:#FAFAE7E79D9D:#7979C3C3CFCF:#D6D6B2B2A1A1:#ADADE0E0E0E0:'
- '#E0E0E0E0E0E0:#D3D3E7E7D3D3:#242434343434'
- ),
- 'Seti': (
- '#323232323232:#C2C228283232:#8E8EC4C43D3D:#E0E0C6C64F4F:#4343A5A5D5D5:'
- '#8B8B5757B5B5:#8E8EC4C43D3D:#EEEEEEEEEEEE:#323232323232:#C2C228283232:'
- '#8E8EC4C43D3D:#E0E0C6C64F4F:#4343A5A5D5D5:#8B8B5757B5B5:#8E8EC4C43D3D:'
- '#FFFFFFFFFFFF:#CACACECECDCD:#111112121313'
- ),
- 'Shaman': (
- '#010120202626:#B1B12F2F2C2C:#0000A9A94040:#5D5D8A8AA9A9:#444499998585:'
- '#000059599C9C:#5C5C7E7E1919:#404055555454:#373743435050:#FFFF42424242:'
- '#2A2AEAEA5E5E:#8D8DD3D3FDFD:#6161D4D4B9B9:#12129898FFFF:#9898CFCF2828:'
- '#5858FAFAD6D6:#404055555555:#000010101414'
- ),
- 'Slate': (
- '#212121212121:#E1E1A7A7BFBF:#8080D7D77878:#C4C4C9C9BFBF:#25254A4A4949:'
- '#A3A38080D3D3:#1414ABAB9C9C:#0202C4C4E0E0:#FFFFFFFFFFFF:#FFFFCCCCD8D8:'
- '#BDBDFFFFA8A8:#D0D0CBCBC9C9:#7979AFAFD2D2:#C4C4A7A7D8D8:#8B8BDEDEE0E0:'
- '#E0E0E0E0E0E0:#3434B0B0D2D2:#212121212121'
- ),
- 'Smyck': (
- '#000000000000:#B7B741413131:#7D7DA9A90000:#C4C4A4A40000:#6262A3A3C4C4:'
- '#B9B98A8ACCCC:#202073738383:#A0A0A0A0A0A0:#7A7A7A7A7A7A:#D6D683837B7B:'
- '#C4C4F0F03636:#FEFEE1E14D4D:#8D8DCFCFF0F0:#F7F79999FFFF:#6969D9D9CFCF:'
- '#F7F7F7F7F7F7:#F7F7F7F7F7F7:#1B1B1B1B1B1B'
- ),
- 'Soft Server': (
- '#000000000000:#A1A168686969:#9999A5A56969:#A2A290906969:#6A6A8F8FA3A3:'
- '#69697171A3A3:#6B6BA4A48F8F:#9999A3A3A2A2:#66666C6C6B6B:#DCDC5B5B5F5F:'
- '#BFBFDEDE5454:#DEDEB3B35F5F:#6262B1B1DFDF:#5F5F6E6EDEDE:#6464E3E39C9C:'
- '#D1D1DFDFDEDE:#9999A3A3A2A2:#242426262626'
- ),
- 'Solarized Darcula': (
- '#252529292A2A:#F2F248484040:#626296965555:#B6B688880000:#20207575C7C7:'
- '#79797F7FD4D4:#151596968D8D:#D2D2D8D8D9D9:#252529292A2A:#F2F248484040:'
- '#626296965555:#B6B688880000:#20207575C7C7:#79797F7FD4D4:#151596968D8D:'
- '#D2D2D8D8D9D9:#D2D2D8D8D9D9:#3D3D3F3F4141'
- ),
- 'Solarized Dark Higher Contrast': (
- '#000027273131:#D0D01B1B2424:#6B6BBEBE6C6C:#A5A577770505:#20207575C7C7:'
- '#C6C61B1B6E6E:#252591918585:#E9E9E2E2CBCB:#000063638888:#F4F415153B3B:'
- '#5050EEEE8484:#B1B17E7E2828:#17178D8DC7C7:#E1E14D4D8E8E:#0000B2B29E9E:'
- '#FCFCF4F4DCDC:#9B9BC1C1C2C2:#00001E1E2626'
- ),
- 'Solarized Dark': (
- '#000027273131:#D0D01B1B2424:#727289890505:#A5A577770505:#20207575C7C7:'
- '#C6C61B1B6E6E:#252591918585:#E9E9E2E2CBCB:#00001E1E2626:#BDBD36361212:'
- '#46465A5A6161:#525267676F6F:#707081818383:#58585656B9B9:#818190908F8F:'
- '#FCFCF4F4DCDC:#707081818383:#00001E1E2626'
- ),
- 'Solarized Light': (
- '#000027273131:#D0D01B1B2424:#727289890505:#A5A577770505:#20207575C7C7:'
- '#C6C61B1B6E6E:#252591918585:#E9E9E2E2CBCB:#00001E1E2626:#BDBD36361212:'
- '#46465A5A6161:#525267676F6F:#707081818383:#58585656B9B9:#818190908F8F:'
- '#FCFCF4F4DCDC:#525267676F6F:#FCFCF4F4DCDC'
- ),
- 'Space Gray Eighties': (
- '#151517171C1C:#ECEC5F5F6767:#8080A7A76363:#FDFDC2C25353:#54548585C0C0:'
- '#BFBF8383C0C0:#5757C2C2C0C0:#EEEEECECE7E7:#555555555555:#FFFF69697373:'
- '#9393D3D39393:#FFFFD1D15656:#4D4D8383D0D0:#FFFF5555FFFF:#8383E8E8E4E4:'
- '#FFFFFFFFFFFF:#BDBDB9B9AEAE:#212121212121'
- ),
- 'Space Gray': (
- '#000000000000:#AFAF4B4B5757:#8787B2B27979:#E5E5C0C07878:#7C7C8F8FA3A3:'
- '#A3A379799696:#8484A6A6A4A4:#B2B2B8B8C2C2:#000000000000:#AFAF4B4B5757:'
- '#8787B2B27979:#E5E5C0C07878:#7C7C8F8FA3A3:#A3A379799696:#8484A6A6A4A4:'
- '#FFFFFEFEFEFE:#B2B2B8B8C2C2:#202023232C2C'
- ),
- 'Spacedust': (
- '#6E6E52524646:#E3E35A5A0000:#5C5CABAB9696:#E3E3CDCD7B7B:#0E0E54548B8B:'
- '#E3E35A5A0000:#0606AFAFC7C7:#F0F0F1F1CECE:#67674C4C3131:#FFFF8A8A3939:'
- '#ADADCACAB8B8:#FFFFC7C77777:#6767A0A0CDCD:#FFFF8A8A3939:#8383A6A6B3B3:'
- '#FEFEFFFFF0F0:#ECECEFEFC1C1:#0A0A1E1E2424'
- ),
- 'Spixel': (
- '#000000000000:#A4A43E3E6363:#8A8AB5B54444:#F3F39A9A2626:#51518B8BA3A3:'
- '#97977070B3B3:#5B5BA6A6A5A5:#D3D3D7D7CFCF:#707073736D6D:#E8E84A4A8484:'
- '#A7A7E3E34646:#F1F1C5C58B8B:#7373B9B9D6D6:#C5E49865E6E6:#8282D9D9D8D8:'
- '#EEEEEEEEECEC:#FFFFFFFFFFFF:#262626262222'
- ),
- 'Spring': (
- '#000000000000:#FFFF4C4C8383:#1F1F8C8C3A3A:#1F1FC9C95A5A:#1C1CD2D2EEEE:'
- '#89895959A8A8:#3E3E99999F9F:#FFFFFEFEFEFE:#000000000000:#FFFF00002121:'
- '#1F1FC2C23131:#D4D4B7B70606:#1515A9A9FDFD:#89895959A8A8:#3E3E99999F9F:'
- '#FFFFFEFEFEFE:#4D4D4D4D4C4C:#FFFFFFFFFFFF'
- ),
- 'Square': (
- '#050505050505:#E9E989897C7C:#B6B637377D7D:#ECECEBEBBEBE:#A9A9CDCDEBEB:'
- '#757550507B7B:#C9C9CACAECEC:#F2F2F2F2F2F2:#141414141414:#F9F992928686:'
- '#C3C3F7F78686:#FCFCFBFBCCCC:#B6B6DEDEFBFB:#ADAD7F7FA8A8:#D7D7D9D9FCFC:'
- '#E2E2E2E2E2E2:#ACACACACABAB:#1A1A1A1A1A1A'
- ),
- 'Sundried': (
- '#30302B2B2A2A:#A6A646463D3D:#575776764444:#9C9C5F5F2A2A:#48485A5A9898:'
- '#858545455151:#9C9C81814E4E:#C8C8C8C8C8C8:#4D4D4D4D4747:#AAAA00000C0C:'
- '#12128C8C2020:#FCFC6A6A2020:#78789898F7F7:#FCFC8989A0A0:#FAFAD3D38484:'
- '#FFFFFEFEFEFE:#C8C8C8C8C8C8:#1A1A18181818'
- ),
- 'Symphonic': (
- '#000000000000:#DCDC32322F2F:#5656DBDB3A3A:#FFFF84840000:#00008484D4D4:'
- '#B7B72929D9D9:#CCCCCCCCFFFF:#FFFFFFFFFFFF:#1B1B1D1D2121:#DCDC32322F2F:'
- '#5656DBDB3A3A:#FFFF84840000:#00008484D4D4:#B7B72929D9D9:#CCCCCCCCFFFF:'
- '#FFFFFFFFFFFF:#FFFFFFFFFFFF:#000000000000'
- ),
- 'Tango': (
- '#000000000000:#cccc00000000:#4e4e9a9a0606:#c4c4a0a00000:#34346565a4a4:'
- '#757550507b7b:#060698209a9a:#d3d3d7d7cfcf:#555557575353:#efef29292929:'
- '#8a8ae2e23434:#fcfce9e94f4f:#72729f9fcfcf:#adad7f7fa8a8:#3434e2e2e2e2:'
- '#eeeeeeeeecec:#ffffffffffff:#000000000000'
- ),
- 'Teerb': (
- '#1C1C1C1C1C1C:#D6D686868686:#AEAED6D68686:#D7D7AFAF8787:#8686AEAED6D6:'
- '#D6D6AEAED6D6:#8A8ADBDBB4B4:#D0D0D0D0D0D0:#1C1C1C1C1C1C:#D6D686868686:'
- '#AEAED6D68686:#E4E4C9C9AFAF:#8686AEAED6D6:#D6D6AEAED6D6:#B1B1E7E7DDDD:'
- '#EFEFEFEFEFEF:#D0D0D0D0D0D0:#262626262626'
- ),
- 'Terminal Basic': (
- '#000000000000:#999900000000:#0000A6A60000:#999999990000:#00000000B2B2:'
- '#B2B20000B2B2:#0000A6A6B2B2:#BFBFBFBFBFBF:#666666666666:#E5E500000000:'
- '#0000D9D90000:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:'
- '#E5E5E5E5E5E5:#000000000000:#FFFFFFFFFFFF'
- ),
- 'Thayer Bright': (
- '#1B1B1D1D1E1E:#F9F926267272:#4D4DF7F74040:#F3F3FDFD2121:#26265656D6D6:'
- '#8C8C5454FEFE:#3737C8C8B4B4:#CCCCCCCCC6C6:#505053535454:#FFFF59599595:'
- '#B6B6E3E35454:#FEFEEDED6C6C:#3F3F7878FFFF:#9E9E6F6FFEFE:#2323CECED4D4:'
- '#F8F8F8F8F2F2:#F8F8F8F8F8F8:#1B1B1D1D1E1E'
- ),
- 'Tomorrow Night Blue': (
- '#000000000000:#FFFF9D9DA3A3:#D1D1F1F1A9A9:#FFFFEEEEADAD:#BBBBDADAFFFF:'
- '#EBEBBBBBFFFF:#9999FFFFFFFF:#FFFFFEFEFEFE:#000000000000:#FFFF9C9CA3A3:'
- '#D0D0F0F0A8A8:#FFFFEDEDACAC:#BABADADAFFFF:#EBEBBABAFFFF:#9999FFFFFFFF:'
- '#FFFFFEFEFEFE:#FFFFFEFEFEFE:#000024245151'
- ),
- 'Tomorrow Night Bright': (
- '#000000000000:#D5D54E4E5353:#B9B9CACA4949:#E7E7C5C54747:#7979A6A6DADA:'
- '#C3C39797D8D8:#7070C0C0B1B1:#FFFFFEFEFEFE:#000000000000:#D4D44D4D5353:'
- '#B9B9C9C94949:#E6E6C4C44646:#7979A6A6DADA:#C3C39696D7D7:#7070C0C0B1B1:'
- '#FFFFFEFEFEFE:#E9E9E9E9E9E9:#000000000000'
- ),
- 'Tomorrow Night Eighties': (
- '#000000000000:#F2F277777979:#9999CCCC9999:#FFFFCCCC6666:#66669999CCCC:'
- '#CCCC9999CCCC:#6666CCCCCCCC:#FFFFFEFEFEFE:#000000000000:#F1F177777979:'
- '#9999CCCC9999:#FFFFCCCC6666:#66669999CCCC:#CCCC9999CCCC:#6666CCCCCCCC:'
- '#FFFFFEFEFEFE:#CCCCCCCCCCCC:#2C2C2C2C2C2C'
- ),
- 'Tomorrow Night': (
- '#000000000000:#CCCC66666666:#B5B5BDBD6868:#F0F0C6C67474:#8181A2A2BEBE:'
- '#B2B29393BBBB:#8A8ABEBEB7B7:#FFFFFEFEFEFE:#000000000000:#CCCC66666666:'
- '#B5B5BDBD6868:#F0F0C5C57474:#8080A1A1BDBD:#B2B29494BABA:#8A8ABDBDB6B6:'
- '#FFFFFEFEFEFE:#C5C5C8C8C6C6:#1D1D1F1F2121'
- ),
- 'Tomorrow': (
- '#000000000000:#C8C828282828:#71718C8C0000:#EAEAB7B70000:#41417171AEAE:'
- '#89895959A8A8:#3E3E99999F9F:#FFFFFEFEFEFE:#000000000000:#C8C828282828:'
- '#70708B8B0000:#E9E9B6B60000:#41417070AEAE:#89895858A7A7:#3D3D99999F9F:'
- '#FFFFFEFEFEFE:#4D4D4D4D4C4C:#FFFFFFFFFFFF'
- ),
- 'Toy Chest': (
- '#2C2C3F3F5757:#BEBE2D2D2626:#191991917171:#DADA8E8E2626:#32325D5D9696:'
- '#8A8A5D5DDBDB:#3535A0A08F8F:#2323D0D08282:#323268688989:#DDDD59594343:'
- '#3030CFCF7B7B:#E7E7D7D74B4B:#3333A5A5D9D9:#ADAD6B6BDCDC:#4141C3C3ADAD:'
- '#D4D4D4D4D4D4:#3030CFCF7B7B:#232336364A4A'
- ),
- 'Treehouse': (
- '#323212120000:#B1B127270E0E:#4444A9A90000:#A9A981810B0B:#575784849999:'
- '#969636363C3C:#B2B259591D1D:#77776B6B5353:#424236362525:#EDED5C5C2020:'
- '#5555F2F23737:#F1F1B7B73131:#8585CFCFECEC:#E0E04B4B5A5A:#F0F07D7D1414:'
- '#FFFFC8C80000:#77776B6B5353:#191919191919'
- ),
- 'Twilight': (
- '#141414141414:#C0C06C6C4343:#AFAFB9B97979:#C2C2A8A86C6C:#444446464949:'
- '#B4B4BEBE7B7B:#777782828484:#FEFEFFFFD3D3:#262626262626:#DDDD7C7C4C4C:'
- '#CBCBD8D88C8C:#E1E1C4C47D7D:#5A5A5D5D6161:#D0D0DBDB8E8E:#8A8A98989A9A:'
- '#FEFEFFFFD3D3:#FEFEFFFFD3D3:#141414141414'
- ),
- 'Urple': (
- '#000000000000:#AFAF42425B5B:#3737A3A31515:#ACAC5B5B4141:#55554D4D9A9A:'
- '#6C6C3B3BA1A1:#808080808080:#878779799C9C:#5C5C31312525:#FFFF63638787:'
- '#2828E5E51F1F:#F0F080806161:#85857979EDED:#A0A05D5DEEEE:#EAEAEAEAEAEA:'
- '#BFBFA3A3FFFF:#868679799A9A:#1B1B1B1B2323'
- ),
- 'Vaughn': (
- '#242423234F4F:#707050505050:#6060B4B48A8A:#DFDFAFAF8F8F:#55555555FFFF:'
- '#F0F08C8CC3C3:#8C8CD0D0D3D3:#707090908080:#707090908080:#DCDCA3A3A3A3:'
- '#6060B4B48A8A:#F0F0DFDFAFAF:#55555555FFFF:#ECEC9393D3D3:#9393E0E0E3E3:'
- '#FFFFFFFFFFFF:#DCDCDCDCCCCC:#252523234E4E'
- ),
- 'Vibrant Ink': (
- '#878787878787:#FFFF66660000:#CCCCFFFF0404:#FFFFCCCC0000:#4444B3B3CCCC:'
- '#99993333CCCC:#4444B3B3CCCC:#F5F5F5F5F5F5:#555555555555:#FFFF00000000:'
- '#0000FFFF0000:#FFFFFFFF0000:#00000000FFFF:#FFFF0000FFFF:#0000FFFFFFFF:'
- '#E5E5E5E5E5E5:#FFFFFFFFFFFF:#000000000000'
- ),
- 'Warm Neon': (
- '#000000000000:#E2E243434545:#3838B1B13939:#DADAE1E14545:#42426060C5C5:'
- '#F8F81F1FFBFB:#2929BABAD3D3:#D0D0B8B8A3A3:#FDFDFCFCFCFC:#E8E86F6F7171:'
- '#9B9BC0C08F8F:#DDDDD9D97979:#7A7A9090D5D5:#F6F67474B9B9:#5E5ED1D1E4E4:'
- '#D8D8C8C8BBBB:#AFAFDADAB6B6:#3F3F3F3F3F3F'
- ),
- 'Wez': (
- '#000000000000:#CCCC55555555:#5555CCCC5555:#CDCDCDCD5555:#54545555CBCB:'
- '#CCCC5555CCCC:#7A7ACACACACA:#CCCCCCCCCCCC:#555555555555:#FFFF55555555:'
- '#5555FFFF5555:#FFFFFFFF5555:#55555555FFFF:#FFFF5555FFFF:#5555FFFFFFFF:'
- '#FFFFFFFFFFFF:#B3B3B3B3B3B3:#000000000000'
- ),
- 'Wild Cherry': (
- '#000005050606:#D9D940408585:#2A2AB2B25050:#FFFFD1D16F6F:#88883C3CDCDC:'
- '#ECECECECECEC:#C1C1B8B8B7B7:#FFFFF8F8DDDD:#00009C9CC9C9:#DADA6B6BABAB:'
- '#F4F4DBDBA5A5:#EAEAC0C06666:#2F2F8B8BB9B9:#AEAE63636B6B:#FFFF91919D9D:'
- '#E4E483838D8D:#D9D9FAFAFFFF:#1F1F16162626'
- ),
- 'Wombat': (
- '#000000000000:#FFFF60605A5A:#B1B1E8E86969:#EAEAD8D89C9C:#5D5DA9A9F6F6:'
- '#E8E86A6AFFFF:#8282FFFFF6F6:#DEDED9D9CECE:#313131313131:#F5F58B8B7F7F:'
- '#DCDCF8F88F8F:#EEEEE5E5B2B2:#A5A5C7C7FFFF:#DDDDAAAAFFFF:#B6B6FFFFF9F9:'
- '#FEFEFFFFFEFE:#DEDED9D9CECE:#171717171717'
- ),
- 'Wryan': (
- '#333333333333:#8C8C46466565:#282873737373:#7C7C7C7C9999:#393955557373:'
- '#5E5E46468C8C:#313165658C8C:#89899C9CA1A1:#3D3D3D3D3D3D:#BFBF4D4D8080:'
- '#5353A6A6A6A6:#9E9E9E9ECBCB:#47477A7AB3B3:#7E7E6262B3B3:#60609696BFBF:'
- '#C0C0C0C0C0C0:#999999999393:#101010101010'
- ),
- 'Xterm': (
- '#000000000000:#cdcb00000000:#0000cdcb0000:#cdcbcdcb0000:#1e1a908fffff:'
- '#cdcb0000cdcb:#0000cdcbcdcb:#e5e2e5e2e5e2:#4ccc4ccc4ccc:#ffff00000000:'
- '#0000ffff0000:#ffffffff0000:#46458281b4ae:#ffff0000ffff:#0000ffffffff:'
- '#ffffffffffff:#ffffffffffff:#000000000000'
- ),
- 'Zenburn': (
- '#4D4D4D4D4D4D:#707050505050:#6060B4B48A8A:#F0F0DFDFAFAF:#505060607070:'
- '#DCDC8C8CC3C3:#8C8CD0D0D3D3:#DCDCDCDCCCCC:#707090908080:#DCDCA3A3A3A3:'
- '#C3C3BFBF9F9F:#E0E0CFCF9F9F:#9494BFBFF3F3:#ECEC9393D3D3:#9393E0E0E3E3:'
- '#FFFFFFFFFFFF:#DCDCDCDCCCCC:#3F3F3F3F3F3F'
- ),
- 'Aci': (
- '#363636363636:#FFFF08088383:#8383FFFF0808:#FFFF83830808:#08088383FFFF:'
- '#83830808FFFF:#0808FFFF8383:#B6B6B6B6B6B6:#424242424242:#FFFF1E1E8E8E:'
- '#8E8EFFFF1E1E:#FFFF8E8E1E1E:#1E1E8E8EFFFF:#8E8E1E1EFFFF:#1E1EFFFF8E8E:'
- '#C2C2C2C2C2C2:#B4B4E1E1FDFD:#0D0D19192626'
- ),
- 'Aco': (
- '#3F3F3F3F3F3F:#FFFF08088383:#8383FFFF0808:#FFFF83830808:#08088383FFFF:'
- '#83830808FFFF:#0808FFFF8383:#BEBEBEBEBEBE:#474747474747:#FFFF1E1E8E8E:'
- '#8E8EFFFF1E1E:#FFFF8E8E1E1E:#1E1E8E8EFFFF:#8E8E1E1EFFFF:#1E1EFFFF8E8E:'
- '#C4C4C4C4C4C4:#B4B4E1E1FDFD:#1F1F13130505'
- ),
- 'Azu': (
- '#000000000000:#ACAC6D6D7474:#7474ACAC6D6D:#ACACA4A46D6D:#6D6D7474ACAC:'
- '#A4A46D6DACAC:#6D6DACACA4A4:#E6E6E6E6E6E6:#262626262626:#D6D6B8B8BCBC:'
- '#BCBCD6D6B8B8:#D6D6D3D3B8B8:#B8B8BCBCD6D6:#D3D3B8B8D6D6:#B8B8D6D6D3D3:'
- '#FFFFFFFFFFFF:#D9D9E6E6F2F2:#090911111A1A'
- ),
- 'Bim': (
- '#2C2C24242323:#F5F55757A0A0:#A9A9EEEE5555:#F5F5A2A25555:#5E5EA2A2ECEC:'
- '#A9A95757ECEC:#5E5EEEEEA0A0:#919189898888:#919189898888:#F5F57979B2B2:'
- '#BBBBEEEE7878:#F5F5B3B37878:#8181B3B3ECEC:#BBBB7979ECEC:#8181EEEEB2B2:'
- '#F5F5EEEEECEC:#A9A9BEBED8D8:#010128284949'
- ),
- 'Cai': (
- '#000000000000:#CACA27274D4D:#4D4DCACA2727:#CACAA4A42727:#27274D4DCACA:'
- '#A4A42727CACA:#2727CACAA4A4:#808080808080:#808080808080:#E9E98D8DA3A3:'
- '#A3A3E9E98D8D:#E9E9D4D48D8D:#8D8DA3A3E9E9:#D4D48D8DE9E9:#8D8DE9E9D4D4:'
- '#FFFFFFFFFFFF:#D9D9E6E6F2F2:#090911111A1A'
- ),
- 'Elementary': (
- '#303030303030:#E1E132321A1A:#6A6AB0B01717:#FFFFC0C00505:#00004F4F9E9E:'
- '#ECEC00004848:#2A2AA7A7E7E7:#F2F2F2F2F2F2:#5D5D5D5D5D5D:#FFFF36361E1E:'
- '#7B7BC9C91F1F:#FFFFD0D00A0A:#00007171FFFF:#FFFF1D1D6262:#4B4BB8B8FDFD:'
- '#A0A02020F0F0:#F2F2F2F2F2F2:#101010101010'
- ),
- 'Elic': (
- '#303030303030:#E1E132321A1A:#6A6AB0B01717:#FFFFC0C00505:#72729F9FCFCF:'
- '#ECEC00004848:#F2F2F2F2F2F2:#2A2AA7A7E7E7:#5D5D5D5D5D5D:#FFFF36361E1E:'
- '#7B7BC9C91F1F:#FFFFD0D00A0A:#00007171FFFF:#FFFF1D1D6262:#4B4BB8B8FDFD:'
- '#A0A02020F0F0:#F2F2F2F2F2F2:#4A4A45453E3E'
- ),
- 'Elio': (
- '#303030303030:#E1E132321A1A:#6A6AB0B01717:#FFFFC0C00505:#72729F9FCFCF:'
- '#ECEC00004848:#2A2AA7A7E7E7:#F2F2F2F2F2F2:#5D5D5D5D5D5D:#FFFF36361E1E:'
- '#7B7BC9C91F1F:#FFFFD0D00A0A:#00007171FFFF:#FFFF1D1D6262:#4B4BB8B8FDFD:'
- '#A0A02020F0F0:#F2F2F2F2F2F2:#04041A1A3B3B'
- ),
- 'Freya': (
- '#070736364242:#DCDC32322F2F:#858599990000:#B5B589890000:#26268B8BD2D2:'
- '#ECEC00004848:#2A2AA1A19898:#9494A3A3A5A5:#58586E6E7575:#CBCB4B4B1616:'
- '#858599990000:#B5B589890000:#26268B8BD2D2:#D3D336368282:#2A2AA1A19898:'
- '#6C6C7171C4C4:#9494A3A3A5A5:#25252E2E3232'
- ),
- 'Gruvbox Dark': (
- '#66665C5C5454:#FBFB49493434:#8383A5A59898:#D7D799992121:#B1B162628686:'
- '#454585858888:#B8B8BBBB2626:#D6D65D5D0E0E:#A8A899998484:#FBFB49493434:'
- '#8E8EC0C07C7C:#FAFABDBD2F2F:#D3D386869B9B:#68689D9D6A6A:#989897971A1A:'
- '#FEFE80801919:#EBEBDBDBB2B2:#282828282828'
- ),
- 'Hemisu Dark': (
- '#444444444444:#FFFF00005454:#B1B1D6D63030:#9D9D89895E5E:#6767BEBEE3E3:'
- '#B5B57676BCBC:#56569A9A9F9F:#EDEDEDEDEDED:#777777777777:#D6D65E5E7575:'
- '#BABAFFFFAAAA:#ECECE1E1C8C8:#9F9FD3D3E5E5:#DEDEB3B3DFDF:#B6B6E0E0E5E5:'
- '#FFFFFFFFFFFF:#FFFFFFFFFFFF:#000000000000'
- ),
- 'Hemisu Light': (
- '#777777777777:#FFFF00005555:#737391910000:#50503D3D1515:#535380809191:'
- '#5B5B34345E5E:#535380809191:#999999999999:#999999999999:#D6D65E5E7676:'
- '#9C9CC7C70000:#949475755555:#9D9DB3B3CDCD:#A1A18484A4A4:#8585B2B2AAAA:'
- '#BABABABABABA:#444444444444:#EFEFEFEFEFEF'
- ),
- 'Jup': (
- '#000000000000:#DDDD00006F6F:#6F6FDDDD0000:#DDDD6F6F0000:#00006F6FDDDD:'
- '#6F6F0000DDDD:#0000DDDD6F6F:#F2F2F2F2F2F2:#7D7D7D7D7D7D:#FFFF7474B9B9:'
- '#B9B9FFFF7474:#FFFFB9B97474:#7474B9B9FFFF:#B9B97474FFFF:#7474FFFFB9B9:'
- '#FFFFFFFFFFFF:#232347476A6A:#757584848080'
- ),
- 'Mar': (
- '#000000000000:#B5B540407B7B:#7B7BB5B54040:#B5B57B7B4040:#40407B7BB5B5:'
- '#7B7B4040B5B5:#4040B5B57B7B:#F8F8F8F8F8F8:#737373737373:#CDCD7373A0A0:'
- '#A0A0CDCD7373:#CDCDA0A07373:#7373A0A0CDCD:#A0A07373CDCD:#7373CDCDA0A0:'
- '#FFFFFFFFFFFF:#232347476A6A:#FFFFFFFFFFFF'
- ),
- 'Material': (
- '#070736364141:#EBEB60606B6B:#C3C3E8E88D8D:#F7F7EBEB9595:#8080CBCBC3C3:'
- '#FFFF24249090:#AEAEDDDDFFFF:#FFFFFFFFFFFF:#00002B2B3636:#EBEB60606B6B:'
- '#C3C3E8E88D8D:#F7F7EBEB9595:#7D7DC6C6BFBF:#6C6C7171C3C3:#343443434D4D:'
- '#FFFFFFFFFFFF:#C3C3C7C7D1D1:#1E1E28282C2C'
- ),
- 'Miu': (
- '#000000000000:#B8B87A7A7A7A:#7A7AB8B87A7A:#B8B8B8B87A7A:#7A7A7A7AB8B8:'
- '#B8B87A7AB8B8:#7A7AB8B8B8B8:#D9D9D9D9D9D9:#262626262626:#DBDBBDBDBDBD:'
- '#BDBDDBDBBDBD:#DBDBDBDBBDBD:#BDBDBDBDDBDB:#DBDBBDBDDBDB:#BDBDDBDBDBDB:'
- '#FFFFFFFFFFFF:#D9D9E6E6F2F2:#0D0D19192626'
- ),
- 'Monokai dark': (
- '#757571715E5E:#F9F926267272:#A6A6E2E22E2E:#F4F4BFBF7575:#6666D9D9EFEF:'
- '#AEAE8181FFFF:#2A2AA1A19898:#F9F9F8F8F5F5:#272728282222:#F9F926267272:'
- '#A6A6E2E22E2E:#F4F4BFBF7575:#6666D9D9EFEF:#AEAE8181FFFF:#2A2AA1A19898:'
- '#F8F8F8F8F2F2:#F8F8F8F8F2F2:#272728282222'
- ),
- 'Nep': (
- '#000000000000:#DDDD6F6F0000:#0000DDDD6F6F:#6F6FDDDD0000:#6F6F0000DDDD:'
- '#DDDD00006F6F:#00006F6FDDDD:#F2F2F2F2F2F2:#7D7D7D7D7D7D:#FFFFB9B97474:'
- '#7474FFFFB9B9:#B9B9FFFF7474:#B9B97474FFFF:#FFFF7474B9B9:#7474B9B9FFFF:'
- '#FFFFFFFFFFFF:#232347476A6A:#757584848080'
- ),
- 'One Light': (
- '#000000000000:#DADA3E3E3939:#414193933E3E:#858555550404:#31315E5EEEEE:'
- '#939300009292:#0E0E6F6FADAD:#8E8E8F8F9696:#2A2A2B2B3232:#DADA3E3E3939:'
- '#414193933E3E:#858555550404:#31315E5EEEEE:#939300009292:#0E0E6F6FADAD:'
- '#FFFFFEFEFEFE:#2A2A2B2B3232:#F8F8F8F8F8F8'
- ),
- 'Pali': (
- '#0A0A0A0A0A0A:#ABAB8F8F7474:#7474ABAB8F8F:#8F8FABAB7474:#8F8F7474ABAB:'
- '#ABAB74748F8F:#74748F8FABAB:#F2F2F2F2F2F2:#5D5D5D5D5D5D:#FFFF1D1D6262:'
- '#9C9CC3C3AFAF:#FFFFD0D00A0A:#AFAF9C9CC3C3:#FFFF1D1D6262:#4B4BB8B8FDFD:'
- '#A0A02020F0F0:#D9D9E6E6F2F2:#23232E2E3737'
- ),
- 'Peppermint': (
- '#353535353535:#E6E645456969:#8989D2D28787:#DADAB7B75252:#43439E9ECFCF:'
- '#D9D96161DCDC:#6464AAAAAFAF:#B3B3B3B3B3B3:#535353535353:#E4E485859A9A:'
- '#A2A2CCCCA1A1:#E1E1E3E38787:#6F6FBBBBE2E2:#E5E58686E7E7:#9696DCDCDADA:'
- '#DEDEDEDEDEDE:#C7C7C7C7C7C7:#000000000000'
- ),
- 'Sat': (
- '#000000000000:#DDDD00000707:#0707DDDD0000:#DDDDD6D60000:#00000707DDDD:'
- '#D6D60000DDDD:#0000DDDDD6D6:#F2F2F2F2F2F2:#7D7D7D7D7D7D:#FFFF74747878:'
- '#7878FFFF7474:#FFFFFAFA7474:#74747878FFFF:#FAFA7474FFFF:#7474FFFFFAFA:'
- '#FFFFFFFFFFFF:#232347476A6A:#757584848080'
- ),
- 'Shel': (
- '#2C2C24242323:#ABAB24246363:#6C6CA3A32323:#ABAB64642323:#2C2C6464A2A2:'
- '#6C6C2424A2A2:#2C2CA3A36363:#919189898888:#919189898888:#F5F58888B9B9:'
- '#C2C2EEEE8686:#F5F5BABA8686:#8F8FBABAECEC:#C2C28888ECEC:#8F8FEEEEB9B9:'
- '#F5F5EEEEECEC:#48488282CDCD:#2A2A20201F1F'
- ),
- 'Tin': (
- '#000000000000:#8D8D53534E4E:#4E4E8D8D5353:#88888D8D4E4E:#53534E4E8D8D:'
- '#8D8D4E4E8888:#4E4E88888D8D:#FFFFFFFFFFFF:#000000000000:#B5B57D7D7878:'
- '#7878B5B57D7D:#B0B0B5B57878:#7D7D7878B5B5:#B5B57878B0B0:#7878B0B0B5B5:'
- '#FFFFFFFFFFFF:#FFFFFFFFFFFF:#2E2E2E2E3535'
- ),
- 'Ura': (
- '#000000000000:#C2C21B1B6F6F:#6F6FC2C21B1B:#C2C26F6F1B1B:#1B1B6F6FC2C2:'
- '#6F6F1B1BC2C2:#1B1BC2C26F6F:#808080808080:#808080808080:#EEEE8484B9B9:'
- '#B9B9EEEE8484:#EEEEB9B98484:#8484B9B9EEEE:#B9B98484EEEE:#8484EEEEB9B9:'
- '#E5E5E5E5E5E5:#232347476A6A:#FEFEFFFFEEEE'
- ),
- 'Vag': (
- '#303030303030:#A8A871713939:#3939A8A87171:#7171A8A83939:#71713939A8A8:'
- '#A8A839397171:#39397171A8A8:#8A8A8A8A8A8A:#494949494949:#B0B076763B3B:'
- '#3B3BB0B07676:#7676B0B03B3B:#76763B3BB0B0:#B0B03B3B7676:#3B3B7676B0B0:'
- '#CFCFCFCFCFCF:#D9D9E6E6F2F2:#19191F1F1D1D'
+ "3024 Day": (
+ "#090903030000:#DBDB2D2D2020:#0101A2A25252:#FDFDEDED0202:#0101A0A0E4E4:"
+ "#A1A16A6A9494:#B5B5E4E4F4F4:#A5A5A2A2A2A2:#5C5C58585555:#E8E8BBBBD0D0:"
+ "#3A3A34343232:#4A4A45454343:#80807D7D7C7C:#D6D6D5D5D4D4:#CDCDABAB5353:"
+ "#F7F7F7F7F7F7:#4A4A45454343:#F7F7F7F7F7F7"
+ ),
+ "3024 Night": (
+ "#090903030000:#DBDB2D2D2020:#0101A2A25252:#FDFDEDED0202:#0101A0A0E4E4:"
+ "#A1A16A6A9494:#B5B5E4E4F4F4:#A5A5A2A2A2A2:#5C5C58585555:#E8E8BBBBD0D0:"
+ "#3A3A34343232:#4A4A45454343:#80807D7D7C7C:#D6D6D5D5D4D4:#CDCDABAB5353:"
+ "#F7F7F7F7F7F7:#A5A5A2A2A2A2:#090903030000"
+ ),
+ "Adventure Time": (
+ "#050504040404:#BCBC00001313:#4949B1B11717:#E6E674741D1D:#0F0F4949C6C6:"
+ "#666659599292:#6F6FA4A49797:#F8F8DBDBC0C0:#4E4E7B7BBFBF:#FCFC5E5E5959:"
+ "#9D9DFFFF6E6E:#EFEFC1C11A1A:#18189696C6C6:#9A9A59595252:#C8C8F9F9F3F3:"
+ "#F5F5F4F4FBFB:#F8F8DBDBC0C0:#1E1E1C1C4444"
+ ),
+ "Afterglow": (
+ "#151515151515:#ACAC41414242:#7E7E8D8D5050:#E5E5B5B56767:#6C6C9999BABA:"
+ "#9E9E4E4E8585:#7D7DD5D5CFCF:#D0D0D0D0D0D0:#505050505050:#ACAC41414242:"
+ "#7E7E8D8D5050:#E5E5B5B56666:#6C6C9999BBBB:#9E9E4E4E8585:#7D7DD5D5CFCF:"
+ "#F5F5F5F5F5F5:#D0D0D0D0D0D0:#202020202020"
+ ),
+ "Alien Blood": (
+ "#111126261515:#7F7F2B2B2626:#2F2F7E7E2525:#70707F7F2323:#2F2F69697F7F:"
+ "#474757577E7E:#31317F7F7676:#64647D7D7575:#3C3C47471111:#DFDF80800808:"
+ "#1818E0E00000:#BDBDE0E00000:#0000A9A9DFDF:#00005858DFDF:#0000DFDFC3C3:"
+ "#7373F9F99090:#63637D7D7575:#0F0F16160F0F"
+ ),
+ "Argonaut": (
+ "#222222222222:#FFFF00000F0F:#8C8CE0E00A0A:#FFFFB9B90000:#00008D8DF8F8:"
+ "#6C6C4343A5A5:#0000D7D7EBEB:#FFFFFFFFFFFF:#444444444444:#FFFF27273F3F:"
+ "#ABABE0E05A5A:#FFFFD1D14141:#00009292FFFF:#9A9A5F5FEBEB:#6767FFFFEFEF:"
+ "#FFFFFFFFFFFF:#FFFFFAFAF3F3:#0D0D0F0F1818"
+ ),
+ "Arthur": (
+ "#3D3D35352A2A:#CDCD5C5C5C5C:#8686AFAF8080:#E8E8AEAE5B5B:#64649595EDED:"
+ "#DEDEB8B88787:#B0B0C4C4DEDE:#BBBBAAAA9999:#555544444444:#CCCC55553333:"
+ "#8888AAAA2222:#FFFFA7A75D5D:#8787CECEEBEB:#999966660000:#B0B0C4C4DEDE:"
+ "#DDDDCCCCBBBB:#DDDDEEEEDDDD:#1C1C1C1C1C1C"
+ ),
+ "Atom": (
+ "#000000000000:#FCFC5E5EF0F0:#8787C3C38A8A:#FFFFD7D7B1B1:#8585BEBEFDFD:"
+ "#B9B9B5B5FCFC:#8585BEBEFDFD:#DFDFDFDFDFDF:#000000000000:#FCFC5E5EF0F0:"
+ "#9494F9F93636:#F5F5FFFFA7A7:#9696CBCBFEFE:#B9B9B5B5FCFC:#8585BEBEFDFD:"
+ "#DFDFDFDFDFDF:#C5C5C8C8C6C6:#161617171818"
+ ),
+ "Belafonte Day": (
+ "#202011111B1B:#BEBE10100E0E:#858581816262:#EAEAA5A54949:#42426A6A7979:"
+ "#979752522C2C:#98989A9A9C9C:#96968C8C8383:#5E5E52525252:#BEBE10100E0E:"
+ "#858581816262:#EAEAA5A54949:#42426A6A7979:#979752522C2C:#98989A9A9C9C:"
+ "#D5D5CCCCBABA:#454537373C3C:#D5D5CCCCBABA"
+ ),
+ "Belafonte Night": (
+ "#202011111B1B:#BEBE10100E0E:#858581816262:#EAEAA5A54949:#42426A6A7979:"
+ "#979752522C2C:#98989A9A9C9C:#96968C8C8383:#5E5E52525252:#BEBE10100E0E:"
+ "#858581816262:#EAEAA5A54949:#42426A6A7979:#979752522C2C:#98989A9A9C9C:"
+ "#D5D5CCCCBABA:#96968C8C8383:#202011111B1B"
+ ),
+ "Birdsofparadise": (
+ "#57573D3D2525:#BEBE2D2D2626:#6B6BA0A08A8A:#E9E99C9C2929:#5A5A8686ACAC:"
+ "#ABAB8080A6A6:#7474A5A5ACAC:#DFDFDADAB7B7:#9A9A6B6B4949:#E8E845452626:"
+ "#9494D7D7BABA:#D0D0D0D04F4F:#B8B8D3D3EDED:#D0D09D9DCACA:#9292CECED6D6:"
+ "#FFFFF9F9D4D4:#DFDFDADAB7B7:#2A2A1E1E1D1D"
+ ),
+ "Blazer": (
+ "#000000000000:#B8B87A7A7A7A:#7A7AB8B87A7A:#B8B8B8B87A7A:#7A7A7A7AB8B8:"
+ "#B8B87A7AB8B8:#7A7AB8B8B8B8:#D9D9D9D9D9D9:#262626262626:#DBDBBDBDBDBD:"
+ "#BDBDDBDBBDBD:#DBDBDBDBBDBD:#BDBDBDBDDBDB:#DBDBBDBDDBDB:#BDBDDBDBDBDB:"
+ "#FFFFFFFFFFFF:#D9D9E6E6F2F2:#0D0D19192626"
+ ),
+ "Bluloco": (
+ "#505050505050:#FFFF2E2E3F3F:#6F6FD6D65D5D:#FFFF6F6F2323:#34347676FFFF:"
+ "#98986161F8F8:#0000CDCDB3B3:#FFFFFCFCC2C2:#7C7C7C7C7C7C:#FFFF64648080:"
+ "#3F3FC5C56B6B:#F9F9C8C85959:#0000B1B1FEFE:#B6B68D8DFFFF:#B3B38B8B7D7D:"
+ "#FFFFFEFEE3E3:#DEDEE0E0DFDF:#262626262626"
+ ),
+ "Borland": (
+ "#4E4E4E4E4E4E:#FFFF6B6B6060:#A7A7FFFF6060:#FFFFFFFFB6B6:#9696CACAFDFD:"
+ "#FFFF7373FDFD:#C6C6C4C4FDFD:#EEEEEEEEEEEE:#7C7C7C7C7C7C:#FFFFB6B6B0B0:"
+ "#CECEFFFFABAB:#FFFFFFFFCBCB:#B5B5DCDCFEFE:#FFFF9C9CFEFE:#DFDFDFDFFEFE:"
+ "#FFFFFFFFFFFF:#FFFFFFFF4E4E:#00000000A4A4"
+ ),
+ "Broadcast": (
+ "#000000000000:#DADA49493939:#51519F9F5050:#FFFFD2D24A4A:#6D6D9C9CBEBE:"
+ "#D0D0D0D0FFFF:#6E6E9C9CBEBE:#FFFFFFFFFFFF:#323232323232:#FFFF7B7B6B6B:"
+ "#8383D1D18282:#FFFFFFFF7C7C:#9F9FCECEF0F0:#FFFFFFFFFFFF:#A0A0CECEF0F0:"
+ "#FFFFFFFFFFFF:#E6E6E1E1DCDC:#2B2B2B2B2B2B"
+ ),
+ "Brogrammer": (
+ "#1F1F1F1F1F1F:#F7F711111818:#2C2CC5C55D5D:#ECECB9B90F0F:#2A2A8484D2D2:"
+ "#4E4E5959B7B7:#0F0F8080D5D5:#D6D6DADAE4E4:#D6D6DADAE4E4:#DEDE34342E2E:"
+ "#1D1DD2D26060:#F2F2BDBD0909:#0F0F8080D5D5:#52524F4FB9B9:#0F0F7C7CDADA:"
+ "#FFFFFFFFFFFF:#D6D6DADAE4E4:#131313131313"
+ ),
+ "C64": (
+ "#090903030000:#888839393232:#5555A0A04949:#BFBFCECE7272:#404031318D8D:"
+ "#8B8B3F3F9696:#6767B6B6BDBD:#FFFFFFFFFFFF:#000000000000:#888839393232:"
+ "#5555A0A04949:#BFBFCECE7272:#404031318D8D:#8B8B3F3F9696:#6767B6B6BDBD:"
+ "#F7F7F7F7F7F7:#78786969C4C4:#404031318D8D"
+ ),
+ "Chalk": (
+ "#7C7C8A8A8F8F:#B2B23A3A5151:#78789A9A6969:#B9B9ABAB4A4A:#2A2A7F7FACAC:"
+ "#BCBC4F4F5A5A:#4444A7A79999:#D2D2D8D8D9D9:#888888888888:#F2F248484040:"
+ "#8080C4C46F6F:#FFFFEBEB6262:#40409595FFFF:#FBFB51517575:#5252CCCCBDBD:"
+ "#D2D2D8D8D9D9:#D2D2D8D8D9D9:#2B2B2C2C2E2E"
+ ),
+ "Chalkboard": (
+ "#000000000000:#C3C373737272:#7272C3C37373:#C2C2C3C37272:#73737272C3C3:"
+ "#C3C37272C2C2:#7272C2C2C3C3:#D9D9D9D9D9D9:#323232323232:#DBDBAAAAAAAA:"
+ "#AAAADBDBAAAA:#DADADBDBAAAA:#AAAAAAAADBDB:#DBDBAAAADADA:#AAAADADADBDB:"
+ "#FFFFFFFFFFFF:#D9D9E6E6F2F2:#292926262F2F"
+ ),
+ "Ciapre": (
+ "#181818181818:#808000000909:#484851513B3B:#CCCC8A8A3E3E:#56566D6D8C8C:"
+ "#72724C4C7C7C:#5B5B4F4F4A4A:#ADADA3A37E7E:#555555555555:#ABAB38383434:"
+ "#A6A6A6A65D5D:#DCDCDEDE7B7B:#2F2F9797C6C6:#D3D330306060:#F3F3DADAB1B1:"
+ "#F3F3F3F3F3F3:#ADADA3A37A7A:#18181C1C2727"
+ ),
+ "Clrs": (
+ "#000000000000:#F7F727272929:#323289895C5C:#F9F96F6F1C1C:#12125C5CCFCF:"
+ "#9F9F0000BCBC:#3232C2C2C0C0:#B2B2B2B2B2B2:#545457575353:#FBFB04041616:"
+ "#2C2CC6C63131:#FCFCD6D62727:#15156F6FFEFE:#E8E80000B0B0:#3939D5D5CECE:"
+ "#EDEDEDEDECEC:#262626262626:#FFFFFFFFFFFF"
+ ),
+ "Cobalt Neon": (
+ "#141426263030:#FFFF23232020:#3A3AA5A5FFFF:#E9E9E7E75C5C:#8F8FF5F58686:"
+ "#78781A1AA0A0:#8F8FF5F58686:#BABA4545B1B1:#FFFFF6F68888:#D4D431312E2E:"
+ "#8F8FF5F58686:#E9E9F0F06D6D:#3C3C7D7DD2D2:#82823030A7A7:#6C6CBCBC6767:"
+ "#8F8FF5F58686:#8F8FF5F58686:#141428283838"
+ ),
+ "Cobalt2": (
+ "#000000000000:#FFFF00000000:#3737DDDD2121:#FEFEE4E40909:#14146060D2D2:"
+ "#FFFF00005D5D:#0000BBBBBBBB:#BBBBBBBBBBBB:#555555555555:#F4F40D0D1717:"
+ "#3B3BCFCF1D1D:#ECECC8C80909:#55555555FFFF:#FFFF5555FFFF:#6A6AE3E3F9F9:"
+ "#FFFFFFFFFFFF:#FFFFFFFFFFFF:#121226263737"
+ ),
+ "Crayon Pony Fish": (
+ "#2A2A1A1A1C1C:#909000002A2A:#575795952323:#AAAA30301B1B:#8B8B8787AFAF:"
+ "#68682E2E5050:#E8E8A7A76666:#686852525959:#3C3C2A2A2E2E:#C5C524245C5C:"
+ "#8D8DFFFF5656:#C7C737371D1D:#CFCFC9C9FFFF:#FBFB6C6CB9B9:#FFFFCECEAEAE:"
+ "#AFAF94949D9D:#686852525959:#141406060707"
+ ),
+ "Dark Pastel": (
+ "#000000000000:#FFFF55555555:#5555FFFF5555:#FFFFFFFF5555:#55555555FFFF:"
+ "#FFFF5555FFFF:#5555FFFFFFFF:#BBBBBBBBBBBB:#555555555555:#FFFF55555555:"
+ "#5555FFFF5555:#FFFFFFFF5555:#55555555FFFF:#FFFF5555FFFF:#5555FFFFFFFF:"
+ "#FFFFFFFFFFFF:#FFFFFFFFFFFF:#000000000000"
+ ),
+ "Darkside": (
+ "#000000000000:#E8E834341C1C:#6868C2C25656:#F2F2D3D32C2C:#1C1C9898E8E8:"
+ "#8E8E6969C9C9:#1C1C9898E8E8:#BABABABABABA:#000000000000:#DFDF5A5A4F4F:"
+ "#7676B7B76868:#EEEED6D64A4A:#38387B7BD2D2:#95957B7BBDBD:#3D3D9696E2E2:"
+ "#BABABABABABA:#BABABABABABA:#222223232424"
+ ),
+ "Desert": (
+ "#4D4D4D4D4D4D:#FFFF2B2B2B2B:#9898FBFB9898:#F0F0E6E68C8C:#CDCD85853F3F:"
+ "#FFFFDEDEADAD:#FFFFA0A0A0A0:#F5F5DEDEB3B3:#555555555555:#FFFF55555555:"
+ "#5555FFFF5555:#FFFFFFFF5555:#8787CECEFFFF:#FFFF5555FFFF:#FFFFD7D70000:"
+ "#FFFFFFFFFFFF:#FFFFFFFFFFFF:#333333333333"
+ ),
+ "Dimmed Monokai": (
+ "#3A3A3C3C4343:#BEBE3E3E4848:#86869A9A3A3A:#C4C4A5A53535:#4E4E7676A1A1:"
+ "#85855B5B8D8D:#56568E8EA3A3:#B8B8BCBCB9B9:#888889898787:#FBFB00001E1E:"
+ "#0E0E71712E2E:#C3C370703333:#17176C6CE3E3:#FBFB00006767:#2D2D6F6F6C6C:"
+ "#FCFCFFFFB8B8:#B8B8BCBCB9B9:#1E1E1E1E1E1E"
+ ),
+ "Dracula": (
+ "#000000000000:#FFFF55555555:#5050FAFA7B7B:#F1F1FAFA8C8C:#BDBD9393F9F9:"
+ "#FFFF7979C6C6:#8B8BE9E9FDFD:#BBBBBBBBBBBB:#555555555555:#FFFF55555555:"
+ "#5050FAFA7B7B:#F1F1FAFA8C8C:#BDBD9393F9F9:#FFFF7979C6C6:#8B8BE9E9FDFD:"
+ "#FFFFFFFFFFFF:#F8F8F8F8F2F2:#1E1E1F1F2828"
+ ),
+ "Earthsong": (
+ "#111114141717:#C8C841413434:#8484C4C44B4B:#F4F4AEAE2E2E:#13139797B9B9:"
+ "#D0D062623C3C:#4F4F94945252:#E5E5C5C5A9A9:#66665E5E5454:#FFFF64645959:"
+ "#9797E0E03535:#DFDFD5D56161:#5E5ED9D9FFFF:#FFFF91916868:#8383EFEF8888:"
+ "#F6F6F6F6ECEC:#E5E5C6C6A8A8:#282824242020"
+ ),
+ "Elemental": (
+ "#3C3C3B3B3030:#979728280F0F:#474799994242:#7F7F71711010:#49497F7F7D7D:"
+ "#7E7E4E4E2E2E:#38387F7F5858:#808079797474:#545454544444:#DFDF50502A2A:"
+ "#6060E0E06F6F:#D6D698982727:#7878D8D8D8D8:#CDCD7C7C5353:#5858D5D59898:"
+ "#FFFFF1F1E8E8:#808079797373:#212121211C1C"
+ ),
+ "Elementary Loki": (
+ "#070736364242:#DCDC32322F2F:#858599990000:#B5B589890000:#26268B8BD2D2:"
+ "#ECEC00004848:#2A2AA1A19898:#9494A3A3A5A5:#58586E6E7575:#CBCB4B4B1616:"
+ "#858599990000:#B5B589890000:#26268B8BD2D2:#D3D336368282:#2A2AA1A19898:"
+ "#EEEEEEEEEEEE:#9494A3A3A5A5:#25252E2E3232"
+ ),
+ "Espresso Libre": (
+ "#000000000000:#CCCC00000000:#1A1A92921C1C:#EFEFE4E43A3A:#00006666FFFF:"
+ "#C5C565656B6B:#050598989A9A:#D3D3D7D7CFCF:#545457575353:#EFEF28282828:"
+ "#9A9AFFFF8787:#FFFFFAFA5C5C:#4343A8A8EDED:#FFFF80808989:#3434E2E2E2E2:"
+ "#EDEDEDEDECEC:#B8B8A8A89898:#2A2A21211C1C"
+ ),
+ "Espresso": (
+ "#343434343434:#D2D251515151:#A5A5C2C26161:#FFFFC6C66D6D:#6C6C9999BBBB:"
+ "#D1D19797D9D9:#BEBED6D6FFFF:#EEEEEEEEECEC:#535353535353:#F0F00C0C0C0C:"
+ "#C2C2E0E07575:#E1E1E3E38B8B:#8A8AB7B7D9D9:#EFEFB5B5F7F7:#DCDCF3F3FFFF:"
+ "#FFFFFFFFFFFF:#FFFFFFFFFFFF:#323232323232"
+ ),
+ "Fideloper": (
+ "#28282F2F3232:#CACA1D1D2C2C:#EDEDB7B7ABAB:#B7B7AAAA9A9A:#2E2E7878C1C1:"
+ "#C0C022226E6E:#303091918585:#E9E9E2E2CDCD:#090920202727:#D3D35F5F5A5A:"
+ "#D3D35F5F5A5A:#A8A865657171:#7C7C8484C4C4:#5B5B5D5DB2B2:#818190908F8F:"
+ "#FCFCF4F4DEDE:#DADAD9D9DFDF:#28282F2F3232"
+ ),
+ "Fishtank": (
+ "#030306063C3C:#C6C600004949:#ABABF1F15757:#FDFDCDCD5E5E:#52525F5FB8B8:"
+ "#97976F6F8181:#969686866262:#ECECEFEFFCFC:#6C6C5A5A3030:#D9D94A4A8A8A:"
+ "#DADAFFFFA8A8:#FEFEE6E6A8A8:#B1B1BDBDF9F9:#FDFDA4A4CCCC:#A4A4BCBC8686:"
+ "#F6F6FFFFECEC:#ECECEFEFFDFD:#222224243636"
+ ),
+ "Flat": (
+ "#22222D2D3F3F:#A8A823232020:#3232A5A54848:#E5E58D8D1111:#31316767ACAC:"
+ "#78781A1AA0A0:#2C2C93937070:#B0B0B6B6BABA:#21212C2C3C3C:#D4D431312E2E:"
+ "#2D2D94944040:#E5E5BEBE0C0C:#3C3C7D7DD2D2:#82823030A7A7:#3535B3B38787:"
+ "#E7E7ECECEDED:#2C2CC5C55D5D:#000022224040"
+ ),
+ "Flatland": (
+ "#1C1C1D1D1919:#F1F182823838:#9E9ED2D26464:#F3F3EFEF6D6D:#4F4F9696BEBE:"
+ "#69695A5ABBBB:#D5D538386464:#FEFEFFFFFEFE:#1C1C1D1D1919:#D1D12A2A2424:"
+ "#A7A7D3D32C2C:#FFFF89894848:#6161B8B8D0D0:#69695A5ABBBB:#D5D538386464:"
+ "#FEFEFFFFFEFE:#B8B8DADAEEEE:#1C1C1E1E2020"
+ ),
+ "Frontend Delight": (
+ "#242424242626:#F8F850501A1A:#565657574646:#F9F976761D1D:#2C2C7070B7B7:"
+ "#F0F02D2D4E4E:#3B3BA0A0A5A5:#ACACACACACAC:#5E5EACAC6C6C:#F6F643431919:"
+ "#7474EBEB4C4C:#FCFCC2C22424:#33339393C9C9:#E7E75E5E4E4E:#4E4EBCBCE5E5:"
+ "#8B8B73735A5A:#ACACACACACAC:#1B1B1B1B1D1D"
+ ),
+ "Frontend Fun Forrest": (
+ "#000000000000:#D5D525252B2B:#90909B9B0000:#BDBD8A8A1313:#46469898A2A2:"
+ "#8C8C42423131:#D9D981811212:#DDDDC1C16565:#7E7E69695454:#E4E459591B1B:"
+ "#BFBFC6C65959:#FFFFCACA1B1B:#7C7CC9C9CECE:#D1D163634949:#E6E6A9A96B6B:"
+ "#FFFFE9E9A3A3:#DDDDC1C16565:#242412120000"
+ ),
+ "Frontend Galaxy": (
+ "#000000000000:#F9F955555F5F:#2020AFAF8989:#FDFDF0F02929:#58589C9CF5F5:"
+ "#93934D4D9595:#1E1E9E9EE6E6:#BBBBBBBBBBBB:#555555555555:#FAFA8B8B8E8E:"
+ "#3434BBBB9999:#FFFFFFFF5555:#58589C9CF5F5:#E7E755559898:#39397878BBBB:"
+ "#FFFFFFFFFFFF:#FFFFFFFFFFFF:#1C1C28283636"
+ ),
+ "Github": (
+ "#3E3E3E3E3E3E:#97970B0B1616:#070796962A2A:#F8F8EEEEC7C7:#00003E3E8A8A:"
+ "#E9E946469191:#8989D1D1ECEC:#FFFFFFFFFFFF:#666666666666:#DEDE00000000:"
+ "#8787D5D5A2A2:#F1F1D0D00707:#2E2E6C6CBABA:#FFFFA2A29F9F:#1C1CFAFAFEFE:"
+ "#FFFFFFFFFFFF:#3E3E3E3E3E3E:#F4F4F4F4F4F4"
+ ),
+ "Grape": (
+ "#2D2D28283E3E:#ECEC21216060:#1F1FA9A91B1B:#8D8DDCDC1F1F:#48487C7CF4F4:"
+ "#8C8C3535C8C8:#3A3ADDDDEDED:#9E9E9E9EA0A0:#585850506A6A:#F0F071719A9A:"
+ "#5252A9A95D5D:#B2B2DCDC8787:#A9A9BBBBEBEB:#ACAC8181C1C1:#9C9CE3E3EAEA:"
+ "#A1A18888F7F7:#9E9E9E9EA0A0:#161614142323"
+ ),
+ "Grass": (
+ "#000000000000:#BBBB00000000:#0000BBBB0000:#E7E7B0B00000:#00000000A3A3:"
+ "#959500006161:#0000BBBBBBBB:#BBBBBBBBBBBB:#555555555555:#BBBB00000000:"
+ "#0000BBBB0000:#E7E7B0B00000:#00000000BBBB:#FFFF5555FFFF:#5555FFFFFFFF:"
+ "#FFFFFFFFFFFF:#FFFFF0F0A5A5:#131377773C3C"
+ ),
+ "Hardcore": (
+ "#1B1B1D1D1E1E:#F9F926267272:#A6A6E2E22E2E:#FDFD97971F1F:#6666D9D9EFEF:"
+ "#9E9E6F6FFEFE:#5E5E71717575:#CCCCCCCCC6C6:#505053535454:#FFFF66669D9D:"
+ "#BEBEEDED5F5F:#E6E6DBDB7474:#6666D9D9EFEF:#9E9E6F6FFEFE:#A3A3BABABFBF:"
+ "#F8F8F8F8F2F2:#A0A0A0A0A0A0:#121212121212"
+ ),
+ "Harper": (
+ "#010101010101:#F8F8B6B63F3F:#7F7FB5B5E1E1:#D6D6DADA2525:#48489E9E4848:"
+ "#B2B29696C6C6:#F5F5BFBFD7D7:#A8A8A4A49D9D:#72726E6E6A6A:#F8F8B6B63F3F:"
+ "#7F7FB5B5E1E1:#D6D6DADA2525:#48489E9E4848:#B2B29696C6C6:#F5F5BFBFD7D7:"
+ "#FEFEFBFBEAEA:#A8A8A4A49D9D:#010101010101"
+ ),
+ "Highway": (
+ "#000000000000:#CFCF0D0D1717:#121280803333:#FFFFCACA3D3D:#00006A6AB3B3:"
+ "#6A6A26267474:#383845456363:#EDEDEDEDEDED:#5C5C4F4F4949:#EFEF7D7D1717:"
+ "#B1B1D1D13030:#FFFFF1F11F1F:#4F4FC2C2FDFD:#DEDE00007070:#5C5C4F4F4949:"
+ "#FEFEFFFFFEFE:#EDEDEDEDEDED:#212122222424"
+ ),
+ "Hipster Green": (
+ "#000000000000:#B6B620204A4A:#0000A6A60000:#BEBEBEBE0000:#24246D6DB2B2:"
+ "#B2B20000B2B2:#0000A6A6B2B2:#BFBFBFBFBFBF:#666666666666:#E5E500000000:"
+ "#8686A8A83E3E:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:"
+ "#E5E5E5E5E5E5:#8484C1C13737:#0F0F0A0A0505"
+ ),
+ "Homebrew": (
+ "#000000000000:#999900000000:#0000A6A60000:#999999990000:#00000000B2B2:"
+ "#B2B20000B2B2:#0000A6A6B2B2:#BFBFBFBFBFBF:#666666666666:#E5E500000000:"
+ "#0000D9D90000:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:"
+ "#E5E5E5E5E5E5:#0000FFFF0000:#000000000000"
+ ),
+ "Hurtado": (
+ "#575757575757:#FFFF1B1B0000:#A5A5DFDF5555:#FBFBE7E74A4A:#484863638787:"
+ "#FCFC5E5EF0F0:#8585E9E9FEFE:#CBCBCBCBCBCB:#252525252525:#D4D41C1C0000:"
+ "#A5A5DFDF5555:#FBFBE7E74949:#8989BDBDFFFF:#BFBF0000C0C0:#8585E9E9FEFE:"
+ "#DBDBDBDBDBDB:#DADADBDBDADA:#000000000000"
+ ),
+ "Hybrid": (
+ "#2A2A2E2E3333:#B7B74D4D5050:#B3B3BEBE5A5A:#E3E3B5B55E5E:#6D6D9090B0B0:"
+ "#A0A07E7EABAB:#7F7FBEBEB3B3:#B5B5B8B8B6B6:#1D1D1E1E2121:#8C8C2D2D3232:"
+ "#787883833131:#E5E589894F4F:#4B4B6B6B8888:#6E6E4F4F7979:#4D4D7B7B7373:"
+ "#5A5A61616969:#B7B7BCBCB9B9:#161617171818"
+ ),
+ "Ic Green Ppl": (
+ "#1E1E1E1E1E1E:#FBFB00002929:#32329B9B2424:#64649A9A2525:#14149B9B4545:"
+ "#5353B8B82B2B:#2B2BB7B76767:#DFDFFEFEEEEE:#030326260F0F:#A6A6FFFF3E3E:"
+ "#9F9FFFFF6D6D:#D1D1FFFF6D6D:#7272FFFFB5B5:#5050FFFF3D3D:#2222FFFF7171:"
+ "#DADAEEEED0D0:#D9D9EEEED2D2:#3A3A3C3C3E3E"
+ ),
+ "Ic Orange Ppl": (
+ "#000000000000:#C0C039390000:#A3A3A9A90000:#CACAAEAE0000:#BDBD6C6C0000:"
+ "#FBFB5D5D0000:#F7F794940000:#FFFFC8C88A8A:#6A6A4E4E2929:#FFFF8B8B6767:"
+ "#F6F6FFFF3F3F:#FFFFE3E36E6E:#FFFFBDBD5454:#FCFC87874F4F:#C5C597975252:"
+ "#F9F9F9F9FEFE:#FFFFCBCB8383:#262626262626"
+ ),
+ "Idle Toes": (
+ "#323232323232:#D2D252525252:#7F7FE1E17373:#FFFFC6C66D6D:#40409898FFFF:"
+ "#F5F57F7FFFFF:#BEBED6D6FFFF:#EEEEEEEEECEC:#535353535353:#F0F070707070:"
+ "#9D9DFFFF9090:#FFFFE4E48B8B:#5E5EB7B7F7F7:#FFFF9D9DFFFF:#DCDCF4F4FFFF:"
+ "#FFFFFFFFFFFF:#FFFFFFFFFFFF:#323232323232"
+ ),
+ "Ir Black": (
+ "#4F4F4F4F4F4F:#FAFA6C6C5F5F:#A8A8FEFE6060:#FFFFFEFEB6B6:#9696CACAFDFD:"
+ "#FAFA7272FCFC:#C6C6C4C4FDFD:#EEEEEDEDEEEE:#7B7B7B7B7B7B:#FCFCB6B6AFAF:"
+ "#CECEFFFFABAB:#FFFFFEFECCCC:#B5B5DCDCFEFE:#FBFB9B9BFEFE:#DFDFDFDFFDFD:"
+ "#FEFEFFFFFEFE:#F1F1F1F1F1F1:#000000000000"
+ ),
+ "Jackie Brown": (
+ "#2C2C1D1D1616:#EFEF57573434:#2B2BAFAF2B2B:#BDBDBEBE0000:#24246D6DB2B2:"
+ "#CFCF5E5EC0C0:#0000ACACEEEE:#BFBFBFBFBFBF:#666666666666:#E5E500000000:"
+ "#8686A8A83E3E:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:"
+ "#E5E5E5E5E5E5:#FFFFCCCC2F2F:#2C2C1C1C1515"
+ ),
+ "Japanesque": (
+ "#343438383535:#CECE3E3E6060:#7B7BB7B75B5B:#E8E8B3B32A2A:#4C4C9999D3D3:"
+ "#A5A57F7FC4C4:#38389A9AACAC:#F9F9FAFAF6F6:#58585A5A5858:#D1D18E8EA6A6:"
+ "#76767E7E2B2B:#777759592E2E:#131358587979:#5F5F41419090:#7676BBBBCACA:"
+ "#B1B1B5B5AEAE:#F7F7F6F6ECEC:#1D1D1D1D1D1D"
+ ),
+ "Jellybeans": (
+ "#929292929292:#E2E273737373:#9393B9B97979:#FFFFBABA7B7B:#9797BEBEDCDC:"
+ "#E1E1C0C0FAFA:#000098988E8E:#DEDEDEDEDEDE:#BDBDBDBDBDBD:#FFFFA1A1A1A1:"
+ "#BDBDDEDEABAB:#FFFFDCDCA0A0:#B1B1D8D8F6F6:#FBFBDADAFFFF:#1A1AB2B2A8A8:"
+ "#FFFFFFFFFFFF:#DEDEDEDEDEDE:#121212121212"
+ ),
+ "Kibble": (
+ "#4D4D4D4D4D4D:#C7C700003131:#2929CFCF1313:#D8D8E3E30E0E:#34344949D1D1:"
+ "#84840000FFFF:#07079898ABAB:#E2E2D1D1E3E3:#5A5A5A5A5A5A:#F0F015157878:"
+ "#6C6CE0E05C5C:#F3F3F7F79E9E:#9797A4A4F7F7:#C4C49595F0F0:#6868F2F2E0E0:"
+ "#FFFFFFFFFFFF:#F7F7F7F7F7F7:#0E0E10100A0A"
+ ),
+ "Later This Evening": (
+ "#2B2B2B2B2B2B:#D3D35A5A5F5F:#AFAFBABA6666:#E5E5D2D28989:#A0A0B9B9D5D5:"
+ "#BFBF9292D5D5:#9191BEBEB6B6:#3B3B3C3C3C3C:#444447474747:#D3D322222E2E:"
+ "#AAAABBBB3939:#E4E4BDBD3939:#65659999D5D5:#AAAA5252D5D5:#5F5FBFBFADAD:"
+ "#C0C0C2C2C2C2:#949494949494:#212121212121"
+ ),
+ "Lavandula": (
+ "#232300004545:#7C7C15152525:#33337E7E6F6F:#7F7F6F6F4949:#4F4F4A4A7F7F:"
+ "#59593F3F7E7E:#575776767F7F:#73736E6E7D7D:#37372C2C4646:#DFDF50506666:"
+ "#5252E0E0C4C4:#E0E0C2C28686:#8E8E8686DFDF:#A6A67575DFDF:#9A9AD3D3DFDF:"
+ "#8C8C9191FAFA:#73736E6E7D7D:#050500001414"
+ ),
+ "Linux Console": (
+ "#000000000000:#aaaa00000000:#0000aaaa0000:#aaaa55550000:#00000000aaaa:"
+ "#aaaa0000aaaa:#0000aaaaaaaa:#aaaaaaaaaaaa:#555555555556:#ffff55555555:"
+ "#5555ffff5555:#ffffffff5555:#55555555ffff:#ffff5555ffff:#5555ffffffff:"
+ "#ffffffffffff:#ffffffffffff:#000000000000"
+ ),
+ "Liquid Carbon Transparent": (
+ "#000000000000:#FFFF2F2F2F2F:#54549A9A6F6F:#CCCCACAC0000:#00009999CCCC:"
+ "#CCCC6868C8C8:#7979C4C4CCCC:#BCBCCCCCCCCC:#000000000000:#FFFF2F2F2F2F:"
+ "#54549A9A6F6F:#CCCCACAC0000:#00009999CCCC:#CCCC6868C8C8:#7979C4C4CCCC:"
+ "#BCBCCCCCCCCC:#AFAFC2C2C2C2:#000000000000"
+ ),
+ "Liquid Carbon": (
+ "#000000000000:#FFFF2F2F2F2F:#54549A9A6F6F:#CCCCACAC0000:#00009999CCCC:"
+ "#CCCC6868C8C8:#7979C4C4CCCC:#BCBCCCCCCCCC:#000000000000:#FFFF2F2F2F2F:"
+ "#54549A9A6F6F:#CCCCACAC0000:#00009999CCCC:#CCCC6868C8C8:#7979C4C4CCCC:"
+ "#BCBCCCCCCCCC:#AFAFC2C2C2C2:#2F2F2F2F2F2F"
+ ),
+ "Lucario": (
+ "#4E4E4E4E4E4E:#FFFF6B6B6060:#FAFAB0B03636:#FFFFFFFFB6B6:#56569696EDED:"
+ "#FFFF7373FDFD:#8E8EE4E47878:#EEEEEEEEEEEE:#4F4F4F4F4F4F:#F9F968686060:"
+ "#FAFAB0B03636:#FDFDFFFFB8B8:#6B6B9F9FEDED:#FCFC6E6EF9F9:#8E8EE4E47878:"
+ "#FFFFFFFFFFFF:#F8F8F8F8F2F2:#2B2B3E3E5050"
+ ),
+ "Man Page": (
+ "#000000000000:#CCCC00000000:#0000A6A60000:#999999990000:#00000000B2B2:"
+ "#B2B20000B2B2:#0000A6A6B2B2:#CCCCCCCCCCCC:#666666666666:#E5E500000000:"
+ "#0000D9D90000:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:"
+ "#E5E5E5E5E5E5:#000000000000:#FEFEF4F49C9C"
+ ),
+ "Mathias": (
+ "#000000000000:#E5E522222222:#A6A6E3E32D2D:#FCFC95951E1E:#C4C48D8DFFFF:"
+ "#FAFA25257373:#6767D9D9F0F0:#F2F2F2F2F2F2:#555555555555:#FFFF55555555:"
+ "#5555FFFF5555:#FFFFFFFF5555:#55555555FFFF:#FFFF5555FFFF:#5555FFFFFFFF:"
+ "#FFFFFFFFFFFF:#BBBBBBBBBBBB:#000000000000"
+ ),
+ "Medallion": (
+ "#000000000000:#B5B54C4C0000:#7C7C8A8A1616:#D2D2BDBD2525:#60606B6BAFAF:"
+ "#8B8B59599090:#90906B6B2525:#C9C9C1C19999:#5E5E51511818:#FFFF91914848:"
+ "#B1B1C9C93A3A:#FFFFE4E44949:#ABABB8B8FFFF:#FEFE9F9FFFFF:#FFFFBBBB5151:"
+ "#FEFED5D59797:#CACAC2C29696:#1D1D18180808"
+ ),
+ "Misterioso": (
+ "#000000000000:#FFFF42424242:#7474AFAF6868:#FFFFADAD2929:#33338F8F8686:"
+ "#94941313E5E5:#2323D7D7D7D7:#E1E1E1E1E0E0:#555555555555:#FFFF32324242:"
+ "#7474CDCD6868:#FFFFB9B92929:#2323D7D7D7D7:#FFFF3737FFFF:#0000EDEDE1E1:"
+ "#FFFFFFFFFFFF:#E1E1E1E1E0E0:#2D2D37374343"
+ ),
+ "Molokai": (
+ "#121212121212:#FAFA25257373:#9797E1E12323:#DFDFD4D46060:#0F0F7F7FCFCF:"
+ "#87870000FFFF:#4242A7A7CFCF:#BBBBBBBBBBBB:#555555555555:#F5F566669C9C:"
+ "#B0B0E0E05E5E:#FEFEF2F26C6C:#0000AFAFFFFF:#AFAF8787FFFF:#5050CDCDFEFE:"
+ "#FFFFFFFFFFFF:#BBBBBBBBBBBB:#121212121212"
+ ),
+ "Mona Lisa": (
+ "#34341A1A0D0D:#9B9B28281B1B:#626261613232:#C2C26E6E2727:#51515B5B5C5C:"
+ "#9B9B1D1D2929:#585880805656:#F6F6D7D75C5C:#878742422727:#FFFF42423030:"
+ "#B3B3B1B16363:#FFFF95956565:#9E9EB2B2B3B3:#FFFF5B5B6A6A:#8989CCCC8E8E:"
+ "#FFFFE5E59797:#F6F6D5D56A6A:#11110B0B0D0D"
+ ),
+ "Monokai Cobalt2": (
+ "#1C1C1D1D1919:#D0D01B1B2424:#A7A7D3D32C2C:#D8D8CFCF6767:#6161B8B8D0D0:"
+ "#69695A5ABBBB:#D5D538386464:#FEFEFFFFFEFE:#1C1C1D1D1919:#D0D01B1B2424:"
+ "#A7A7D3D32C2C:#D8D8CFCF6767:#6161B8B8D0D0:#69695A5ABBBB:#D5D538386464:"
+ "#FEFEFFFFFEFE:#FFFFFFFFFFFF:#121226263737"
+ ),
+ "Monokai Soda": (
+ "#191919191919:#F3F300005F5F:#9797E0E02323:#FAFA84841919:#9C9C6464FEFE:"
+ "#F3F300005F5F:#5757D1D1EAEA:#C4C4C4C4B5B5:#61615E5E4B4B:#F3F300005F5F:"
+ "#9797E0E02323:#DFDFD5D56161:#9C9C6464FEFE:#F3F300005F5F:#5757D1D1EAEA:"
+ "#F6F6F6F6EEEE:#C4C4C4C4B5B5:#191919191919"
+ ),
+ "Monokai": (
+ "#1C1C1D1D1919:#D0D01B1B2424:#A7A7D3D32C2C:#D8D8CFCF6767:#6161B8B8D0D0:"
+ "#69695A5ABBBB:#D5D538386464:#FEFEFFFFFEFE:#1C1C1D1D1919:#D0D01B1B2424:"
+ "#A7A7D3D32C2C:#D8D8CFCF6767:#6161B8B8D0D0:#69695A5ABBBB:#D5D538386464:"
+ "#FEFEFFFFFEFE:#F6F6F5F5EEEE:#232325252626"
+ ),
+ "N0tch2k": (
+ "#383838383838:#A9A955555151:#666666666666:#A9A980805151:#65657D7D3E3E:"
+ "#767676767676:#C9C9C9C9C9C9:#D0D0B8B8A3A3:#474747474747:#A9A977777575:"
+ "#8C8C8C8C8C8C:#A9A991917575:#9898BDBD5E5E:#A3A3A3A3A3A3:#DCDCDCDCDCDC:"
+ "#D8D8C8C8BBBB:#A0A0A0A0A0A0:#222222222222"
+ ),
+ "Neopolitan": (
+ "#000000000000:#808000000000:#6161CECE3C3C:#FBFBDEDE2D2D:#25253B3B7676:"
+ "#FFFF00008080:#8D8DA6A6CECE:#F8F8F8F8F8F8:#000000000000:#808000000000:"
+ "#6161CECE3C3C:#FBFBDEDE2D2D:#25253B3B7676:#FFFF00008080:#8D8DA6A6CECE:"
+ "#F8F8F8F8F8F8:#FFFFFFFFFFFF:#27271F1F1919"
+ ),
+ "Neutron": (
+ "#222225252B2B:#B5B53F3F3636:#5A5AB9B97777:#DDDDB5B56666:#6A6A7B7B9292:"
+ "#A3A379799D9D:#3F3F9393A8A8:#E6E6E8E8EEEE:#222225252B2B:#B5B53F3F3636:"
+ "#5A5AB9B97777:#DDDDB5B56666:#6A6A7B7B9292:#A3A379799D9D:#3F3F9393A8A8:"
+ "#EBEBEDEDF2F2:#E6E6E8E8EEEE:#1B1B1D1D2222"
+ ),
+ "Nightlion V1": (
+ "#4C4C4C4C4C4C:#BBBB00000000:#5E5EDEDE8F8F:#F2F2F0F06767:#26266A6AD7D7:"
+ "#BBBB0000BBBB:#0000D9D9DFDF:#BBBBBBBBBBBB:#555555555555:#FFFF55555555:"
+ "#5555FFFF5555:#FFFFFFFF5555:#55555555FFFF:#FFFF5555FFFF:#5555FFFFFFFF:"
+ "#FFFFFFFFFFFF:#BBBBBBBBBBBB:#000000000000"
+ ),
+ "Nightlion V2": (
+ "#4C4C4C4C4C4C:#BBBB00000000:#0303F6F62222:#F2F2F0F06767:#6363D0D0F0F0:"
+ "#CECE6F6FDADA:#0000D9D9DFDF:#BBBBBBBBBBBB:#555555555555:#FFFF55555555:"
+ "#7D7DF6F61C1C:#FFFFFFFF5555:#6262CACAE7E7:#FFFF9A9AF5F5:#0000CCCCD7D7:"
+ "#FFFFFFFFFFFF:#BBBBBBBBBBBB:#171717171717"
+ ),
+ "Nord": (
+ "#3B3B42425252:#BFBF61616A6A:#A3A3BEBE8C8C:#EBEBCBCB8B8B:#8181A1A1C1C1:"
+ "#B4B48E8EADAD:#8888C0C0D0D0:#E5E5E9E9F0F0:#4C4C56566A6A:#BFBF61616A6A:"
+ "#A3A3BEBE8C8C:#EBEBCBCB8B8B:#8181A1A1C1C1:#B4B48E8EADAD:#8F8FBCBCBBBB:"
+ "#ECECEFEFF4F4:#D8D8DEDEE9E9:#2E2E34344040"
+ ),
+ "Novel": (
+ "#000000000000:#CCCC00000000:#000096960000:#D0D06B6B0000:#00000000CCCC:"
+ "#CCCC0000CCCC:#00008787CCCC:#CCCCCCCCCCCC:#7F7F7F7F7F7F:#CCCC00000000:"
+ "#000096960000:#D0D06B6B0000:#00000000CCCC:#CCCC0000CCCC:#00008686CBCB:"
+ "#FFFFFFFFFFFF:#3B3B23232222:#DFDFDBDBC3C3"
+ ),
+ "Obsidian": (
+ "#000000000000:#A5A500000101:#0000BBBB0000:#FEFECCCC2222:#39399B9BDADA:"
+ "#BBBB0000BBBB:#0000BBBBBBBB:#BBBBBBBBBBBB:#555555555555:#FFFF00000303:"
+ "#9292C7C76363:#FEFEF7F77373:#A0A0D6D6FFFF:#FFFF5555FFFF:#5555FFFFFFFF:"
+ "#FFFFFFFFFFFF:#CCCCCCCCCCCC:#272730303232"
+ ),
+ "Ocean": (
+ "#000000000000:#999900000000:#0000A6A60000:#999999990000:#00000000B2B2:"
+ "#B2B20000B2B2:#0000A6A6B2B2:#BFBFBFBFBFBF:#666666666666:#E5E500000000:"
+ "#0000D9D90000:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:"
+ "#E5E5E5E5E5E5:#FFFFFFFFFFFF:#22224F4FBCBC"
+ ),
+ "Ocean Dark": (
+ "#2B2B30303B3B:#BFBF61616A6A:#A3A3BEBE8C8C:#EBEBCBCB8B8B:#8F8FA1A1B3B3:"
+ "#B4B48E8EADAD:#9696B5B5B4B4:#C0C0C5C5CECE:#656573737E7E:#BFBF61616A6A:"
+ "#A3A3BEBE8C8C:#EBEBCBCB8B8B:#8F8FA1A1B3B3:#B4B48E8EADAD:#9696B5B5B4B4:"
+ "#EFEFF1F1F5F5:#C0C0C5C5CECE:#2B2B30303B3B"
+ ),
+ "Ocean Light": (
+ "#EFEFF1F1F5F5:#BFBF61616A6A:#A3A3BEBE8C8C:#EBEBCBCB8B8B:#8F8FA1A1B3B3:"
+ "#B4B48E8EADAD:#9696B5B5B4B4:#C0C0C5C5CECE:#656573737E7E:#BFBF61616A6A:"
+ "#A3A3BEBE8C8C:#EBEBCBCB8B8B:#8F8FA1A1B3B3:#B4B48E8EADAD:#9696B5B5B4B4:"
+ "#2B2B30303B3B:#4F4F5B5B6666:#EFEFF1F1F5F5"
+ ),
+ "Oceanic Next Dark": (
+ "#1B1B2B2B3434:#ECEC5f5f6767:#9999C7C79494:#FAFAC8C86363:#66669999CCCC:"
+ "#C5C59494C5C5:#5F5FB3B3B3B3:#C0C0C5C5CECE:#656573737E7E:#ECEC5f5f6767:"
+ "#9999C7C79494:#FAFAC8C86363:#66669999CCCC:#C5C59494C5C5:#5F5FB3B3B3B3:"
+ "#D8D8DEDEE9E9:#C0C0C5C5CECE:#1B1B2B2B3434"
+ ),
+ "Oceanic Next Light": (
+ "#D8D8DEDEE9E9:#ECEC5f5f6767:#9999C7C79494:#FAFAC8C86363:#66669999CCCC:"
+ "#C5C59494C5C5:#5F5FB3B3B3B3:#C0C0C5C5CECE:#656573737E7E:#ECEC5f5f6767:"
+ "#9999C7C79494:#FAFAC8C86363:#66669999CCCC:#C5C59494C5C5:#5F5FB3B3B3B3:"
+ "#1B1B2B2B3434:#4F4F5B5B6666:#D8D8DEDEE9E9"
+ ),
+ "Ollie": (
+ "#000000000000:#ABAB2E2E3030:#3131ABAB6060:#ABAB42420000:#2C2C5656ABAB:"
+ "#AFAF84842727:#1F1FA5A5ABAB:#8A8A8D8DABAB:#5A5A36362525:#FFFF3D3D4848:"
+ "#3B3BFFFF9999:#FFFF5E5E1E1E:#44448787FFFF:#FFFFC2C21C1C:#1E1EFAFAFFFF:"
+ "#5B5B6D6DA7A7:#8A8A8D8DAEAE:#212120202424"
+ ),
+ "One Dark": (
+ "#000000000000:#B0B058586969:#7676A6A66565:#CFCFB0B07373:#4A4AA4A4B8B8:"
+ "#A1A16565C1C1:#4A4AA4A4B8B8:#B1B1B1B1B1B1:#4C4C57577272:#B0B058586969:"
+ "#7676A6A66565:#CFCFB0B07373:#4A4AA4A4B8B8:#A1A16565C1C1:#4A4AA4A4B8B8:"
+ "#DEDEDEDEDEDE:#4C4C57577171:#171718181C1C"
+ ),
+ "Paul Millr": (
+ "#2A2A2A2A2A2A:#FFFF00000000:#7979FFFF0F0F:#E7E7BFBF0000:#38386B6BD7D7:"
+ "#B3B34949BEBE:#6666CCCCFFFF:#BBBBBBBBBBBB:#666666666666:#FFFF00008080:"
+ "#6666FFFF6666:#F3F3D6D64E4E:#70709A9AEDED:#DBDB6767E6E6:#7979DFDFF2F2:"
+ "#FFFFFFFFFFFF:#F2F2F2F2F2F2:#000000000000"
+ ),
+ "Pencil Dark": (
+ "#212121212121:#C3C307077171:#1010A7A77878:#A8A89C9C1414:#00008E8EC4C4:"
+ "#52523C3C7979:#2020A5A5BABA:#D9D9D9D9D9D9:#424242424242:#FBFB00007A7A:"
+ "#5F5FD7D7AFAF:#F3F3E4E43030:#2020BBBBFCFC:#68685555DEDE:#4F4FB8B8CCCC:"
+ "#F1F1F1F1F1F1:#F1F1F1F1F1F1:#212121212121"
+ ),
+ "Pencil Light": (
+ "#212121212121:#C3C307077171:#1010A7A77878:#A8A89C9C1414:#00008E8EC4C4:"
+ "#52523C3C7979:#2020A5A5BABA:#D9D9D9D9D9D9:#424242424242:#FBFB00007A7A:"
+ "#5F5FD7D7AFAF:#F3F3E4E43030:#2020BBBBFCFC:#68685555DEDE:#4F4FB8B8CCCC:"
+ "#F1F1F1F1F1F1:#424242424242:#F1F1F1F1F1F1"
+ ),
+ "Pnevma": (
+ "#2F2F2E2E2D2D:#A3A366666666:#9090A5A57D7D:#D7D7AFAF8787:#7F7FA5A5BDBD:"
+ "#C7C79E9EC4C4:#8A8ADBDBB4B4:#D0D0D0D0D0D0:#4A4A48484545:#D7D787878787:"
+ "#AFAFBEBEA2A2:#E4E4C9C9AFAF:#A1A1BDBDCECE:#D7D7BEBEDADA:#B1B1E7E7DDDD:"
+ "#EFEFEFEFEFEF:#D0D0D0D0D0D0:#1C1C1C1C1C1C"
+ ),
+ "Pro": (
+ "#000000000000:#999900000000:#0000A6A60000:#999999990000:#1F1F0808DBDB:"
+ "#B2B20000B2B2:#0000A6A6B2B2:#BFBFBFBFBFBF:#666666666666:#E5E500000000:"
+ "#0000D9D90000:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:"
+ "#E5E5E5E5E5E5:#F2F2F2F2F2F2:#000000000000"
+ ),
+ "Red Alert": (
+ "#000000000000:#D5D52E2E4D4D:#7171BEBE6B6B:#BEBEB8B86B6B:#47479B9BEDED:"
+ "#E8E87878D6D6:#6B6BBEBEB8B8:#D6D6D6D6D6D6:#262626262626:#E0E024245353:"
+ "#AFAFF0F08B8B:#DFDFDDDDB7B7:#6565A9A9F0F0:#DDDDB7B7DFDF:#B7B7DFDFDDDD:"
+ "#FFFFFFFFFFFF:#FFFFFFFFFFFF:#767624242323"
+ ),
+ "Red Sands": (
+ "#000000000000:#FFFF3F3F0000:#0000BBBB0000:#E7E7B0B00000:#00007171FFFF:"
+ "#BBBB0000BBBB:#0000BBBBBBBB:#BBBBBBBBBBBB:#555555555555:#BBBB00000000:"
+ "#0000BBBB0000:#E7E7B0B00000:#00007171AEAE:#FFFF5555FFFF:#5555FFFFFFFF:"
+ "#FFFFFFFFFFFF:#D7D7C9C9A7A7:#797924241E1E"
+ ),
+ "Rippedcasts": (
+ "#000000000000:#CDCDAFAF9595:#A7A7FFFF6060:#BFBFBBBB1F1F:#7575A5A5B0B0:"
+ "#FFFF7373FDFD:#595964647E7E:#BFBFBFBFBFBF:#666666666666:#EEEECBCBADAD:"
+ "#BCBCEEEE6868:#E5E5E5E50000:#8686BDBDC9C9:#E5E50000E5E5:#8C8C9B9BC3C3:"
+ "#E5E5E5E5E5E5:#FFFFFFFFFFFF:#2B2B2B2B2B2B"
+ ),
+ "Royal": (
+ "#24241F1F2A2A:#909027274B4B:#232380801C1C:#B4B49D9D2727:#64648080AFAF:"
+ "#66664D4D9696:#8A8AAAAABDBD:#515149496565:#31312D2D3C3C:#D4D434346C6C:"
+ "#2C2CD8D84545:#FDFDE8E83A3A:#8F8FB9B9F9F9:#A4A47979E2E2:#ABABD3D3EBEB:"
+ "#9D9D8B8BBDBD:#505048486868:#101008081414"
+ ),
+ "Rxvt": (
+ "#000000000000:#cdcd00000000:#0000cdcd0000:#cdcdcdcd0000:#00000000cdcd:"
+ "#cdcd0000cdcd:#0000cdcdcdcd:#fafaebebd7d7:#404040404040:#ffff00000000:"
+ "#0000ffff0000:#ffffffff0000:#00000000ffff:#ffff0000ffff:#0000ffffffff:"
+ "#ffffffffffff:#ffffffffffff:#000000000000"
+ ),
+ "Sea Shells": (
+ "#171738384C4C:#D1D150502323:#02027C7C9B9B:#FCFCA0A02F2F:#1E1E49495050:"
+ "#6868D3D3F1F1:#5050A3A3B5B5:#DEDEB8B88D8D:#42424B4B5252:#D3D386867777:"
+ "#61618C8C9898:#FDFDD2D29E9E:#1B1BBCBCDDDD:#BBBBE3E3EEEE:#8686ABABB3B3:"
+ "#FEFEE3E3CDCD:#DEDEB8B88D8D:#080813131A1A"
+ ),
+ "Seafoam Pastel": (
+ "#757575757575:#82825D5D4D4D:#71718C8C6161:#ADADA1A16D6D:#4D4D7B7B8282:"
+ "#8A8A71716767:#717193939393:#E0E0E0E0E0E0:#8A8A8A8A8A8A:#CFCF93937979:"
+ "#9898D9D9AAAA:#FAFAE7E79D9D:#7979C3C3CFCF:#D6D6B2B2A1A1:#ADADE0E0E0E0:"
+ "#E0E0E0E0E0E0:#D3D3E7E7D3D3:#242434343434"
+ ),
+ "Seti": (
+ "#323232323232:#C2C228283232:#8E8EC4C43D3D:#E0E0C6C64F4F:#4343A5A5D5D5:"
+ "#8B8B5757B5B5:#8E8EC4C43D3D:#EEEEEEEEEEEE:#323232323232:#C2C228283232:"
+ "#8E8EC4C43D3D:#E0E0C6C64F4F:#4343A5A5D5D5:#8B8B5757B5B5:#8E8EC4C43D3D:"
+ "#FFFFFFFFFFFF:#CACACECECDCD:#111112121313"
+ ),
+ "Shaman": (
+ "#010120202626:#B1B12F2F2C2C:#0000A9A94040:#5D5D8A8AA9A9:#444499998585:"
+ "#000059599C9C:#5C5C7E7E1919:#404055555454:#373743435050:#FFFF42424242:"
+ "#2A2AEAEA5E5E:#8D8DD3D3FDFD:#6161D4D4B9B9:#12129898FFFF:#9898CFCF2828:"
+ "#5858FAFAD6D6:#404055555555:#000010101414"
+ ),
+ "Slate": (
+ "#212121212121:#E1E1A7A7BFBF:#8080D7D77878:#C4C4C9C9BFBF:#25254A4A4949:"
+ "#A3A38080D3D3:#1414ABAB9C9C:#0202C4C4E0E0:#FFFFFFFFFFFF:#FFFFCCCCD8D8:"
+ "#BDBDFFFFA8A8:#D0D0CBCBC9C9:#7979AFAFD2D2:#C4C4A7A7D8D8:#8B8BDEDEE0E0:"
+ "#E0E0E0E0E0E0:#3434B0B0D2D2:#212121212121"
+ ),
+ "Smyck": (
+ "#000000000000:#B7B741413131:#7D7DA9A90000:#C4C4A4A40000:#6262A3A3C4C4:"
+ "#B9B98A8ACCCC:#202073738383:#A0A0A0A0A0A0:#7A7A7A7A7A7A:#D6D683837B7B:"
+ "#C4C4F0F03636:#FEFEE1E14D4D:#8D8DCFCFF0F0:#F7F79999FFFF:#6969D9D9CFCF:"
+ "#F7F7F7F7F7F7:#F7F7F7F7F7F7:#1B1B1B1B1B1B"
+ ),
+ "Soft Server": (
+ "#000000000000:#A1A168686969:#9999A5A56969:#A2A290906969:#6A6A8F8FA3A3:"
+ "#69697171A3A3:#6B6BA4A48F8F:#9999A3A3A2A2:#66666C6C6B6B:#DCDC5B5B5F5F:"
+ "#BFBFDEDE5454:#DEDEB3B35F5F:#6262B1B1DFDF:#5F5F6E6EDEDE:#6464E3E39C9C:"
+ "#D1D1DFDFDEDE:#9999A3A3A2A2:#242426262626"
+ ),
+ "Solarized Darcula": (
+ "#252529292A2A:#F2F248484040:#626296965555:#B6B688880000:#20207575C7C7:"
+ "#79797F7FD4D4:#151596968D8D:#D2D2D8D8D9D9:#252529292A2A:#F2F248484040:"
+ "#626296965555:#B6B688880000:#20207575C7C7:#79797F7FD4D4:#151596968D8D:"
+ "#D2D2D8D8D9D9:#D2D2D8D8D9D9:#3D3D3F3F4141"
+ ),
+ "Solarized Dark Higher Contrast": (
+ "#000027273131:#D0D01B1B2424:#6B6BBEBE6C6C:#A5A577770505:#20207575C7C7:"
+ "#C6C61B1B6E6E:#252591918585:#E9E9E2E2CBCB:#000063638888:#F4F415153B3B:"
+ "#5050EEEE8484:#B1B17E7E2828:#17178D8DC7C7:#E1E14D4D8E8E:#0000B2B29E9E:"
+ "#FCFCF4F4DCDC:#9B9BC1C1C2C2:#00001E1E2626"
+ ),
+ "Solarized Dark": (
+ "#000027273131:#D0D01B1B2424:#727289890505:#A5A577770505:#20207575C7C7:"
+ "#C6C61B1B6E6E:#252591918585:#E9E9E2E2CBCB:#00001E1E2626:#BDBD36361212:"
+ "#46465A5A6161:#525267676F6F:#707081818383:#58585656B9B9:#818190908F8F:"
+ "#FCFCF4F4DCDC:#707081818383:#00001E1E2626"
+ ),
+ "Solarized Light": (
+ "#000027273131:#D0D01B1B2424:#727289890505:#A5A577770505:#20207575C7C7:"
+ "#C6C61B1B6E6E:#252591918585:#E9E9E2E2CBCB:#00001E1E2626:#BDBD36361212:"
+ "#46465A5A6161:#525267676F6F:#707081818383:#58585656B9B9:#818190908F8F:"
+ "#FCFCF4F4DCDC:#525267676F6F:#FCFCF4F4DCDC"
+ ),
+ "Space Gray Eighties": (
+ "#151517171C1C:#ECEC5F5F6767:#8080A7A76363:#FDFDC2C25353:#54548585C0C0:"
+ "#BFBF8383C0C0:#5757C2C2C0C0:#EEEEECECE7E7:#555555555555:#FFFF69697373:"
+ "#9393D3D39393:#FFFFD1D15656:#4D4D8383D0D0:#FFFF5555FFFF:#8383E8E8E4E4:"
+ "#FFFFFFFFFFFF:#BDBDB9B9AEAE:#212121212121"
+ ),
+ "Space Gray": (
+ "#000000000000:#AFAF4B4B5757:#8787B2B27979:#E5E5C0C07878:#7C7C8F8FA3A3:"
+ "#A3A379799696:#8484A6A6A4A4:#B2B2B8B8C2C2:#000000000000:#AFAF4B4B5757:"
+ "#8787B2B27979:#E5E5C0C07878:#7C7C8F8FA3A3:#A3A379799696:#8484A6A6A4A4:"
+ "#FFFFFEFEFEFE:#B2B2B8B8C2C2:#202023232C2C"
+ ),
+ "Spacedust": (
+ "#6E6E52524646:#E3E35A5A0000:#5C5CABAB9696:#E3E3CDCD7B7B:#0E0E54548B8B:"
+ "#E3E35A5A0000:#0606AFAFC7C7:#F0F0F1F1CECE:#67674C4C3131:#FFFF8A8A3939:"
+ "#ADADCACAB8B8:#FFFFC7C77777:#6767A0A0CDCD:#FFFF8A8A3939:#8383A6A6B3B3:"
+ "#FEFEFFFFF0F0:#ECECEFEFC1C1:#0A0A1E1E2424"
+ ),
+ "Spixel": (
+ "#000000000000:#A4A43E3E6363:#8A8AB5B54444:#F3F39A9A2626:#51518B8BA3A3:"
+ "#97977070B3B3:#5B5BA6A6A5A5:#D3D3D7D7CFCF:#707073736D6D:#E8E84A4A8484:"
+ "#A7A7E3E34646:#F1F1C5C58B8B:#7373B9B9D6D6:#C5E49865E6E6:#8282D9D9D8D8:"
+ "#EEEEEEEEECEC:#FFFFFFFFFFFF:#262626262222"
+ ),
+ "Spring": (
+ "#000000000000:#FFFF4C4C8383:#1F1F8C8C3A3A:#1F1FC9C95A5A:#1C1CD2D2EEEE:"
+ "#89895959A8A8:#3E3E99999F9F:#FFFFFEFEFEFE:#000000000000:#FFFF00002121:"
+ "#1F1FC2C23131:#D4D4B7B70606:#1515A9A9FDFD:#89895959A8A8:#3E3E99999F9F:"
+ "#FFFFFEFEFEFE:#4D4D4D4D4C4C:#FFFFFFFFFFFF"
+ ),
+ "Square": (
+ "#050505050505:#E9E989897C7C:#B6B637377D7D:#ECECEBEBBEBE:#A9A9CDCDEBEB:"
+ "#757550507B7B:#C9C9CACAECEC:#F2F2F2F2F2F2:#141414141414:#F9F992928686:"
+ "#C3C3F7F78686:#FCFCFBFBCCCC:#B6B6DEDEFBFB:#ADAD7F7FA8A8:#D7D7D9D9FCFC:"
+ "#E2E2E2E2E2E2:#ACACACACABAB:#1A1A1A1A1A1A"
+ ),
+ "Sundried": (
+ "#30302B2B2A2A:#A6A646463D3D:#575776764444:#9C9C5F5F2A2A:#48485A5A9898:"
+ "#858545455151:#9C9C81814E4E:#C8C8C8C8C8C8:#4D4D4D4D4747:#AAAA00000C0C:"
+ "#12128C8C2020:#FCFC6A6A2020:#78789898F7F7:#FCFC8989A0A0:#FAFAD3D38484:"
+ "#FFFFFEFEFEFE:#C8C8C8C8C8C8:#1A1A18181818"
+ ),
+ "Symphonic": (
+ "#000000000000:#DCDC32322F2F:#5656DBDB3A3A:#FFFF84840000:#00008484D4D4:"
+ "#B7B72929D9D9:#CCCCCCCCFFFF:#FFFFFFFFFFFF:#1B1B1D1D2121:#DCDC32322F2F:"
+ "#5656DBDB3A3A:#FFFF84840000:#00008484D4D4:#B7B72929D9D9:#CCCCCCCCFFFF:"
+ "#FFFFFFFFFFFF:#FFFFFFFFFFFF:#000000000000"
+ ),
+ "Tango": (
+ "#000000000000:#cccc00000000:#4e4e9a9a0606:#c4c4a0a00000:#34346565a4a4:"
+ "#757550507b7b:#060698209a9a:#d3d3d7d7cfcf:#555557575353:#efef29292929:"
+ "#8a8ae2e23434:#fcfce9e94f4f:#72729f9fcfcf:#adad7f7fa8a8:#3434e2e2e2e2:"
+ "#eeeeeeeeecec:#ffffffffffff:#000000000000"
+ ),
+ "Teerb": (
+ "#1C1C1C1C1C1C:#D6D686868686:#AEAED6D68686:#D7D7AFAF8787:#8686AEAED6D6:"
+ "#D6D6AEAED6D6:#8A8ADBDBB4B4:#D0D0D0D0D0D0:#1C1C1C1C1C1C:#D6D686868686:"
+ "#AEAED6D68686:#E4E4C9C9AFAF:#8686AEAED6D6:#D6D6AEAED6D6:#B1B1E7E7DDDD:"
+ "#EFEFEFEFEFEF:#D0D0D0D0D0D0:#262626262626"
+ ),
+ "Terminal Basic": (
+ "#000000000000:#999900000000:#0000A6A60000:#999999990000:#00000000B2B2:"
+ "#B2B20000B2B2:#0000A6A6B2B2:#BFBFBFBFBFBF:#666666666666:#E5E500000000:"
+ "#0000D9D90000:#E5E5E5E50000:#00000000FFFF:#E5E50000E5E5:#0000E5E5E5E5:"
+ "#E5E5E5E5E5E5:#000000000000:#FFFFFFFFFFFF"
+ ),
+ "Thayer Bright": (
+ "#1B1B1D1D1E1E:#F9F926267272:#4D4DF7F74040:#F3F3FDFD2121:#26265656D6D6:"
+ "#8C8C5454FEFE:#3737C8C8B4B4:#CCCCCCCCC6C6:#505053535454:#FFFF59599595:"
+ "#B6B6E3E35454:#FEFEEDED6C6C:#3F3F7878FFFF:#9E9E6F6FFEFE:#2323CECED4D4:"
+ "#F8F8F8F8F2F2:#F8F8F8F8F8F8:#1B1B1D1D1E1E"
+ ),
+ "Tomorrow Night Blue": (
+ "#000000000000:#FFFF9D9DA3A3:#D1D1F1F1A9A9:#FFFFEEEEADAD:#BBBBDADAFFFF:"
+ "#EBEBBBBBFFFF:#9999FFFFFFFF:#FFFFFEFEFEFE:#000000000000:#FFFF9C9CA3A3:"
+ "#D0D0F0F0A8A8:#FFFFEDEDACAC:#BABADADAFFFF:#EBEBBABAFFFF:#9999FFFFFFFF:"
+ "#FFFFFEFEFEFE:#FFFFFEFEFEFE:#000024245151"
+ ),
+ "Tomorrow Night Bright": (
+ "#000000000000:#D5D54E4E5353:#B9B9CACA4949:#E7E7C5C54747:#7979A6A6DADA:"
+ "#C3C39797D8D8:#7070C0C0B1B1:#FFFFFEFEFEFE:#000000000000:#D4D44D4D5353:"
+ "#B9B9C9C94949:#E6E6C4C44646:#7979A6A6DADA:#C3C39696D7D7:#7070C0C0B1B1:"
+ "#FFFFFEFEFEFE:#E9E9E9E9E9E9:#000000000000"
+ ),
+ "Tomorrow Night Eighties": (
+ "#000000000000:#F2F277777979:#9999CCCC9999:#FFFFCCCC6666:#66669999CCCC:"
+ "#CCCC9999CCCC:#6666CCCCCCCC:#FFFFFEFEFEFE:#000000000000:#F1F177777979:"
+ "#9999CCCC9999:#FFFFCCCC6666:#66669999CCCC:#CCCC9999CCCC:#6666CCCCCCCC:"
+ "#FFFFFEFEFEFE:#CCCCCCCCCCCC:#2C2C2C2C2C2C"
+ ),
+ "Tomorrow Night": (
+ "#000000000000:#CCCC66666666:#B5B5BDBD6868:#F0F0C6C67474:#8181A2A2BEBE:"
+ "#B2B29393BBBB:#8A8ABEBEB7B7:#FFFFFEFEFEFE:#000000000000:#CCCC66666666:"
+ "#B5B5BDBD6868:#F0F0C5C57474:#8080A1A1BDBD:#B2B29494BABA:#8A8ABDBDB6B6:"
+ "#FFFFFEFEFEFE:#C5C5C8C8C6C6:#1D1D1F1F2121"
+ ),
+ "Tomorrow": (
+ "#000000000000:#C8C828282828:#71718C8C0000:#EAEAB7B70000:#41417171AEAE:"
+ "#89895959A8A8:#3E3E99999F9F:#FFFFFEFEFEFE:#000000000000:#C8C828282828:"
+ "#70708B8B0000:#E9E9B6B60000:#41417070AEAE:#89895858A7A7:#3D3D99999F9F:"
+ "#FFFFFEFEFEFE:#4D4D4D4D4C4C:#FFFFFFFFFFFF"
+ ),
+ "Toy Chest": (
+ "#2C2C3F3F5757:#BEBE2D2D2626:#191991917171:#DADA8E8E2626:#32325D5D9696:"
+ "#8A8A5D5DDBDB:#3535A0A08F8F:#2323D0D08282:#323268688989:#DDDD59594343:"
+ "#3030CFCF7B7B:#E7E7D7D74B4B:#3333A5A5D9D9:#ADAD6B6BDCDC:#4141C3C3ADAD:"
+ "#D4D4D4D4D4D4:#3030CFCF7B7B:#232336364A4A"
+ ),
+ "Treehouse": (
+ "#323212120000:#B1B127270E0E:#4444A9A90000:#A9A981810B0B:#575784849999:"
+ "#969636363C3C:#B2B259591D1D:#77776B6B5353:#424236362525:#EDED5C5C2020:"
+ "#5555F2F23737:#F1F1B7B73131:#8585CFCFECEC:#E0E04B4B5A5A:#F0F07D7D1414:"
+ "#FFFFC8C80000:#77776B6B5353:#191919191919"
+ ),
+ "Twilight": (
+ "#141414141414:#C0C06C6C4343:#AFAFB9B97979:#C2C2A8A86C6C:#444446464949:"
+ "#B4B4BEBE7B7B:#777782828484:#FEFEFFFFD3D3:#262626262626:#DDDD7C7C4C4C:"
+ "#CBCBD8D88C8C:#E1E1C4C47D7D:#5A5A5D5D6161:#D0D0DBDB8E8E:#8A8A98989A9A:"
+ "#FEFEFFFFD3D3:#FEFEFFFFD3D3:#141414141414"
+ ),
+ "Urple": (
+ "#000000000000:#AFAF42425B5B:#3737A3A31515:#ACAC5B5B4141:#55554D4D9A9A:"
+ "#6C6C3B3BA1A1:#808080808080:#878779799C9C:#5C5C31312525:#FFFF63638787:"
+ "#2828E5E51F1F:#F0F080806161:#85857979EDED:#A0A05D5DEEEE:#EAEAEAEAEAEA:"
+ "#BFBFA3A3FFFF:#868679799A9A:#1B1B1B1B2323"
+ ),
+ "Vaughn": (
+ "#242423234F4F:#707050505050:#6060B4B48A8A:#DFDFAFAF8F8F:#55555555FFFF:"
+ "#F0F08C8CC3C3:#8C8CD0D0D3D3:#707090908080:#707090908080:#DCDCA3A3A3A3:"
+ "#6060B4B48A8A:#F0F0DFDFAFAF:#55555555FFFF:#ECEC9393D3D3:#9393E0E0E3E3:"
+ "#FFFFFFFFFFFF:#DCDCDCDCCCCC:#252523234E4E"
+ ),
+ "Vibrant Ink": (
+ "#878787878787:#FFFF66660000:#CCCCFFFF0404:#FFFFCCCC0000:#4444B3B3CCCC:"
+ "#99993333CCCC:#4444B3B3CCCC:#F5F5F5F5F5F5:#555555555555:#FFFF00000000:"
+ "#0000FFFF0000:#FFFFFFFF0000:#00000000FFFF:#FFFF0000FFFF:#0000FFFFFFFF:"
+ "#E5E5E5E5E5E5:#FFFFFFFFFFFF:#000000000000"
+ ),
+ "Warm Neon": (
+ "#000000000000:#E2E243434545:#3838B1B13939:#DADAE1E14545:#42426060C5C5:"
+ "#F8F81F1FFBFB:#2929BABAD3D3:#D0D0B8B8A3A3:#FDFDFCFCFCFC:#E8E86F6F7171:"
+ "#9B9BC0C08F8F:#DDDDD9D97979:#7A7A9090D5D5:#F6F67474B9B9:#5E5ED1D1E4E4:"
+ "#D8D8C8C8BBBB:#AFAFDADAB6B6:#3F3F3F3F3F3F"
+ ),
+ "Wez": (
+ "#000000000000:#CCCC55555555:#5555CCCC5555:#CDCDCDCD5555:#54545555CBCB:"
+ "#CCCC5555CCCC:#7A7ACACACACA:#CCCCCCCCCCCC:#555555555555:#FFFF55555555:"
+ "#5555FFFF5555:#FFFFFFFF5555:#55555555FFFF:#FFFF5555FFFF:#5555FFFFFFFF:"
+ "#FFFFFFFFFFFF:#B3B3B3B3B3B3:#000000000000"
+ ),
+ "Wild Cherry": (
+ "#000005050606:#D9D940408585:#2A2AB2B25050:#FFFFD1D16F6F:#88883C3CDCDC:"
+ "#ECECECECECEC:#C1C1B8B8B7B7:#FFFFF8F8DDDD:#00009C9CC9C9:#DADA6B6BABAB:"
+ "#F4F4DBDBA5A5:#EAEAC0C06666:#2F2F8B8BB9B9:#AEAE63636B6B:#FFFF91919D9D:"
+ "#E4E483838D8D:#D9D9FAFAFFFF:#1F1F16162626"
+ ),
+ "Wombat": (
+ "#000000000000:#FFFF60605A5A:#B1B1E8E86969:#EAEAD8D89C9C:#5D5DA9A9F6F6:"
+ "#E8E86A6AFFFF:#8282FFFFF6F6:#DEDED9D9CECE:#313131313131:#F5F58B8B7F7F:"
+ "#DCDCF8F88F8F:#EEEEE5E5B2B2:#A5A5C7C7FFFF:#DDDDAAAAFFFF:#B6B6FFFFF9F9:"
+ "#FEFEFFFFFEFE:#DEDED9D9CECE:#171717171717"
+ ),
+ "Wryan": (
+ "#333333333333:#8C8C46466565:#282873737373:#7C7C7C7C9999:#393955557373:"
+ "#5E5E46468C8C:#313165658C8C:#89899C9CA1A1:#3D3D3D3D3D3D:#BFBF4D4D8080:"
+ "#5353A6A6A6A6:#9E9E9E9ECBCB:#47477A7AB3B3:#7E7E6262B3B3:#60609696BFBF:"
+ "#C0C0C0C0C0C0:#999999999393:#101010101010"
+ ),
+ "Xterm": (
+ "#000000000000:#cdcb00000000:#0000cdcb0000:#cdcbcdcb0000:#1e1a908fffff:"
+ "#cdcb0000cdcb:#0000cdcbcdcb:#e5e2e5e2e5e2:#4ccc4ccc4ccc:#ffff00000000:"
+ "#0000ffff0000:#ffffffff0000:#46458281b4ae:#ffff0000ffff:#0000ffffffff:"
+ "#ffffffffffff:#ffffffffffff:#000000000000"
+ ),
+ "Zenburn": (
+ "#4D4D4D4D4D4D:#707050505050:#6060B4B48A8A:#F0F0DFDFAFAF:#505060607070:"
+ "#DCDC8C8CC3C3:#8C8CD0D0D3D3:#DCDCDCDCCCCC:#707090908080:#DCDCA3A3A3A3:"
+ "#C3C3BFBF9F9F:#E0E0CFCF9F9F:#9494BFBFF3F3:#ECEC9393D3D3:#9393E0E0E3E3:"
+ "#FFFFFFFFFFFF:#DCDCDCDCCCCC:#3F3F3F3F3F3F"
+ ),
+ "Aci": (
+ "#363636363636:#FFFF08088383:#8383FFFF0808:#FFFF83830808:#08088383FFFF:"
+ "#83830808FFFF:#0808FFFF8383:#B6B6B6B6B6B6:#424242424242:#FFFF1E1E8E8E:"
+ "#8E8EFFFF1E1E:#FFFF8E8E1E1E:#1E1E8E8EFFFF:#8E8E1E1EFFFF:#1E1EFFFF8E8E:"
+ "#C2C2C2C2C2C2:#B4B4E1E1FDFD:#0D0D19192626"
+ ),
+ "Aco": (
+ "#3F3F3F3F3F3F:#FFFF08088383:#8383FFFF0808:#FFFF83830808:#08088383FFFF:"
+ "#83830808FFFF:#0808FFFF8383:#BEBEBEBEBEBE:#474747474747:#FFFF1E1E8E8E:"
+ "#8E8EFFFF1E1E:#FFFF8E8E1E1E:#1E1E8E8EFFFF:#8E8E1E1EFFFF:#1E1EFFFF8E8E:"
+ "#C4C4C4C4C4C4:#B4B4E1E1FDFD:#1F1F13130505"
+ ),
+ "Azu": (
+ "#000000000000:#ACAC6D6D7474:#7474ACAC6D6D:#ACACA4A46D6D:#6D6D7474ACAC:"
+ "#A4A46D6DACAC:#6D6DACACA4A4:#E6E6E6E6E6E6:#262626262626:#D6D6B8B8BCBC:"
+ "#BCBCD6D6B8B8:#D6D6D3D3B8B8:#B8B8BCBCD6D6:#D3D3B8B8D6D6:#B8B8D6D6D3D3:"
+ "#FFFFFFFFFFFF:#D9D9E6E6F2F2:#090911111A1A"
+ ),
+ "Bim": (
+ "#2C2C24242323:#F5F55757A0A0:#A9A9EEEE5555:#F5F5A2A25555:#5E5EA2A2ECEC:"
+ "#A9A95757ECEC:#5E5EEEEEA0A0:#919189898888:#919189898888:#F5F57979B2B2:"
+ "#BBBBEEEE7878:#F5F5B3B37878:#8181B3B3ECEC:#BBBB7979ECEC:#8181EEEEB2B2:"
+ "#F5F5EEEEECEC:#A9A9BEBED8D8:#010128284949"
+ ),
+ "Cai": (
+ "#000000000000:#CACA27274D4D:#4D4DCACA2727:#CACAA4A42727:#27274D4DCACA:"
+ "#A4A42727CACA:#2727CACAA4A4:#808080808080:#808080808080:#E9E98D8DA3A3:"
+ "#A3A3E9E98D8D:#E9E9D4D48D8D:#8D8DA3A3E9E9:#D4D48D8DE9E9:#8D8DE9E9D4D4:"
+ "#FFFFFFFFFFFF:#D9D9E6E6F2F2:#090911111A1A"
+ ),
+ "Elementary": (
+ "#303030303030:#E1E132321A1A:#6A6AB0B01717:#FFFFC0C00505:#00004F4F9E9E:"
+ "#ECEC00004848:#2A2AA7A7E7E7:#F2F2F2F2F2F2:#5D5D5D5D5D5D:#FFFF36361E1E:"
+ "#7B7BC9C91F1F:#FFFFD0D00A0A:#00007171FFFF:#FFFF1D1D6262:#4B4BB8B8FDFD:"
+ "#A0A02020F0F0:#F2F2F2F2F2F2:#101010101010"
+ ),
+ "Elic": (
+ "#303030303030:#E1E132321A1A:#6A6AB0B01717:#FFFFC0C00505:#72729F9FCFCF:"
+ "#ECEC00004848:#F2F2F2F2F2F2:#2A2AA7A7E7E7:#5D5D5D5D5D5D:#FFFF36361E1E:"
+ "#7B7BC9C91F1F:#FFFFD0D00A0A:#00007171FFFF:#FFFF1D1D6262:#4B4BB8B8FDFD:"
+ "#A0A02020F0F0:#F2F2F2F2F2F2:#4A4A45453E3E"
+ ),
+ "Elio": (
+ "#303030303030:#E1E132321A1A:#6A6AB0B01717:#FFFFC0C00505:#72729F9FCFCF:"
+ "#ECEC00004848:#2A2AA7A7E7E7:#F2F2F2F2F2F2:#5D5D5D5D5D5D:#FFFF36361E1E:"
+ "#7B7BC9C91F1F:#FFFFD0D00A0A:#00007171FFFF:#FFFF1D1D6262:#4B4BB8B8FDFD:"
+ "#A0A02020F0F0:#F2F2F2F2F2F2:#04041A1A3B3B"
+ ),
+ "Freya": (
+ "#070736364242:#DCDC32322F2F:#858599990000:#B5B589890000:#26268B8BD2D2:"
+ "#ECEC00004848:#2A2AA1A19898:#9494A3A3A5A5:#58586E6E7575:#CBCB4B4B1616:"
+ "#858599990000:#B5B589890000:#26268B8BD2D2:#D3D336368282:#2A2AA1A19898:"
+ "#6C6C7171C4C4:#9494A3A3A5A5:#25252E2E3232"
+ ),
+ "Gruvbox Dark": (
+ "#66665C5C5454:#FBFB49493434:#8383A5A59898:#D7D799992121:#B1B162628686:"
+ "#454585858888:#B8B8BBBB2626:#D6D65D5D0E0E:#A8A899998484:#FBFB49493434:"
+ "#8E8EC0C07C7C:#FAFABDBD2F2F:#D3D386869B9B:#68689D9D6A6A:#989897971A1A:"
+ "#FEFE80801919:#EBEBDBDBB2B2:#282828282828"
+ ),
+ "Hemisu Dark": (
+ "#444444444444:#FFFF00005454:#B1B1D6D63030:#9D9D89895E5E:#6767BEBEE3E3:"
+ "#B5B57676BCBC:#56569A9A9F9F:#EDEDEDEDEDED:#777777777777:#D6D65E5E7575:"
+ "#BABAFFFFAAAA:#ECECE1E1C8C8:#9F9FD3D3E5E5:#DEDEB3B3DFDF:#B6B6E0E0E5E5:"
+ "#FFFFFFFFFFFF:#FFFFFFFFFFFF:#000000000000"
+ ),
+ "Hemisu Light": (
+ "#777777777777:#FFFF00005555:#737391910000:#50503D3D1515:#535380809191:"
+ "#5B5B34345E5E:#535380809191:#999999999999:#999999999999:#D6D65E5E7676:"
+ "#9C9CC7C70000:#949475755555:#9D9DB3B3CDCD:#A1A18484A4A4:#8585B2B2AAAA:"
+ "#BABABABABABA:#444444444444:#EFEFEFEFEFEF"
+ ),
+ "Jup": (
+ "#000000000000:#DDDD00006F6F:#6F6FDDDD0000:#DDDD6F6F0000:#00006F6FDDDD:"
+ "#6F6F0000DDDD:#0000DDDD6F6F:#F2F2F2F2F2F2:#7D7D7D7D7D7D:#FFFF7474B9B9:"
+ "#B9B9FFFF7474:#FFFFB9B97474:#7474B9B9FFFF:#B9B97474FFFF:#7474FFFFB9B9:"
+ "#FFFFFFFFFFFF:#232347476A6A:#757584848080"
+ ),
+ "Mar": (
+ "#000000000000:#B5B540407B7B:#7B7BB5B54040:#B5B57B7B4040:#40407B7BB5B5:"
+ "#7B7B4040B5B5:#4040B5B57B7B:#F8F8F8F8F8F8:#737373737373:#CDCD7373A0A0:"
+ "#A0A0CDCD7373:#CDCDA0A07373:#7373A0A0CDCD:#A0A07373CDCD:#7373CDCDA0A0:"
+ "#FFFFFFFFFFFF:#232347476A6A:#FFFFFFFFFFFF"
+ ),
+ "Material": (
+ "#070736364141:#EBEB60606B6B:#C3C3E8E88D8D:#F7F7EBEB9595:#8080CBCBC3C3:"
+ "#FFFF24249090:#AEAEDDDDFFFF:#FFFFFFFFFFFF:#00002B2B3636:#EBEB60606B6B:"
+ "#C3C3E8E88D8D:#F7F7EBEB9595:#7D7DC6C6BFBF:#6C6C7171C3C3:#343443434D4D:"
+ "#FFFFFFFFFFFF:#C3C3C7C7D1D1:#1E1E28282C2C"
+ ),
+ "Miu": (
+ "#000000000000:#B8B87A7A7A7A:#7A7AB8B87A7A:#B8B8B8B87A7A:#7A7A7A7AB8B8:"
+ "#B8B87A7AB8B8:#7A7AB8B8B8B8:#D9D9D9D9D9D9:#262626262626:#DBDBBDBDBDBD:"
+ "#BDBDDBDBBDBD:#DBDBDBDBBDBD:#BDBDBDBDDBDB:#DBDBBDBDDBDB:#BDBDDBDBDBDB:"
+ "#FFFFFFFFFFFF:#D9D9E6E6F2F2:#0D0D19192626"
+ ),
+ "Monokai dark": (
+ "#757571715E5E:#F9F926267272:#A6A6E2E22E2E:#F4F4BFBF7575:#6666D9D9EFEF:"
+ "#AEAE8181FFFF:#2A2AA1A19898:#F9F9F8F8F5F5:#272728282222:#F9F926267272:"
+ "#A6A6E2E22E2E:#F4F4BFBF7575:#6666D9D9EFEF:#AEAE8181FFFF:#2A2AA1A19898:"
+ "#F8F8F8F8F2F2:#F8F8F8F8F2F2:#272728282222"
+ ),
+ "Nep": (
+ "#000000000000:#DDDD6F6F0000:#0000DDDD6F6F:#6F6FDDDD0000:#6F6F0000DDDD:"
+ "#DDDD00006F6F:#00006F6FDDDD:#F2F2F2F2F2F2:#7D7D7D7D7D7D:#FFFFB9B97474:"
+ "#7474FFFFB9B9:#B9B9FFFF7474:#B9B97474FFFF:#FFFF7474B9B9:#7474B9B9FFFF:"
+ "#FFFFFFFFFFFF:#232347476A6A:#757584848080"
+ ),
+ "One Light": (
+ "#000000000000:#DADA3E3E3939:#414193933E3E:#858555550404:#31315E5EEEEE:"
+ "#939300009292:#0E0E6F6FADAD:#8E8E8F8F9696:#2A2A2B2B3232:#DADA3E3E3939:"
+ "#414193933E3E:#858555550404:#31315E5EEEEE:#939300009292:#0E0E6F6FADAD:"
+ "#FFFFFEFEFEFE:#2A2A2B2B3232:#F8F8F8F8F8F8"
+ ),
+ "Pali": (
+ "#0A0A0A0A0A0A:#ABAB8F8F7474:#7474ABAB8F8F:#8F8FABAB7474:#8F8F7474ABAB:"
+ "#ABAB74748F8F:#74748F8FABAB:#F2F2F2F2F2F2:#5D5D5D5D5D5D:#FFFF1D1D6262:"
+ "#9C9CC3C3AFAF:#FFFFD0D00A0A:#AFAF9C9CC3C3:#FFFF1D1D6262:#4B4BB8B8FDFD:"
+ "#A0A02020F0F0:#D9D9E6E6F2F2:#23232E2E3737"
+ ),
+ "Peppermint": (
+ "#353535353535:#E6E645456969:#8989D2D28787:#DADAB7B75252:#43439E9ECFCF:"
+ "#D9D96161DCDC:#6464AAAAAFAF:#B3B3B3B3B3B3:#535353535353:#E4E485859A9A:"
+ "#A2A2CCCCA1A1:#E1E1E3E38787:#6F6FBBBBE2E2:#E5E58686E7E7:#9696DCDCDADA:"
+ "#DEDEDEDEDEDE:#C7C7C7C7C7C7:#000000000000"
+ ),
+ "Sat": (
+ "#000000000000:#DDDD00000707:#0707DDDD0000:#DDDDD6D60000:#00000707DDDD:"
+ "#D6D60000DDDD:#0000DDDDD6D6:#F2F2F2F2F2F2:#7D7D7D7D7D7D:#FFFF74747878:"
+ "#7878FFFF7474:#FFFFFAFA7474:#74747878FFFF:#FAFA7474FFFF:#7474FFFFFAFA:"
+ "#FFFFFFFFFFFF:#232347476A6A:#757584848080"
+ ),
+ "Shel": (
+ "#2C2C24242323:#ABAB24246363:#6C6CA3A32323:#ABAB64642323:#2C2C6464A2A2:"
+ "#6C6C2424A2A2:#2C2CA3A36363:#919189898888:#919189898888:#F5F58888B9B9:"
+ "#C2C2EEEE8686:#F5F5BABA8686:#8F8FBABAECEC:#C2C28888ECEC:#8F8FEEEEB9B9:"
+ "#F5F5EEEEECEC:#48488282CDCD:#2A2A20201F1F"
+ ),
+ "Tin": (
+ "#000000000000:#8D8D53534E4E:#4E4E8D8D5353:#88888D8D4E4E:#53534E4E8D8D:"
+ "#8D8D4E4E8888:#4E4E88888D8D:#FFFFFFFFFFFF:#000000000000:#B5B57D7D7878:"
+ "#7878B5B57D7D:#B0B0B5B57878:#7D7D7878B5B5:#B5B57878B0B0:#7878B0B0B5B5:"
+ "#FFFFFFFFFFFF:#FFFFFFFFFFFF:#2E2E2E2E3535"
+ ),
+ "Ura": (
+ "#000000000000:#C2C21B1B6F6F:#6F6FC2C21B1B:#C2C26F6F1B1B:#1B1B6F6FC2C2:"
+ "#6F6F1B1BC2C2:#1B1BC2C26F6F:#808080808080:#808080808080:#EEEE8484B9B9:"
+ "#B9B9EEEE8484:#EEEEB9B98484:#8484B9B9EEEE:#B9B98484EEEE:#8484EEEEB9B9:"
+ "#E5E5E5E5E5E5:#232347476A6A:#FEFEFFFFEEEE"
+ ),
+ "Vag": (
+ "#303030303030:#A8A871713939:#3939A8A87171:#7171A8A83939:#71713939A8A8:"
+ "#A8A839397171:#39397171A8A8:#8A8A8A8A8A8A:#494949494949:#B0B076763B3B:"
+ "#3B3BB0B07676:#7676B0B03B3B:#76763B3BB0B0:#B0B03B3B7676:#3B3B7676B0B0:"
+ "#CFCFCFCFCFCF:#D9D9E6E6F2F2:#19191F1F1D1D"
),
}
diff --git a/guake/prefs.py b/guake/prefs.py
index b3b6c63c..74128abc 100644
--- a/guake/prefs.py
+++ b/guake/prefs.py
@@ -26,9 +26,10 @@ import warnings
from textwrap import dedent
import gi
-gi.require_version('Gtk', '3.0')
-gi.require_version('Keybinder', '3.0')
-gi.require_version('Vte', '2.91') # vte-0.38
+
+gi.require_version("Gtk", "3.0")
+gi.require_version("Keybinder", "3.0")
+gi.require_version("Vte", "2.91") # vte-0.38
from gi.repository import GLib
from gi.repository import GObject
from gi.repository import Gdk
@@ -69,238 +70,114 @@ log = logging.getLogger(__name__)
# A regular expression to match possible python interpreters when
# filling interpreters combo in preferences (including bpython and ipython)
-PYTHONS = re.compile(r'^[a-z]python$|^python\d\.\d$')
+PYTHONS = re.compile(r"^[a-z]python$|^python\d\.\d$")
# Path to the shells file, it will be used to start to populate
# interpreters combo, see the next variable, its important to fill the
# rest of the combo too.
-SHELLS_FILE = '/etc/shells'
+SHELLS_FILE = "/etc/shells"
# string to show in prefereces dialog for user shell option
-USER_SHELL_VALUE = _('')
+USER_SHELL_VALUE = _("")
# translating our types to vte types
ERASE_BINDINGS = {
- 'ASCII DEL': 'ascii-delete',
- 'Escape sequence': 'delete-sequence',
- 'Control-H': 'ascii-backspace'
+ "ASCII DEL": "ascii-delete",
+ "Escape sequence": "delete-sequence",
+ "Control-H": "ascii-backspace",
}
HOTKEYS = [
{
- 'label': _('General'),
- 'key': 'general',
- 'keys': [{
- 'key': 'show-hide',
- 'label': _('Toggle Guake visibility')
- }, {
- 'key': 'show-focus',
- 'label': _('Show and focus Guake window')
- }, {
- 'key': 'toggle-fullscreen',
- 'label': _('Toggle Fullscreen')
- }, {
- 'key': 'toggle-hide-on-lose-focus',
- 'label': _('Toggle Hide on Lose Focus')
- }, {
- 'key': 'quit',
- 'label': _('Quit')
- }, {
- 'key': 'reset-terminal',
- 'label': _('Reset terminal')
- }, {
- 'key': 'search-terminal',
- 'label': _('Search terminal')
- }]
+ "label": _("General"),
+ "key": "general",
+ "keys": [
+ {"key": "show-hide", "label": _("Toggle Guake visibility")},
+ {"key": "show-focus", "label": _("Show and focus Guake window")},
+ {"key": "toggle-fullscreen", "label": _("Toggle Fullscreen")},
+ {"key": "toggle-hide-on-lose-focus", "label": _("Toggle Hide on Lose Focus"),},
+ {"key": "quit", "label": _("Quit")},
+ {"key": "reset-terminal", "label": _("Reset terminal")},
+ {"key": "search-terminal", "label": _("Search terminal")},
+ ],
},
{
- 'label': _('Tab management'),
- 'key': 'tab',
- 'keys': [
- {
- 'key': 'new-tab',
- 'label': _('New tab')
- },
- {
- 'key': 'new-tab-home',
- 'label': _('New tab in home directory')
- },
- {
- 'key': 'close-tab',
- 'label': _('Close tab')
- },
- {
- 'key': 'rename-current-tab',
- 'label': _('Rename current tab')
- },
- ]
+ "label": _("Tab management"),
+ "key": "tab",
+ "keys": [
+ {"key": "new-tab", "label": _("New tab")},
+ {"key": "new-tab-home", "label": _("New tab in home directory")},
+ {"key": "close-tab", "label": _("Close tab")},
+ {"key": "rename-current-tab", "label": _("Rename current tab")},
+ ],
},
{
- 'label': _('Split management'),
- 'key': 'split',
- 'keys': [
+ "label": _("Split management"),
+ "key": "split",
+ "keys": [
+ {"key": "split-tab-vertical", "label": _("Split tab vertical")},
+ {"key": "split-tab-horizontal", "label": _("Split tab horizontal")},
+ {"key": "close-terminal", "label": _("Close terminal")},
+ {"key": "focus-terminal-up", "label": _("Focus terminal above")},
+ {"key": "focus-terminal-down", "label": _("Focus terminal below")},
+ {"key": "focus-terminal-left", "label": _("Focus terminal on the left")},
+ {"key": "focus-terminal-right", "label": _("Focus terminal on the right")},
+ {"key": "move-terminal-split-up", "label": _("Move the terminal split handle up"),},
+ {"key": "move-terminal-split-down", "label": _("Move the terminal split handle down"),},
{
- 'key': 'split-tab-vertical',
- 'label': _('Split tab vertical')
+ "key": "move-terminal-split-right",
+ "label": _("Move the terminal split handle right"),
},
- {
- 'key': 'split-tab-horizontal',
- 'label': _('Split tab horizontal')
- },
- {
- 'key': 'close-terminal',
- 'label': _('Close terminal')
- },
- {
- 'key': 'focus-terminal-up',
- 'label': _('Focus terminal above')
- },
- {
- 'key': 'focus-terminal-down',
- 'label': _('Focus terminal below')
- },
- {
- 'key': 'focus-terminal-left',
- 'label': _('Focus terminal on the left')
- },
- {
- 'key': 'focus-terminal-right',
- 'label': _('Focus terminal on the right')
- },
- {
- 'key': 'move-terminal-split-up',
- 'label': _('Move the terminal split handle up')
- },
- {
- 'key': 'move-terminal-split-down',
- 'label': _('Move the terminal split handle down')
- },
- {
- 'key': 'move-terminal-split-right',
- 'label': _('Move the terminal split handle right')
- },
- {
- 'key': 'move-terminal-split-left',
- 'label': _('Move the terminal split handle left')
- },
- ]
+ {"key": "move-terminal-split-left", "label": _("Move the terminal split handle left"),},
+ ],
},
{
- 'label': _('Navigation'),
- 'key': 'nav',
- 'keys': [
- {
- 'key': 'previous-tab',
- 'label': _('Go to previous tab')
- },
- {
- 'key': 'next-tab',
- 'label': _('Go to next tab')
- },
- {
- 'key': 'move-tab-left',
- 'label': _('Move current tab left')
- },
- {
- 'key': 'move-tab-right',
- 'label': _('Move current tab right')
- },
- {
- 'key': 'switch-tab1',
- 'label': _('Go to first tab')
- },
- {
- 'key': 'switch-tab2',
- 'label': _('Go to second tab')
- },
- {
- 'key': 'switch-tab3',
- 'label': _('Go to third tab')
- },
- {
- 'key': 'switch-tab4',
- 'label': _('Go to fourth tab')
- },
- {
- 'key': 'switch-tab5',
- 'label': _('Go to fifth tab')
- },
- {
- 'key': 'switch-tab6',
- 'label': _('Go to sixth tab')
- },
- {
- 'key': 'switch-tab7',
- 'label': _('Go to seventh tab')
- },
- {
- 'key': 'switch-tab8',
- 'label': _('Go to eighth tab')
- },
- {
- 'key': 'switch-tab9',
- 'label': _('Go to ninth tab')
- },
- {
- 'key': 'switch-tab10',
- 'label': _('Go to tenth tab')
- },
- {
- 'key': 'switch-tab-last',
- 'label': _('Go to last tab')
- },
- ]
+ "label": _("Navigation"),
+ "key": "nav",
+ "keys": [
+ {"key": "previous-tab", "label": _("Go to previous tab")},
+ {"key": "next-tab", "label": _("Go to next tab")},
+ {"key": "move-tab-left", "label": _("Move current tab left")},
+ {"key": "move-tab-right", "label": _("Move current tab right")},
+ {"key": "switch-tab1", "label": _("Go to first tab")},
+ {"key": "switch-tab2", "label": _("Go to second tab")},
+ {"key": "switch-tab3", "label": _("Go to third tab")},
+ {"key": "switch-tab4", "label": _("Go to fourth tab")},
+ {"key": "switch-tab5", "label": _("Go to fifth tab")},
+ {"key": "switch-tab6", "label": _("Go to sixth tab")},
+ {"key": "switch-tab7", "label": _("Go to seventh tab")},
+ {"key": "switch-tab8", "label": _("Go to eighth tab")},
+ {"key": "switch-tab9", "label": _("Go to ninth tab")},
+ {"key": "switch-tab10", "label": _("Go to tenth tab")},
+ {"key": "switch-tab-last", "label": _("Go to last tab")},
+ ],
},
{
- 'label': _('Appearance'),
- 'key': 'appearance',
- 'keys': [{
- 'key': 'zoom-out',
- 'label': _('Zoom out')
- }, {
- 'key': 'zoom-in',
- 'label': _('Zoom in')
- }, {
- 'key': 'zoom-in-alt',
- 'label': _('Zoom in (alternative)')
- }, {
- 'key': 'increase-height',
- 'label': _('Increase height')
- }, {
- 'key': 'decrease-height',
- 'label': _('Decrease height')
- }, {
- 'key': 'increase-transparency',
- 'label': _('Increase transparency')
- }, {
- 'key': 'decrease-transparency',
- 'label': _('Decrease transparency')
- }, {
- 'key': 'toggle-transparency',
- 'label': _('Toggle transparency')
- }]
+ "label": _("Appearance"),
+ "key": "appearance",
+ "keys": [
+ {"key": "zoom-out", "label": _("Zoom out")},
+ {"key": "zoom-in", "label": _("Zoom in")},
+ {"key": "zoom-in-alt", "label": _("Zoom in (alternative)")},
+ {"key": "increase-height", "label": _("Increase height")},
+ {"key": "decrease-height", "label": _("Decrease height")},
+ {"key": "increase-transparency", "label": _("Increase transparency")},
+ {"key": "decrease-transparency", "label": _("Decrease transparency")},
+ {"key": "toggle-transparency", "label": _("Toggle transparency")},
+ ],
},
{
- 'label': _('Clipboard'),
- 'key': 'clipboard',
- 'keys': [
- {
- 'key': 'clipboard-copy',
- 'label': _('Copy text to clipboard')
- },
- {
- 'key': 'clipboard-paste',
- 'label': _('Paste text from clipboard')
- },
- ]
+ "label": _("Clipboard"),
+ "key": "clipboard",
+ "keys": [
+ {"key": "clipboard-copy", "label": _("Copy text to clipboard")},
+ {"key": "clipboard-paste", "label": _("Paste text from clipboard")},
+ ],
},
{
- 'label': _('Extra features'),
- 'key': 'extra',
- 'keys': [{
- 'key': 'search-on-web',
- 'label': _('Search select text on web')
- }, ]
+ "label": _("Extra features"),
+ "key": "extra",
+ "keys": [{"key": "search-on-web", "label": _("Search select text on web")},],
},
]
@@ -326,12 +203,12 @@ def html_escape(text):
def refresh_user_start(settings):
if not AUTOSTART_FOLDER or not LOGIN_DESTOP_PATH:
return
- if settings.general.get_boolean('start-at-login'):
+ if settings.general.get_boolean("start-at-login"):
autostart_path = os.path.expanduser(AUTOSTART_FOLDER)
os.makedirs(autostart_path, exist_ok=True)
shutil.copyfile(
os.path.join(LOGIN_DESTOP_PATH, "autostart-guake.desktop"),
- os.path.join(os.path.expanduser(AUTOSTART_FOLDER), "guake.desktop")
+ os.path.join(os.path.expanduser(AUTOSTART_FOLDER), "guake.desktop"),
)
else:
desktop_file = os.path.join(os.path.expanduser(AUTOSTART_FOLDER), "guake.desktop")
@@ -339,7 +216,7 @@ def refresh_user_start(settings):
os.remove(desktop_file)
-class PrefsCallbacks():
+class PrefsCallbacks:
"""Holds callbacks that will be used in the PrefsDialg class.
"""
@@ -353,17 +230,17 @@ class PrefsCallbacks():
def on_restore_tabs_startup_toggled(self, chk):
"""Changes the activity of restore-tabs-startup in dconf
"""
- self.settings.general.set_boolean('restore-tabs-startup', chk.get_active())
+ self.settings.general.set_boolean("restore-tabs-startup", chk.get_active())
def on_restore_tabs_notify_toggled(self, chk):
"""Changes the activity of restore-tabs-notify in dconf
"""
- self.settings.general.set_boolean('restore-tabs-notify', chk.get_active())
+ self.settings.general.set_boolean("restore-tabs-notify", chk.get_active())
def on_save_tabs_when_changed_toggled(self, chk):
"""Changes the activity of save-tabs-when-changed in dconf
"""
- self.settings.general.set_boolean('save-tabs-when-changed', chk.get_active())
+ self.settings.general.set_boolean("save-tabs-when-changed", chk.get_active())
def on_default_shell_changed(self, combo):
"""Changes the activity of default_shell in dconf
@@ -375,44 +252,44 @@ class PrefsCallbacks():
# we unset the value (restore to default) when user chooses to use
# user shell as guake shell interpreter.
if shell == USER_SHELL_VALUE:
- self.settings.general.reset('default-shell')
+ self.settings.general.reset("default-shell")
else:
- self.settings.general.set_string('default-shell', shell)
+ self.settings.general.set_string("default-shell", shell)
def on_use_login_shell_toggled(self, chk):
"""Changes the activity of use_login_shell in dconf
"""
- self.settings.general.set_boolean('use-login-shell', chk.get_active())
+ self.settings.general.set_boolean("use-login-shell", chk.get_active())
def on_open_tab_cwd_toggled(self, chk):
"""Changes the activity of open_tab_cwd in dconf
"""
- self.settings.general.set_boolean('open-tab-cwd', chk.get_active())
+ self.settings.general.set_boolean("open-tab-cwd", chk.get_active())
def on_use_trayicon_toggled(self, chk):
"""Changes the activity of use_trayicon in dconf
"""
- self.settings.general.set_boolean('use-trayicon', chk.get_active())
+ self.settings.general.set_boolean("use-trayicon", chk.get_active())
def on_use_popup_toggled(self, chk):
"""Changes the activity of use_popup in dconf
"""
- self.settings.general.set_boolean('use-popup', chk.get_active())
+ self.settings.general.set_boolean("use-popup", chk.get_active())
def on_workspace_specific_tab_sets_toggled(self, chk):
"""Sets the 'workspace-specific-tab-sets' property in dconf
"""
- self.settings.general.set_boolean('workspace-specific-tab-sets', chk.get_active())
+ self.settings.general.set_boolean("workspace-specific-tab-sets", chk.get_active())
def on_prompt_on_quit_toggled(self, chk):
"""Set the `prompt on quit' property in dconf
"""
- self.settings.general.set_boolean('prompt-on-quit', chk.get_active())
+ self.settings.general.set_boolean("prompt-on-quit", chk.get_active())
def on_prompt_on_close_tab_changed(self, combo):
"""Set the `prompt_on_close_tab' property in dconf
"""
- self.settings.general.set_int('prompt-on-close-tab', combo.get_active())
+ self.settings.general.set_int("prompt-on-close-tab", combo.get_active())
def on_gtk_theme_name_changed(self, combo):
"""Set the `gtk_theme_name' property in dconf
@@ -421,117 +298,117 @@ class PrefsCallbacks():
if not citer:
return
theme_name = combo.get_model().get_value(citer, 0)
- self.settings.general.set_string('gtk-theme-name', theme_name)
+ self.settings.general.set_string("gtk-theme-name", theme_name)
select_gtk_theme(self.settings)
def on_gtk_prefer_dark_theme_toggled(self, chk):
"""Set the `gtk_prefer_dark_theme' property in dconf
"""
- self.settings.general.set_boolean('gtk-prefer-dark-theme', chk.get_active())
+ self.settings.general.set_boolean("gtk-prefer-dark-theme", chk.get_active())
select_gtk_theme(self.settings)
def on_window_ontop_toggled(self, chk):
"""Changes the activity of window_ontop in dconf
"""
- self.settings.general.set_boolean('window-ontop', chk.get_active())
+ self.settings.general.set_boolean("window-ontop", chk.get_active())
def on_tab_ontop_toggled(self, chk):
"""Changes the activity of tab_ontop in dconf
"""
- self.settings.general.set_boolean('tab-ontop', chk.get_active())
+ self.settings.general.set_boolean("tab-ontop", chk.get_active())
def on_new_tab_after_toggled(self, chk):
"""Changes the activity of new_tab_after in dconf
"""
- self.settings.general.set_boolean('new-tab-after', chk.get_active())
+ self.settings.general.set_boolean("new-tab-after", chk.get_active())
def on_quick_open_enable_toggled(self, chk):
"""Changes the activity of quick_open_enable in dconf
"""
- self.settings.general.set_boolean('quick-open-enable', chk.get_active())
+ self.settings.general.set_boolean("quick-open-enable", chk.get_active())
def on_quick_open_in_current_terminal_toggled(self, chk):
- self.settings.general.set_boolean('quick-open-in-current-terminal', chk.get_active())
+ self.settings.general.set_boolean("quick-open-in-current-terminal", chk.get_active())
def on_startup_script_changed(self, edt):
- self.settings.general.set_string('startup-script', edt.get_text())
+ self.settings.general.set_string("startup-script", edt.get_text())
def on_window_refocus_toggled(self, chk):
"""Changes the activity of window_refocus in dconf
"""
- self.settings.general.set_boolean('window-refocus', chk.get_active())
+ self.settings.general.set_boolean("window-refocus", chk.get_active())
def on_window_losefocus_toggled(self, chk):
"""Changes the activity of window_losefocus in dconf
"""
- self.settings.general.set_boolean('window-losefocus', chk.get_active())
+ self.settings.general.set_boolean("window-losefocus", chk.get_active())
def on_quick_open_command_line_changed(self, edt):
- self.settings.general.set_string('quick-open-command-line', edt.get_text())
+ self.settings.general.set_string("quick-open-command-line", edt.get_text())
def on_hook_show_changed(self, edt):
- self.settings.hooks.set_string('show', edt.get_text())
+ self.settings.hooks.set_string("show", edt.get_text())
def on_window_tabbar_toggled(self, chk):
"""Changes the activity of window_tabbar in dconf
"""
- self.settings.general.set_boolean('window-tabbar', chk.get_active())
+ self.settings.general.set_boolean("window-tabbar", chk.get_active())
def on_fullscreen_hide_tabbar_toggled(self, chk):
"""Changes the activity of fullscreen_hide_tabbar in dconf
"""
- self.settings.general.set_boolean('fullscreen-hide-tabbar', chk.get_active())
+ self.settings.general.set_boolean("fullscreen-hide-tabbar", chk.get_active())
def on_start_fullscreen_toggled(self, chk):
"""Changes the activity of start_fullscreen in dconf
"""
- self.settings.general.set_boolean('start-fullscreen', chk.get_active())
+ self.settings.general.set_boolean("start-fullscreen", chk.get_active())
def on_start_at_login_toggled(self, chk):
"""Changes the activity of start_at_login in dconf
"""
- self.settings.general.set_boolean('start-at-login', chk.get_active())
+ self.settings.general.set_boolean("start-at-login", chk.get_active())
refresh_user_start(self.settings)
def on_use_vte_titles_toggled(self, chk):
"""Save `use_vte_titles` property value in dconf
"""
- self.settings.general.set_boolean('use-vte-titles', chk.get_active())
+ self.settings.general.set_boolean("use-vte-titles", chk.get_active())
def on_set_window_title_toggled(self, chk):
"""Save `set_window_title` property value in dconf
"""
- self.settings.general.set_boolean('set-window-title', chk.get_active())
+ self.settings.general.set_boolean("set-window-title", chk.get_active())
def on_tab_name_display_changed(self, combo):
"""Save `display-tab-names` property value in dconf
"""
- self.settings.general.set_int('display-tab-names', combo.get_active())
+ self.settings.general.set_int("display-tab-names", combo.get_active())
def on_max_tab_name_length_changed(self, spin):
"""Changes the value of max_tab_name_length in dconf
"""
val = int(spin.get_value())
- self.settings.general.set_int('max-tab-name-length', val)
+ self.settings.general.set_int("max-tab-name-length", val)
self.prefDlg.update_vte_subwidgets_states()
def on_mouse_display_toggled(self, chk):
"""Set the 'appear on mouse display' preference in dconf. This
property supercedes any value stored in display_n.
"""
- self.settings.general.set_boolean('mouse-display', chk.get_active())
+ self.settings.general.set_boolean("mouse-display", chk.get_active())
def on_right_align_toggled(self, chk):
"""set the horizontal alignment setting.
"""
v = chk.get_active()
- self.settings.general.set_int('window-halignment', 1 if v else 0)
+ self.settings.general.set_int("window-halignment", 1 if v else 0)
def on_bottom_align_toggled(self, chk):
"""set the vertical alignment setting.
"""
v = chk.get_active()
- self.settings.general.set_int('window-valignment', ALIGN_BOTTOM if v else ALIGN_TOP)
+ self.settings.general.set_int("window-valignment", ALIGN_BOTTOM if v else ALIGN_TOP)
def on_display_n_changed(self, combo):
"""Set the destination display in dconf.
@@ -549,31 +426,31 @@ class PrefsCallbacks():
else:
val = model.get_value(i, 0)
val_int = int(val.split()[0]) # extracts 1 from '1' or from '1 (primary)'
- self.settings.general.set_int('display-n', val_int)
+ self.settings.general.set_int("display-n", val_int)
def on_window_height_value_changed(self, hscale):
"""Changes the value of window_height in dconf
"""
val = hscale.get_value()
- self.settings.general.set_int('window-height', int(val))
+ self.settings.general.set_int("window-height", int(val))
def on_window_width_value_changed(self, wscale):
"""Changes the value of window_width in dconf
"""
val = wscale.get_value()
- self.settings.general.set_int('window-width', int(val))
+ self.settings.general.set_int("window-width", int(val))
def on_window_halign_value_changed(self, halign_button):
"""Changes the value of window_halignment in dconf
"""
which_align = {
- 'radiobutton_align_left': ALIGN_LEFT,
- 'radiobutton_align_right': ALIGN_RIGHT,
- 'radiobutton_align_center': ALIGN_CENTER
+ "radiobutton_align_left": ALIGN_LEFT,
+ "radiobutton_align_right": ALIGN_RIGHT,
+ "radiobutton_align_center": ALIGN_CENTER,
}
if halign_button.get_active():
self.settings.general.set_int(
- 'window-halignment', which_align[halign_button.get_name()]
+ "window-halignment", which_align[halign_button.get_name()]
)
self.prefDlg.get_widget("window_horizontal_displacement").set_sensitive(
which_align[halign_button.get_name()] != ALIGN_CENTER
@@ -582,68 +459,68 @@ class PrefsCallbacks():
def on_use_audible_bell_toggled(self, chk):
"""Changes the value of use_audible_bell in dconf
"""
- self.settings.general.set_boolean('use-audible-bell', chk.get_active())
+ self.settings.general.set_boolean("use-audible-bell", chk.get_active())
# scrolling tab
def on_use_scrollbar_toggled(self, chk):
"""Changes the activity of use_scrollbar in dconf
"""
- self.settings.general.set_boolean('use-scrollbar', chk.get_active())
+ self.settings.general.set_boolean("use-scrollbar", chk.get_active())
def on_history_size_value_changed(self, spin):
"""Changes the value of history_size in dconf
"""
val = int(spin.get_value())
- self.settings.general.set_int('history-size', val)
+ self.settings.general.set_int("history-size", val)
self._update_history_widgets()
def on_infinite_history_toggled(self, chk):
- self.settings.general.set_boolean('infinite-history', chk.get_active())
+ self.settings.general.set_boolean("infinite-history", chk.get_active())
self._update_history_widgets()
def _update_history_widgets(self):
- infinite = self.prefDlg.get_widget('infinite_history').get_active()
- self.prefDlg.get_widget('history_size').set_sensitive(not infinite)
+ infinite = self.prefDlg.get_widget("infinite_history").get_active()
+ self.prefDlg.get_widget("history_size").set_sensitive(not infinite)
def on_scroll_output_toggled(self, chk):
"""Changes the activity of scroll_output in dconf
"""
- self.settings.general.set_boolean('scroll-output', chk.get_active())
+ self.settings.general.set_boolean("scroll-output", chk.get_active())
def on_scroll_keystroke_toggled(self, chk):
"""Changes the activity of scroll_keystroke in dconf
"""
- self.settings.general.set_boolean('scroll-keystroke', chk.get_active())
+ self.settings.general.set_boolean("scroll-keystroke", chk.get_active())
# appearance tab
def on_use_default_font_toggled(self, chk):
"""Changes the activity of use_default_font in dconf
"""
- self.settings.general.set_boolean('use-default-font', chk.get_active())
+ self.settings.general.set_boolean("use-default-font", chk.get_active())
def on_allow_bold_toggled(self, chk):
"""Changes the value of allow_bold in dconf
"""
- self.settings.styleFont.set_boolean('allow-bold', chk.get_active())
+ self.settings.styleFont.set_boolean("allow-bold", chk.get_active())
def on_bold_is_bright_toggled(self, chk):
"""Changes the value of bold_is_bright in dconf
"""
- self.settings.styleFont.set_boolean('bold-is-bright', chk.get_active())
+ self.settings.styleFont.set_boolean("bold-is-bright", chk.get_active())
def on_font_style_font_set(self, fbtn):
"""Changes the value of font_style in dconf
"""
- self.settings.styleFont.set_string('style', fbtn.get_font_name())
+ self.settings.styleFont.set_string("style", fbtn.get_font_name())
def on_transparency_value_changed(self, hscale):
"""Changes the value of background_transparency in dconf
"""
value = hscale.get_value()
self.prefDlg.set_colors_from_settings()
- self.settings.styleBackground.set_int('transparency', MAX_TRANSPARENCY - int(value))
+ self.settings.styleBackground.set_int("transparency", MAX_TRANSPARENCY - int(value))
# compatibility tab
@@ -651,16 +528,16 @@ class PrefsCallbacks():
"""Changes the value of compat_backspace in dconf
"""
val = combo.get_active_text()
- self.settings.general.set_string('compat-backspace', ERASE_BINDINGS[val])
+ self.settings.general.set_string("compat-backspace", ERASE_BINDINGS[val])
def on_delete_binding_changed(self, combo):
"""Changes the value of compat_delete in dconf
"""
val = combo.get_active_text()
- self.settings.general.set_string('compat-delete', ERASE_BINDINGS[val])
+ self.settings.general.set_string("compat-delete", ERASE_BINDINGS[val])
def on_custom_command_file_chooser_file_changed(self, filechooser):
- self.settings.general.set_string('custom-command-file', filechooser.get_filename())
+ self.settings.general.set_string("custom-command-file", filechooser.get_filename())
def toggle_prompt_on_quit_sensitivity(self, combo):
self.prefDlg.toggle_prompt_on_quit_sensitivity(combo)
@@ -701,12 +578,12 @@ class PrefsCallbacks():
def on_window_vertical_displacement_value_changed(self, spin):
"""Changes the value of window-vertical-displacement
"""
- self.settings.general.set_int('window-vertical-displacement', int(spin.get_value()))
+ self.settings.general.set_int("window-vertical-displacement", int(spin.get_value()))
def on_window_horizontal_displacement_value_changed(self, spin):
"""Changes the value of window-horizontal-displacement
"""
- self.settings.general.set_int('window-horizontal-displacement', int(spin.get_value()))
+ self.settings.general.set_int("window-horizontal-displacement", int(spin.get_value()))
def reload_erase_combos(self, btn=None):
self.prefDlg.reload_erase_combos(btn)
@@ -727,7 +604,7 @@ class PrefsDialog(SimpleGladeApp):
self.hotkey_alread_used = False
self.store = None
- super(PrefsDialog, self).__init__(gladefile('prefs.glade'), root='config-window')
+ super(PrefsDialog, self).__init__(gladefile("prefs.glade"), root="config-window")
style_provider = Gtk.CssProvider()
css_data = dedent(
"""
@@ -738,7 +615,7 @@ class PrefsDialog(SimpleGladeApp):
).encode()
style_provider.load_from_data(css_data)
Gtk.StyleContext.add_provider_for_screen(
- Gdk.Screen.get_default(), style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
+ Gdk.Screen.get_default(), style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION,
)
self.get_widget("quick_open_command_line").get_style_context().add_class("monospace")
self.get_widget("quick_open_supported_patterns").get_style_context().add_class("monospace")
@@ -747,14 +624,14 @@ class PrefsDialog(SimpleGladeApp):
self.add_callbacks(PrefsCallbacks(self))
# window cleanup handler
- self.window = self.get_widget('config-window')
- self.get_widget('config-window').connect('destroy', self.on_destroy)
+ self.window = self.get_widget("config-window")
+ self.get_widget("config-window").connect("destroy", self.on_destroy)
# images
- ipath = pixmapfile('guake-notification.png')
- self.get_widget('image_logo').set_from_file(ipath)
- ipath = pixmapfile('quick-open.png')
- self.get_widget('image_quick_open').set_from_file(ipath)
+ ipath = pixmapfile("guake-notification.png")
+ self.get_widget("image_logo").set_from_file(ipath)
+ ipath = pixmapfile("quick-open.png")
+ self.get_widget("image_quick_open").set_from_file(ipath)
# Model format:
# 0: the keybinding path in gsettings (str, hidden),
@@ -762,38 +639,38 @@ class PrefsDialog(SimpleGladeApp):
# 2: human readable accelerator (str)
# 3: gtk accelerator (str, hidden)
self.store = Gtk.TreeStore(str, str, str, str)
- treeview = self.get_widget('treeview-keys')
+ treeview = self.get_widget("treeview-keys")
treeview.set_model(self.store)
treeview.set_rules_hint(True)
- treeview.connect('button-press-event', self.start_editing)
+ treeview.connect("button-press-event", self.start_editing)
treeview.set_activate_on_single_click(True)
renderer = Gtk.CellRendererText()
- column = Gtk.TreeViewColumn(_('Action'), renderer, text=1)
- column.set_property('expand', True)
+ column = Gtk.TreeViewColumn(_("Action"), renderer, text=1)
+ column.set_property("expand", True)
treeview.append_column(column)
renderer = Gtk.CellRendererAccel()
- renderer.set_property('editable', True)
- renderer.connect('accel-edited', self.on_accel_edited)
- renderer.connect('accel-cleared', self.on_accel_cleared)
- column = Gtk.TreeViewColumn(_('Shortcut'), renderer, text=2)
+ renderer.set_property("editable", True)
+ renderer.connect("accel-edited", self.on_accel_edited)
+ renderer.connect("accel-cleared", self.on_accel_cleared)
+ column = Gtk.TreeViewColumn(_("Shortcut"), renderer, text=2)
column.pack_start(renderer, True)
- column.set_property('expand', False)
+ column.set_property("expand", False)
column.add_attribute(renderer, "accel-mods", 0)
column.add_attribute(renderer, "accel-key", 1)
treeview.append_column(column)
- class fake_guake():
+ class fake_guake:
pass
fg = fake_guake()
fg.window = self.window
fg.settings = self.settings
self.demo_terminal = GuakeTerminal(fg)
- self.demo_terminal_box = self.get_widget('demo_terminal_box')
+ self.demo_terminal_box = self.get_widget("demo_terminal_box")
self.demo_terminal_box.add(self.demo_terminal)
pid = self.spawn_sync_pid(None, self.demo_terminal)
@@ -801,8 +678,10 @@ class PrefsDialog(SimpleGladeApp):
self.demo_terminal.pid = pid
self.settings.general.bind(
- 'tab-close-buttons', self.get_widget('tab-close-buttons'), 'active',
- Gio.SettingsBindFlags.DEFAULT
+ "tab-close-buttons",
+ self.get_widget("tab-close-buttons"),
+ "active",
+ Gio.SettingsBindFlags.DEFAULT,
)
self.populate_shell_combo()
@@ -810,27 +689,27 @@ class PrefsDialog(SimpleGladeApp):
self.populate_display_n()
self.populate_gtk_theme_names()
self.load_configs()
- self.get_widget('config-window').hide()
+ self.get_widget("config-window").hide()
def spawn_sync_pid(self, directory=None, terminal=None):
argv = list()
- user_shell = self.settings.general.get_string('default-shell')
+ user_shell = self.settings.general.get_string("default-shell")
if user_shell and os.path.exists(user_shell):
argv.append(user_shell)
else:
- argv.append(os.environ['SHELL'])
+ argv.append(os.environ["SHELL"])
- login_shell = self.settings.general.get_boolean('use-login-shell')
+ login_shell = self.settings.general.get_boolean("use-login-shell")
if login_shell:
- argv.append('--login')
+ argv.append("--login")
if isinstance(directory, str):
wd = directory
else:
- wd = os.environ['HOME']
+ wd = os.environ["HOME"]
pid = terminal.spawn_sync(
- Vte.PtyFlags.DEFAULT, wd, argv, [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None, None
+ Vte.PtyFlags.DEFAULT, wd, argv, [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None, None, None,
)
try:
@@ -848,13 +727,13 @@ class PrefsDialog(SimpleGladeApp):
"""Calls the main window show_all method and presents the
window in the desktop.
"""
- self.get_widget('config-window').show_all()
- self.get_widget('config-window').present()
+ self.get_widget("config-window").show_all()
+ self.get_widget("config-window").present()
def hide(self):
"""Calls the main window hide function.
"""
- self.get_widget('config-window').hide()
+ self.get_widget("config-window").hide()
def on_destroy(self, window):
self.demo_terminal.kill()
@@ -864,34 +743,34 @@ class PrefsDialog(SimpleGladeApp):
"""If toggle_on_close_tabs is set to 2 (Always), prompt_on_quit has no
effect.
"""
- self.get_widget('prompt_on_quit').set_sensitive(combo.get_active() != 2)
+ self.get_widget("prompt_on_quit").set_sensitive(combo.get_active() != 2)
def toggle_style_sensitivity(self, chk):
"""If the user chooses to use the gnome default font
configuration it means that he will not be able to use the
font selector.
"""
- self.get_widget('font_style').set_sensitive(not chk.get_active())
+ self.get_widget("font_style").set_sensitive(not chk.get_active())
def toggle_use_font_background_sensitivity(self, chk):
"""If the user chooses to use the gnome default font
configuration it means that he will not be able to use the
font selector.
"""
- self.get_widget('palette_16').set_sensitive(chk.get_active())
- self.get_widget('palette_17').set_sensitive(chk.get_active())
+ self.get_widget("palette_16").set_sensitive(chk.get_active())
+ self.get_widget("palette_17").set_sensitive(chk.get_active())
def toggle_display_n_sensitivity(self, chk):
"""When the user unchecks 'on mouse display', the option to select an
alternate display should be enabeld.
"""
- self.get_widget('display_n').set_sensitive(not chk.get_active())
+ self.get_widget("display_n").set_sensitive(not chk.get_active())
def toggle_quick_open_command_line_sensitivity(self, chk):
"""When the user unchecks 'enable quick open', the command line should be disabled
"""
- self.get_widget('quick_open_command_line').set_sensitive(chk.get_active())
- self.get_widget('quick_open_in_current_terminal').set_sensitive(chk.get_active())
+ self.get_widget("quick_open_command_line").set_sensitive(chk.get_active())
+ self.get_widget("quick_open_in_current_terminal").set_sensitive(chk.get_active())
def toggle_use_vte_titles(self, chk):
"""When vte titles aren't used, there is nothing to abbreviate
@@ -899,19 +778,19 @@ class PrefsDialog(SimpleGladeApp):
self.update_vte_subwidgets_states()
def update_vte_subwidgets_states(self):
- do_use_vte_titles = self.get_widget('use_vte_titles').get_active()
- self.get_widget('tab_name_display').set_sensitive(do_use_vte_titles)
- self.get_widget('lbl_tab_name_display').set_sensitive(do_use_vte_titles)
- self.get_widget('max_tab_name_length').set_sensitive(do_use_vte_titles)
- self.get_widget('lbl_max_tab_name_length').set_sensitive(do_use_vte_titles)
+ do_use_vte_titles = self.get_widget("use_vte_titles").get_active()
+ self.get_widget("tab_name_display").set_sensitive(do_use_vte_titles)
+ self.get_widget("lbl_tab_name_display").set_sensitive(do_use_vte_titles)
+ self.get_widget("max_tab_name_length").set_sensitive(do_use_vte_titles)
+ self.get_widget("lbl_max_tab_name_length").set_sensitive(do_use_vte_titles)
def on_reset_compat_defaults_clicked(self, bnt):
"""Reset default values to compat_{backspace,delete} dconf
keys. The default values are retrivied from the guake.schemas
file.
"""
- self.settings.general.reset('compat-backspace')
- self.settings.general.reset('compat-delete')
+ self.settings.general.reset("compat-backspace")
+ self.settings.general.reset("compat-delete")
self.reload_erase_combos()
def on_palette_name_changed(self, combo):
@@ -920,8 +799,8 @@ class PrefsDialog(SimpleGladeApp):
palette_name = combo.get_active_text()
if palette_name not in PALETTES:
return
- self.settings.styleFont.set_string('palette', PALETTES[palette_name])
- self.settings.styleFont.set_string('palette-name', palette_name)
+ self.settings.styleFont.set_string("palette", PALETTES[palette_name])
+ self.settings.styleFont.set_string("palette-name", palette_name)
self.set_palette_colors(PALETTES[palette_name])
self.update_demo_palette(PALETTES[palette_name])
@@ -929,12 +808,12 @@ class PrefsDialog(SimpleGladeApp):
"""Changes the value of cursor_shape in dconf
"""
index = combo.get_active()
- self.settings.style.set_int('cursor-shape', index)
+ self.settings.style.set_int("cursor-shape", index)
def on_blink_cursor_toggled(self, chk):
"""Changes the value of blink_cursor in dconf
"""
- self.settings.style.set_int('cursor-blink-mode', chk.get_active())
+ self.settings.style.set_int("cursor-blink-mode", chk.get_active())
def on_palette_color_set(self, btn):
"""Changes the value of palette in dconf
@@ -942,11 +821,11 @@ class PrefsDialog(SimpleGladeApp):
palette = []
for i in range(18):
- palette.append(hexify_color(self.get_widget('palette_%d' % i).get_color()))
- palette = ':'.join(palette)
- self.settings.styleFont.set_string('palette', palette)
- self.settings.styleFont.set_string('palette-name', _('Custom'))
- self.set_palette_name('Custom')
+ palette.append(hexify_color(self.get_widget("palette_%d" % i).get_color()))
+ palette = ":".join(palette)
+ self.settings.styleFont.set_string("palette", palette)
+ self.settings.styleFont.set_string("palette-name", _("Custom"))
+ self.set_palette_name("Custom")
self.update_demo_palette(palette)
# this methods should be moved to the GuakeTerminal class FROM HERE
@@ -955,7 +834,7 @@ class PrefsDialog(SimpleGladeApp):
"""If the given palette matches an existing one, shows it in the
combobox
"""
- combo = self.get_widget('palette_name')
+ combo = self.get_widget("palette_name")
found = False
log.debug("wanting palette: %r", palette_name)
for i in combo.get_model():
@@ -970,10 +849,10 @@ class PrefsDialog(SimpleGladeApp):
self.set_colors_from_settings()
def set_colors_from_settings(self):
- transparency = self.settings.styleBackground.get_int('transparency')
+ transparency = self.settings.styleBackground.get_int("transparency")
colorRGBA = Gdk.RGBA(0, 0, 0, 0)
palette_list = list()
- for color in self.settings.styleFont.get_string("palette").split(':'):
+ for color in self.settings.styleFont.get_string("palette").split(":"):
colorRGBA.parse(color)
palette_list.append(colorRGBA.copy())
@@ -995,41 +874,41 @@ class PrefsDialog(SimpleGladeApp):
# TO HERE (see above)
def fill_palette_names(self):
- combo = self.get_widget('palette_name')
+ combo = self.get_widget("palette_name")
for palette in sorted(PALETTES):
combo.append_text(palette)
self.custom_palette_index = len(PALETTES)
- combo.append_text(_('Custom'))
+ combo.append_text(_("Custom"))
def set_cursor_shape(self, shape_index):
- self.get_widget('cursor_shape').set_active(shape_index)
+ self.get_widget("cursor_shape").set_active(shape_index)
def set_cursor_blink_mode(self, mode_index):
- self.get_widget('cursor_blink_mode').set_active(mode_index)
+ self.get_widget("cursor_blink_mode").set_active(mode_index)
def set_palette_colors(self, palette):
"""Updates the color buttons with the given palette
"""
- palette = palette.split(':')
+ palette = palette.split(":")
for i, pal in enumerate(palette):
x, color = Gdk.Color.parse(pal)
- self.get_widget('palette_%d' % i).set_color(color)
+ self.get_widget("palette_%d" % i).set_color(color)
def reload_erase_combos(self, btn=None):
"""Read from dconf the value of compat_{backspace,delete} vars
and select the right option in combos.
"""
# backspace erase binding
- combo = self.get_widget('backspace-binding-combobox')
- binding = self.settings.general.get_string('compat-backspace')
+ combo = self.get_widget("backspace-binding-combobox")
+ binding = self.settings.general.get_string("compat-backspace")
for i in combo.get_model():
if ERASE_BINDINGS.get(i[0]) == binding:
combo.set_active_iter(i.iter)
break
# delete erase binding
- combo = self.get_widget('delete-binding-combobox')
- binding = self.settings.general.get_string('compat-delete')
+ combo = self.get_widget("delete-binding-combobox")
+ binding = self.settings.general.get_string("compat-delete")
for i in combo.get_model():
if ERASE_BINDINGS.get(i[0]) == binding:
combo.set_active_iter(i.iter)
@@ -1045,9 +924,9 @@ class PrefsDialog(SimpleGladeApp):
hook_show_widget.set_text(hook_show_setting)
def _load_default_shell_settings(self):
- combo = self.get_widget('default_shell')
+ combo = self.get_widget("default_shell")
# get the value for defualt shell. If unset, set to USER_SHELL_VALUE.
- value = self.settings.general.get_string('default-shell') or USER_SHELL_VALUE
+ value = self.settings.general.get_string("default-shell") or USER_SHELL_VALUE
for i in combo.get_model():
if i[0] == value:
combo.set_active_iter(i.iter)
@@ -1056,16 +935,16 @@ class PrefsDialog(SimpleGladeApp):
def _load_screen_settings(self):
"""Load screen settings"""
# display number / use primary display
- combo = self.get_widget('display_n')
- dest_screen = self.settings.general.get_int('display-n')
+ combo = self.get_widget("display_n")
+ dest_screen = self.settings.general.get_int("display-n")
# If Guake is configured to use a screen that is not currently attached,
# default to 'primary display' option.
- screen = self.get_widget('config-window').get_screen()
+ screen = self.get_widget("config-window").get_screen()
n_screens = screen.get_n_monitors()
if dest_screen > n_screens - 1:
- self.settings.general.set_boolean('mouse-display', False)
+ self.settings.general.set_boolean("mouse-display", False)
dest_screen = screen.get_primary_monitor()
- self.settings.general.set_int('display-n', dest_screen)
+ self.settings.general.set_int("display-n", dest_screen)
if dest_screen == ALWAYS_ON_PRIMARY:
first_item = combo.get_model().get_iter_first()
@@ -1087,227 +966,227 @@ class PrefsDialog(SimpleGladeApp):
self._load_default_shell_settings()
# restore tabs startup
- value = self.settings.general.get_boolean('restore-tabs-startup')
- self.get_widget('restore-tabs-startup').set_active(value)
+ value = self.settings.general.get_boolean("restore-tabs-startup")
+ self.get_widget("restore-tabs-startup").set_active(value)
# restore tabs notify
- value = self.settings.general.get_boolean('restore-tabs-notify')
- self.get_widget('restore-tabs-notify').set_active(value)
+ value = self.settings.general.get_boolean("restore-tabs-notify")
+ self.get_widget("restore-tabs-notify").set_active(value)
# save tabs when changed
- value = self.settings.general.get_boolean('save-tabs-when-changed')
- self.get_widget('save-tabs-when-changed').set_active(value)
+ value = self.settings.general.get_boolean("save-tabs-when-changed")
+ self.get_widget("save-tabs-when-changed").set_active(value)
# login shell
- value = self.settings.general.get_boolean('use-login-shell')
- self.get_widget('use_login_shell').set_active(value)
+ value = self.settings.general.get_boolean("use-login-shell")
+ self.get_widget("use_login_shell").set_active(value)
# tray icon
- value = self.settings.general.get_boolean('use-trayicon')
- self.get_widget('use_trayicon').set_active(value)
+ value = self.settings.general.get_boolean("use-trayicon")
+ self.get_widget("use_trayicon").set_active(value)
# popup
- value = self.settings.general.get_boolean('use-popup')
- self.get_widget('use_popup').set_active(value)
+ value = self.settings.general.get_boolean("use-popup")
+ self.get_widget("use_popup").set_active(value)
# workspace-specific tab sets
- value = self.settings.general.get_boolean('workspace-specific-tab-sets')
- self.get_widget('workspace-specific-tab-sets').set_active(value)
+ value = self.settings.general.get_boolean("workspace-specific-tab-sets")
+ self.get_widget("workspace-specific-tab-sets").set_active(value)
# prompt on quit
- value = self.settings.general.get_boolean('prompt-on-quit')
- self.get_widget('prompt_on_quit').set_active(value)
+ value = self.settings.general.get_boolean("prompt-on-quit")
+ self.get_widget("prompt_on_quit").set_active(value)
# prompt on close_tab
- value = self.settings.general.get_int('prompt-on-close-tab')
- self.get_widget('prompt_on_close_tab').set_active(value)
- self.get_widget('prompt_on_quit').set_sensitive(value != 2)
+ value = self.settings.general.get_int("prompt-on-close-tab")
+ self.get_widget("prompt_on_close_tab").set_active(value)
+ self.get_widget("prompt_on_quit").set_sensitive(value != 2)
# gtk theme theme
- value = self.settings.general.get_string('gtk-theme-name')
- combo = self.get_widget('gtk_theme_name')
+ value = self.settings.general.get_string("gtk-theme-name")
+ combo = self.get_widget("gtk_theme_name")
for i in combo.get_model():
if i[0] == value:
combo.set_active_iter(i.iter)
break
# prefer gtk theme theme
- value = self.settings.general.get_boolean('gtk-prefer-dark-theme')
- self.get_widget('gtk_prefer_dark_theme').set_active(value)
+ value = self.settings.general.get_boolean("gtk-prefer-dark-theme")
+ self.get_widget("gtk_prefer_dark_theme").set_active(value)
# ontop
- value = self.settings.general.get_boolean('window-ontop')
- self.get_widget('window_ontop').set_active(value)
+ value = self.settings.general.get_boolean("window-ontop")
+ self.get_widget("window_ontop").set_active(value)
# tab ontop
- value = self.settings.general.get_boolean('tab-ontop')
- self.get_widget('tab_ontop').set_active(value)
+ value = self.settings.general.get_boolean("tab-ontop")
+ self.get_widget("tab_ontop").set_active(value)
# refocus
- value = self.settings.general.get_boolean('window-refocus')
- self.get_widget('window_refocus').set_active(value)
+ value = self.settings.general.get_boolean("window-refocus")
+ self.get_widget("window_refocus").set_active(value)
# losefocus
- value = self.settings.general.get_boolean('window-losefocus')
- self.get_widget('window_losefocus').set_active(value)
+ value = self.settings.general.get_boolean("window-losefocus")
+ self.get_widget("window_losefocus").set_active(value)
# use VTE titles
- value = self.settings.general.get_boolean('use-vte-titles')
- self.get_widget('use_vte_titles').set_active(value)
+ value = self.settings.general.get_boolean("use-vte-titles")
+ self.get_widget("use_vte_titles").set_active(value)
# set window title
- value = self.settings.general.get_boolean('set-window-title')
- self.get_widget('set_window_title').set_active(value)
+ value = self.settings.general.get_boolean("set-window-title")
+ self.get_widget("set_window_title").set_active(value)
# set tab name display method
- self.get_widget('tab_name_display').set_sensitive(value)
- value = self.settings.general.get_int('display-tab-names')
- self.get_widget('tab_name_display').set_active(value)
+ self.get_widget("tab_name_display").set_sensitive(value)
+ value = self.settings.general.get_int("display-tab-names")
+ self.get_widget("tab_name_display").set_active(value)
# max tab name length
- value = self.settings.general.get_int('max-tab-name-length')
- self.get_widget('max_tab_name_length').set_value(value)
+ value = self.settings.general.get_int("max-tab-name-length")
+ self.get_widget("max_tab_name_length").set_value(value)
self.update_vte_subwidgets_states()
- value = self.settings.general.get_int('window-height')
- self.get_widget('window_height').set_value(value)
+ value = self.settings.general.get_int("window-height")
+ self.get_widget("window_height").set_value(value)
- value = self.settings.general.get_int('window-width')
- self.get_widget('window_width').set_value(value)
+ value = self.settings.general.get_int("window-width")
+ self.get_widget("window_width").set_value(value)
# window displacements
- value = self.settings.general.get_int('window-vertical-displacement')
- self.get_widget('window_vertical_displacement').set_value(value)
+ value = self.settings.general.get_int("window-vertical-displacement")
+ self.get_widget("window_vertical_displacement").set_value(value)
- value = self.settings.general.get_int('window-horizontal-displacement')
- self.get_widget('window_horizontal_displacement').set_value(value)
+ value = self.settings.general.get_int("window-horizontal-displacement")
+ self.get_widget("window_horizontal_displacement").set_value(value)
- value = self.settings.general.get_int('window-halignment')
+ value = self.settings.general.get_int("window-halignment")
which_button = {
- ALIGN_RIGHT: 'radiobutton_align_right',
- ALIGN_LEFT: 'radiobutton_align_left',
- ALIGN_CENTER: 'radiobutton_align_center'
+ ALIGN_RIGHT: "radiobutton_align_right",
+ ALIGN_LEFT: "radiobutton_align_left",
+ ALIGN_CENTER: "radiobutton_align_center",
}
self.get_widget(which_button[value]).set_active(True)
self.get_widget("window_horizontal_displacement").set_sensitive(value != ALIGN_CENTER)
- value = self.settings.general.get_boolean('open-tab-cwd')
- self.get_widget('open_tab_cwd').set_active(value)
+ value = self.settings.general.get_boolean("open-tab-cwd")
+ self.get_widget("open_tab_cwd").set_active(value)
# tab bar
- value = self.settings.general.get_boolean('window-tabbar')
- self.get_widget('window_tabbar').set_active(value)
+ value = self.settings.general.get_boolean("window-tabbar")
+ self.get_widget("window_tabbar").set_active(value)
# fullscreen hide tabbar
- value = self.settings.general.get_boolean('fullscreen-hide-tabbar')
- self.get_widget('fullscreen_hide_tabbar').set_active(value)
+ value = self.settings.general.get_boolean("fullscreen-hide-tabbar")
+ self.get_widget("fullscreen_hide_tabbar").set_active(value)
# start fullscreen
- value = self.settings.general.get_boolean('start-fullscreen')
- self.get_widget('start_fullscreen').set_active(value)
+ value = self.settings.general.get_boolean("start-fullscreen")
+ self.get_widget("start_fullscreen").set_active(value)
# start at GNOME login
- value = self.settings.general.get_boolean('start-at-login')
- self.get_widget('start_at_login').set_active(value)
+ value = self.settings.general.get_boolean("start-at-login")
+ self.get_widget("start_at_login").set_active(value)
# use audible bell
- value = self.settings.general.get_boolean('use-audible-bell')
- self.get_widget('use_audible_bell').set_active(value)
+ value = self.settings.general.get_boolean("use-audible-bell")
+ self.get_widget("use_audible_bell").set_active(value)
self._load_screen_settings()
- value = self.settings.general.get_boolean('quick-open-enable')
- self.get_widget('quick_open_enable').set_active(value)
- self.get_widget('quick_open_command_line').set_sensitive(value)
- self.get_widget('quick_open_in_current_terminal').set_sensitive(value)
+ value = self.settings.general.get_boolean("quick-open-enable")
+ self.get_widget("quick_open_enable").set_active(value)
+ self.get_widget("quick_open_command_line").set_sensitive(value)
+ self.get_widget("quick_open_in_current_terminal").set_sensitive(value)
text = Gtk.TextBuffer()
- text = self.get_widget('quick_open_supported_patterns').get_buffer()
+ text = self.get_widget("quick_open_supported_patterns").get_buffer()
for title, matcher, _useless in QUICK_OPEN_MATCHERS:
text.insert_at_cursor("%s: %s\n" % (title, matcher))
- self.get_widget('quick_open_supported_patterns').set_buffer(text)
+ self.get_widget("quick_open_supported_patterns").set_buffer(text)
- value = self.settings.general.get_string('quick-open-command-line')
+ value = self.settings.general.get_string("quick-open-command-line")
if value is None:
value = "subl %(file_path)s:%(line_number)s"
- self.get_widget('quick_open_command_line').set_text(value)
+ self.get_widget("quick_open_command_line").set_text(value)
- value = self.settings.general.get_boolean('quick-open-in-current-terminal')
- self.get_widget('quick_open_in_current_terminal').set_active(value)
+ value = self.settings.general.get_boolean("quick-open-in-current-terminal")
+ self.get_widget("quick_open_in_current_terminal").set_active(value)
- value = self.settings.general.get_string('startup-script')
+ value = self.settings.general.get_string("startup-script")
if value:
- self.get_widget('startup_script').set_text(value)
+ self.get_widget("startup_script").set_text(value)
# use display where the mouse is currently
- value = self.settings.general.get_boolean('mouse-display')
- self.get_widget('mouse_display').set_active(value)
+ value = self.settings.general.get_boolean("mouse-display")
+ self.get_widget("mouse_display").set_active(value)
# scrollbar
- value = self.settings.general.get_boolean('use-scrollbar')
- self.get_widget('use_scrollbar').set_active(value)
+ value = self.settings.general.get_boolean("use-scrollbar")
+ self.get_widget("use_scrollbar").set_active(value)
# history size
- value = self.settings.general.get_int('history-size')
- self.get_widget('history_size').set_value(value)
+ value = self.settings.general.get_int("history-size")
+ self.get_widget("history_size").set_value(value)
# infinite history
- value = self.settings.general.get_boolean('infinite-history')
- self.get_widget('infinite_history').set_active(value)
+ value = self.settings.general.get_boolean("infinite-history")
+ self.get_widget("infinite_history").set_active(value)
# scroll output
- value = self.settings.general.get_boolean('scroll-output')
- self.get_widget('scroll_output').set_active(value)
+ value = self.settings.general.get_boolean("scroll-output")
+ self.get_widget("scroll_output").set_active(value)
# scroll keystroke
- value = self.settings.general.get_boolean('scroll-keystroke')
- self.get_widget('scroll_keystroke').set_active(value)
+ value = self.settings.general.get_boolean("scroll-keystroke")
+ self.get_widget("scroll_keystroke").set_active(value)
# default font
- value = self.settings.general.get_boolean('use-default-font')
- self.get_widget('use_default_font').set_active(value)
- self.get_widget('font_style').set_sensitive(not value)
+ value = self.settings.general.get_boolean("use-default-font")
+ self.get_widget("use_default_font").set_active(value)
+ self.get_widget("font_style").set_sensitive(not value)
# font
- value = self.settings.styleFont.get_string('style')
+ value = self.settings.styleFont.get_string("style")
if value:
- self.get_widget('font_style').set_font_name(value)
+ self.get_widget("font_style").set_font_name(value)
# allow bold font
- value = self.settings.styleFont.get_boolean('allow-bold')
- self.get_widget('allow_bold').set_active(value)
+ value = self.settings.styleFont.get_boolean("allow-bold")
+ self.get_widget("allow_bold").set_active(value)
# use bold is bright
- value = self.settings.styleFont.get_boolean('bold-is-bright')
- self.get_widget('bold_is_bright').set_active(value)
+ value = self.settings.styleFont.get_boolean("bold-is-bright")
+ self.get_widget("bold_is_bright").set_active(value)
# palette
self.fill_palette_names()
- value = self.settings.styleFont.get_string('palette-name')
+ value = self.settings.styleFont.get_string("palette-name")
self.set_palette_name(value)
- value = self.settings.styleFont.get_string('palette')
+ value = self.settings.styleFont.get_string("palette")
self.set_palette_colors(value)
self.update_demo_palette(value)
# cursor shape
- value = self.settings.style.get_int('cursor-shape')
+ value = self.settings.style.get_int("cursor-shape")
self.set_cursor_shape(value)
# cursor blink
- value = self.settings.style.get_int('cursor-blink-mode')
+ value = self.settings.style.get_int("cursor-blink-mode")
self.set_cursor_blink_mode(value)
- value = self.settings.styleBackground.get_int('transparency')
- self.get_widget('background_transparency').set_value(MAX_TRANSPARENCY - value)
+ value = self.settings.styleBackground.get_int("transparency")
+ self.get_widget("background_transparency").set_value(MAX_TRANSPARENCY - value)
- value = self.settings.general.get_int('window-valignment')
- self.get_widget('top_align').set_active(value)
+ value = self.settings.general.get_int("window-valignment")
+ self.get_widget("top_align").set_active(value)
# it's a separated method, to be reused.
self.reload_erase_combos()
# custom command context-menu configuration file
- custom_command_file = self.settings.general.get_string('custom-command-file')
+ custom_command_file = self.settings.general.get_string("custom-command-file")
if custom_command_file:
custom_command_file_name = os.path.expanduser(custom_command_file)
else:
@@ -1315,13 +1194,13 @@ class PrefsDialog(SimpleGladeApp):
custom_cmd_filter = Gtk.FileFilter()
custom_cmd_filter.set_name(_("JSON files"))
custom_cmd_filter.add_pattern("*.json")
- self.get_widget('custom_command_file_chooser').add_filter(custom_cmd_filter)
+ self.get_widget("custom_command_file_chooser").add_filter(custom_cmd_filter)
all_files_filter = Gtk.FileFilter()
all_files_filter.set_name(_("All files"))
all_files_filter.add_pattern("*")
- self.get_widget('custom_command_file_chooser').add_filter(all_files_filter)
+ self.get_widget("custom_command_file_chooser").add_filter(all_files_filter)
if custom_command_file_name:
- self.get_widget('custom_command_file_chooser').set_filename(custom_command_file_name)
+ self.get_widget("custom_command_file_chooser").set_filename(custom_command_file_name)
# hooks
self._load_hooks_settings()
@@ -1332,21 +1211,21 @@ class PrefsDialog(SimpleGladeApp):
"""Read the /etc/shells and looks for installed shells to
fill the default_shell combobox.
"""
- cb = self.get_widget('default_shell')
+ cb = self.get_widget("default_shell")
# append user shell as first option
cb.append_text(USER_SHELL_VALUE)
if os.path.exists(SHELLS_FILE):
lines = open(SHELLS_FILE).readlines()
for i in lines:
possible = i.strip()
- if possible and not possible.startswith('#') and os.path.exists(possible):
+ if possible and not possible.startswith("#") and os.path.exists(possible):
cb.append_text(possible)
for i in get_binaries_from_path(PYTHONS):
cb.append_text(i)
def populate_gtk_theme_names(self):
- cb = self.get_widget('gtk_theme_name')
+ cb = self.get_widget("gtk_theme_name")
for name in list_all_themes():
name = name.strip()
cb.append_text(name)
@@ -1356,31 +1235,31 @@ class PrefsDialog(SimpleGladeApp):
the TreeStore used by the preferences window treeview.
"""
for group in HOTKEYS:
- parent = self.store.append(None, [None, group['label'], None, None])
- for item in group['keys']:
- if item['key'] == "show-hide" or item['key'] == "show-focus":
- accel = self.settings.keybindingsGlobal.get_string(item['key'])
+ parent = self.store.append(None, [None, group["label"], None, None])
+ for item in group["keys"]:
+ if item["key"] == "show-hide" or item["key"] == "show-focus":
+ accel = self.settings.keybindingsGlobal.get_string(item["key"])
else:
- accel = self.settings.keybindingsLocal.get_string(item['key'])
- gsettings_path = item['key']
+ accel = self.settings.keybindingsLocal.get_string(item["key"])
+ gsettings_path = item["key"]
keycode, mask = Gtk.accelerator_parse(accel)
keylabel = Gtk.accelerator_get_label(keycode, mask)
- self.store.append(parent, [gsettings_path, item['label'], keylabel, accel])
- self.get_widget('treeview-keys').expand_all()
+ self.store.append(parent, [gsettings_path, item["label"], keylabel, accel])
+ self.get_widget("treeview-keys").expand_all()
def populate_display_n(self):
"""Get the number of displays and populate this drop-down box
with them all. Prepend the "always on primary" option.
"""
- cb = self.get_widget('display_n')
- screen = self.get_widget('config-window').get_screen()
+ cb = self.get_widget("display_n")
+ screen = self.get_widget("config-window").get_screen()
cb.append_text("always on primary")
for m in range(0, int(screen.get_n_monitors())):
if m == int(screen.get_primary_monitor()):
# TODO l10n
- cb.append_text(str(m) + ' ' + '(primary)')
+ cb.append_text(str(m) + " " + "(primary)")
else:
cb.append_text(str(m))
@@ -1412,30 +1291,34 @@ class PrefsDialog(SimpleGladeApp):
keyentry = model.get_value(subiter, HOTKET_MODEL_INDEX_ACCEL)
if keyentry and keyentry == accelerator:
self.hotkey_alread_used = True
- msg = _("The shortcut \"%s\" is already in use.") % html_escape(accelerator)
- ShowableError(self.window, _('Error setting keybinding.'), msg, -1)
- raise Exception('This is ok, we just use it to break the foreach loop!')
+ msg = _('The shortcut "%s" is already in use.') % html_escape(accelerator)
+ ShowableError(self.window, _("Error setting keybinding."), msg, -1)
+ raise Exception("This is ok, we just use it to break the foreach loop!")
self.store.foreach(each_key)
if self.hotkey_alread_used:
return False
# avoiding problems with common keys
- if ((mods == 0 and key != 0) and
- ((ord('a') <= key <= ord('z')) or (ord('A') <= key <= ord('Z')) or
- (ord('0') <= key <= ord('9')))):
+ if (mods == 0 and key != 0) and (
+ (ord("a") <= key <= ord("z"))
+ or (ord("A") <= key <= ord("Z"))
+ or (ord("0") <= key <= ord("9"))
+ ):
dialog = Gtk.MessageDialog(
- self.get_widget('config-window'),
+ self.get_widget("config-window"),
Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
- Gtk.MessageType.WARNING, Gtk.ButtonsType.OK,
+ Gtk.MessageType.WARNING,
+ Gtk.ButtonsType.OK,
_(
- "The shortcut \"%s\" cannot be used "
+ 'The shortcut "%s" cannot be used '
"because it will become impossible to "
"type using this key.\n\n"
"Please try with a key such as "
"Control, Alt or Shift at the same "
"time.\n"
- ) % html_escape(chr(key))
+ )
+ % html_escape(chr(key)),
)
dialog.run()
dialog.destroy()
@@ -1464,9 +1347,9 @@ class PrefsDialog(SimpleGladeApp):
self.store[path][HOTKET_MODEL_INDEX_HUMAN_ACCEL] = ""
self.store[path][HOTKET_MODEL_INDEX_ACCEL] = "None"
if dconf_path == "show-focus":
- self.settings.keybindingsGlobal.set_string(dconf_path, 'disabled')
+ self.settings.keybindingsGlobal.set_string(dconf_path, "disabled")
else:
- self.settings.keybindingsLocal.set_string(dconf_path, 'disabled')
+ self.settings.keybindingsLocal.set_string(dconf_path, "disabled")
def start_editing(self, treeview, event):
"""Make the treeview grab the focus and start editing the cell
@@ -1488,14 +1371,13 @@ class PrefsDialog(SimpleGladeApp):
return False
-class KeyEntry():
-
+class KeyEntry:
def __init__(self, keycode, mask):
self.keycode = keycode
self.mask = mask
def __repr__(self):
- return u'KeyEntry(%d, %d)' % (self.keycode, self.mask)
+ return "KeyEntry(%d, %d)" % (self.keycode, self.mask)
def __eq__(self, rval):
return self.keycode == rval.keycode and self.mask == rval.mask
@@ -1506,19 +1388,19 @@ def setup_standalone_signals(instance):
makes the delete event of dialog and click on close button finish
the application.
"""
- window = instance.get_widget('config-window')
- window.connect('delete-event', Gtk.main_quit)
+ window = instance.get_widget("config-window")
+ window.connect("delete-event", Gtk.main_quit)
# We need to block the execution of the already associated
# callback before connecting the new handler.
- button = instance.get_widget('button1')
+ button = instance.get_widget("button1")
button.handler_block_by_func(instance.gtk_widget_destroy)
- button.connect('clicked', Gtk.main_quit)
+ button.connect("clicked", Gtk.main_quit)
return instance
-if __name__ == '__main__':
+if __name__ == "__main__":
bindtextdomain(NAME, LOCALE_DIR)
setup_standalone_signals(PrefsDialog(None)).show()
Gtk.main()
diff --git a/guake/settings.py b/guake/settings.py
index 3b0f6ea4..8f1cca98 100644
--- a/guake/settings.py
+++ b/guake/settings.py
@@ -21,14 +21,14 @@ Boston, MA 02110-1301 USA
import logging
import gi
-gi.require_version('Gtk', '3.0')
+
+gi.require_version("Gtk", "3.0")
from gi.repository import Gio
log = logging.getLogger(__name__)
-class Settings():
-
+class Settings:
def __init__(self, schema_source):
Settings.enhanceSetting()
@@ -39,58 +39,60 @@ class Settings():
self.guake.connect("changed", self.guake.triggerOnChangedValue)
self.general = Gio.Settings.new_full(
- Gio.SettingsSchemaSource.lookup(schema_source, "guake.general", False), None, None
+ Gio.SettingsSchemaSource.lookup(schema_source, "guake.general", False), None, None,
)
self.general.initEnhancements()
self.general.connect("changed", self.general.triggerOnChangedValue)
self.keybindings = Gio.Settings.new_full(
- Gio.SettingsSchemaSource.lookup(schema_source, "guake.keybindings", False), None, None
+ Gio.SettingsSchemaSource.lookup(schema_source, "guake.keybindings", False), None, None,
)
self.keybindings.initEnhancements()
self.keybindings.connect("changed", self.keybindings.triggerOnChangedValue)
self.keybindingsGlobal = Gio.Settings.new_full(
- Gio.SettingsSchemaSource.lookup(schema_source, "guake.keybindings.global", False), None,
- None
+ Gio.SettingsSchemaSource.lookup(schema_source, "guake.keybindings.global", False),
+ None,
+ None,
)
self.keybindingsGlobal.initEnhancements()
self.keybindingsGlobal.connect("changed", self.keybindingsGlobal.triggerOnChangedValue)
self.keybindingsLocal = Gio.Settings.new_full(
- Gio.SettingsSchemaSource.lookup(schema_source, "guake.keybindings.local", False), None,
- None
+ Gio.SettingsSchemaSource.lookup(schema_source, "guake.keybindings.local", False),
+ None,
+ None,
)
self.keybindingsLocal.initEnhancements()
self.keybindingsLocal.connect("changed", self.keybindingsLocal.triggerOnChangedValue)
self.styleBackground = Gio.Settings.new_full(
- Gio.SettingsSchemaSource.lookup(schema_source, "guake.style.background", False), None,
- None
+ Gio.SettingsSchemaSource.lookup(schema_source, "guake.style.background", False),
+ None,
+ None,
)
self.styleBackground.initEnhancements()
self.styleBackground.connect("changed", self.styleBackground.triggerOnChangedValue)
self.styleFont = Gio.Settings.new_full(
- Gio.SettingsSchemaSource.lookup(schema_source, "guake.style.font", False), None, None
+ Gio.SettingsSchemaSource.lookup(schema_source, "guake.style.font", False), None, None,
)
self.styleFont.initEnhancements()
self.styleFont.connect("changed", self.styleFont.triggerOnChangedValue)
self.style = Gio.Settings.new_full(
- Gio.SettingsSchemaSource.lookup(schema_source, "guake.style", False), None, None
+ Gio.SettingsSchemaSource.lookup(schema_source, "guake.style", False), None, None,
)
self.style.initEnhancements()
self.style.connect("changed", self.style.triggerOnChangedValue)
self.hooks = Gio.Settings.new_full(
- Gio.SettingsSchemaSource.lookup(schema_source, "guake.hooks", False), None, None
+ Gio.SettingsSchemaSource.lookup(schema_source, "guake.hooks", False), None, None,
)
self.hooks.initEnhancements()
self.hooks.connect("changed", self.hooks.triggerOnChangedValue)
def enhanceSetting():
-
def initEnhancements(self):
self.listeners = dict()
diff --git a/guake/simplegladeapp.py b/guake/simplegladeapp.py
index 073b8416..33d416d3 100644
--- a/guake/simplegladeapp.py
+++ b/guake/simplegladeapp.py
@@ -22,14 +22,14 @@ import re
import sys
import gi
-gi.require_version('Gtk', '3.0')
+
+gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
import tokenize
-class SimpleGladeApp():
-
+class SimpleGladeApp:
def __init__(self, path, root=None, domain=None, **kwargs):
"""
Load a glade file specified by glade_filename, using root as
@@ -138,11 +138,10 @@ class SimpleGladeApp():
raise AttributeError(
"instance %s already has an attribute %s" % (self, widget_api_name)
)
- else:
- setattr(self, widget_api_name, widget)
- if prefixes:
- # TODO is is a guess
- Gtk.Buildable.set_data(widget, "prefixes", prefixes)
+ setattr(self, widget_api_name, widget)
+ if prefixes:
+ # TODO is is a guess
+ Gtk.Buildable.set_data(widget, "prefixes", prefixes)
def add_prefix_actions(self, prefix_actions_proxy):
"""
diff --git a/guake/split_utils.py b/guake/split_utils.py
index 76714cc8..5059c579 100644
--- a/guake/split_utils.py
+++ b/guake/split_utils.py
@@ -18,14 +18,15 @@ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301 USA
"""
import gi
-gi.require_version('Gtk', '3.0')
+
+gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from guake.boxes import DualTerminalBox
from guake.boxes import RootTerminalBox
-class FocusMover():
+class FocusMover:
THRESHOLD = 10
BORDER_THICKNESS = 2
@@ -94,7 +95,7 @@ class FocusMover():
return x, y, terminal_rect.width, terminal_rect.height
-class SplitMover():
+class SplitMover:
THRESHOLD = 35
STEP = 10
diff --git a/guake/support.py b/guake/support.py
index e81cd8f1..c02bca51 100644
--- a/guake/support.py
+++ b/guake/support.py
@@ -3,8 +3,9 @@
import os
import gi
-gi.require_version('Gtk', '3.0')
-gi.require_version('Gdk', '3.0')
+
+gi.require_version("Gtk", "3.0")
+gi.require_version("Gdk", "3.0")
from gi.repository import Gdk
from gi.repository import GdkX11
@@ -17,17 +18,17 @@ from guake import vte_version
def horizonal_line():
- print('-' * 50)
+ print("-" * 50)
def populate_display(display):
screen = display.get_default_screen()
- print('Display: {}'.format(display.get_name()))
+ print("Display: {}".format(display.get_name()))
print()
# pylint: disable=R1719
- print('RGBA visual: {}'.format(True if screen.get_rgba_visual() else False))
+ print("RGBA visual: {}".format(True if screen.get_rgba_visual() else False))
print()
- print('Composited: {}'.format(screen.is_composited()))
+ print("Composited: {}".format(screen.is_composited()))
print()
n_monitors = display.get_n_monitors()
@@ -35,57 +36,62 @@ def populate_display(display):
monitor = display.get_monitor(i)
manufacturer = monitor.get_manufacturer()
model = monitor.get_model()
- v = '%s%s%s' % (
- manufacturer if manufacturer else '', ' ' if manufacturer or model else '',
- model if model else ''
+ v = "%s%s%s" % (
+ manufacturer if manufacturer else "",
+ " " if manufacturer or model else "",
+ model if model else "",
)
- print('* Monitor: {} - {}'.format(i, v))
+ print("* Monitor: {} - {}".format(i, v))
# Geometry
rect = monitor.get_geometry()
scale = monitor.get_scale_factor()
- v = '%d x %d%s at %d, %d' % (
- rect.width, rect.height, ' % 2' if scale == 2 else '', rect.x, rect.y
+ v = "%d x %d%s at %d, %d" % (
+ rect.width,
+ rect.height,
+ " % 2" if scale == 2 else "",
+ rect.x,
+ rect.y,
)
- print(' * Geometry:\t\t{}'.format(v))
+ print(" * Geometry:\t\t{}".format(v))
# Size
- v = '%d x %d mm²' % (monitor.get_width_mm(), monitor.get_height_mm())
- print(' * Size:\t\t{}'.format(v))
+ v = "%d x %d mm²" % (monitor.get_width_mm(), monitor.get_height_mm())
+ print(" * Size:\t\t{}".format(v))
# Primary
- print(' * Primary:\t\t{}'.format(monitor.is_primary()))
+ print(" * Primary:\t\t{}".format(monitor.is_primary()))
# Refresh rate
if monitor.get_refresh_rate():
- v = '%.2f Hz' % (0.001 * monitor.get_refresh_rate())
+ v = "%.2f Hz" % (0.001 * monitor.get_refresh_rate())
else:
- v = 'unknown'
- print(' * Refresh rate:\t{}'.format(v))
+ v = "unknown"
+ print(" * Refresh rate:\t{}".format(v))
# Subpixel layout
- print(' * Subpixel layout:\t{}'.format(monitor.get_subpixel_layout().value_nick))
+ print(" * Subpixel layout:\t{}".format(monitor.get_subpixel_layout().value_nick))
def get_version():
display = Gdk.Display.get_default()
- print('Guake Version:\t\t{}'.format(guake_version()))
+ print("Guake Version:\t\t{}".format(guake_version()))
print()
- print('Vte Version:\t\t{}'.format(vte_version()))
+ print("Vte Version:\t\t{}".format(vte_version()))
print()
- print('Vte Runtime Version:\t{}'.format(vte_runtime_version()))
+ print("Vte Runtime Version:\t{}".format(vte_runtime_version()))
print()
horizonal_line()
- print('GTK+ Version:\t\t{}'.format(gtk_version()))
+ print("GTK+ Version:\t\t{}".format(gtk_version()))
print()
- print('GDK Backend:\t\t{}'.format(str(display).split(' ')[0][1:]))
+ print("GDK Backend:\t\t{}".format(str(display).split(" ")[0][1:]))
print()
horizonal_line()
def get_desktop_session():
- print('Desktop Session: {}'.format(os.environ.get('DESKTOP_SESSION')))
+ print("Desktop Session: {}".format(os.environ.get("DESKTOP_SESSION")))
print()
horizonal_line()
diff --git a/guake/terminal.py b/guake/terminal.py
index e24627e7..cb67a413 100644
--- a/guake/terminal.py
+++ b/guake/terminal.py
@@ -38,8 +38,9 @@ from urllib.parse import urlparse
from time import sleep
import gi
-gi.require_version('Gtk', '3.0')
-gi.require_version('Vte', '2.91') # vte-0.38
+
+gi.require_version("Gtk", "3.0")
+gi.require_version("Vte", "2.91") # vte-0.38
from gi.repository import GLib
from gi.repository import Gdk
@@ -61,7 +62,8 @@ try:
# be injected in current process, as: wall
from atexit import register as at_exit_call
from ctypes import cdll
- libutempter = cdll.LoadLibrary('libutempter.so.0')
+
+ libutempter = cdll.LoadLibrary("libutempter.so.0")
if libutempter is not None:
# We absolutely need to remove the old tty from the utmp !!!
at_exit_call(libutempter.utempter_remove_added_record)
@@ -74,7 +76,7 @@ except Exception as e:
"[WARN] - 'exit' command might freeze the terminal instead of closing the tab\n"
"[WARN] - the 'wall' command is known to work badly\n"
)
- sys.stderr.write("[WARN] Error: " + str(e) + '\n')
+ sys.stderr.write("[WARN] Error: " + str(e) + "\n")
sys.stderr.write(
"[WARN] ===================================================================²\n"
)
@@ -84,7 +86,7 @@ def halt(loc):
code.interact(local=loc)
-__all__ = ['GuakeTerminal']
+__all__ = ["GuakeTerminal"]
# pylint: enable=anomalous-backslash-in-string
@@ -105,9 +107,9 @@ class GuakeTerminal(Vte.Terminal):
self.configure_terminal()
self.add_matches()
self.handler_ids = []
- self.handler_ids.append(self.connect('button-press-event', self.button_press))
- self.connect('child-exited', self.on_child_exited) # Call on_child_exited, don't remove it
- self.matched_value = ''
+ self.handler_ids.append(self.connect("button-press-event", self.button_press))
+ self.connect("child-exited", self.on_child_exited) # Call on_child_exited, don't remove it
+ self.matched_value = ""
self.font_scale_index = 0
self._pid = None
# self.custom_bgcolor = None
@@ -128,7 +130,7 @@ class GuakeTerminal(Vte.Terminal):
self.targets.add_text_targets(DropTargets.TEXT)
self.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY)
self.drag_dest_set_target_list(self.targets)
- self.connect('drag-data-received', self.on_drag_data_received)
+ self.connect("drag-data-received", self.on_drag_data_received)
def get_uuid(self):
return self.uuid
@@ -154,7 +156,7 @@ class GuakeTerminal(Vte.Terminal):
super().feed_child(resolved_cmdline, len(resolved_cmdline))
def execute_command(self, command):
- if command[-1] != '\n':
+ if command[-1] != "\n":
command += "\n"
self.feed_child(command)
@@ -169,21 +171,21 @@ class GuakeTerminal(Vte.Terminal):
"""Sets all customized properties on the terminal
"""
client = self.guake.settings.general
- word_chars = client.get_string('word-chars')
+ word_chars = client.get_string("word-chars")
if word_chars:
self.set_word_char_exceptions(word_chars)
- self.set_audible_bell(client.get_boolean('use-audible-bell'))
+ self.set_audible_bell(client.get_boolean("use-audible-bell"))
self.set_sensitive(True)
- cursor_blink_mode = self.guake.settings.style.get_int('cursor-blink-mode')
- self.set_property('cursor-blink-mode', cursor_blink_mode)
+ cursor_blink_mode = self.guake.settings.style.get_int("cursor-blink-mode")
+ self.set_property("cursor-blink-mode", cursor_blink_mode)
if (Vte.MAJOR_VERSION, Vte.MINOR_VERSION) >= (0, 50):
self.set_allow_hyperlink(True)
if (Vte.MAJOR_VERSION, Vte.MINOR_VERSION) >= (0, 56):
try:
- self.set_bold_is_bright(self.guake.settings.styleFont.get_boolean('bold-is-bright'))
+ self.set_bold_is_bright(self.guake.settings.styleFont.get_boolean("bold-is-bright"))
except: # pylint: disable=bare-except
log.error("set_bold_is_bright not supported by your version of VTE")
@@ -217,7 +219,10 @@ class GuakeTerminal(Vte.Terminal):
Vte.Regex.new_for_match(match, len(match), VTE_REGEX_FLAGS), 0
)
self.match_set_cursor_type(tag, Gdk.CursorType.HAND2)
- except (GLib.Error, AttributeError) as e: # pylint: disable=catching-non-exception
+ except (
+ GLib.Error,
+ AttributeError,
+ ): # pylint: disable=catching-non-exception
try:
compile_flag = 0
if (Vte.MAJOR_VERSION, Vte.MINOR_VERSION) >= (0, 44):
@@ -234,15 +239,16 @@ class GuakeTerminal(Vte.Terminal):
"ERROR: PCRE2 does not seems to be enabled on your system. "
"Quick Edit and other Ctrl+click features are disabled. "
"Please update your VTE package or contact your distribution to ask "
- "to enable regular expression support in VTE. Exception: '%s'", str(e)
+ "to enable regular expression support in VTE. Exception: '%s'",
+ str(e),
)
def get_current_directory(self):
- directory = os.path.expanduser('~')
+ directory = os.path.expanduser("~")
if self.pid is not None:
try:
cwd = os.readlink("/proc/{}/cwd".format(self.pid))
- except Exception as e:
+ except Exception:
return directory
if os.path.exists(cwd):
directory = cwd
@@ -326,12 +332,12 @@ class GuakeTerminal(Vte.Terminal):
any match string is caught, another application is open to
handle the matched resource uri.
"""
- self.matched_value = ''
+ self.matched_value = ""
if (Vte.MAJOR_VERSION, Vte.MINOR_VERSION) >= (0, 46):
matched_string = self.match_check_event(event)
else:
matched_string = self.match_check(
- int(event.x / self.get_char_width()), int(event.y / self.get_char_height())
+ int(event.x / self.get_char_width()), int(event.y / self.get_char_height()),
)
self.found_link = None
@@ -361,7 +367,7 @@ class GuakeTerminal(Vte.Terminal):
uris = data.get_uris()
for uri in uris:
path = Path(unquote(urlparse(uri).path))
- self.feed_child(shlex.quote(str(path.absolute())) + ' ')
+ self.feed_child(shlex.quote(str(path.absolute())) + " ")
elif info == DropTargets.TEXT:
text = data.get_text()
if text:
@@ -426,8 +432,8 @@ class GuakeTerminal(Vte.Terminal):
)
if quick_open_in_current_terminal:
logging.debug("Executing it in current tab")
- if resolved_cmdline[-1] != '\n':
- resolved_cmdline += '\n'
+ if resolved_cmdline[-1] != "\n":
+ resolved_cmdline += "\n"
self.feed_child(resolved_cmdline)
else:
resolved_cmdline += " &"
@@ -438,18 +444,18 @@ class GuakeTerminal(Vte.Terminal):
value, tag = matched_string
log.debug("found tag: %r, item: %r", tag, value)
if tag in TERMINAL_MATCH_TAGS:
- if TERMINAL_MATCH_TAGS[tag] == 'schema':
+ if TERMINAL_MATCH_TAGS[tag] == "schema":
# value here should not be changed, it is right and
# ready to be used.
pass
- elif TERMINAL_MATCH_TAGS[tag] == 'http':
- value = 'http://%s' % value
- elif TERMINAL_MATCH_TAGS[tag] == 'https':
- value = 'https://%s' % value
- elif TERMINAL_MATCH_TAGS[tag] == 'ftp':
- value = 'ftp://%s' % value
- elif TERMINAL_MATCH_TAGS[tag] == 'email':
- value = 'mailto:%s' % value
+ elif TERMINAL_MATCH_TAGS[tag] == "http":
+ value = "http://%s" % value
+ elif TERMINAL_MATCH_TAGS[tag] == "https":
+ value = "https://%s" % value
+ elif TERMINAL_MATCH_TAGS[tag] == "ftp":
+ value = "ftp://%s" % value
+ elif TERMINAL_MATCH_TAGS[tag] == "email":
+ value = "mailto:%s" % value
if value:
return value
@@ -493,7 +499,7 @@ class GuakeTerminal(Vte.Terminal):
def kill(self):
pid = self.pid
- threading.Thread(target=self.delete_shell, args=(pid, )).start()
+ threading.Thread(target=self.delete_shell, args=(pid,)).start()
# start_new_thread(self.delete_shell, (pid,))
def delete_shell(self, pid):
@@ -524,21 +530,27 @@ class GuakeTerminal(Vte.Terminal):
def spawn_sync_pid(self, directory):
argv = list()
- user_shell = self.guake.settings.general.get_string('default-shell')
+ user_shell = self.guake.settings.general.get_string("default-shell")
if user_shell and os.path.exists(user_shell):
argv.append(user_shell)
else:
- argv.append(os.environ['SHELL'])
+ argv.append(os.environ["SHELL"])
- login_shell = self.guake.settings.general.get_boolean('use-login-shell')
+ login_shell = self.guake.settings.general.get_boolean("use-login-shell")
if login_shell:
- argv.append('--login')
+ argv.append("--login")
- log.debug("Spawn command: \"%s\"", " ".join(argv))
+ log.debug('Spawn command: "%s"', " ".join(argv))
pid = self.spawn_sync(
- Vte.PtyFlags.DEFAULT, directory, argv, [], GLib.SpawnFlags.DO_NOT_REAP_CHILD, None,
- None, None
+ Vte.PtyFlags.DEFAULT,
+ directory,
+ argv,
+ [],
+ GLib.SpawnFlags.DO_NOT_REAP_CHILD,
+ None,
+ None,
+ None,
)
try:
tuple_type = gi._gi.ResultTuple # pylint: disable=c-extension-no-member
@@ -571,12 +583,13 @@ class GuakeTerminal(Vte.Terminal):
real_bgcolor = self.custom_bgcolor if self.custom_bgcolor else bg_color
real_fgcolor = self.custom_fgcolor if self.custom_fgcolor else font_color
real_palette = self.custom_palette if self.custom_palette else palette_list
- super(GuakeTerminal,
- self).set_colors(real_fgcolor, real_bgcolor, real_palette, *args, **kwargs)
+ super(GuakeTerminal, self).set_colors(
+ real_fgcolor, real_bgcolor, real_palette, *args, **kwargs
+ )
def set_color_foreground_custom(self, fgcolor, *args, **kwargs):
"""Sets custom foreground color for this terminal"""
- print('set_color_foreground_custom: %s' % self.uuid)
+ print("set_color_foreground_custom: %s" % self.uuid)
self.custom_fgcolor = fgcolor
super(GuakeTerminal, self).set_color_foreground(self.custom_fgcolor, *args, **kwargs)
@@ -601,35 +614,36 @@ class GuakeTerminal(Vte.Terminal):
def _color_from_list(color_list):
"""This method is used for deserialization."""
return Gdk.RGBA(
- red=color_list[0], green=color_list[1], blue=color_list[2], alpha=color_list[3]
+ red=color_list[0], green=color_list[1], blue=color_list[2], alpha=color_list[3],
)
def get_custom_colors_dict(self):
"""Returns dictionary of custom colors."""
return {
- 'fg_color': self._color_to_list(self.custom_fgcolor),
- 'bg_color': self._color_to_list(self.custom_bgcolor),
- 'palette': [self._color_to_list(col)
- for col in self.custom_palette] if self.custom_palette else None,
+ "fg_color": self._color_to_list(self.custom_fgcolor),
+ "bg_color": self._color_to_list(self.custom_bgcolor),
+ "palette": [self._color_to_list(col) for col in self.custom_palette]
+ if self.custom_palette
+ else None,
}
def set_custom_colors_from_dict(self, colors_dict):
if not isinstance(colors_dict, dict):
return
- bg_color = colors_dict.get('bg_color', None)
+ bg_color = colors_dict.get("bg_color", None)
if isinstance(bg_color, list):
self.custom_bgcolor = self._color_from_list(bg_color)
else:
self.custom_bgcolor = None
- fg_color = colors_dict.get('fg_color', None)
+ fg_color = colors_dict.get("fg_color", None)
if isinstance(fg_color, list):
self.custom_fgcolor = self._color_from_list(fg_color)
else:
self.custom_fgcolor = None
- palette = colors_dict.get('palette', None)
+ palette = colors_dict.get("palette", None)
if isinstance(palette, list):
self.custom_palette = [self._color_from_list(col) for col in palette]
else:
diff --git a/guake/tests/test_about.py b/guake/tests/test_about.py
index b4cb3547..d577b6bd 100644
--- a/guake/tests/test_about.py
+++ b/guake/tests/test_about.py
@@ -10,7 +10,7 @@ from guake.about import AboutDialog
@pytest.fixture
def dialog(mocker):
- mocker.patch('guake.simplegladeapp.Gtk.Widget.show_all')
+ mocker.patch("guake.simplegladeapp.Gtk.Widget.show_all")
try:
old_os_environ = os.environ
os.environ["LANGUAGE"] = "en_US.UTF-8"
@@ -21,8 +21,8 @@ def dialog(mocker):
def test_version_test(dialog):
- assert dialog.get_widget('aboutdialog').get_version() == guake_version()
+ assert dialog.get_widget("aboutdialog").get_version() == guake_version()
def test_title(dialog):
- assert dialog.get_widget('aboutdialog').get_title() == 'About Guake'
+ assert dialog.get_widget("aboutdialog").get_title() == "About Guake"
diff --git a/guake/tests/test_guake.py b/guake/tests/test_guake.py
index 8e6f3296..8928b96e 100644
--- a/guake/tests/test_guake.py
+++ b/guake/tests/test_guake.py
@@ -18,13 +18,13 @@ from guake.guake_app import Guake
@pytest.fixture
def g(mocker, fs):
- mocker.patch('guake.guake_app.Guake.get_xdg_config_directory', return_value=Path('/foobar'))
- mocker.patch('guake.guake_app.shutil.copy', create=True)
- mocker.patch('guake.guake_app.notifier.showMessage', create=True)
- mocker.patch('guake.guake_app.traceback.print_exc', create=True)
+ mocker.patch("guake.guake_app.Guake.get_xdg_config_directory", return_value=Path("/foobar"))
+ mocker.patch("guake.guake_app.shutil.copy", create=True)
+ mocker.patch("guake.guake_app.notifier.showMessage", create=True)
+ mocker.patch("guake.guake_app.traceback.print_exc", create=True)
fs.pause()
g = Guake()
- fs.add_real_file(pixmapfile('guake-notification.png'))
+ fs.add_real_file(pixmapfile("guake-notification.png"))
fs.resume()
return g
@@ -53,8 +53,8 @@ def test_accel_search_terminal_debounce(g):
def test_accel_quit_without_prompt(mocker, g):
# Disable quit prompt
- mocker.patch.object(g.settings.general, 'get_boolean', return_value=False)
- mocker.patch('guake.guake_app.Gtk.main_quit')
+ mocker.patch.object(g.settings.general, "get_boolean", return_value=False)
+ mocker.patch("guake.guake_app.Gtk.main_quit")
g.accel_quit()
assert guake.guake_app.Gtk.main_quit.call_count == 1
@@ -62,9 +62,9 @@ def test_accel_quit_without_prompt(mocker, g):
def test_accel_quit_with_prompt(mocker, g):
# Enable quit prompt
- mocker.patch.object(g.settings.general, 'get_boolean', return_value=True)
- mocker.patch('guake.guake_app.PromptQuitDialog')
- mocker.patch('guake.guake_app.Gtk.main_quit')
+ mocker.patch.object(g.settings.general, "get_boolean", return_value=True)
+ mocker.patch("guake.guake_app.PromptQuitDialog")
+ mocker.patch("guake.guake_app.Gtk.main_quit")
g.accel_quit()
assert guake.guake_app.Gtk.main_quit.call_count == 1
@@ -74,56 +74,46 @@ def test_accel_quit_with_prompt(mocker, g):
def test_guake_restore_tabs(g, fs):
- d1 = fs.create_dir('/foobar/foo')
- d2 = fs.create_dir('/foobar/bar')
- d3 = fs.create_dir('/foobar/foo/foo')
- d4 = fs.create_dir('/foobar/foo/bar')
+ d1 = fs.create_dir("/foobar/foo")
+ d2 = fs.create_dir("/foobar/bar")
+ d3 = fs.create_dir("/foobar/foo/foo")
+ d4 = fs.create_dir("/foobar/foo/bar")
session = {
"schema_version": 1,
"timestamp": 1556092197,
"workspace": {
- "0": [[{
- "directory": d1.path,
- "label": "1",
- "custom_label_set": True
- }, {
- "directory": d2.path,
- "label": "2",
- "custom_label_set": True
- }, {
- "directory": d3.path,
- "label": d3.path,
- "custom_label_set": False
- }]],
- "1": [[{
- "directory": d4.path,
- "label": "4",
- "custom_label_set": True
- }]]
- }
+ "0": [
+ [
+ {"directory": d1.path, "label": "1", "custom_label_set": True},
+ {"directory": d2.path, "label": "2", "custom_label_set": True},
+ {"directory": d3.path, "label": d3.path, "custom_label_set": False},
+ ]
+ ],
+ "1": [[{"directory": d4.path, "label": "4", "custom_label_set": True}]],
+ },
}
- fn = fs.create_file('/foobar/session.json')
- with open(fn.path, 'w') as f:
+ fn = fs.create_file("/foobar/session.json")
+ with open(fn.path, "w") as f:
f.write(json.dumps(session))
g.restore_tabs(fn.name)
nb = g.notebook_manager.get_notebook(0)
assert nb.get_n_pages() == 3
- assert nb.get_tab_text_index(0) == '1'
- assert nb.get_tab_text_index(1) == '2'
+ assert nb.get_tab_text_index(0) == "1"
+ assert nb.get_tab_text_index(1) == "2"
nb = g.notebook_manager.get_notebook(1)
assert nb.get_n_pages() == 1
- assert nb.get_tab_text_index(0) == '4'
+ assert nb.get_tab_text_index(0) == "4"
def test_guake_restore_tabs_json_without_schema_version(g, fs):
guake.guake_app.notifier.showMessage.reset_mock()
- fn = fs.create_file('/foobar/bar.json')
- with open(fn.path, 'w') as f:
- f.write('{}')
+ fn = fs.create_file("/foobar/bar.json")
+ with open(fn.path, "w") as f:
+ f.write("{}")
g.restore_tabs(fn.name)
assert guake.guake_app.notifier.showMessage.call_count == 1
@@ -132,8 +122,8 @@ def test_guake_restore_tabs_json_without_schema_version(g, fs):
def test_guake_restore_tabs_with_higher_schema_version(g, fs):
guake.guake_app.notifier.showMessage.reset_mock()
- fn = fs.create_file('/foobar/bar.json')
- with open(fn.path, 'w') as f:
+ fn = fs.create_file("/foobar/bar.json")
+ with open(fn.path, "w") as f:
f.write('{"schema_version": 2147483647}')
g.restore_tabs(fn.name)
@@ -142,9 +132,9 @@ def test_guake_restore_tabs_with_higher_schema_version(g, fs):
def test_guake_restore_tabs_json_broken_session_file(g, fs):
guake.guake_app.notifier.showMessage.reset_mock()
- fn = fs.create_file('/foobar/foobar.json')
- with open(fn.path, 'w') as f:
- f.write('{')
+ fn = fs.create_file("/foobar/foobar.json")
+ with open(fn.path, "w") as f:
+ f.write("{")
g.restore_tabs(fn.name)
assert guake.guake_app.shutil.copy.call_count == 1
@@ -154,9 +144,9 @@ def test_guake_restore_tabs_json_broken_session_file(g, fs):
def test_guake_restore_tabs_schema_broken_session_file(g, fs):
guake.guake_app.notifier.showMessage.reset_mock()
- fn = fs.create_file('/foobar/bar.json')
- d = fs.create_dir('/foobar/foo')
- with open(fn.path, 'w') as f:
+ fn = fs.create_file("/foobar/bar.json")
+ d = fs.create_dir("/foobar/foo")
+ with open(fn.path, "w") as f:
f.write('{"schema_version": 1, "workspace": {"0": [[{"directory": "%s"}]]}}' % (d.path))
g.restore_tabs(fn.name)
@@ -166,19 +156,19 @@ def test_guake_restore_tabs_schema_broken_session_file(g, fs):
def test_guake_save_tabs_and_restore(mocker, g, fs):
# Disable auto save
- mocker.patch.object(g.settings.general, 'get_boolean', return_value=False)
+ mocker.patch.object(g.settings.general, "get_boolean", return_value=False)
# Save
- assert not os.path.exists('/foobar/session.json')
+ assert not os.path.exists("/foobar/session.json")
g.add_tab()
- g.rename_current_tab('foobar', True)
+ g.rename_current_tab("foobar", True)
g.add_tab()
- g.rename_current_tab('python', True)
+ g.rename_current_tab("python", True)
assert g.get_notebook().get_n_pages() == 3
g.save_tabs()
- assert os.path.exists('/foobar')
- assert os.path.exists('/foobar/session.json')
+ assert os.path.exists("/foobar")
+ assert os.path.exists("/foobar/session.json")
# Restore prepare
g.close_tab()
@@ -189,5 +179,5 @@ def test_guake_save_tabs_and_restore(mocker, g, fs):
g.restore_tabs()
nb = g.get_notebook()
assert nb.get_n_pages() == 3
- assert nb.get_tab_text_index(1) == 'foobar'
- assert nb.get_tab_text_index(2) == 'python'
+ assert nb.get_tab_text_index(1) == "foobar"
+ assert nb.get_tab_text_index(2) == "python"
diff --git a/guake/tests/test_notebook.py b/guake/tests/test_notebook.py
index e298e7b6..8c53713f 100644
--- a/guake/tests/test_notebook.py
+++ b/guake/tests/test_notebook.py
@@ -9,9 +9,10 @@ from guake.notebook import TerminalNotebook
@pytest.fixture
def nb(mocker):
targets = [
- 'guake.notebook.TerminalNotebook.terminal_spawn',
- 'guake.notebook.TerminalNotebook.terminal_attached',
- 'guake.notebook.TerminalNotebook.guake', 'guake.notebook.TerminalBox.set_terminal'
+ "guake.notebook.TerminalNotebook.terminal_spawn",
+ "guake.notebook.TerminalNotebook.terminal_attached",
+ "guake.notebook.TerminalNotebook.guake",
+ "guake.notebook.TerminalBox.set_terminal",
]
for target in targets:
mocker.patch(target, create=True)
@@ -44,8 +45,8 @@ def test_remove_page_in_notebook(nb):
def test_rename_page(nb):
- t1 = 'foo'
- t2 = 'bar'
+ t1 = "foo"
+ t2 = "bar"
nb.new_page()
nb.rename_page(0, t1, True)
assert nb.get_tab_text_index(0) == t1
@@ -56,7 +57,7 @@ def test_rename_page(nb):
def test_add_new_page_with_focus_with_label(nb):
- t = 'test_this_label'
+ t = "test_this_label"
nb.new_page_with_focus(label=t)
assert nb.get_n_pages() == 1
assert nb.get_tab_text_index(0) == t
diff --git a/guake/tests/test_quick_open.py b/guake/tests/test_quick_open.py
index f8178301..46b3625d 100644
--- a/guake/tests/test_quick_open.py
+++ b/guake/tests/test_quick_open.py
@@ -16,13 +16,13 @@ def test_quick_open():
)
found = _execute_quick_open(chunk)
- assert found == [('./test.py', '5')]
+ assert found == [("./test.py", "5")]
def _execute_quick_open(chunk):
found = []
- for line in chunk.split('\n'):
+ for line in chunk.split("\n"):
for _1, _2, r in QUICK_OPEN_MATCHERS:
g = re.compile(r).match(line)
if g:
diff --git a/guake/theme.py b/guake/theme.py
index bcdf7c11..5423d0d3 100644
--- a/guake/theme.py
+++ b/guake/theme.py
@@ -5,7 +5,8 @@ import os
from pathlib import Path
import gi
-gi.require_version('Gtk', '3.0')
+
+gi.require_version("Gtk", "3.0")
from gi.repository import GLib
from gi.repository import Gdk
from gi.repository import Gtk
@@ -28,8 +29,10 @@ def get_resource_dirs(resource):
A list of resource dirs
"""
dirs = [
- os.path.join(dir, resource) for dir in
- itertools.chain(GLib.get_system_data_dirs(), GUAKE_THEME_DIR, GLib.get_user_data_dir())
+ os.path.join(dir, resource)
+ for dir in itertools.chain(
+ GLib.get_system_data_dirs(), GUAKE_THEME_DIR, GLib.get_user_data_dir()
+ )
]
dirs += [os.path.join(os.path.expanduser("~"), ".{}".format(resource))]
@@ -39,26 +42,28 @@ def get_resource_dirs(resource):
def list_all_themes():
return sorted(
set(
- x.name for theme_dir in get_resource_dirs("themes") for x in theme_dir.iterdir()
+ x.name
+ for theme_dir in get_resource_dirs("themes")
+ for x in theme_dir.iterdir()
if x.is_dir()
)
)
def select_gtk_theme(settings):
- gtk_theme_name = settings.general.get_string('gtk-theme-name')
+ gtk_theme_name = settings.general.get_string("gtk-theme-name")
log.debug("Wanted GTK theme: %r", gtk_theme_name)
gtk_settings = Gtk.Settings.get_default()
gtk_settings.set_property("gtk-theme-name", gtk_theme_name)
- prefer_dark_theme = settings.general.get_boolean('gtk-prefer-dark-theme')
+ prefer_dark_theme = settings.general.get_boolean("gtk-prefer-dark-theme")
log.debug("Prefer dark theme: %r", prefer_dark_theme)
gtk_settings.set_property("gtk-application-prefer-dark-theme", prefer_dark_theme)
def get_gtk_theme(settings):
- gtk_theme_name = settings.general.get_string('gtk-theme-name')
- prefer_dark_theme = settings.general.get_boolean('gtk-prefer-dark-theme')
+ gtk_theme_name = settings.general.get_string("gtk-theme-name")
+ prefer_dark_theme = settings.general.get_boolean("gtk-prefer-dark-theme")
return (gtk_theme_name, "dark" if prefer_dark_theme else None)
@@ -86,8 +91,11 @@ def patch_gtk_theme(style_context, settings):
selected_bg_color = rgba_to_hex(style_context.lookup_color("theme_selected_bg_color")[1])
log.debug(
"Patching theme '%s' (prefer dark = '%r'), overriding tab 'checked' state': "
- "foreground: %r, background: %r", theme_name, "yes" if variant == "dark" else "no",
- selected_fg_color, selected_bg_color
+ "foreground: %r, background: %r",
+ theme_name,
+ "yes" if variant == "dark" else "no",
+ selected_fg_color,
+ selected_bg_color,
)
css_data = dedent(
"""
@@ -95,10 +103,12 @@ def patch_gtk_theme(style_context, settings):
color: {selected_fg_color};
background: {selected_bg_color};
}}
- """.format(selected_bg_color=selected_bg_color, selected_fg_color=selected_fg_color)
+ """.format(
+ selected_bg_color=selected_bg_color, selected_fg_color=selected_fg_color
+ )
).encode()
style_provider = Gtk.CssProvider()
style_provider.load_from_data(css_data)
Gtk.StyleContext.add_provider_for_screen(
- Gdk.Screen.get_default(), style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
+ Gdk.Screen.get_default(), style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION,
)
diff --git a/guake/utils.py b/guake/utils.py
index 81f66e16..db0845ff 100644
--- a/guake/utils.py
+++ b/guake/utils.py
@@ -27,8 +27,9 @@ import subprocess
import time
import gi
-gi.require_version('Gtk', '3.0')
-gi.require_version('Gdk', '3.0')
+
+gi.require_version("Gtk", "3.0")
+gi.require_version("Gdk", "3.0")
from gi.repository import Gdk
from gi.repository import Gtk
@@ -76,19 +77,19 @@ def save_tabs_when_changed(func):
# Find me the Guake!
clsname = args[0].__class__.__name__
g = None
- if clsname == 'Guake':
+ if clsname == "Guake":
g = args[0]
- elif getattr(args[0], 'get_guake', None):
+ elif getattr(args[0], "get_guake", None):
g = args[0].get_guake()
- elif getattr(args[0], 'get_notebook', None):
+ elif getattr(args[0], "get_notebook", None):
g = args[0].get_notebook().guake
- elif getattr(args[0], 'guake', None):
+ elif getattr(args[0], "guake", None):
g = args[0].guake
- elif getattr(args[0], 'notebook', None):
+ elif getattr(args[0], "notebook", None):
g = args[0].notebook.guake
# Tada!
- if g and g.settings.general.get_boolean('save-tabs-when-changed'):
+ if g and g.settings.general.get_boolean("save-tabs-when-changed"):
g.save_tabs()
return wrapper
@@ -96,24 +97,23 @@ def save_tabs_when_changed(func):
def save_preferences(filename):
# XXX: Hardcode?
- prefs = subprocess.check_output(['dconf', 'dump', '/apps/guake/'])
- with open(filename, 'wb') as f:
+ prefs = subprocess.check_output(["dconf", "dump", "/apps/guake/"])
+ with open(filename, "wb") as f:
f.write(prefs)
def restore_preferences(filename):
# XXX: Hardcode?
- with open(filename, 'rb') as f:
+ with open(filename, "rb") as f:
prefs = f.read()
- p = subprocess.Popen(['dconf', 'load', '/apps/guake/'], stdin=subprocess.PIPE)
+ p = subprocess.Popen(["dconf", "load", "/apps/guake/"], stdin=subprocess.PIPE)
p.communicate(input=prefs)
-class TabNameUtils():
-
+class TabNameUtils:
@classmethod
def shorten(cls, text, settings):
- use_vte_titles = settings.general.get_boolean('use-vte-titles')
+ use_vte_titles = settings.general.get_boolean("use-vte-titles")
if not use_vte_titles:
return text
max_name_length = settings.general.get_int("max-tab-name-length")
@@ -122,8 +122,7 @@ class TabNameUtils():
return text
-class HidePrevention():
-
+class HidePrevention:
def __init__(self, window):
"""Create a new HidePrevention object like `HidePrevention(window)`
"""
@@ -135,22 +134,22 @@ class HidePrevention():
"""returns True if the window is allowed to hide and
False if `prevent()` is called from some where
"""
- return getattr(self.window, 'can_hide', True)
+ return getattr(self.window, "can_hide", True)
def prevent(self):
"""sets a flag on the window object which indicates to
may_hide that the window is NOT allowed to be hidden.
"""
- setattr(self.window, 'can_hide', False)
+ setattr(self.window, "can_hide", False)
def allow(self):
"""sets the flag so that it indicates to may_hide that the window is allowed to be hidden
"""
- setattr(self.window, 'can_hide', True)
+ setattr(self.window, "can_hide", True)
-class FullscreenManager():
- FULLSCREEN_ATTR = 'is_fullscreen'
+class FullscreenManager:
+ FULLSCREEN_ATTR = "is_fullscreen"
def __init__(self, settings, window, guake=None):
self.settings = settings
@@ -163,7 +162,9 @@ class FullscreenManager():
def set_window_state(self, window_state):
self.window_state = window_state
- setattr(self.window, self.FULLSCREEN_ATTR, bool(window_state & Gdk.WindowState.FULLSCREEN))
+ setattr(
+ self.window, self.FULLSCREEN_ATTR, bool(window_state & Gdk.WindowState.FULLSCREEN),
+ )
if not window_state & Gdk.WindowState.WITHDRAWN:
if self.is_fullscreen():
@@ -193,17 +194,16 @@ class FullscreenManager():
def toggle_fullscreen_hide_tabbar(self):
if self.is_fullscreen():
- if self.settings.general.get_boolean('fullscreen-hide-tabbar'):
+ if self.settings.general.get_boolean("fullscreen-hide-tabbar"):
if self.guake and self.guake.notebook_manager:
self.guake.notebook_manager.set_notebooks_tabbar_visible(False)
else:
if self.guake and self.guake.notebook_manager:
- v = self.settings.general.get_boolean('window-tabbar')
+ v = self.settings.general.get_boolean("window-tabbar")
self.guake.notebook_manager.set_notebooks_tabbar_visible(v)
-class RectCalculator():
-
+class RectCalculator:
@classmethod
def set_final_window_rect(cls, settings, window):
"""Sets the final size and location of the main window of guake. The height
@@ -211,12 +211,12 @@ class RectCalculator():
horizontal alignment is given by window_alignment.
"""
# fetch settings
- height_percents = settings.general.get_int('window-height')
- width_percents = settings.general.get_int('window-width')
- halignment = settings.general.get_int('window-halignment')
- valignment = settings.general.get_int('window-valignment')
- vdisplacement = settings.general.get_int('window-vertical-displacement')
- hdisplacement = settings.general.get_int('window-horizontal-displacement')
+ height_percents = settings.general.get_int("window-height")
+ width_percents = settings.general.get_int("window-width")
+ halignment = settings.general.get_int("window-halignment")
+ valignment = settings.general.get_int("window-valignment")
+ vdisplacement = settings.general.get_int("window-vertical-displacement")
+ hdisplacement = settings.general.get_int("window-horizontal-displacement")
log.debug("set_final_window_rect")
log.debug(" height_percents = %s", height_percents)
@@ -287,8 +287,8 @@ class RectCalculator():
screen = window.get_screen()
# fetch settings
- use_mouse = settings.general.get_boolean('mouse-display')
- dest_screen = settings.general.get_int('display-n')
+ use_mouse = settings.general.get_boolean("mouse-display")
+ dest_screen = settings.general.get_int("display-n")
if use_mouse:
@@ -301,8 +301,8 @@ class RectCalculator():
# default to 'primary display' option.
n_screens = screen.get_n_monitors()
if dest_screen > n_screens - 1:
- settings.general.set_boolean('mouse-display', False)
- settings.general.set_int('display-n', dest_screen)
+ settings.general.set_boolean("mouse-display", False)
+ settings.general.set_int("display-n", dest_screen)
dest_screen = screen.get_primary_monitor()
# Use primary display if configured
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 00000000..d7697e35
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,4 @@
+[tool.black]
+line-length = 100
+target-version = ['py36']
+include = '\.pyi?$'