Mercurial > emacs
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 ""))