Subject: bug#25493: 26.0.50; ediff merge should (optionally) show ancestor in fourth window

From: [email-masked]
Date: Sat, 04 Mar 2017 18:06:50 -0500

Tino Calancha <[email-masked]> writes:

> Philipp Stephani <[email-masked]> writes:
>
>> It would be very useful if ediff merge could optionally display the
>> ancestor in a fourth window, like vimdiff or meld.  See
>> https://lists.gnu.org/archive/html/emacs-devel/2017-01/msg00204.html.
>
> Following patch, by default, display the ancestor buffer and auto refine
> it in 3way merges.
> This feature can be disabled by customizing a new option.

Could you perhaps explain more in the commit messages about how the
patch works, at a high level?  It's long enough that I get lost while
reading it.

As a user, I noticed that `ediff-scroll-vertically' doesn't scroll the
ancestor buffer.

Also, I want diff refining in buffer A and B against the ancestor, not
each other.  This might be more of an addtional feature request that
doesn't necessarily need to addressed in your patch though.

> Subject: [PATCH 1/3] Show ancestor buffer in 3way merges
>
> Add an option to control if the ancestor buffer must
> be shown in 3way merges (Bug#25493).
> Add an option to control whether if show or ignore diffs with
                                   ^^
s/if/to/ I think?

>  
> +(defsubst ediff--check-ancestor-exists ()

I don't think there is reason for this to be a defsubst over a defun.

> +
> +(defun ediff-toggle-show-ancestor ()

> +    (when (eq ediff-show-ancestor
> +              (alist-get 'ediff-show-ancestor alist))
> +      (assq-delete-all 'ediff-show-ancestor alist)

I think this should be (setq alist (assq-delete-all ...))

or equivalently (cl-callf assq-delete-all alist 'ediff-show-ancestor)

> +(defun ediff-toggle-hide-equal-diffs-with-ancestor ()

> +    (when (eq ediff-hide-equal-diffs-with-ancestor
> +              (alist-get 'ediff-hide-equal-diffs-with-ancestor
> +                         alist))
> +      (assq-delete-all 'ediff-hide-equal-diffs-with-ancestor
> +                       alist)

Again here.