]> code.delx.au - gnu-emacs/blobdiff - lisp/diff.el
(mouse-choose-completion): New function.
[gnu-emacs] / lisp / diff.el
index 4e8d54afcd9f1a4c6f9b5fe961d5a83ec6a6b2a8..7043c9ac73e19ce1fef816b9abb237f757d220ae 100644 (file)
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 1992 Free Software Foundation, Inc.
 
-;; Keyword: unix, tools
+;; Keywords: unix, tools
 
 ;; This file is part of GNU Emacs.
 
 ;; along with GNU Emacs; see the file COPYING.  If not, write to
 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 
+;;; Commentary:
+
+;; This package helps you explore differences between files, using the
+;; UNIX command diff(1).  The commands are `diff' and `diff-backup'.
+;; You can specify options with `diff-switches'.
+
 ;;; Code:
 
 (require 'compile)
 
+;;; This is duplicated in vc.el.
 (defvar diff-switches "-c"
   "*A string or list of strings specifying switches to be be passed to diff.")
 
@@ -68,7 +75,7 @@ is nil, REGEXP matches only half a section.")
   (message "Parsing differences...")
 
   ;; Don't reparse diffs already seen at last parse.
-  (goto-char compilation-parsing-end)
+  (if compilation-parsing-end (goto-char compilation-parsing-end))
 
   ;; Construct in REGEXP a regexp composed of all those in dired-regexp-alist.
   (let ((regexp (mapconcat (lambda (elt)
@@ -106,13 +113,15 @@ is nil, REGEXP matches only half a section.")
                                                (match-beginning subexpr)
                                                (match-end subexpr)))))
                                    (save-excursion
-                                     (set-buffer (find-file-noselect file))
+                                     (save-match-data
+                                       (set-buffer (find-file-noselect file)))
                                      (save-excursion
                                        (goto-line line)
                                        (point-marker)))))
                            compilation-error-list)))))
 
        (found-desired nil)
+       (num-loci-found 0)
        g)
 
     (while (and (not found-desired)
@@ -132,18 +141,19 @@ is nil, REGEXP matches only half a section.")
       (if (nth 2 g)                    ;NEW-IDX
          (funcall new-error diff-new-file (nth 2 g)))
 
+      (setq num-loci-found (1+ num-loci-found))
       (if (or (and find-at-least
-                  (>= compilation-num-errors-found find-at-least))
+                  (>= num-loci-found find-at-least))
              (and limit-search (>= (point) limit-search)))
-             ;; We have found as many new errors as the user wants,
+             ;; We have found as many new loci as the user wants,
              ;; or the user wanted a specific diff, and we're past it.
          (setq found-desired t)))
     (if found-desired
        (setq compilation-parsing-end (point))
       ;; Set to point-max, not point, so we don't perpetually
       ;; parse the last bit of text when it isn't a diff header.
-      (setq compilation-parsing-end (point-max))
-      (message "Parsing differences...done")))
+      (setq compilation-parsing-end (point-max)))
+    (message "Parsing differences...done"))
   (setq compilation-error-list (nreverse compilation-error-list)))
 
 ;;;###autoload
@@ -178,7 +188,6 @@ With prefix arg, prompt for diff switches."
                               diff-switches
                             (mapconcat 'identity diff-switches " "))))
       nil)))
-  (message "Comparing files %s %s..." new old)
   (setq new (expand-file-name new)
        old (expand-file-name old))
   (let ((old-alt (file-local-copy old))
@@ -188,9 +197,14 @@ With prefix arg, prompt for diff switches."
        (let ((command
               (mapconcat 'identity
                          (append '("diff")
-                                 (if (consp diff-switches)
-                                     diff-switches
-                                   (list diff-switches))
+                                 ;; Use explicitly specified switches
+                                 (if switches
+                                     (if (consp switches)
+                                         switches (list switches))
+                                   ;; If not specified, use default.
+                                   (if (consp diff-switches)
+                                       diff-switches
+                                     (list diff-switches)))
                                  (if (or old-alt new-alt)
                                      (list "-L" old "-L" new))
                                  (list (or old-alt old))
@@ -260,4 +274,6 @@ The backup file is the first file given to `diff'."
                      (> (backup-extract-version fn1)
                         (backup-extract-version fn2))))))))))
 
+(provide 'diff)
+
 ;;; diff.el ends here