Hi there,
I am back and now I have some time to get in touch with the meld source
code. As promised, I will ask questions whenever something is unclear. ;-)
I want to start with "Bug 633515 - Text ignored by filters should have
some visual indication" [1]. I spent a few hours by browsing through the
source code and playing around with it.
As you, Kai, suggested, I tried to do it with a gtk.TextTag.
Unfortunately it only works to make something bold but not to make
something light. It also works to make the font smaller, but that does
not look to nice.
I attached three diffs, maybe you could have a look at them? As I said,
bold and small works, light does not.
This was only for testing, so the way I hacked it into the code is
probably not the cleanest way. As you also mentioned, the nicest would
be to rely on gtk.SourceView, but I haven't checked that too intensively
so far. But I had a look at the gtk.SourceStyle class [2], which is
probably the place to start and it also only supports bold text, no
light text. So maybe that causes the problem I had.
Is the font-weight even what you had in mind? I don't know if it is
possible to make the font color transparent or something. That would be
nice. But I really don't know how to handle this, especially not to get
in conflict with the style schemes.
I hope you (or someone on this list) can help me.
Regards
David
[1] https://bugzilla.gnome.org/show_bug.cgi?id=633515
[2]
https://developer.gnome.org/gtksourceview/stable/GtkSourceStyle.html#GtkSourceStyle--foreground
diff --git a/meld/filediff.py b/meld/filediff.py
index 0aabdba..0403dfa 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -762,7 +762,9 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
None, True)
self.queue_draw()
- def _filter_text(self, txt):
+ def _filter_text(self, txt, buf):
+ dimmed_tag = buf.get_tag_table().lookup("dimmed")
+ buf.remove_tag(dimmed_tag, buf.get_start_iter(), buf.get_end_iter())
def killit(m):
assert m.group().count("\n") == 0
if len(m.groups()):
@@ -772,6 +774,8 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
s = s.replace(g,"")
return s
else:
+ dimmed_tag = buf.get_tag_table().lookup("dimmed")
+ buf.apply_tag(dimmed_tag, buf.get_iter_at_offset(m.start()),
buf.get_iter_at_offset(m.end()))
return ""
try:
for filt in self.text_filters:
diff --git a/meld/meldbuffer.py b/meld/meldbuffer.py
index 9c89999..7cfd471 100644
--- a/meld/meldbuffer.py
+++ b/meld/meldbuffer.py
@@ -223,7 +223,7 @@ class BufferLines(object):
end = self.buf.get_iter_at_line_or_eof(hi)
txt = text_type(self.buf.get_text(start, end, False), 'utf8')
- filter_txt = self.textfilter(txt)
+ filter_txt = self.textfilter(txt, self.buf)
lines = filter_txt.splitlines()
ends = filter_txt.splitlines(True)
@@ -269,7 +269,7 @@ class BufferLines(object):
if not line_end.ends_line():
line_end.forward_to_line_end()
txt = self.buf.get_text(line_start, line_end, False)
- return text_type(self.textfilter(txt), 'utf8')
+ return text_type(self.textfilter(txt, self.buf), 'utf8')
def __len__(self):
return self.buf.get_line_count()
diff --git a/meld/sourceview.py b/meld/sourceview.py
index 0d142f3..4bf072d 100644
--- a/meld/sourceview.py
+++ b/meld/sourceview.py
@@ -124,6 +124,10 @@ class MeldSourceView(GtkSource.View):
buf = meldbuffer.MeldBuffer()
buf.create_tag("inline")
+ buf.create_tag("dimmed")
+ dimmed_tag = buf.get_tag_table().lookup("dimmed")
+ dimmed_tag.set_property("weight", 700)
+ dimmed_tag.set_property("weight-set", True)
self.set_buffer(buf)
meldsettings.connect('changed', self.on_setting_changed)
diff --git a/meld/filediff.py b/meld/filediff.py
index 0aabdba..0403dfa 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -762,7 +762,9 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
None, True)
self.queue_draw()
- def _filter_text(self, txt):
+ def _filter_text(self, txt, buf):
+ dimmed_tag = buf.get_tag_table().lookup("dimmed")
+ buf.remove_tag(dimmed_tag, buf.get_start_iter(), buf.get_end_iter())
def killit(m):
assert m.group().count("\n") == 0
if len(m.groups()):
@@ -772,6 +774,8 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
s = s.replace(g,"")
return s
else:
+ dimmed_tag = buf.get_tag_table().lookup("dimmed")
+ buf.apply_tag(dimmed_tag, buf.get_iter_at_offset(m.start()),
buf.get_iter_at_offset(m.end()))
return ""
try:
for filt in self.text_filters:
diff --git a/meld/meldbuffer.py b/meld/meldbuffer.py
index 9c89999..7cfd471 100644
--- a/meld/meldbuffer.py
+++ b/meld/meldbuffer.py
@@ -223,7 +223,7 @@ class BufferLines(object):
end = self.buf.get_iter_at_line_or_eof(hi)
txt = text_type(self.buf.get_text(start, end, False), 'utf8')
- filter_txt = self.textfilter(txt)
+ filter_txt = self.textfilter(txt, self.buf)
lines = filter_txt.splitlines()
ends = filter_txt.splitlines(True)
@@ -269,7 +269,7 @@ class BufferLines(object):
if not line_end.ends_line():
line_end.forward_to_line_end()
txt = self.buf.get_text(line_start, line_end, False)
- return text_type(self.textfilter(txt), 'utf8')
+ return text_type(self.textfilter(txt, self.buf), 'utf8')
def __len__(self):
return self.buf.get_line_count()
diff --git a/meld/sourceview.py b/meld/sourceview.py
index 0d142f3..4bd81eb 100644
--- a/meld/sourceview.py
+++ b/meld/sourceview.py
@@ -124,6 +124,10 @@ class MeldSourceView(GtkSource.View):
buf = meldbuffer.MeldBuffer()
buf.create_tag("inline")
+ buf.create_tag("dimmed")
+ dimmed_tag = buf.get_tag_table().lookup("dimmed")
+ dimmed_tag.set_property("weight", 200)
+ dimmed_tag.set_property("weight-set", True)
self.set_buffer(buf)
meldsettings.connect('changed', self.on_setting_changed)
diff --git a/meld/filediff.py b/meld/filediff.py
index 0aabdba..0403dfa 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -762,7 +762,9 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
None, True)
self.queue_draw()
- def _filter_text(self, txt):
+ def _filter_text(self, txt, buf):
+ dimmed_tag = buf.get_tag_table().lookup("dimmed")
+ buf.remove_tag(dimmed_tag, buf.get_start_iter(), buf.get_end_iter())
def killit(m):
assert m.group().count("\n") == 0
if len(m.groups()):
@@ -772,6 +774,8 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
s = s.replace(g,"")
return s
else:
+ dimmed_tag = buf.get_tag_table().lookup("dimmed")
+ buf.apply_tag(dimmed_tag, buf.get_iter_at_offset(m.start()),
buf.get_iter_at_offset(m.end()))
return ""
try:
for filt in self.text_filters:
diff --git a/meld/meldbuffer.py b/meld/meldbuffer.py
index 9c89999..7cfd471 100644
--- a/meld/meldbuffer.py
+++ b/meld/meldbuffer.py
@@ -223,7 +223,7 @@ class BufferLines(object):
end = self.buf.get_iter_at_line_or_eof(hi)
txt = text_type(self.buf.get_text(start, end, False), 'utf8')
- filter_txt = self.textfilter(txt)
+ filter_txt = self.textfilter(txt, self.buf)
lines = filter_txt.splitlines()
ends = filter_txt.splitlines(True)
@@ -269,7 +269,7 @@ class BufferLines(object):
if not line_end.ends_line():
line_end.forward_to_line_end()
txt = self.buf.get_text(line_start, line_end, False)
- return text_type(self.textfilter(txt), 'utf8')
+ return text_type(self.textfilter(txt, self.buf), 'utf8')
def __len__(self):
return self.buf.get_line_count()
diff --git a/meld/sourceview.py b/meld/sourceview.py
index 0d142f3..86d8bc9 100644
--- a/meld/sourceview.py
+++ b/meld/sourceview.py
@@ -124,6 +124,10 @@ class MeldSourceView(GtkSource.View):
buf = meldbuffer.MeldBuffer()
buf.create_tag("inline")
+ buf.create_tag("dimmed")
+ dimmed_tag = buf.get_tag_table().lookup("dimmed")
+ dimmed_tag.set_property("scale", (1 / 1.2))
+ dimmed_tag.set_property("scale-set", True)
self.set_buffer(buf)
meldsettings.connect('changed', self.on_setting_changed)
_______________________________________________
meld-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/meld-list