Mercurial > emacs
diff lisp/ediff-init.el @ 14582:c768f6d7daaa
*** empty log message ***
author | Michael Kifer <kifer@cs.stonybrook.edu> |
---|---|
date | Fri, 16 Feb 1996 06:36:35 +0000 |
parents | 3c38a5112cb6 |
children | 43a3308fcf61 |
line wrap: on
line diff
--- a/lisp/ediff-init.el Fri Feb 16 05:25:08 1996 +0000 +++ b/lisp/ediff-init.el Fri Feb 16 06:36:35 1996 +0000 @@ -33,8 +33,18 @@ window-system (device-type (selected-device)))) ;; in XEmacs: device-type is tty on tty and stream in batch. -(defsubst ediff-window-display-p () - (and (ediff-device-type) (not (memq (ediff-device-type) '(tty stream))))) +(defun ediff-window-display-p () + (and (ediff-device-type) (not (memq (ediff-device-type) '(tty pc stream))))) + +;; test if supports faces +;; ediff-force-faces is for those devices that support faces, but we don't know +;; this yet +(defun ediff-has-face-support-p () + (cond ((ediff-window-display-p)) + (ediff-force-faces) + (ediff-emacs-p (memq (ediff-device-type) '(pc))) + (ediff-xemacs-p (memq (ediff-device-type) '(tty pc))))) + ;;; Macros (defmacro ediff-odd-p (arg) @@ -146,8 +156,7 @@ (,@ forms)) (set-buffer StartBuffer)) (or (eq this-command 'ediff-quit) - (error - "You've killed an essential Ediff buffer---Please quit Ediff")) + (error ediff-KILLED-VITAL-BUFFER)) )))) @@ -226,11 +235,16 @@ ;; add more here )) (defsubst ediff-collect-diffs-metajob (&optional metajob) - (or (ediff-revision-metajob metajob) - (memq ediff-metajob-name - '(ediff-directories - ;; add more here - ediff-directory-revisions)))) + (memq (or metajob ediff-metajob-name) + '(ediff-directories + ediff-directory-revisions + ediff-merge-directories + ediff-merge-directories-with-ancestor + ediff-merge-directory-revisions + ediff-merge-directory-revisions-with-ancestor + ;; add more here + ))) + (defsubst ediff-metajob3 (&optional metajob) (memq (or metajob ediff-metajob-name) '(ediff-merge-directories-with-ancestor @@ -335,7 +349,7 @@ C-l -recenter | ## -ignore whitespace | v/V -scroll up/dn | #f/#h -focus/hide regions | wx -save buf X </> -scroll lt/rt | X -read-only in buf X | wd -save diff output - | m -wide display | ~ -swap buffers + ~ -swap variants | m -wide display | " "Help message usually used for 2-way comparison. Normally, not a user option. See `ediff-help-message' for details.") @@ -349,7 +363,7 @@ C-l -recenter | ## -ignore whitespace | v/V -scroll up/dn | #f/#h -focus/hide regions | wx -save buf X </> -scroll lt/rt | X -read-only in buf X | wd -save diff output - | m -wide display | ~ -swap buffers + ~ -swap variants | m -wide display | " "Help message when comparing windows or regions line-by-line. Normally, not a user option. See `ediff-help-message' for details.") @@ -363,7 +377,7 @@ C-l -recenter | | v/V -scroll up/dn | #f/#h -focus/hide regions | wx -save buf X </> -scroll lt/rt | X -read-only in buf X | wd -save diff output - | m -wide display | ~ -swap buffers + ~ -swap variants | m -wide display | " "Help message when comparing windows or regions word-by-word. Normally, not a user option. See `ediff-help-message' for details.") @@ -377,7 +391,7 @@ C-l -recenter | #f/#h -focus/hide regions | + -combine diff regions v/V -scroll up/dn | X -read-only in buf X | wx -save buf X </> -scroll lt/rt | m -wide display | wd -save diff output - / -ancestor buff | s -shrink window C | ~ -swap buffers + ~ -swap variants | s -shrink window C | / -show ancestor buff | $ -show clashes only | & -merge w/new default " "Help message during merging. @@ -402,8 +416,8 @@ "The long help message that the user can customize. See `ediff-brief-help-message-function' for more.") -(defvar ediff-prefer-long-help-message nil - "*If t, Ediff starts with a long help message. Short help msg otherwise.") +(defvar ediff-use-long-help-message nil + "*If t, Ediff displays a long help message. Short help message otherwise.") ;; The actual help message. (ediff-defvar-local ediff-help-message "" @@ -412,6 +426,12 @@ start up with different help messages for different jobs, you can change the value of this variable and the variables `ediff-help-message-*' in `ediff-startup-hook'.") + +;; Error messages +(defconst ediff-KILLED-VITAL-BUFFER + "You have killed a vital Ediff buffer---you must leave Ediff now!") +(defconst ediff-NO-DIFFERENCES + "Sorry, it is not my job to munch identical variants...") ;; Selective browsing @@ -484,13 +504,18 @@ (ediff-defvar-local ediff-use-faces t - "If t, differences are highlighted using faces on a window system. -If nil, they are highlighted using ASCII flags, ediff-before-flag + "If t, differences are highlighted using faces, if device supports faces. +If nil, differences are highlighted using ASCII flags, ediff-before-flag and ediff-after-flag. On a non-window system, differences are always highlighted using ASCII flags. This variable can be set either in .emacs or toggled interactively. Use `setq-default' if setting it in .emacs") +(defvar ediff-force-faces nil + "If t, Ediff will think that it is running on a display that supports faces. +This is provided as a temporary relief for users of face-capable displays +that Ediff doesn't know about.") + ;; this indicates that diff regions are word-size, so fine diffs are ;; permanently nixed; used in ediff-windows-wordwise and ediff-regions-wordwise @@ -570,7 +595,7 @@ ;; Buffer-local variables to be saved then restored during Ediff sessions ;; Buffer-local variables to be saved then restored during Ediff sessions (defconst ediff-protected-variables '(buffer-read-only - synchronize-minibuffers +;;; synchronize-minibuffers mode-line-format)) ;; Vector of differences between the variants. Each difference is @@ -636,10 +661,10 @@ (defvar ediff-version-control-package 'vc "Version control package used. -Currently, Ediff supports vc.el, rcs.el, and generic-sc.el. The standard Emacs -interface to RCS, CVS, SCCS, etc., is vc.el. However, some people find the -other two packages more convenient. Set this variable `rcs' or `generic-sc' if -you are such a person.") +Currently, Ediff supports vc.el, rcs.el, pcl-cvs.el, and generic-sc.el. The +standard Emacs interface to RCS, CVS, SCCS, etc., is vc.el. However, some +people find the other two packages more convenient. Set this variable to the +appropriate symbol: `rcs', `pcl-cvs', or `generic-sc' if you so desire.") (if ediff-xemacs-p @@ -647,16 +672,12 @@ (fset 'ediff-read-event (symbol-function 'next-command-event)) (fset 'ediff-overlayp (symbol-function 'extentp)) (fset 'ediff-make-overlay (symbol-function 'make-extent)) - (fset 'ediff-delete-overlay (symbol-function 'delete-extent)) - (fset 'ediff-overlay-buffer (symbol-function 'extent-buffer)) - (fset 'ediff-overlay-get (symbol-function 'extent-property))) + (fset 'ediff-delete-overlay (symbol-function 'delete-extent))) (fset 'ediff-read-event (symbol-function 'read-event)) (fset 'ediff-overlayp (symbol-function 'overlayp)) (fset 'ediff-overlayp (symbol-function 'overlayp)) (fset 'ediff-make-overlay (symbol-function 'make-overlay)) - (fset 'ediff-delete-overlay (symbol-function 'delete-overlay)) - (fset 'ediff-overlay-buffer (symbol-function 'overlay-buffer)) - (fset 'ediff-overlay-get (symbol-function 'overlay-get))) + (fset 'ediff-delete-overlay (symbol-function 'delete-overlay))) ;; Check the current version against the major and minor version numbers ;; using op: cur-vers op major.minor If emacs-major-version or @@ -728,30 +749,34 @@ (eq (device-class (selected-device)) 'color))) +(if (ediff-has-face-support-p) + (if ediff-xemacs-p + (progn + (fset 'ediff-valid-color-p (symbol-function 'valid-color-name-p)) + (fset 'ediff-get-face (symbol-function 'get-face))) + ;; Temporary fix for OS/2 port of Emacs + ;; pm-win.el in PM-Emacs should be fixed. + (if (eq (ediff-device-type) 'pm) + (fset 'ediff-valid-color-p + (function (lambda (color) (assoc color pm-color-alist)))) + (fset 'ediff-valid-color-p (symbol-function 'x-color-defined-p))) + (fset 'ediff-get-face (symbol-function 'internal-get-face)))) + (if (ediff-window-display-p) (if ediff-xemacs-p (progn (fset 'ediff-display-pixel-width (symbol-function 'device-pixel-width)) (fset 'ediff-display-pixel-height - (symbol-function 'device-pixel-height)) - (fset 'ediff-valid-color-p (symbol-function 'valid-color-name-p)) - (fset 'ediff-get-face (symbol-function 'get-face))) - ;; Temporary fix for OS/2 port of Emacs - ;; pm-win.el in PM-Emacs should be fixed. + (symbol-function 'device-pixel-height))) (fset 'ediff-display-pixel-width (symbol-function 'x-display-pixel-width)) (fset 'ediff-display-pixel-height - (symbol-function 'x-display-pixel-height)) - (if (eq (ediff-device-type) 'pm) - (fset 'ediff-valid-color-p - (function (lambda (color) (assoc color pm-color-alist)))) - (fset 'ediff-valid-color-p (symbol-function 'x-color-defined-p))) - (fset 'ediff-get-face (symbol-function 'internal-get-face)))) + (symbol-function 'x-display-pixel-height)))) (defun ediff-make-current-diff-overlay (type) - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (let ((overlay (intern (format "ediff-current-diff-overlay-%S" type))) (buffer (ediff-get-buffer type)) (face (face-name @@ -787,7 +812,7 @@ (defun ediff-set-face (ground face color) "Set face foreground/background." - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (if (ediff-valid-color-p color) (if (eq ground 'foreground) (set-face-foreground face color) @@ -815,14 +840,15 @@ (copy-face 'secondary-selection face)))) )) -(or (boundp 'facemenu-unlisted-faces) - (setq facemenu-unlisted-faces nil)) - -(add-to-list 'facemenu-unlisted-faces 'ediff-current-diff-face-A) +(defun ediff-hide-face (face) + (if (and (ediff-has-face-support-p) ediff-emacs-p) + (add-to-list 'facemenu-unlisted-faces face))) + (defvar ediff-current-diff-face-A - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-current-diff-face-A) + (ediff-hide-face 'ediff-current-diff-face-A) (or (face-differs-from-default-p 'ediff-current-diff-face-A) (cond ((ediff-color-display-p) (ediff-set-face @@ -837,11 +863,11 @@ 'ediff-current-diff-face-A)) "Face for highlighting the selected difference in buffer A.") -(add-to-list 'facemenu-unlisted-faces 'ediff-current-diff-face-B) (defvar ediff-current-diff-face-B - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-current-diff-face-B) + (ediff-hide-face 'ediff-current-diff-face-B) (or (face-differs-from-default-p 'ediff-current-diff-face-B) (cond ((ediff-color-display-p) (ediff-set-face @@ -857,11 +883,11 @@ "Face for highlighting the selected difference in buffer B.") -(add-to-list 'facemenu-unlisted-faces 'ediff-current-diff-face-C) (defvar ediff-current-diff-face-C - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-current-diff-face-C) + (ediff-hide-face 'ediff-current-diff-face-C) (or (face-differs-from-default-p 'ediff-current-diff-face-C) (cond ((ediff-color-display-p) (ediff-set-face @@ -876,21 +902,21 @@ 'ediff-current-diff-face-C)) "Face for highlighting the selected difference in buffer C.") -(add-to-list 'facemenu-unlisted-faces 'ediff-current-diff-face-Ancestor) (defvar ediff-current-diff-face-Ancestor - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-current-diff-face-Ancestor) + (ediff-hide-face 'ediff-current-diff-face-Ancestor) (or (face-differs-from-default-p 'ediff-current-diff-face-Ancestor) (copy-face 'ediff-current-diff-face-C 'ediff-current-diff-face-Ancestor)))) "Face for highlighting the selected difference in the ancestor buffer.") -(add-to-list 'facemenu-unlisted-faces 'ediff-fine-diff-face-A) (defvar ediff-fine-diff-face-A - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-fine-diff-face-A) + (ediff-hide-face 'ediff-fine-diff-face-A) (or (face-differs-from-default-p 'ediff-fine-diff-face-A) (cond ((ediff-color-display-p) (ediff-set-face 'foreground 'ediff-fine-diff-face-A @@ -901,11 +927,11 @@ 'ediff-fine-diff-face-A)) "Face for highlighting the refinement of the selected diff in buffer A.") -(add-to-list 'facemenu-unlisted-faces 'ediff-fine-diff-face-B) (defvar ediff-fine-diff-face-B - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-fine-diff-face-B) + (ediff-hide-face 'ediff-fine-diff-face-B) (or (face-differs-from-default-p 'ediff-fine-diff-face-B) (cond ((ediff-color-display-p) (ediff-set-face 'foreground 'ediff-fine-diff-face-B "Black") @@ -914,11 +940,11 @@ 'ediff-fine-diff-face-B)) "Face for highlighting the refinement of the selected diff in buffer B.") -(add-to-list 'facemenu-unlisted-faces 'ediff-fine-diff-face-C) (defvar ediff-fine-diff-face-C - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-fine-diff-face-C) + (ediff-hide-face 'ediff-fine-diff-face-C) (or (face-differs-from-default-p 'ediff-fine-diff-face-C) (cond ((ediff-color-display-p) (ediff-set-face 'foreground 'ediff-fine-diff-face-C "black") @@ -928,11 +954,11 @@ 'ediff-fine-diff-face-C)) "Face for highlighting the refinement of the selected diff in buffer C.") -(add-to-list 'facemenu-unlisted-faces 'ediff-fine-diff-face-Ancestor) (defvar ediff-fine-diff-face-Ancestor - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-fine-diff-face-Ancestor) + (ediff-hide-face 'ediff-fine-diff-face-Ancestor) (or (face-differs-from-default-p 'ediff-fine-diff-face-Ancestor) (copy-face 'ediff-fine-diff-face-C 'ediff-fine-diff-face-Ancestor)))) @@ -940,11 +966,11 @@ Presently, this is not used, as difference regions are not refined in the ancestor buffer.") -(add-to-list 'facemenu-unlisted-faces 'ediff-even-diff-face-A) (defvar ediff-even-diff-face-A - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-even-diff-face-A) + (ediff-hide-face 'ediff-even-diff-face-A) (or (face-differs-from-default-p 'ediff-even-diff-face-A) (cond ((ediff-color-display-p) (ediff-set-face @@ -956,11 +982,11 @@ 'ediff-even-diff-face-A)) "Face used to highlight even-numbered differences in buffer A.") -(add-to-list 'facemenu-unlisted-faces 'ediff-even-diff-face-B) (defvar ediff-even-diff-face-B - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-even-diff-face-B) + (ediff-hide-face 'ediff-even-diff-face-B) (or (face-differs-from-default-p 'ediff-even-diff-face-B) (cond ((ediff-color-display-p) (ediff-set-face @@ -972,31 +998,31 @@ 'ediff-even-diff-face-B)) "Face used to highlight even-numbered differences in buffer B.") -(add-to-list 'facemenu-unlisted-faces 'ediff-even-diff-face-C) (defvar ediff-even-diff-face-C - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-even-diff-face-C) + (ediff-hide-face 'ediff-even-diff-face-C) (or (face-differs-from-default-p 'ediff-even-diff-face-C) (copy-face 'ediff-even-diff-face-A 'ediff-even-diff-face-C)) 'ediff-even-diff-face-C)) "Face used to highlight even-numbered differences in buffer C.") -(add-to-list 'facemenu-unlisted-faces 'ediff-even-diff-face-Ancestor) (defvar ediff-even-diff-face-Ancestor - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-even-diff-face-Ancestor) + (ediff-hide-face 'ediff-even-diff-face-Ancestor) (or (face-differs-from-default-p 'ediff-even-diff-face-Ancestor) (copy-face 'ediff-even-diff-face-C 'ediff-even-diff-face-Ancestor)) 'ediff-even-diff-face-Ancestor)) "Face highlighting even-numbered differences in the ancestor buffer.") -(add-to-list 'facemenu-unlisted-faces 'ediff-odd-diff-face-A) (defvar ediff-odd-diff-face-A - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-odd-diff-face-A) + (ediff-hide-face 'ediff-odd-diff-face-A) (or (face-differs-from-default-p 'ediff-odd-diff-face-A) (cond ((ediff-color-display-p) (ediff-set-face @@ -1008,11 +1034,11 @@ 'ediff-odd-diff-face-A)) "Face used to highlight odd-numbered differences in buffer A.") -(add-to-list 'facemenu-unlisted-faces 'ediff-odd-diff-face-B) (defvar ediff-odd-diff-face-B - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-odd-diff-face-B) + (ediff-hide-face 'ediff-odd-diff-face-B) (or (face-differs-from-default-p 'ediff-odd-diff-face-B) (cond ((ediff-color-display-p) (ediff-set-face @@ -1024,21 +1050,21 @@ 'ediff-odd-diff-face-B)) "Face used to highlight odd-numbered differences in buffer B.") -(add-to-list 'facemenu-unlisted-faces 'ediff-odd-diff-face-C) (defvar ediff-odd-diff-face-C - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-odd-diff-face-C) + (ediff-hide-face 'ediff-odd-diff-face-C) (or (face-differs-from-default-p 'ediff-odd-diff-face-C) (copy-face 'ediff-odd-diff-face-A 'ediff-odd-diff-face-C)) 'ediff-odd-diff-face-C)) "Face used to highlight odd-numbered differences in buffer C.") -(add-to-list 'facemenu-unlisted-faces 'ediff-odd-diff-face-Ancestor ) (defvar ediff-odd-diff-face-Ancestor - (if (ediff-window-display-p) + (if (ediff-has-face-support-p) (progn (make-face 'ediff-odd-diff-face-Ancestor) + (ediff-hide-face 'ediff-odd-diff-face-Ancestor) (or (face-differs-from-default-p 'ediff-odd-diff-face-Ancestor) (copy-face 'ediff-odd-diff-face-C 'ediff-odd-diff-face-Ancestor)) 'ediff-odd-diff-face-Ancestor)) @@ -1110,9 +1136,9 @@ d) (setq d (if (and env (> (length env) 0)) env - (if (memq system-type '(vax-vms axp-vms)) - "SYS$SCRATCH:" - "/tmp"))) + (cond ((memq system-type '(vax-vms axp-vms)) "SYS$SCRATCH:") + ((eq system-type 'ms-dos) "c:/") + (t "/tmp")))) ;; The following is to make sure we get something to which we can ;; add directory levels on VMS. (setq d (file-name-as-directory (directory-file-name d))) @@ -1129,6 +1155,9 @@ "Characters that must be quoted with \\ when used in a shell command line. More precisely, a regexp to match any one such character.") +;; needed to simulate frame-char-width in XEmacs. +(defvar ediff-H-glyph (if ediff-xemacs-p (make-glyph "H"))) + (ediff-defvar-local ediff-temp-file-A nil "Temporary file used for refining difference regions in buffer A.") @@ -1143,14 +1172,6 @@ (if (fboundp ediff-ange-ftp-ftp-name) (funcall ediff-ange-ftp-ftp-name file-name))) -;;(defun ediff-frame-has-menubar () -;; (and (ediff-window-display-p) -;; (if ediff-xemacs-p -;; current-menubar -;; (let ((lines (cdr (assq 'menu-bar-lines -;; (frame-parameters (selected-frame)))))) -;; (or (eq lines t) (and (numberp lines) (< 0 lines)))) -;; ))) (defsubst ediff-frame-unsplittable-p (frame) (cdr (assq 'unsplittable (frame-parameters frame)))) @@ -1246,7 +1267,7 @@ (posn-point (event-start event)))) ((ediff-key-press-event-p event) (point)) - (t (error "")))) + (t (error)))) (defun ediff-event-buffer (event) (cond ((ediff-mouse-event-p event) @@ -1255,7 +1276,7 @@ (window-buffer (posn-window (event-start event))))) ((ediff-key-press-event-p event) (current-buffer)) - (t (error "")))) + (t (error)))) (defsubst ediff-frame-iconified-p (frame) @@ -1299,10 +1320,9 @@ (defsubst ediff-spy-after-mouse () (setq ediff-mouse-pixel-position (mouse-pixel-position))) -;; This is actually not easy to find out since emacs and xemacs behave -;; differently when mouse is not in any frame. Also, this is sensitive to -;; when the user grabbed mouse. -;; Not used for now. +;; It is not easy to find out when the user grabs the mouse, since emacs and +;; xemacs behave differently when mouse is not in any frame. Also, this is +;; sensitive to when the user grabbed mouse. Not used for now. (defun ediff-user-grabbed-mouse () (if ediff-mouse-pixel-position (cond ((not (eq (car ediff-mouse-pixel-position) @@ -1321,12 +1341,26 @@ (defsubst ediff-frame-char-height (frame) (if ediff-xemacs-p - (/ (frame-pixel-height frame) (frame-height frame)) + (glyph-height ediff-H-glyph (selected-window frame)) (frame-char-height frame))) (defsubst ediff-empty-overlay-p (overl) (= (ediff-overlay-start overl) (ediff-overlay-end overl))) + +;; like overlay-buffer in Emacs. In XEmacs, returns nil if the extent is +;; dead. Otherwise, works like extent-buffer +(defun ediff-overlay-buffer (overl) + (if ediff-emacs-p + (overlay-buffer overl) + (and (extent-live-p overl) (extent-buffer overl)))) + +;; like overlay-get in Emacs. In XEmacs, returns nil if the extent is +;; dead. Otherwise, like extent-property +(defun ediff-overlay-get (overl property) + (if ediff-emacs-p + (overlay-get overl property) + (and (extent-live-p overl) (extent-property overl property)))) ;; t if diff region is empty. ;; In case of buffer C, t also if it is not a 3way @@ -1354,7 +1388,7 @@ ;; temporarily uses DIR to abbreviate file name ;; if DIR is nil, use default-directory -(defsubst ediff-abbreviate-file-name (file &optional dir) +(defun ediff-abbreviate-file-name (file &optional dir) (cond ((stringp dir) (let ((directory-abbrev-alist (list (cons dir "")))) (abbreviate-file-name file))) @@ -1447,6 +1481,7 @@ (defsubst ediff-message-if-verbose (string &rest args) (if ediff-verbose-p (apply 'message string args))) + (provide 'ediff-init)