Mercurial > emacs
annotate lisp/diff.el @ 46205:6676ac71682b
Update mouse button info.
Don't give the names of Emacs commands that the characters run.
Clarify what SPC and DEL do.
Clarify the description of the minibuffer.
Wording change for completion.
Explain Mouse-2 better.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 07 Jul 2002 11:31:31 +0000 |
parents | 6b7dcaa53b5c |
children | bac8aaf18835 |
rev | line source |
---|---|
38414
67b464da13ec
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
25413
diff
changeset
|
1 ;;; diff.el --- run `diff' in compilation-mode |
846
20674ae6bf52
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
811
diff
changeset
|
2 |
39758
875aaf118d95
(diff): Display default values in prompts as `(default ...)', not `(...)'.
Miles Bader <miles@gnu.org>
parents:
38697
diff
changeset
|
3 ;; Copyright (C) 1992, 1994, 1996, 2001 Free Software Foundation, Inc. |
894 | 4 |
38697
a19197c6442f
Keyword added and FSF specified as Maintainer.
Pavel Janík <Pavel@Janik.cz>
parents:
38414
diff
changeset
|
5 ;; Maintainer: FSF |
2247
2c7997f249eb
Add or correct keywords
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1215
diff
changeset
|
6 ;; Keywords: unix, tools |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
669
diff
changeset
|
7 |
349 | 8 ;; This file is part of GNU Emacs. |
9 | |
10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
11 ;; it under the terms of the GNU General Public License as published by | |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
669
diff
changeset
|
12 ;; the Free Software Foundation; either version 2, or (at your option) |
349 | 13 ;; any later version. |
14 | |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
14169 | 21 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
23 ;; Boston, MA 02111-1307, USA. | |
349 | 24 |
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
25 ;;; Commentary: |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
26 |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
27 ;; This package helps you explore differences between files, using the |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
28 ;; UNIX command diff(1). The commands are `diff' and `diff-backup'. |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
29 ;; You can specify options with `diff-switches'. |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2247
diff
changeset
|
30 |
894 | 31 ;;; Code: |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
669
diff
changeset
|
32 |
894 | 33 (require 'compile) |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
669
diff
changeset
|
34 |
18143 | 35 (defgroup diff nil |
36 "Comparing files with `diff'." | |
37 :group 'tools) | |
894 | 38 |
18143 | 39 ;;;###autoload |
40 (defcustom diff-switches "-c" | |
41 "*A string or list of strings specifying switches to be be passed to diff." | |
42 :type '(choice string (repeat string)) | |
43 :group 'diff) | |
44 | |
45 ;;;###autoload | |
46 (defcustom diff-command "diff" | |
47 "*The command to use to run diff." | |
18150
960597385f1c
(diff-command): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
18143
diff
changeset
|
48 :type 'string |
18143 | 49 :group 'diff) |
9736
093d80b4ae17
(diff-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
8195
diff
changeset
|
50 |
894 | 51 (defvar diff-regexp-alist |
52 '( | |
53 ;; -u format: @@ -OLDSTART,OLDEND +NEWSTART,NEWEND @@ | |
54 ("^@@ -\\([0-9]+\\),[0-9]+ \\+\\([0-9]+\\),[0-9]+ @@$" 1 2) | |
14140
db5e78740d5c
(diff): Fix local compilation-exit-message-function to take the proper
Roland McGrath <roland@gnu.org>
parents:
14106
diff
changeset
|
55 |
894 | 56 ;; -c format: *** OLDSTART,OLDEND **** |
57 ("^\\*\\*\\* \\([0-9]+\\),[0-9]+ \\*\\*\\*\\*$" 1 nil) | |
58 ;; --- NEWSTART,NEWEND ---- | |
59 ("^--- \\([0-9]+\\),[0-9]+ ----$" nil 1) | |
60 | |
61 ;; plain diff format: OLDSTART[,OLDEND]{a,d,c}NEWSTART[,NEWEND] | |
62 ("^\\([0-9]+\\)\\(,[0-9]+\\)?[adc]\\([0-9]+\\)\\(,[0-9]+\\)?$" 1 3) | |
63 | |
64 ;; -e (ed) format: OLDSTART[,OLDEND]{a,d,c} | |
65 ("^\\([0-9]+\\)\\(,[0-9]+\\)?[adc]$" 1) | |
349 | 66 |
894 | 67 ;; -f format: {a,d,c}OLDSTART[ OLDEND] |
68 ;; -n format: {a,d,c}OLDSTART LINES-CHANGED | |
69 ("^[adc]\\([0-9]+\\)\\( [0-9]+\\)?$" 1) | |
70 ) | |
45198
0f3260023919
(diff-regexp-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
39758
diff
changeset
|
71 "Alist of regular expressions to match difference sections in \\[diff] output. |
0f3260023919
(diff-regexp-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
39758
diff
changeset
|
72 Each element has the form (REGEXP OLD-IDX NEW-IDX). |
0f3260023919
(diff-regexp-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
39758
diff
changeset
|
73 Any text that REGEXP matches identifies one difference hunk |
0f3260023919
(diff-regexp-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
39758
diff
changeset
|
74 or the header of a hunk. |
0f3260023919
(diff-regexp-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
39758
diff
changeset
|
75 |
0f3260023919
(diff-regexp-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
39758
diff
changeset
|
76 The OLD-IDX'th subexpression of REGEXP gives the line number |
0f3260023919
(diff-regexp-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
39758
diff
changeset
|
77 in the old file, and NEW-IDX'th subexpression gives the line number |
0f3260023919
(diff-regexp-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
39758
diff
changeset
|
78 in the new file. If OLD-IDX or NEW-IDX |
0f3260023919
(diff-regexp-alist): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
39758
diff
changeset
|
79 is nil, REGEXP matches only half a hunk.") |
349 | 80 |
1134
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
81 (defvar diff-old-file nil |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
82 "This is the old file name in the comparison in this buffer.") |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
83 (defvar diff-new-file nil |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
84 "This is the new file name in the comparison in this buffer.") |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
85 (defvar diff-old-temp-file nil |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
86 "This is the name of a temp file to be deleted after diff finishes.") |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
87 (defvar diff-new-temp-file nil |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
88 "This is the name of a temp file to be deleted after diff finishes.") |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
89 |
894 | 90 ;; See compilation-parse-errors-function (compile.el). |
907 | 91 (defun diff-parse-differences (limit-search find-at-least) |
894 | 92 (setq compilation-error-list nil) |
93 (message "Parsing differences...") | |
94 | |
95 ;; Don't reparse diffs already seen at last parse. | |
2541
09e58f572f19
(diff-parse-differences): Small robustification --- don't lose if we
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
96 (if compilation-parsing-end (goto-char compilation-parsing-end)) |
474 | 97 |
894 | 98 ;; Construct in REGEXP a regexp composed of all those in dired-regexp-alist. |
99 (let ((regexp (mapconcat (lambda (elt) | |
100 (concat "\\(" (car elt) "\\)")) | |
101 diff-regexp-alist | |
102 "\\|")) | |
103 ;; (GROUP-IDX OLD-IDX NEW-IDX) | |
104 (groups (let ((subexpr 1)) | |
105 (mapcar (lambda (elt) | |
106 (prog1 | |
107 (cons subexpr | |
108 (mapcar (lambda (n) | |
109 (and n | |
110 (+ subexpr n))) | |
111 (cdr elt))) | |
112 (setq subexpr (+ subexpr 1 | |
113 (count-regexp-groupings | |
114 (car elt)))))) | |
115 diff-regexp-alist))) | |
116 | |
117 (new-error | |
118 (function (lambda (file subexpr) | |
119 (setq compilation-error-list | |
120 (cons | |
1179 | 121 (cons (save-excursion |
122 ;; Report location of message | |
123 ;; at beginning of line. | |
124 (goto-char | |
125 (match-beginning subexpr)) | |
126 (beginning-of-line) | |
127 (point-marker)) | |
128 ;; Report location of corresponding text. | |
894 | 129 (let ((line (string-to-int |
130 (buffer-substring | |
131 (match-beginning subexpr) | |
132 (match-end subexpr))))) | |
133 (save-excursion | |
3874
0a694f8e1730
* diff.el (diff-parse-differences): Preserve the match data
Jim Blandy <jimb@redhat.com>
parents:
3429
diff
changeset
|
134 (save-match-data |
0a694f8e1730
* diff.el (diff-parse-differences): Preserve the match data
Jim Blandy <jimb@redhat.com>
parents:
3429
diff
changeset
|
135 (set-buffer (find-file-noselect file))) |
894 | 136 (save-excursion |
137 (goto-line line) | |
138 (point-marker))))) | |
139 compilation-error-list))))) | |
140 | |
141 (found-desired nil) | |
1215
92554bb95d51
(diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents:
1179
diff
changeset
|
142 (num-loci-found 0) |
894 | 143 g) |
144 | |
145 (while (and (not found-desired) | |
146 ;; We don't just pass LIMIT-SEARCH to re-search-forward | |
147 ;; because we want to find matches containing LIMIT-SEARCH | |
148 ;; but which extend past it. | |
149 (re-search-forward regexp nil t)) | |
150 | |
151 ;; Find which individual regexp matched. | |
152 (setq g groups) | |
153 (while (and g (null (match-beginning (car (car g))))) | |
154 (setq g (cdr g))) | |
155 (setq g (car g)) | |
156 | |
157 (if (nth 1 g) ;OLD-IDX | |
158 (funcall new-error diff-old-file (nth 1 g))) | |
159 (if (nth 2 g) ;NEW-IDX | |
160 (funcall new-error diff-new-file (nth 2 g))) | |
161 | |
1215
92554bb95d51
(diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents:
1179
diff
changeset
|
162 (setq num-loci-found (1+ num-loci-found)) |
1134
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
163 (if (or (and find-at-least |
1215
92554bb95d51
(diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents:
1179
diff
changeset
|
164 (>= num-loci-found find-at-least)) |
907 | 165 (and limit-search (>= (point) limit-search))) |
1215
92554bb95d51
(diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents:
1179
diff
changeset
|
166 ;; We have found as many new loci as the user wants, |
907 | 167 ;; or the user wanted a specific diff, and we're past it. |
168 (setq found-desired t))) | |
25413
c23f7efbfd57
(diff-parse-differences):
Richard M. Stallman <rms@gnu.org>
parents:
19836
diff
changeset
|
169 (set-marker compilation-parsing-end |
c23f7efbfd57
(diff-parse-differences):
Richard M. Stallman <rms@gnu.org>
parents:
19836
diff
changeset
|
170 (if found-desired (point) |
c23f7efbfd57
(diff-parse-differences):
Richard M. Stallman <rms@gnu.org>
parents:
19836
diff
changeset
|
171 ;; Set to point-max, not point, so we don't perpetually |
c23f7efbfd57
(diff-parse-differences):
Richard M. Stallman <rms@gnu.org>
parents:
19836
diff
changeset
|
172 ;; parse the last bit of text when it isn't a diff header. |
c23f7efbfd57
(diff-parse-differences):
Richard M. Stallman <rms@gnu.org>
parents:
19836
diff
changeset
|
173 (point-max))) |
1215
92554bb95d51
(diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents:
1179
diff
changeset
|
174 (message "Parsing differences...done")) |
894 | 175 (setq compilation-error-list (nreverse compilation-error-list))) |
349 | 176 |
16984
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
177 (defun diff-process-setup () |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
178 "Set up \`compilation-exit-message-function' for \`diff'." |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
179 ;; Avoid frightening people with "abnormally terminated" |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
180 ;; if diff finds differences. |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
181 (set (make-local-variable 'compilation-exit-message-function) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
182 (lambda (status code msg) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
183 (cond ((not (eq status 'exit)) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
184 (cons msg code)) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
185 ((zerop code) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
186 '("finished (no differences)\n" . "no differences")) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
187 ((= code 1) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
188 '("finished\n" . "differences found")) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
189 (t |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
190 (cons msg code)))))) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
191 |
349 | 192 ;;;###autoload |
894 | 193 (defun diff (old new &optional switches) |
349 | 194 "Find and display the differences between OLD and NEW files. |
4759 | 195 Interactively the current buffer's file name is the default for NEW |
894 | 196 and a backup file for NEW is the default for OLD. |
197 With prefix arg, prompt for diff switches." | |
349 | 198 (interactive |
894 | 199 (nconc |
200 (let (oldf newf) | |
201 (nreverse | |
202 (list | |
203 (setq newf (buffer-file-name) | |
204 newf (if (and newf (file-exists-p newf)) | |
205 (read-file-name | |
39758
875aaf118d95
(diff): Display default values in prompts as `(default ...)', not `(...)'.
Miles Bader <miles@gnu.org>
parents:
38697
diff
changeset
|
206 (concat "Diff new file: (default " |
894 | 207 (file-name-nondirectory newf) ") ") |
208 nil newf t) | |
209 (read-file-name "Diff new file: " nil nil t))) | |
210 (setq oldf (file-newest-backup newf) | |
211 oldf (if (and oldf (file-exists-p oldf)) | |
212 (read-file-name | |
39758
875aaf118d95
(diff): Display default values in prompts as `(default ...)', not `(...)'.
Miles Bader <miles@gnu.org>
parents:
38697
diff
changeset
|
213 (concat "Diff original file: (default " |
894 | 214 (file-name-nondirectory oldf) ") ") |
215 (file-name-directory oldf) oldf t) | |
216 (read-file-name "Diff original file: " | |
217 (file-name-directory newf) nil t)))))) | |
218 (if current-prefix-arg | |
219 (list (read-string "Diff switches: " | |
220 (if (stringp diff-switches) | |
221 diff-switches | |
222 (mapconcat 'identity diff-switches " ")))) | |
223 nil))) | |
349 | 224 (setq new (expand-file-name new) |
225 old (expand-file-name old)) | |
1134
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
226 (let ((old-alt (file-local-copy old)) |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
227 (new-alt (file-local-copy new)) |
1110
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
228 buf) |
15932
e4d0cf418b2b
(diff): Don't pop to *diff* buffer. Change bogus
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
229 (save-excursion |
16984
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
230 (let ((compilation-process-setup-function 'diff-process-setup) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
231 (command |
1110
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
232 (mapconcat 'identity |
9736
093d80b4ae17
(diff-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
8195
diff
changeset
|
233 (append (list diff-command) |
3429
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
234 ;; Use explicitly specified switches |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
235 (if switches |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
236 (if (consp switches) |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
237 switches (list switches)) |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
238 ;; If not specified, use default. |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
239 (if (consp diff-switches) |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
240 diff-switches |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
241 (list diff-switches))) |
1110
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
242 (if (or old-alt new-alt) |
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
243 (list "-L" old "-L" new)) |
5386
a91748bee657
(diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents:
4759
diff
changeset
|
244 (list |
a91748bee657
(diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents:
4759
diff
changeset
|
245 (shell-quote-argument (or old-alt old))) |
a91748bee657
(diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents:
4759
diff
changeset
|
246 (list |
a91748bee657
(diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents:
4759
diff
changeset
|
247 (shell-quote-argument (or new-alt new)))) |
1110
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
248 " "))) |
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
249 (setq buf |
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
250 (compile-internal command |
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
251 "No more differences" "Diff" |
1112 | 252 'diff-parse-differences)) |
15932
e4d0cf418b2b
(diff): Don't pop to *diff* buffer. Change bogus
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
253 (set-buffer buf) |
5542
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
254 (set (make-local-variable 'diff-old-file) old) |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
255 (set (make-local-variable 'diff-new-file) new) |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
256 (set (make-local-variable 'diff-old-temp-file) old-alt) |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
257 (set (make-local-variable 'diff-new-temp-file) new-alt) |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
258 (set (make-local-variable 'compilation-finish-function) |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
259 (function (lambda (buff msg) |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
260 (if diff-old-temp-file |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
261 (delete-file diff-old-temp-file)) |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
262 (if diff-new-temp-file |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
263 (delete-file diff-new-temp-file))))) |
16984
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
264 ;; When async processes aren't available, the compilation finish |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
265 ;; function doesn't get chance to run. Invoke it by hand. |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
266 (or (fboundp 'start-process) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
267 (funcall compilation-finish-function nil nil)) |
1134
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
268 buf)))) |
474 | 269 |
894 | 270 ;;;###autoload |
271 (defun diff-backup (file &optional switches) | |
881
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
272 "Diff this file with its backup file or vice versa. |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
273 Uses the latest backup, if there are several numerical backups. |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
274 If this file is a backup, diff it with its original. |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
275 The backup file is the first file given to `diff'." |
894 | 276 (interactive (list (read-file-name "Diff (file with backup): ") |
277 (if current-prefix-arg | |
278 (read-string "Diff switches: " | |
279 (if (stringp diff-switches) | |
280 diff-switches | |
281 (mapconcat 'identity | |
282 diff-switches " "))) | |
283 nil))) | |
881
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
284 (let (bak ori) |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
285 (if (backup-file-name-p file) |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
286 (setq bak file |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
287 ori (file-name-sans-versions file)) |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
288 (setq bak (or (diff-latest-backup-file file) |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
289 (error "No backup found for %s" file)) |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
290 ori file)) |
894 | 291 (diff bak ori switches))) |
474 | 292 |
881
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
293 (defun diff-latest-backup-file (fn) ; actually belongs into files.el |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
294 "Return the latest existing backup of FILE, or nil." |
7028
6915bf781a38
Pass operation to Ffind_file_name_handler.
Karl Heuer <kwzh@gnu.org>
parents:
6321
diff
changeset
|
295 (let ((handler (find-file-name-handler fn 'diff-latest-backup-file))) |
6147
f89879182407
(diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents:
5542
diff
changeset
|
296 (if handler |
6321
8c667dc4566e
(diff-latest-backup-file): Call file name handler properly.
Richard M. Stallman <rms@gnu.org>
parents:
6147
diff
changeset
|
297 (funcall handler 'diff-latest-backup-file fn) |
45472
6b7dcaa53b5c
(diff-latest-backup-file): Replace the main code by a call of
Markus Rost <rost@math.uni-bielefeld.de>
parents:
45198
diff
changeset
|
298 (file-newest-backup fn)))) |
474 | 299 |
2541
09e58f572f19
(diff-parse-differences): Small robustification --- don't lose if we
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
300 (provide 'diff) |
09e58f572f19
(diff-parse-differences): Small robustification --- don't lose if we
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
301 |
662
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
474
diff
changeset
|
302 ;;; diff.el ends here |