92
95
self.buffer = gtksourceview.SourceBuffer()
93
96
slm = gtksourceview.SourceLanguagesManager()
94
97
gsl = slm.get_language_from_mime_type("text/x-patch")
98
self.apply_colordiffrc(gsl)
95
99
self.buffer.set_language(gsl)
96
100
self.buffer.set_highlight(True)
168
172
show_diff_trees(self.parent_tree, self.rev_tree, s, specific_files)
169
173
self.buffer.set_text(s.getvalue().decode(sys.getdefaultencoding(), 'replace'))
176
def apply_colordiffrc(lang):
177
"""Set style colors in lang to that specified in colordiff config file.
179
Both ~/.colordiffrc and ~/.colordiffrc.bzr-gtk are read.
181
:param lang: a gtksourceview.SourceLanguage object.
183
def parse_colordiffrc(fileobj):
184
"""Parse fileobj as a colordiff configuration file.
186
:return: A dict with the key -> value pairs.
190
if re.match(r'^\s*#', line):
192
key, val = line.split('=')
193
colors[key.strip()] = val.strip()
198
for f in ('~/.colordiffrc', '~/.colordiffrc.bzr-gtk'):
199
f = os.path.expanduser(f)
200
if os.path.exists(f):
204
warning('could not open file %s: %s' % (f, str(e)))
206
colors.update(parse_colordiffrc(f))
210
# ~/.colordiffrc does not exist
214
# map GtkSourceView tags to colordiff names
215
# since GSV is richer, accept new names for extra bits,
216
# defaulting to old names if they're not present
217
'Added@32@line': ['newtext'],
218
'Removed@32@line': ['oldtext'],
219
'Location': ['location', 'diffstuff'],
220
'Diff@32@file': ['file', 'diffstuff'],
221
'Special@32@case': ['specialcase', 'diffstuff'],
224
for tag in lang.get_tags():
225
tag_id = tag.get_id()
226
keys = mapping.get(tag_id, [])
230
color = colors.get(key, None)
231
if color is not None:
237
style = gtksourceview.SourceTagStyle()
239
style.foreground = gtk.gdk.color_parse(color)
241
warning('not a valid color: %s' % color)
243
lang.set_tag_style(tag_id, style)