]> code.delx.au - gnu-emacs/blobdiff - lisp/ediff.el
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-24
[gnu-emacs] / lisp / ediff.el
index 259bd657338b4dacf3634f41684b18313e4abb62..2a2b481ec59357c4b37f36982d589a12c087664f 100644 (file)
@@ -1,13 +1,13 @@
 ;;; ediff.el --- a comprehensive visual interface to diff & patch
 
-;; Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 01, 02, 03 Free Software Foundation, Inc.
+;; Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 01, 02, 03, 05 Free Software Foundation, Inc.
 
 ;; Author: Michael Kifer <kifer@cs.stonybrook.edu>
 ;; Created: February 2, 1994
 ;; Keywords: comparing, merging, patching, tools, unix
 
-(defconst ediff-version "2.78" "The current version of Ediff")
-(defconst ediff-date "May 18, 2003" "Date of last update")  
+(defconst ediff-version "2.80" "The current version of Ediff")
+(defconst ediff-date "February 19, 2005" "Date of last update")  
 
 
 ;; This file is part of GNU Emacs.
@@ -501,6 +501,7 @@ the same name in both.  The third argument, REGEXP, is nil or a regular
 expression; only file names that match the regexp are considered."
   (interactive
    (let ((dir-A (ediff-get-default-directory-name))
+        (default-regexp (eval ediff-default-filtering-regexp))
         f)
      (list (setq f (ediff-read-file-name "Directory A to compare:" dir-A nil))
           (ediff-read-file-name "Directory B to compare:"
@@ -508,11 +509,14 @@ expression; only file names that match the regexp are considered."
                                     ediff-last-dir-B
                                   (ediff-strip-last-dir f))
                                 nil)
-          (read-string (format
-                        "Filter through regular expression (default %S): "
-                        (eval ediff-default-filtering-regexp))
-                       (eval ediff-default-filtering-regexp)
-                       'ediff-filtering-regexp-history)
+          (read-string
+           (if (stringp default-regexp)
+               (format "Filter through regular expression (default %s): "
+                        default-regexp)
+             "Filter through regular expression: ")
+           nil
+           'ediff-filtering-regexp-history
+           (eval ediff-default-filtering-regexp))
           )))
   (ediff-directories-internal
    dir1 dir2 nil regexp 'ediff-files 'ediff-directories
@@ -528,14 +532,19 @@ expression; only file names that match the regexp are considered."
 The second argument, REGEXP, is a regular expression that filters the file
 names.  Only the files that are under revision control are taken into account."
   (interactive
-   (let ((dir-A (ediff-get-default-directory-name)))
+   (let ((dir-A (ediff-get-default-directory-name))
+        (default-regexp (eval ediff-default-filtering-regexp))
+        )
      (list (ediff-read-file-name
            "Directory to compare with revision:" dir-A nil)
-          (read-string (format
-                        "Filter through regular expression (default %S): "
-                        (eval ediff-default-filtering-regexp))
-                       (eval ediff-default-filtering-regexp)
-                       'ediff-filtering-regexp-history)
+          (read-string
+           (if (stringp default-regexp)
+               (format "Filter through regular expression (default %s): "
+                        default-regexp)
+             "Filter through regular expression: ")
+           nil
+           'ediff-filtering-regexp-history
+           (eval ediff-default-filtering-regexp))
           )))
   (ediff-directory-revisions-internal
    dir1 regexp 'ediff-revision 'ediff-directory-revisions
@@ -553,6 +562,7 @@ regular expression; only file names that match the regexp are considered."
 
   (interactive
    (let ((dir-A (ediff-get-default-directory-name))
+        (default-regexp (eval ediff-default-filtering-regexp))
         f)
      (list (setq f (ediff-read-file-name "Directory A to compare:" dir-A nil))
           (setq f (ediff-read-file-name "Directory B to compare:"
@@ -565,11 +575,14 @@ regular expression; only file names that match the regexp are considered."
                                     ediff-last-dir-C
                                   (ediff-strip-last-dir f))
                                 nil)
-          (read-string (format
-                        "Filter through regular expression (default %S): "
-                        (eval ediff-default-filtering-regexp))
-                       (eval ediff-default-filtering-regexp)
-                       'ediff-filtering-regexp-history)
+          (read-string
+           (if (stringp default-regexp)
+               (format "Filter through regular expression (default %s): "
+                        default-regexp)
+             "Filter through regular expression: ")
+           nil
+           'ediff-filtering-regexp-history
+           (eval ediff-default-filtering-regexp))
           )))
   (ediff-directories-internal
    dir1 dir2 dir3 regexp 'ediff-files3 'ediff-directories3
@@ -585,6 +598,7 @@ the same name in both.  The third argument, REGEXP, is nil or a regular
 expression; only file names that match the regexp are considered."
   (interactive
    (let ((dir-A (ediff-get-default-directory-name))
+        (default-regexp (eval ediff-default-filtering-regexp))
         f)
      (list (setq f (ediff-read-file-name "Directory A to merge:" dir-A nil))
           (ediff-read-file-name "Directory B to merge:"
@@ -592,11 +606,14 @@ expression; only file names that match the regexp are considered."
                                     ediff-last-dir-B
                                   (ediff-strip-last-dir f))
                                 nil)
-          (read-string (format
-                        "Filter through regular expression (default %S): "
-                        (eval ediff-default-filtering-regexp))
-                       (eval ediff-default-filtering-regexp)
-                       'ediff-filtering-regexp-history)
+          (read-string
+           (if (stringp default-regexp)
+               (format "Filter through regular expression (default %s): "
+                        default-regexp)
+             "Filter through regular expression: ")
+           nil
+           'ediff-filtering-regexp-history
+           (eval ediff-default-filtering-regexp))
           )))
   (ediff-directories-internal
    dir1 dir2 nil regexp 'ediff-merge-files 'ediff-merge-directories
@@ -617,6 +634,7 @@ without ancestor.  The fourth argument, REGEXP, is nil or a regular expression;
 only file names that match the regexp are considered."
   (interactive
    (let ((dir-A (ediff-get-default-directory-name))
+        (default-regexp (eval ediff-default-filtering-regexp))
         f)
      (list (setq f (ediff-read-file-name "Directory A to merge:" dir-A nil))
           (setq f (ediff-read-file-name "Directory B to merge:"
@@ -629,11 +647,14 @@ only file names that match the regexp are considered."
                                     ediff-last-dir-C
                                   (ediff-strip-last-dir f))
                                 nil)
-          (read-string (format
-                        "Filter through regular expression (default %S): "
-                        (eval ediff-default-filtering-regexp))
-                       (eval ediff-default-filtering-regexp)
-                       'ediff-filtering-regexp-history)
+          (read-string
+           (if (stringp default-regexp)
+               (format "Filter through regular expression (default %s): "
+                        default-regexp)
+             "Filter through regular expression: ")
+           nil
+           'ediff-filtering-regexp-history
+           (eval ediff-default-filtering-regexp))
           )))
   (ediff-directories-internal
    dir1 dir2 ancestor-dir regexp
@@ -648,14 +669,19 @@ only file names that match the regexp are considered."
 The second argument, REGEXP, is a regular expression that filters the file
 names.  Only the files that are under revision control are taken into account."
   (interactive
-   (let ((dir-A (ediff-get-default-directory-name)))
+   (let ((dir-A (ediff-get-default-directory-name))
+        (default-regexp (eval ediff-default-filtering-regexp))
+        )
      (list (ediff-read-file-name
            "Directory to merge with revisions:" dir-A nil)
-          (read-string (format
-                        "Filter through regular expression (default %S): "
-                        (eval ediff-default-filtering-regexp))
-                       (eval ediff-default-filtering-regexp)
-                       'ediff-filtering-regexp-history)
+          (read-string
+           (if (stringp default-regexp)
+               (format "Filter through regular expression (default %s): "
+                        default-regexp)
+             "Filter through regular expression: ")
+           nil
+           'ediff-filtering-regexp-history
+           (eval ediff-default-filtering-regexp))
           )))
   (ediff-directory-revisions-internal
    dir1 regexp 'ediff-merge-revisions 'ediff-merge-directory-revisions
@@ -673,14 +699,19 @@ names.  Only the files that are under revision control are taken into account."
 The second argument, REGEXP, is a regular expression that filters the file
 names.  Only the files that are under revision control are taken into account."
   (interactive
-   (let ((dir-A (ediff-get-default-directory-name)))
+   (let ((dir-A (ediff-get-default-directory-name))
+        (default-regexp (eval ediff-default-filtering-regexp))
+        )
      (list (ediff-read-file-name
            "Directory to merge with revisions and ancestors:" dir-A nil)
-          (read-string (format
-                        "Filter through regular expression (default %S): "
-                        (eval ediff-default-filtering-regexp))
-                       (eval ediff-default-filtering-regexp)
-                       'ediff-filtering-regexp-history)
+          (read-string
+           (if (stringp default-regexp)
+               (format "Filter through regular expression (default %s): "
+                        default-regexp)
+             "Filter through regular expression: ")
+           nil
+           'ediff-filtering-regexp-history
+           (eval ediff-default-filtering-regexp))
           )))
   (ediff-directory-revisions-internal
    dir1 regexp 'ediff-merge-revisions-with-ancestor
@@ -1049,8 +1080,11 @@ lines.  For small regions, use `ediff-regions-wordwise'."
 
 (defsubst ediff-merge-on-startup ()
   (ediff-do-merge 0)
-  (ediff-with-current-buffer ediff-buffer-C
-    (set-buffer-modified-p nil)))
+  ;; Can't remember why this is here, but it may cause the automatically merged
+  ;; buffer to be lost. So, keep the buffer modified.
+  ;;(ediff-with-current-buffer ediff-buffer-C
+  ;;  (set-buffer-modified-p nil))
+  )
 
 ;;;###autoload
 (defun ediff-merge-files (file-A file-B
@@ -1443,6 +1477,53 @@ With optional NODE, goes to that node."
                   (set-window-buffer ctl-window ctl-buf)))))))
 
 
+(dolist (mess '("^Errors in diff output. Diff output is in "
+                "^Hmm... I don't see an Ediff command around here...$"
+                "^Undocumented command! Type `G' in Ediff Control Panel to drop a note to the Ediff maintainer$"
+                ": This command runs in Ediff Control Buffer only!$"
+                ": Invalid op in ediff-check-version$"
+                "^ediff-shrink-window-C can be used only for merging jobs$"
+                "^Lost difference info on these directories$"
+                "^This command is inapplicable in the present context$"
+                "^This session group has no parent$"
+                "^Can't hide active session, $"
+                "^Ediff: something wrong--no multiple diffs buffer$"
+                "^Can't make context diff for Session $"
+                "^The patch buffer wasn't found$"
+                "^Aborted$"
+                "^This Ediff session is not part of a session group$"
+                "^No active Ediff sessions or corrupted session registry$"
+                "^No session info in this line$"
+                "^`.*' is not an ordinary file$"
+                "^Patch appears to have failed$"
+                "^Recomputation of differences cancelled$"
+                "^No fine differences in this mode$"
+                "^Lost connection to ancestor buffer...sorry$"
+                "^Not merging with ancestor$"
+                "^Don't know how to toggle read-only in buffer "
+                "Emacs is not running as a window application$"
+                "^This command makes sense only when merging with an ancestor$"
+                "^At end of the difference list$"
+                "^At beginning of the difference list$"
+                "^Nothing saved for diff .* in buffer "
+                "^Buffer is out of sync for file "
+                "^Buffer out of sync for file "
+                "^Output from `diff' not found$"
+                "^You forgot to specify a region in buffer "
+                "^All right. Make up your mind and come back...$"
+                "^Current buffer is not visiting any file$"
+                "^Failed to retrieve revision: $"
+                "^Can't determine display width.$"
+                "^File `.*' does not exist or is not readable$"
+                "^File `.*' is a directory$"
+                "^Buffer .* doesn't exist$"
+                "^Directories . and . are the same: "
+                "^Directory merge aborted$"
+                "^Merge of directory revisions aborted$"
+                "^Buffer .* doesn't exist$"
+                "^There is no file to merge$"
+                "^Version control package .*.el not found. Use vc.el instead$"))
+  (add-to-list 'debug-ignored-errors mess))
 
 
 ;;; Local Variables: