Mercurial > emacs
annotate lisp/diff.el @ 53879:e3771c262410
New file. Move original fringe related declarations
and code from dispextern.h and xdisp.c here.
Rework code to support user defined fringe bitmaps, redefining
standard bitmaps, ability to overlay user defined bitmap with
overlay arrow bitmap, and add faces to bitmaps.
(Voverflow_newline_into_fringe): Declare here.
(enum fringe_bitmap_align): New enum.
(..._bits): All bitmaps are now defined without bitswapping; that
is now done in init_fringe_once (if necessary).
(standard_bitmaps): New array with specifications for the
standard fringe bitmaps.
(fringe_faces): New array.
(valid_fringe_bitmap_id_p): New function.
(draw_fringe_bitmap_1): Rename from draw_fringe_bitmap.
(draw_fringe_bitmap): New function which draws fringe bitmap,
possibly overlaying bitmap with cursor in right fringe or the
overlay arrow in the left fringe.
(update_window_fringes): Do not handle overlay arrow here.
Compare and copy fringe bitmap faces.
(init_fringe_bitmap): New function.
(Fdefine_fringe_bitmap, Fdestroy_fringe_bitmap): New DEFUNs to
define and destroy user defined fringe bitmaps.
(Fset_fringe_bitmap_face): New DEFUN to set face for a fringe bitmap.
(Ffringe_bitmaps_at_pos): New DEFUN to read current fringe bitmaps.
(syms_of_fringe): New function. Defsubr new DEFUNs.
DEFVAR_LISP Voverflow_newline_into_fringe.
(init_fringe_once, init_fringe): New functions.
(w32_init_fringe, w32_reset_fringes) [WINDOWS_NT]: New functions.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Sun, 08 Feb 2004 23:18:16 +0000 |
parents | e8f59117cabb |
children | 0ceb9e9ae2b0 |
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 | |
52894
e8f59117cabb
(diff-parse-differences): Don't visit the files now;
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
121 (list (save-excursion |
1179 | 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. | |
52894
e8f59117cabb
(diff-parse-differences): Don't visit the files now;
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
129 (list file nil) |
e8f59117cabb
(diff-parse-differences): Don't visit the files now;
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
130 (string-to-int |
e8f59117cabb
(diff-parse-differences): Don't visit the files now;
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
131 (buffer-substring |
e8f59117cabb
(diff-parse-differences): Don't visit the files now;
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
132 (match-beginning subexpr) |
e8f59117cabb
(diff-parse-differences): Don't visit the files now;
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
133 (match-end subexpr))) |
e8f59117cabb
(diff-parse-differences): Don't visit the files now;
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
134 nil) |
894 | 135 compilation-error-list))))) |
136 | |
137 (found-desired nil) | |
1215
92554bb95d51
(diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents:
1179
diff
changeset
|
138 (num-loci-found 0) |
894 | 139 g) |
140 | |
141 (while (and (not found-desired) | |
142 ;; We don't just pass LIMIT-SEARCH to re-search-forward | |
143 ;; because we want to find matches containing LIMIT-SEARCH | |
144 ;; but which extend past it. | |
145 (re-search-forward regexp nil t)) | |
146 | |
147 ;; Find which individual regexp matched. | |
148 (setq g groups) | |
149 (while (and g (null (match-beginning (car (car g))))) | |
150 (setq g (cdr g))) | |
151 (setq g (car g)) | |
152 | |
153 (if (nth 1 g) ;OLD-IDX | |
154 (funcall new-error diff-old-file (nth 1 g))) | |
155 (if (nth 2 g) ;NEW-IDX | |
156 (funcall new-error diff-new-file (nth 2 g))) | |
157 | |
1215
92554bb95d51
(diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents:
1179
diff
changeset
|
158 (setq num-loci-found (1+ num-loci-found)) |
1134
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
159 (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
|
160 (>= num-loci-found find-at-least)) |
907 | 161 (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
|
162 ;; We have found as many new loci as the user wants, |
907 | 163 ;; or the user wanted a specific diff, and we're past it. |
164 (setq found-desired t))) | |
25413
c23f7efbfd57
(diff-parse-differences):
Richard M. Stallman <rms@gnu.org>
parents:
19836
diff
changeset
|
165 (set-marker compilation-parsing-end |
c23f7efbfd57
(diff-parse-differences):
Richard M. Stallman <rms@gnu.org>
parents:
19836
diff
changeset
|
166 (if found-desired (point) |
c23f7efbfd57
(diff-parse-differences):
Richard M. Stallman <rms@gnu.org>
parents:
19836
diff
changeset
|
167 ;; 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
|
168 ;; 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
|
169 (point-max))) |
1215
92554bb95d51
(diff): Don't print echo area message.
Richard M. Stallman <rms@gnu.org>
parents:
1179
diff
changeset
|
170 (message "Parsing differences...done")) |
894 | 171 (setq compilation-error-list (nreverse compilation-error-list))) |
349 | 172 |
16984
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
173 (defun diff-process-setup () |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
174 "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
|
175 ;; Avoid frightening people with "abnormally terminated" |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
176 ;; if diff finds differences. |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
177 (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
|
178 (lambda (status code msg) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
179 (cond ((not (eq status 'exit)) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
180 (cons msg code)) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
181 ((zerop code) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
182 '("finished (no differences)\n" . "no differences")) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
183 ((= code 1) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
184 '("finished\n" . "differences found")) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
185 (t |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
186 (cons msg code)))))) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
187 |
349 | 188 ;;;###autoload |
47301
bac8aaf18835
(diff): Add optional argument no-async, and use the above argument.
Colin Walters <walters@gnu.org>
parents:
45472
diff
changeset
|
189 (defun diff (old new &optional switches no-async) |
349 | 190 "Find and display the differences between OLD and NEW files. |
4759 | 191 Interactively the current buffer's file name is the default for NEW |
894 | 192 and a backup file for NEW is the default for OLD. |
47301
bac8aaf18835
(diff): Add optional argument no-async, and use the above argument.
Colin Walters <walters@gnu.org>
parents:
45472
diff
changeset
|
193 With prefix arg, prompt for diff switches. |
47320
a1336c8c6174
(diff): Doc fix.
Markus Rost <rost@math.uni-bielefeld.de>
parents:
47301
diff
changeset
|
194 If NO-ASYNC is non-nil, call diff synchronously." |
349 | 195 (interactive |
894 | 196 (nconc |
197 (let (oldf newf) | |
198 (nreverse | |
199 (list | |
200 (setq newf (buffer-file-name) | |
201 newf (if (and newf (file-exists-p newf)) | |
202 (read-file-name | |
39758
875aaf118d95
(diff): Display default values in prompts as `(default ...)', not `(...)'.
Miles Bader <miles@gnu.org>
parents:
38697
diff
changeset
|
203 (concat "Diff new file: (default " |
894 | 204 (file-name-nondirectory newf) ") ") |
205 nil newf t) | |
206 (read-file-name "Diff new file: " nil nil t))) | |
207 (setq oldf (file-newest-backup newf) | |
208 oldf (if (and oldf (file-exists-p oldf)) | |
209 (read-file-name | |
39758
875aaf118d95
(diff): Display default values in prompts as `(default ...)', not `(...)'.
Miles Bader <miles@gnu.org>
parents:
38697
diff
changeset
|
210 (concat "Diff original file: (default " |
894 | 211 (file-name-nondirectory oldf) ") ") |
212 (file-name-directory oldf) oldf t) | |
213 (read-file-name "Diff original file: " | |
214 (file-name-directory newf) nil t)))))) | |
215 (if current-prefix-arg | |
216 (list (read-string "Diff switches: " | |
217 (if (stringp diff-switches) | |
218 diff-switches | |
219 (mapconcat 'identity diff-switches " ")))) | |
220 nil))) | |
349 | 221 (setq new (expand-file-name new) |
222 old (expand-file-name old)) | |
1134
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
223 (let ((old-alt (file-local-copy old)) |
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
224 (new-alt (file-local-copy new)) |
1110
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
225 buf) |
15932
e4d0cf418b2b
(diff): Don't pop to *diff* buffer. Change bogus
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
226 (save-excursion |
16984
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
227 (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
|
228 (command |
1110
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
229 (mapconcat 'identity |
9736
093d80b4ae17
(diff-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
8195
diff
changeset
|
230 (append (list diff-command) |
3429
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
231 ;; Use explicitly specified switches |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
232 (if switches |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
233 (if (consp switches) |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
234 switches (list switches)) |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
235 ;; If not specified, use default. |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
236 (if (consp diff-switches) |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
237 diff-switches |
5c0a40a8a55d
(diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents:
2704
diff
changeset
|
238 (list diff-switches))) |
1110
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
239 (if (or old-alt new-alt) |
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
240 (list "-L" old "-L" new)) |
5386
a91748bee657
(diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents:
4759
diff
changeset
|
241 (list |
a91748bee657
(diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents:
4759
diff
changeset
|
242 (shell-quote-argument (or old-alt old))) |
a91748bee657
(diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents:
4759
diff
changeset
|
243 (list |
a91748bee657
(diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents:
4759
diff
changeset
|
244 (shell-quote-argument (or new-alt new)))) |
1110
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
245 " "))) |
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
246 (setq buf |
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
247 (compile-internal command |
f165d900e06e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
907
diff
changeset
|
248 "No more differences" "Diff" |
47301
bac8aaf18835
(diff): Add optional argument no-async, and use the above argument.
Colin Walters <walters@gnu.org>
parents:
45472
diff
changeset
|
249 'diff-parse-differences |
bac8aaf18835
(diff): Add optional argument no-async, and use the above argument.
Colin Walters <walters@gnu.org>
parents:
45472
diff
changeset
|
250 nil nil nil nil nil nil no-async)) |
15932
e4d0cf418b2b
(diff): Don't pop to *diff* buffer. Change bogus
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
251 (set-buffer buf) |
5542
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
252 (set (make-local-variable 'diff-old-file) old) |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
253 (set (make-local-variable 'diff-new-file) new) |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
254 (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
|
255 (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
|
256 (set (make-local-variable 'compilation-finish-function) |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
257 (function (lambda (buff msg) |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
258 (if diff-old-temp-file |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
259 (delete-file diff-old-temp-file)) |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
260 (if diff-new-temp-file |
004856d1b311
(diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents:
5541
diff
changeset
|
261 (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
|
262 ;; 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
|
263 ;; 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
|
264 (or (fboundp 'start-process) |
100ef50c2c01
* (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents:
15932
diff
changeset
|
265 (funcall compilation-finish-function nil nil)) |
1134
05c961416bb5
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
1112
diff
changeset
|
266 buf)))) |
474 | 267 |
894 | 268 ;;;###autoload |
269 (defun diff-backup (file &optional switches) | |
881
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
270 "Diff this file with its backup file or vice versa. |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
271 Uses the latest backup, if there are several numerical backups. |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
272 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
|
273 The backup file is the first file given to `diff'." |
894 | 274 (interactive (list (read-file-name "Diff (file with backup): ") |
275 (if current-prefix-arg | |
276 (read-string "Diff switches: " | |
277 (if (stringp diff-switches) | |
278 diff-switches | |
279 (mapconcat 'identity | |
280 diff-switches " "))) | |
281 nil))) | |
881
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
282 (let (bak ori) |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
283 (if (backup-file-name-p file) |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
284 (setq bak file |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
285 ori (file-name-sans-versions file)) |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
286 (setq bak (or (diff-latest-backup-file file) |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
287 (error "No backup found for %s" file)) |
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
288 ori file)) |
894 | 289 (diff bak ori switches))) |
474 | 290 |
881
945558e05127
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
846
diff
changeset
|
291 (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
|
292 "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
|
293 (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
|
294 (if handler |
6321
8c667dc4566e
(diff-latest-backup-file): Call file name handler properly.
Richard M. Stallman <rms@gnu.org>
parents:
6147
diff
changeset
|
295 (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
|
296 (file-newest-backup fn)))) |
474 | 297 |
2541
09e58f572f19
(diff-parse-differences): Small robustification --- don't lose if we
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
298 (provide 'diff) |
09e58f572f19
(diff-parse-differences): Small robustification --- don't lose if we
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
2307
diff
changeset
|
299 |
52401 | 300 ;;; arch-tag: 7de2c29b-7ea5-4b85-9b9d-72dd860de2bd |
662
8a533acedb77
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
474
diff
changeset
|
301 ;;; diff.el ends here |