;; 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.")
(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)
(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)
(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
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))
(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))
(> (backup-extract-version fn1)
(backup-extract-version fn2))))))))))
+(provide 'diff)
+
;;; diff.el ends here