On 7 March 2013 07:04, Pedro Pedruzzi <[email protected]> wrote:
> On Fri, Mar 1, 2013 at 5:49 PM, Kai Willadsen <[email protected]> wrote:
>> On 26 February 2013 06:58, Pedro Pedruzzi <[email protected]> wrote:
> Thanks for the pointers.
>
> I've came up with this proof-of-concept based on the second option.
> The tags isn't getting updated on buffer change yet. This is just to
> demonstrate how would it look and feel.
>
> Please, tell me what you think.

I'm actually surprised how well that works! I think we need to figure
out a way of doing what other diff tools do, and indicating the areas
that have been inserted to get the alignment right. I'm not sure
whether GtkTextView will let us do that easily, but we can see.

I've just had an alternative crazy idea. If tags don't give us the
flexibility we need, we could always insert a custom GTK widget after
each chunk, and give allocation to the widget based on required
padding. That should allow us to use whatever presentation we like.

...don't do that though. That's a crazy idea.

> I have some questions:
>
> 1. Where is a good place to do the tag creation? I tried somewhere in
> the constructor but it seems that the linediffer was not ready to
> iterate over changes yet.

I can't see any way of getting away from having a tag per chunk, which
means that there's no way to do it in the constructor. You can do this
is many places, but FileDiff._diff_files() is the first place where
we're guaranteed to have the diffs. Of course, those diffs can change,
and if they do then we'll get a callback to
FileDiff.on_diffs_changed(), which would probably be the right place
to update and revalidate tags.

> 2. How about 3 way filediffs? I would need to iterate over chunks on
> the 3 panes.

Exactly. Things are always complicated by 3-way diffs, but in this
case I think it's just a matter of adapting your code to use
linediffer.all_changes() instead of single_changes() and taking the
max of three offsets rather than of two.

cheers,
Kai
_______________________________________________
meld-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/meld-list

Reply via email to