[meld] Bug 581557 – Fix applying changes at EOF (Piotr Piastucki)
- From: Stephen Kennedy <stevek src gnome org>
- To: svn-commits-list gnome org
- Subject: [meld] Bug 581557 – Fix applying changes at EOF (Piotr Piastucki)
- Date: Fri, 8 May 2009 18:36:06 -0400 (EDT)
commit d0dd876ee1968b4713a2e3c8474a02c7de93ee23
Author: Stephen Kennedy <stevek gnome org>
Date: Wed May 6 21:42:27 2009 +0100
Bug 581557 â?? Fix applying changes at EOF (Piotr Piastucki)
---
filediff.py | 22 +++++++++++++---------
1 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/filediff.py b/filediff.py
index ee676a2..160d632 100644
--- a/filediff.py
+++ b/filediff.py
@@ -45,6 +45,11 @@ gdk = gtk.gdk
MASK_SHIFT, MASK_CTRL = 1, 2
+def get_iter_at_line_or_eof(buffer, line):
+ if line >= buffer.get_line_count():
+ return buffer.get_end_iter()
+ return buffer.get_iter_at_line(line)
+
class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
"""Two or three way diff of text files.
"""
@@ -202,11 +207,10 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
self.buf, self.textfilter = buf, textfilter
def __getslice__(self, lo, hi):
b = self.buf
+ txt = b.get_text(get_iter_at_line_or_eof(b, lo), get_iter_at_line_or_eof(b, hi), 0)
if hi >= b.get_line_count():
- txt = b.get_text(b.get_iter_at_line(lo), b.get_end_iter(), 0)
return self.textfilter(txt).split("\n")
else:
- txt = b.get_text(b.get_iter_at_line(lo), b.get_iter_at_line(hi), 0)
return self.textfilter(txt).split("\n")[:-1]
class FakeTextArray(object):
def __init__(self, bufs, textfilter):
@@ -1257,18 +1261,18 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
b0 = self.textbuffer[src]
b1 = self.textbuffer[dst]
if self.keymask & MASK_SHIFT: # delete
- b0.delete(b0.get_iter_at_line(chunk[0]), b0.get_iter_at_line(chunk[1]))
+ b0.delete(get_iter_at_line_or_eof(b0, chunk[0]), get_iter_at_line_or_eof(b0, chunk[1]))
elif self.keymask & MASK_CTRL: # copy up or down
- t0 = b0.get_text( b0.get_iter_at_line(chunk[0]), b0.get_iter_at_line(chunk[1]), 0)
+ t0 = b0.get_text( get_iter_at_line_or_eof(b0, chunk[0]), get_iter_at_line_or_eof(b0, chunk[1]), 0)
if event.y - rect[1] < 0.5 * rect[3]: # copy up
- b1.insert_with_tags_by_name(b1.get_iter_at_line(chunk[2]), t0, "edited line")
+ b1.insert_with_tags_by_name(get_iter_at_line_or_eof(b1, chunk[2]), t0, "edited line")
else: # copy down
- b1.insert_with_tags_by_name(b1.get_iter_at_line(chunk[3]), t0, "edited line")
+ b1.insert_with_tags_by_name(get_iter_at_line_or_eof(b1, chunk[3]), t0, "edited line")
else: # replace
- t0 = b0.get_text( b0.get_iter_at_line(chunk[0]), b0.get_iter_at_line(chunk[1]), 0)
+ t0 = b0.get_text( get_iter_at_line_or_eof(b0, chunk[0]), get_iter_at_line_or_eof(b0, chunk[1]), 0)
self.on_textbuffer__begin_user_action()
- b1.delete(b1.get_iter_at_line(chunk[2]), b1.get_iter_at_line(chunk[3]))
- b1.insert_with_tags_by_name(b1.get_iter_at_line(chunk[2]), t0, "edited line")
+ b1.delete(get_iter_at_line_or_eof(b1, chunk[2]), get_iter_at_line_or_eof(b1, chunk[3]))
+ b1.insert_with_tags_by_name(get_iter_at_line_or_eof(b1, chunk[2]), t0, "edited line")
self.on_textbuffer__end_user_action()
return True
return False
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]