annotate lisp/diff.el @ 42307:922f0ef2951b

(balance-windows): Use new PRESERVE-BEFORE arg to enlarge-window. Use save-selected-window. Don't try to resize windows that end at the bottom "level". Retry changing the sizes until the windows get the desired sizes. Discount the minibuffer when computing total height available.
author Richard M. Stallman <rms@gnu.org>
date Tue, 25 Dec 2001 10:34:39 +0000
parents 875aaf118d95
children 0f3260023919
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
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
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 ;; any later version.
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; GNU General Public License for more details.
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14140
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14140
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14140
diff changeset
23 ;; Boston, MA 02111-1307, USA.
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
31 ;;; Code:
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 669
diff changeset
32
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
33 (require 'compile)
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 669
diff changeset
34
18143
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
35 (defgroup diff nil
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
36 "Comparing files with `diff'."
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
37 :group 'tools)
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
38
18143
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
39 ;;;###autoload
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
40 (defcustom diff-switches "-c"
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
41 "*A string or list of strings specifying switches to be be passed to diff."
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
42 :type '(choice string (repeat string))
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
43 :group 'diff)
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
44
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
45 ;;;###autoload
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
46 (defcustom diff-command "diff"
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
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
3584a8182767 Customize.
Richard M. Stallman <rms@gnu.org>
parents: 17732
diff changeset
49 :group 'diff)
9736
093d80b4ae17 (diff-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8195
diff changeset
50
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
51 (defvar diff-regexp-alist
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
52 '(
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
53 ;; -u format: @@ -OLDSTART,OLDEND +NEWSTART,NEWEND @@
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
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
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
56 ;; -c format: *** OLDSTART,OLDEND ****
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
57 ("^\\*\\*\\* \\([0-9]+\\),[0-9]+ \\*\\*\\*\\*$" 1 nil)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
58 ;; --- NEWSTART,NEWEND ----
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
59 ("^--- \\([0-9]+\\),[0-9]+ ----$" nil 1)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
60
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
61 ;; plain diff format: OLDSTART[,OLDEND]{a,d,c}NEWSTART[,NEWEND]
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
62 ("^\\([0-9]+\\)\\(,[0-9]+\\)?[adc]\\([0-9]+\\)\\(,[0-9]+\\)?$" 1 3)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
63
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
64 ;; -e (ed) format: OLDSTART[,OLDEND]{a,d,c}
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
65 ("^\\([0-9]+\\)\\(,[0-9]+\\)?[adc]$" 1)
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
67 ;; -f format: {a,d,c}OLDSTART[ OLDEND]
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
68 ;; -n format: {a,d,c}OLDSTART LINES-CHANGED
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
69 ("^[adc]\\([0-9]+\\)\\( [0-9]+\\)?$" 1)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
70 )
14140
db5e78740d5c (diff): Fix local compilation-exit-message-function to take the proper
Roland McGrath <roland@gnu.org>
parents: 14106
diff changeset
71 "Alist (REGEXP OLD-IDX NEW-IDX) of regular expressions to match difference
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
72 sections in \\[diff] output. If REGEXP matches, the OLD-IDX'th
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
73 subexpression gives the line number in the old file, and NEW-IDX'th
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
74 subexpression gives the line number in the new file. If OLD-IDX or NEW-IDX
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
75 is nil, REGEXP matches only half a section.")
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76
1134
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
77 (defvar diff-old-file nil
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
78 "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
79 (defvar diff-new-file nil
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
80 "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
81 (defvar diff-old-temp-file nil
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
82 "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
83 (defvar diff-new-temp-file nil
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
84 "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
85
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
86 ;; See compilation-parse-errors-function (compile.el).
907
48ca3bf4b5f8 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 894
diff changeset
87 (defun diff-parse-differences (limit-search find-at-least)
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
88 (setq compilation-error-list nil)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
89 (message "Parsing differences...")
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
90
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
91 ;; 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
92 (if compilation-parsing-end (goto-char compilation-parsing-end))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 349
diff changeset
93
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
94 ;; Construct in REGEXP a regexp composed of all those in dired-regexp-alist.
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
95 (let ((regexp (mapconcat (lambda (elt)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
96 (concat "\\(" (car elt) "\\)"))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
97 diff-regexp-alist
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
98 "\\|"))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
99 ;; (GROUP-IDX OLD-IDX NEW-IDX)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
100 (groups (let ((subexpr 1))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
101 (mapcar (lambda (elt)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
102 (prog1
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
103 (cons subexpr
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
104 (mapcar (lambda (n)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
105 (and n
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
106 (+ subexpr n)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
107 (cdr elt)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
108 (setq subexpr (+ subexpr 1
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
109 (count-regexp-groupings
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
110 (car elt))))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
111 diff-regexp-alist)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
112
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
113 (new-error
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
114 (function (lambda (file subexpr)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
115 (setq compilation-error-list
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
116 (cons
1179
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
117 (cons (save-excursion
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
118 ;; Report location of message
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
119 ;; at beginning of line.
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
120 (goto-char
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
121 (match-beginning subexpr))
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
122 (beginning-of-line)
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
123 (point-marker))
7961d1af11a7 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1134
diff changeset
124 ;; Report location of corresponding text.
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
125 (let ((line (string-to-int
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
126 (buffer-substring
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
127 (match-beginning subexpr)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
128 (match-end subexpr)))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
129 (save-excursion
3874
0a694f8e1730 * diff.el (diff-parse-differences): Preserve the match data
Jim Blandy <jimb@redhat.com>
parents: 3429
diff changeset
130 (save-match-data
0a694f8e1730 * diff.el (diff-parse-differences): Preserve the match data
Jim Blandy <jimb@redhat.com>
parents: 3429
diff changeset
131 (set-buffer (find-file-noselect file)))
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
132 (save-excursion
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
133 (goto-line line)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
134 (point-marker)))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
135 compilation-error-list)))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
136
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
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
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
139 g)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
140
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
141 (while (and (not found-desired)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
142 ;; We don't just pass LIMIT-SEARCH to re-search-forward
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
143 ;; because we want to find matches containing LIMIT-SEARCH
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
144 ;; but which extend past it.
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
145 (re-search-forward regexp nil t))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
146
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
147 ;; Find which individual regexp matched.
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
148 (setq g groups)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
149 (while (and g (null (match-beginning (car (car g)))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
150 (setq g (cdr g)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
151 (setq g (car g))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
152
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
153 (if (nth 1 g) ;OLD-IDX
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
154 (funcall new-error diff-old-file (nth 1 g)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
155 (if (nth 2 g) ;NEW-IDX
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
156 (funcall new-error diff-new-file (nth 2 g)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
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
48ca3bf4b5f8 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 894
diff changeset
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
48ca3bf4b5f8 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 894
diff changeset
163 ;; or the user wanted a specific diff, and we're past it.
48ca3bf4b5f8 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 894
diff changeset
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
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
171 (setq compilation-error-list (nreverse compilation-error-list)))
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 ;;;###autoload
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
189 (defun diff (old new &optional switches)
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 "Find and display the differences between OLD and NEW files.
4759
5ca1f3073ffc (diff): Doc fix.
Brian Fox <bfox@gnu.org>
parents: 3874
diff changeset
191 Interactively the current buffer's file name is the default for NEW
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
192 and a backup file for NEW is the default for OLD.
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
193 With prefix arg, prompt for diff switches."
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 (interactive
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
195 (nconc
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
196 (let (oldf newf)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
197 (nreverse
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
198 (list
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
199 (setq newf (buffer-file-name)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
200 newf (if (and newf (file-exists-p newf))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
201 (read-file-name
39758
875aaf118d95 (diff): Display default values in prompts as `(default ...)', not `(...)'.
Miles Bader <miles@gnu.org>
parents: 38697
diff changeset
202 (concat "Diff new file: (default "
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
203 (file-name-nondirectory newf) ") ")
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
204 nil newf t)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
205 (read-file-name "Diff new file: " nil nil t)))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
206 (setq oldf (file-newest-backup newf)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
207 oldf (if (and oldf (file-exists-p oldf))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
208 (read-file-name
39758
875aaf118d95 (diff): Display default values in prompts as `(default ...)', not `(...)'.
Miles Bader <miles@gnu.org>
parents: 38697
diff changeset
209 (concat "Diff original file: (default "
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
210 (file-name-nondirectory oldf) ") ")
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
211 (file-name-directory oldf) oldf t)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
212 (read-file-name "Diff original file: "
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
213 (file-name-directory newf) nil t))))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
214 (if current-prefix-arg
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
215 (list (read-string "Diff switches: "
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
216 (if (stringp diff-switches)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
217 diff-switches
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
218 (mapconcat 'identity diff-switches " "))))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
219 nil)))
349
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 (setq new (expand-file-name new)
feacf757c5b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 old (expand-file-name old))
1134
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
222 (let ((old-alt (file-local-copy old))
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
223 (new-alt (file-local-copy new))
1110
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
224 buf)
15932
e4d0cf418b2b (diff): Don't pop to *diff* buffer. Change bogus
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
225 (save-excursion
16984
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
226 (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
227 (command
1110
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
228 (mapconcat 'identity
9736
093d80b4ae17 (diff-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8195
diff changeset
229 (append (list diff-command)
3429
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
230 ;; Use explicitly specified switches
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
231 (if switches
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
232 (if (consp switches)
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
233 switches (list switches))
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
234 ;; If not specified, use default.
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
235 (if (consp diff-switches)
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
236 diff-switches
5c0a40a8a55d (diff): Really do use arg SWITCHES.
Richard M. Stallman <rms@gnu.org>
parents: 2704
diff changeset
237 (list diff-switches)))
1110
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
238 (if (or old-alt new-alt)
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
239 (list "-L" old "-L" new))
5386
a91748bee657 (diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents: 4759
diff changeset
240 (list
a91748bee657 (diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents: 4759
diff changeset
241 (shell-quote-argument (or old-alt old)))
a91748bee657 (diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents: 4759
diff changeset
242 (list
a91748bee657 (diff): Call shell-quote-argument.
Richard M. Stallman <rms@gnu.org>
parents: 4759
diff changeset
243 (shell-quote-argument (or new-alt new))))
1110
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
244 " ")))
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
245 (setq buf
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
246 (compile-internal command
f165d900e06e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 907
diff changeset
247 "No more differences" "Diff"
1112
1dba066c1e0a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 1110
diff changeset
248 'diff-parse-differences))
15932
e4d0cf418b2b (diff): Don't pop to *diff* buffer. Change bogus
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
249 (set-buffer buf)
5542
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
250 (set (make-local-variable 'diff-old-file) old)
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
251 (set (make-local-variable 'diff-new-file) new)
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
252 (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
253 (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
254 (set (make-local-variable 'compilation-finish-function)
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
255 (function (lambda (buff msg)
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
256 (if diff-old-temp-file
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
257 (delete-file diff-old-temp-file))
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
258 (if diff-new-temp-file
004856d1b311 (diff): Select the differences buffer.
Richard M. Stallman <rms@gnu.org>
parents: 5541
diff changeset
259 (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
260 ;; 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
261 ;; 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
262 (or (fboundp 'start-process)
100ef50c2c01 * (diff-process-setup): New function, sets up the
Eli Zaretskii <eliz@gnu.org>
parents: 15932
diff changeset
263 (funcall compilation-finish-function nil nil))
1134
05c961416bb5 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1112
diff changeset
264 buf))))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 349
diff changeset
265
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
266 ;;;###autoload
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
267 (defun diff-backup (file &optional switches)
881
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
268 "Diff this file with its backup file or vice versa.
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
269 Uses the latest backup, if there are several numerical backups.
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
270 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
271 The backup file is the first file given to `diff'."
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
272 (interactive (list (read-file-name "Diff (file with backup): ")
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
273 (if current-prefix-arg
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
274 (read-string "Diff switches: "
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
275 (if (stringp diff-switches)
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
276 diff-switches
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
277 (mapconcat 'identity
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
278 diff-switches " ")))
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
279 nil)))
881
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
280 (let (bak ori)
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
281 (if (backup-file-name-p file)
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
282 (setq bak file
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
283 ori (file-name-sans-versions file))
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
284 (setq bak (or (diff-latest-backup-file file)
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
285 (error "No backup found for %s" file))
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
286 ori file))
894
41507a5a8fd7 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 881
diff changeset
287 (diff bak ori switches)))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 349
diff changeset
288
881
945558e05127 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
289 (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
290 "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
291 (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
292 (if handler
6321
8c667dc4566e (diff-latest-backup-file): Call file name handler properly.
Richard M. Stallman <rms@gnu.org>
parents: 6147
diff changeset
293 (funcall handler 'diff-latest-backup-file fn)
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 ;; First try simple backup, then the highest numbered of the
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
295 ;; numbered backups.
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
296 ;; Ignore the value of version-control because we look for existing
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
297 ;; backups, which maybe were made earlier or by another user with
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
298 ;; a different value of version-control.
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
299 (setq fn (file-chase-links (expand-file-name fn)))
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
300 (or
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
301 (let ((bak (make-backup-file-name fn)))
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
302 (if (file-exists-p bak) bak))
8195
a4f0f421752e (diff-latest-backup-file): Cope with backups stored
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
303 ;; We use BACKUPNAME to cope with backups stored in a different dir.
a4f0f421752e (diff-latest-backup-file): Cope with backups stored
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
304 (let* ((backupname (car (find-backup-file-name fn)))
a4f0f421752e (diff-latest-backup-file): Cope with backups stored
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
305 (dir (file-name-directory backupname))
a4f0f421752e (diff-latest-backup-file): Cope with backups stored
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
306 (base-versions (concat (file-name-sans-versions
a4f0f421752e (diff-latest-backup-file): Cope with backups stored
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
307 (file-name-nondirectory backupname))
a4f0f421752e (diff-latest-backup-file): Cope with backups stored
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
308 ".~"))
17732
442b07348a34 (diff-latest-backup-file):
Richard M. Stallman <rms@gnu.org>
parents: 16984
diff changeset
309 ;; This is a fluid var for backup-extract-version.
442b07348a34 (diff-latest-backup-file):
Richard M. Stallman <rms@gnu.org>
parents: 16984
diff changeset
310 (backup-extract-version-start (length base-versions)))
6147
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
311 (concat dir
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
312 (car (sort
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
313 (file-name-all-completions base-versions dir)
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
314 (function
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
315 (lambda (fn1 fn2)
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
316 (> (backup-extract-version fn1)
f89879182407 (diff-latest-backup-file): Check for a file-name-handler and run it.
Roland McGrath <roland@gnu.org>
parents: 5542
diff changeset
317 (backup-extract-version fn2))))))))))))
474
c3bbd755b7da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 349
diff changeset
318
2541
09e58f572f19 (diff-parse-differences): Small robustification --- don't lose if we
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
319 (provide 'diff)
09e58f572f19 (diff-parse-differences): Small robustification --- don't lose if we
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2307
diff changeset
320
662
8a533acedb77 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 474
diff changeset
321 ;;; diff.el ends here