Mercurial > emacs
annotate lisp/fast-lock.el @ 16883:d1d4d81f9ece
Change all uses of win95, winnt, and win32
into Windows 95, Windows NT, and W32, respectively.
Expand "win" substring in variables referring to Microsoft Windows
constructs into "windows".
Canonicalize header comments to use same terminology.
author | Geoff Voelker <voelker@cs.washington.edu> |
---|---|
date | Mon, 20 Jan 1997 00:34:34 +0000 |
parents | aadb4abdeaaa |
children | de68258fef5f |
rev | line source |
---|---|
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
1 ;;; fast-lock.el --- Automagic text properties caching for fast Font Lock mode. |
10243 | 2 |
14169 | 3 ;; Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc. |
10243 | 4 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
5 ;; Author: Simon Marshall <simon@gnu.ai.mit.edu> |
10243 | 6 ;; Keywords: faces files |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
7 ;; Version: 3.11 |
10243 | 8 |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
9 ;;; This file is part of GNU Emacs. |
10243 | 10 |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
13 ;; the Free Software Foundation; either version 2, or (at your option) | |
14 ;; any later version. | |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
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 | |
14169 | 22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
24 ;; Boston, MA 02111-1307, USA. | |
10243 | 25 |
26 ;;; Commentary: | |
27 | |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
28 ;; Lazy Lock mode is a Font Lock support mode. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
29 ;; It makes visiting a file in Font Lock mode faster by restoring its face text |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
30 ;; properties from automatically saved associated Font Lock cache files. |
10243 | 31 ;; |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
32 ;; See caveats and feedback below. |
10243 | 33 ;; See also the lazy-lock package. (But don't use the two at the same time!) |
34 | |
35 ;; Installation: | |
36 ;; | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
37 ;; Put in your ~/.emacs: |
10243 | 38 ;; |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
39 ;; (setq font-lock-support-mode 'fast-lock-mode) |
10243 | 40 ;; |
41 ;; Start up a new Emacs and use font-lock as usual (except that you can use the | |
42 ;; so-called "gaudier" fontification regexps on big files without frustration). | |
43 ;; | |
44 ;; When you visit a file (which has `font-lock-mode' enabled) that has a | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
45 ;; corresponding Font Lock cache file associated with it, the Font Lock cache |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
46 ;; will be loaded from that file instead of being generated by Font Lock code. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
47 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
48 ;; Caveats: |
10243 | 49 ;; |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
50 ;; A cache will be saved when visiting a compressed file using crypt++, but not |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
51 ;; be read. This is a "feature"/"consequence"/"bug" of crypt++. |
10243 | 52 ;; |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
53 ;; Version control packages are likely to stamp all over file modification |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
54 ;; times. Therefore the act of checking out may invalidate a cache. |
10243 | 55 |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
56 ;; History: |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
57 ;; |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
58 ;; 0.02--1.00: |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
59 ;; - Changed name from turbo-prop to fast-lock. Automagic for font-lock only |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
60 ;; - Made `fast-lock-mode' a minor mode, like G. Dinesh Dutt's fss-mode |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
61 ;; 1.00--1.01: |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
62 ;; - Turn on `fast-lock-mode' only if `buffer-file-name' or `interactive-p' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
63 ;; - Made `fast-lock-file-name' use `buffer-name' if `buffer-file-name' is nil |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
64 ;; - Moved save-all conditions to `fast-lock-save-cache' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
65 ;; - Added `fast-lock-save-text-properties' to `kill-buffer-hook' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
66 ;; 1.01--2.00: complete rewrite---not worth the space to document |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
67 ;; - Changed structure of text properties cache and threw out file mod checks |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
68 ;; 2.00--2.01: |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
69 ;; - Made `condition-case' forms understand `quit'. |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
70 ;; - Made `fast-lock' require `font-lock' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
71 ;; - Made `fast-lock-cache-name' chase links (from Ben Liblit) |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
72 ;; 2.01--3.00: |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
73 ;; - Changed structure of cache to include `font-lock-keywords' (from rms) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
74 ;; - Changed `fast-lock-cache-mechanisms' to `fast-lock-cache-directories' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
75 ;; - Removed `fast-lock-read-others' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
76 ;; - Made `fast-lock-read-cache' ignore cache owner |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
77 ;; - Made `fast-lock-save-cache-external' create cache directory |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
78 ;; - Made `fast-lock-save-cache-external' save `font-lock-keywords' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
79 ;; - Made `fast-lock-cache-data' check `font-lock-keywords' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
80 ;; 3.00--3.01: incorporated port of 2.00 to Lucid, made by Barry Warsaw |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
81 ;; - Package now provides itself |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
82 ;; - Lucid: Use `font-lock-any-extents-p' for `font-lock-any-properties-p' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
83 ;; - Lucid: Use `list-faces' for `face-list' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
84 ;; - Lucid: Added `set-text-properties' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
85 ;; - Lucid: Made `turn-on-fast-lock' pass 1 not t to `fast-lock-mode' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
86 ;; - Removed test for `fast-lock-mode' from `fast-lock-read-cache' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
87 ;; - Lucid: Added Lucid-specific `fast-lock-get-face-properties' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
88 ;; 3.01--3.02: now works with Lucid Emacs, thanks to Barry Warsaw |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
89 ;; - Made `fast-lock-cache-name' map ":" to ";" for OS/2 (from Serganova Vera) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
90 ;; - Made `fast-lock-cache-name' use abbreviated file name (from Barry Warsaw) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
91 ;; - Lucid: Separated handlers for `error' and `quit' for `condition-case' |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
92 ;; 3.02--3.03: |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
93 ;; - Changed `fast-lock-save-cache-external' to `fast-lock-save-cache-data' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
94 ;; - Lucid: Added Lucid-specific `fast-lock-set-face-properties' |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
95 ;; 3.03--3.04: |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
96 ;; - Corrected `subrp' test of Lucid code |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
97 ;; - Replaced `font-lock-any-properties-p' with `text-property-not-all' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
98 ;; - Lucid: Made `fast-lock-set-face-properties' put `text-prop' on extents |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
99 ;; - Made `fast-lock-cache-directories' a regexp alist (from Colin Rafferty) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
100 ;; - Made `fast-lock-cache-directory' to return a usable cache file directory |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
101 ;; 3.04--3.05: |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
102 ;; - Lucid: Fix for XEmacs 19.11 `text-property-not-all' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
103 ;; - Replaced `subrp' test of Lucid code with `emacs-version' `string-match' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
104 ;; - Made `byte-compile-warnings' omit `unresolved' on compilation |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
105 ;; - Made `fast-lock-save-cache-data' use a buffer (from Rick Sladkey) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
106 ;; - Reverted to old `fast-lock-get-face-properties' (from Rick Sladkey) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
107 ;; 3.05--3.06: incorporated hack of 3.03, made by Jonathan Stigelman (Stig) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
108 ;; - Reverted to 3.04 version of `fast-lock-get-face-properties' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
109 ;; - XEmacs: Removed `list-faces' `defalias' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
110 ;; - Made `fast-lock-mode' and `turn-on-fast-lock' succeed `autoload' cookies |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
111 ;; - Added `fast-lock-submit-bug-report' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
112 ;; - Renamed `fast-lock-save-size' to `fast-lock-minimum-size' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
113 ;; - Made `fast-lock-save-cache' output a message if no save ever attempted |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
114 ;; - Made `fast-lock-save-cache-data' output a message if save attempted |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
115 ;; - Made `fast-lock-cache-data' output a message if load attempted |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
116 ;; - Made `fast-lock-save-cache-data' do `condition-case' not `unwind-protect' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
117 ;; - Made `fast-lock-save-cache' and `fast-lock-read-cache' return nothing |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
118 ;; - Made `fast-lock-save-cache' check `buffer-modified-p' (Stig) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
119 ;; - Added `fast-lock-save-events' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
120 ;; - Added `fast-lock-after-save-hook' to `after-save-hook' (Stig) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
121 ;; - Added `fast-lock-kill-buffer-hook' to `kill-buffer-hook' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
122 ;; - Changed `fast-lock-save-caches' to `fast-lock-kill-emacs-hook' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
123 ;; - Added `fast-lock-kill-emacs-hook' to `kill-emacs-hook' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
124 ;; - Made `fast-lock-save-cache' check `verify-visited-file-modtime' (Stig) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
125 ;; - Made `visited-file-modtime' be the basis of the timestamp (Stig) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
126 ;; - Made `fast-lock-save-cache-1' and `fast-lock-cache-data' use/reformat it |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
127 ;; - Added `fast-lock-cache-filename' to keep track of the cache file name |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
128 ;; - Added `fast-lock-after-fontify-buffer' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
129 ;; - Added `fast-lock-save-faces' list of faces to save (idea from Stig/Tibor) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
130 ;; - Made `fast-lock-get-face-properties' functions use it |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
131 ;; - XEmacs: Made `fast-lock-set-face-properties' do extents the Font Lock way |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
132 ;; - XEmacs: Removed fix for `text-property-not-all' (19.11 support dropped) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
133 ;; - Made `fast-lock-mode' ensure `font-lock-mode' is on |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
134 ;; - Made `fast-lock-save-cache' do `cdr-safe' not `cdr' (from Dave Foster) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
135 ;; - Made `fast-lock-save-cache' do `set-buffer' first (from Dave Foster) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
136 ;; - Made `fast-lock-save-cache' loop until saved or quit (from Georg Nikodym) |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
137 ;; - Made `fast-lock-cache-data' check `buffer-modified-p' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
138 ;; - Made `fast-lock-cache-data' do `font-lock-compile-keywords' if necessary |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
139 ;; - XEmacs: Made `font-lock-compile-keywords' `defalias' |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
140 ;; 3.06--3.07: |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
141 ;; - XEmacs: Add `fast-lock-after-fontify-buffer' to the Font Lock hook |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
142 ;; - Made `fast-lock-cache-name' explain the use of `directory-abbrev-alist' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
143 ;; - Made `fast-lock-mode' use `buffer-file-truename' not `buffer-file-name' |
13301
0cbf58edd87f
Updated to 3.08; don't use `let' var from caller.
Simon Marshall <simon@gnu.org>
parents:
12909
diff
changeset
|
144 ;; 3.07--3.08: |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
145 ;; - Made `fast-lock-read-cache' set `fast-lock-cache-filename' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
146 ;; 3.08--3.09: |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
147 ;; - Made `fast-lock-save-cache' cope if `fast-lock-minimum-size' is an a list |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
148 ;; - Made `fast-lock-mode' respect the value of `font-lock-inhibit-thing-lock' |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
149 ;; - Added `fast-lock-after-unfontify-buffer' |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
150 ;; 3.09--3.10: |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
151 ;; - Rewrite for Common Lisp macros |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
152 ;; - Made fast-lock.el barf on a crap 8+3 pseudo-OS (Eli Zaretskii help) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
153 ;; - XEmacs: Made `add-minor-mode' succeed `autoload' cookie |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
154 ;; - XEmacs: Made `fast-lock-save-faces' default to `font-lock-face-list' |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
155 ;; - Made `fast-lock-save-cache' use `font-lock-value-in-major-mode' |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
156 ;; - Wrap with `save-buffer-state' (Ray Van Tassle report) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
157 ;; - Made `fast-lock-mode' wrap `font-lock-support-mode' |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
158 ;; 3.10--3.11: |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
159 ;; - Made `fast-lock-get-face-properties' cope with face lists |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
160 ;; - Added `fast-lock-verbose' |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
161 ;; - XEmacs: Add `font-lock-value-in-major-mode' if necessary |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
162 ;; - Removed `fast-lock-submit-bug-report' and bade farewell |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
163 |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
164 ;;; Code: |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
165 |
10243 | 166 (require 'font-lock) |
167 | |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
168 ;; Make sure fast-lock.el is supported. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
169 (if (and (eq system-type 'ms-dos) (not (msdos-long-file-names))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
170 (error "`fast-lock' was written for long file name systems")) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
171 |
10243 | 172 (eval-when-compile |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
173 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
174 ;; We don't do this at the top-level as we only use non-autoloaded macros. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
175 (require 'cl) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
176 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
177 ;; I prefer lazy code---and lazy mode. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
178 (setq byte-compile-dynamic t byte-compile-dynamic-docstrings t) |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
179 ;; But, we make sure that the code is as zippy as can be. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
180 (setq byte-optimize t) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
181 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
182 ;; We use this to preserve or protect things when modifying text properties. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
183 (defmacro save-buffer-state (varlist &rest body) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
184 "Bind variables according to VARLIST and eval BODY restoring buffer state." |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
185 (` (let* ((,@ (append varlist |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
186 '((modified (buffer-modified-p)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
187 (inhibit-read-only t) (buffer-undo-list t) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
188 before-change-functions after-change-functions |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
189 deactivate-mark buffer-file-name buffer-file-truename)))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
190 (,@ body) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
191 (when (and (not modified) (buffer-modified-p)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
192 (set-buffer-modified-p nil))))) |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
193 (put 'save-buffer-state 'lisp-indent-function 1) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
194 ;; |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
195 ;; We use this to verify that a face should be saved. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
196 (defmacro fast-lock-save-facep (face) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
197 "Return non-nil if FACE is one of `fast-lock-save-faces'." |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
198 (` (or (null fast-lock-save-faces) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
199 (if (symbolp (, face)) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
200 (memq (, face) fast-lock-save-faces) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
201 (let ((faces (, face))) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
202 (while (unless (memq (car faces) fast-lock-save-faces) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
203 (setq faces (cdr faces)))) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
204 faces)))))) |
10243 | 205 |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
206 ;(defun fast-lock-submit-bug-report () |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
207 ; "Submit via mail a bug report on fast-lock.el." |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
208 ; (interactive) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
209 ; (let ((reporter-prompt-for-summary-p t)) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
210 ; (reporter-submit-bug-report "simon@gnu.ai.mit.edu" "fast-lock 3.11" |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
211 ; '(fast-lock-cache-directories fast-lock-minimum-size |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
212 ; fast-lock-save-others fast-lock-save-events fast-lock-save-faces |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
213 ; fast-lock-verbose) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
214 ; nil nil |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
215 ; (concat "Hi Si., |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
216 ; |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
217 ;I want to report a bug. I've read the `Bugs' section of `Info' on Emacs, so I |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
218 ;know how to make a clear and unambiguous report. To reproduce the bug: |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
219 ; |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
220 ;Start a fresh editor via `" invocation-name " -no-init-file -no-site-file'. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
221 ;In the `*scratch*' buffer, evaluate:")))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
222 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
223 (defvar fast-lock-mode nil) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
224 (defvar fast-lock-cache-timestamp nil) ; for saving/reading |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
225 (defvar fast-lock-cache-filename nil) ; for deleting |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
226 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
227 ;; User Variables: |
10243 | 228 |
229 (defvar fast-lock-cache-directories '("." "~/.emacs-flc") | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
230 ; - `internal', keep each file's Font Lock cache file in the same file. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
231 ; - `external', keep each file's Font Lock cache file in the same directory. |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
232 "*Directories in which Font Lock cache files are saved and read. |
10243 | 233 Each item should be either DIR or a cons pair of the form (REGEXP . DIR) where |
234 DIR is a directory name (relative or absolute) and REGEXP is a regexp. | |
235 | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
236 An attempt will be made to save or read Font Lock cache files using these items |
10243 | 237 until one succeeds (i.e., until a readable or writable one is found). If an |
238 item contains REGEXP, DIR is used only if the buffer file name matches REGEXP. | |
239 For example: | |
240 | |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
241 (let ((home (expand-file-name (abbreviate-file-name (file-truename \"~/\"))))) |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
242 (list (cons (concat \"^\" (regexp-quote home)) \".\") \"~/.emacs-flc\")) |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
243 => |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
244 ((\"^/your/true/home/directory/\" . \".\") \"~/.emacs-flc\") |
10243 | 245 |
246 would cause a file's current directory to be used if the file is under your | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
247 home directory hierarchy, or otherwise the absolute directory `~/.emacs-flc'.") |
10243 | 248 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
249 (defvar fast-lock-minimum-size (* 25 1024) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
250 "*Minimum size of a buffer for cached fontification. |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
251 Only buffers more than this can have associated Font Lock cache files saved. |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
252 If nil, means cache files are never created. |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
253 If a list, each element should be a cons pair of the form (MAJOR-MODE . SIZE), |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
254 where MAJOR-MODE is a symbol or t (meaning the default). For example: |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
255 ((c-mode . 25600) (c++-mode . 25600) (rmail-mode . 1048576)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
256 means that the minimum size is 25K for buffers in C or C++ modes, one megabyte |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
257 for buffers in Rmail mode, and size is irrelevant otherwise.") |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
258 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
259 (defvar fast-lock-save-events '(kill-buffer kill-emacs) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
260 "*Events under which caches will be saved. |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
261 Valid events are `save-buffer', `kill-buffer' and `kill-emacs'. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
262 If concurrent editing sessions use the same associated cache file for a file's |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
263 buffer, then you should add `save-buffer' to this list.") |
10243 | 264 |
265 (defvar fast-lock-save-others t | |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
266 "*If non-nil, save Font Lock cache files irrespective of file owner. |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
267 If nil, means only buffer files known to be owned by you can have associated |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
268 Font Lock cache files saved. Ownership may be unknown for networked files.") |
10243 | 269 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
270 (defvar fast-lock-save-faces |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
271 (when (save-match-data (string-match "XEmacs" (emacs-version))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
272 ;; XEmacs uses extents for everything, so we have to pick the right ones. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
273 font-lock-face-list) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
274 "Faces that will be saved in a Font Lock cache file. |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
275 If nil, means information for all faces will be saved.") |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
276 |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
277 (defvar fast-lock-verbose font-lock-verbose |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
278 "*If non-nil, means show status messages for cache processing. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
279 If a number, only buffers greater than this size have processing messages.") |
10243 | 280 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
281 ;; User Functions: |
10243 | 282 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
283 ;;;###autoload |
10243 | 284 (defun fast-lock-mode (&optional arg) |
285 "Toggle Fast Lock mode. | |
286 With arg, turn Fast Lock mode on if and only if arg is positive and the buffer | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
287 is associated with a file. Enable it automatically in your `~/.emacs' by: |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
288 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
289 (setq font-lock-support-mode 'fast-lock-mode) |
10243 | 290 |
291 If Fast Lock mode is enabled, and the current buffer does not contain any text | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
292 properties, any associated Font Lock cache is used if its timestamp matches the |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
293 buffer's file, and its `font-lock-keywords' match those that you are using. |
10243 | 294 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
295 Font Lock caches may be saved: |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
296 - When you save the file's buffer. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
297 - When you kill an unmodified file's buffer. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
298 - When you exit Emacs, for all unmodified or saved buffers. |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
299 Depending on the value of `fast-lock-save-events'. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
300 See also the commands `fast-lock-read-cache' and `fast-lock-save-cache'. |
10243 | 301 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
302 Use \\[font-lock-fontify-buffer] to fontify the buffer if the cache is bad. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
303 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
304 Various methods of control are provided for the Font Lock cache. In general, |
10243 | 305 see variable `fast-lock-cache-directories' and function `fast-lock-cache-name'. |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
306 For saving, see variables `fast-lock-minimum-size', `fast-lock-save-events', |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
307 `fast-lock-save-others' and `fast-lock-save-faces'." |
10243 | 308 (interactive "P") |
13301
0cbf58edd87f
Updated to 3.08; don't use `let' var from caller.
Simon Marshall <simon@gnu.org>
parents:
12909
diff
changeset
|
309 ;; Only turn on if we are visiting a file. We could use `buffer-file-name', |
0cbf58edd87f
Updated to 3.08; don't use `let' var from caller.
Simon Marshall <simon@gnu.org>
parents:
12909
diff
changeset
|
310 ;; but many packages temporarily wrap that to nil when doing their own thing. |
10243 | 311 (set (make-local-variable 'fast-lock-mode) |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
312 (and buffer-file-truename |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
313 (not (memq 'fast-lock-mode font-lock-inhibit-thing-lock)) |
10243 | 314 (if arg (> (prefix-numeric-value arg) 0) (not fast-lock-mode)))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
315 (if (and fast-lock-mode (not font-lock-mode)) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
316 ;; Turned on `fast-lock-mode' rather than `font-lock-mode'. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
317 (let ((font-lock-support-mode 'fast-lock-mode)) |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
318 (font-lock-mode t)) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
319 ;; Let's get down to business. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
320 (set (make-local-variable 'fast-lock-cache-timestamp) nil) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
321 (set (make-local-variable 'fast-lock-cache-filename) nil) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
322 (when (and fast-lock-mode (not font-lock-fontified)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
323 (fast-lock-read-cache)))) |
10243 | 324 |
325 (defun fast-lock-read-cache () | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
326 "Read the Font Lock cache for the current buffer. |
10243 | 327 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
328 The following criteria must be met for a Font Lock cache file to be read: |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
329 - Fast Lock mode must be turned on in the buffer. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
330 - The buffer must not be modified. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
331 - The buffer's `font-lock-keywords' must match the cache's. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
332 - The buffer file's timestamp must match the cache's. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
333 - Criteria imposed by `fast-lock-cache-directories'. |
10243 | 334 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
335 See `fast-lock-mode'." |
10243 | 336 (interactive) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
337 (let ((directories fast-lock-cache-directories) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
338 (modified (buffer-modified-p)) (inhibit-read-only t) |
10243 | 339 (fontified font-lock-fontified)) |
340 (set (make-local-variable 'font-lock-fontified) nil) | |
341 ;; Keep trying directories until fontification is turned off. | |
342 (while (and directories (not font-lock-fontified)) | |
13301
0cbf58edd87f
Updated to 3.08; don't use `let' var from caller.
Simon Marshall <simon@gnu.org>
parents:
12909
diff
changeset
|
343 (let ((directory (fast-lock-cache-directory (car directories) nil))) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
344 (condition-case nil |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
345 (when directory |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
346 (setq fast-lock-cache-filename (fast-lock-cache-name directory)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
347 (when (file-readable-p fast-lock-cache-filename) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
348 (load fast-lock-cache-filename t t t))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
349 (error nil) (quit nil)) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
350 (setq directories (cdr directories)))) |
13301
0cbf58edd87f
Updated to 3.08; don't use `let' var from caller.
Simon Marshall <simon@gnu.org>
parents:
12909
diff
changeset
|
351 ;; Unset `fast-lock-cache-filename', and restore `font-lock-fontified', if |
0cbf58edd87f
Updated to 3.08; don't use `let' var from caller.
Simon Marshall <simon@gnu.org>
parents:
12909
diff
changeset
|
352 ;; we don't use a cache. (Note that `fast-lock-cache-data' sets the value |
0cbf58edd87f
Updated to 3.08; don't use `let' var from caller.
Simon Marshall <simon@gnu.org>
parents:
12909
diff
changeset
|
353 ;; of `fast-lock-cache-timestamp'.) |
10243 | 354 (set-buffer-modified-p modified) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
355 (unless font-lock-fontified |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
356 (setq fast-lock-cache-filename nil font-lock-fontified fontified)))) |
10243 | 357 |
358 (defun fast-lock-save-cache (&optional buffer) | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
359 "Save the Font Lock cache of BUFFER or the current buffer. |
10243 | 360 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
361 The following criteria must be met for a Font Lock cache file to be saved: |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
362 - Fast Lock mode must be turned on in the buffer. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
363 - The event must be one of `fast-lock-save-events'. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
364 - The buffer must be at least `fast-lock-minimum-size' bytes long. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
365 - The buffer file must be owned by you, or `fast-lock-save-others' must be t. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
366 - The buffer must contain at least one `face' text property. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
367 - The buffer must not be modified. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
368 - The buffer file's timestamp must be the same as the file's on disk. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
369 - The on disk file's timestamp must be different than the buffer's cache. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
370 - Criteria imposed by `fast-lock-cache-directories'. |
10243 | 371 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
372 See `fast-lock-mode'." |
10243 | 373 (interactive) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
374 (save-excursion |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
375 (when buffer |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
376 (set-buffer buffer)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
377 (let ((min-size (font-lock-value-in-major-mode fast-lock-minimum-size)) |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
378 (file-timestamp (visited-file-modtime)) (saved nil)) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
379 (when (and fast-lock-mode |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
380 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
381 ;; "Only save if the buffer matches the file, the file has |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
382 ;; changed, and it was changed by the current emacs session." |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
383 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
384 ;; Only save if the buffer is not modified, |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
385 ;; (i.e., so we don't save for something not on disk) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
386 (not (buffer-modified-p)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
387 ;; and the file's timestamp is the same as the buffer's, |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
388 ;; (i.e., someone else hasn't written the file in the meantime) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
389 (verify-visited-file-modtime (current-buffer)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
390 ;; and the file's timestamp is different from the cache's. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
391 ;; (i.e., a save has occurred since the cache was read) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
392 (not (equal fast-lock-cache-timestamp file-timestamp)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
393 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
394 ;; Only save if user's restrictions are satisfied. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
395 (and min-size (>= (buffer-size) min-size)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
396 (or fast-lock-save-others |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
397 (eq (user-uid) (nth 2 (file-attributes buffer-file-name)))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
398 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
399 ;; Only save if there are `face' properties to save. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
400 (text-property-not-all (point-min) (point-max) 'face nil)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
401 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
402 ;; Try each directory until we manage to save or the user quits. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
403 (let ((directories fast-lock-cache-directories)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
404 (while (and directories (memq saved '(nil error))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
405 (let* ((dir (fast-lock-cache-directory (car directories) t)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
406 (file (and dir (fast-lock-cache-name dir)))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
407 (when (and file (file-writable-p file)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
408 (setq saved (fast-lock-save-cache-1 file file-timestamp))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
409 (setq directories (cdr directories))))))))) |
10243 | 410 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
411 ;;;###autoload |
10243 | 412 (defun turn-on-fast-lock () |
413 "Unconditionally turn on Fast Lock mode." | |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
414 (fast-lock-mode t)) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
415 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
416 ;;; API Functions: |
10243 | 417 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
418 (defun fast-lock-after-fontify-buffer () |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
419 ;; Delete the Font Lock cache file used to restore fontification, if any. |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
420 (when fast-lock-cache-filename |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
421 (if (file-writable-p fast-lock-cache-filename) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
422 (delete-file fast-lock-cache-filename) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
423 (message "File %s font lock cache cannot be deleted" (buffer-name)))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
424 ;; Flag so that a cache will be saved later even if the file is never saved. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
425 (setq fast-lock-cache-timestamp nil)) |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
426 |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
427 (defalias 'fast-lock-after-unfontify-buffer |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
428 'ignore) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
429 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
430 ;; Miscellaneous Functions: |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
431 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
432 (defun fast-lock-save-cache-after-save-file () |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
433 ;; Do `fast-lock-save-cache' if `save-buffer' is on `fast-lock-save-events'. |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
434 (when (memq 'save-buffer fast-lock-save-events) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
435 (fast-lock-save-cache))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
436 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
437 (defun fast-lock-save-cache-before-kill-buffer () |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
438 ;; Do `fast-lock-save-cache' if `kill-buffer' is on `fast-lock-save-events'. |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
439 (when (memq 'kill-buffer fast-lock-save-events) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
440 (fast-lock-save-cache))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
441 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
442 (defun fast-lock-save-caches-before-kill-emacs () |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
443 ;; Do `fast-lock-save-cache's if `kill-emacs' is on `fast-lock-save-events'. |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
444 (when (memq 'kill-emacs fast-lock-save-events) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
445 (mapcar 'fast-lock-save-cache (buffer-list)))) |
10243 | 446 |
447 (defun fast-lock-cache-directory (directory create) | |
448 "Return usable directory based on DIRECTORY. | |
449 Returns nil if the directory does not exist, or, if CREATE non-nil, cannot be | |
450 created. DIRECTORY may be a string or a cons pair of the form (REGEXP . DIR). | |
451 See `fast-lock-cache-directories'." | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
452 (let ((dir |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
453 (cond ((not buffer-file-name) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
454 ;; Should never be nil, but `crypt++' screws it up. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
455 nil) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
456 ((stringp directory) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
457 ;; Just a directory. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
458 directory) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
459 (t |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
460 ;; A directory iff the file name matches the regexp. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
461 (let ((bufile (expand-file-name buffer-file-truename)) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
462 (case-fold-search nil)) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
463 (when (save-match-data (string-match (car directory) bufile)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
464 (cdr directory))))))) |
10243 | 465 (cond ((not dir) |
466 nil) | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
467 ((file-accessible-directory-p dir) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
468 dir) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
469 (create |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
470 (condition-case nil |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
471 (progn (make-directory dir t) dir) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
472 (error nil)))))) |
10243 | 473 |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
474 ;; If you are wondering why we only hash if the directory is not ".", rather |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
475 ;; than if `file-name-absolute-p', it is because if we just appended ".flc" for |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
476 ;; relative cache directories (that are not ".") then it is possible that more |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
477 ;; than one file would have the same cache name in that directory, if the luser |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
478 ;; made a link from one relative cache directory to another. (Phew!) |
10243 | 479 (defun fast-lock-cache-name (directory) |
480 "Return full cache path name using caching DIRECTORY. | |
481 If DIRECTORY is `.', the path is the buffer file name appended with `.flc'. | |
482 Otherwise, the path name is constructed from DIRECTORY and the buffer's true | |
483 abbreviated file name, with all `/' characters in the name replaced with `#' | |
484 characters, and appended with `.flc'. | |
485 | |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
486 If the same file has different cache path names when edited on different |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
487 machines, e.g., on one machine the cache file name has the prefix `#home', |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
488 perhaps due to automount, try putting in your `~/.emacs' something like: |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
489 |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
490 (setq directory-abbrev-alist (cons '(\"^/home/\" . \"/\") directory-abbrev-alist)) |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
491 |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
492 Emacs automagically removes the common `/tmp_mnt' automount prefix by default. |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
493 |
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
494 See `fast-lock-cache-directory'." |
10243 | 495 (if (string-equal directory ".") |
496 (concat buffer-file-name ".flc") | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
497 (let* ((bufile (expand-file-name buffer-file-truename)) |
10243 | 498 (chars-alist |
499 (if (eq system-type 'emx) | |
500 '((?/ . (?#)) (?# . (?# ?#)) (?: . (?\;)) (?\; . (?\; ?\;))) | |
501 '((?/ . (?#)) (?# . (?# ?#))))) | |
502 (mapchars | |
503 (function (lambda (c) (or (cdr (assq c chars-alist)) (list c)))))) | |
504 (concat | |
505 (file-name-as-directory (expand-file-name directory)) | |
506 (mapconcat 'char-to-string (apply 'append (mapcar mapchars bufile)) "") | |
507 ".flc")))) | |
508 | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
509 ;; Font Lock Cache Processing Functions: |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
510 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
511 (defun fast-lock-save-cache-1 (file timestamp) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
512 ;; Save the FILE with the TIMESTAMP as: |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
513 ;; (fast-lock-cache-data Version=2 TIMESTAMP font-lock-keywords PROPERTIES). |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
514 ;; Returns non-nil if a save was attempted to a writable cache file. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
515 (let ((tpbuf (generate-new-buffer " *fast-lock*")) |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
516 (verbose (if (numberp fast-lock-verbose) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
517 (> (buffer-size) fast-lock-verbose) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
518 fast-lock-verbose)) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
519 (saved t)) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
520 (if verbose (message "Saving %s font lock cache..." (buffer-name))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
521 (condition-case nil |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
522 (save-excursion |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
523 (print (list 'fast-lock-cache-data 2 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
524 (list 'quote timestamp) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
525 (list 'quote font-lock-keywords) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
526 (list 'quote (fast-lock-get-face-properties))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
527 tpbuf) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
528 (set-buffer tpbuf) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
529 (write-region (point-min) (point-max) file nil 'quietly) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
530 (setq fast-lock-cache-timestamp timestamp |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
531 fast-lock-cache-filename file)) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
532 (error (setq saved 'error)) (quit (setq saved 'quit))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
533 (kill-buffer tpbuf) |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
534 (if verbose (message "Saving %s font lock cache...%s" (buffer-name) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
535 (cond ((eq saved 'error) "failed") |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
536 ((eq saved 'quit) "aborted") |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
537 (t "done")))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
538 ;; We return non-nil regardless of whether a failure occurred. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
539 saved)) |
10243 | 540 |
541 (defun fast-lock-cache-data (version timestamp keywords properties | |
542 &rest ignored) | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
543 ;; Change from (HIGH LOW) for back compatibility. Remove for version 3! |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
544 (when (consp (cdr-safe timestamp)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
545 (setcdr timestamp (nth 1 timestamp))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
546 ;; Compile KEYWORDS and `font-lock-keywords' in case one is and one isn't. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
547 (let ((current font-lock-keywords)) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
548 (setq keywords (font-lock-compile-keywords keywords) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
549 font-lock-keywords (font-lock-compile-keywords current))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
550 ;; Use the Font Lock cache PROPERTIES if we're using cache VERSION format 2, |
10243 | 551 ;; the current buffer's file timestamp matches the TIMESTAMP, and the current |
552 ;; buffer's font-lock-keywords are the same as KEYWORDS. | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
553 (let ((buf-timestamp (visited-file-modtime)) |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
554 (verbose (if (numberp fast-lock-verbose) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
555 (> (buffer-size) fast-lock-verbose) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
556 fast-lock-verbose)) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
557 (loaded t)) |
10243 | 558 (if (or (/= version 2) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
559 (buffer-modified-p) |
10243 | 560 (not (equal timestamp buf-timestamp)) |
561 (not (equal keywords font-lock-keywords))) | |
562 (setq loaded nil) | |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
563 (if verbose (message "Loading %s font lock cache..." (buffer-name))) |
10243 | 564 (condition-case nil |
565 (fast-lock-set-face-properties properties) | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
566 (error (setq loaded 'error)) (quit (setq loaded 'quit))) |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
567 (if verbose (message "Loading %s font lock cache...%s" (buffer-name) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
568 (cond ((eq loaded 'error) "failed") |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
569 ((eq loaded 'quit) "aborted") |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
570 (t "done"))))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
571 (setq font-lock-fontified (eq loaded t) |
13301
0cbf58edd87f
Updated to 3.08; don't use `let' var from caller.
Simon Marshall <simon@gnu.org>
parents:
12909
diff
changeset
|
572 fast-lock-cache-timestamp (and (eq loaded t) timestamp)))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
573 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
574 ;; Text Properties Processing Functions: |
10243 | 575 |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
576 ;; This is fast, but fails if adjacent characters have different `face' text |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
577 ;; properties. Maybe that's why I dropped it in the first place? |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
578 ;(defun fast-lock-get-face-properties () |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
579 ; "Return a list of all `face' text properties in the current buffer. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
580 ;Each element of the list is of the form (VALUE START1 END1 START2 END2 ...) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
581 ;where VALUE is a `face' property value and STARTx and ENDx are positions." |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
582 ; (save-restriction |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
583 ; (widen) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
584 ; (let ((start (text-property-not-all (point-min) (point-max) 'face nil)) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
585 ; (limit (point-max)) end properties value cell) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
586 ; (while start |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
587 ; (setq end (next-single-property-change start 'face nil limit) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
588 ; value (get-text-property start 'face)) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
589 ; ;; Make, or add to existing, list of regions with same `face'. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
590 ; (if (setq cell (assq value properties)) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
591 ; (setcdr cell (cons start (cons end (cdr cell)))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
592 ; (setq properties (cons (list value start end) properties))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
593 ; (setq start (next-single-property-change end 'face))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
594 ; properties))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
595 |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
596 ;; This is slow, but copes if adjacent characters have different `face' text |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
597 ;; properties, but fails if they are lists. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
598 ;(defun fast-lock-get-face-properties () |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
599 ; "Return a list of all `face' text properties in the current buffer. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
600 ;Each element of the list is of the form (VALUE START1 END1 START2 END2 ...) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
601 ;where VALUE is a `face' property value and STARTx and ENDx are positions. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
602 ;Only those `face' VALUEs in `fast-lock-save-faces' are returned." |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
603 ; (save-restriction |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
604 ; (widen) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
605 ; (let ((faces (or fast-lock-save-faces (face-list))) (limit (point-max)) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
606 ; properties regions face start end) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
607 ; (while faces |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
608 ; (setq face (car faces) faces (cdr faces) regions () end (point-min)) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
609 ; ;; Make a list of start/end regions with `face' property face. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
610 ; (while (setq start (text-property-any end limit 'face face)) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
611 ; (setq end (or (text-property-not-all start limit 'face face) limit) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
612 ; regions (cons start (cons end regions)))) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
613 ; ;; Add `face' face's regions, if any, to properties. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
614 ; (when regions |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
615 ; (push (cons face regions) properties))) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
616 ; properties))) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
617 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
618 (defun fast-lock-get-face-properties () |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
619 "Return a list of all `face' text properties in the current buffer. |
10243 | 620 Each element of the list is of the form (VALUE START1 END1 START2 END2 ...) |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
621 where VALUE is a `face' property value and STARTx and ENDx are positions." |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
622 (save-restriction |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
623 (widen) |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
624 (let ((start (text-property-not-all (point-min) (point-max) 'face nil)) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
625 end properties value cell) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
626 (while start |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
627 (setq end (next-single-property-change start 'face nil (point-max)) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
628 value (get-text-property start 'face)) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
629 ;; Make, or add to existing, list of regions with same `face'. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
630 (cond ((setq cell (assoc value properties)) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
631 (setcdr cell (cons start (cons end (cdr cell))))) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
632 ((fast-lock-save-facep value) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
633 (push (list value start end) properties))) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
634 (setq start (text-property-not-all end (point-max) 'face nil))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
635 properties))) |
10243 | 636 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
637 (defun fast-lock-set-face-properties (properties) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
638 "Set all `face' text properties to PROPERTIES in the current buffer. |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
639 Any existing `face' text properties are removed first. |
10243 | 640 See `fast-lock-get-face-properties' for the format of PROPERTIES." |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
641 (save-buffer-state (plist regions) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
642 (save-restriction |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
643 (widen) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
644 (font-lock-unfontify-region (point-min) (point-max)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
645 (while properties |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
646 (setq plist (list 'face (car (car properties))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
647 regions (cdr (car properties)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
648 properties (cdr properties)) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
649 ;; Set the `face' property for each start/end region. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
650 (while regions |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
651 (set-text-properties (nth 0 regions) (nth 1 regions) plist) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
652 (setq regions (nthcdr 2 regions))))))) |
10243 | 653 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
654 ;; Functions for XEmacs: |
10243 | 655 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
656 (when (save-match-data (string-match "XEmacs" (emacs-version))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
657 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
658 ;; It would be better to use XEmacs' `map-extents' over extents with a |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
659 ;; `font-lock' property, but `face' properties are on different extents. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
660 (defun fast-lock-get-face-properties () |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
661 "Return a list of all `face' text properties in the current buffer. |
10243 | 662 Each element of the list is of the form (VALUE START1 END1 START2 END2 ...) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
663 where VALUE is a `face' property value and STARTx and ENDx are positions. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
664 Only those `face' VALUEs in `fast-lock-save-faces' are returned." |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
665 (save-restriction |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
666 (widen) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
667 (let ((properties ()) cell) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
668 (map-extents |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
669 (function (lambda (extent ignore) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
670 (let ((value (extent-face extent))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
671 ;; We're only interested if it's one of `fast-lock-save-faces'. |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
672 (when (and value (fast-lock-save-facep value)) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
673 (let ((start (extent-start-position extent)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
674 (end (extent-end-position extent))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
675 ;; Make or add to existing list of regions with the same |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
676 ;; `face' property value. |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
677 (if (setq cell (assoc value properties)) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
678 (setcdr cell (cons start (cons end (cdr cell)))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
679 (push (list value start end) properties)))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
680 ;; Return nil to keep `map-extents' going. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
681 nil)))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
682 properties))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
683 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
684 ;; Make extents just like XEmacs' font-lock.el does. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
685 (defun fast-lock-set-face-properties (properties) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
686 "Set all `face' text properties to PROPERTIES in the current buffer. |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
687 Any existing `face' text properties are removed first. |
10243 | 688 See `fast-lock-get-face-properties' for the format of PROPERTIES." |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
689 (save-restriction |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
690 (widen) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
691 (font-lock-unfontify-region (point-min) (point-max)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
692 (while properties |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
693 (let ((face (car (car properties))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
694 (regions (cdr (car properties)))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
695 ;; Set the `face' property, etc., for each start/end region. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
696 (while regions |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
697 (font-lock-set-face (nth 0 regions) (nth 1 regions) face) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
698 (setq regions (nthcdr 2 regions))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
699 (setq properties (cdr properties)))))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
700 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
701 ;; XEmacs 19.12 font-lock.el's `font-lock-fontify-buffer' runs a hook. |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
702 (add-hook 'font-lock-after-fontify-buffer-hook |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
703 'fast-lock-after-fontify-buffer)) |
10243 | 704 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
705 (unless (boundp 'font-lock-inhibit-thing-lock) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
706 (defvar font-lock-inhibit-thing-lock nil |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
707 "List of Font Lock mode related modes that should not be turned on.")) |
12909
0e165bcd43a2
New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents:
12048
diff
changeset
|
708 |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
709 (unless (fboundp 'font-lock-value-in-major-mode) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
710 (defun font-lock-value-in-major-mode (alist) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
711 ;; Return value in ALIST for `major-mode'. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
712 (if (consp alist) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
713 (cdr (or (assq major-mode alist) (assq t alist))) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
714 alist))) |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
715 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
716 (unless (fboundp 'font-lock-compile-keywords) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
717 (defalias 'font-lock-compile-keywords 'identity)) |
10243 | 718 |
719 ;; Install ourselves: | |
720 | |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
721 (add-hook 'after-save-hook 'fast-lock-save-cache-after-save-file) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
722 (add-hook 'kill-buffer-hook 'fast-lock-save-cache-before-kill-buffer) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
723 (add-hook 'kill-emacs-hook 'fast-lock-save-caches-before-kill-emacs) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
724 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
725 ;;;###autoload |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
726 (if (fboundp 'add-minor-mode) (add-minor-mode 'fast-lock-mode nil)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
727 ;;;###dont-autoload |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
728 (unless (assq 'fast-lock-mode minor-mode-alist) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
729 (setq minor-mode-alist (append minor-mode-alist '((fast-lock-mode nil))))) |
10243 | 730 |
731 ;; Provide ourselves: | |
732 | |
733 (provide 'fast-lock) | |
734 | |
735 ;;; fast-lock.el ends here |