Function: ediff-buffers-internal
ediff-buffers-internal is a byte-compiled function defined in
ediff.el.gz.
Signature
(ediff-buffers-internal BUF-A BUF-B BUF-C STARTUP-HOOKS JOB-NAME &optional MERGE-BUFFER-FILE)
Source Code
;; Defined in /usr/src/emacs/lisp/vc/ediff.el.gz
;; MERGE-BUFFER-FILE is the file to be associated with the merge buffer
(defun ediff-buffers-internal (buf-A buf-B buf-C startup-hooks job-name
&optional merge-buffer-file)
(let* ((buf-A-file-name (buffer-file-name (get-buffer buf-A)))
(buf-B-file-name (buffer-file-name (get-buffer buf-B)))
(buf-C-is-alive (ediff-buffer-live-p buf-C))
(buf-C-file-name (if buf-C-is-alive
(buffer-file-name (get-buffer buf-B))))
file-A file-B file-C)
(unwind-protect
(progn
(if (not (ediff-buffer-live-p buf-A))
(user-error "Buffer %S doesn't exist" buf-A))
(if (not (ediff-buffer-live-p buf-B))
(user-error "Buffer %S doesn't exist" buf-B))
(let ((ediff-job-name job-name))
(if (and ediff-3way-comparison-job
(not buf-C-is-alive))
(user-error "Buffer %S doesn't exist" buf-C)))
(if (stringp buf-A-file-name)
(setq buf-A-file-name (file-name-nondirectory buf-A-file-name)))
(if (stringp buf-B-file-name)
(setq buf-B-file-name (file-name-nondirectory buf-B-file-name)))
(if (stringp buf-C-file-name)
(setq buf-C-file-name (file-name-nondirectory buf-C-file-name)))
(setq file-A (ediff-make-temp-file buf-A buf-A-file-name)
file-B (ediff-make-temp-file buf-B buf-B-file-name))
(if buf-C-is-alive
(setq file-C (ediff-make-temp-file buf-C buf-C-file-name)))
(ediff-setup (get-buffer buf-A) file-A
(get-buffer buf-B) file-B
(if buf-C-is-alive (get-buffer buf-C))
file-C
(cons (lambda ()
(delete-file file-A)
(delete-file file-B)
(if (stringp file-C) (delete-file file-C)))
startup-hooks)
(list (cons 'ediff-job-name job-name))
merge-buffer-file))
(if (and (stringp file-A) (file-exists-p file-A))
(delete-file file-A))
(if (and (stringp file-B) (file-exists-p file-B))
(delete-file file-B))
(if (and (stringp file-C) (file-exists-p file-C))
(delete-file file-C)))))