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)