diff lisp/ediff-diff.el @ 71382:4033086b16b6

2006-06-18 Michael Kifer <kifer@cs.stonybrook.edu> * viper-cmd.el (viper-special-read-and-insert-char): use read-key-sequence. (viper-after-change-undo-hook): enhancements. (viper-after-change-undo-hook): new hook. (viper-undo): use viper-after-change-undo-hook. (viper-add-newline-at-eob-if-necessary): widen before making changes. (viper-next-line-at-bol): If point is on a widget or a button, simulate clicking on that widget/button. * viper.el (viper-mode): allow for a separate cursor color in Emacs state. * ediff-diff (ediff-test-patch-utility): catch errors. (ediff-actual-diff-options, ediff-actual-diff3-options): new variables. (ediff-set-actual-diff-options): new function. (ediff-reset-diff-options, ediff-toggle-ignore-case): use ediff-set-actual-diff-options. (ediff-extract-diffs): catch errors. (ediff-whitespace): add nonbreakable space. (ediff-same-file-contents): catch errors. * ediff-mult.el (ediff-collect-custom-diffs): save coding-system-for-read. * ediff-vers.el (ediff-keep-tmp-versions): new var. (ediff-vc-internal, ediff-vc-merge-internal): use ediff-delete-version-file. (ediff-delete-version-file): new function. * ediff-wind.el (ediff-control-frame-parameters): set frame fringes. * ediff.el (ediff-directories, ediff-directory-revisions, ediff-merge-directories, ediff-merge-directories-with-ancestor, ediff-directories-internal, ediff-merge-directory-revisions, ediff-merge-directory-revisions-with-ancestor, ediff-directories3): use read-directory-name.
author Michael Kifer <kifer@cs.stonybrook.edu>
date Sun, 18 Jun 2006 17:08:24 +0000
parents ffd47c04282f
children db25befb2938 4094c5298ae1
line wrap: on
line diff
--- a/lisp/ediff-diff.el	Sun Jun 18 09:14:51 2006 +0000
+++ b/lisp/ediff-diff.el	Sun Jun 18 17:08:24 2006 +0000
@@ -65,10 +65,11 @@
 ;; The following functions needed for setting diff/diff3 options
 ;; test if diff supports the --binary option
 (defsubst ediff-test-utility (diff-util option &optional files)
-  (condition-case ()
+  (condition-case nil
       (eq 0 (apply 'call-process
 		   (append (list diff-util nil nil nil option) files)))
-    (file-error nil)))
+    (error (format "Cannot execute program %S." diff-util)))
+  )
 
 (defun ediff-diff-mandatory-option (diff-util)
   (let ((file (if (boundp 'null-device) null-device "/dev/null")))
@@ -77,13 +78,17 @@
 	   ((and (string= diff-util ediff-diff-program)
 		 (ediff-test-utility
 		  ediff-diff-program "--binary" (list file file)))
-	    "--binary")
+	    "--binary ")
 	   ((and (string= diff-util ediff-diff3-program)
 		 (ediff-test-utility
 		  ediff-diff3-program "--binary" (list file file file)))
-	    "--binary")
+	    "--binary ")
 	   (t ""))))
 
+
+;; must be before ediff-reset-diff-options to avoid compiler errors
+(fset 'ediff-set-actual-diff-options '(lambda () nil))
+
 ;; make sure that mandatory options are added even if the user changes
 ;; ediff-diff-options or ediff-diff3-options in the customization widget
 (defun ediff-reset-diff-options (symb val)
@@ -91,12 +96,9 @@
 	  (if (eq symb 'ediff-diff-options)
 	      ediff-diff-program
 	    ediff-diff3-program))
-	 (mandatory-option (ediff-diff-mandatory-option diff-program))
-	 (spacer (if (string-equal mandatory-option "") "" " ")))
-    (set symb
-	 (if (string-match mandatory-option val)
-	     val
-	   (concat mandatory-option spacer val)))
+	 (mandatory-option (ediff-diff-mandatory-option diff-program)))
+    (set symb (concat mandatory-option val))
+    (ediff-set-actual-diff-options)
     ))
 
 
@@ -155,7 +157,7 @@
   :group 'ediff-diff)
 
 ;; the actual options used in comparison
