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