;; Created: February 2, 1994
;; Keywords: comparing, merging, patching, version control.
-(defconst ediff-version "2.66" "The current version of Ediff")
-(defconst ediff-date "July 9, 1997" "Date of last update")
+(defconst ediff-version "2.70.2" "The current version of Ediff")
+(defconst ediff-date "May 21, 1998" "Date of last update")
;; This file is part of GNU Emacs.
(defgroup ediff nil
"A comprehensive visual interface to diff & patch"
+ :tag "Ediff"
:group 'tools)
;; Used as a startup hook to set `_orig' patch file read-only.
(defun ediff-set-read-only-in-buf-A ()
- (ediff-eval-in-buffer ediff-buffer-A
+ (ediff-with-current-buffer ediff-buffer-A
(toggle-read-only 1)))
;; Return a plausible default for ediff's first file:
;; deleted.
(defun ediff-find-file (file-var buffer-name &optional last-dir hooks-var)
(let* ((file (symbol-value file-var))
- (file-magic (find-file-name-handler file 'find-file-noselect))
+ (file-magic (ediff-filename-magic-p file))
(temp-file-name-prefix (file-name-nondirectory file)))
(cond ((not (file-readable-p file))
(error "File `%s' does not exist or is not readable" file))
;; Setup the buffer
(set buffer-name (find-file-noselect file))
- (ediff-eval-in-buffer (symbol-value buffer-name)
+ (ediff-with-current-buffer (symbol-value buffer-name)
(widen) ; Make sure the entire file is seen
(cond (file-magic ; file has a handler, such as jka-compr-handler or
;;; ange-ftp-hook-function--arrange for temp file
(ediff-verify-file-buffer))))
(set file-var file)))
-(defun ediff-files-internal (file-A file-B file-C startup-hooks job-name)
+;; MERGE-BUFFER-FILE is the file to be associated with the merge buffer
+(defun ediff-files-internal (file-A file-B file-C startup-hooks job-name
+ &optional merge-buffer-file)
(let (buf-A buf-B buf-C)
(message "Reading file %s ... " file-A)
;;(sit-for 0)
buf-B file-B
buf-C file-C
startup-hooks
- (list (cons 'ediff-job-name job-name)))))
+ (list (cons 'ediff-job-name job-name))
+ merge-buffer-file)))
;;;###autoload
-(defun ediff-buffers-internal (buf-A buf-B buf-C startup-hooks job-name)
+;; 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))
))
startup-hooks)
(list (cons 'ediff-job-name job-name))
- )))
+ merge-buffer-file)))
;;; Directory and file group operations
file-A file-B)
;; in case beg/end-A/B aren't markers--make them into markers
- (ediff-eval-in-buffer buffer-A
+ (ediff-with-current-buffer buffer-A
(setq beg-A (move-marker (make-marker) beg-A)
end-A (move-marker (make-marker) end-A)))
- (ediff-eval-in-buffer buffer-B
+ (ediff-with-current-buffer buffer-B
(setq beg-B (move-marker (make-marker) beg-B)
end-B (move-marker (make-marker) end-B)))
(list (cons 'ediff-word-mode word-mode)
(cons 'ediff-narrow-bounds (list overl-A overl-B))
(cons 'ediff-job-name job-name))
- setup-parameters)
- )
+ setup-parameters))
))
(defsubst ediff-merge-on-startup ()
(ediff-do-merge 0)
- (ediff-eval-in-buffer ediff-buffer-C
+ (ediff-with-current-buffer ediff-buffer-C
(set-buffer-modified-p nil)))
;;;###autoload
-(defun ediff-merge-files (file-A file-B &optional startup-hooks)
+(defun ediff-merge-files (file-A file-B
+ ;; MERGE-BUFFER-FILE is the file to be
+ ;; associated with the merge buffer
+ &optional startup-hooks merge-buffer-file)
"Merge two files without ancestor."
(interactive
(let ((dir-A (if ediff-use-last-dir
file-B)
nil ; file-C
startup-hooks
- 'ediff-merge-files))
+ 'ediff-merge-files
+ merge-buffer-file))
;;;###autoload
(defun ediff-merge-files-with-ancestor (file-A file-B file-ancestor
- &optional startup-hooks)
+ &optional
+ startup-hooks
+ ;; MERGE-BUFFER-FILE is the file
+ ;; to be associated with the
+ ;; merge buffer
+ merge-buffer-file)
"Merge two files with ancestor."
(interactive
(let ((dir-A (if ediff-use-last-dir
file-B)
file-ancestor
startup-hooks
- 'ediff-merge-files-with-ancestor))
+ 'ediff-merge-files-with-ancestor
+ merge-buffer-file))
;;;###autoload
(defalias 'ediff-merge-with-ancestor 'ediff-merge-files-with-ancestor)
;;;###autoload
-(defun ediff-merge-buffers (buffer-A buffer-B &optional startup-hooks job-name)
+(defun ediff-merge-buffers (buffer-A buffer-B
+ &optional
+ ;; MERGE-BUFFER-FILE is the file to be
+ ;; associated with the merge buffer
+ startup-hooks job-name merge-buffer-file)
"Merge buffers without ancestor."
(interactive
(let (bf)
(setq startup-hooks (cons 'ediff-merge-on-startup startup-hooks))
(or job-name (setq job-name 'ediff-merge-buffers))
(ediff-buffers-internal
- buffer-A buffer-B nil startup-hooks job-name))
+ buffer-A buffer-B nil startup-hooks job-name merge-buffer-file))
;;;###autoload
-(defun ediff-merge-buffers-with-ancestor (buffer-A
- buffer-B buffer-ancestor
- &optional startup-hooks job-name)
+(defun ediff-merge-buffers-with-ancestor (buffer-A buffer-B buffer-ancestor
+ &optional
+ startup-hooks
+ job-name
+ ;; MERGE-BUFFER-FILE is the
+ ;; file to be associated
+ ;; with the merge buffer
+ merge-buffer-file)
"Merge buffers with ancestor."
(interactive
(let (bf bff)
(setq startup-hooks (cons 'ediff-merge-on-startup startup-hooks))
(or job-name (setq job-name 'ediff-merge-buffers-with-ancestor))
(ediff-buffers-internal
- buffer-A buffer-B buffer-ancestor startup-hooks job-name))
+ buffer-A buffer-B buffer-ancestor startup-hooks job-name merge-buffer-file))
;;;###autoload
-(defun ediff-merge-revisions (&optional file startup-hooks)
+(defun ediff-merge-revisions (&optional file startup-hooks merge-buffer-file)
+ ;; MERGE-BUFFER-FILE is the file to be associated with the merge buffer
"Run Ediff by merging two revisions of a file.
The file is the optional FILE argument or the file visited by the current
buffer."
;; ancestor-revision=nil
(funcall
(intern (format "ediff-%S-merge-internal" ediff-version-control-package))
- rev1 rev2 nil startup-hooks)))
+ rev1 rev2 nil startup-hooks merge-buffer-file)))
;;;###autoload
-(defun ediff-merge-revisions-with-ancestor (&optional file startup-hooks)
+(defun ediff-merge-revisions-with-ancestor (&optional
+ file startup-hooks
+ ;; MERGE-BUFFER-FILE is the file to
+ ;; be associated with the merge
+ ;; buffer
+ merge-buffer-file)
"Run Ediff by merging two revisions of a file with a common ancestor.
The file is the the optional FILE argument or the file visited by the current
buffer."
(ediff-load-version-control)
(funcall
(intern (format "ediff-%S-merge-internal" ediff-version-control-package))
- rev1 rev2 ancestor-rev startup-hooks)))
+ rev1 rev2 ancestor-rev startup-hooks merge-buffer-file)))
;;;###autoload
(defun run-ediff-from-cvs-buffer (pos)
(t default-directory)))
(setq source-file
;; the default is the directory, not the visited file name
- (ediff-read-file-name "Which file to patch? " source-dir source-dir))
+ (ediff-read-file-name
+ "Which file to patch? " source-dir (ediff-get-default-file-name)))
(ediff-dispatch-file-patching-job patch-buf source-file)))
;;;###autoload
patch-buf
(read-buffer "Which buffer to patch? "
(cond ((eq patch-buf (current-buffer))
- (window-buffer (other-window 1)))
+ (ediff-other-buffer (current-buffer)))
(t (current-buffer)))
'must-match))))
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
-;;; eval: (put 'ediff-eval-in-buffer 'lisp-indent-hook 1)
-;;; eval: (put 'ediff-eval-in-buffer 'edebug-form-spec '(form body))
+;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
+;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body))
;;; End:
(require 'ediff-util)