annotate lisp/hilit-chg.el @ 93940:64ee685db81b

(vc-default-mode-line-string): Use ? for missing.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Wed, 09 Apr 2008 20:23:11 +0000
parents 49c6cb8751f6
children 6ab801933124
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; hilit-chg.el --- minor mode displaying buffer changes with special face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
74442
b2e5081b9320 Update copyright years.
Glenn Morris <rgm@gnu.org>
parents: 68752
diff changeset
3 ;; Copyright (C) 1998, 2000, 2001, 2002, 2003, 2004,
79721
73661ddc7ac7 Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78492
diff changeset
4 ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
23614
ca8cd9d60c47 Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 23289
diff changeset
6 ;; Author: Richard Sharman <rsharman@pobox.com>
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: faces
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
23101
6193531a173e Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 23046
diff changeset
9 ;; This file is part of GNU Emacs.
6193531a173e Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 23046
diff changeset
10
38401
64d8d90d180d Fix license commentary.
Gerd Moellmann <gerd@gnu.org>
parents: 30962
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
78236
9355f9b7bbff Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 77896
diff changeset
13 ;; the Free Software Foundation; either version 3, or (at your option)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; any later version.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
38401
64d8d90d180d Fix license commentary.
Gerd Moellmann <gerd@gnu.org>
parents: 30962
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64091
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63351
diff changeset
23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
6fb026ad601f Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63351
diff changeset
24 ;; Boston, MA 02110-1301, USA.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;; A minor mode: "Highlight Changes mode".
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
29
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
30 ;; When Highlight Changes mode is enabled changes to the buffer are
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
31 ;; recorded with a text property. Normally these ranges of text are
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
32 ;; displayed in a distinctive face. However, sometimes it is
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
33 ;; desirable to temporarily not see these changes. Instead of
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
34 ;; disabling Highlight Changes mode (which would remove the text property)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
35 ;; use the command highlight-changes-visible-mode.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
36
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
37 ;; Two faces are supported: one for changed or inserted text and
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
38 ;; another for the first character after text has been deleted.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
40 ;; When Highlight Changes mode is on (even if changes are not visible)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
41 ;; you can go to the next or previous change with
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
42 ;; `highlight-changes-next-change' or `highlight-changes-previous-change'.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
43
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
44 ;; Command highlight-compare-with-file shows changes in this file
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
45 ;; compared with another file (by default the previous version of the
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
46 ;; file).
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
47 ;;
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
48 ;; The command highlight-compare-buffers compares two buffers by
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
49 ;; highlighting their differences.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
50
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;; You can "age" different sets of changes by using
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
52 ;; `highlight-changes-rotate-faces'. This rotates through a series
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;; of different faces, so you can distinguish "new" changes from "older"
23046
87169117f80c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 22998
diff changeset
54 ;; changes. You can customize these "rotated" faces in two ways. You can
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;; either explicitly define each face by customizing
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;; `highlight-changes-face-list'. If, however, the faces differ from
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
57 ;; `highlight-changes-face' only in the foreground color, you can simply set
63351
071d62682d14 (highlight-changes-colors): Rename from `highlight-changes-colours'.
Juanma Barranquero <lekktu@gmail.com>
parents: 63252
diff changeset
58 ;; `highlight-changes-colors'. If `highlight-changes-face-list' is nil when
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;; the faces are required they will be constructed from
63351
071d62682d14 (highlight-changes-colors): Rename from `highlight-changes-colours'.
Juanma Barranquero <lekktu@gmail.com>
parents: 63252
diff changeset
60 ;; `highlight-changes-colors'.
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
61
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
62 ;; You can automatically rotate faces when the buffer is saved;
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
63 ;; see function `highlight-changes-rotate-faces' for how to do this.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
64
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
65 ;; There are two hooks used by `highlight-changes-mode':
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;; `highlight-changes-enable-hook' - is run when Highlight Changes mode
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
67 ;; is enabled for a buffer.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; `highlight-changes-disable-hook' - is run when Highlight Changes mode
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
69 ;; is disabled for a buffer.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
70
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; Example usage:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; (defun my-highlight-changes-enable-hook ()
64587
e35a761796a9 (highlight-changes-global-initial-state, highlight-compare-buffers,
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
73 ;; (add-hook 'write-file-functions 'highlight-changes-rotate-faces nil t)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;; )
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
75 ;;
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; (defun my-highlight-changes-disable-hook ()
64587
e35a761796a9 (highlight-changes-global-initial-state, highlight-compare-buffers,
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
77 ;; (remove-hook 'write-file-functions 'highlight-changes-rotate-faces t)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;; )
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
79 ;;
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;; (add-hook 'highlight-changes-enable-hook 'my-highlight-changes-enable-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;; (add-hook 'highlight-changes-disable-hook
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; 'my-highlight-changes-disable-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
85 ;; Automatically enabling Highlight Changes mode
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;; Normally, Highlight Changes mode is turned on explicitly in a buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;; If you prefer to have it automatically invoked you can do it as
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 ;; follows.
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
92
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 ;; 1. Most modes have a major-hook, typically called MODE-hook. You
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
94 ;; can use `add-hook' to call `highlight-changes-mode'.
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
95
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 ;; Example:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;; (add-hook 'c-mode-hook 'highlight-changes-mode)
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
98
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 ;; However, this cannot be done for Fundamental mode for there is no
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 ;; such hook.
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
101
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
102 ;; 2. You can use the function `global-highlight-changes-mode'
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ;; This function, which is fashioned after the way `global-font-lock' works,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 ;; toggles on or off global Highlight Changes mode. When activated, it turns
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
106 ;; on Highlight Changes mode in all "suitable" existing buffers and will turn
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;; it on in new "suitable" buffers to be created.
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
108
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ;; A buffer's "suitability" is determined by variable
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
110 ;; `highlight-changes-global-modes', as follows. If it is
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 ;; * nil -- then no buffers are suitable;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ;; * a function -- this function is called and the result is used. As
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
113 ;; an example, if the value is `buffer-file-name' then all buffers
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ;; who are visiting files are suitable, but others (like dired
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;; buffers) are not;
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
116 ;; * a list -- then the buffer is suitable if and only if its mode is in the
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
117 ;; list, except if the first element is `not', in which case the test
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;; is reversed (i.e. it is a list of unsuitable modes).
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
119 ;; * Otherwise, the buffer is suitable if its name does not begin with
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ;; ` ' or `*' and if `buffer-file-name' returns true.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
122 ;; To enable it for future sessions put this in your ~/.emacs file:
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
123 ;; (global-highlight-changes-mode t)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 ;; Possible bindings:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ;; (global-set-key '[C-right] 'highlight-changes-next-change)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 ;; (global-set-key '[C-left] 'highlight-changes-previous-change)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 ;;
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
130 ;; Other interactive functions (that could be bound if desired):
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 ;; highlight-changes-mode
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
132 ;; highlight-changes-toggle-visibility
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 ;; highlight-changes-remove-highlight
23289
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
134 ;; highlight-compare-with-file
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
135 ;; highlight-compare-buffers
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
136 ;; highlight-changes-rotate-faces
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 ;;; Bugs:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 ;; - the next-change and previous-change functions are too literal;
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
142 ;; they should find the next "real" change, in other words treat
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 ;; consecutive changes as one.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
146 ;;; To do (maybe), notes, ...
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 ;; - having different faces for deletion and non-deletion: is it
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 ;; really worth the hassle?
23289
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
150 ;; - highlight-compare-with-file should allow RCS files - e.g. nice to be
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
151 ;; able to say show changes compared with version 2.1.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 ;;; History:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
156 ;; R Sharman (rsharman@pobox.com) Feb 1998:
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 ;; - initial release as change-mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 ;; Jari Aalto <jari.aalto@ntc.nokia.com> Mar 1998
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
159 ;; - fixes for byte compile errors
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 ;; - use eval-and-compile for autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 ;; Marijn Ros <J.M.Ros@fys.ruu.nl> Mar 98
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 ;; - suggested turning it on by default
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 ;; Eric Ludlam <zappo@gnu.org> Suggested using overlays.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 ;; July 98
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 ;; - global mode and various stuff added
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 ;; - Changed to use overlays
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 ;; August 98
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
168 ;; - renamed to Highlight Changes mode.
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
169 ;; Dec 2003
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
170 ;; - Use require for ediff stuff
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
171 ;; - Added highlight-compare-buffers
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
172 ;; Mar 2008
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
173 ;; - Made highlight-changes-mode like other modes (toggle on/off)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
174 ;; - Added new command highlight-changes-visible-mode to replace the
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
175 ;; previous active/passive aspect of highlight-changes-mode.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
176 ;; - Removed highlight-changes-toggle-hook
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
177 ;; - Put back eval-and-compile inadvertently dropped
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
178
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 ;;; Code:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 (require 'wid-edit)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 ;; ====================== Customization =======================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 (defgroup highlight-changes nil
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 "Highlight Changes mode."
24554
9a9a307e9a57 (highlight-changes): Add defgroup :version.
Dave Love <fx@gnu.org>
parents: 23614
diff changeset
187 :version "20.4"
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 :group 'faces)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 ;; Face information: How the changes appear.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 ;; Defaults for face: red foreground, no change to background,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 ;; and underlined if a change is because of a deletion.
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
195 ;; Note: underlining is helpful in that it shows up changes in white space.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 ;; However, having it set for non-delete changes can be annoying because all
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 ;; indentation on inserts gets underlined (which can look pretty ugly!).
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
199 (defface highlight-changes
64587
e35a761796a9 (highlight-changes-global-initial-state, highlight-compare-buffers,
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
200 '((((min-colors 88) (class color)) (:foreground "red1"))
61394
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 60902
diff changeset
201 (((class color)) (:foreground "red" ))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 (t (:inverse-video t)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 "Face used for highlighting changes."
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
204 :group 'highlight-changes)
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
205 ;; backward-compatibility alias
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
206 (put 'highlight-changes-face 'face-alias 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 ;; This looks pretty ugly, actually. Maybe the underline should be removed.
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
209 (defface highlight-changes-delete
61394
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 60902
diff changeset
210 '((((min-colors 88) (class color)) (:foreground "red1" :underline t))
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 60902
diff changeset
211 (((class color)) (:foreground "red" :underline t))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 (t (:inverse-video t)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 "Face used for highlighting deletions."
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
214 :group 'highlight-changes)
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
215 ;; backward-compatibility alias
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
216 (put 'highlight-changes-delete-face 'face-alias 'highlight-changes-delete)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219
63351
071d62682d14 (highlight-changes-colors): Rename from `highlight-changes-colours'.
Juanma Barranquero <lekktu@gmail.com>
parents: 63252
diff changeset
220 ;; A (not very good) default list of colors to rotate through.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 ;;
63351
071d62682d14 (highlight-changes-colors): Rename from `highlight-changes-colours'.
Juanma Barranquero <lekktu@gmail.com>
parents: 63252
diff changeset
222 (defcustom highlight-changes-colors
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 (if (eq (frame-parameter nil 'background-mode) 'light)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 ;; defaults for light background:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 '( "magenta" "blue" "darkgreen" "chocolate" "sienna4" "NavyBlue")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 ;; defaults for dark background:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 '("yellow" "magenta" "blue" "maroon" "firebrick" "green4" "DarkOrchid"))
92149
e8b93cb7392a Remove spurious * in defcustom docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80118
diff changeset
228 "Colors used by `highlight-changes-rotate-faces'.
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
229 The newest rotated change will be displayed in the first element of this list,
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 the next older will be in the second element etc.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
232 This list is used if `highlight-changes-face-list' is nil, otherwise that
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
233 variable overrides this list. If you only care about foreground
63252
f4b47991b594 (highlight-changes-colours highlight-changes-face-list,
Juanma Barranquero <lekktu@gmail.com>
parents: 63207
diff changeset
234 colors then use this, if you want fancier faces then set
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 `highlight-changes-face-list'."
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
236 :type '(repeat color)
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
237 :group 'highlight-changes)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
238
63351
071d62682d14 (highlight-changes-colors): Rename from `highlight-changes-colours'.
Juanma Barranquero <lekktu@gmail.com>
parents: 63252
diff changeset
239 (define-obsolete-variable-alias 'highlight-changes-colours
071d62682d14 (highlight-changes-colors): Rename from `highlight-changes-colours'.
Juanma Barranquero <lekktu@gmail.com>
parents: 63252
diff changeset
240 'highlight-changes-colors "22.1")
071d62682d14 (highlight-changes-colors): Rename from `highlight-changes-colours'.
Juanma Barranquero <lekktu@gmail.com>
parents: 63252
diff changeset
241
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
243 ;; When you invoke highlight-changes-mode, should highlight-changes-visible-mode
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
244 ;; be on or off?
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
245
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
246 (define-obsolete-variable-alias 'highlight-changes-initial-state
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
247 'highlight-changes-visibility-initial-state)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
248
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
249 (defcustom highlight-changes-visibility-initial-state t
93624
cb11f55e7732 (highlight-changes-visibility-initial-state, hilit-chg-update,
Juanma Barranquero <lekktu@gmail.com>
parents: 93620
diff changeset
250 "Controls whether changes are initially visible in Highlight Changes mode.
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
251
93624
cb11f55e7732 (highlight-changes-visibility-initial-state, hilit-chg-update,
Juanma Barranquero <lekktu@gmail.com>
parents: 93620
diff changeset
252 This controls the initial value of `highlight-changes-visible-mode'.
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
253 When a buffer is in Highlight Changes mode the function
93624
cb11f55e7732 (highlight-changes-visibility-initial-state, hilit-chg-update,
Juanma Barranquero <lekktu@gmail.com>
parents: 93620
diff changeset
254 `highlight-changes-visible-mode' is used to toggle the mode on or off."
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
255 :type 'boolean
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
256 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
258 ;; highlight-changes-global-initial-state has been removed
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
259
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
260
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
262 ;; These are the strings displayed in the mode-line for the minor mode:
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
263
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
264 (defcustom highlight-changes-visible-string " +Chg"
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
265 "The string used when in Highlight Changes mode and changes are visible.
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
266 This should be set to nil if no indication is desired, or to
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 a string with a leading space."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 :type '(choice string
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 (const :tag "None" nil))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
270 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
272 (define-obsolete-variable-alias 'highlight-changes-active-string
93626
49c6cb8751f6 (global-highlight-changes-mode, highlight-changes-passive-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 93624
diff changeset
273 'highlight-changes-visible-string "23.1")
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
274
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
275 (defcustom highlight-changes-invisible-string " -Chg"
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
276 "The string used when in Highlight Changes mode and changes are hidden.
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
277 This should be set to nil if no indication is desired, or to
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 a string with a leading space."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 :type '(choice string
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 (const :tag "None" nil))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
281 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
283 (define-obsolete-variable-alias 'highlight-changes-passive-string
93626
49c6cb8751f6 (global-highlight-changes-mode, highlight-changes-passive-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 93624
diff changeset
284 'highlight-changes-invisible-string "23.1")
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
285
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
286
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
287
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 (defcustom highlight-changes-global-modes t
92149
e8b93cb7392a Remove spurious * in defcustom docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80118
diff changeset
289 "Determine whether a buffer is suitable for global Highlight Changes mode.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290
43132
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
291 A function means call that function to decide: if it returns non-nil,
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
292 the buffer is suitable.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293
43132
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
294 A list means the elements are major modes suitable for Highlight
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
295 Changes mode, or a list whose first element is `not' followed by major
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
296 modes which are not suitable.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297
64587
e35a761796a9 (highlight-changes-global-initial-state, highlight-compare-buffers,
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
298 A value of t means the buffer is suitable if it is visiting a file and
e35a761796a9 (highlight-changes-global-initial-state, highlight-compare-buffers,
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
299 its name does not begin with ` ' or `*'.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
301 A value of nil means no buffers are suitable for `global-highlight-changes-mode'
41701
d1ec9ab9d09d Doc fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41575
diff changeset
302 \(effectively disabling the mode).
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303
68524
2f9b0e4b3a95 (highlight-changes-initial-state, highlight-changes-global-initial-state):
Juanma Barranquero <lekktu@gmail.com>
parents: 64895
diff changeset
304 Example:
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
305 (c-mode c++-mode)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 means that Highlight Changes mode is turned on for buffers in C and C++
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 modes only."
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
308 :type '(choice
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 (const :tag "all non-special buffers visiting files" t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 (set :menu-tag "specific modes" :tag "modes"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 :value (not)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 (const :tag "All except these" not)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 (repeat :tag "Modes" :inline t (symbol :tag "mode")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 (function :menu-tag "determined by function"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 :value buffer-file-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 (const :tag "none" nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 )
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
318 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 (defcustom highlight-changes-global-changes-existing-buffers nil
92149
e8b93cb7392a Remove spurious * in defcustom docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80118
diff changeset
321 "If non-nil, toggling global Highlight Changes mode affects existing buffers.
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
322 Normally, `global-highlight-changes' affects only new buffers (to be
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
323 created). However, if `highlight-changes-global-changes-existing-buffers'
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
324 is non-nil, then turning on `global-highlight-changes' will turn on
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
325 Highlight Changes mode in suitable buffers, and turning the mode off will
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 remove it from existing buffers."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 :type 'boolean
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 :group 'highlight-changes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
330 ;; These are for internal use.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
331
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
332 (defvar hilit-chg-list nil)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
333 (defvar hilit-chg-string " ??")
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
334
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
335 (make-variable-buffer-local 'hilit-chg-string)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
336
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
337
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
338
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
339 ;;; Functions...
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
340
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
341 ;;;###autoload
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
342 (define-minor-mode highlight-changes-mode
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
343 "Toggle Highlight Changes mode.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
344
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
345 With ARG, turn Highlight Changes mode on if and only if arg is positive.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
346
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
347 In Highlight Changes mode changes are recorded with a text property.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
348 Normally they are displayed in a distinctive face, but command
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
349 \\[highlight-changes-visible-mode] can be used to toggles this
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
350 on and off.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
351
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
352 Other functions for buffers in this mode include:
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
353 \\[highlight-changes-next-change] - move point to beginning of next change
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
354 \\[highlight-changes-previous-change] - move to beginning of previous change
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
355 \\[highlight-changes-remove-highlight] - remove the change face from the region
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
356 \\[highlight-changes-rotate-faces] - rotate different \"ages\" of changes
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
357 through various faces.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
358 \\[highlight-compare-with-file] - mark text as changed by comparing this
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
359 buffer with the contents of a file
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
360 \\[highlight-compare-buffers] highlights differences between two buffers.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
361
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
362 Hook variables:
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
363 `highlight-changes-enable-hook': called when enabling Highlight Changes mode.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
364 `highlight-changes-disable-hook': called when disabling Highlight Changes mode."
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
365 nil ;; init-value
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
366 hilit-chg-string ;; lighter
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
367 nil ;; keymap
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
368 (if (or (display-color-p)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
369 (and (fboundp 'x-display-grayscale-p) (x-display-grayscale-p)))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
370 (progn
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
371 (if (and (eq this-command 'global-highlight-changes-mode)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
372 (not highlight-changes-global-changes-existing-buffers))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
373 ;; The global mode has toggled the value of the mode variable,
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
374 ;; but not other changes have been mode, so we are safe
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
375 ;; to retoggle it.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
376 (setq highlight-changes-mode (not highlight-changes-mode)))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
377 (if highlight-changes-mode
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
378 ;; it is being turned on
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
379 ;; the hook has been moved into hilit-chg-set
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
380 ;; (run-hooks 'highlight-changes-enable-hook))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
381 (hilit-chg-set)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
382 ;; mode is turned off
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
383 (hilit-chg-clear)))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
384 (message "Highlight Changes mode requires color or grayscale display")))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
385
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
386
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
387 ;;;###autoload
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
388 (define-minor-mode highlight-changes-visible-mode
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
389 "Toggle visiblility of changes when buffer is in Highlight Changes mode.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
390
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
391 This mode only has an effect when Highlight Changes mode is on.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
392 It allows toggling between whether or not the changed text is displayed
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
393 in a distinctive face.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
394
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
395 The default value can be customized with variable
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
396 `highlight-changes-visibility-initial-state'
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
397
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
398 This command does not itself set highlight-changes mode."
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
399
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
400 t ;; init-value
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
401 nil ;; lighter
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
402 nil ;; keymap
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
403
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
404 (hilit-chg-update)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
405 )
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
406
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
407
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 (defun hilit-chg-cust-fix-changes-face-list (w wc &optional event)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 ;; When customization function `highlight-changes-face-list' inserts a new
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
410 ;; face it uses the default face. We don't want the user to modify this
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
411 ;; face, so we rename the faces in the list on an insert. The rename is
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 ;; actually done by copying the faces so user-defined faces still remain
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 ;; in the same order.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 ;; The notifying the parent is needed because without it changes to the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 ;; faces are saved but not to the actual list itself.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 (let ((old-list (widget-value w)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 (if (member 'default old-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 (let
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 ((p (reverse old-list))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 (n (length old-list))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 new-name old-name
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 (new-list nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 (setq old-name (car p))
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
426 (setq new-name (intern (format "highlight-changes-%d" n)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 (if (eq old-name new-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 nil
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 ;; A new face has been inserted: we don't want to modify the
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
430 ;; default face so copy it. Better, though, (I think) is to
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 ;; make a new face have the same attributes as
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
432 ;; the `highlight-changes' face.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 (if (eq old-name 'default)
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
434 (copy-face 'highlight-changes new-name)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 (copy-face old-name new-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 ))
68524
2f9b0e4b3a95 (highlight-changes-initial-state, highlight-changes-global-initial-state):
Juanma Barranquero <lekktu@gmail.com>
parents: 64895
diff changeset
437 (setq new-list (append (list new-name) new-list))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (setq n (1- n))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 (setq p (cdr p)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440 (if (equal new-list (widget-value w))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 nil ;; (message "notify: no change!")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 (widget-value-set w new-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 (widget-setup)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 ;; (message "notify: no default here!")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 (let ((parent (widget-get w :parent)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 (when parent
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
450 (widget-apply parent :notify w event))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 (defcustom highlight-changes-face-list nil
92149
e8b93cb7392a Remove spurious * in defcustom docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80118
diff changeset
454 "A list of faces used when rotating changes.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 Normally the variable is initialized to nil and the list is created from
63351
071d62682d14 (highlight-changes-colors): Rename from `highlight-changes-colours'.
Juanma Barranquero <lekktu@gmail.com>
parents: 63252
diff changeset
456 `highlight-changes-colors' when needed. However, you can set this variable
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 to any list of faces. You will have to do this if you want faces which
63252
f4b47991b594 (highlight-changes-colours highlight-changes-face-list,
Juanma Barranquero <lekktu@gmail.com>
parents: 63207
diff changeset
458 don't just differ from the `highlight-changes' face by the foreground color.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 Otherwise, this list will be constructed when needed from
63351
071d62682d14 (highlight-changes-colors): Rename from `highlight-changes-colours'.
Juanma Barranquero <lekktu@gmail.com>
parents: 63252
diff changeset
460 `highlight-changes-colors'."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 :type '(choice
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
462 (repeat
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 :notify hilit-chg-cust-fix-changes-face-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 face )
63351
071d62682d14 (highlight-changes-colors): Rename from `highlight-changes-colours'.
Juanma Barranquero <lekktu@gmail.com>
parents: 63252
diff changeset
465 (const :tag "Derive from highlight-changes-colors" nil)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 )
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
467 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469
93624
cb11f55e7732 (highlight-changes-visibility-initial-state, hilit-chg-update,
Juanma Barranquero <lekktu@gmail.com>
parents: 93620
diff changeset
470 (defun hilit-chg-map-changes (func &optional start-position end-position)
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
471 "Call function FUNC for each region used by Highlight Changes mode.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
472 If START-POSITION is nil, (point-min) is used.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
473 If END-POSITION is nil, (point-max) is used.
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
474 FUNC is called with 3 params: PROPERTY START STOP."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 (let ((start (or start-position (point-min)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 (limit (or end-position (point-max)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 prop end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 (while (and start (< start limit))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 (setq prop (get-text-property start 'hilit-chg))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 (setq end (text-property-not-all start limit 'hilit-chg prop))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 (funcall func prop start (or end limit)))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
483 (setq start end))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 (defun hilit-chg-display-changes (&optional beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 "Display face information for Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
489 An overlay from BEG to END containing a change face is added from the
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
490 information in the text property of type `hilit-chg'.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
492 This is the opposite of `hilit-chg-hide-changes'."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 (hilit-chg-map-changes 'hilit-chg-make-ov beg end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 (defun hilit-chg-make-ov (prop start end)
43030
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
497 (or prop
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
498 (error "hilit-chg-make-ov: prop is nil"))
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
499 ;; For the region create overlays with a distincive face
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
500 ;; and the text property 'hilit-chg.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 (let ((ov (make-overlay start end))
92149
e8b93cb7392a Remove spurious * in defcustom docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80118
diff changeset
502 (face (if (eq prop 'hilit-chg-delete)
e8b93cb7392a Remove spurious * in defcustom docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80118
diff changeset
503 'highlight-changes-delete
e8b93cb7392a Remove spurious * in defcustom docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80118
diff changeset
504 (nth 1 (member prop hilit-chg-list)))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 (if face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 (progn
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
507 ;; We must mark the face, that is the purpose of the overlay.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 (overlay-put ov 'face face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 ;; I don't think we need to set evaporate since we should
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 ;; be controlling them!
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 (overlay-put ov 'evaporate t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 ;; We set the change property so we can tell this is one
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 ;; of our overlays (so we don't delete someone else's).
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 (overlay-put ov 'hilit-chg t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 )
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
516 (error "hilit-chg-make-ov: no face for prop: %s" prop))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 (defun hilit-chg-hide-changes (&optional beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 "Remove face information for Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
521 The overlay containing the face is removed, but the text property
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 containing the change information is retained.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
524 This is the opposite of `hilit-chg-display-changes'."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 (let ((start (or beg (point-min)))
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
526 (limit (or end (point-max))))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
527 (dolist (p (overlays-in start limit))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 ;; don't delete the overlay if it isn't ours!
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
529 (if (overlay-get p 'hilit-chg)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
530 (delete-overlay p)))))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
531
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 (defun hilit-chg-fixup (beg end)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
534 "Fix change overlays in region between BEG and END.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 Ensure the overlays agree with the changes as determined from
64587
e35a761796a9 (highlight-changes-global-initial-state, highlight-compare-buffers,
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
537 the text properties of type `hilit-chg'."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 ;; Remove or alter overlays in region beg..end
92149
e8b93cb7392a Remove spurious * in defcustom docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80118
diff changeset
539 (remove-overlays beg end 'hilit-chg t)
e8b93cb7392a Remove spurious * in defcustom docstrings.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 80118
diff changeset
540 (hilit-chg-display-changes beg end))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541
80118
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
542 ;; Inspired by font-lock. Something like this should be moved to subr.el.
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
543 (defmacro highlight-save-buffer-state (&rest body)
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
544 "Bind variables according to VARLIST and eval BODY restoring buffer state."
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
545 (declare (indent 0) (debug t))
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
546 (let ((modified (make-symbol "modified")))
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
547 `(let* ((,modified (buffer-modified-p))
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
548 (inhibit-modification-hooks t)
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
549 deactivate-mark
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
550 ;; So we don't check the file's mtime.
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
551 buffer-file-name
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
552 buffer-file-truename)
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
553 (progn
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
554 ,@body)
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
555 (unless ,modified
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
556 (restore-buffer-modified-p nil)))))
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
557
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 ;;;###autoload
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
559 (defun highlight-changes-remove-highlight (beg end)
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
560 "Remove the change face from the region between BEG and END.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 This allows you to manually remove highlighting from uninteresting changes."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 (interactive "r")
80118
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
563 (highlight-save-buffer-state
68738
974d9b214cd3 (hilit-chg-update-all-buffers): Use `mapc' instead of `mapcar'; return nil.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
564 (remove-text-properties beg end '(hilit-chg nil))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 (hilit-chg-fixup beg end)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
567 (defun hilit-chg-set-face-on-change (beg end leng-before
43030
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
568 &optional no-property-change)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 "Record changes and optionally display them in a distinctive face.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 `hilit-chg-set' adds this function to the `after-change-functions' hook."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 ;; This function is called by the `after-change-functions' hook, which
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 ;; is how we are notified when text is changed.
23289
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
574 ;; It is also called from `highlight-compare-with-file'.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 ;; We do NOT want to simply do this if this is an undo command, because
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 ;; otherwise an undone change shows up as changed. While the properties
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
578 ;; are automatically restored by undo, we must fix up the overlay.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 (save-match-data
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 (let ((beg-decr 1) (end-incr 1)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 (type 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 old)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 (if undo-in-progress
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
584 (if (and highlight-changes-mode
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
585 highlight-changes-visible-mode)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 (hilit-chg-fixup beg end))
80118
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
587 (highlight-save-buffer-state
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
588 (if (and (= beg end) (> leng-before 0))
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
589 ;; deletion
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
590 (progn
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
591 ;; The eolp and bolp tests are a kludge! But they prevent
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
592 ;; rather nasty looking displays when deleting text at the end
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
593 ;; of line, such as normal corrections as one is typing and
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
594 ;; immediately makes a correction, and when deleting first
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
595 ;; character of a line.
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
596 ;; (if (= leng-before 1)
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
597 ;; (if (eolp)
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
598 ;; (setq beg-decr 0 end-incr 0)
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
599 ;; (if (bolp)
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
600 ;; (setq beg-decr 0))))
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
601 ;; (setq beg (max (- beg beg-decr) (point-min)))
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
602 (setq end (min (+ end end-incr) (point-max)))
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
603 (setq type 'hilit-chg-delete))
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
604 ;; Not a deletion.
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
605 ;; Most of the time the following is not necessary, but
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
606 ;; if the current text was marked as a deletion then
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
607 ;; the old overlay is still in effect, so if we add some
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
608 ;; text then remove the deletion marking, but set it to
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 ;; changed otherwise its highlighting disappears.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 (if (eq (get-text-property end 'hilit-chg) 'hilit-chg-delete)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 (put-text-property end (+ end 1) 'hilit-chg 'hilit-chg)
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
613 (if highlight-changes-visible-mode
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
614 (hilit-chg-fixup beg (+ end 1))))))
80118
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
615 (unless no-property-change
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
616 (put-text-property beg end 'hilit-chg type))
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
617 (if (or highlight-changes-visible-mode no-property-change)
80118
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
618 (hilit-chg-make-ov type beg end)))))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
620 (defun hilit-chg-update ()
93624
cb11f55e7732 (highlight-changes-visibility-initial-state, hilit-chg-update,
Juanma Barranquero <lekktu@gmail.com>
parents: 93620
diff changeset
621 "Update a buffer's highlight changes when visibility changed."
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
622 (if highlight-changes-visible-mode
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
623 ;; changes are visible
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
624 (progn
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
625 (setq hilit-chg-string highlight-changes-visible-string)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
626 (or buffer-read-only
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
627 (hilit-chg-display-changes)))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
628 ;; changes are invisible
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
629 (setq hilit-chg-string highlight-changes-invisible-string)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
630 (or buffer-read-only
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
631 (hilit-chg-hide-changes))))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
632
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
633 (defun hilit-chg-set ()
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 "Turn on Highlight Changes mode for this buffer."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 (remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 (hilit-chg-make-list)
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
637 (setq highlight-changes-mode t)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
638 (setq highlight-changes-visible-mode highlight-changes-visibility-initial-state)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
639 (hilit-chg-update)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 (force-mode-line-update)
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
641 (add-hook 'after-change-functions 'hilit-chg-set-face-on-change nil t)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
642 (run-hooks 'highlight-changes-enable-hook))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 (defun hilit-chg-clear ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 "Remove Highlight Changes mode for this buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 This removes all saved change information."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 (if buffer-read-only
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 ;; We print the buffer name because this function could be called
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
649 ;; on many buffers from `global-highlight-changes-mode'.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 (message "Cannot remove highlighting from read-only mode buffer %s"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 (buffer-name))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 (remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
80118
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
653 (highlight-save-buffer-state
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 (hilit-chg-hide-changes)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
655 (hilit-chg-map-changes
80118
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
656 (lambda (prop start stop)
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
657 (remove-text-properties start stop '(hilit-chg nil)))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 (setq highlight-changes-mode nil)
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
659 (force-mode-line-update)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 (defun highlight-changes-next-change ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 "Move to the beginning of the next change, if in Highlight Changes mode."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 (let ((start (point))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 prop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 (setq prop (get-text-property (point) 'hilit-chg))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 ;; we are in a change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 (setq start (next-single-property-change (point) 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 (setq start (next-single-property-change start 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 (goto-char start)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 (message "no next change")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 (message "This buffer is not in Highlight Changes mode.")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 (defun highlight-changes-previous-change ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 "Move to the beginning of the previous change, if in Highlight Changes mode."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 (let ( (start (point)) (prop nil) )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 (or (bobp)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 (setq prop (get-text-property (1- (point)) 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 ;; we are in a change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 (setq start (previous-single-property-change (point) 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 (setq start (previous-single-property-change start 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 ;; special handling for the case where (point-min) is a change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 (setq start (or (previous-single-property-change start 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 (if (get-text-property (point-min) 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 (point-min)))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 (goto-char start)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 (message "no previous change")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 (message "This buffer is not in Highlight Changes mode.")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 ;; ========================================================================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 (defun hilit-chg-make-list (&optional force)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
707 "Construct `hilit-chg-list' and `highlight-changes-face-list'."
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
708 ;; Constructs highlight-changes-face-list if necessary,
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 ;; and hilit-chg-list always:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 ;; Maybe this should always be called when rotating a face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 ;; so we pick up any changes?
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 (if (or (null highlight-changes-face-list) ; Don't do it if it
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 force) ; already exists unless FORCE non-nil.
63351
071d62682d14 (highlight-changes-colors): Rename from `highlight-changes-colours'.
Juanma Barranquero <lekktu@gmail.com>
parents: 63252
diff changeset
714 (let ((p highlight-changes-colors)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 (n 1) name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 (setq highlight-changes-face-list nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 (while p
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
718 (setq name (intern (format "highlight-changes-%d" n)))
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
719 (copy-face 'highlight-changes name)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 (set-face-foreground name (car p))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
721 (setq highlight-changes-face-list
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 (append highlight-changes-face-list (list name)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 (setq p (cdr p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 (setq n (1+ n)))))
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
725 (setq hilit-chg-list (list 'hilit-chg 'highlight-changes))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 (let ((p highlight-changes-face-list)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
727 (n 1)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 last-category last-face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 (setq last-category (intern (format "change-%d" n)))
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
731 ;; (setq last-face (intern (format "highlight-changes-%d" n)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 (setq last-face (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 (setq hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 (append hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 (list last-category last-face)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 (setq p (cdr p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 (setq n (1+ n)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 (setq hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 (append hilit-chg-list
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
740 (list last-category last-face)))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 (defun hilit-chg-bump-change (prop start end)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
743 "Increment (age) the Highlight Changes mode text property."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 (let ( new-prop )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 (if (eq prop 'hilit-chg-delete)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 (setq new-prop (nth 2 hilit-chg-list))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
747 (setq new-prop (nth 2 (member prop hilit-chg-list))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 (put-text-property start end 'hilit-chg new-prop)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
750 (message "%d-%d unknown property %s not changed" start end prop))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 (defun highlight-changes-rotate-faces ()
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
754 "Rotate the faces if in Highlight Changes mode and the changes are visible.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
756 Current changes are displayed in the face described by the first element
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
757 of `highlight-changes-face-list', one level older changes are shown in
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 face described by the second element, and so on. Very old changes remain
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 shown in the last face in the list.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760
64587
e35a761796a9 (highlight-changes-global-initial-state, highlight-compare-buffers,
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
761 You can automatically rotate colors when the buffer is saved by adding
e35a761796a9 (highlight-changes-global-initial-state, highlight-compare-buffers,
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
762 this function to `write-file-functions' as a buffer-local value. To do
e35a761796a9 (highlight-changes-global-initial-state, highlight-compare-buffers,
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
763 this, eval the following in the buffer to be saved:
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
764
64587
e35a761796a9 (highlight-changes-global-initial-state, highlight-compare-buffers,
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
765 \(add-hook 'write-file-functions 'highlight-changes-rotate-faces nil t)"
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 (interactive)
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
767 (when (and highlight-changes-mode highlight-changes-visible-mode)
77896
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
768 (let ((modified (buffer-modified-p))
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
769 (inhibit-modification-hooks t))
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
770 ;; The `modified' related code tries to combine two goals: (1) Record the
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
771 ;; rotation in `buffer-undo-list' and (2) avoid setting the modified flag
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
772 ;; of the current buffer due to the rotation. We do this by inserting (in
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
773 ;; `buffer-undo-list') entries restoring buffer-modified-p to nil before
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
774 ;; and after the entry for the rotation.
80118
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
775 ;; FIXME: this is no good: we need to test the `modified' state at the
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
776 ;; time of the undo, not at the time of the "do", otherwise the undo
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
777 ;; may erroneously clear the modified flag. --Stef
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
778 ;; (unless modified
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
779 ;; ;; Install the "before" entry.
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
780 ;; (push '(apply restore-buffer-modified-p nil) buffer-undo-list))
77896
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
781 (unwind-protect
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
782 (progn
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
783 ;; ensure hilit-chg-list is made and up to date
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
784 (hilit-chg-make-list)
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
785 ;; remove our existing overlays
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
786 (hilit-chg-hide-changes)
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
787 ;; for each change text property, increment it
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
788 (hilit-chg-map-changes 'hilit-chg-bump-change)
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
789 ;; and display them
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
790 (hilit-chg-display-changes))
77896
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
791 (unless modified
80118
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
792 ;; Install the "after" entry. FIXME: See above.
cb439b5418e5 (highlight-save-buffer-state): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
793 ;; (push '(apply restore-buffer-modified-p nil) buffer-undo-list)
77896
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
794
c11694f17ad9 (highlight-changes-rotate-faces): Don't set modified flag of buffer.
Chong Yidong <cyd@stupidchicken.com>
parents: 75347
diff changeset
795 (restore-buffer-modified-p nil)))))
64587
e35a761796a9 (highlight-changes-global-initial-state, highlight-compare-buffers,
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
796 ;; This always returns nil so it is safe to use in write-file-functions
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 ;; ========================================================================
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
800 ;; Comparing buffers/files
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
801 ;; These use ediff to find the differences.
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
802
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
803 (defun highlight-markup-buffers
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
804 (buf-a file-a buf-b file-b &optional markup-a-only)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
805 "Get differences between two buffers and set highlight changes.
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
806 Both buffers are done unless optional parameter MARKUP-A-ONLY
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
807 is non-nil."
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
808 (eval-and-compile
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
809 (require 'ediff-util))
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
810 (save-window-excursion
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
811 (let* (change-info
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
812 change-a change-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
813 a-start a-end len-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
814 b-start b-end len-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
815 (bufa-modified (buffer-modified-p buf-a))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
816 (bufb-modified (buffer-modified-p buf-b))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
817 (buf-a-read-only (with-current-buffer buf-a buffer-read-only))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
818 (buf-b-read-only (with-current-buffer buf-b buffer-read-only))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
819 temp-a temp-b)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
820 (if (and file-a bufa-modified)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
821 (if (y-or-n-p (format "Save buffer %s? " buf-a))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
822 (with-current-buffer buf-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
823 (save-buffer)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
824 (setq bufa-modified (buffer-modified-p buf-a)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
825 (setq file-a nil)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
826 (or file-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
827 (setq temp-a (setq file-a (ediff-make-temp-file buf-a nil))))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
828
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
829 (if (and file-b bufb-modified)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
830 (if (y-or-n-p (format "Save buffer %s? " buf-b))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
831 (with-current-buffer buf-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
832 (save-buffer)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
833 (setq bufb-modified (buffer-modified-p buf-b)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
834 (setq file-b nil)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
835 (or file-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
836 (setq temp-b (setq file-b (ediff-make-temp-file buf-b nil))))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
837 (set-buffer buf-a)
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
838 (highlight-changes-mode 1)
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
839 (or markup-a-only (with-current-buffer buf-b
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
840 (highlight-changes-mode 1)))
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
841 (setq change-info (hilit-chg-get-diff-info buf-a file-a buf-b file-b))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
842
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
843
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
844 (setq change-a (car change-info))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
845 (setq change-b (car (cdr change-info)))
63252
f4b47991b594 (highlight-changes-colours highlight-changes-face-list,
Juanma Barranquero <lekktu@gmail.com>
parents: 63207
diff changeset
846
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
847 (hilit-chg-make-list)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
848 (while change-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
849 (setq a-start (nth 0 (car change-a)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
850 (setq a-end (nth 1 (car change-a)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
851 (setq b-start (nth 0 (car change-b)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
852 (setq b-end (nth 1 (car change-b)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
853 (setq len-a (- a-end a-start))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
854 (setq len-b (- b-end b-start))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
855 (set-buffer buf-a)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
856 (hilit-chg-set-face-on-change a-start a-end len-b buf-a-read-only)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
857 (or markup-a-only
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
858 (with-current-buffer buf-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
859 (hilit-chg-set-face-on-change b-start b-end len-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
860 buf-b-read-only)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
861 ))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
862 (setq change-a (cdr change-a))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
863 (setq change-b (cdr change-b)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
864 (or bufa-modified
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
865 (with-current-buffer buf-a (set-buffer-modified-p nil)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
866 (or bufb-modified
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
867 (with-current-buffer buf-b (set-buffer-modified-p nil)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
868 (if temp-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
869 (delete-file temp-a))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
870 (if temp-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
871 (delete-file temp-b)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
872 ))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
873
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
874 ;;;###autoload
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
875 (defun highlight-compare-buffers (buf-a buf-b)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
876 "Compare two buffers and highlight the differences.
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
877
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
878 The default is the current buffer and the one in the next window.
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
879
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
880 If either buffer is modified and is visiting a file, you are prompted
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
881 to save the file.
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
882
64587
e35a761796a9 (highlight-changes-global-initial-state, highlight-compare-buffers,
Juanma Barranquero <lekktu@gmail.com>
parents: 64091
diff changeset
883 Unless the buffer is unmodified and visiting a file, the buffer is
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
884 written to a temporary file for comparison.
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
885
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
886 If a buffer is read-only, differences will be highlighted but no property
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
887 changes are made, so \\[highlight-changes-next-change] and
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
888 \\[highlight-changes-previous-change] will not work."
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
889 (interactive
63252
f4b47991b594 (highlight-changes-colours highlight-changes-face-list,
Juanma Barranquero <lekktu@gmail.com>
parents: 63207
diff changeset
890 (list
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
891 (get-buffer (read-buffer "buffer-a " (current-buffer) t))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
892 (get-buffer
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
893 (read-buffer "buffer-b "
63252
f4b47991b594 (highlight-changes-colours highlight-changes-face-list,
Juanma Barranquero <lekktu@gmail.com>
parents: 63207
diff changeset
894 (window-buffer (next-window (selected-window))) t))))
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
895 (let ((file-a (buffer-file-name buf-a))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
896 (file-b (buffer-file-name buf-b)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
897 (highlight-markup-buffers buf-a file-a buf-b file-b)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
898 ))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 ;;;###autoload
23288
17dd9ecf84f1 (highlight-compare-with-file): Renamed from
Karl Heuer <kwzh@gnu.org>
parents: 23101
diff changeset
901 (defun highlight-compare-with-file (file-b)
17dd9ecf84f1 (highlight-compare-with-file): Renamed from
Karl Heuer <kwzh@gnu.org>
parents: 23101
diff changeset
902 "Compare this buffer with a file, and highlight differences.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
904 If the buffer has a backup filename, it is used as the default when
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
905 this function is called interactively.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
907 If the current buffer is visiting the file being compared against, it
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
908 also will have its differences highlighted. Otherwise, the file is
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
909 read in temporarily but the buffer is deleted.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
911 If the buffer is read-only, differences will be highlighted but no property
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
912 changes are made, so \\[highlight-changes-next-change] and
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 \\[highlight-changes-previous-change] will not work."
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
914 (interactive
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
915 (let ((file buffer-file-name)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
916 (file-name nil)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
917 (file-dir nil))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
918 (and file
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
919 (setq file-name (file-name-nondirectory file)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
920 file-dir (file-name-directory file)))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
921 (setq file-name (make-backup-file-name file-name))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
922 (unless (file-exists-p file-name)
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
923 (setq file-name nil))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
924 (list (read-file-name
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
925 "Find to compare with: " ;; prompt
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
926 file-dir ;; directory
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
927 nil ;; default
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
928 nil ;; existing
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
929 file-name) ;; initial
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
930 )))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 (let* ((buf-a (current-buffer))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 (file-a (buffer-file-name))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 (existing-buf (get-file-buffer file-b))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 (buf-b (or existing-buf
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 (find-file-noselect file-b)))
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
936 (buf-b-read-only (with-current-buffer buf-b buffer-read-only)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
937 (highlight-markup-buffers buf-a file-a buf-b file-b (not existing-buf))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
938 (unless existing-buf
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
939 (kill-buffer buf-b))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
940 ))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 (defun hilit-chg-get-diff-info (buf-a file-a buf-b file-b)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 (let ((e nil) x y) ;; e is set by function hilit-chg-get-diff-list-hk
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 (ediff-setup buf-a file-a buf-b file-b
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 nil nil ; buf-c file-C
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 'hilit-chg-get-diff-list-hk
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 (list (cons 'ediff-job-name 'something))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 (ediff-with-current-buffer e (ediff-really-quit nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 (list x y)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 (defun hilit-chg-get-diff-list-hk ()
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
955 ;; x and y are dynamically bound by hilit-chg-get-diff-info
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 ;; which calls this function as a hook
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 (defvar x) ;; placate the byte-compiler
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 (defvar y)
68738
974d9b214cd3 (hilit-chg-update-all-buffers): Use `mapc' instead of `mapcar'; return nil.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
959 (setq e (current-buffer))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 (let ((n 0) extent p va vb a b)
68738
974d9b214cd3 (hilit-chg-update-all-buffers): Use `mapc' instead of `mapcar'; return nil.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
961 (setq x nil y nil) ;; x and y are bound by hilit-chg-get-diff-info
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 (while (< n ediff-number-of-differences)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 (ediff-make-fine-diffs n)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 (setq va (ediff-get-fine-diff-vector n 'A))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 ;; va is a vector if there are fine differences
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 (if va
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 (setq a (append va nil))
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
968 ;; if not, get the unrefined difference
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 (setq va (ediff-get-difference n 'A))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
970 (setq a (list (elt va 0))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 ;; a list a list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 (setq p a)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 (setq extent (list (overlay-start (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 (overlay-end (car p))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 (setq p (cdr p))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
977 (setq x (append x (list extent) )));; while p
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 (setq vb (ediff-get-fine-diff-vector n 'B))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 ;; vb is a vector
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 (if vb
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 (setq b (append vb nil))
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
983 ;; if not, get the unrefined difference
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 (setq vb (ediff-get-difference n 'B))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
985 (setq b (list (elt vb 0))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 ;; b list a list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 (setq p b)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 (setq extent (list (overlay-start (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 (overlay-end (car p))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 (setq p (cdr p))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
992 (setq y (append y (list extent) )))
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
993 (setq n (1+ n)));; while
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 ;; ediff-quit doesn't work here.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 ;; No point in returning a value, since this is a hook function.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
998 ;; ======================= global-highlight-changes-mode ==============
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 ;;;###autoload
93626
49c6cb8751f6 (global-highlight-changes-mode, highlight-changes-passive-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 93624
diff changeset
1001 (define-globalized-minor-mode global-highlight-changes-mode
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
1002 highlight-changes-mode highlight-changes-mode-turn-on)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
1004 (define-obsolete-function-alias
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
1005 'global-highlight-changes
93626
49c6cb8751f6 (global-highlight-changes-mode, highlight-changes-passive-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 93624
diff changeset
1006 'global-highlight-changes-mode "23.1")
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
1008 (defun highlight-changes-mode-turn-on ()
93624
cb11f55e7732 (highlight-changes-visibility-initial-state, hilit-chg-update,
Juanma Barranquero <lekktu@gmail.com>
parents: 93620
diff changeset
1009 "See if Highlight Changes mode should be turned on for this buffer.
cb11f55e7732 (highlight-changes-visibility-initial-state, hilit-chg-update,
Juanma Barranquero <lekktu@gmail.com>
parents: 93620
diff changeset
1010 This is called when `global-highlight-changes-mode' is turned on."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 (or highlight-changes-mode ; do nothing if already on
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 (if
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 (cond
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 ((null highlight-changes-global-modes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 ((functionp highlight-changes-global-modes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 (funcall highlight-changes-global-modes))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 ((listp highlight-changes-global-modes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 (if (eq (car-safe highlight-changes-global-modes) 'not)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020 (not (memq major-mode (cdr highlight-changes-global-modes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 (memq major-mode highlight-changes-global-modes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 (t
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1023 (and
68738
974d9b214cd3 (hilit-chg-update-all-buffers): Use `mapc' instead of `mapcar'; return nil.
Juanma Barranquero <lekktu@gmail.com>
parents: 68651
diff changeset
1024 (not (string-match "^[ *]" (buffer-name)))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1025 (buffer-file-name))))
93620
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
1026 (highlight-changes-mode 1))
dfdeba5ae4fd (highlight-changes-mode): Rename from
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 92149
diff changeset
1027 ))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029
64895
bde8cc177550 Add handler to desktop-minor-mode-handlers.
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1030 ;;;; Desktop support.
bde8cc177550 Add handler to desktop-minor-mode-handlers.
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1031
bde8cc177550 Add handler to desktop-minor-mode-handlers.
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1032 ;; Called by `desktop-create-buffer' to restore `highlight-changes-mode'.
bde8cc177550 Add handler to desktop-minor-mode-handlers.
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1033 (defun hilit-chg-desktop-restore (desktop-buffer-locals)
bde8cc177550 Add handler to desktop-minor-mode-handlers.
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1034 (highlight-changes-mode
bde8cc177550 Add handler to desktop-minor-mode-handlers.
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1035 (or (cdr (assq 'highlight-changes-mode desktop-buffer-locals)) 1)))
bde8cc177550 Add handler to desktop-minor-mode-handlers.
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1036
bde8cc177550 Add handler to desktop-minor-mode-handlers.
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1037 (add-to-list 'desktop-minor-mode-handlers
bde8cc177550 Add handler to desktop-minor-mode-handlers.
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1038 '(highlight-changes-mode . hilit-chg-desktop-restore))
bde8cc177550 Add handler to desktop-minor-mode-handlers.
Lars Hansen <larsh@soem.dk>
parents: 64762
diff changeset
1039
68752
e065294f485f Add highlight-changes-mode to desktop-locals-to-save.
Lars Hansen <larsh@soem.dk>
parents: 68738
diff changeset
1040 (add-to-list 'desktop-locals-to-save 'highlight-changes-mode)
e065294f485f Add highlight-changes-mode to desktop-locals-to-save.
Lars Hansen <larsh@soem.dk>
parents: 68738
diff changeset
1041
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 ;; ===================== debug ==================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043 ;; For debug & test use:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 ;; (defun hilit-chg-debug-show (&optional beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046 ;; (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047 ;; (message "--- hilit-chg-debug-show ---")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 ;; (hilit-chg-map-changes '(lambda (prop start end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 ;; (message "%d-%d: %s" start end prop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 ;; )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 ;; beg end
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 ;; ))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1053 ;;
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054 ;; ================== end of debug ===============
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 (provide 'hilit-chg)
22958
cd50dfa70bb2 Delete the undo-in-progress compatibility code.
Richard M. Stallman <rms@gnu.org>
parents: 22957
diff changeset
1057
59601
73b89f6377fc (highlight-changes-mode): Don't autoload.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54009
diff changeset
1058 ;; arch-tag: de00301d-5bad-44da-aa82-e0e010b0c463
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 ;;; hilit-chg.el ends here