Mercurial > emacs
changeset 1134:05c961416bb5
*** empty log message ***
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Mon, 14 Sep 1992 01:39:31 +0000 |
parents | f36b965cfeb0 |
children | e33f6475229a |
files | lisp/diff.el lisp/files.el |
diffstat | 2 files changed, 54 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/diff.el Mon Sep 14 01:33:12 1992 +0000 +++ b/lisp/diff.el Mon Sep 14 01:39:31 1992 +0000 @@ -53,6 +53,15 @@ subexpression gives the line number in the new file. If OLD-IDX or NEW-IDX is nil, REGEXP matches only half a section.") +(defvar diff-old-file nil + "This is the old file name in the comparison in this buffer.") +(defvar diff-new-file nil + "This is the new file name in the comparison in this buffer.") +(defvar diff-old-temp-file nil + "This is the name of a temp file to be deleted after diff finishes.") +(defvar diff-new-temp-file nil + "This is the name of a temp file to be deleted after diff finishes.") + ;; See compilation-parse-errors-function (compile.el). (defun diff-parse-differences (limit-search find-at-least) (setq compilation-error-list nil) @@ -118,7 +127,8 @@ (if (nth 2 g) ;NEW-IDX (funcall new-error diff-new-file (nth 2 g))) - (if (or (and find-at-least (>= nfound find-at-least)) + (if (or (and find-at-least + (>= compilation-num-errors-found find-at-least)) (and limit-search (>= (point) limit-search))) ;; We have found as many new errors as the user wants, ;; or the user wanted a specific diff, and we're past it. @@ -166,8 +176,8 @@ (message "Comparing files %s %s..." new old) (setq new (expand-file-name new) old (expand-file-name old)) - (let ((old-alt (diff-prepare old new)) - (new-alt (diff-prepare new old)) + (let ((old-alt (file-local-copy old)) + (new-alt (file-local-copy new)) buf) (unwind-protect (let ((command @@ -188,26 +198,16 @@ (save-excursion (set-buffer buf) (set (make-local-variable 'diff-old-file) old) - (set (make-local-variable 'diff-new-file) new)) - buf) - (if old-alt (delete-file old-alt)) - (if new-alt (delete-file new-alt))))) - -;; Copy the file FILE into a temporary file if that is necessary -;; for comparison. (This is only necessary if the file name has a handler.) -;; OTHER is the other file to be compared. -(defun diff-prepare (file other) - (let (handler handlers) - (setq handlers file-name-handler-alist) - (while (and (consp handlers) (null handler)) - (if (and (consp (car handlers)) - (stringp (car (car handlers))) - (string-match (car (car handlers)) file)) - (setq handler (cdr (car handlers)))) - (setq handlers (cdr handlers))) - (if handler - (funcall handler 'diff-prepare file other) - nil))) + (set (make-local-variable 'diff-new-file) new) + (set (make-local-variable 'diff-old-temp-file) old-alt) + (set (make-local-variable 'diff-new-temp-file) new-alt) + (set (make-local-variable 'compilation-finish-function) + (function (lambda (buff msg) + (if diff-old-temp-file + (delete-file diff-old-temp-file)) + (if diff-new-temp-file + (delete-file diff-new-temp-file)))))) + buf)))) ;;;###autoload (defun diff-backup (file &optional switches)
--- a/lisp/files.el Mon Sep 14 01:33:12 1992 +0000 +++ b/lisp/files.el Mon Sep 14 01:39:31 1992 +0000 @@ -221,6 +221,23 @@ This is an interface to the function `load'." (interactive "sLoad library: ") (load library)) + +;; OTHER is the other file to be compared. +(defun file-local-copy (file) + "Copy the file FILE into a temporary file on this machine. +Returns the name of the local copy, or nil, if FILE is directly +accessible." + (let (handler (handlers file-name-handler-alist)) + (save-match-data + (while (and (consp handlers) (null handler)) + (if (and (consp (car handlers)) + (stringp (car (car handlers))) + (string-match (car (car handlers)) file)) + (setq handler (cdr (car handlers)))) + (setq handlers (cdr handlers)))) + (if handler + (funcall handler 'file-local-copy file) + nil))) (defun switch-to-buffer-other-window (buffer) "Select buffer BUFFER in another window." @@ -831,12 +848,13 @@ If the optional argument KEEP-BACKUP-VERSION is non-nil, we do not remove backup version numbers, only true file version numbers." (let (handler (handlers file-name-handler-alist)) - (while (and (consp handlers) (null handler)) - (if (and (consp (car handlers)) - (stringp (car (car handlers))) - (string-match (car (car handlers)) name)) - (setq handler (cdr (car handlers)))) - (setq handlers (cdr handlers))) + (save-match-data + (while (and (consp handlers) (null handler)) + (if (and (consp (car handlers)) + (stringp (car (car handlers))) + (string-match (car (car handlers)) name)) + (setq handler (cdr (car handlers)))) + (setq handlers (cdr handlers)))) (if handler (funcall handler 'file-name-sans-versions name keep-backup-version) (substring name 0 @@ -1430,12 +1448,13 @@ whose name is in the variable `ls-program'. If WILDCARD, it also runs the shell specified by `shell-file-name'." (let (handler (handlers file-name-handler-alist)) - (while (and (consp handlers) (null handler)) - (if (and (consp (car handlers)) - (stringp (car (car handlers))) - (string-match (car (car handlers)) file)) - (setq handler (cdr (car handlers)))) - (setq handlers (cdr handlers))) + (save-match-data + (while (and (consp handlers) (null handler)) + (if (and (consp (car handlers)) + (stringp (car (car handlers))) + (string-match (car (car handlers)) file)) + (setq handler (cdr (car handlers)))) + (setq handlers (cdr handlers)))) (if handler (funcall handler 'insert-directory file switches wildcard full-directory-p)