annotate lisp/hilit-chg.el @ 63308:51d38cfbe542

Warn about using "cvs up -kb" if one intends to commit changes. Add a pointer to another site with detailed configure and build instructions. Suggest to look at config.log when configure fails. Add MinGW Make 3.80 to the list of successful combinations.
author Eli Zaretskii <eliz@gnu.org>
date Sat, 11 Jun 2005 11:31:29 +0000
parents f4b47991b594
children 071d62682d14
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
59601
73b89f6377fc (highlight-changes-mode): Don't autoload.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54009
diff changeset
3 ;; Copyright (C) 1998, 2000, 2005 Free Software Foundation, Inc.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
23614
ca8cd9d60c47 Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 23289
diff changeset
5 ;; Author: Richard Sharman <rsharman@pobox.com>
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Keywords: faces
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7
23101
6193531a173e Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 23046
diff changeset
8 ;; This file is part of GNU Emacs.
6193531a173e Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 23046
diff changeset
9
38401
64d8d90d180d Fix license commentary.
Gerd Moellmann <gerd@gnu.org>
parents: 30962
diff changeset
10 ;; 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
11 ;; it under the terms of the GNU General Public License as published by
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; any later version.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14
38401
64d8d90d180d Fix license commentary.
Gerd Moellmann <gerd@gnu.org>
parents: 30962
diff changeset
15 ;; 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
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; Boston, MA 02111-1307, USA.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;;; Commentary:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;; A minor mode: "Highlight Changes mode".
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; Highlight Changes mode has 2 submodes: active and passive.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; When active, changes to the buffer are displayed in a different face.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; When passive, any existing displayed changes are saved and new ones
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; recorded but are not displayed differently.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; Why active and passive? Having the changes visible can be handy when you
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; want the information but very distracting otherwise. So, you can keep
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; Highlight Changes mode in passive state while you make your changes, toggle
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; it on to active mode to see them, then toggle it back off to avoid
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;; distraction.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
39 ;;
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
40 ;; When active, changes are displayed in the `highlight-changes' face.
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
41 ;; When text is deleted, the following character is displayed in the
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
42 ;; `highlight-changes-delete' face.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; 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
46 ;; `highlight-changes-rotate-faces'. This rotates through a series
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; 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
48 ;; 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
49 ;; either explicitly define each face by customizing
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;; `highlight-changes-face-list'. If, however, the faces differ from
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
51 ;; the `highlight-changes' face only in the foreground color, you can simply set
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;; `highlight-changes-colours'. If `highlight-changes-face-list' is nil when
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;; the faces are required they will be constructed from
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;; `highlight-changes-colours'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 ;; When a Highlight Changes mode is on (either active or passive) you can go
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;; to the next or previous change with `highlight-changes-next-change' and
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;; `highlight-changes-previous-change'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
60 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61 ;;
23289
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
62 ;; You can also use the command highlight-compare-with-file to show changes
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
63 ;; in this file compared with another file (typically the previous version
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
64 ;; of the file). The command highlight-compare-buffers can be used to
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
65 ;; compare two buffers.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; There are currently three hooks run by `highlight-changes-mode':
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; `highlight-changes-enable-hook' - is run when Highlight Changes mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;; is initially enabled for a buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; `highlight-changes-disable-hook' - is run when Highlight Changes mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; is turned off.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;; `highlight-changes-toggle-hook' - is run each time `highlight-changes-mode'
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;; is called. Typically this is when
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;; toggling between active and passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; modes. The variable
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;; `highlight-changes-mode' contains the new
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;; state (`active' or `passive'.)
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 ;;
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
81 ;;
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; Example usage:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; (defun my-highlight-changes-enable-hook ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;; (add-hook 'local-write-file-hooks 'highlight-changes-rotate-faces)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;; )
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
86 ;;
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;; (defun my-highlight-changes-disable-hook ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;; (remove-hook 'local-write-file-hooks 'highlight-changes-rotate-faces)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;; )
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
90 ;;
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 ;; (add-hook 'highlight-changes-enable-hook 'my-highlight-changes-enable-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 ;; (add-hook 'highlight-changes-disable-hook
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 ;; 'my-highlight-changes-disable-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
96 ;; Explicit vs. Implicit
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 ;; Normally, Highlight Changes mode is turned on explicitly in a buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ;; 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
102 ;; follows.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
103 ;;
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ;; 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
105 ;; can use `add-hook' to call `highlight-changes-mode'.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;; Example:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;; (add-hook 'c-mode-hook 'highlight-changes-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 ;; If you want to make it start up in passive mode (regardless of the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 ;; setting of highlight-changes-initial-state):
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
112 ;; (add-hook 'emacs-lisp-mode-hook
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 ;; (lambda ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ;; (highlight-changes-mode 'passive)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ;; However, this cannot be done for Fundamental mode for there is no
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 ;; such hook.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;;
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
119 ;; 2. You can use the function `global-highlight-changes'
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 ;; This function, which is fashioned after the way `global-font-lock' works,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 ;; 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
123 ;; 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
124 ;; it on in new "suitable" buffers to be created.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
125 ;;
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 ;; A buffer's "suitability" is determined by variable
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
127 ;; `highlight-changes-global-modes', as follows. If the variable is
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 ;; * nil -- then no buffers are suitable;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 ;; * 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
130 ;; 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
131 ;; who are visiting files are suitable, but others (like dired
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 ;; buffers) are not;
30924
2c331adfa151 Fix typos in commentary.
Gerd Moellmann <gerd@gnu.org>
parents: 30223
diff changeset
133 ;; * a list -- then the buffer is suitable iff its mode is in the
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
134 ;; 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
135 ;; 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
136 ;; * 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
137 ;; ` ' or `*' and if `buffer-file-name' returns true.
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
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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 ;; Possible bindings:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 ;; (global-set-key '[C-right] 'highlight-changes-next-change)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 ;; (global-set-key '[C-left] 'highlight-changes-previous-change)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 ;; Other interactive functions (which could be bound if desired):
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 ;; highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 ;; highlight-changes-remove-highlight
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 ;; highlight-changes-rotate-faces
23289
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
150 ;; highlight-compare-with-file
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
151 ;; highlight-compare-buffers
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
153 ;;
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 ;; You can automatically rotate faces when the buffer is saved;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 ;; see function `highlight-changes-rotate-faces' for how to do this.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 ;;; Bugs:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 ;; - 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
162 ;; they should find the next "real" change, in other words treat
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 ;; consecutive changes as one.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
166 ;;; To do (maybe), notes, ...
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 ;; - having different faces for deletion and non-deletion: is it
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 ;; really worth the hassle?
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 ;; - should have better hooks: when should they be run?
23289
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
171 ;; - 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
172 ;; able to say show changes compared with version 2.1.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 ;; - Maybe we should have compare-with-buffer as well. (When I tried
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 ;; a while back I ran into a problem with ediff-buffers-internal.)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 ;;; History:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
179 ;; R Sharman (rsharman@pobox.com) Feb 1998:
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 ;; - initial release as change-mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 ;; Jari Aalto <jari.aalto@ntc.nokia.com> Mar 1998
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
182 ;; - fixes for byte compile errors
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 ;; - use eval-and-compile for autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 ;; Marijn Ros <J.M.Ros@fys.ruu.nl> Mar 98
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 ;; - suggested turning it on by default
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 ;; Eric Ludlam <zappo@gnu.org> Suggested using overlays.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 ;; July 98
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 ;; - global mode and various stuff added
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 ;; - Changed to use overlays
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 ;; August 98
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
191 ;; - 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
192 ;; Dec 2003
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
193 ;; - Use require for ediff stuff
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
194 ;; - Added highlight-compare-buffers
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 ;;; Code:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 (require 'wid-edit)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 ;; ====================== Customization =======================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (defgroup highlight-changes nil
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 "Highlight Changes mode."
24554
9a9a307e9a57 (highlight-changes): Add defgroup :version.
Dave Love <fx@gnu.org>
parents: 23614
diff changeset
203 :version "20.4"
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 :group 'faces)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 ;; Face information: How the changes appear.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 ;; Defaults for face: red foreground, no change to background,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 ;; 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
211 ;; 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
212 ;; 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
213 ;; indentation on inserts gets underlined (which can look pretty ugly!).
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
215 (defface highlight-changes
61394
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 60902
diff changeset
216 '((((min-colors 88) (class color)) (:foreground "red1" ))
31aa9a390538 * mh-customize.el (mh-speedbar-selected-folder-face): Special case
Dan Nicolaescu <dann@ics.uci.edu>
parents: 60902
diff changeset
217 (((class color)) (:foreground "red" ))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 (t (:inverse-video t)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 "Face used for highlighting changes."
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
220 :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
221 ;; 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
222 (put 'highlight-changes-face 'face-alias 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 ;; 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
225 (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
226 '((((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
227 (((class color)) (:foreground "red" :underline t))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 (t (:inverse-video t)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 "Face used for highlighting deletions."
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
230 :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
231 ;; 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
232 (put 'highlight-changes-delete-face 'face-alias 'highlight-changes-delete)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 ;; A (not very good) default list of colours to rotate through.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 ;;
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
238 (defcustom highlight-changes-colours
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 (if (eq (frame-parameter nil 'background-mode) 'light)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 ;; defaults for light background:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 '( "magenta" "blue" "darkgreen" "chocolate" "sienna4" "NavyBlue")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 ;; defaults for dark background:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 '("yellow" "magenta" "blue" "maroon" "firebrick" "green4" "DarkOrchid"))
63252
f4b47991b594 (highlight-changes-colours highlight-changes-face-list,
Juanma Barranquero <lekktu@gmail.com>
parents: 63207
diff changeset
244 "*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
245 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
246 the next older will be in the second element etc.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
248 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
249 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
250 colors then use this, if you want fancier faces then set
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 `highlight-changes-face-list'."
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
252 :type '(repeat color)
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
253 :group 'highlight-changes)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
254
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
256 ;; If you invoke highlight-changes-mode with no argument, should it start in
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 ;; active or passive mode?
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 (defcustom highlight-changes-initial-state 'active
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 "*What state (active or passive) `highlight-changes' should start in.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 This is used when `highlight-changes' is called with no argument.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 This variable must be set to one of the symbols `active' or `passive'."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 :type '(choice (const :tag "Active" active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 (const :tag "Passive" passive))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
265 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 (defcustom highlight-changes-global-initial-state 'passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 "*What state `global-highlight-changes' should start in.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 This is used if `global-highlight-changes' is called with no argument.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 This variable must be set to either `active' or `passive'"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 :type '(choice (const :tag "Active" active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 (const :tag "Passive" passive))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
273 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 ;; The strings displayed in the mode-line for the minor mode:
43132
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
276 (defcustom highlight-changes-active-string " +Chg"
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 "*The string used when Highlight Changes mode is in the active state.
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
278 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
279 a string with a leading space."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 :type '(choice string
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 (const :tag "None" nil))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
282 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283
43132
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
284 (defcustom highlight-changes-passive-string " -Chg"
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 "*The string used when Highlight Changes mode is in the passive state.
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
286 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
287 a string with a leading space."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 :type '(choice string
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (const :tag "None" nil))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
290 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 (defcustom highlight-changes-global-modes t
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 "*Determine whether a buffer is suitable for global Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294
43132
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
295 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
296 the buffer is suitable.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297
43132
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
298 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
299 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
300 modes which are not suitable.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301
43132
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
302 t means the buffer is suitable if it is visiting a file and its name
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
303 does not begin with ` ' or `*'.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
305 A value of nil means no buffers are suitable for `global-highlight-changes'
41701
d1ec9ab9d09d Doc fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 41575
diff changeset
306 \(effectively disabling the mode).
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 Examples:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 (c-mode c++-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 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
311 modes only."
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
312 :type '(choice
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 (const :tag "all non-special buffers visiting files" t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 (set :menu-tag "specific modes" :tag "modes"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 :value (not)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 (const :tag "All except these" not)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 (repeat :tag "Modes" :inline t (symbol :tag "mode")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 (function :menu-tag "determined by function"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 :value buffer-file-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 (const :tag "none" nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 )
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
322 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 (defvar global-highlight-changes nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 (defcustom highlight-changes-global-changes-existing-buffers nil
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
327 "*If non-nil, toggling global Highlight Changes mode affects existing buffers.
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
328 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
329 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
330 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
331 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
332 remove it from existing buffers."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 :type 'boolean
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 :group 'highlight-changes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 (defun hilit-chg-cust-fix-changes-face-list (w wc &optional event)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 ;; 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
338 ;; 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
339 ;; 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
340 ;; actually done by copying the faces so user-defined faces still remain
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 ;; in the same order.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 ;; The notifying the parent is needed because without it changes to the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 ;; faces are saved but not to the actual list itself.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 (let ((old-list (widget-value w)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 (if (member 'default old-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 (let
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 ((p (reverse old-list))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 (n (length old-list))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 new-name old-name
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 (new-list nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 (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
354 (setq new-name (intern (format "highlight-changes-%d" n)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 (if (eq old-name new-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 nil
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 ;; 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
358 ;; default face so copy it. Better, though, (I think) is to
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 ;; 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
360 ;; the `highlight-changes' face.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 (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
362 (copy-face 'highlight-changes new-name)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 (copy-face old-name new-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 (setq new-list (append (list new-name) new-list))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 (setq n (1- n))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 (setq p (cdr p)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 (if (equal new-list (widget-value w))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 nil ;; (message "notify: no change!")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 (widget-value-set w new-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 (widget-setup)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 ;; (message "notify: no default here!")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 (let ((parent (widget-get w :parent)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 (when parent
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
378 (widget-apply parent :notify w event))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 (defcustom highlight-changes-face-list nil
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
382 "*A list of faces used when rotating changes.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 Normally the variable is initialized to nil and the list is created from
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 `highlight-changes-colours' when needed. However, you can set this variable
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 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
386 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
387 Otherwise, this list will be constructed when needed from
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 `highlight-changes-colours'."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 :type '(choice
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
390 (repeat
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 :notify hilit-chg-cust-fix-changes-face-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 face )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 (const :tag "Derive from highlight-changes-colours" nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 )
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
395 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 ;; ========================================================================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 ;; These shouldn't be changed!
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 (defvar highlight-changes-mode nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 (defvar hilit-chg-list nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 (defvar hilit-chg-string " ??")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 (or (assq 'highlight-changes-mode minor-mode-alist)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 (setq minor-mode-alist
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 (cons '(highlight-changes-mode hilit-chg-string) minor-mode-alist)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 (make-variable-buffer-local 'highlight-changes-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 (make-variable-buffer-local 'hilit-chg-string)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
412 (require 'ediff-init)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
413 (require 'ediff-util)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 ;;; Functions...
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 (defun hilit-chg-map-changes (func &optional start-position end-position)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 "Call function FUNC for each region used by Highlight Changes mode."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 ;; if start-position is nil, (point-min) is used
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 ;; if end-position is nil, (point-max) is used
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 ;; FUNC is called with 3 params: property start stop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 (let ((start (or start-position (point-min)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 (limit (or end-position (point-max)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 prop end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 (while (and start (< start limit))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 (setq prop (get-text-property start 'hilit-chg))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 (setq end (text-property-not-all start limit 'hilit-chg prop))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 (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
431 (setq start end))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 (defun hilit-chg-display-changes (&optional beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 "Display face information for Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
437 An overlay containing a change face is added from the information
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
438 in the text property of type `hilit-chg'.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
440 This is the opposite of `hilit-chg-hide-changes'."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 (hilit-chg-map-changes 'hilit-chg-make-ov beg end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 (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
445 (or prop
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
446 (error "hilit-chg-make-ov: prop is nil"))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 ;; for the region make change overlays corresponding to
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 ;; the text property 'hilit-chg
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 (let ((ov (make-overlay start end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (if (eq prop 'hilit-chg-delete)
63207
fecefbfcd215 Revision: miles@gnu.org--gnu-2005/emacs--cvs-trunk--0--patch-377
Miles Bader <miles@gnu.org>
parents: 61394
diff changeset
452 (setq face 'highlight-changes-delete)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 (setq face (nth 1 (member prop hilit-chg-list))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 (if face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 (progn
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
456 ;; 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
457 (overlay-put ov 'face face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 ;; I don't think we need to set evaporate since we should
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 ;; be controlling them!
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 (overlay-put ov 'evaporate t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 ;; We set the change property so we can tell this is one
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 ;; of our overlays (so we don't delete someone else's).
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 (overlay-put ov 'hilit-chg t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 )
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
465 (error "hilit-chg-make-ov: no face for prop: %s" prop))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 (defun hilit-chg-hide-changes (&optional beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 "Remove face information for Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
470 The overlay containing the face is removed, but the text property
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 containing the change information is retained.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
473 This is the opposite of `hilit-chg-display-changes'."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 (let ((start (or beg (point-min)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 (limit (or end (point-max)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 p ov)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 (setq p (overlays-in start limit))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 ;; don't delete the overlay if it isn't ours!
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 (if (overlay-get (car p) 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 (delete-overlay (car p)))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
482 (setq p (cdr p)))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 (defun hilit-chg-fixup (beg end)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
485 "Fix change overlays in region between BEG and END.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 Ensure the overlays agree with the changes as determined from
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 the text properties of type `hilit-chg' ."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 ;; Remove or alter overlays in region beg..end
43030
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
490 (let (ov-start ov-end props q)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 ;; temp for debugging:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 ;; (or (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 ;; (error "hilit-chg-fixup called but Highlight Changes mode not active"))
43030
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
494 (dolist (ov (overlays-in beg end))
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
495 ;; Don't alter overlays that are not ours.
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
496 (when (overlay-get ov 'hilit-chg)
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
497 (let ((ov-start (overlay-start ov))
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
498 (ov-end (overlay-end ov)))
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
499 (if (< ov-start beg)
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
500 (progn
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
501 (move-overlay ov ov-start beg)
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
502 (if (> ov-end end)
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
503 (progn
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
504 (setq props (overlay-properties ov))
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
505 (setq ov (make-overlay end ov-end))
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
506 (while props
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
507 (overlay-put ov (car props)(car (cdr props)))
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
508 (setq props (cdr (cdr props)))))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 (if (> ov-end end)
43030
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
510 (move-overlay ov end ov-end)
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
511 (delete-overlay ov))))))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
512 (hilit-chg-display-changes beg end)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 ;;;###autoload
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
515 (defun highlight-changes-remove-highlight (beg end)
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
516 "Remove the change face from the region between BEG and END.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 This allows you to manually remove highlighting from uninteresting changes."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 (interactive "r")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 (let ((after-change-functions nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 (remove-text-properties beg end '(hilit-chg nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 (hilit-chg-fixup beg end)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
523 (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
524 &optional no-property-change)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 "Record changes and optionally display them in a distinctive face.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 `hilit-chg-set' adds this function to the `after-change-functions' hook."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 ;; This function is called by the `after-change-functions' hook, which
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 ;; is how we are notified when text is changed.
23289
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
530 ;; It is also called from `highlight-compare-with-file'.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 ;; 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
533 ;; 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
534 ;; are automatically restored by undo, we must fix up the overlay.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 (save-match-data
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 (let ((beg-decr 1) (end-incr 1)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 (type 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 old)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 (if undo-in-progress
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 (hilit-chg-fixup beg end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 (if (and (= beg end) (> leng-before 0))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 ;; deletion
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 ;; The eolp and bolp tests are a kludge! But they prevent
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
546 ;; rather nasty looking displays when deleting text at the end
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
547 ;; of line, such as normal corrections as one is typing and
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
548 ;; immediately makes a correction, and when deleting first
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 ;; character of a line.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 ;;; (if (= leng-before 1)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 ;;; (if (eolp)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 ;;; (setq beg-decr 0 end-incr 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 ;;; (if (bolp)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 ;;; (setq beg-decr 0))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 ;;; (setq beg (max (- beg beg-decr) (point-min)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 (setq end (min (+ end end-incr) (point-max)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 (setq type 'hilit-chg-delete))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 ;; Not a deletion.
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
559 ;; Most of the time the following is not necessary, but
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 ;; if the current text was marked as a deletion then
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 ;; the old overlay is still in effect, so if we add some
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
562 ;; text then remove the deletion marking, but set it to
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 ;; changed otherwise its highlighting disappears.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 (if (eq (get-text-property end 'hilit-chg) 'hilit-chg-delete)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 (remove-text-properties end (+ end 1) '(hilit-chg nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 (put-text-property end (+ end 1) 'hilit-chg 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 (hilit-chg-fixup beg (+ end 1))))))
43030
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
570 (unless no-property-change
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 (put-text-property beg end 'hilit-chg type))
43030
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
572 (if (or (eq highlight-changes-mode 'active) no-property-change)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
573 (hilit-chg-make-ov type beg end))))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 (defun hilit-chg-set (value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 "Turn on Highlight Changes mode for this buffer."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 (setq highlight-changes-mode value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 (hilit-chg-make-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 (setq hilit-chg-string highlight-changes-active-string)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 (or buffer-read-only
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 (hilit-chg-display-changes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 ;; mode is passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 (setq hilit-chg-string highlight-changes-passive-string)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 (or buffer-read-only
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
588 (hilit-chg-hide-changes)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 (force-mode-line-update)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
590 (add-hook 'after-change-functions 'hilit-chg-set-face-on-change nil t))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 (defun hilit-chg-clear ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 "Remove Highlight Changes mode for this buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 This removes all saved change information."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 (if buffer-read-only
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 ;; We print the buffer name because this function could be called
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 ;; on many buffers from `global-highlight-changes'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 (message "Cannot remove highlighting from read-only mode buffer %s"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 (buffer-name))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 (remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 (let ((after-change-functions nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 (hilit-chg-hide-changes)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
603 (hilit-chg-map-changes
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 '(lambda (prop start stop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 (remove-text-properties start stop '(hilit-chg nil))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 (setq highlight-changes-mode nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 (force-mode-line-update)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 ;; If we type: C-u -1 M-x highlight-changes-mode
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
610 ;; we want to turn it off, but hilit-chg-post-command-hook
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 ;; runs and that turns it back on!
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
612 (remove-hook 'post-command-hook 'hilit-chg-post-command-hook)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 (defun highlight-changes-mode (&optional arg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 "Toggle (or initially set) Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
618 Without an argument:
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
619 If Highlight Changes mode is not enabled, then enable it (in either active
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
620 or passive state as determined by the variable
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
621 `highlight-changes-initial-state'); otherwise, toggle between active
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
622 and passive state.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
624 With an argument ARG:
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
625 If ARG is positive, set state to active;
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
626 If ARG is zero, set state to passive;
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
627 If ARG is negative, disable Highlight Changes mode completely.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
629 Active state - means changes are shown in a distinctive face.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 Passive state - means changes are kept and new ones recorded but are
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 not displayed in a different face.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 Functions:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 \\[highlight-changes-next-change] - move point to beginning of next change
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
635 \\[highlight-changes-previous-change] - move to beginning of previous change
23289
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
636 \\[highlight-compare-with-file] - mark text as changed by comparing this
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
637 buffer with the contents of a file
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 \\[highlight-changes-remove-highlight] - remove the change face from the region
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 \\[highlight-changes-rotate-faces] - rotate different \"ages\" of changes \
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
640 through
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 various faces.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 Hook variables:
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
644 `highlight-changes-enable-hook' - when enabling Highlight Changes mode.
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
645 `highlight-changes-toggle-hook' - when entering active or passive state
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
646 `highlight-changes-disable-hook' - when turning off Highlight Changes mode."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 (interactive "P")
29204
d38a98cddcec (highlight-changes-mode): Ask about color or
Eli Zaretskii <eliz@gnu.org>
parents: 25533
diff changeset
648 (if (or (display-color-p)
d38a98cddcec (highlight-changes-mode): Ask about color or
Eli Zaretskii <eliz@gnu.org>
parents: 25533
diff changeset
649 (and (fboundp 'x-display-grayscale-p) (x-display-grayscale-p)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 (let ((was-on highlight-changes-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 (new-highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 (cond
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 ((null arg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 ;; no arg => toggle (or set to active initially)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 (if (eq highlight-changes-mode 'active) 'passive 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 highlight-changes-initial-state))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 ;; an argument is given
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 ((eq arg 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 ((eq arg 'passive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 'passive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 ((> (prefix-numeric-value arg) 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 ((< (prefix-numeric-value arg) 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 (t
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
668 'passive))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 (if new-highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 ;; mode is turned on -- but may be passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 (hilit-chg-set new-highlight-changes-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 (or was-on
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 ;; run highlight-changes-enable-hook once
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 (run-hooks 'highlight-changes-enable-hook))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 (run-hooks 'highlight-changes-toggle-hook))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 ;; mode is turned off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 (run-hooks 'highlight-changes-disable-hook)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
679 (hilit-chg-clear)))
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
680 (message "Highlight Changes mode requires color or grayscale display")))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 (defun highlight-changes-next-change ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 "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
685 (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 (let ((start (point))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 prop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 (setq prop (get-text-property (point) 'hilit-chg))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 ;; we are in a change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 (setq start (next-single-property-change (point) 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 (setq start (next-single-property-change start 'hilit-chg)))
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 (goto-char start)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 (message "no next change")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 (message "This buffer is not in Highlight Changes mode.")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 (defun highlight-changes-previous-change ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 "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
704 (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 (let ( (start (point)) (prop nil) )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 (or (bobp)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 (setq prop (get-text-property (1- (point)) 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 ;; we are in a change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 (setq start (previous-single-property-change (point) 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 (setq start (previous-single-property-change start 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 ;; special handling for the case where (point-min) is a change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 (setq start (or (previous-single-property-change start 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 (if (get-text-property (point-min) 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 (point-min)))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 (goto-char start)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 (message "no previous change")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 (message "This buffer is not in Highlight Changes mode.")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 ;; ========================================================================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 (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
727 "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
728 ;; Constructs highlight-changes-face-list if necessary,
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 ;; and hilit-chg-list always:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 ;; Maybe this should always be called when rotating a face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 ;; so we pick up any changes?
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 (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
733 force) ; already exists unless FORCE non-nil.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
734 (let ((p highlight-changes-colours)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 (n 1) name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 (setq highlight-changes-face-list nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 (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
738 (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
739 (copy-face 'highlight-changes name)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 (set-face-foreground name (car p))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
741 (setq highlight-changes-face-list
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 (append highlight-changes-face-list (list name)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 (setq p (cdr p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 (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
745 (setq hilit-chg-list (list 'hilit-chg 'highlight-changes))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 (let ((p highlight-changes-face-list)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
747 (n 1)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 last-category last-face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 (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
751 ;; (setq last-face (intern (format "highlight-changes-%d" n)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 (setq last-face (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 (setq hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 (append hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 (list last-category last-face)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 (setq p (cdr p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757 (setq n (1+ n)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 (setq hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 (append hilit-chg-list
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
760 (list last-category last-face)))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 (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
763 "Increment (age) the Highlight Changes mode text property."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 (let ( new-prop )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 (if (eq prop 'hilit-chg-delete)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 (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
767 (setq new-prop (nth 2 (member prop hilit-chg-list))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 (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
770 (message "%d-%d unknown property %s not changed" start end prop))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 (defun highlight-changes-rotate-faces ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 "Rotate the faces used by Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
776 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
777 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
778 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
779 shown in the last face in the list.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780
63252
f4b47991b594 (highlight-changes-colours highlight-changes-face-list,
Juanma Barranquero <lekktu@gmail.com>
parents: 63207
diff changeset
781 You can automatically rotate colors when the buffer is saved
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
782 by adding the following to `local-write-file-hooks', by evaling it in the
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 buffer to be saved):
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
784
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
785 \(add-hook 'local-write-file-hooks 'highlight-changes-rotate-faces)"
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 ;; If not in active mode do nothing but don't complain because this
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 ;; may be bound to a hook.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 (let ((after-change-functions nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 ;; ensure hilit-chg-list is made and up to date
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 (hilit-chg-make-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 ;; remove our existing overlays
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 (hilit-chg-hide-changes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 ;; for each change text property, increment it
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 (hilit-chg-map-changes 'hilit-chg-bump-change)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 ;; and display them all if active
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 (if (eq highlight-changes-mode 'active)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
799 (hilit-chg-display-changes))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 ;; This always returns nil so it is safe to use in
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 ;; local-write-file-hook
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 ;; ========================================================================
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
805 ;; Comparing buffers/files
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
806 ;; 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
807
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
808 (defun highlight-markup-buffers
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
809 (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
810 "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
811 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
812 is non-nil."
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
813 (save-window-excursion
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
814 (let* (change-info
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
815 change-a change-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
816 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
817 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
818 (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
819 (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
820 (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
821 (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
822 temp-a temp-b)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
823 (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
824 (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
825 (with-current-buffer buf-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
826 (save-buffer)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
827 (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
828 (setq file-a nil)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
829 (or file-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
830 (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
831
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
832 (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
833 (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
834 (with-current-buffer buf-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
835 (save-buffer)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
836 (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
837 (setq file-b nil)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
838 (or file-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
839 (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
840 (set-buffer buf-a)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
841 (highlight-changes-mode 'active)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
842 (or markup-a-only (with-current-buffer buf-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
843 (highlight-changes-mode 'active)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
844 (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
845
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
846
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
847 (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
848 (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
849
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
850 (hilit-chg-make-list)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
851 (while change-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
852 (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
853 (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
854 (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
855 (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
856 (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
857 (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
858 (set-buffer buf-a)
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 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
860 (or markup-a-only
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
861 (with-current-buffer buf-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
862 (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
863 buf-b-read-only)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
864 ))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
865 (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
866 (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
867 (or bufa-modified
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
868 (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
869 (or bufb-modified
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
870 (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
871 (if temp-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
872 (delete-file temp-a))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
873 (if temp-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
874 (delete-file temp-b)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
875 ))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
876
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
877 ;;;###autoload
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
878 (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
879 "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
880
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
881 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
882
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
883 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
884 to save the file.
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 Unless the buffer is unmodified and visiting a file, the buffer is
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
887 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
888
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
889 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
890 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
891 \\[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
892 (interactive
63252
f4b47991b594 (highlight-changes-colours highlight-changes-face-list,
Juanma Barranquero <lekktu@gmail.com>
parents: 63207
diff changeset
893 (list
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
894 (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
895 (get-buffer
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
896 (read-buffer "buffer-b "
63252
f4b47991b594 (highlight-changes-colours highlight-changes-face-list,
Juanma Barranquero <lekktu@gmail.com>
parents: 63207
diff changeset
897 (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
898 (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
899 (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
900 (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
901 ))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 ;;;###autoload
23288
17dd9ecf84f1 (highlight-compare-with-file): Renamed from
Karl Heuer <kwzh@gnu.org>
parents: 23101
diff changeset
904 (defun highlight-compare-with-file (file-b)
17dd9ecf84f1 (highlight-compare-with-file): Renamed from
Karl Heuer <kwzh@gnu.org>
parents: 23101
diff changeset
905 "Compare this buffer with a file, and highlight differences.
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 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
908 this function is called interactively.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
910 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
911 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
912 read in temporarily but the buffer is deleted.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
914 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
915 changes are made, so \\[highlight-changes-next-change] and
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 \\[highlight-changes-previous-change] will not work."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 (interactive (list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 (read-file-name
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919 "File to compare with? " ;; prompt
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 "" ;; directory
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 nil ;; default
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 'yes ;; must exist
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
923 (let ((f (buffer-file-name (current-buffer))))
63252
f4b47991b594 (highlight-changes-colours highlight-changes-face-list,
Juanma Barranquero <lekktu@gmail.com>
parents: 63207
diff changeset
924 (if f
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
925 (progn
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
926 (setq f (make-backup-file-name f))
63252
f4b47991b594 (highlight-changes-colours highlight-changes-face-list,
Juanma Barranquero <lekktu@gmail.com>
parents: 63207
diff changeset
927 (or (file-exists-p f)
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
928 (setq f nil)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
929 )
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
930 f))))
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)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 (setq e (current-buffer))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 (let ((n 0) extent p va vb a b)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 (setq x nil y nil) ;; x and y are bound by hilit-chg-get-diff-info
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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 ;; ======================= automatic stuff ==============
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1000 ;; Global Highlight Changes mode is modeled after Global Font-lock mode.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001 ;; Three hooks are used to gain control. When Global Changes Mode is
60902
7160fe3a7ef1 find-file-hooks -> find-file-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59601
diff changeset
1002 ;; enabled, `find-file-hook' and `change-major-mode-hook' are set.
7160fe3a7ef1 find-file-hooks -> find-file-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59601
diff changeset
1003 ;; `find-file-hook' is called when visiting a file, the new mode is
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 ;; known at this time.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 ;; `change-major-mode-hook' is called when a buffer is changing mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 ;; This could be because of finding a file in which case
60902
7160fe3a7ef1 find-file-hooks -> find-file-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59601
diff changeset
1007 ;; `find-file-hook' has already been called and has done its work.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 ;; However, it also catches the case where a new mode is being set by
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 ;; the user. However, it is called from `kill-all-variables' and at
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
1010 ;; this time the mode is the old mode, which is not what we want.
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
1011 ;; So, our function temporarily sets `post-command-hook' which will
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 ;; be called after the buffer has been completely set up (with the new
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 ;; mode). It then removes the `post-command-hook'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 ;; One other wrinkle - every M-x command runs the `change-major-mode-hook'
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 ;; so we ignore this by examining the buffer name.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 (defun hilit-chg-major-mode-hook ()
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1019 (add-hook 'post-command-hook 'hilit-chg-post-command-hook))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 (defun hilit-chg-post-command-hook ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 ;; This is called after changing a major mode, but also after each
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
1023 ;; M-x command, in which case the current buffer is a minibuffer.
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
1024 ;; In that case, do not act on it here, but don't turn it off
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1025 ;; either, we will get called here again soon-after.
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
1026 ;; Also, don't enable it for other special buffers.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 (if (string-match "^[ *]" (buffer-name))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 nil ;; (message "ignoring this post-command-hook")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 (remove-hook 'post-command-hook 'hilit-chg-post-command-hook)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1030 ;; The following check isn't necessary, since
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031 ;; hilit-chg-turn-on-maybe makes this check too.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 (or highlight-changes-mode ;; don't turn it on if it already is
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1033 (hilit-chg-turn-on-maybe highlight-changes-global-initial-state))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 (defun hilit-chg-check-global ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 ;; This is called from the find file hook.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037 (hilit-chg-turn-on-maybe highlight-changes-global-initial-state))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041 (defun global-highlight-changes (&optional arg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 "Turn on or off global Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 When called interactively:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 - if no prefix, toggle global Highlight Changes mode on or off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046 - if called with a positive prefix (or just C-u) turn it on in active mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047 - if called with a zero prefix turn it on in passive mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 - if called with a negative prefix turn it off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 When called from a program:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 - if ARG is nil or omitted, turn it off
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
1052 - if ARG is `active', turn it on in active mode
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1053 - if ARG is `passive', turn it on in passive mode
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1054 - otherwise just turn it on
22957
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 When global Highlight Changes mode is enabled, Highlight Changes mode is turned
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 on for future \"suitable\" buffers (and for \"suitable\" existing buffers if
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 variable `highlight-changes-global-changes-existing-buffers' is non-nil).
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1059 \"Suitability\" is determined by variable `highlight-changes-global-modes'."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1061 (interactive
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 (list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 (cond
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 ((null current-prefix-arg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 ;; no arg => toggle it on/off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 (setq global-highlight-changes (not global-highlight-changes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 ;; positive interactive arg - turn it on as active
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 ((> (prefix-numeric-value current-prefix-arg) 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 (setq global-highlight-changes t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 ;; zero interactive arg - turn it on as passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 ((= (prefix-numeric-value current-prefix-arg) 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 (setq global-highlight-changes t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 'passive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 ;; negative interactive arg - turn it off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 (t
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1077 (setq global-highlight-changes nil)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 nil))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 (if arg
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 (if (eq arg 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 (setq highlight-changes-global-initial-state 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 (if (eq arg 'passive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 (setq highlight-changes-global-initial-state 'passive)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 (setq global-highlight-changes t)
44740
385762249723 (global-highlight-changes): Capitalize status texts.
Pavel Janík <Pavel@Janik.cz>
parents: 43132
diff changeset
1087 (message "Turning ON Global Highlight Changes mode in %s state"
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 highlight-changes-global-initial-state)
60902
7160fe3a7ef1 find-file-hooks -> find-file-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59601
diff changeset
1089 ;; FIXME: Not sure what this was intended to do. --Stef
7160fe3a7ef1 find-file-hooks -> find-file-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59601
diff changeset
1090 ;; (add-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook)
7160fe3a7ef1 find-file-hooks -> find-file-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59601
diff changeset
1091 (add-hook 'find-file-hook 'hilit-chg-check-global)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 (if highlight-changes-global-changes-existing-buffers
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1093 (hilit-chg-update-all-buffers
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1094 highlight-changes-global-initial-state)))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1095
44740
385762249723 (global-highlight-changes): Capitalize status texts.
Pavel Janík <Pavel@Janik.cz>
parents: 43132
diff changeset
1096 (message "Turning OFF global Highlight Changes mode")
60902
7160fe3a7ef1 find-file-hooks -> find-file-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59601
diff changeset
1097 ;; FIXME: Not sure what this was intended to do. --Stef
7160fe3a7ef1 find-file-hooks -> find-file-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59601
diff changeset
1098 ;; (remove-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook)
7160fe3a7ef1 find-file-hooks -> find-file-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59601
diff changeset
1099 (remove-hook 'post-command-hook 'hilit-chg-post-command-hook)
7160fe3a7ef1 find-file-hooks -> find-file-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59601
diff changeset
1100 (remove-hook 'find-file-hook 'hilit-chg-check-global)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 (if highlight-changes-global-changes-existing-buffers
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1102 (hilit-chg-update-all-buffers nil))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 (defun hilit-chg-turn-on-maybe (value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 "Turn on Highlight Changes mode if it is appropriate for this buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 A buffer is appropriate for Highlight Changes mode if all these are true:
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1109 - the buffer is not a special buffer (one whose name begins with
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 `*' or ` ')
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1111 - the buffer's mode is suitable as per variable
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1112 `highlight-changes-global-modes'
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 - Highlight Changes mode is not already on for this buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1115 This function is called from `hilit-chg-update-all-buffers' or
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1116 from `global-highlight-changes' when turning on global Highlight Changes mode."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 (or highlight-changes-mode ; do nothing if already on
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 (if
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 (cond
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 ((null highlight-changes-global-modes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 ((functionp highlight-changes-global-modes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 (funcall highlight-changes-global-modes))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 ((listp highlight-changes-global-modes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 (if (eq (car-safe highlight-changes-global-modes) 'not)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 (not (memq major-mode (cdr highlight-changes-global-modes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 (memq major-mode highlight-changes-global-modes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 (t
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1129 (and
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 (not (string-match "^[ *]" (buffer-name)))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1131 (buffer-file-name))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 (hilit-chg-set value)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1134 (run-hooks 'highlight-changes-enable-hook)))))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1135
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137 (defun hilit-chg-turn-off-maybe ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140 (run-hooks 'highlight-changes-disable-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 (hilit-chg-clear))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 (defun hilit-chg-update-all-buffers (value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 (mapcar
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 (function (lambda (buffer)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147 (with-current-buffer buffer
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 (if value
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 (hilit-chg-turn-on-maybe value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150 (hilit-chg-turn-off-maybe))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151 )))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 (buffer-list)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154 ;; ===================== debug ==================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155 ;; For debug & test use:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157 ;; (defun hilit-chg-debug-show (&optional beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158 ;; (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1159 ;; (message "--- hilit-chg-debug-show ---")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 ;; (hilit-chg-map-changes '(lambda (prop start end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161 ;; (message "%d-%d: %s" start end prop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162 ;; )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 ;; beg end
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 ;; ))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1165 ;;
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 ;; ================== end of debug ===============
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168 (provide 'hilit-chg)
22958
cd50dfa70bb2 Delete the undo-in-progress compatibility code.
Richard M. Stallman <rms@gnu.org>
parents: 22957
diff changeset
1169
59601
73b89f6377fc (highlight-changes-mode): Don't autoload.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54009
diff changeset
1170 ;; arch-tag: de00301d-5bad-44da-aa82-e0e010b0c463
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 ;;; hilit-chg.el ends here