annotate lisp/hilit-chg.el @ 61263:56619c3aaf99

(fancy-splash-text): Shorten default text of "Emacs Tutorial" line. Also, if the current language env indicates an available tutorial file other than TUTORIAL, extract its title and append it to the line in parentheses. (fancy-splash-insert): If arg is a thunk, funcall it.
author Thien-Thi Nguyen <ttn@gnuvola.org>
date Mon, 04 Apr 2005 07:41:58 +0000
parents 7160fe3a7ef1
children 31aa9a390538 4da4a09e8b1b
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 ;;
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; When active, changes are displayed in `highlight-changes-face'. When
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
41 ;; text is deleted, the following character is displayed in
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; `highlight-changes-delete-face' face.
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
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
51 ;; `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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 (defface highlight-changes-face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 '((((class color)) (:foreground "red" ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 (t (:inverse-video t)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 "Face used for highlighting changes."
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
219 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 ;; This looks pretty ugly, actually. Maybe the underline should be removed.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 (defface highlight-changes-delete-face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 '((((class color)) (:foreground "red" :underline t))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 (t (:inverse-video t)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 "Face used for highlighting deletions."
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
226 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 ;; A (not very good) default list of colours to rotate through.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 ;;
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
232 (defcustom highlight-changes-colours
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 (if (eq (frame-parameter nil 'background-mode) 'light)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 ;; defaults for light background:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 '( "magenta" "blue" "darkgreen" "chocolate" "sienna4" "NavyBlue")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 ;; defaults for dark background:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 '("yellow" "magenta" "blue" "maroon" "firebrick" "green4" "DarkOrchid"))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 "*Colours used by `highlight-changes-rotate-faces'.
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
239 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
240 the next older will be in the second element etc.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
242 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
243 variable overrides this list. If you only care about foreground
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
244 colours then use this, if you want fancier faces then set
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 `highlight-changes-face-list'."
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
246 :type '(repeat color)
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
247 :group 'highlight-changes)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
248
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
250 ;; 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
251 ;; active or passive mode?
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 (defcustom highlight-changes-initial-state 'active
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 "*What state (active or passive) `highlight-changes' should start in.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 This is used when `highlight-changes' is called with no argument.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 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
257 :type '(choice (const :tag "Active" active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 (const :tag "Passive" passive))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
259 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 (defcustom highlight-changes-global-initial-state 'passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 "*What state `global-highlight-changes' should start in.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 This is used if `global-highlight-changes' is called with no argument.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 This variable must be set to either `active' or `passive'"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 :type '(choice (const :tag "Active" active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 (const :tag "Passive" passive))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
267 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 ;; 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
270 (defcustom highlight-changes-active-string " +Chg"
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 "*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
272 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
273 a string with a leading space."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 :type '(choice string
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 (const :tag "None" nil))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
276 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277
43132
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
278 (defcustom highlight-changes-passive-string " -Chg"
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 "*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
280 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
281 a string with a leading space."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 :type '(choice string
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 (const :tag "None" nil))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
284 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 (defcustom highlight-changes-global-modes t
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 "*Determine whether a buffer is suitable for global Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288
43132
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
289 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
290 the buffer is suitable.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291
43132
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
292 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
293 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
294 modes which are not suitable.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295
43132
0dd2ebecd217 (highlight-changes-active-string): Default to +Chg.
Richard M. Stallman <rms@gnu.org>
parents: 43030
diff changeset
296 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
297 does not begin with ` ' or `*'.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
299 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
300 \(effectively disabling the mode).
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302 Examples:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 (c-mode c++-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 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
305 modes only."
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
306 :type '(choice
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 (const :tag "all non-special buffers visiting files" t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 (set :menu-tag "specific modes" :tag "modes"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 :value (not)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 (const :tag "All except these" not)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 (repeat :tag "Modes" :inline t (symbol :tag "mode")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 (function :menu-tag "determined by function"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 :value buffer-file-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 (const :tag "none" nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 )
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
316 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 (defvar global-highlight-changes nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 (defcustom highlight-changes-global-changes-existing-buffers nil
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
321 "*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
322 Normally, `global-highlight-changes' affects only new buffers (to be
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
323 created). However, if `highlight-changes-global-changes-existing-buffers'
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
324 is non-nil, then turning on `global-highlight-changes' will turn on
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
325 Highlight Changes mode in suitable buffers, and turning the mode off will
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 remove it from existing buffers."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 :type 'boolean
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 :group 'highlight-changes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 (defun hilit-chg-cust-fix-changes-face-list (w wc &optional event)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 ;; 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
332 ;; 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
333 ;; 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
334 ;; actually done by copying the faces so user-defined faces still remain
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 ;; in the same order.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 ;; The notifying the parent is needed because without it changes to the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 ;; faces are saved but not to the actual list itself.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 (let ((old-list (widget-value w)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 (if (member 'default old-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 (let
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 ((p (reverse old-list))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 (n (length old-list))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 new-name old-name
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 (new-list nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 (setq old-name (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 (setq new-name (intern (format "highlight-changes-face-%d" n)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 (if (eq old-name new-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 nil
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 ;; 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
352 ;; default face so copy it. Better, though, (I think) is to
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 ;; make a new face have the same attributes as
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 ;; highlight-changes-face .
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 (if (eq old-name 'default)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (copy-face 'highlight-changes-face new-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 (copy-face old-name new-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 (setq new-list (append (list new-name) new-list))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 (setq n (1- n))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 (setq p (cdr p)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 (if (equal new-list (widget-value w))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 nil ;; (message "notify: no change!")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 (widget-value-set w new-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 (widget-setup)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 ;; (message "notify: no default here!")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 (let ((parent (widget-get w :parent)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 (when parent
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
372 (widget-apply parent :notify w event))))
22957
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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 (defcustom highlight-changes-face-list nil
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
376 "*A list of faces used when rotating changes.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 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
378 `highlight-changes-colours' when needed. However, you can set this variable
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 to any list of faces. You will have to do this if you want faces which
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 don't just differ from `highlight-changes-face' by the foreground colour.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 Otherwise, this list will be constructed when needed from
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 `highlight-changes-colours'."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 :type '(choice
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
384 (repeat
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 :notify hilit-chg-cust-fix-changes-face-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 face )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 (const :tag "Derive from highlight-changes-colours" nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 )
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
389 :group 'highlight-changes)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 ;; ========================================================================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 ;; These shouldn't be changed!
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 (defvar highlight-changes-mode nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 (defvar hilit-chg-list nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 (defvar hilit-chg-string " ??")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 (or (assq 'highlight-changes-mode minor-mode-alist)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 (setq minor-mode-alist
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 (cons '(highlight-changes-mode hilit-chg-string) minor-mode-alist)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 (make-variable-buffer-local 'highlight-changes-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 (make-variable-buffer-local 'hilit-chg-string)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
406 (require 'ediff-init)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
407 (require 'ediff-util)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 ;;; Functions...
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 (defun hilit-chg-map-changes (func &optional start-position end-position)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 "Call function FUNC for each region used by Highlight Changes mode."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 ;; if start-position is nil, (point-min) is used
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 ;; if end-position is nil, (point-max) is used
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 ;; FUNC is called with 3 params: property start stop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 (let ((start (or start-position (point-min)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 (limit (or end-position (point-max)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 prop end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 (while (and start (< start limit))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 (setq prop (get-text-property start 'hilit-chg))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 (setq end (text-property-not-all start limit 'hilit-chg prop))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 (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
425 (setq start end))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 (defun hilit-chg-display-changes (&optional beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 "Display face information for Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
431 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
432 in the text property of type `hilit-chg'.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
434 This is the opposite of `hilit-chg-hide-changes'."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 (hilit-chg-map-changes 'hilit-chg-make-ov beg end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 (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
439 (or prop
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
440 (error "hilit-chg-make-ov: prop is nil"))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 ;; for the region make change overlays corresponding to
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 ;; the text property 'hilit-chg
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 (let ((ov (make-overlay start end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 (if (eq prop 'hilit-chg-delete)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 (setq face 'highlight-changes-delete-face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 (setq face (nth 1 (member prop hilit-chg-list))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 (if face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 (progn
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
450 ;; 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
451 (overlay-put ov 'face face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 ;; I don't think we need to set evaporate since we should
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 ;; be controlling them!
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 (overlay-put ov 'evaporate t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 ;; We set the change property so we can tell this is one
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 ;; of our overlays (so we don't delete someone else's).
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 (overlay-put ov 'hilit-chg t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 )
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
459 (error "hilit-chg-make-ov: no face for prop: %s" prop))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 (defun hilit-chg-hide-changes (&optional beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 "Remove face information for Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
464 The overlay containing the face is removed, but the text property
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 containing the change information is retained.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
467 This is the opposite of `hilit-chg-display-changes'."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 (let ((start (or beg (point-min)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 (limit (or end (point-max)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 p ov)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 (setq p (overlays-in start limit))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 ;; don't delete the overlay if it isn't ours!
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 (if (overlay-get (car p) 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 (delete-overlay (car p)))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
476 (setq p (cdr p)))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 (defun hilit-chg-fixup (beg end)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
479 "Fix change overlays in region between BEG and END.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 Ensure the overlays agree with the changes as determined from
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 the text properties of type `hilit-chg' ."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 ;; 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
484 (let (ov-start ov-end props q)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 ;; temp for debugging:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 ;; (or (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 ;; (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
488 (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
489 ;; 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
490 (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
491 (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
492 (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
493 (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
494 (progn
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
495 (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
496 (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
497 (progn
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
498 (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
499 (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
500 (while props
90bce6424b8b (hilit-chg-fixup): Don't alter overlay if not ours.
Richard M. Stallman <rms@gnu.org>
parents: 41701
diff changeset
501 (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
502 (setq props (cdr (cdr props)))))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 (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
504 (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
505 (delete-overlay ov))))))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
506 (hilit-chg-display-changes beg end)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 ;;;###autoload
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
509 (defun highlight-changes-remove-highlight (beg end)
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
510 "Remove the change face from the region between BEG and END.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 This allows you to manually remove highlighting from uninteresting changes."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 (interactive "r")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 (let ((after-change-functions nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 (remove-text-properties beg end '(hilit-chg nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 (hilit-chg-fixup beg end)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
517 (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
518 &optional no-property-change)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 "Record changes and optionally display them in a distinctive face.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 `hilit-chg-set' adds this function to the `after-change-functions' hook."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 ;; This function is called by the `after-change-functions' hook, which
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 ;; is how we are notified when text is changed.
23289
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
524 ;; It is also called from `highlight-compare-with-file'.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 ;; 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
527 ;; 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
528 ;; are automatically restored by undo, we must fix up the overlay.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 (save-match-data
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 (let ((beg-decr 1) (end-incr 1)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 (type 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 old)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 (if undo-in-progress
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 (hilit-chg-fixup beg end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 (if (and (= beg end) (> leng-before 0))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 ;; deletion
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 ;; 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
540 ;; 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
541 ;; 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
542 ;; immediately makes a correction, and when deleting first
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 ;; character of a line.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 ;;; (if (= leng-before 1)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 ;;; (if (eolp)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 ;;; (setq beg-decr 0 end-incr 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 ;;; (if (bolp)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 ;;; (setq beg-decr 0))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 ;;; (setq beg (max (- beg beg-decr) (point-min)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 (setq end (min (+ end end-incr) (point-max)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 (setq type 'hilit-chg-delete))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 ;; Not a deletion.
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
553 ;; Most of the time the following is not necessary, but
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 ;; if the current text was marked as a deletion then
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 ;; 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
556 ;; text then remove the deletion marking, but set it to
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 ;; changed otherwise its highlighting disappears.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 (if (eq (get-text-property end 'hilit-chg) 'hilit-chg-delete)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 (remove-text-properties end (+ end 1) '(hilit-chg nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 (put-text-property end (+ end 1) 'hilit-chg 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 (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
564 (unless no-property-change
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 (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
566 (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
567 (hilit-chg-make-ov type beg end))))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 (defun hilit-chg-set (value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 "Turn on Highlight Changes mode for this buffer."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 (setq highlight-changes-mode value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 (remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 (hilit-chg-make-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 (setq hilit-chg-string highlight-changes-active-string)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 (or buffer-read-only
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (hilit-chg-display-changes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 ;; mode is passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 (setq hilit-chg-string highlight-changes-passive-string)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 (or buffer-read-only
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
582 (hilit-chg-hide-changes)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 (force-mode-line-update)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
584 (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
585
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 (defun hilit-chg-clear ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 "Remove Highlight Changes mode for this buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 This removes all saved change information."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 (if buffer-read-only
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 ;; We print the buffer name because this function could be called
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 ;; on many buffers from `global-highlight-changes'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 (message "Cannot remove highlighting from read-only mode buffer %s"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 (buffer-name))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 (remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 (let ((after-change-functions nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 (hilit-chg-hide-changes)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
597 (hilit-chg-map-changes
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 '(lambda (prop start stop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 (remove-text-properties start stop '(hilit-chg nil))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 (setq highlight-changes-mode nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 (force-mode-line-update)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 ;; 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
604 ;; 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
605 ;; 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
606 (remove-hook 'post-command-hook 'hilit-chg-post-command-hook)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 (defun highlight-changes-mode (&optional arg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 "Toggle (or initially set) Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
612 Without an argument:
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
613 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
614 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
615 `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
616 and passive state.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
618 With an argument ARG:
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
619 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
620 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
621 If ARG is negative, disable Highlight Changes mode completely.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
623 Active state - means changes are shown in a distinctive face.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 Passive state - means changes are kept and new ones recorded but are
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 not displayed in a different face.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 Functions:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 \\[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
629 \\[highlight-changes-previous-change] - move to beginning of previous change
23289
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
630 \\[highlight-compare-with-file] - mark text as changed by comparing this
8825530c80cd Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 23288
diff changeset
631 buffer with the contents of a file
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 \\[highlight-changes-remove-highlight] - remove the change face from the region
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 \\[highlight-changes-rotate-faces] - rotate different \"ages\" of changes \
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
634 through
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 various faces.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 Hook variables:
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
638 `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
639 `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
640 `highlight-changes-disable-hook' - when turning off Highlight Changes mode."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 (interactive "P")
29204
d38a98cddcec (highlight-changes-mode): Ask about color or
Eli Zaretskii <eliz@gnu.org>
parents: 25533
diff changeset
642 (if (or (display-color-p)
d38a98cddcec (highlight-changes-mode): Ask about color or
Eli Zaretskii <eliz@gnu.org>
parents: 25533
diff changeset
643 (and (fboundp 'x-display-grayscale-p) (x-display-grayscale-p)))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 (let ((was-on highlight-changes-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 (new-highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 (cond
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 ((null arg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 ;; no arg => toggle (or set to active initially)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 (if (eq highlight-changes-mode 'active) 'passive 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 highlight-changes-initial-state))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 ;; an argument is given
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 ((eq arg 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 ((eq arg 'passive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 'passive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 ((> (prefix-numeric-value arg) 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 ((< (prefix-numeric-value arg) 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 (t
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
662 'passive))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 (if new-highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 ;; mode is turned on -- but may be passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 (hilit-chg-set new-highlight-changes-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 (or was-on
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 ;; run highlight-changes-enable-hook once
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 (run-hooks 'highlight-changes-enable-hook))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 (run-hooks 'highlight-changes-toggle-hook))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 ;; mode is turned off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 (run-hooks 'highlight-changes-disable-hook)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
673 (hilit-chg-clear)))
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
674 (message "Highlight Changes mode requires color or grayscale display")))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 (defun highlight-changes-next-change ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 "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
679 (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 (let ((start (point))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 prop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 (setq prop (get-text-property (point) 'hilit-chg))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 ;; we are in a change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 (setq start (next-single-property-change (point) 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 (setq start (next-single-property-change start 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 (goto-char start)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 (message "no next change")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 (message "This buffer is not in Highlight Changes mode.")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 (defun highlight-changes-previous-change ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 "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
698 (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 (let ( (start (point)) (prop nil) )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 (or (bobp)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 (setq prop (get-text-property (1- (point)) 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 ;; we are in a change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 (setq start (previous-single-property-change (point) 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 (setq start (previous-single-property-change start 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 ;; special handling for the case where (point-min) is a change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 (setq start (or (previous-single-property-change start 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 (if (get-text-property (point-min) 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 (point-min)))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 (goto-char start)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 (message "no previous change")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 (message "This buffer is not in Highlight Changes mode.")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 ;; ========================================================================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 (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
721 "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
722 ;; Constructs highlight-changes-face-list if necessary,
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 ;; and hilit-chg-list always:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 ;; Maybe this should always be called when rotating a face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 ;; so we pick up any changes?
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 (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
727 force) ; already exists unless FORCE non-nil.
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
728 (let ((p highlight-changes-colours)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 (n 1) name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 (setq highlight-changes-face-list nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 (setq name (intern (format "highlight-changes-face-%d" n)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 (copy-face 'highlight-changes-face name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 (set-face-foreground name (car p))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
735 (setq highlight-changes-face-list
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 (append highlight-changes-face-list (list name)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 (setq p (cdr p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 (setq n (1+ n)))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 (setq hilit-chg-list (list 'hilit-chg 'highlight-changes-face))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 (let ((p highlight-changes-face-list)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
741 (n 1)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 last-category last-face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 (setq last-category (intern (format "change-%d" n)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 ;; (setq last-face (intern (format "highlight-changes-face-%d" n)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 (setq last-face (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 (setq hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 (append hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 (list last-category last-face)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 (setq p (cdr p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 (setq n (1+ n)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 (setq hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753 (append hilit-chg-list
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
754 (list last-category last-face)))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 (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
757 "Increment (age) the Highlight Changes mode text property."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 (let ( new-prop )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 (if (eq prop 'hilit-chg-delete)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 (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
761 (setq new-prop (nth 2 (member prop hilit-chg-list))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 (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
764 (message "%d-%d unknown property %s not changed" start end prop))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 (defun highlight-changes-rotate-faces ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 "Rotate the faces used by Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
770 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
771 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
772 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
773 shown in the last face in the list.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 You can automatically rotate colours when the buffer is saved
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
776 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
777 buffer to be saved):
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
778
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
779 \(add-hook 'local-write-file-hooks 'highlight-changes-rotate-faces)"
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 ;; 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
782 ;; may be bound to a hook.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 (let ((after-change-functions nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 ;; ensure hilit-chg-list is made and up to date
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 (hilit-chg-make-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 ;; remove our existing overlays
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 (hilit-chg-hide-changes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 ;; for each change text property, increment it
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 (hilit-chg-map-changes 'hilit-chg-bump-change)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 ;; and display them all if active
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 (if (eq highlight-changes-mode 'active)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
793 (hilit-chg-display-changes))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 ;; This always returns nil so it is safe to use in
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 ;; local-write-file-hook
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 ;; ========================================================================
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
799 ;; Comparing buffers/files
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
800 ;; 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
801
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
802 (defun highlight-markup-buffers
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
803 (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
804 "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
805 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
806 is non-nil."
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
807 (save-window-excursion
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
808 (let* (change-info
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
809 change-a change-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
810 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
811 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
812 (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
813 (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
814 (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
815 (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
816 temp-a temp-b)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
817 (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
818 (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
819 (with-current-buffer buf-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
820 (save-buffer)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
821 (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
822 (setq file-a nil)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
823 (or file-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
824 (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
825
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
826 (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
827 (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
828 (with-current-buffer buf-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
829 (save-buffer)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
830 (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
831 (setq file-b nil)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
832 (or file-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
833 (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
834 (set-buffer buf-a)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
835 (highlight-changes-mode 'active)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
836 (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
837 (highlight-changes-mode 'active)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
838 (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
839
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
840
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
841 (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
842 (setq change-b (car (cdr change-info)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
843
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
844 (hilit-chg-make-list)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
845 (while change-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
846 (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
847 (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
848 (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
849 (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
850 (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
851 (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
852 (set-buffer buf-a)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
853 (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
854 (or markup-a-only
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
855 (with-current-buffer buf-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
856 (hilit-chg-set-face-on-change 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
857 buf-b-read-only)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
858 ))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
859 (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
860 (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
861 (or bufa-modified
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
862 (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
863 (or bufb-modified
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
864 (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
865 (if temp-a
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
866 (delete-file temp-a))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
867 (if temp-b
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
868 (delete-file temp-b)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
869 ))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
870
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
871 ;;;###autoload
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
872 (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
873 "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
874
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
875 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
876
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
877 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
878 to save the file.
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
879
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
880 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
881 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
882
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
883 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
884 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
885 \\[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
886 (interactive
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
887 (list
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
888 (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
889 (get-buffer
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
890 (read-buffer "buffer-b "
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
891 (window-buffer (next-window (selected-window))) t))))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
892 (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
893 (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
894 (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
895 ))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 ;;;###autoload
23288
17dd9ecf84f1 (highlight-compare-with-file): Renamed from
Karl Heuer <kwzh@gnu.org>
parents: 23101
diff changeset
898 (defun highlight-compare-with-file (file-b)
17dd9ecf84f1 (highlight-compare-with-file): Renamed from
Karl Heuer <kwzh@gnu.org>
parents: 23101
diff changeset
899 "Compare this buffer with a file, and highlight differences.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
901 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
902 this function is called interactively.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
904 If the 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
905 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
906 read in temporarily but the buffer is deleted.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
908 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
909 changes are made, so \\[highlight-changes-next-change] and
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 \\[highlight-changes-previous-change] will not work."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 (interactive (list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 (read-file-name
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 "File to compare with? " ;; prompt
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 "" ;; directory
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 nil ;; default
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 'yes ;; must exist
54009
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
917 (let ((f (buffer-file-name (current-buffer))))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
918 (if f
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
919 (progn
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
920 (setq f (make-backup-file-name f))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
921 (or (file-exists-p f)
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
922 (setq f nil)))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
923 )
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
924 f))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 (let* ((buf-a (current-buffer))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 (file-a (buffer-file-name))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 (existing-buf (get-file-buffer file-b))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 (buf-b (or existing-buf
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 (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
930 (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
931 (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
932 (unless existing-buf
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
933 (kill-buffer buf-b))
303333d2f1f3 Use require instead of eval-and-compile.
Eli Zaretskii <eliz@is.elta.co.il>
parents: 52401
diff changeset
934 ))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 (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
938 (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
939 (ediff-setup buf-a file-a buf-b file-b
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 nil nil ; buf-c file-C
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 'hilit-chg-get-diff-list-hk
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 (list (cons 'ediff-job-name 'something))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 (ediff-with-current-buffer e (ediff-really-quit nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 (list x y)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 (defun hilit-chg-get-diff-list-hk ()
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
949 ;; 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
950 ;; which calls this function as a hook
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 (defvar x) ;; placate the byte-compiler
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 (defvar y)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 (setq e (current-buffer))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 (let ((n 0) extent p va vb a b)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 (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
956 (while (< n ediff-number-of-differences)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 (ediff-make-fine-diffs n)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 (setq va (ediff-get-fine-diff-vector n 'A))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 ;; va is a vector if there are fine differences
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 (if va
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 (setq a (append va nil))
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
962 ;; if not, get the unrefined difference
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 (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
964 (setq a (list (elt va 0))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 ;; a list a list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966 (setq p a)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 (setq extent (list (overlay-start (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 (overlay-end (car p))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 (setq p (cdr p))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
971 (setq x (append x (list extent) )));; while p
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 (setq vb (ediff-get-fine-diff-vector n 'B))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 ;; vb is a vector
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 (if vb
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 (setq b (append vb nil))
47259
08b8c2bc2e81 (highlight-changes-colours, highlight-changes-active-string,
Juanma Barranquero <lekktu@gmail.com>
parents: 44740
diff changeset
977 ;; if not, get the unrefined difference
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 (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
979 (setq b (list (elt vb 0))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 ;; b list a list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 (setq p b)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983 (setq extent (list (overlay-start (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 (overlay-end (car p))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 (setq p (cdr p))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
986 (setq y (append y (list extent) )))
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
987 (setq n (1+ n)));; while
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 ;; ediff-quit doesn't work here.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 ;; No point in returning a value, since this is a hook function.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 ;; ======================= automatic stuff ==============
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
994 ;; Global Highlight Changes mode is modeled after Global Font-lock mode.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 ;; 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
996 ;; 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
997 ;; `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
998 ;; known at this time.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 ;; `change-major-mode-hook' is called when a buffer is changing mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 ;; 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
1001 ;; `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
1002 ;; 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
1003 ;; 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
1004 ;; 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
1005 ;; So, our function temporarily sets `post-command-hook' which will
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 ;; 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
1007 ;; mode). It then removes the `post-command-hook'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 ;; 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
1009 ;; so we ignore this by examining the buffer name.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 (defun hilit-chg-major-mode-hook ()
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1013 (add-hook 'post-command-hook 'hilit-chg-post-command-hook))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 (defun hilit-chg-post-command-hook ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 ;; 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
1017 ;; 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
1018 ;; 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
1019 ;; 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
1020 ;; Also, don't enable it for other special buffers.
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 (if (string-match "^[ *]" (buffer-name))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 nil ;; (message "ignoring this post-command-hook")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 (remove-hook 'post-command-hook 'hilit-chg-post-command-hook)
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1024 ;; The following check isn't necessary, since
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 ;; hilit-chg-turn-on-maybe makes this check too.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 (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
1027 (hilit-chg-turn-on-maybe highlight-changes-global-initial-state))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 (defun hilit-chg-check-global ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 ;; This is called from the find file hook.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031 (hilit-chg-turn-on-maybe highlight-changes-global-initial-state))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 (defun global-highlight-changes (&optional arg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 "Turn on or off global Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038 When called interactively:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 - if no prefix, toggle global Highlight Changes mode on or off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 - 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
1041 - if called with a zero prefix turn it on in passive mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 - if called with a negative prefix turn it off
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 from a program:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 - 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
1046 - 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
1047 - if ARG is `passive', turn it on in passive mode
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1048 - otherwise just turn it on
22957
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 global Highlight Changes mode is enabled, Highlight Changes mode is turned
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 on for future \"suitable\" buffers (and for \"suitable\" existing buffers if
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 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
1053 \"Suitability\" is determined by variable `highlight-changes-global-modes'."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1055 (interactive
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 (list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 (cond
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 ((null current-prefix-arg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 ;; no arg => toggle it on/off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 (setq global-highlight-changes (not global-highlight-changes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 ;; positive interactive arg - turn it on as active
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 ((> (prefix-numeric-value current-prefix-arg) 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 (setq global-highlight-changes t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 ;; zero interactive arg - turn it on as passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 ((= (prefix-numeric-value current-prefix-arg) 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 (setq global-highlight-changes t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 'passive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 ;; negative interactive arg - turn it off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 (t
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1071 (setq global-highlight-changes nil)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 nil))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 (if arg
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 (if (eq arg 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 (setq highlight-changes-global-initial-state 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 (if (eq arg 'passive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 (setq highlight-changes-global-initial-state 'passive)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 (setq global-highlight-changes t)
44740
385762249723 (global-highlight-changes): Capitalize status texts.
Pavel Janík <Pavel@Janik.cz>
parents: 43132
diff changeset
1081 (message "Turning ON Global Highlight Changes mode in %s state"
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 highlight-changes-global-initial-state)
60902
7160fe3a7ef1 find-file-hooks -> find-file-hook.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59601
diff changeset
1083 ;; 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
1084 ;; (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
1085 (add-hook 'find-file-hook 'hilit-chg-check-global)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 (if highlight-changes-global-changes-existing-buffers
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1087 (hilit-chg-update-all-buffers
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1088 highlight-changes-global-initial-state)))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1089
44740
385762249723 (global-highlight-changes): Capitalize status texts.
Pavel Janík <Pavel@Janik.cz>
parents: 43132
diff changeset
1090 (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
1091 ;; 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
1092 ;; (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
1093 (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
1094 (remove-hook 'find-file-hook 'hilit-chg-check-global)
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 (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
1096 (hilit-chg-update-all-buffers nil))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 (defun hilit-chg-turn-on-maybe (value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 "Turn on Highlight Changes mode if it is appropriate for this buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 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
1103 - 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
1104 `*' or ` ')
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1105 - 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
1106 `highlight-changes-global-modes'
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 - Highlight Changes mode is not already on for this buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1109 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
1110 from `global-highlight-changes' when turning on global Highlight Changes mode."
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 (or highlight-changes-mode ; do nothing if already on
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 (if
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 (cond
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 ((null highlight-changes-global-modes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 ((functionp highlight-changes-global-modes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 (funcall highlight-changes-global-modes))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 ((listp highlight-changes-global-modes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 (if (eq (car-safe highlight-changes-global-modes) 'not)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 (not (memq major-mode (cdr highlight-changes-global-modes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 (memq major-mode highlight-changes-global-modes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 (t
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1123 (and
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 (not (string-match "^[ *]" (buffer-name)))
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1125 (buffer-file-name))))
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 (hilit-chg-set value)
30962
b309b17a6025 General cleanup of doc strings, comments and
Gerd Moellmann <gerd@gnu.org>
parents: 30924
diff changeset
1128 (run-hooks 'highlight-changes-enable-hook)))))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1129
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 (defun hilit-chg-turn-off-maybe ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 (run-hooks 'highlight-changes-disable-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 (hilit-chg-clear))))
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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 (defun hilit-chg-update-all-buffers (value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 (mapcar
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140 (function (lambda (buffer)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 (with-current-buffer buffer
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 (if value
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143 (hilit-chg-turn-on-maybe value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 (hilit-chg-turn-off-maybe))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 )))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 (buffer-list)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 ;; ===================== debug ==================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 ;; For debug & test use:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151 ;; (defun hilit-chg-debug-show (&optional beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 ;; (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 ;; (message "--- hilit-chg-debug-show ---")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154 ;; (hilit-chg-map-changes '(lambda (prop start end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155 ;; (message "%d-%d: %s" start end prop)
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 ;; beg end
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158 ;; ))
49588
37645a051842 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 47259
diff changeset
1159 ;;
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 ;; ================== end of debug ===============
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162 (provide 'hilit-chg)
22958
cd50dfa70bb2 Delete the undo-in-progress compatibility code.
Richard M. Stallman <rms@gnu.org>
parents: 22957
diff changeset
1163
59601
73b89f6377fc (highlight-changes-mode): Don't autoload.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 54009
diff changeset
1164 ;; arch-tag: de00301d-5bad-44da-aa82-e0e010b0c463
22957
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 ;;; hilit-chg.el ends here