-(ediff-defvar-local ediff-actual-diff-options "" "")
+(ediff-defvar-local ediff-actual-diff-options ediff-diff-options "")
 
 (defcustom ediff-custom-diff-program ediff-diff-program
   "*Program to use for generating custom diff output for saving it in a file.
@@ -178,7 +180,7 @@
   :group 'ediff-diff)
 
 ;; the actual options used in comparison
-(ediff-defvar-local ediff-actual-diff3-options "" "")
+(ediff-defvar-local ediff-actual-diff3-options ediff-diff3-options "")
 
 (defcustom ediff-diff3-ok-lines-regexp
   "^\\([1-3]:\\|====\\|  \\|.*Warning *:\\|.*No newline\\|.*missing newline\\|^\C-m$\\)"
@@ -1272,7 +1274,9 @@
 		;; Similarly for Windows-*
 		;; In DOS, must synchronize because DOS doesn't have
 		;; asynchronous processes.
-		(apply 'call-process program nil buffer nil args)
+		(condition-case nil
+		    (apply 'call-process program nil buffer nil args)
+		  (error (format "Cannot execute program %S." program)))
 	      ;; On other systems, do it asynchronously.
 	      (setq proc (get-buffer-process buffer))
 	      (if proc (kill-process proc))
@@ -1328,7 +1332,8 @@
 Used for splitting difference regions into individual words.")
 (make-variable-buffer-local 'ediff-forward-word-function)
 
-(defvar ediff-whitespace " \n\t\f"
+;; \240 is unicode symbol for nonbreakable whitespace
+(defvar ediff-whitespace " \n\t\f\r\240"
   "*Characters constituting white space.
 These characters are ignored when differing regions are split into words.")
 (make-variable-buffer-local 'ediff-whitespace)
@@ -1442,11 +1447,13 @@
   "Return t if files F1 and F2 have identical contents."
   (if (and (not (file-directory-p f1))
            (not (file-directory-p f2)))
-      (let ((res
-	     (apply 'call-process ediff-cmp-program nil nil nil
-		    (append ediff-cmp-options (list f1 f2)))))
-	(and (numberp res) (eq res 0))))
-  )
+      (condition-case nil
+	  (let ((res
+		 (apply 'call-process ediff-cmp-program nil nil nil
+			(append ediff-cmp-options (list f1 f2)))))
+	    (and (numberp res) (eq res 0)))
+	(error (format "Cannot execute program %S." ediff-cmp-program)))
+    ))
 
 
 (defun ediff-same-contents (d1 d2 &optional filter-re)
@@ -1521,21 +1528,30 @@
       (setq file-list-list (cdr file-list-list)))
     (reverse result)))
 
+
+(defun ediff-set-actual-diff-options ()
+  (if ediff-ignore-case
+      (setq ediff-actual-diff-options 
+	    (concat ediff-diff-options " " ediff-ignore-case-option)
+	    ediff-actual-diff3-options
+	    (concat ediff-diff3-options " " ediff-ignore-case-option3))
+    (setq ediff-actual-diff-options ediff-diff-options
+	  ediff-actual-diff3-options ediff-diff3-options)
+    )
+  (setq-default ediff-actual-diff-options ediff-actual-diff-options
+		ediff-actual-diff3-options ediff-actual-diff3-options)
+  )
+
+
 ;; Ignore case handling - some ideas from drew.adams@@oracle.com
 (defun ediff-toggle-ignore-case ()
   (interactive)
   (ediff-barf-if-not-control-buffer)
   (setq ediff-ignore-case (not ediff-ignore-case))
-  (cond (ediff-ignore-case
-	 (setq ediff-actual-diff-options
-	       (concat ediff-diff-options " " ediff-ignore-case-option)
-	       ediff-actual-diff3-options
-	       (concat ediff-diff3-options " " ediff-ignore-case-option3))
-	 (message "Ignoring regions that differ only in case"))
-	(t
-	 (setq ediff-actual-diff-options ediff-diff-options
-	       ediff-actual-diff3-options ediff-diff3-options)
-	 (message "Ignoring case differences turned OFF")))
+  (ediff-set-actual-diff-options)
+  (if ediff-ignore-case
+      (message "Ignoring regions that differ only in case")
+    (message "Ignoring case differences turned OFF"))
   (cond (ediff-merge-job
 	 (message "Ignoring letter case is too dangerous in merge jobs"))
 	((and ediff-diff3-job (string= ediff-ignore-case-option3 ""))