Function: ediff-setup-windows-plain-compare
ediff-setup-windows-plain-compare is a byte-compiled function defined
in ediff-wind.el.gz.
Signature
(ediff-setup-windows-plain-compare BUF-A BUF-B BUF-C CONTROL-BUFFER)
Source Code
;; Defined in /usr/src/emacs/lisp/vc/ediff-wind.el.gz
;; This function handles all comparison jobs, including 3way jobs.
(defun ediff-setup-windows-plain-compare (buf-A buf-B buf-C control-buffer)
;; Skip dedicated and unsplittable frames.
(ediff-destroy-control-frame control-buffer)
(let ((window-min-height 1)
(window-combination-resize t)
split-window-function
three-way-comparison
wind-A-start wind-B-start wind-A wind-B wind-C)
(with-current-buffer control-buffer
(setq wind-A-start (ediff-overlay-start
(ediff-get-value-according-to-buffer-type
'A ediff-narrow-bounds))
wind-B-start (ediff-overlay-start
(ediff-get-value-according-to-buffer-type
'B ediff-narrow-bounds))
;; This lets us have local versions of ediff-split-window-function.
split-window-function ediff-split-window-function
three-way-comparison ediff-3way-comparison-job))
;; Replace selected frame's main window by its first live window.
(when (or (window-minibuffer-p) (window-parameter nil 'window-side))
(catch 'found
(walk-window-subtree
(lambda (window)
(select-window window)
(throw 'found t))
(window-main-window))))
(delete-other-windows)
;; Set up wind-A, wind-B and if necessary wind-C.
(set-window-dedicated-p (selected-window) nil)
(setq wind-A (selected-window))
(set-window-buffer wind-A buf-A)
(setq wind-B (funcall split-window-function))
(set-window-buffer wind-B buf-B)
(select-window wind-B)
(when three-way-comparison
(setq wind-C (funcall split-window-function))
(set-window-buffer wind-C buf-C))
(with-current-buffer control-buffer
(setq ediff-window-A wind-A
ediff-window-B wind-B
ediff-window-C wind-C))
;; It is unlikely that we will want to implement 3way window comparison.
;; So, only buffers A and B are used here.
(when ediff-windows-job
(set-window-start wind-A wind-A-start)
(set-window-start wind-B wind-B-start))
;; Do not call 'display-buffer-in-direction' directly (Bug#80809).
;; If making a new window fails, reuse an existing one.
(pop-to-buffer
control-buffer
'(display-buffer-in-direction
;; Don't let 'display-buffer' put the control buffer into a new
;; frame - ‘ediff-cleanup-mess’ can't handle it (if you insist,
;; run 'quit-restore-window' instead of 'delete-window' there).
. ((direction . bottom) (pop-up-frames . nil))))
(ediff-setup-control-buffer control-buffer)))