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.
This commit is contained in:
parent
9e363b8991
commit
ec6aebe833
9 changed files with 233 additions and 124 deletions
|
@ -65,10 +65,11 @@ Must produce output compatible with Unix's diff3 program."
|
|||
;; 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 @@ Must produce output compatible with Unix's diff3 program."
|
|||
((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 @@ Must produce output compatible with Unix's diff3 program."
|
|||
(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 @@ GNU diff3 doesn't have such an option."
|
|||
: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 @@ This output is not used by Ediff internally."
|
|||
: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 @@ delimiter regions"))
|
|||
;; 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 @@ delimiter regions"))
|
|||
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 @@ arguments to `skip-chars-forward'."
|
|||
"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 @@ affects only files whose names match the expression."
|
|||
(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 ""))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue