;;; ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff
-;; Copyright (C) 1995, 96, 97, 98, 99, 2000, 01, 02, 05 Free Software Foundation, Inc.
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+;; 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
;;; Code:
-(provide 'ediff-mult)
(defgroup ediff-mult nil
- "Multi-file and multi-buffer processing in Ediff"
+ "Multi-file and multi-buffer processing in Ediff."
:prefix "ediff-"
:group 'ediff)
;; end pacifier
(require 'ediff-init)
-(require 'ediff-util)
;; meta-buffer
(ediff-defvar-local ediff-meta-buffer nil "")
(defcustom ediff-default-filtering-regexp nil
"The default regular expression used as a filename filter in multifile comparisons.
-Should be a sexp. For instance (car ediff-filtering-regexp-history) or nil."
+Should be a sexp. For instance (car ediff-filtering-regexp-history) or nil."
:type 'sexp
:group 'ediff-mult)
This can be toggled with `ediff-toggle-filename-truncation'."
:type 'boolean
:group 'ediff-mult)
+
+(defcustom ediff-meta-mode-hook nil
+ "*Hooks run just after setting up meta mode."
+ :type 'hook
+ :group 'ediff-mult)
+
(defcustom ediff-registry-setup-hook nil
"*Hooks run just after the registry control panel is set up."
:type 'hook
(defcustom ediff-before-session-group-setup-hooks nil
"*Hooks to run before Ediff arranges the window for group-level operations.
-It is used by commands such as ediff-directories.
+It is used by commands such as `ediff-directories'.
This hook can be used to save the previous window config, which can be restored
-on ediff-quit, ediff-suspend, or ediff-quit-session-group-hook."
+on `ediff-quit', `ediff-suspend', or `ediff-quit-session-group-hook'."
:type 'hook
:group 'ediff-hook)
(defcustom ediff-after-session-group-setup-hook nil
:type 'hook
:group 'ediff-mult)
(defcustom ediff-meta-buffer-keymap-setup-hook nil
- "*Hooks run just after setting up the ediff-meta-buffer-map.
+ "*Hooks run just after setting up the `ediff-meta-buffer-map'.
This keymap controls key bindings in the meta buffer and is a local variable.
This means that you can set different bindings for different kinds of meta
buffers."
(file-directory-p (ediff-get-session-objC-name session-info)) t)))
;; set up the keymap in the meta buffer
-(defun ediff-setup-meta-map()
+(defun ediff-setup-meta-map ()
(setq ediff-meta-buffer-map (make-sparse-keymap))
(suppress-keymap ediff-meta-buffer-map)
(define-key ediff-meta-buffer-map "q" 'ediff-quit-meta-buffer)
(kill-all-local-variables)
(setq major-mode 'ediff-meta-mode)
(setq mode-name "MetaEdiff")
- (run-mode-hooks 'ediff-meta-mode-hook))
+ ;; don't use run-mode-hooks here!
+ (run-hooks 'ediff-meta-mode-hook))
;; the keymap for the buffer showing directory differences
(session-info (ediff-overlay-get overl 'ediff-meta-info))
(activity-marker (ediff-get-session-activity-marker session-info))
buffer-read-only)
- (or new-marker activity-marker (setq new-marker ?\ ))
+ (or new-marker activity-marker (setq new-marker ?\s))
(goto-char (ediff-overlay-start overl))
(if (eq (char-after (point)) new-marker)
() ; if marker shown in buffer is the same as new-marker, do nothing
(session-info (ediff-overlay-get overl 'ediff-meta-info))
(status (ediff-get-session-status session-info))
buffer-read-only)
- (setq new-status (or new-status status ?\ ))
+ (setq new-status (or new-status status ?\s))
(goto-char (ediff-overlay-start overl))
(forward-char 1) ; status is the second char in session record
(if (eq (char-after (point)) new-status)
(if otherfile
(or (file-exists-p otherfile)
(if (y-or-n-p
- (format "Copy %s to %s ? " file-abs otherfile))
+ (format "Copy %s to %s? " file-abs otherfile))
(let* ((file-diff-record (assoc file-tail dir-diff-list))
(new-mem-code
(* (cdr file-diff-record) file-mem-code)))
(ediff-overlay-put overl 'highlight t))
(ediff-overlay-put overl 'ediff-meta-info prop)
(ediff-overlay-put overl 'invisible hidden)
+ (ediff-overlay-put overl 'follow-link t)
(if (numberp session-number)
(ediff-overlay-put overl 'ediff-meta-session-number session-number))))
(save-excursion
(set-buffer meta-diff-buff)
(goto-char (point-max))
- (insert-buffer custom-diff-buf)
+ (insert-buffer-substring custom-diff-buf)
(insert "\n")))
;; if ediff session is not live, run diff directly on the files
((memq metajob '(ediff-directories
(save-excursion
(set-buffer meta-diff-buff)
(goto-char (point-max))
- (insert-buffer tmp-buf)
+ (insert-buffer-substring tmp-buf)
(insert "\n")))
(t
(ediff-kill-buffer-carefully meta-diff-buff)
(ediff-get-session-objC-name info)))
(set-buffer (get-buffer-create ediff-tmp-buffer))
(erase-buffer)
- (insert-buffer patchbuffer)
+ (insert-buffer-substring patchbuffer)
+ (goto-char (point-min))
(display-buffer ediff-tmp-buffer 'not-this-window)
))
(error "The patch buffer wasn't found"))))
"Run through the session list and mark identical files.
This is used only for sessions that involve 2 or 3 files at the same time.
ACTION is an optional argument that can be ?h, ?m, ?=, to mark for hiding, mark
-for operation, or simply indicate which are equal files. If it is nil, then
-last-command-char is used to decide which action to take."
+for operation, or simply indicate which are equal files. If it is nil, then
+`last-command-char' is used to decide which action to take."
(interactive)
(if (null action)
(setq action last-command-char))
))
+(provide 'ediff-mult)
+
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)