Skip to content

Commit 13544e8

Browse files
mrpdaemonkaiw
authored andcommitted
Make GtkSourceView scheme-style configurable
This commit adds a "color scheme" entry to preferences which controls the GtkSourceView scheme-style property to allow the user toggle between different color schemes installed in the system. This is particularly relevant for syntax highlighting since the default scheme (classic) is not great in all circumstances such as dark theme usage. In general this is heavily user preference driven so this commit allows users to select a scheme they like.
1 parent e92ef10 commit 13544e8

6 files changed

Lines changed: 85 additions & 8 deletions

File tree

data/org.gnome.meld.gschema.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@
8080
<summary>Highlight syntax</summary>
8181
<description>Whether to highlight syntax in comparisons. Because of Meld's own color highlighting, this is off by default.</description>
8282
</key>
83+
<key name="style-scheme" type="s">
84+
<default>"classic"</default>
85+
<summary>Color scheme to use for syntax highlighting</summary>
86+
<description>Used by GtkSourceView to determine colors for syntax highlighting</description>
87+
</key>
8388
<key name="draw-spaces" flags='org.gnome.meld.spacesflags'>
8489
<default>[]</default>
8590
<summary>Displayed whitespace</summary>

data/ui/preferences.ui

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -457,14 +457,53 @@
457457
</packing>
458458
</child>
459459
<child>
460-
<object class="GtkCheckButton" id="checkbutton_use_syntax_highlighting">
461-
<property name="label" translatable="yes">Use s_yntax highlighting</property>
460+
<object class="GtkHBox" id="hbox11">
462461
<property name="visible">True</property>
463-
<property name="can_focus">True</property>
464-
<property name="receives_default">False</property>
465-
<property name="use_underline">True</property>
466-
<property name="xalign">0</property>
467-
<property name="draw_indicator">True</property>
462+
<property name="can_focus">False</property>
463+
<property name="spacing">6</property>
464+
<child>
465+
<object class="GtkCheckButton" id="checkbutton_use_syntax_highlighting">
466+
<property name="label" translatable="yes">Use s_yntax highlighting</property>
467+
<property name="visible">True</property>
468+
<property name="can_focus">True</property>
469+
<property name="receives_default">False</property>
470+
<property name="use_underline">True</property>
471+
<property name="xalign">0</property>
472+
<property name="draw_indicator">True</property>
473+
</object>
474+
<packing>
475+
<property name="expand">False</property>
476+
<property name="fill">False</property>
477+
<property name="position">0</property>
478+
</packing>
479+
</child>
480+
<child>
481+
<object class="GtkLabel" id="label16">
482+
<property name="visible">True</property>
483+
<property name="can_focus">False</property>
484+
<property name="label" translatable="yes">Color Scheme:</property>
485+
<attributes>
486+
<attribute name="weight" value="bold"/>
487+
</attributes>
488+
</object>
489+
<packing>
490+
<property name="expand">True</property>
491+
<property name="fill">True</property>
492+
<property name="padding">8</property>
493+
<property name="position">1</property>
494+
</packing>
495+
</child>
496+
<child>
497+
<object class="GtkComboBox" id="combobox_style_scheme">
498+
<property name="visible">True</property>
499+
<property name="can_focus">False</property>
500+
</object>
501+
<packing>
502+
<property name="expand">True</property>
503+
<property name="fill">True</property>
504+
<property name="position">2</property>
505+
</packing>
506+
</child>
468507
</object>
469508
<packing>
470509
<property name="expand">False</property>

meld/filediff.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -852,6 +852,9 @@ def load_font(self):
852852
def on_setting_changed(self, settings, key):
853853
if key == 'font':
854854
self.load_font()
855+
elif key == 'style-scheme':
856+
for i in range(3):
857+
self.textview[i].get_buffer().change_style_scheme(meldsettings.style_scheme)
855858

856859
def check_save_modified(self, label=None):
857860
response = Gtk.ResponseType.OK

meld/meldbuffer.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from gi.repository import GtkSource
2525

2626
from meld.conf import _
27-
from meld.settings import bind_settings
27+
from meld.settings import bind_settings,settings
2828
from meld.util.compat import text_type
2929

3030

@@ -41,6 +41,12 @@ def __init__(self, filename=None):
4141
bind_settings(self)
4242
self.data = MeldBufferData(filename)
4343
self.user_action_count = 0
44+
self.change_style_scheme(settings.get_string('style-scheme'))
45+
46+
def change_style_scheme(self, scheme):
47+
manager = GtkSource.StyleSchemeManager.get_default()
48+
style = GtkSource.StyleSchemeManager.get_scheme(manager, scheme)
49+
GtkSource.Buffer.set_style_scheme(self, style)
4450

4551
def do_begin_user_action(self, *args):
4652
self.user_action_count += 1

meld/preferences.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,29 @@ def __init__(self, parent):
240240
self.combo_file_order.bind_to('vc-left-is-local')
241241
self.combo_merge_order.bind_to('vc-merge-file-order')
242242

243+
# Fill color schemes
244+
liststore = Gtk.ListStore(str)
245+
manager = GtkSource.StyleSchemeManager.get_default()
246+
scheme_ids = GtkSource.StyleSchemeManager.get_scheme_ids(manager)
247+
for scheme in scheme_ids:
248+
liststore.append([scheme])
249+
self.combobox_style_scheme.set_model(liststore)
250+
cell = Gtk.CellRendererText()
251+
self.combobox_style_scheme.pack_start(cell, True)
252+
self.combobox_style_scheme.add_attribute(cell, 'text',0)
253+
254+
style_scheme = settings.get_string('style-scheme')
255+
for idx,scheme in enumerate(scheme_ids):
256+
if scheme == style_scheme:
257+
self.combobox_style_scheme.set_active(idx)
258+
259+
self.combobox_style_scheme.connect("changed", self.on_combobox_style_scheme_changed)
260+
243261
self.widget.show()
244262

263+
def on_combobox_style_scheme_changed(self, combobox):
264+
settings.set_string('style-scheme', combobox.get_model()[combobox.get_active()][0])
265+
245266
def on_checkbutton_wrap_text_toggled(self, button):
246267
if not self.checkbutton_wrap_text.get_active():
247268
wrap_mode = Gtk.WrapMode.NONE

meld/settings.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ def on_setting_changed(self, settings, key):
5555
elif key in ('use-system-font', 'custom-font'):
5656
self.font = self._current_font_from_gsetting()
5757
self.emit('changed', 'font')
58+
elif key in ('style-scheme'):
59+
self.style_scheme = settings.get_string('style-scheme')
60+
self.emit('changed', 'style-scheme')
5861

5962
def _filters_from_gsetting(self, key, filt_type):
6063
filter_params = settings.get_value(key)

0 commit comments

Comments
 (0)