From 3ac1a69660d6b2e3dcf0fb2edf6a308cd0e9a3b4 Mon Sep 17 00:00:00 2001 From: Gaetan Semet Date: Tue, 18 Feb 2020 22:37:46 +0100 Subject: [PATCH] Replace autopep8, yapf by black Signed-off-by: Gaetan Semet --- .flake8 | 12 +- .yapf | 19 - Makefile | 20 +- guake/__init__.py | 23 +- guake/about.py | 13 +- guake/boxes.py | 125 +- guake/callbacks.py | 15 +- guake/common.py | 34 +- guake/customcommands.py | 21 +- guake/dbusiface.py | 56 +- guake/dialogs.py | 39 +- guake/globals.py | 42 +- guake/gsettings.py | 196 ++-- guake/guake_app.py | 425 +++---- guake/guake_logging.py | 58 +- guake/guake_toggle.py | 4 +- guake/keybindings.py | 296 +++-- guake/main.py | 394 +++---- guake/menus.py | 13 +- guake/notebook.py | 98 +- guake/notifier.py | 5 +- guake/palettes.py | 1990 ++++++++++++++++---------------- guake/prefs.py | 858 ++++++-------- guake/settings.py | 32 +- guake/simplegladeapp.py | 15 +- guake/split_utils.py | 7 +- guake/support.py | 58 +- guake/terminal.py | 118 +- guake/tests/test_about.py | 6 +- guake/tests/test_guake.py | 104 +- guake/tests/test_notebook.py | 13 +- guake/tests/test_quick_open.py | 4 +- guake/theme.py | 34 +- guake/utils.py | 74 +- pyproject.toml | 4 + 35 files changed, 2644 insertions(+), 2581 deletions(-) delete mode 100644 .yapf create mode 100644 pyproject.toml 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?$'