summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog50
-rw-r--r--lisp/ediff-diff.el112
-rw-r--r--lisp/ediff-help.el21
-rw-r--r--lisp/ediff-hook.el1
-rw-r--r--lisp/ediff-init.el1
-rw-r--r--lisp/ediff-merg.el4
-rw-r--r--lisp/ediff-mult.el5
-rw-r--r--lisp/ediff-ptch.el3
-rw-r--r--lisp/ediff-util.el18
-rw-r--r--lisp/ediff-vers.el1
-rw-r--r--lisp/ediff-wind.el4
-rw-r--r--lisp/ediff.el11
-rw-r--r--lisp/emulation/viper-cmd.el40
-rw-r--r--lisp/emulation/viper-init.el7
-rw-r--r--lisp/emulation/viper-util.el31
-rw-r--r--lisp/emulation/viper.el2
-rw-r--r--man/ediff.texi33
-rw-r--r--man/viper.texi4
18 files changed, 287 insertions, 61 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 42d6ab400c1..166cd382bb0 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,53 @@
+2006-02-19 Michael Kifer <kifer@cs.stonybrook.edu>
+
+ * viper-cmd.el (viper-insert-state-post-command-sentinel,
+ viper-change-state-to-vi, viper-change-state-to-emacs):
+ made aware of cursor coloring in the emacs state.
+ (viper-special-read-and-insert-char): use read-char-exclusive.
+ (viper-minibuffer-trim-tail): workaround for fields in minibuffer.
+
+ * viper-init.el (viper-emacs-state-cursor-color): new variable.
+
+ * viper-util.el (viper-save-cursor-color,
+ viper-get-saved-cursor-color-in-replace-mode,
+ viper-get-saved-cursor-color-in-insert-mode,
+ viper-restore-cursor-color): make aware of the cursor color in emacs
+ state.
+ (viper-get-saved-cursor-color-in-emacs-mode): new function.
+
+ * ediff-diff.el (ediff-ignore-case, ediff-ignore-case-option,
+ ediff-ignore-case-option3, ediff-actual-diff-options,
+ ediff-actual-diff3-options): new variables to control case sensitivity.
+ (ediff-make-diff2-buffer, ediff-setup-fine-diff-regions,
+ ediff-setup-diff-regions3): made aware of case-sensitivity.
+ (ediff-toggle-ignore-case): new function.
+ (ediff-extract-diffs, ediff-extract-diffs3): preserve point in buffers.
+
+ * ediff-help.el (ediff-long-help-message-narrow2,
+ ediff-long-help-message-compare2, ediff-long-help-message-compare3,
+ ediff-long-help-message-word-mode): add ignore-case command.
+ (ediff-help-for-quick-help): add ignore-case command.
+
+ * ediff-merg.el: move provide to the end.
+
+ * ediff-ptch.el: move provide to the end.
+
+ * ediff-wind.el: move provide to the end.
+
+ * ediff-mult.el: move provide to the end.
+ (ediff-set-meta-overlay): enable follow-link.
+
+ * ediff.el: move provide to the end.
+ Break recursive load cycle in eval-when-compile.
+ (ediff-patch-buffer): better heuristics.
+
+ * ediff-util.el: move provide to the end.
+ Break recursive load cycle in eval-when-compile.
+ (ediff-setup-keymap): add binding for #c. Replaced some defsubsts with
+ defuns.
+ (ediff-submit-report): pass the values of ediff-diff3-program,
+ ediff-diff3-options.
+
2006-02-19 Juanma Barranquero <lekktu@gmail.com>
* help-fns.el (help-do-arg-highlight): Recognize also ARG- followed by
diff --git a/lisp/ediff-diff.el b/lisp/ediff-diff.el
index 67da6eae25d..62a6386584e 100644
--- a/lisp/ediff-diff.el
+++ b/lisp/ediff-diff.el
@@ -26,7 +26,6 @@
;;; Code:
-(provide 'ediff-diff)
;; compiler pacifier
(defvar ediff-default-variant)
@@ -129,13 +128,33 @@ are `-I REGEXP', to ignore changes whose lines match the REGEXP."
(defcustom ediff-diff-options ""
"*Options to pass to `ediff-diff-program'.
-If Unix diff is used as `ediff-diff-program', then the most useful options are
+If Unix diff is used as `ediff-diff-program', then a useful option is
`-w', to ignore space, and `-i', to ignore case of letters.
-At present, the option `-c' is not allowed."
+Options `-c' and `-i' are not allowed. Case sensitivity can be toggled
+interactively using [ediff-toggle-ignore-case]"
:set 'ediff-reset-diff-options
:type 'string
:group 'ediff-diff)
+(ediff-defvar-local ediff-ignore-case nil
+ "*If t, skip over difference regions that differ only in letter case.
+This variable can be set either in .emacs or toggled interactively.
+Use `setq-default' if setting it in .emacs")
+
+(defcustom ediff-ignore-case-option "-i"
+ "*Option that causes the diff program to ignore case of letters."
+ :type 'string
+ :group 'ediff-diff)
+
+(defcustom ediff-ignore-case-option3 ""
+ "*Option that causes the diff3 program to ignore case of letters.
+GNU diff3 doesn't have such an option."
+ :type 'string
+ :group 'ediff-diff)
+
+;; the actual options used in comparison
+(ediff-defvar-local ediff-actual-diff-options "" "")
+
(defcustom ediff-custom-diff-program ediff-diff-program
"*Program to use for generating custom diff output for saving it in a file.
This output is not used by Ediff internally."
@@ -155,6 +174,10 @@ This output is not used by Ediff internally."
:set 'ediff-reset-diff-options
:type 'string
:group 'ediff-diff)
+
+;; the actual options used in comparison
+(ediff-defvar-local ediff-actual-diff3-options "" "")
+
(defcustom ediff-diff3-ok-lines-regexp
"^\\([1-3]:\\|====\\| \\|.*Warning *:\\|.*No newline\\|.*missing newline\\|^\C-m$\\)"
"*Regexp that matches normal output lines from `ediff-diff3-program'.
@@ -182,7 +205,7 @@ Use `setq-default' if setting it in .emacs")
This variable can be set either in .emacs or toggled interactively.
Use `setq-default' if setting it in .emacs")
-(ediff-defvar-local ediff-auto-refine-limit 1400
+(ediff-defvar-local ediff-auto-refine-limit 14000
"*Auto-refine only the regions of this size \(in bytes\) or less.")
;;; General
@@ -227,9 +250,9 @@ one optional arguments, diff-number to refine.")
;; ediff-setup-diff-regions-function, which can also have the value
;; ediff-setup-diff-regions3, which takes 4 arguments.
(defun ediff-setup-diff-regions (file-A file-B file-C)
- ;; looking either for '-c' or a 'c' in a set of clustered non-long options
- (if (string-match "^-c\\| -c\\|-[^- ]+c" ediff-diff-options)
- (error "Option `-c' is not allowed in `ediff-diff-options'"))
+ ;; looking for '-c', '-i', or a 'c', 'i' among clustered non-long options
+ (if (string-match "^-[ci]\\| -[ci]\\|-[^- ]+[ci]" ediff-diff-options)
+ (error "Options `-c' and `-i' are not allowed in `ediff-diff-options'"))
;; create, if it doesn't exist
(or (ediff-buffer-live-p ediff-diff-buffer)
@@ -266,7 +289,7 @@ one optional arguments, diff-number to refine.")
(ediff-exec-process ediff-diff-program
diff-buffer
'synchronize
- ediff-diff-options file1 file2)
+ ediff-actual-diff-options file1 file2)
(message "")
(ediff-with-current-buffer diff-buffer
(buffer-size))))))
@@ -284,7 +307,9 @@ one optional arguments, diff-number to refine.")
(let (diff3-job diff-program diff-options ok-regexp diff-list)
(setq diff3-job ediff-3way-job
diff-program (if diff3-job ediff-diff3-program ediff-diff-program)
- diff-options (if diff3-job ediff-diff3-options ediff-diff-options)
+ diff-options (if diff3-job
+ ediff-actual-diff3-options
+ ediff-actual-diff-options)
ok-regexp (if diff3-job
ediff-diff3-ok-lines-regexp
ediff-diff-ok-lines-regexp))
@@ -366,11 +391,14 @@ one optional arguments, diff-number to refine.")
(B-buffer ediff-buffer-B)
(C-buffer ediff-buffer-C)
(a-prev 1) ; this is needed to set the first diff line correctly
+ (a-prev-pt nil)
(b-prev 1)
+ (b-prev-pt nil)
(c-prev 1)
+ (c-prev-pt nil)
diff-list shift-A shift-B
)
-
+
;; diff list contains word numbers, unless changed later
(setq diff-list (cons (if word-mode 'words 'points)
diff-list))
@@ -382,7 +410,7 @@ one optional arguments, diff-number to refine.")
shift-B
(ediff-overlay-start
(ediff-get-value-according-to-buffer-type 'B bounds))))
-
+
;; reset point in buffers A/B/C
(ediff-with-current-buffer A-buffer
(goto-char (if shift-A shift-A (point-min))))
@@ -466,11 +494,13 @@ one optional arguments, diff-number to refine.")
;; we must disable and then restore longlines-mode
(if (eq longlines-mode-val 1)
(longlines-mode 0))
+ (goto-char (or a-prev-pt shift-A (point-min)))
(forward-line (- a-begin a-prev))
(setq a-begin-pt (point))
(forward-line (- a-end a-begin))
(setq a-end-pt (point)
- a-prev a-end)
+ a-prev a-end
+ a-prev-pt a-end-pt)
(if (eq longlines-mode-val 1)
(longlines-mode longlines-mode-val))
))
@@ -479,11 +509,13 @@ one optional arguments, diff-number to refine.")
(if (and (boundp 'longlines-mode) longlines-mode) 1 0)))
(if (eq longlines-mode-val 1)
(longlines-mode 0))
+ (goto-char (or b-prev-pt shift-B (point-min)))
(forward-line (- b-begin b-prev))
(setq b-begin-pt (point))
(forward-line (- b-end b-begin))
(setq b-end-pt (point)
- b-prev b-end)
+ b-prev b-end
+ b-prev-pt b-end-pt)
(if (eq longlines-mode-val 1)
(longlines-mode longlines-mode-val))
))
@@ -493,11 +525,13 @@ one optional arguments, diff-number to refine.")
(if (and (boundp 'longlines-mode) longlines-mode) 1 0)))
(if (eq longlines-mode-val 1)
(longlines-mode 0))
+ (goto-char (or c-prev-pt (point-min)))
(forward-line (- c-begin c-prev))
(setq c-begin-pt (point))
(forward-line (- c-end c-begin))
(setq c-end-pt (point)
- c-prev c-end)
+ c-prev c-end
+ c-prev-pt c-end-pt)
(if (eq longlines-mode-val 1)
(longlines-mode longlines-mode-val))
)))
@@ -987,8 +1021,11 @@ delimiter regions"))
(C-buffer ediff-buffer-C)
(anc-buffer ediff-ancestor-buffer)
(a-prev 1) ; needed to set the first diff line correctly
+ (a-prev-pt nil)
(b-prev 1)
+ (b-prev-pt nil)
(c-prev 1)
+ (c-prev-pt nil)
(anc-prev 1)
diff-list shift-A shift-B shift-C
)
@@ -1089,11 +1126,13 @@ delimiter regions"))
;; we must disable and then restore longlines-mode
(if (eq longlines-mode-val 1)
(longlines-mode 0))
+ (goto-char (or a-prev-pt shift-A (point-min)))
(forward-line (- a-begin a-prev))
(setq a-begin-pt (point))
(forward-line (- a-end a-begin))
(setq a-end-pt (point)
- a-prev a-end)
+ a-prev a-end
+ a-prev-pt a-end-pt)
(if (eq longlines-mode-val 1)
(longlines-mode longlines-mode-val))
))
@@ -1102,11 +1141,13 @@ delimiter regions"))
(if (and (boundp 'longlines-mode) longlines-mode) 1 0)))
(if (eq longlines-mode-val 1)
(longlines-mode 0))
+ (goto-char (or b-prev-pt shift-B (point-min)))
(forward-line (- b-begin b-prev))
(setq b-begin-pt (point))
(forward-line (- b-end b-begin))
(setq b-end-pt (point)
- b-prev b-end)
+ b-prev b-end
+ b-prev-pt b-end-pt)
(if (eq longlines-mode-val 1)
(longlines-mode longlines-mode-val))
))
@@ -1115,11 +1156,13 @@ delimiter regions"))
(if (and (boundp 'longlines-mode) longlines-mode) 1 0)))
(if (eq longlines-mode-val 1)
(longlines-mode 0))
+ (goto-char (or c-prev-pt shift-C (point-min)))
(forward-line (- c-begin c-prev))
(setq c-begin-pt (point))
(forward-line (- c-end c-begin))
(setq c-end-pt (point)
- c-prev c-end)
+ c-prev c-end
+ c-prev-pt c-end-pt)
(if (eq longlines-mode-val 1)
(longlines-mode longlines-mode-val))
))
@@ -1171,13 +1214,17 @@ delimiter regions"))
;; File-C is either the third file to compare (in case of 3-way comparison)
;; or it is the ancestor file.
(defun ediff-setup-diff-regions3 (file-A file-B file-C)
+ ;; looking for '-i' or a 'i' among clustered non-long options
+ (if (string-match "^-i\\| -i\\|-[^- ]+i" ediff-diff-options)
+ (error "Option `-i' is not allowed in `ediff-diff3-options'"))
+
(or (ediff-buffer-live-p ediff-diff-buffer)
(setq ediff-diff-buffer
(get-buffer-create (ediff-unique-buffer-name "*ediff-diff" "*"))))
(message "Computing differences ...")
(ediff-exec-process ediff-diff3-program ediff-diff-buffer 'synchronize
- ediff-diff3-options file-A file-B file-C)
+ ediff-actual-diff3-options file-A file-B file-C)
(ediff-prepare-error-list ediff-diff3-ok-lines-regexp ediff-diff-buffer)
;;(message "Computing differences ... done")
@@ -1471,6 +1518,35 @@ affects only files whose names match the expression."
(setq file-list-list (cdr file-list-list)))
(reverse result)))
+;; 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")))
+ (cond (ediff-merge-job
+ (message "Ignoring letter case is too dangerous in merge jobs"))
+ ((and ediff-diff3-job (string= ediff-ignore-case-option3 ""))
+ (message "Ignoring letter case is not supported by this diff3 program"))
+ ((and (not ediff-3way-job) (string= ediff-ignore-case-option ""))
+ (message "Ignoring letter case is not supported by this diff program"))
+ (t
+ (sit-for 1)
+ (ediff-update-diffs)))
+ )
+
+
+(provide 'ediff-diff)
+
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
diff --git a/lisp/ediff-help.el b/lisp/ediff-help.el
index cc266e3c8a3..d5f505c7de3 100644
--- a/lisp/ediff-help.el
+++ b/lisp/ediff-help.el
@@ -26,7 +26,6 @@
;;; Code:
-(provide 'ediff-help)
;; Compiler pacifier start
(defvar ediff-multiframe)
@@ -61,8 +60,8 @@ For help on a specific command: Click Button 2 over it; or
p,DEL -previous diff | | -vert/horiz split | xy -copy buf X's region to Y
n,SPC -next diff | h -hilighting | 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 |
+ gx -goto X's point| ## -ignore whitespace | ! -update diff regions
+ C-l -recenter | #c -ignore case |
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
~ -rotate buffers| m -wide display |
@@ -75,8 +74,8 @@ Normally, not a user option. See `ediff-help-message' for details.")
p,DEL -previous diff | | -vert/horiz split |a/b -copy A/B's region to B/A
n,SPC -next diff | h -hilighting | 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 |
+ gx -goto X's point| ## -ignore whitespace | ! -update diff regions
+ C-l -recenter | #c -ignore case |
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 |
@@ -89,8 +88,8 @@ Normally, not a user option. See `ediff-help-message' for details.")
p,DEL -previous diff | | -vert/horiz split |a/b -copy A/B's region to B/A
n,SPC -next diff | h -hilighting | 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 |
+ gx -goto X's point| ## -ignore whitespace | ! -update diff regions
+ C-l -recenter | #c -ignore case | % -narrow/widen buffs
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 |
@@ -103,8 +102,8 @@ Normally, not a user option. See `ediff-help-message' for details.")
p,DEL -previous diff | | -vert/horiz split | xy -copy buf X's region to Y
n,SPC -next diff | h -hilighting | rx -restore buf X's old diff
j -jump to diff | |
- gx -goto X's point| % -narrow/widen buffs | ! -recompute diffs
- C-l -recenter | |
+ gx -goto X's point| % -narrow/widen buffs | ! -recompute diffs
+ C-l -recenter | #c -ignore case |
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 |
@@ -228,6 +227,7 @@ the value of this variable and the variables `ediff-help-message-*' in
((string= cmd "r") (re-search-forward "^`r'"))
((string= cmd "rx") (re-search-forward "^`ra'"))
((string= cmd "##") (re-search-forward "^`##'"))
+ ((string= cmd "#c") (re-search-forward "^`#c'"))
((string= cmd "#f/#h") (re-search-forward "^`#f'"))
((string= cmd "X") (re-search-forward "^`A'"))
((string= cmd "v/V") (re-search-forward "^`v'"))
@@ -325,5 +325,8 @@ the value of this variable and the variables `ediff-help-message-*' in
(customize-group "ediff"))
+(provide 'ediff-help)
+
+
;;; arch-tag: 05659813-7fcf-4274-964f-d2f577431a9d
;;; ediff-help.el ends here
diff --git a/lisp/ediff-hook.el b/lisp/ediff-hook.el
index 1b86e2f8f62..fcf261efd06 100644
--- a/lisp/ediff-hook.el
+++ b/lisp/ediff-hook.el
@@ -371,5 +371,6 @@
(provide 'ediff-hook)
+
;;; arch-tag: 512f8656-8a4b-4789-af5d-5c6144498df3
;;; ediff-hook.el ends here
diff --git a/lisp/ediff-init.el b/lisp/ediff-init.el
index 4897ffd2e59..2fc0ceefe4d 100644
--- a/lisp/ediff-init.el
+++ b/lisp/ediff-init.el
@@ -1867,6 +1867,7 @@ Unless optional argument INPLACE is non-nil, return a new string."
(set-buffer ,old-buffer)
(set-syntax-table ,old-table)))))))
+
(provide 'ediff-init)
diff --git a/lisp/ediff-merg.el b/lisp/ediff-merg.el
index 7f0eea2cf09..92f462c0181 100644
--- a/lisp/ediff-merg.el
+++ b/lisp/ediff-merg.el
@@ -26,7 +26,6 @@
;;; Code:
-(provide 'ediff-merg)
;; compiler pacifier
(defvar ediff-window-A)
@@ -390,6 +389,9 @@ Combining is done according to the specifications in variable
)))
+(provide 'ediff-merg)
+
+
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
diff --git a/lisp/ediff-mult.el b/lisp/ediff-mult.el
index c24e32a2124..0bbd3298c7a 100644
--- a/lisp/ediff-mult.el
+++ b/lisp/ediff-mult.el
@@ -104,7 +104,6 @@
;;; Code:
-(provide 'ediff-mult)
(defgroup ediff-mult nil
"Multi-file and multi-buffer processing in Ediff."
@@ -123,7 +122,6 @@
;; end pacifier
(require 'ediff-init)
-(require 'ediff-util)
;; meta-buffer
(ediff-defvar-local ediff-meta-buffer nil "")
@@ -1473,6 +1471,7 @@ Useful commands:
(ediff-overlay-put overl 'highlight t))
(ediff-overlay-put overl 'ediff-meta-info prop)
(ediff-overlay-put overl 'invisible hidden)
+ (ediff-overlay-put overl 'follow-link t)
(if (numberp session-number)
(ediff-overlay-put overl 'ediff-meta-session-number session-number))))
@@ -2384,6 +2383,8 @@ for operation, or simply indicate which are equal files. If it is nil, then
))
+(provide 'ediff-mult)
+
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
diff --git a/lisp/ediff-ptch.el b/lisp/ediff-ptch.el
index 9c5c75d847c..b911c33f0fb 100644
--- a/lisp/ediff-ptch.el
+++ b/lisp/ediff-ptch.el
@@ -26,7 +26,6 @@
;;; Code:
-(provide 'ediff-ptch)
(defgroup ediff-ptch nil
"Ediff patch support."
@@ -844,6 +843,8 @@ you can still examine the changes via M-x ediff-files"
+(provide 'ediff-ptch)
+
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
diff --git a/lisp/ediff-util.el b/lisp/ediff-util.el
index feb7b69d7b6..dff3c6bee61 100644
--- a/lisp/ediff-util.el
+++ b/lisp/ediff-util.el
@@ -26,7 +26,6 @@
;;; Code:
-(provide 'ediff-util)
;; Compiler pacifier
(defvar ediff-patch-diagnostics)
@@ -49,6 +48,7 @@
(eval-when-compile
(let ((load-path (cons (expand-file-name ".") load-path)))
+ (provide 'ediff-util) ; to break recursive load cycle
(or (featurep 'ediff-init)
(load "ediff-init.el" nil nil 'nosuffix))
(or (featurep 'ediff-help)
@@ -234,6 +234,7 @@ to invocation.")
(define-key ediff-mode-map "#" nil)
(define-key ediff-mode-map "#h" 'ediff-toggle-regexp-match)
(define-key ediff-mode-map "#f" 'ediff-toggle-regexp-match)
+ (define-key ediff-mode-map "#c" 'ediff-toggle-ignore-case)
(or ediff-word-mode
(define-key ediff-mode-map "##" 'ediff-toggle-skip-similar))
(define-key ediff-mode-map "o" nil)
@@ -1133,7 +1134,7 @@ of the current buffer."
;; ))
-(defsubst ediff-file-checked-out-p (file)
+(defun ediff-file-checked-out-p (file)
(or (not (featurep 'vc-hooks))
(and (vc-backend file)
(if (fboundp 'vc-state)
@@ -1143,7 +1144,7 @@ of the current buffer."
(vc-locking-user file))
)))
-(defsubst ediff-file-checked-in-p (file)
+(defun ediff-file-checked-in-p (file)
(and (featurep 'vc-hooks)
;; CVS files are considered not checked in
(not (memq (vc-backend file) '(nil CVS)))
@@ -3079,7 +3080,7 @@ Hit \\[ediff-recenter] to reset the windows afterward."
)))
-(defsubst ediff-highlight-diff (n)
+(defun ediff-highlight-diff (n)
"Put face on diff N. Invoked for X displays only."
(ediff-highlight-diff-in-one-buffer n 'A)
(ediff-highlight-diff-in-one-buffer n 'B)
@@ -3088,7 +3089,7 @@ Hit \\[ediff-recenter] to reset the windows afterward."
)
-(defsubst ediff-unhighlight-diff ()
+(defun ediff-unhighlight-diff ()
"Remove overlays from buffers A, B, and C."
(ediff-unhighlight-diff-in-one-buffer 'A)
(ediff-unhighlight-diff-in-one-buffer 'B)
@@ -3097,7 +3098,7 @@ Hit \\[ediff-recenter] to reset the windows afterward."
)
;; delete highlighting overlays, restore faces to their original form
-(defsubst ediff-unhighlight-diffs-totally ()
+(defun ediff-unhighlight-diffs-totally ()
(ediff-unhighlight-diffs-totally-in-one-buffer 'A)
(ediff-unhighlight-diffs-totally-in-one-buffer 'B)
(ediff-unhighlight-diffs-totally-in-one-buffer 'C)
@@ -3686,7 +3687,7 @@ Ediff Control Panel to restore highlighting."
(>= (point) end))))))
-(defsubst ediff-get-region-contents (n buf-type ctrl-buf &optional start end)
+(defun ediff-get-region-contents (n buf-type ctrl-buf &optional start end)
(ediff-with-current-buffer
(ediff-with-current-buffer ctrl-buf (ediff-get-buffer buf-type))
(buffer-substring
@@ -3945,6 +3946,7 @@ Ediff Control Panel to restore highlighting."
(ediff-device-type (ediff-device-type))
varlist salutation buffer-name)
(setq varlist '(ediff-diff-program ediff-diff-options
+ ediff-diff3-program ediff-diff3-options
ediff-patch-program ediff-patch-options
ediff-shell
ediff-use-faces
@@ -4300,6 +4302,8 @@ Mail anyway? (y or n) ")
(run-hooks 'ediff-load-hook)
+(provide 'ediff-util)
+
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
diff --git a/lisp/ediff-vers.el b/lisp/ediff-vers.el
index 4c9dc4dd9c8..3e8b1c37572 100644
--- a/lisp/ediff-vers.el
+++ b/lisp/ediff-vers.el
@@ -311,6 +311,7 @@
(provide 'ediff-vers)
+
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
diff --git a/lisp/ediff-wind.el b/lisp/ediff-wind.el
index 648a80b6156..28369f9f6bd 100644
--- a/lisp/ediff-wind.el
+++ b/lisp/ediff-wind.el
@@ -26,7 +26,6 @@
;;; Code:
-(provide 'ediff-wind)
;; Compiler pacifier
(defvar icon-title-format)
@@ -1314,6 +1313,9 @@ It assumes that it is called from within the control buffer."
ediff-wide-display-p)))))))
+(provide 'ediff-wind)
+
+
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
diff --git a/lisp/ediff.el b/lisp/ediff.el
index abb0f22b047..bb6cfc6b72e 100644
--- a/lisp/ediff.el
+++ b/lisp/ediff.el
@@ -7,8 +7,8 @@
;; Created: February 2, 1994
;; Keywords: comparing, merging, patching, tools, unix
-(defconst ediff-version "2.80.1" "The current version of Ediff")
-(defconst ediff-date "November 25, 2005" "Date of last update")
+(defconst ediff-version "2.81" "The current version of Ediff")
+(defconst ediff-date "February 18, 2006" "Date of last update")
;; This file is part of GNU Emacs.
@@ -107,7 +107,6 @@
;;; Code:
-(provide 'ediff)
;; Compiler pacifier
(defvar cvs-cookie-handle)
@@ -121,6 +120,7 @@
(load "pcl-cvs" 'noerror)))
(eval-when-compile
(let ((load-path (cons (expand-file-name ".") load-path)))
+ (provide 'ediff) ; to break recursive load cycle
(or (featurep 'ediff-init)
(load "ediff-init.el" nil nil 'nosuffix))
(or (featurep 'ediff-mult)
@@ -1374,7 +1374,7 @@ patch. If not given, the user is prompted according to the prefix argument."
patch-buf
(read-buffer
"Which buffer to patch? "
- (current-buffer))))
+ (ediff-other-buffer patch-buf))))
;;;###autoload
@@ -1533,6 +1533,9 @@ With optional NODE, goes to that node."
(run-hooks 'ediff-load-hook)
+(provide 'ediff)
+
+
;;; Local Variables:
;;; eval: (put 'ediff-defvar-local 'lisp-indent-hook 'defun)
;;; eval: (put 'ediff-with-current-buffer 'lisp-indent-hook 1)
diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el
index db82952a6ef..645f4f26eaf 100644
--- a/lisp/emulation/viper-cmd.el
+++ b/lisp/emulation/viper-cmd.el
@@ -196,6 +196,15 @@
(viper-save-cursor-color 'before-insert-mode))
;; set insert mode cursor color
(viper-change-cursor-color viper-insert-state-cursor-color)))
+ (if (eq viper-current-state 'emacs-state)
+ (let ((has-saved-cursor-color-in-emacs-mode
+ (stringp (viper-get-saved-cursor-color-in-emacs-mode))))
+ (or has-saved-cursor-color-in-emacs-mode
+ (string= (viper-get-cursor-color) viper-emacs-state-cursor-color)
+ ;; save current color, if not already saved
+ (viper-save-cursor-color 'before-emacs-mode))
+ ;; set emacs mode cursor color
+ (viper-change-cursor-color viper-emacs-state-cursor-color)))
(if (and (memq this-command '(dabbrev-expand hippie-expand))
(integerp viper-pre-command-point)
@@ -643,9 +652,12 @@
(indent-to-left-margin))
(viper-add-newline-at-eob-if-necessary)
(viper-adjust-undo)
- (viper-change-state 'vi-state)
- (viper-restore-cursor-color 'after-insert-mode)
+ (if (eq viper-current-state 'emacs-state)
+ (viper-restore-cursor-color 'after-emacs-mode)
+ (viper-restore-cursor-color 'after-insert-mode))
+
+ (viper-change-state 'vi-state)
;; Protect against user errors in hooks
(condition-case conds
@@ -709,9 +721,17 @@
(or (viper-overlay-p viper-replace-overlay)
(viper-set-replace-overlay (point-min) (point-min)))
(viper-hide-replace-overlay)
+
+ (let ((has-saved-cursor-color-in-emacs-mode
+ (stringp (viper-get-saved-cursor-color-in-emacs-mode))))
+ (or has-saved-cursor-color-in-emacs-mode
+ (string= (viper-get-cursor-color) viper-emacs-state-cursor-color)
+ (viper-save-cursor-color 'before-emacs-mode))
+ (viper-change-cursor-color viper-emacs-state-cursor-color))
+
(viper-change-state 'emacs-state)
- ;; Protect agains user errors in hooks
+ ;; Protect against user errors in hooks
(condition-case conds
(run-hooks 'viper-emacs-state-hook)
(error
@@ -820,12 +840,12 @@ Vi's prefix argument will be used. Otherwise, the prefix argument passed to
;; The next cmd and viper-set-unread-command-events
;; are intended to prevent the input method
;; from swallowing ^M, ^Q and other special characters
- (setq ch (read-char))
+ (setq ch (read-char-exclusive))
;; replace ^M with the newline
(if (eq ch ?\C-m) (setq ch ?\n))
;; Make sure ^V and ^Q work as quotation chars
(if (memq ch '(?\C-v ?\C-q))
- (setq ch (read-char)))
+ (setq ch (read-char-exclusive)))
(viper-set-unread-command-events ch)
(quail-input-method nil)
@@ -842,12 +862,12 @@ Vi's prefix argument will be used. Otherwise, the prefix argument passed to
;; same as above but for XEmacs, which doesn't have
;; quail-input-method
(let (unread-command-events)
- (setq ch (read-char))
+ (setq ch (read-char-exclusive))
;; replace ^M with the newline
(if (eq ch ?\C-m) (setq ch ?\n))
;; Make sure ^V and ^Q work as quotation chars
(if (memq ch '(?\C-v ?\C-q))
- (setq ch (read-char)))
+ (setq ch (read-char-exclusive)))
(viper-set-unread-command-events ch)
(quail-start-translation nil)
@@ -867,12 +887,12 @@ Vi's prefix argument will be used. Otherwise, the prefix argument passed to
(setq ch (aref (read-key-sequence nil) 0)))
(insert ch))
(t
- (setq ch (read-char))
+ (setq ch (read-char-exclusive))
;; replace ^M with the newline
(if (eq ch ?\C-m) (setq ch ?\n))
;; Make sure ^V and ^Q work as quotation chars
(if (memq ch '(?\C-v ?\C-q))
- (setq ch (read-char)))
+ (setq ch (read-char-exclusive)))
(insert ch))
)
(setq last-command-event
@@ -2131,7 +2151,7 @@ To turn this feature off, set this variable to nil."
Remove this function from `viper-minibuffer-exit-hook', if this causes
problems."
(if (viper-is-in-minibuffer)
- (progn
+ (let ((inhibit-field-text-motion t))
(goto-char (viper-minibuffer-real-start))
(end-of-line)
(delete-region (point) (point-max)))))
diff --git a/lisp/emulation/viper-init.el b/lisp/emulation/viper-init.el
index 59a78e46dee..661fc6ede7f 100644
--- a/lisp/emulation/viper-init.el
+++ b/lisp/emulation/viper-init.el
@@ -434,6 +434,13 @@ delete the text being replaced, as in standard Vi."
(if (fboundp 'make-variable-frame-local)
(make-variable-frame-local 'viper-insert-state-cursor-color))
+(defcustom viper-emacs-state-cursor-color "Magenta"
+ "Cursor color when Viper is in emacs state."
+ :type 'string
+ :group 'viper)
+(if (fboundp 'make-variable-frame-local)
+ (make-variable-frame-local 'viper-emacs-state-cursor-color))
+
;; internal var, used to remember the default cursor color of emacs frames
(defvar viper-vi-state-cursor-color nil)
(if (fboundp 'make-variable-frame-local)
diff --git a/lisp/emulation/viper-util.el b/lisp/emulation/viper-util.el
index 8f79c0dab4a..c7fe792b5f2 100644
--- a/lisp/emulation/viper-util.el
+++ b/lisp/emulation/viper-util.el
@@ -175,9 +175,12 @@
(selected-frame)
(list
(cons
- (if (eq before-which-mode 'before-replace-mode)
- 'viper-saved-cursor-color-in-replace-mode
- 'viper-saved-cursor-color-in-insert-mode)
+ (cond ((eq before-which-mode 'before-replace-mode)
+ 'viper-saved-cursor-color-in-replace-mode)
+ ((eq before-which-mode 'before-emacs-mode)
+ 'viper-saved-cursor-color-in-emacs-mode)
+ (t
+ 'viper-saved-cursor-color-in-insert-mode))
color)))
))))
@@ -188,7 +191,9 @@
(if viper-emacs-p 'frame-parameter 'frame-property)
(selected-frame)
'viper-saved-cursor-color-in-replace-mode)
- viper-vi-state-cursor-color))
+ (if (eq viper-current-state 'emacs-mode)
+ viper-emacs-state-cursor-color
+ viper-vi-state-cursor-color)))
(defsubst viper-get-saved-cursor-color-in-insert-mode ()
(or
@@ -196,15 +201,27 @@
(if viper-emacs-p 'frame-parameter 'frame-property)
(selected-frame)
'viper-saved-cursor-color-in-insert-mode)
+ (if (eq viper-current-state 'emacs-mode)
+ viper-emacs-state-cursor-color
+ viper-vi-state-cursor-color)))
+
+(defsubst viper-get-saved-cursor-color-in-emacs-mode ()
+ (or
+ (funcall
+ (if viper-emacs-p 'frame-parameter 'frame-property)
+ (selected-frame)
+ 'viper-saved-cursor-color-in-emacs-mode)
viper-vi-state-cursor-color))
;; restore cursor color from replace overlay
(defun viper-restore-cursor-color(after-which-mode)
(if (viper-overlay-p viper-replace-overlay)
(viper-change-cursor-color
- (if (eq after-which-mode 'after-replace-mode)
- (viper-get-saved-cursor-color-in-replace-mode)
- (viper-get-saved-cursor-color-in-insert-mode))
+ (cond ((eq after-which-mode 'after-replace-mode)
+ (viper-get-saved-cursor-color-in-replace-mode))
+ ((eq after-which-mode 'after-emacs-mode)
+ (viper-get-saved-cursor-color-in-emacs-mode))
+ (t (viper-get-saved-cursor-color-in-insert-mode)))
)))
diff --git a/lisp/emulation/viper.el b/lisp/emulation/viper.el
index 223cff3dd99..fc55d291550 100644
--- a/lisp/emulation/viper.el
+++ b/lisp/emulation/viper.el
@@ -9,7 +9,7 @@
;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
;; Keywords: emulations
-(defconst viper-version "3.11.5 of November 25, 2005"
+(defconst viper-version "3.12 of February 18, 2006"
"The current version of Viper")
;; This file is part of GNU Emacs.
diff --git a/man/ediff.texi b/man/ediff.texi
index 67e822049cb..01e79c821d0 100644
--- a/man/ediff.texi
+++ b/man/ediff.texi
@@ -686,6 +686,16 @@ Even though such regions will be skipped over, you can still jump to any
one of them by typing the region number and then `j'. Typing @kbd{##}
again puts Ediff back in the original state.
+@item #c
+@kindex #c
+@vindex ediff-ignore-case-option
+@vindex ediff-ignore-case-option3
+@vindex ediff-ignore-case
+Toggle case sensitivity in the diff program. All diffs are recomputed.
+Case sensitivity is controlled by the variables
+@code{ediff-ignore-case-option}, @code{ediff-ignore-case-option3},
+and @code{ediff-ignore-case}, which are explained elsewhere.
+
@item #h
@itemx #f
@kindex #f
@@ -1584,6 +1594,28 @@ Ediff may take a long time to skip over them because it has to compute fine
differences of all intermediate regions. This delay does not indicate any
problem.
+@vindex ediff-ignore-case-option
+@vindex ediff-ignore-case-option3
+@vindex ediff-ignore-case
+Finally, Ediff can be told to ignore the case of the letters. This behavior
+can be toggled with @kbd{#c} and it is controlled with three variables:
+Toggle case sensitivity in the diff program. All diffs are recomputed.
+Case sensitivity is controlled by the variables
+@code{ediff-ignore-case-option}, @code{ediff-ignore-case-option3}, and
+@code{ediff-ignore-case}.
+
+The variable @code{ediff-ignore-case-option} specifies the option to pass
+to the diff program for comparing two files or buffers. For GNU
+@code{diff}, this option is @code{"-i"}. The variable
+@code{ediff-ignore-case-option3} specifies the option to pass to the
+@code{diff3} program in order to make it case-insensitive. GNU @code{diff3}
+does not have such an option, so when merging or comparing three files with
+this program, ignoring the letter case is not supported.
+
+The variable @code{ediff-ignore-case} controls whether Ediff starts out by
+ignoring letter case or not. It can be set in @file{.emacs} using
+@code{setq-default}.
+
@node Highlighting Difference Regions, Narrowing, Selective Browsing, Customization
@section Highlighting Difference Regions
@@ -2388,6 +2420,7 @@ Here is a hopefully full list of contributors:
@example
Adrian Aichner (aichner@@ecf.teradyne.com),
+Drew Adams (drew.adams@@oracle.com),
Steve Baur (steve@@xemacs.org),
Neal Becker (neal@@ctd.comsat.com),
E.@: Jay Berkenbilt (ejb@@ql.org),
diff --git a/man/viper.texi b/man/viper.texi
index 4ad437a762d..46d62670345 100644
--- a/man/viper.texi
+++ b/man/viper.texi
@@ -1870,6 +1870,10 @@ application.
@vindex @code{viper-insert-state-cursor-color}
If set to a valid color, this will be the cursor color when Viper is in
insert state.
+@item viper-emacs-state-cursor-color nil
+@vindex @code{viper-emacs-state-cursor-color}
+If set to a valid color, this will be the cursor color when Viper is in
+emacs state.
@item viper-replace-region-end-delimiter "$"
A string used to mark the end of replacement regions. It is used only on
TTYs or if @code{viper-use-replace-region-delimiters} is non-@code{nil}.