annotate lisp/hilit-chg.el @ 22957:dd92cb09f5d1

Initial revision
author Richard M. Stallman <rms@gnu.org>
date Sat, 08 Aug 1998 22:20:17 +0000
parents
children cd50dfa70bb2
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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1998 Free Software Foundation, Inc.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: Richard Sharman <rsharman@magma.ca>
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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; This program is free software; you can redistribute it and/or modify
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 ;; 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
10 ;; the Free Software Foundation; either version 2, or (at your option)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; any later version.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; This program is distributed in the hope that it will be useful,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU General Public License for more details.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; You should have received a copy of the GNU General Public License
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; 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
20 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; Boston, MA 02111-1307, USA.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;;; Commentary:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;; A minor mode: "Highlight Changes mode".
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; Highlight Changes mode has 2 submodes: active and passive.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; When active, changes to the buffer are displayed in a different face.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; When passive, any existing displayed changes are saved and new ones
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; recorded but are not displayed differently.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; 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
34 ;; want the information but very distracting otherwise. So, you can keep
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; Highlight Changes mode in passive state while you make your changes, toggle
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; 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
37 ;; distraction.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; When active, changes are displayed in `highlight-changes-face'. When
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; text is deleted, the following character is displayed in
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; `highlight-changes-delete-face' face.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;;
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 ;; You can "age" different sets of changes by using
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; `highlight-changes-rotate-faces'. This rotates different through a series
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 ;; of different faces, so you can distinguish "new" changes from "older"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 ;; changes. You can customize these "rotates" faces in two ways. You can
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 ;; either explicitly define each face by customizing
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;; `highlight-changes-face-list'. If, however, the faces differ from
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;; `highlight-changes-face' only in the foreground colour, you can simply set
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 ;; `highlight-changes-colours'. If `highlight-changes-face-list' is nil when
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;; the faces are required they will be constructed from
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;; `highlight-changes-colours'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 ;;
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 ;; 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
57 ;; to the next or previous change with `highlight-changes-next-change' and
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 ;; `highlight-changes-previous-change'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59 ;;
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 ;; You can also use the command compare-with-file to show changes in this
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;; file compared with another file (typically the previous version of the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;; file).
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;; There are currently three hooks run by `highlight-changes-mode':
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;; `highlight-changes-enable-hook' - is run when Highlight Changes mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; is initially enabled for a buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; `highlight-changes-disable-hook' - is run when Highlight Changes mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;; is turned off.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; `highlight-changes-toggle-hook' - is run each time `highlight-changes-mode'
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; is called. Typically this is when
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;; toggling between active and passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;; modes. The variable
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;; `highlight-changes-mode' contains the new
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; state (`active' or `passive'.)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;; Example usage:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;; (defun my-highlight-changes-enable-hook ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; (add-hook 'local-write-file-hooks 'highlight-changes-rotate-faces)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;; (defun my-highlight-changes-disable-hook ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 ;; (remove-hook 'local-write-file-hooks 'highlight-changes-rotate-faces)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;; )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 ;; (add-hook 'highlight-changes-enable-hook 'my-highlight-changes-enable-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 ;; (add-hook 'highlight-changes-disable-hook
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 ;; 'my-highlight-changes-disable-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 ;; Explciit vs. Implicit
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 ;; Normally, Highlight Changes mode is turned on explicitly in a buffer.
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 ;; 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
100 ;; follows.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 ;; 1. Most modes have a major-hook, typically called MODE-hook. You
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 ;; can use `add-hook' to call `highlight-changes-mode'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 ;; Example:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 ;; (add-hook 'c-mode-hook 'highlight-changes-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ;; 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
109 ;; setting of highlight-changes-initial-state):
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 ;; (add-hook 'emacs-lisp-mode-hook
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 ;; (lambda ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 ;; (highlight-changes-mode 'passive)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 ;; However, this cannot be done for Fundamental mode for there is no
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 ;; such hook.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 ;; 2. You can use the function `global-highlight-changes'
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 ;; This function, which is fashioned after the way `global-font-lock' works,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 ;; toggles on or off global Highlight Changes mode. When activated, it turns
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 ;; on Highlight Changes mode in all "suitable" existings buffers and will turn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 ;; it on in new "suitable" buffers to be created.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 ;; A buffer's "suitability" is determined by variable
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 ;; `highlight-changes-global-modes', as follows. If the variable is
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 ;; * nil -- then no buffers are suitable;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 ;; * a function -- this function is called and the result is used. As
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 ;; an example, if the value is 'buffer-file-name then all buffers
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 ;; who are visiting files are suitable, but others (like dired
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 ;; buffers) are not;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 ;; * a list -- then if the buufer is suitable iff its mode is in the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 ;; list, exccept if the first element is nil in which case the test
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 ;; is reversed (i.e. it is a list of unsuitable modes).
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 ;; * Otherwise, the buffer is suitable if its name does not begin with
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 ;; ` ' or `*' and if `buffer-file-name' returns true.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 ;; Possible bindings:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 ;; (global-set-key '[C-right] 'highlight-changes-next-change)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 ;; (global-set-key '[C-left] 'highlight-changes-previous-change)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 ;; Other interactive functions (which could be bound if desired):
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 ;; highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 ;; highlight-changes-remove-highlight
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 ;; highlight-changes-rotate-faces
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 ;; compare-with-file
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 ;; You can automatically rotate faces when the buffer is saved;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 ;; see function `highlight-changes-rotate-faces' for how to do this.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 ;;; Bugs:
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 ;; - the next-change and previous-change functions are too literal;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 ;; they should find the next "real" change, in other words treat
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 ;; consecutive changes as one.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 ;;; To do (maybe), notes, ...
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 ;; - having different faces for deletion and non-deletion: is it
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 ;; really worth the hassle?
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 ;; - should have better hooks: when should they be run?
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 ;; - compare-with-file should allow RCS files - e.g. nice to be able
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 ;; to say show changes compared with version 2.1.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 ;; - Maybe we should have compare-with-buffer as well. (When I tried
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 ;; a while back I ran into a problem with ediff-buffers-internal.)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 ;;; History:
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 ;; R Sharman (rsharman@magma.ca) Feb 1998:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 ;; - initial release as change-mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 ;; Ray Nickson (nickson@mcs.vuw.ac.nz) 20 Feb 1998:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 ;; - deleting text causes surrounding characters to be highlighted.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 ;; - make it only active for the current buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 ;; Jari Aalto <jari.aalto@ntc.nokia.com> Mar 1998
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 ;; - fixes for byte compile errors
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 ;; Adrian Bridgett <adrian.bridgett@zetnet.co.uk> June 98:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 ;; - make hide/unhide not affect the buffer modified status
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 ;; Eric Ludlam <zappo@gnu.org> Suggested using overlays.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 ;; July 98
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 ;; - global mode and various stuff added
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 ;; - Changed to use overlays
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 ;; August 98
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 ;; - renmaed to Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194
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 ;; ========== Remove when undo-in-progress is set by emacs ========
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 (unless (boundp 'undo-in-progress)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 (message "advising undo...")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 (eval-when-compile (require 'advice))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 (defvar undo-in-progress nil) ;; only undo should change this!
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 (defadvice undo (around record-this-is-an-undo activate)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 (let ((undo-in-progress t))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 ad-do-it)))
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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 (require 'wid-edit)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 ;; ====================== Customization =======================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (defgroup highlight-changes nil
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 "Highlight Changes mode."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 :group 'faces)
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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 ;; Face information: How the changes appear.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 ;; Defaults for face: red foreground, no change to background,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 ;; and underlined if a change is because of a deletion.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 ;; Note: underlining is helpful in that is shows up changes in white space.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221 ;; 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
222 ;; indentation on inserts gets underlined (which can look pretty ugly!).
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 (defface highlight-changes-face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 '((((class color)) (:foreground "red" ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 (t (:inverse-video t)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 "Face used for highlighting changes."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 :group 'highlight-changes
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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 ;; This looks pretty ugly, actually. Maybe the underline should be removed.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 (defface highlight-changes-delete-face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 '((((class color)) (:foreground "red" :underline t))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 (t (:inverse-video t)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 "Face used for highlighting deletions."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 :group 'highlight-changes
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 ;; A (not very good) default list of colours to rotate through.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 (defcustom highlight-changes-colours
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 (if (eq (frame-parameter nil 'background-mode) 'light)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 ;; defaults for light background:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 '( "magenta" "blue" "darkgreen" "chocolate" "sienna4" "NavyBlue")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 ;; defaults for dark background:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 '("yellow" "magenta" "blue" "maroon" "firebrick" "green4" "DarkOrchid"))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 "*Colours used by `highlight-changes-rotate-faces'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 The newest rotated change will be displayed in the first element of this list,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 the next older will be in the second element etc.
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 This list is used if `highlight-changes-face-list' is nil, otherwise that
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 variable overrides this list. If you only care about foreground
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 colours then use this, if you want fancier faces then set
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 `highlight-changes-face-list'."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 :type '(repeat color)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 :group 'highlight-changes
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 )
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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 ;; If you invoke highlight-changes-mode with no argument, should it start in
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 ;; active or passive mode?
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 (defcustom highlight-changes-initial-state 'active
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266 "*What state (active or passive) `highlight-changes' should start in.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 This is used when `highlight-changes' is called with no argument.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 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
269 :type '(choice (const :tag "Active" active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 (const :tag "Passive" passive))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 :group 'highlight-changes
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 (defcustom highlight-changes-global-initial-state 'passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 "*What state `global-highlight-changes' should start in.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 This is used if `global-highlight-changes' is called with no argument.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 This variable must be set to either `active' or `passive'"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 :type '(choice (const :tag "Active" active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 (const :tag "Passive" passive))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 :group 'highlight-changes
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 ;; The strings displayed in the mode-line for the minor mode:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 (defcustom highlight-changes-active-string nil
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 "*The string used when Highlight Changes mode is in the active state.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 This should be set to nil if no indication is desired, or to
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 a string with a leading space."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 :type '(choice string
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 (const :tag "None" nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 :group 'highlight-changes
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 (defcustom highlight-changes-passive-string " Chg"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 "*The string used when Highlight Changes mode is in the passive state.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 This should be set to nil if no indication is desired, or to
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 a string with a leading space."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 :type '(choice string
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 (const :tag "None" nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 :group 'highlight-changes
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 )
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 (defcustom highlight-changes-global-modes t
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 "*Determine whether a buffer is suitable for global Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 A function means that function is called: if it returns non-nil the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 buffer is suitable.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 A list is a list of modes for which it is suitable, or a list whose
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 first element is 'not followed by modes which are not suitable.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 t means the buffer is suitable if its name does not begin with ` ' nor
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 `*' and the buffer has a filename.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 nil means no buffers are suitable for `global-highlight-changes'
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 (effectively disabling the mode).
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 Examples:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 (c-mode c++-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 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
320 modes only."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 :type '(choice
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 (const :tag "all non-special buffers visiting files" t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 (set :menu-tag "specific modes" :tag "modes"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 :value (not)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 (const :tag "All except these" not)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 (repeat :tag "Modes" :inline t (symbol :tag "mode")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 (function :menu-tag "determined by function"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 :value buffer-file-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 (const :tag "none" nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 :group 'highlight-changes
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 (defvar global-highlight-changes nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 (defcustom highlight-changes-global-changes-existing-buffers nil
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 "*If non-nil toggling global Highlight Changes mode affects existing buffers.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 Normally, `global-highlight-changes' means affects only new buffers (to be
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 created). However, if highlight-changes-global-changes-existing-buffers
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 is non-nil then turning on `global-highlight-changes' will turn on
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 highlight-changes-mode in suitable buffers and turning the mode off will
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 remove it from existing buffers."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 :type 'boolean
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 :group 'highlight-changes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 (defun hilit-chg-cust-fix-changes-face-list (w wc &optional event)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 ;; When customization function `highlight-changes-face-list' inserts a new
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 ;; face it uses the default face. We don't want the user to modify this
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 ;; face, so we rename the faces in the list on an insert. The rename is
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 ;; actually done by copying the faces so user-defined faces still remain
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 ;; in the same order.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 ;; The notifying the parent is needed because without it changes to the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 ;; faces are saved but not to the actual list itself.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 (let ((old-list (widget-value w)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (if (member 'default old-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 (let
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 ((p (reverse old-list))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 (n (length old-list))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 new-name old-name
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 (new-list nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 (setq old-name (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 (setq new-name (intern (format "highlight-changes-face-%d" n)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 (if (eq old-name new-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 nil
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 ;; A new face has been inserted: we don't want to modify the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 ;; default face so copy it. Better, though, (I think) is to
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 ;; make a new face have the same attributes as
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 ;; highlight-changes-face .
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 (if (eq old-name 'default)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 (copy-face 'highlight-changes-face new-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 (copy-face old-name new-name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 (setq new-list (append (list new-name) new-list))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 (setq n (1- n))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 (setq p (cdr p)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 (if (equal new-list (widget-value w))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 nil ;; (message "notify: no change!")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 (widget-value-set w new-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 (widget-setup)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 ;; (message "notify: no default here!")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 (let ((parent (widget-get w :parent)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 (when parent
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 (widget-apply parent :notify w event)))
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 (defcustom highlight-changes-face-list nil
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 "*A list of faces used when rotatating changes.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 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
396 `highlight-changes-colours' when needed. However, you can set this variable
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 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
398 don't just differ from `highlight-changes-face' by the foreground colour.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 Otherwise, this list will be constructed when needed from
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 `highlight-changes-colours'."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 :type '(choice
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 (repeat
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 :notify hilit-chg-cust-fix-changes-face-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 face )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 (const :tag "Derive from highlight-changes-colours" nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 :group 'highlight-changes
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 ;; ========================================================================
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 ;; These shouldn't be changed!
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 (defvar highlight-changes-mode nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 (defvar hilit-chg-list nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 (defvar hilit-chg-string " ??")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 (or (assq 'highlight-changes-mode minor-mode-alist)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 (setq minor-mode-alist
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 (cons '(highlight-changes-mode hilit-chg-string) minor-mode-alist)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 (make-variable-buffer-local 'highlight-changes-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 (make-variable-buffer-local 'hilit-chg-string)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 (eval-and-compile
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 ;; For compare-with-file
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 (defvar ediff-number-of-differences)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 (autoload 'ediff-setup "ediff")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 (autoload 'ediff-with-current-buffer "ediff")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 (autoload 'ediff-really-quit "ediff")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 (autoload 'ediff-make-fine-diffs "ediff")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 (autoload 'ediff-get-fine-diff-vector "ediff")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 (autoload 'ediff-get-difference "ediff")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 )
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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 ;;; Functions...
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 (defun hilit-chg-map-changes (func &optional start-position end-position)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 "Call function FUNC for each region used by Highlight Changes mode."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 ;; if start-position is nil, (point-min) is used
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 ;; if end-position is nil, (point-max) is used
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 ;; FUNC is called with 3 params: property start stop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 (let ((start (or start-position (point-min)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 (limit (or end-position (point-max)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 prop end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 (while (and start (< start limit))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 (setq prop (get-text-property start 'hilit-chg))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (setq end (text-property-not-all start limit 'hilit-chg prop))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 (funcall func prop start (or end limit)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 (setq start end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 )))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 (defun hilit-chg-display-changes (&optional beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 "Display face information for Highlight Changes mode.
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 An overlay containing a change face is added, from the information
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 in the text property of type change.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 This is the opposite of hilit-chg-hide-changes."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 (hilit-chg-map-changes 'hilit-chg-make-ov beg end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 (defun hilit-chg-make-ov (prop start end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 ;; for the region make change overlays corresponding to
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 ;; the text property 'hilit-chg
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 (let ((ov (make-overlay start end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 (or prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 (error "hilit-chg-make-ov: prop is nil"))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 (if (eq prop 'hilit-chg-delete)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 (setq face 'highlight-changes-delete-face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 (setq face (nth 1 (member prop hilit-chg-list))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 (if face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 ;; We must mark the face, that is the purpose of the overlay
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 (overlay-put ov 'face face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 ;; I don't think we need to set evaporate since we should
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 ;; be controlling them!
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 (overlay-put ov 'evaporate t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 ;; We set the change property so we can tell this is one
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 ;; of our overlays (so we don't delete someone else's).
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 (overlay-put ov 'hilit-chg t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 (error "hilit-chg-make-ov: no face for prop: %s" prop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 (defun hilit-chg-hide-changes (&optional beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 "Remove face information for Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 The overlay containing the face is removed, but the text property
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 containing the change information is retained.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 This is the opposite of hilit-chg-display-changes."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 (let ((start (or beg (point-min)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 (limit (or end (point-max)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 p ov)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 (setq p (overlays-in start limit))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 ;; don't delete the overlay if it isn't ours!
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 (if (overlay-get (car p) 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 (delete-overlay (car p)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 (setq p (cdr p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 )))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 (defun hilit-chg-fixup (beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 "Fix change overlays in region beg .. end.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 Ensure the overlays agree with the changes as determined from
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 the text properties of type `hilit-chg' ."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 ;; Remove or alter overlays in region beg..end
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 (let (p ov ov-start ov-end
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 props q)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 (setq p (overlays-in beg end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 ;; temp for debugging:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 ;; (or (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 ;; (error "hilit-chg-fixup called but Highlight Changes mode not active"))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 (setq ov (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 (setq ov-start (overlay-start ov))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 (setq ov-end (overlay-end ov))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 (if (< ov-start beg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 (move-overlay ov ov-start beg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 (if (> ov-end end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 (setq props (overlay-properties ov))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 (setq ov (make-overlay end ov-end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 (while props
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 (overlay-put ov (car props)(car (cdr props)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 (setq props (cdr (cdr props))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 (if (> ov-end end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 (move-overlay ov end ov-end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 (delete-overlay ov)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 (setq p (cdr p)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 (hilit-chg-display-changes beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 (defun highlight-changes-remove-highlight (beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 "Remove the change face from the region.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 This allows you to manually remove highlighting from uninteresting changes."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 (interactive "r")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 (let ((after-change-functions nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 (remove-text-properties beg end '(hilit-chg nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 (hilit-chg-fixup beg end)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 (defun hilit-chg-set-face-on-change (beg end leng-before
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 &optional no-proerty-change)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 "Record changes and optionally display them in a distinctive face.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 `hilit-chg-set' adds this function to the `after-change-functions' hook."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 ;; This function is called by the `after-change-functions' hook, which
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 ;; is how we are notified when text is changed.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 ;; It is also called from `compare-with-file'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 ;; 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
572 ;; otherwise an undone change shows up as changed. While the properties
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 ;; are automatically restored by undo, we must fixup the overlay.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 (save-match-data
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 (let ((beg-decr 1) (end-incr 1)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 (type 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 old)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (if undo-in-progress
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 (hilit-chg-fixup beg end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 (if (and (= beg end) (> leng-before 0))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 ;; deletion
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 ;; The eolp and bolp tests are a kludge! But they prevent
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 ;; rather nasty looking displays when deleting text at the end
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 ;; of line, such as normal corrections as one is typing and
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 ;; immediately makes a corrections, and when deleting first
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 ;; character of a line.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 ;;; (if (= leng-before 1)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 ;;; (if (eolp)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 ;;; (setq beg-decr 0 end-incr 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 ;;; (if (bolp)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 ;;; (setq beg-decr 0))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 ;;; (setq beg (max (- beg beg-decr) (point-min)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 (setq end (min (+ end end-incr) (point-max)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 (setq type 'hilit-chg-delete))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 ;; Not a deletion.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 ;; Most of the time the following is not necessary, but
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 ;; if the current text was marked as a deletion then
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 ;; the old overlay is still in effect, so if we add some
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 ;; text then remove the deletion marking, but set it to
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 ;; changed otherwise its highlighting disappears.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 (if (eq (get-text-property end 'hilit-chg) 'hilit-chg-delete)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 (remove-text-properties end (+ end 1) '(hilit-chg nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 (put-text-property end (+ end 1) 'hilit-chg 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 (hilit-chg-fixup beg (+ end 1))))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 (unless no-proerty-change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 (put-text-property beg end 'hilit-chg type))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 (if (or (eq highlight-changes-mode 'active) no-proerty-change)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 (hilit-chg-make-ov type beg end))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 ))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 (defun hilit-chg-set (value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 "Turn on Highlight Changes mode for this buffer."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 (setq highlight-changes-mode value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 (remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 (hilit-chg-make-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 (setq hilit-chg-string highlight-changes-active-string)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 (or buffer-read-only
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 (hilit-chg-display-changes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 ;; mode is passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 (setq hilit-chg-string highlight-changes-passive-string)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 (or buffer-read-only
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 (hilit-chg-hide-changes))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 (force-mode-line-update)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 (make-local-hook 'after-change-functions)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 (add-hook 'after-change-functions 'hilit-chg-set-face-on-change nil t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 (defun hilit-chg-clear ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 "Remove Highlight Changes mode for this buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 This removes all saved change information."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 (if buffer-read-only
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 ;; We print the buffer name because this function could be called
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 ;; on many buffers from `global-highlight-changes'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 (message "Cannot remove highlighting from read-only mode buffer %s"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 (buffer-name))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 (remove-hook 'after-change-functions 'hilit-chg-set-face-on-change t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 (let ((after-change-functions nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 (hilit-chg-hide-changes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 (hilit-chg-map-changes
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 '(lambda (prop start stop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 (remove-text-properties start stop '(hilit-chg nil))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 (setq highlight-changes-mode nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 (force-mode-line-update)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 ;; If we type: C-u -1 M-x highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 ;; we want to turn it off, but hilit-chg-post-command-hook
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 ;; runs and that turns it back on!
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 (remove-hook 'post-command-hook 'hilit-chg-post-command-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 (defun highlight-changes-mode (&optional arg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 "Toggle (or initially set) Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 Without an argument,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 if Highlight Changes mode is not enabled, then enable it (to either active
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 or passive as determined by variable highlight-changes-initial-state);
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 otherwise, toggle between active and passive states.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 With an argument,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 if just C-u or a positive argument, set state to active;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 with a zero argument, set state to passive;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 with a negative argument, disable Highlight Changes mode completely.
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 Active state - means changes are shown in a distinctive face.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 Passive state - means changes are kept and new ones recorded but are
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 not displayed in a different face.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 Functions:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 \\[highlight-changes-next-change] - move point to beginning of next change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 \\[highlight-changes-previous-change] - move to beginning of previous change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 \\[compare-with-file] - mark text as changed by comparing this buffer with
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 the contents of a file
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 \\[highlight-changes-remove-highlight] - remove the change face from the region
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 \\[highlight-changes-rotate-faces] - rotate different \"ages\" of changes \
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 through
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 various faces.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 Hook variables:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 highlight-changes-enable-hook - when Highlight Changes mode enabled.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 highlight-changes-toggle-hook - when entering active or passive state
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 highlight-changes-disable-hook - when turning off Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 "
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 (interactive "P")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 (if window-system
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 (let ((was-on highlight-changes-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 (new-highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 (cond
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 ((null arg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 ;; no arg => toggle (or set to active initially)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 (if (eq highlight-changes-mode 'active) 'passive 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 highlight-changes-initial-state))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 ;; an argument is given
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 ((eq arg 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 ((eq arg 'passive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 'passive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 ((> (prefix-numeric-value arg) 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 ((< (prefix-numeric-value arg) 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 (t
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 'passive)
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 (if new-highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 ;; mode is turned on -- but may be passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 (hilit-chg-set new-highlight-changes-mode)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 (or was-on
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 ;; run highlight-changes-enable-hook once
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 (run-hooks 'highlight-changes-enable-hook))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 (run-hooks 'highlight-changes-toggle-hook))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 ;; mode is turned off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 (run-hooks 'highlight-changes-disable-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 (hilit-chg-clear))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 (message "Highlight Changes mode only works when using a window system"))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 (defun highlight-changes-next-change ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 "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
738 (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 (let ((start (point))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 prop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 (setq prop (get-text-property (point) 'hilit-chg))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 ;; we are in a change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 (setq start (next-single-property-change (point) 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 (setq start (next-single-property-change start 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 (goto-char start)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 (message "no next change")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 (message "This buffer is not in Highlight Changes mode.")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 (defun highlight-changes-previous-change ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 "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
757 (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 (let ( (start (point)) (prop nil) )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 (or (bobp)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 (setq prop (get-text-property (1- (point)) 'hilit-chg)))
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 ;; we are in a change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 (setq start (previous-single-property-change (point) 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 (setq start (previous-single-property-change start 'hilit-chg)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 ;; special handling for the case where (point-min) is a change
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 (setq start (or (previous-single-property-change start 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770 (if (get-text-property (point-min) 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 (point-min)))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 (if start
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 (goto-char start)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 (message "no previous change")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 (message "This buffer is not in Highlight Changes mode.")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 ;; ========================================================================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 (defun hilit-chg-make-list (&optional force)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 "Construct hilit-chg-list and highlight-changes-face-list."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 ;; Constructs highlight-changes-face-list if necessary,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 ;; and hilit-chg-list always:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 ;; Maybe this should always be called when rotating a face
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 ;; so we pick up any changes?
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 (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
788 force) ; already exists unless FORCE non-nil.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 (let ((p highlight-changes-colours)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 (n 1) name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 (setq highlight-changes-face-list nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 (setq name (intern (format "highlight-changes-face-%d" n)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 (copy-face 'highlight-changes-face name)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 (set-face-foreground name (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 (setq highlight-changes-face-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 (append highlight-changes-face-list (list name)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 (setq p (cdr p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 (setq n (1+ n)))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 (setq hilit-chg-list (list 'hilit-chg 'highlight-changes-face))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 (let ((p highlight-changes-face-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 (n 1)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 last-category last-face)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
805 (setq last-category (intern (format "change-%d" n)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
806 ;; (setq last-face (intern (format "highlight-changes-face-%d" n)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
807 (setq last-face (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 (setq hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809 (append hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 (list last-category last-face)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 (setq p (cdr p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812 (setq n (1+ n)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
813 (setq hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
814 (append hilit-chg-list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 (list last-category last-face)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
819 (defun hilit-chg-bump-change (prop start end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
820 "Increment (age) the Highlight Changes mode text property of type change."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 (let ( new-prop )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
822 (if (eq prop 'hilit-chg-delete)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 (setq new-prop (nth 2 hilit-chg-list))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 (setq new-prop (nth 2 (member prop hilit-chg-list)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 (if prop
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 (put-text-property start end 'hilit-chg new-prop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 (message "%d-%d unknown property %s not changed" start end prop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 (defun highlight-changes-rotate-faces ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 "Rotate the faces used by Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 Current changes will be display in the face described by the first element
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 of highlight-changes-face-list, those (older) changes will be shown in the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 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
839 shown in the last face in the list.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 You can automatically rotate colours when the buffer is saved
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 by adding this to local-write-file-hooks, by evaling (in the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 buffer to be saved):
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 (add-hook 'local-write-file-hooks 'highlight-changes-rotate-faces)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 "
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 ;; 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
848 ;; may be bound to a hook.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 (let ((after-change-functions nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 ;; ensure hilit-chg-list is made and up to date
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852 (hilit-chg-make-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 ;; remove our existing overlays
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 (hilit-chg-hide-changes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 ;; for each change text property, increment it
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 (hilit-chg-map-changes 'hilit-chg-bump-change)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 ;; and display them all if active
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 (if (eq highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 (hilit-chg-display-changes))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 ;; This always returns nil so it is safe to use in
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 ;; local-write-file-hook
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 ;; ========================================================================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 ;; Comparing with an existing file.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 ;; This uses ediff to find the differences.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871 (defun compare-with-file (file-b)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 "Compare this buffer with a file.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 The current buffer must be an unmodified buffer visiting a file,
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875 and not in read-only mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
876
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 If the backup filename exists, it is used as the default
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 when called interactively.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
880 If a buffer is visiting the file being compared against, it also will
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 have its differences highlighted. Otherwise, the file is read in
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 temporarily but the buffer is deleted.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 If a buffer is read-only, differences will be highlighted but no property
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 changes made, so \\[highlight-changes-next-change] and
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 \\[highlight-changes-previous-change] will not work."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 (interactive (list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 (read-file-name
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 "File to compare with? " ;; prompt
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 "" ;; directory
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891 nil ;; default
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892 'yes ;; must exist
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 (let ((f (make-backup-file-name
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 (or (buffer-file-name (current-buffer))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 (error "no file for this buffer")))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 (if (file-exists-p f) f ""))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 )))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 (let* ((buf-a (current-buffer))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 (buf-a-read-only buffer-read-only)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 (orig-pos (point))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902 (file-a (buffer-file-name))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 (existing-buf (get-file-buffer file-b))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 (buf-b (or existing-buf
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 (find-file-noselect file-b)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 (buf-b-read-only (with-current-buffer buf-b buffer-read-only))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 xy xx yy p q
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 a-start a-end len-a
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 b-start b-end len-b
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 ;; We use the fact that the buffer is not marked modified at the
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 ;; end where we clear its modified status
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 (if (buffer-modified-p buf-a)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 (if (y-or-n-p (format "OK to save %s? " file-a))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 (save-buffer buf-a)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 (error "Buffer must be saved before comparing with a file.")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 (if (and existing-buf (buffer-modified-p buf-b))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919 (if (y-or-n-p (format "OK to save %s? " file-b))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 (save-buffer buf-b)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 (error "Cannot compare with a file in an unsaved buffer.")))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 (highlight-changes-mode 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 (if existing-buf (with-current-buffer buf-b
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 (highlight-changes-mode 'active)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 (save-window-excursion
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 (setq xy (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
927 (setq xx (car xy))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 (setq p xx)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 (setq yy (car (cdr xy)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 (setq q yy)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 (hilit-chg-make-list)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 (setq a-start (nth 0 (car p)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 (setq a-end (nth 1 (car p)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 (setq b-start (nth 0 (car q)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 (setq b-end (nth 1 (car q)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 (setq len-a (- a-end a-start))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 (setq len-b (- b-end b-start))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 (set-buffer buf-a)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 (hilit-chg-set-face-on-change a-start a-end len-b buf-a-read-only)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 (set-buffer-modified-p nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 (goto-char orig-pos)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 (if existing-buf
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 (with-current-buffer buf-b
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 (hilit-chg-set-face-on-change b-start b-end len-a
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 buf-b-read-only )
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 (setq p (cdr p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 (setq q (cdr q))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 (if existing-buf
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 (set-buffer-modified-p nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 (kill-buffer buf-b))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 (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
958 (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
959 (ediff-setup buf-a file-a buf-b file-b
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 nil nil ; buf-c file-C
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 'hilit-chg-get-diff-list-hk
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 (list (cons 'ediff-job-name 'something))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 (ediff-with-current-buffer e (ediff-really-quit nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 (list x y)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
966
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 (defun hilit-chg-get-diff-list-hk ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 ;; x and y are dynamically bound by hilit-chg-get-diff-info
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 ;; which calls this function as a hook
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 (defvar x) ;; placate the byte-compiler
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 (defvar y)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 (setq e (current-buffer))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 (let ((n 0) extent p va vb a b)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 (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
976 (while (< n ediff-number-of-differences)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 (ediff-make-fine-diffs n)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 (setq va (ediff-get-fine-diff-vector n 'A))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 ;; va is a vector if there are fine differences
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 (if va
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 (setq a (append va nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 ;; if not, get the unrefined difference
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983 (setq va (ediff-get-difference n 'A))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 (setq a (list (elt va 0)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 ;; a list a list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 (setq p a)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 (setq extent (list (overlay-start (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 (overlay-end (car p))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 (setq p (cdr p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 (setq x (append x (list extent) ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993 );; while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 (setq vb (ediff-get-fine-diff-vector n 'B))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 ;; vb is a vector
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997 (if vb
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 (setq b (append vb nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 ;; if not, get the unrefined difference
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 (setq vb (ediff-get-difference n 'B))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001 (setq b (list (elt vb 0)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003 ;; b list a list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 (setq p b)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 (while p
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 (setq extent (list (overlay-start (car p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 (overlay-end (car p))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 (setq p (cdr p))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009 (setq y (append y (list extent) ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010 );; while p
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 (setq n (1+ n))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 );; while
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 ;; ediff-quit doesn't work here.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 ;; No point in returning a value, since this is a hook function.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 ;; ======================= automatic stuff ==============
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020 ;; Global Highlight Changes mode is modelled after Global Font-lock mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 ;; Three hooks are used to gain control. When Global Changes Mode is
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 ;; enabled, `find-file-hooks' and `change-major-mode-hook' are set.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 ;; `find-file-hooks' is called when visiting a file, the new mode is
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024 ;; known at this time.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 ;; `change-major-mode-hook' is called when a buffer is changing mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 ;; This could be because of finding a file in which case
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027 ;; `find-file-hooks' has already been called and has done its work.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 ;; 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
1029 ;; the user. However, it is called from `kill-all-variables' and at
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 ;; this time the mode is the old mode, which is not what we want.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031 ;; So, our function temporarily sets `post-command-hook' which will
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 ;; 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
1033 ;; mode). It then removes the `post-command-hook'.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 ;; 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
1035 ;; so we ignore this by examining the buffer name.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036
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 (defun hilit-chg-major-mode-hook ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 (add-hook 'post-command-hook 'hilit-chg-post-command-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 (defun hilit-chg-post-command-hook ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043 ;; This is called after changing a major mode, but also after each
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 ;; M-x command, in which case the current buffer is a minibuffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 ;; In that case, do not act on it here, but don't turn it off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046 ;; either, we will get called here again soon-after.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047 ;; Also, don't enable it for other special buffers.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 (if (string-match "^[ *]" (buffer-name))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 nil ;; (message "ignoring this post-command-hook")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 (remove-hook 'post-command-hook 'hilit-chg-post-command-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 ;; The following check isn't necessary, since
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 ;; hilit-chg-turn-on-maybe makes this check too.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053 (or highlight-changes-mode ;; don't turn it on if it already is
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054 (hilit-chg-turn-on-maybe highlight-changes-global-initial-state))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 (defun hilit-chg-check-global ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 ;; This is called from the find file hook.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 (hilit-chg-turn-on-maybe highlight-changes-global-initial-state))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 ;;;###autoload
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 (defun global-highlight-changes (&optional arg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 "Turn on or off global Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 When called interactively:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 - if no prefix, toggle global Highlight Changes mode on or off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 - 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
1070 - if called with a zero prefix turn it on in passive mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 - if called with a negative prefix turn it off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 When called from a program:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 - if ARG is nil or omitted, turn it off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 - if ARG is 'active, turn it on in active mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 - if ARG is 'passive, turn it on in passive mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 - otherwise just turn it on
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 When global Highlight Changes mode is enabled, Highlight Changes mode is turned
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 on for future \"suitable\" buffers (and for \"suitable\" existing buffers if
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081 variable `highlight-changes-global-changes-existing-buffers' is non-nil).
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 \"Suitablity\" is determined by variable `highlight-changes-global-modes'."
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 (interactive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 (list
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 (cond
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087 ((null current-prefix-arg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 ;; no arg => toggle it on/off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089 (setq global-highlight-changes (not global-highlight-changes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 ;; positive interactive arg - turn it on as active
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 ((> (prefix-numeric-value current-prefix-arg) 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 (setq global-highlight-changes t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 ;; zero interactive arg - turn it on as passive
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 ((= (prefix-numeric-value current-prefix-arg) 0)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 (setq global-highlight-changes t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 'passive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 ;; negative interactive arg - turn it off
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 (t
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 (setq global-highlight-changes nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 nil))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103 (if arg
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 (if (eq arg 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 (setq highlight-changes-global-initial-state 'active)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 (if (eq arg 'passive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 (setq highlight-changes-global-initial-state 'passive)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 (setq global-highlight-changes t)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 (message "turning ON Global Highlight Changes mode in %s state"
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 highlight-changes-global-initial-state)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 (add-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 (add-hook 'find-file-hooks 'hilit-chg-check-global)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 (if highlight-changes-global-changes-existing-buffers
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 (hilit-chg-update-all-buffers
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 highlight-changes-global-initial-state))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 (message "turning OFF global Highlight Changes mode")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 (remove-hook 'hilit-chg-major-mode-hook 'hilit-chg-major-mode-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 (remove-hook 'find-file-hooks 'hilit-chg-check-global)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 (remove-hook 'post-command-hook
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 'hilit-chg-post-command-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 (remove-hook 'find-file-hooks 'hilit-chg-check-global)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 (if highlight-changes-global-changes-existing-buffers
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 (hilit-chg-update-all-buffers nil))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129
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
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 (defun hilit-chg-turn-on-maybe (value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 "Turn on Highlight Changes mode if it is appropriate for this buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136 A buffer is appropriate for Highlight Changes mode if all these are true:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137 - the buffer is not a special buffer (one whose name begins with
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 `*' or ` ')
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 - the buffer's mode is suitable as per variable highlight-changes-global-modes
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140 - Highlight Changes mode is not already on for this buffer.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 This function is called from hilit-chg-update-all-buffers
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143 from `global-highlight-changes' when turning on global Highlight Changes mode.
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 "
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 (or highlight-changes-mode ; do nothing if already on
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 (if
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147 (cond
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 ((null highlight-changes-global-modes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 nil)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150 ((functionp highlight-changes-global-modes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151 (funcall highlight-changes-global-modes))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 ((listp highlight-changes-global-modes)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 (if (eq (car-safe highlight-changes-global-modes) 'not)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154 (not (memq major-mode (cdr highlight-changes-global-modes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155 (memq major-mode highlight-changes-global-modes)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156 (t
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157 (and
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158 (not (string-match "^[ *]" (buffer-name)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1159 (buffer-file-name))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162 (hilit-chg-set value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 (run-hooks 'highlight-changes-enable-hook)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 (defun hilit-chg-turn-off-maybe ()
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168 (if highlight-changes-mode
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 (progn
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170 (run-hooks 'highlight-changes-disable-hook)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 (hilit-chg-clear))))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1174
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175 (defun hilit-chg-update-all-buffers (value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1176 (mapcar
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 (function (lambda (buffer)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1178 (with-current-buffer buffer
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179 (if value
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 (hilit-chg-turn-on-maybe value)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 (hilit-chg-turn-off-maybe))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 )))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 (buffer-list)))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185 ;; ===================== debug ==================
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 ;; For debug & test use:
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188 ;; (defun hilit-chg-debug-show (&optional beg end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 ;; (interactive)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 ;; (message "--- hilit-chg-debug-show ---")
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 ;; (hilit-chg-map-changes '(lambda (prop start end)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192 ;; (message "%d-%d: %s" start end prop)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193 ;; )
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194 ;; beg end
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 ;; ))
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1196 ;;
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197 ;; ================== end of debug ===============
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 (provide 'hilit-chg)
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201 ;;; hilit-chg.el ends here
dd92cb09f5d1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202