Mercurial > hg > xemacs-beta
diff lisp/ediff/ediff-init.el @ 70:131b0175ea99 r20-0b30
Import from CVS: tag r20-0b30
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:02:59 +0200 |
parents | 441bb1e64a06 |
children | c7528f8e288d |
line wrap: on
line diff
--- a/lisp/ediff/ediff-init.el Mon Aug 13 09:00:04 2007 +0200 +++ b/lisp/ediff/ediff-init.el Mon Aug 13 09:02:59 2007 +0200 @@ -1,6 +1,6 @@ ;;; ediff-init.el --- Macros, variables, and defsubsts used by Ediff -;; Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. +;; Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. ;; Author: Michael Kifer <kifer@cs.sunysb.edu> @@ -32,10 +32,6 @@ (defvar ediff-mouse-pixel-threshold) (defvar ediff-whitespace) (defvar ediff-multiframe) - -(and noninteractive - (eval-when-compile - (load "ange-ftp" 'noerror))) ;; end pacifier ;; Is it XEmacs? @@ -66,7 +62,7 @@ (ediff-force-faces) (ediff-emacs-p (memq (ediff-device-type) '(pc))) (ediff-xemacs-p (memq (ediff-device-type) '(tty pc))))) - + ;; Defines SYMBOL as an advertised local variable. ;; Performs a defvar, then executes `make-variable-buffer-local' on @@ -94,7 +90,7 @@ (ediff-defvar-local ediff-buffer-C nil "") ;; Ancestor buffer (ediff-defvar-local ediff-ancestor-buffer nil "") -;; The Ediff control buffer +;; The control buffer of ediff. (ediff-defvar-local ediff-control-buffer nil "") ;;; Macros @@ -286,15 +282,6 @@ ediff-merge-directory-revisions-with-ancestor ;; add more here ))) -(defsubst ediff-merge-metajob (&optional metajob) - (memq (or metajob ediff-metajob-name) - '(ediff-merge-directories - ediff-merge-directories-with-ancestor - ediff-merge-directory-revisions - ediff-merge-directory-revisions-with-ancestor - ediff-merge-filegroups-with-ancestor - ;; add more here - ))) (defsubst ediff-metajob3 (&optional metajob) (memq (or metajob ediff-metajob-name) @@ -306,18 +293,13 @@ (memq (or metajob ediff-metajob-name) '(ediff-directories3 ediff-filegroups3))) -;; with no argument, checks if we are in ediff-control-buffer -;; with argument, checks if we are in ediff-meta-buffer -(defun ediff-in-control-buffer-p (&optional meta-buf-p) - (and (boundp 'ediff-control-buffer) - (eq (if meta-buf-p ediff-meta-buffer ediff-control-buffer) - (current-buffer)))) - -(defsubst ediff-barf-if-not-control-buffer (&optional meta-buf-p) - (or (ediff-in-control-buffer-p meta-buf-p) +(defsubst ediff-barf-if-not-control-buffer (&optional meta-buf) + (or (eq (if meta-buf ediff-meta-buffer ediff-control-buffer) + (current-buffer)) (error "%S: This command runs in Ediff Control Buffer only!" this-command))) + ;; Hook variables (defvar ediff-before-setup-windows-hook nil @@ -363,10 +345,125 @@ "*Hooks to run on exiting Ediff but before killing the control buffer. This is a place to do various cleanups, such as deleting the variant buffers. Ediff provides a function, `ediff-janitor', as one such possible hook.") -(defvar ediff-quit-merge-hook 'ediff-maybe-save-and-delete-merge - "*Hooks to run before quitting a merge job. -The most common use is to save and delete the merge buffer.") + + +;; Help messages + +(defconst ediff-long-help-message-head + " Moving around | Toggling features | Manipulations +=====================|===========================|=============================" + "The head of the full help message.") +(defconst ediff-long-help-message-tail + "=====================|===========================|============================= + R -show registry | | M -show session group + D -diff output | E -browse Ediff manual| G -send bug report + i -status info | ? -help off | z/q -suspend/quit +------------------------------------------------------------------------------- +X,Y (x,y) on the left are meta-symbols for the keys A,B,C (a,b,c). +X,Y on the right are meta-symbols for buffers A,B,C. +A,B,C on the right denote the working buffers A,B,C, respectively." + "The tail of the full-help message.") +(defconst ediff-long-help-message-compare3 + " +p,DEL -previous diff | | -vert/horiz split | xy -copy buf X's region to Y +n,SPC -next diff | h -hiliting | rx -restore buf X's old diff + j -jump to diff | @ -auto-refinement | * -refine current region + gx -goto X's point| | ! -update diff regions + 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 | ~ -rotate buffers +" + "Help message usually used for 3-way comparison. +Normally, not a user option. See `ediff-help-message' for details.") + +(defconst ediff-long-help-message-compare2 + " +p,DEL -previous diff | | -vert/horiz split |a/b -copy A/B's region to B/A +n,SPC -next diff | h -hiliting | rx -restore buf X's old diff + j -jump to diff | @ -auto-refinement | * -refine current region + gx -goto X's point| | ! -update diff regions + 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 + ~ -swap variants | m -wide display | +" + "Help message usually used for 2-way comparison. +Normally, not a user option. See `ediff-help-message' for details.") + +(defconst ediff-long-help-message-narrow2 + " +p,DEL -previous diff | | -vert/horiz split |a/b -copy A/B's region to B/A +n,SPC -next diff | h -hiliting | rx -restore buf X's old diff + j -jump to diff | @ -auto-refinement | * -refine current region + gx -goto X's point| % -narrow/widen buffs | ! -update diff regions + 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 + ~ -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.") + +(defconst ediff-long-help-message-word-mode + " +p,DEL -previous diff | | -vert/horiz split | xy -copy buf X's region to Y +n,SPC -next diff | h -hiliting | rx -restore buf X's old diff + j -jump to diff | | + gx -goto X's point| % -narrow/widen buffs | ! -recompute diffs + 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 + ~ -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.") + +(defconst ediff-long-help-message-merge + " +p,DEL -previous diff | | -vert/horiz split | x -copy buf X's region to C +n,SPC -next diff | h -hiliting | r -restore buf C's old diff + j -jump to diff | @ -auto-refinement | * -refine current region + gx -goto X's point| ## -ignore whitespace | ! -update diff regions + 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 + ~ -swap variants | s -shrink window C | / -show ancestor buff + | $ -show clashes only | & -merge w/new default +" + "Help message during merging. +Normally, not a user option. See `ediff-help-message' for details.") + +;; The actual long help message. +(ediff-defvar-local ediff-long-help-message "" + "Normally, not a user option. See `ediff-help-message' for details.") + +(defconst ediff-brief-message-string + " ? - help " + "Contents of the brief help message.") +;; The actual brief help message +(ediff-defvar-local ediff-brief-help-message "" + "Normally, not a user option. See `ediff-help-message' for details.") + +(ediff-defvar-local ediff-brief-help-message-function nil + "The brief help message that the user can customize. +If the user sets this to a parameter-less function, Ediff will use it to +produce the brief help message. This function must return a string.") +(ediff-defvar-local ediff-long-help-message-function nil + "The long help message that the user can customize. +See `ediff-brief-help-message-function' for more.") + +(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 "" + "The actual help message. +Normally, the user shouldn't touch this. However, if you want Ediff to +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 @@ -376,12 +473,6 @@ (defconst ediff-BAD-DIFF-NUMBER ;; %S stands for this-command, %d - diff number, %d - max diff "%S: Bad diff region number, %d. Valid numbers are 1 to %d") -(defconst ediff-BAD-INFO (format " -*** The Info file for Ediff, a part of the standard distribution -*** of %sEmacs, does not seem to be properly installed. -*** -*** Please contact your system administrator. " - (if ediff-xemacs-p "X" ""))) ;; Selective browsing @@ -422,6 +513,12 @@ (ediff-defvar-local ediff-hide-regexp-connective 'and "") +(defvar ediff-ange-ftp-ftp-name (if ediff-xemacs-p + 'ange-ftp-ftp-path + 'ange-ftp-ftp-name) + "Function ange-ftp uses to find out if file is remote.") + + ;; Copying difference regions between buffers. (ediff-defvar-local ediff-killed-diffs-alist nil "A list of killed diffs. @@ -516,8 +613,8 @@ (ediff-defvar-local ediff-buffer-values-orig-Ancestor nil "") ;; 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 +(defconst ediff-protected-variables '(buffer-read-only +;;; synchronize-minibuffers mode-line-format)) ;; Vector of differences between the variants. Each difference is @@ -597,6 +694,7 @@ (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))) @@ -629,8 +727,8 @@ ;;;; warn if it is a wrong version of emacs -;;(if (or (ediff-check-version '< 19 35 'emacs) -;; (ediff-check-version '< 19 15 'xemacs)) +;;(if (or (ediff-check-version '< 19 29 'emacs) +;; (ediff-check-version '< 19 12 'xemacs)) ;; (progn ;; (with-output-to-temp-buffer ediff-msg-buffer ;; (switch-to-buffer ediff-msg-buffer) @@ -639,9 +737,9 @@ ;; ;;This version of Ediff requires ;; -;;\t Emacs 19.35 and higher +;;\t Emacs 19.29 and higher ;;\t OR -;;\t XEmacs 19.15 and higher +;;\t XEmacs 19.12 and higher ;; ;;It is unlikely to work under Emacs version %s ;;that you are using... " emacs-version)) @@ -761,15 +859,6 @@ (copy-face 'secondary-selection face)))) )) -(defun ediff-set-face-pixmap (face pixmap) - "Set face pixmap on a monochrome display." - (if (and (ediff-window-display-p) (not (ediff-color-display-p))) - (condition-case nil - (set-face-background-pixmap face pixmap) - (error - (message "Pixmap not found for %S: %s" (face-name face) pixmap) - (sit-for 1))))) - (defun ediff-hide-face (face) (if (and (ediff-has-face-support-p) ediff-emacs-p) (add-to-list 'facemenu-unlisted-faces face))) @@ -839,17 +928,9 @@ (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)) - 'ediff-current-diff-face-Ancestor)) + 'ediff-current-diff-face-C 'ediff-current-diff-face-Ancestor)))) "Face for highlighting the selected difference in the ancestor buffer.") -(defvar ediff-fine-diff-pixmap "gray3" - "Pixmap to use for highlighting fine differences.") -(defvar ediff-odd-diff-pixmap "gray1" - "Pixmap to use for highlighting odd differences.") -(defvar ediff-even-diff-pixmap "Stipple" - "Pixmap to use for highlighting even differences.") - (defvar ediff-fine-diff-face-A (if (ediff-has-face-support-p) (progn @@ -861,11 +942,7 @@ "Navy") (ediff-set-face 'background 'ediff-fine-diff-face-A "sky blue")) - (t - (set-face-underline-p 'ediff-fine-diff-face-A t) - (ediff-set-face-pixmap 'ediff-fine-diff-face-A - ediff-fine-diff-pixmap) - ))) + (t (set-face-underline-p 'ediff-fine-diff-face-A t)))) 'ediff-fine-diff-face-A)) "Face for highlighting the refinement of the selected diff in buffer A.") @@ -878,11 +955,7 @@ (cond ((ediff-color-display-p) (ediff-set-face 'foreground 'ediff-fine-diff-face-B "Black") (ediff-set-face 'background 'ediff-fine-diff-face-B "cyan")) - (t - (set-face-underline-p 'ediff-fine-diff-face-B t) - (ediff-set-face-pixmap 'ediff-fine-diff-face-B - ediff-fine-diff-pixmap) - ))) + (t (set-face-underline-p 'ediff-fine-diff-face-B t)))) 'ediff-fine-diff-face-B)) "Face for highlighting the refinement of the selected diff in buffer B.") @@ -896,11 +969,7 @@ (ediff-set-face 'foreground 'ediff-fine-diff-face-C "black") (ediff-set-face 'background 'ediff-fine-diff-face-C "Turquoise")) - (t - (set-face-underline-p 'ediff-fine-diff-face-C t) - (ediff-set-face-pixmap 'ediff-fine-diff-face-C - ediff-fine-diff-pixmap) - ))) + (t (set-face-underline-p 'ediff-fine-diff-face-C t)))) 'ediff-fine-diff-face-C)) "Face for highlighting the refinement of the selected diff in buffer C.") @@ -910,12 +979,8 @@ (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) - (progn - (copy-face - 'ediff-fine-diff-face-C 'ediff-fine-diff-face-Ancestor) - (ediff-set-face-pixmap 'ediff-fine-diff-face-Ancestor - ediff-fine-diff-pixmap)) - ))) + (copy-face + 'ediff-fine-diff-face-C 'ediff-fine-diff-face-Ancestor)))) "Face highlighting refinements of the selected diff in ancestor buffer. Presently, this is not used, as difference regions are not refined in the ancestor buffer.") @@ -932,10 +997,7 @@ (ediff-set-face 'background 'ediff-even-diff-face-A "light grey")) (t - (copy-face 'italic 'ediff-even-diff-face-A) - (ediff-set-face-pixmap 'ediff-even-diff-face-A - ediff-even-diff-pixmap) - ))) + (copy-face 'italic 'ediff-even-diff-face-A)))) 'ediff-even-diff-face-A)) "Face used to highlight even-numbered differences in buffer A.") @@ -951,10 +1013,7 @@ (ediff-set-face 'background 'ediff-even-diff-face-B "Gray")) (t - (copy-face 'italic 'ediff-even-diff-face-B) - (ediff-set-face-pixmap 'ediff-even-diff-face-B - ediff-even-diff-pixmap) - ))) + (copy-face 'italic 'ediff-even-diff-face-B)))) 'ediff-even-diff-face-B)) "Face used to highlight even-numbered differences in buffer B.") @@ -964,10 +1023,7 @@ (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) - (progn - (copy-face 'ediff-even-diff-face-A 'ediff-even-diff-face-C) - (ediff-set-face-pixmap 'ediff-even-diff-face-C - ediff-even-diff-pixmap))) + (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.") @@ -977,11 +1033,7 @@ (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) - (progn - (copy-face - 'ediff-even-diff-face-C 'ediff-even-diff-face-Ancestor) - (ediff-set-face-pixmap 'ediff-even-diff-face-Ancestor - ediff-even-diff-pixmap))) + (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.") @@ -997,10 +1049,7 @@ (ediff-set-face 'background 'ediff-odd-diff-face-A "Gray")) (t - (copy-face 'italic 'ediff-odd-diff-face-A) - (ediff-set-face-pixmap 'ediff-odd-diff-face-A - ediff-odd-diff-pixmap) - ))) + (copy-face 'italic 'ediff-odd-diff-face-A)))) 'ediff-odd-diff-face-A)) "Face used to highlight odd-numbered differences in buffer A.") @@ -1016,10 +1065,7 @@ (ediff-set-face 'background 'ediff-odd-diff-face-B "light grey")) (t - (copy-face 'italic 'ediff-odd-diff-face-B) - (ediff-set-face-pixmap 'ediff-odd-diff-face-B - ediff-odd-diff-pixmap) - ))) + (copy-face 'italic 'ediff-odd-diff-face-B)))) 'ediff-odd-diff-face-B)) "Face used to highlight odd-numbered differences in buffer B.") @@ -1029,10 +1075,7 @@ (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) - (progn - (copy-face 'ediff-odd-diff-face-A 'ediff-odd-diff-face-C) - (ediff-set-face-pixmap 'ediff-odd-diff-face-C - ediff-odd-diff-pixmap))) + (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.") @@ -1042,10 +1085,7 @@ (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) - (progn - (copy-face 'ediff-odd-diff-face-C 'ediff-odd-diff-face-Ancestor) - (ediff-set-face-pixmap 'ediff-odd-diff-face-Ancestor - ediff-odd-diff-pixmap))) + (copy-face 'ediff-odd-diff-face-C 'ediff-odd-diff-face-Ancestor)) 'ediff-odd-diff-face-Ancestor)) "Face used to highlight even-numbered differences in the ancestor buffer.") @@ -1103,15 +1143,6 @@ ;; if nil, this silences some messages (defconst ediff-verbose-p t) - -(ediff-defvar-local ediff-autostore-merges 'group-jobs-only - "*Save the results of merge jobs automatically. -Nil means don't save automatically. t means always save. Anything but nil or t -means save automatically only if the merge job is part of a group of jobs, such -as `ediff-merge-directory' or `ediff-merge-directory-revisions'.") - -;; file where the result of the merge is to be saved. used internally -(ediff-defvar-local ediff-merge-store-file nil "") (defvar ediff-no-emacs-help-in-control-buffer nil "*Non-nil means C-h should not invoke Emacs help in control buffer. @@ -1156,13 +1187,9 @@ ;;; In-line functions -(or (fboundp 'ediff-file-remote-p) ; user supplied his own function: use it - (defun ediff-file-remote-p (file-name) - (car (cond ((featurep 'efs-auto) (efs-ftp-path file-name)) - ((fboundp 'file-remote-p) (file-remote-p file-name)) - (t (require 'ange-ftp) - ;; Can happen only in Emacs, since XEmacs has file-remote-p - (ange-ftp-ftp-name file-name)))))) +(defsubst ediff-file-remote-p (file-name) + (if (fboundp ediff-ange-ftp-ftp-name) + (funcall ediff-ange-ftp-ftp-name file-name))) (defsubst ediff-frame-unsplittable-p (frame) @@ -1179,103 +1206,6 @@ "Kill buffer BUF if it exists." (if (ediff-buffer-live-p buf) (kill-buffer (get-buffer buf)))) - -(defsubst ediff-background-face (buf-type dif-num) - ;; The value of dif-num is always 1- the one that user sees. - ;; This is why even face is used when dif-num is odd. - (intern (format (if (ediff-odd-p dif-num) - "ediff-even-diff-face-%S" - "ediff-odd-diff-face-%S") - buf-type))) - - -;; activate faces on diff regions in buffer -(defun ediff-paint-background-regions-in-one-buffer (buf-type unhighlight) - (let ((diff-vector - (eval (intern (format "ediff-difference-vector-%S" buf-type)))) - overl diff-num) - (mapcar (function - (lambda (rec) - (setq overl (ediff-get-diff-overlay-from-diff-record rec) - diff-num (ediff-overlay-get overl 'ediff-diff-num)) - (if (ediff-overlay-buffer overl) - ;; only if overlay is alive - (ediff-set-overlay-face - overl - (if (not unhighlight) - (ediff-background-face buf-type diff-num)))) - )) - diff-vector))) - - -;; activate faces on diff regions in all buffers -(defun ediff-paint-background-regions (&optional unhighlight) - (ediff-paint-background-regions-in-one-buffer - 'A unhighlight) - (ediff-paint-background-regions-in-one-buffer - 'B unhighlight) - (ediff-paint-background-regions-in-one-buffer - 'C unhighlight) - (ediff-paint-background-regions-in-one-buffer - 'Ancestor unhighlight)) - -(defun ediff-highlight-diff-in-one-buffer (n buf-type) - (if (ediff-buffer-live-p (ediff-get-buffer buf-type)) - (let* ((buff (ediff-get-buffer buf-type)) - (last (ediff-eval-in-buffer buff (point-max))) - (begin (ediff-get-diff-posn buf-type 'beg n)) - (end (ediff-get-diff-posn buf-type 'end n)) - (xtra (if (equal begin end) 1 0)) - (end-hilit (min last (+ end xtra))) - (current-diff-overlay - (symbol-value - (intern (format "ediff-current-diff-overlay-%S" buf-type))))) - - (if ediff-xemacs-p - (ediff-move-overlay current-diff-overlay begin end-hilit) - (ediff-move-overlay current-diff-overlay begin end-hilit buff)) - (ediff-overlay-put current-diff-overlay 'priority - (ediff-highest-priority begin end-hilit buff)) - (ediff-overlay-put current-diff-overlay 'ediff-diff-num n) - - ;; unhighlight the background overlay for diff n so it won't - ;; interfere with the current diff overlay - (ediff-set-overlay-face (ediff-get-diff-overlay n buf-type) nil) - ))) - - -(defun ediff-unhighlight-diff-in-one-buffer (buf-type) - (if (ediff-buffer-live-p (ediff-get-buffer buf-type)) - (let ((current-diff-overlay - (symbol-value - (intern (format "ediff-current-diff-overlay-%S" buf-type)))) - (overlay - (ediff-get-diff-overlay ediff-current-difference buf-type)) - ) - - (ediff-move-overlay current-diff-overlay 1 1) - - ;; rehighlight the overlay in the background of the - ;; current difference region - (ediff-set-overlay-face - overlay - (if (and (ediff-has-face-support-p) - ediff-use-faces ediff-highlight-all-diffs) - (ediff-background-face buf-type ediff-current-difference))) - ))) - -(defun ediff-unhighlight-diffs-totally-in-one-buffer (buf-type) - (ediff-unselect-and-select-difference -1) - (if (and (ediff-has-face-support-p) ediff-use-faces) - (let* ((inhibit-quit t) - (current-diff-overlay-var - (intern (format "ediff-current-diff-overlay-%S" buf-type))) - (current-diff-overlay (symbol-value current-diff-overlay-var))) - (ediff-paint-background-regions 'unhighlight) - (if (ediff-overlayp current-diff-overlay) - (ediff-delete-overlay current-diff-overlay)) - (set current-diff-overlay-var nil) - ))) (defsubst ediff-highlight-diff (n) @@ -1303,6 +1233,14 @@ (ediff-unhighlight-diffs-totally-in-one-buffer 'Ancestor) ) +(defsubst ediff-background-face (buf-type dif-num) + ;; The value of dif-num is always 1- the one that user sees. + ;; This is why even face is used when dif-num is odd. + (intern (format (if (ediff-odd-p dif-num) + "ediff-even-diff-face-%S" + "ediff-odd-diff-face-%S") + buf-type))) + ;; arg is a record for a given diff in a difference vector ;; this record is itself a vector @@ -1425,19 +1363,6 @@ (glyph-height ediff-H-glyph (selected-window frame)) (frame-char-height frame))) -;; Some overlay functions - -(defsubst ediff-overlay-start (overl) - (if (ediff-overlayp overl) - (if ediff-emacs-p - (overlay-start overl) - (extent-start-position overl)))) - -(defsubst ediff-overlay-end (overl) - (if (ediff-overlayp overl) - (if ediff-emacs-p - (overlay-end overl) - (extent-end-position overl)))) (defsubst ediff-empty-overlay-p (overl) (= (ediff-overlay-start overl) (ediff-overlay-end overl))) @@ -1455,32 +1380,6 @@ (if ediff-emacs-p (overlay-get overl property) (and (extent-live-p overl) (extent-property overl property)))) - - -;; These two functions are here because XEmacs refuses to -;; handle overlays whose buffers were deleted. -(defun ediff-move-overlay (overlay beg end &optional buffer) - "Calls `move-overlay' in Emacs and `set-extent-endpoints' in Lemacs. -Checks if overlay's buffer exists before actually doing the move." - (let ((buf (and overlay (ediff-overlay-buffer overlay)))) - (if (ediff-buffer-live-p buf) - (if ediff-xemacs-p - (set-extent-endpoints overlay beg end) - (move-overlay overlay beg end buffer)) - ;; buffer's dead - (if overlay - (ediff-delete-overlay overlay))))) - -(defun ediff-overlay-put (overlay prop value) - "Calls `overlay-put' or `set-extent-property' depending on Emacs version. -Checks if overlay's buffer exists." - (if (ediff-buffer-live-p (ediff-overlay-buffer overlay)) - (if ediff-xemacs-p - (set-extent-property overlay prop value) - (overlay-put overlay prop value)) - (ediff-delete-overlay overlay))) - -;; Some diff region tests ;; t if diff region is empty. ;; In case of buffer C, t also if it is not a 3way @@ -1603,27 +1502,18 @@ (apply 'message string args))) (defun ediff-file-attributes (filename attr-number) - (if (ediff-file-remote-p filename) - -1 - (nth attr-number (file-attributes filename)))) - + (let ((handler (find-file-name-handler filename 'find-file-noselect))) + (if (and handler (string-match "ange-ftp" (format "%S" handler))) + -1 + (nth attr-number (file-attributes filename))))) (defsubst ediff-file-size (filename) (ediff-file-attributes filename 7)) (defsubst ediff-file-modtime (filename) (ediff-file-attributes filename 5)) -(defun ediff-convert-standard-filename (fname) - (if (fboundp 'convert-standard-filename) - (convert-standard-filename fname) - fname)) -;;; 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)) -;;; End: (provide 'ediff-init)