X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/5a95db215e07e2f80af6238a0f92b5d6823a7e0b..cbee283dd7dd655124e81a6bd555506476180b5d:/lisp/ediff-mult.el diff --git a/lisp/ediff-mult.el b/lisp/ediff-mult.el index 3696d8ae77..443ebdcbed 100644 --- a/lisp/ediff-mult.el +++ b/lisp/ediff-mult.el @@ -1,7 +1,7 @@ ;;; ediff-mult.el --- support for multi-file/multi-buffer processing in Ediff ;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -;; 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +;; 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ;; Author: Michael Kifer @@ -105,6 +105,8 @@ ;;; Code: +(provide 'ediff-mult) + (defgroup ediff-mult nil "Multi-file and multi-buffer processing in Ediff." :prefix "ediff-" @@ -113,12 +115,13 @@ ;; compiler pacifier (eval-when-compile - (let ((load-path (cons (expand-file-name ".") load-path))) - (or (featurep 'ediff-init) - (load "ediff-init.el" nil nil 'nosuffix)) - (or (featurep 'ediff-util) - (load "ediff-util.el" nil nil 'nosuffix)) - )) + (require 'ediff-init) + (if (not (featurep 'ediff-util)) + (require 'ediff-util)) + (if (not (featurep 'ediff-ptch)) + (require 'ediff-ptch)) + (require 'ediff) + ) ;; end pacifier (require 'ediff-init) @@ -404,7 +407,7 @@ Toggled by ediff-toggle-verbose-help-meta-buffer" ) (define-key ediff-meta-buffer-map "=h" 'ediff-meta-mark-equal-files))) (if ediff-no-emacs-help-in-control-buffer (define-key ediff-meta-buffer-map "\C-h" 'ediff-previous-meta-item)) - (if ediff-emacs-p + (if (featurep 'emacs) (define-key ediff-meta-buffer-map [mouse-2] ediff-meta-action-function) (define-key ediff-meta-buffer-map [button2] ediff-meta-action-function)) @@ -448,7 +451,7 @@ Commands: (define-key ediff-dir-diffs-buffer-map "\C-?" 'previous-line) (define-key ediff-dir-diffs-buffer-map "p" 'previous-line) (define-key ediff-dir-diffs-buffer-map "C" 'ediff-dir-diff-copy-file) -(if ediff-emacs-p +(if (featurep 'emacs) (define-key ediff-dir-diffs-buffer-map [mouse-2] 'ediff-dir-diff-copy-file) (define-key ediff-dir-diffs-buffer-map [button2] 'ediff-dir-diff-copy-file)) (define-key ediff-dir-diffs-buffer-map [delete] 'previous-line) @@ -939,10 +942,9 @@ behavior." (erase-buffer) ;; delete phony overlays that used to represent sessions before the buff ;; was redrawn - (ediff-cond-compile-for-xemacs-or-emacs - (map-extents 'delete-extent) ; xemacs - (mapc 'delete-overlay (overlays-in 1 1)) ; emacs - ) + (if (featurep 'xemacs) + (map-extents 'delete-extent) + (mapc 'delete-overlay (overlays-in 1 1))) (setq regexp (ediff-get-group-regexp meta-list) merge-autostore-dir @@ -1047,32 +1049,30 @@ behavior." (defun ediff-update-session-marker-in-dir-meta-buffer (session-num) (let (buffer-meta-overlays session-info overl buffer-read-only) (setq overl - (ediff-cond-compile-for-xemacs-or-emacs - (map-extents ; xemacs - (lambda (ext maparg) - (if (and - (ediff-overlay-get ext 'ediff-meta-info) - (eq (ediff-overlay-get ext 'ediff-meta-session-number) - session-num)) - ext))) + (if (featurep 'xemacs) + (map-extents + (lambda (ext maparg) + (if (and + (ediff-overlay-get ext 'ediff-meta-info) + (eq (ediff-overlay-get ext 'ediff-meta-session-number) + session-num)) + ext))) ;; Emacs doesn't have map-extents, so try harder ;; Splice overlay lists to get all buffer overlays - (progn - (setq buffer-meta-overlays (overlay-lists) - buffer-meta-overlays (append (car buffer-meta-overlays) + (setq buffer-meta-overlays (overlay-lists) + buffer-meta-overlays (append (car buffer-meta-overlays) (cdr buffer-meta-overlays))) - (car - (delq nil - (mapcar - (lambda (overl) - (if (and - (ediff-overlay-get overl 'ediff-meta-info) - (eq (ediff-overlay-get - overl 'ediff-meta-session-number) - session-num)) - overl)) - buffer-meta-overlays)))) - )) + (car + (delq nil + (mapcar + (lambda (overl) + (if (and + (ediff-overlay-get overl 'ediff-meta-info) + (eq (ediff-overlay-get + overl 'ediff-meta-session-number) + session-num)) + overl)) + buffer-meta-overlays))))) (or overl (error "Bug in ediff-update-session-marker-in-dir-meta-buffer: no overlay with given number %S" @@ -1388,10 +1388,9 @@ Useful commands: (erase-buffer) ;; delete phony overlays that used to represent sessions before the buff ;; was redrawn - (ediff-cond-compile-for-xemacs-or-emacs - (map-extents 'delete-extent) ; xemacs - (mapc 'delete-overlay (overlays-in 1 1)) ; emacs - ) + (if (featurep 'xemacs) + (map-extents 'delete-extent) + (mapc 'delete-overlay (overlays-in 1 1))) (insert "This is a registry of all active Ediff sessions. @@ -1493,7 +1492,7 @@ Useful commands: (defun ediff-set-meta-overlay (b e prop &optional session-number hidden) (let (overl) (setq overl (ediff-make-overlay b e)) - (if ediff-emacs-p + (if (featurep 'emacs) (ediff-overlay-put overl 'mouse-face 'highlight) (ediff-overlay-put overl 'highlight t)) (ediff-overlay-put overl 'ediff-meta-info prop) @@ -2213,44 +2212,35 @@ If this is a session registry buffer then just bury it." (let (result olist tmp) (if (and point (ediff-buffer-live-p buf)) (ediff-with-current-buffer buf - (ediff-cond-compile-for-xemacs-or-emacs - (setq result ; xemacs - (if (setq tmp (extent-at point buf 'ediff-meta-info)) - (ediff-overlay-get tmp 'ediff-meta-info))) - (progn ; emacs - (setq olist (overlays-at point)) - (setq olist - (mapcar (lambda (elt) - (unless (overlay-get elt 'invisible) - (overlay-get elt 'ediff-meta-info))) - olist)) - (while (and olist (null (car olist))) - (setq olist (cdr olist))) - (setq result (car olist))) - ) - )) - (if result - result - (if noerror - nil - (ediff-update-registry) - (error "No session info in this line"))))) + (if (featurep 'xemacs) + (setq result + (if (setq tmp (extent-at point buf 'ediff-meta-info)) + (ediff-overlay-get tmp 'ediff-meta-info))) + (setq olist + (mapcar (lambda (elt) + (unless (overlay-get elt 'invisible) + (overlay-get elt 'ediff-meta-info))) + (overlays-at point))) + (while (and olist (null (car olist))) + (setq olist (cdr olist))) + (setq result (car olist))))) + (or result + (unless noerror + (ediff-update-registry) + (error "No session info in this line"))))) (defun ediff-get-meta-overlay-at-pos (point) - (ediff-cond-compile-for-xemacs-or-emacs - (extent-at point (current-buffer) 'ediff-meta-info) ; xemacs - ;; emacs - (let* ((overl-list (overlays-at point)) - (overl (car overl-list))) - (while (and overl (null (overlay-get overl 'ediff-meta-info))) - (setq overl-list (cdr overl-list) - overl (car overl-list))) - overl) - ) - ) - -(defsubst ediff-get-session-number-at-pos (point &optional meta-buffer) + (if (featurep 'xemacs) + (extent-at point (current-buffer) 'ediff-meta-info) + (let* ((overl-list (overlays-at point)) + (overl (car overl-list))) + (while (and overl (null (overlay-get overl 'ediff-meta-info))) + (setq overl-list (cdr overl-list) + overl (car overl-list))) + overl))) + +(defun ediff-get-session-number-at-pos (point &optional meta-buffer) (setq meta-buffer (if (ediff-buffer-live-p meta-buffer) meta-buffer (current-buffer))) @@ -2264,52 +2254,46 @@ If this is a session registry buffer then just bury it." (if (eobp) (goto-char (point-min)) (let ((overl (ediff-get-meta-overlay-at-pos point))) - (ediff-cond-compile-for-xemacs-or-emacs - (progn ; xemacs - (if overl - (setq overl (next-extent overl)) - (setq overl (next-extent (current-buffer)))) - (if overl - (extent-start-position overl) - (point-max))) - ;; emacs - (if overl - ;; note: end of current overlay is the beginning of the next one - (overlay-end overl) - (next-overlay-change point)) - ) - ) - )) + (if (featurep 'xemacs) + (progn ; xemacs + (if overl + (setq overl (next-extent overl)) + (setq overl (next-extent (current-buffer)))) + (if overl + (extent-start-position overl) + (point-max))) + ;; emacs + (if overl + ;; note: end of current overlay is the beginning of the next one + (overlay-end overl) + (next-overlay-change point)))))) (defun ediff-previous-meta-overlay-start (point) (if (bobp) (goto-char (point-max)) (let ((overl (ediff-get-meta-overlay-at-pos point))) - (ediff-cond-compile-for-xemacs-or-emacs - (progn - (if overl - (setq overl (previous-extent overl)) - (setq overl (previous-extent (current-buffer)))) - (if overl - (extent-start-position overl) - (point-min))) - (progn - (if overl (setq point (overlay-start overl))) - ;; to get to the beginning of prev overlay - (if (not (bobp)) - ;; trick to overcome an emacs bug--doesn't always find previous - ;; overlay change correctly - (setq point (1- point))) - (setq point (previous-overlay-change point)) - ;; If we are not over an overlay after subtracting 1, it means we are - ;; in the description area preceding session records. In this case, - ;; goto the top of the registry buffer. - (or (car (overlays-at point)) - (setq point (point-min))) - point) - ) - ))) + (if (featurep 'xemacs) + (progn + (if overl + (setq overl (previous-extent overl)) + (setq overl (previous-extent (current-buffer)))) + (if overl + (extent-start-position overl) + (point-min))) + (if overl (setq point (overlay-start overl))) + ;; to get to the beginning of prev overlay + (if (not (bobp)) + ;; trick to overcome an emacs bug--doesn't always find previous + ;; overlay change correctly + (setq point (1- point))) + (setq point (previous-overlay-change point)) + ;; If we are not over an overlay after subtracting 1, it means we are + ;; in the description area preceding session records. In this case, + ;; goto the top of the registry buffer. + (or (car (overlays-at point)) + (setq point (point-min))) + point)))) ;; this is the action invoked when the user selects a patch from the meta ;; buffer. @@ -2418,8 +2402,6 @@ for operation, or simply indicate which are equal files. If it is nil, then )) -(provide 'ediff-mult) - ;;; Local Variables: ;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun) @@ -2427,5 +2409,5 @@ for operation, or simply indicate which are equal files. If it is nil, then ;;; eval: (put 'ediff-with-current-buffer 'edebug-form-spec '(form body)) ;;; End: -;;; arch-tag: c8a76898-f96f-4d9c-be9d-129134017188 +;; arch-tag: c8a76898-f96f-4d9c-be9d-129134017188 ;;; ediff-mult.el ends here