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)))