Mercurial > emacs
annotate lisp/fast-lock.el @ 18092:8428d56cd207
(smtpmail-via-smtp): Recognize XVRB as a synonym for
VERB and XONE as a synonym for ONEX.
(smtpmail-read-response): Add "%s" to `message' calls to avoid
problems with percent signs in strings.
(smtpmail-read-response): Return all lines of the
response text as a list of strings. Formerly only the first line
was returned. This is insufficient when one wants to parse
e.g. an EHLO response.
Ignore responses starting with "0". This is necessary to support
the VERB SMTP extension.
(smtpmail-via-smtp): Try EHLO and find out which SMTP service
extensions the receiving mailer supports.
Issue the ONEX and XUSR commands if the corresponding extensions
are supported.
Issue VERB if supported and `smtpmail-debug-info' is non-nil.
Add SIZE attribute to MAIL FROM: command if SIZE extension is
supported.
Add code that could set the BODY= attribute to MAIL FROM: if the
receiving mailer supports 8BITMIME. This is currently disabled,
since doing it right might involve adding MIME headers to, and in
some cases reencoding, the message.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 01 Jun 1997 22:24:22 +0000 |
parents | 12fc8bc96c58 |
children | 6156115816da |
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 |
17498 | 3 ;; Copyright (C) 1994, 1995, 1996, 1997 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 |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
7 ;; Version: 3.12.02 |
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 |
17586
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
56 ;; History: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
57 ;; |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
58 ;; 0.02--1.00: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
59 ;; - Changed name from turbo-prop to fast-lock. Automagic for font-lock only |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
60 ;; - Made `fast-lock-mode' a minor mode, like G. Dinesh Dutt's fss-mode |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
61 ;; 1.00--1.01: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
62 ;; - Turn on `fast-lock-mode' only if `buffer-file-name' or `interactive-p' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
63 ;; - Made `fast-lock-file-name' use `buffer-name' if `buffer-file-name' is nil |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
64 ;; - Moved save-all conditions to `fast-lock-save-cache' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
65 ;; - Added `fast-lock-save-text-properties' to `kill-buffer-hook' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
66 ;; 1.01--2.00: complete rewrite---not worth the space to document |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
67 ;; - Changed structure of text properties cache and threw out file mod checks |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
68 ;; 2.00--2.01: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
69 ;; - Made `condition-case' forms understand `quit'. |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
70 ;; - Made `fast-lock' require `font-lock' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
71 ;; - Made `fast-lock-cache-name' chase links (from Ben Liblit) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
72 ;; 2.01--3.00: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
73 ;; - Changed structure of cache to include `font-lock-keywords' (from rms) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
74 ;; - Changed `fast-lock-cache-mechanisms' to `fast-lock-cache-directories' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
75 ;; - Removed `fast-lock-read-others' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
76 ;; - Made `fast-lock-read-cache' ignore cache owner |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
77 ;; - Made `fast-lock-save-cache-external' create cache directory |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
78 ;; - Made `fast-lock-save-cache-external' save `font-lock-keywords' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
79 ;; - Made `fast-lock-cache-data' check `font-lock-keywords' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
80 ;; 3.00--3.01: incorporated port of 2.00 to Lucid, made by Barry Warsaw |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
81 ;; - Package now provides itself |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
82 ;; - Lucid: Use `font-lock-any-extents-p' for `font-lock-any-properties-p' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
83 ;; - Lucid: Use `list-faces' for `face-list' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
84 ;; - Lucid: Added `set-text-properties' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
85 ;; - Lucid: Made `turn-on-fast-lock' pass 1 not t to `fast-lock-mode' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
86 ;; - Removed test for `fast-lock-mode' from `fast-lock-read-cache' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
87 ;; - Lucid: Added Lucid-specific `fast-lock-get-face-properties' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
88 ;; 3.01--3.02: now works with Lucid Emacs, thanks to Barry Warsaw |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
89 ;; - Made `fast-lock-cache-name' map ":" to ";" for OS/2 (from Serganova Vera) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
90 ;; - Made `fast-lock-cache-name' use abbreviated file name (from Barry Warsaw) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
91 ;; - Lucid: Separated handlers for `error' and `quit' for `condition-case' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
92 ;; 3.02--3.03: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
93 ;; - Changed `fast-lock-save-cache-external' to `fast-lock-save-cache-data' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
94 ;; - Lucid: Added Lucid-specific `fast-lock-set-face-properties' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
95 ;; 3.03--3.04: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
96 ;; - Corrected `subrp' test of Lucid code |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
97 ;; - Replaced `font-lock-any-properties-p' with `text-property-not-all' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
98 ;; - Lucid: Made `fast-lock-set-face-properties' put `text-prop' on extents |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
99 ;; - Made `fast-lock-cache-directories' a regexp alist (from Colin Rafferty) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
100 ;; - Made `fast-lock-cache-directory' to return a usable cache file directory |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
101 ;; 3.04--3.05: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
102 ;; - Lucid: Fix for XEmacs 19.11 `text-property-not-all' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
103 ;; - Replaced `subrp' test of Lucid code with `emacs-version' `string-match' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
104 ;; - Made `byte-compile-warnings' omit `unresolved' on compilation |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
105 ;; - Made `fast-lock-save-cache-data' use a buffer (from Rick Sladkey) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
106 ;; - Reverted to old `fast-lock-get-face-properties' (from Rick Sladkey) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
107 ;; 3.05--3.06: incorporated hack of 3.03, made by Jonathan Stigelman (Stig) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
108 ;; - Reverted to 3.04 version of `fast-lock-get-face-properties' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
109 ;; - XEmacs: Removed `list-faces' `defalias' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
110 ;; - Made `fast-lock-mode' and `turn-on-fast-lock' succeed `autoload' cookies |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
111 ;; - Added `fast-lock-submit-bug-report' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
112 ;; - Renamed `fast-lock-save-size' to `fast-lock-minimum-size' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
113 ;; - Made `fast-lock-save-cache' output a message if no save ever attempted |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
114 ;; - Made `fast-lock-save-cache-data' output a message if save attempted |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
115 ;; - Made `fast-lock-cache-data' output a message if load attempted |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
116 ;; - Made `fast-lock-save-cache-data' do `condition-case' not `unwind-protect' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
117 ;; - Made `fast-lock-save-cache' and `fast-lock-read-cache' return nothing |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
118 ;; - Made `fast-lock-save-cache' check `buffer-modified-p' (Stig) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
119 ;; - Added `fast-lock-save-events' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
120 ;; - Added `fast-lock-after-save-hook' to `after-save-hook' (Stig) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
121 ;; - Added `fast-lock-kill-buffer-hook' to `kill-buffer-hook' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
122 ;; - Changed `fast-lock-save-caches' to `fast-lock-kill-emacs-hook' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
123 ;; - Added `fast-lock-kill-emacs-hook' to `kill-emacs-hook' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
124 ;; - Made `fast-lock-save-cache' check `verify-visited-file-modtime' (Stig) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
125 ;; - Made `visited-file-modtime' be the basis of the timestamp (Stig) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
126 ;; - Made `fast-lock-save-cache-1' and `fast-lock-cache-data' use/reformat it |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
127 ;; - Added `fast-lock-cache-filename' to keep track of the cache file name |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
128 ;; - Added `fast-lock-after-fontify-buffer' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
129 ;; - Added `fast-lock-save-faces' list of faces to save (idea from Stig/Tibor) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
130 ;; - Made `fast-lock-get-face-properties' functions use it |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
131 ;; - XEmacs: Made `fast-lock-set-face-properties' do extents the Font Lock way |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
132 ;; - XEmacs: Removed fix for `text-property-not-all' (19.11 support dropped) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
133 ;; - Made `fast-lock-mode' ensure `font-lock-mode' is on |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
134 ;; - Made `fast-lock-save-cache' do `cdr-safe' not `cdr' (from Dave Foster) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
135 ;; - Made `fast-lock-save-cache' do `set-buffer' first (from Dave Foster) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
136 ;; - Made `fast-lock-save-cache' loop until saved or quit (from Georg Nikodym) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
137 ;; - Made `fast-lock-cache-data' check `buffer-modified-p' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
138 ;; - Made `fast-lock-cache-data' do `font-lock-compile-keywords' if necessary |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
139 ;; - XEmacs: Made `font-lock-compile-keywords' `defalias' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
140 ;; 3.06--3.07: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
141 ;; - XEmacs: Add `fast-lock-after-fontify-buffer' to the Font Lock hook |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
142 ;; - Made `fast-lock-cache-name' explain the use of `directory-abbrev-alist' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
143 ;; - Made `fast-lock-mode' use `buffer-file-truename' not `buffer-file-name' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
144 ;; 3.07--3.08: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
145 ;; - Made `fast-lock-read-cache' set `fast-lock-cache-filename' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
146 ;; 3.08--3.09: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
147 ;; - Made `fast-lock-save-cache' cope if `fast-lock-minimum-size' is an a list |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
148 ;; - Made `fast-lock-mode' respect the value of `font-lock-inhibit-thing-lock' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
149 ;; - Added `fast-lock-after-unfontify-buffer' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
150 ;; 3.09--3.10: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
151 ;; - Rewrite for Common Lisp macros |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
152 ;; - Made fast-lock.el barf on a crap 8+3 pseudo-OS (Eli Zaretskii help) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
153 ;; - XEmacs: Made `add-minor-mode' succeed `autoload' cookie |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
154 ;; - XEmacs: Made `fast-lock-save-faces' default to `font-lock-face-list' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
155 ;; - Made `fast-lock-save-cache' use `font-lock-value-in-major-mode' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
156 ;; - Wrap with `save-buffer-state' (Ray Van Tassle report) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
157 ;; - Made `fast-lock-mode' wrap `font-lock-support-mode' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
158 ;; 3.10--3.11: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
159 ;; - Made `fast-lock-get-face-properties' cope with face lists |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
160 ;; - Added `fast-lock-verbose' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
161 ;; - XEmacs: Add `font-lock-value-in-major-mode' if necessary |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
162 ;; - Removed `fast-lock-submit-bug-report' and bade farewell |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
163 ;; 3.11--3.12: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
164 ;; - Added Custom support (Hrvoje Niksic help) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
165 ;; - Made `save-buffer-state' wrap `inhibit-point-motion-hooks' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
166 ;; - Made `fast-lock-cache-data' simplify calls of `font-lock-compile-keywords' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
167 ;; 3.12--3.13: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
168 ;; - Removed `byte-*' variables from `eval-when-compile' (Erik Naggum hint) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
169 ;; - Changed structure of cache to include `font-lock-syntactic-keywords' |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
170 ;; - Made `fast-lock-save-cache-1' save syntactic fontification data |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
171 ;; - Made `fast-lock-cache-data' take syntactic fontification data |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
172 ;; - Added `fast-lock-get-syntactic-properties' |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
173 ;; - Renamed `fast-lock-set-face-properties' to `fast-lock-add-properties' |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
174 ;; - Made `fast-lock-add-properties' add syntactic and face fontification data |
17586
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
175 |
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
|
176 ;;; 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
|
177 |
10243 | 178 (require 'font-lock) |
179 | |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
180 ;; 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
|
181 (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
|
182 (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
|
183 |
10243 | 184 (eval-when-compile |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
185 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
186 ;; We don't do this at the top-level as we only use non-autoloaded macros. |
17586
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
187 (require 'cl) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
188 ;; |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
189 ;; We use this to preserve or protect things when modifying text properties. |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
190 (defmacro save-buffer-state (varlist &rest body) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
191 "Bind variables according to VARLIST and eval BODY restoring buffer state." |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
192 (` (let* ((,@ (append varlist |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
193 '((modified (buffer-modified-p)) (buffer-undo-list t) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
194 (inhibit-read-only t) (inhibit-point-motion-hooks t) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
195 before-change-functions after-change-functions |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
196 deactivate-mark buffer-file-name buffer-file-truename)))) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
197 (,@ body) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
198 (when (and (not modified) (buffer-modified-p)) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
199 (set-buffer-modified-p nil))))) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
200 (put 'save-buffer-state 'lisp-indent-function 1) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
201 ;; |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
202 ;; We use this to verify that a face should be saved. |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
203 (defmacro fast-lock-save-facep (face) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
204 "Return non-nil if FACE is one of `fast-lock-save-faces'." |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
205 (` (or (null fast-lock-save-faces) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
206 (if (symbolp (, face)) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
207 (memq (, face) fast-lock-save-faces) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
208 (let ((faces (, face))) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
209 (while (unless (memq (car faces) fast-lock-save-faces) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
210 (setq faces (cdr faces)))) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
211 faces))))) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
212 ;; |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
213 ;; We use this for compatibility with a future Emacs. |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
214 (or (fboundp 'defcustom) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
215 (defmacro defcustom (symbol value doc &rest args) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
216 (` (defvar (, symbol) (, value) (, doc)))))) |
10243 | 217 |
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
|
218 ;(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
|
219 ; "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
|
220 ; (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
|
221 ; (let ((reporter-prompt-for-summary-p t)) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
222 ; (reporter-submit-bug-report "simon@gnu.ai.mit.edu" "fast-lock 3.12.02" |
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
|
223 ; '(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
|
224 ; 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
|
225 ; 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
|
226 ; 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
|
227 ; (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
|
228 ; |
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
|
229 ;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
|
230 ;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
|
231 ; |
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
|
232 ;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
|
233 ;In the `*scratch*' buffer, evaluate:")))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
234 |
17498 | 235 (defvar fast-lock-mode nil) ; Whether we are turned on. |
236 (defvar fast-lock-cache-timestamp nil) ; For saving/reading. | |
237 (defvar fast-lock-cache-filename nil) ; For deleting. | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
238 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
239 ;; User Variables: |
10243 | 240 |
17430
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
241 (defcustom fast-lock-cache-directories '("." "~/.emacs-flc") |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
242 ; - `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
|
243 ; - `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
|
244 "*Directories in which Font Lock cache files are saved and read. |
10243 | 245 Each item should be either DIR or a cons pair of the form (REGEXP . DIR) where |
246 DIR is a directory name (relative or absolute) and REGEXP is a regexp. | |
247 | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
248 An attempt will be made to save or read Font Lock cache files using these items |
10243 | 249 until one succeeds (i.e., until a readable or writable one is found). If an |
250 item contains REGEXP, DIR is used only if the buffer file name matches REGEXP. | |
251 For example: | |
252 | |
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
|
253 (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
|
254 (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
|
255 => |
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
|
256 ((\"^/your/true/home/directory/\" . \".\") \"~/.emacs-flc\") |
10243 | 257 |
258 would cause a file's current directory to be used if the file is under your | |
17430
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
259 home directory hierarchy, or otherwise the absolute directory `~/.emacs-flc'." |
17586
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
260 :type '(repeat (radio (directory :tag "directory") |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
261 (cons :tag "Matching" |
17507
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
262 (regexp :tag "regexp") |
17586
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
263 (directory :tag "directory")))) |
17430
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
264 :group 'fast-lock) |
10243 | 265 |
17430
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
266 (defcustom 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
|
267 "*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
|
268 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
|
269 If nil, means cache files are never created. |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
270 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
|
271 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
|
272 ((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
|
273 means that the minimum size is 25K for buffers in C or C++ modes, one megabyte |
17430
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
274 for buffers in Rmail mode, and size is irrelevant otherwise." |
17507
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
275 :type '(choice (const :tag "none" nil) |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
276 (integer :tag "size") |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
277 (repeat :menu-tag "mode specific" :tag "mode specific" |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
278 :value ((t . nil)) |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
279 (cons :tag "Instance" |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
280 (radio :tag "Mode" |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
281 (const :tag "all" t) |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
282 (symbol :tag "name")) |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
283 (radio :tag "Size" |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
284 (const :tag "none" nil) |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
285 (integer :tag "size"))))) |
17430
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
286 :group 'fast-lock) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
287 |
17430
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
288 (defcustom 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
|
289 "*Events under which caches will be saved. |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
290 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
|
291 If concurrent editing sessions use the same associated cache file for a file's |
17430
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
292 buffer, then you should add `save-buffer' to this list." |
17507
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
293 :type '(set (const :tag "buffer saving" save-buffer) |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
294 (const :tag "buffer killing" kill-buffer) |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
295 (const :tag "emacs killing" kill-emacs)) |
17430
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
296 :group 'fast-lock) |
10243 | 297 |
17430
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
298 (defcustom 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
|
299 "*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
|
300 If nil, means only buffer files known to be owned by you can have associated |
17430
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
301 Font Lock cache files saved. Ownership may be unknown for networked files." |
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
302 :type 'boolean |
de68258fef5f
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
16579
diff
changeset
|
303 :group 'fast-lock) |
10243 | 304 |
17498 | 305 (defcustom fast-lock-verbose font-lock-verbose |
306 "*If non-nil, means show status messages for cache processing. | |
307 If a number, only buffers greater than this size have processing messages." | |
17507
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
308 :type '(choice (const :tag "never" nil) |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
309 (const :tag "always" t) |
fd87760f20cd
Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents:
17498
diff
changeset
|
310 (integer :tag "size")) |
17498 | 311 :group 'fast-lock) |
312 | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
313 (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
|
314 (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
|
315 ;; 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
|
316 font-lock-face-list) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
317 "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
|
318 If nil, means information for all faces will be saved.") |
10243 | 319 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
320 ;; User Functions: |
10243 | 321 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
322 ;;;###autoload |
10243 | 323 (defun fast-lock-mode (&optional arg) |
324 "Toggle Fast Lock mode. | |
325 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
|
326 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
|
327 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
328 (setq font-lock-support-mode 'fast-lock-mode) |
10243 | 329 |
330 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
|
331 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
|
332 buffer's file, and its `font-lock-keywords' match those that you are using. |
10243 | 333 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
334 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
|
335 - 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
|
336 - 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
|
337 - 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
|
338 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
|
339 See also the commands `fast-lock-read-cache' and `fast-lock-save-cache'. |
10243 | 340 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
341 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
|
342 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
343 Various methods of control are provided for the Font Lock cache. In general, |
10243 | 344 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
|
345 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
|
346 `fast-lock-save-others' and `fast-lock-save-faces'." |
10243 | 347 (interactive "P") |
13301
0cbf58edd87f
Updated to 3.08; don't use `let' var from caller.
Simon Marshall <simon@gnu.org>
parents:
12909
diff
changeset
|
348 ;; 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
|
349 ;; but many packages temporarily wrap that to nil when doing their own thing. |
10243 | 350 (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
|
351 (and buffer-file-truename |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
352 (not (memq 'fast-lock-mode font-lock-inhibit-thing-lock)) |
10243 | 353 (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
|
354 (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
|
355 ;; 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
|
356 (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
|
357 (font-lock-mode t)) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
358 ;; Let's get down to business. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
359 (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
|
360 (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
|
361 (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
|
362 (fast-lock-read-cache)))) |
10243 | 363 |
364 (defun fast-lock-read-cache () | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
365 "Read the Font Lock cache for the current buffer. |
10243 | 366 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
367 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
|
368 - 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
|
369 - 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
|
370 - 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
|
371 - 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
|
372 - Criteria imposed by `fast-lock-cache-directories'. |
10243 | 373 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
374 See `fast-lock-mode'." |
10243 | 375 (interactive) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
376 (let ((directories fast-lock-cache-directories) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
377 (modified (buffer-modified-p)) (inhibit-read-only t) |
10243 | 378 (fontified font-lock-fontified)) |
379 (set (make-local-variable 'font-lock-fontified) nil) | |
380 ;; Keep trying directories until fontification is turned off. | |
381 (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
|
382 (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
|
383 (condition-case nil |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
384 (when directory |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
385 (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
|
386 (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
|
387 (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
|
388 (error nil) (quit nil)) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
389 (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
|
390 ;; 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
|
391 ;; 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
|
392 ;; of `fast-lock-cache-timestamp'.) |
10243 | 393 (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
|
394 (unless font-lock-fontified |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
395 (setq fast-lock-cache-filename nil font-lock-fontified fontified)))) |
10243 | 396 |
397 (defun fast-lock-save-cache (&optional buffer) | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
398 "Save the Font Lock cache of BUFFER or the current buffer. |
10243 | 399 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
400 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
|
401 - 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
|
402 - 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
|
403 - 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
|
404 - 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
|
405 - 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
|
406 - 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
|
407 - 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
|
408 - 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
|
409 - Criteria imposed by `fast-lock-cache-directories'. |
10243 | 410 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
411 See `fast-lock-mode'." |
10243 | 412 (interactive) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
413 (save-excursion |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
414 (when buffer |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
415 (set-buffer buffer)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
416 (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
|
417 (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
|
418 (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
|
419 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
420 ;; "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
|
421 ;; 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
|
422 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
423 ;; 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
|
424 ;; (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
|
425 (not (buffer-modified-p)) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
426 ;; 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
|
427 ;; (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
|
428 (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
|
429 ;; 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
|
430 ;; (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
|
431 (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
|
432 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
433 ;; 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
|
434 (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
|
435 (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
|
436 (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
|
437 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
438 ;; 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
|
439 (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
|
440 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
441 ;; 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
|
442 (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
|
443 (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
|
444 (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
|
445 (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
|
446 (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
|
447 (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
|
448 (setq directories (cdr directories))))))))) |
10243 | 449 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
450 ;;;###autoload |
10243 | 451 (defun turn-on-fast-lock () |
452 "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
|
453 (fast-lock-mode t)) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
454 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
455 ;;; API Functions: |
10243 | 456 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
457 (defun fast-lock-after-fontify-buffer () |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
458 ;; 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
|
459 (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
|
460 (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
|
461 (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
|
462 (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
|
463 ;; 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
|
464 (setq fast-lock-cache-timestamp nil)) |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
465 |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
466 (defalias 'fast-lock-after-unfontify-buffer |
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
467 'ignore) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
468 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
469 ;; Miscellaneous Functions: |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
470 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
471 (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
|
472 ;; 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
|
473 (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
|
474 (fast-lock-save-cache))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
475 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
476 (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
|
477 ;; 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
|
478 (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
|
479 (fast-lock-save-cache))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
480 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
481 (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
|
482 ;; 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
|
483 (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
|
484 (mapcar 'fast-lock-save-cache (buffer-list)))) |
10243 | 485 |
486 (defun fast-lock-cache-directory (directory create) | |
487 "Return usable directory based on DIRECTORY. | |
488 Returns nil if the directory does not exist, or, if CREATE non-nil, cannot be | |
489 created. DIRECTORY may be a string or a cons pair of the form (REGEXP . DIR). | |
490 See `fast-lock-cache-directories'." | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
491 (let ((dir |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
492 (cond ((not buffer-file-name) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
493 ;; 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
|
494 nil) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
495 ((stringp directory) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
496 ;; Just a directory. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
497 directory) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
498 (t |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
499 ;; 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
|
500 (let ((bufile (expand-file-name buffer-file-truename)) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
501 (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
|
502 (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
|
503 (cdr directory))))))) |
10243 | 504 (cond ((not dir) |
505 nil) | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
506 ((file-accessible-directory-p dir) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
507 dir) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
508 (create |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
509 (condition-case nil |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
510 (progn (make-directory dir t) dir) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
511 (error nil)))))) |
10243 | 512 |
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
|
513 ;; 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
|
514 ;; 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
|
515 ;; 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
|
516 ;; 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
|
517 ;; made a link from one relative cache directory to another. (Phew!) |
10243 | 518 (defun fast-lock-cache-name (directory) |
519 "Return full cache path name using caching DIRECTORY. | |
520 If DIRECTORY is `.', the path is the buffer file name appended with `.flc'. | |
521 Otherwise, the path name is constructed from DIRECTORY and the buffer's true | |
522 abbreviated file name, with all `/' characters in the name replaced with `#' | |
523 characters, and appended with `.flc'. | |
524 | |
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
|
525 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
|
526 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
|
527 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
|
528 |
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
|
529 (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
|
530 |
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
|
531 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
|
532 |
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
|
533 See `fast-lock-cache-directory'." |
10243 | 534 (if (string-equal directory ".") |
535 (concat buffer-file-name ".flc") | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
536 (let* ((bufile (expand-file-name buffer-file-truename)) |
10243 | 537 (chars-alist |
538 (if (eq system-type 'emx) | |
539 '((?/ . (?#)) (?# . (?# ?#)) (?: . (?\;)) (?\; . (?\; ?\;))) | |
540 '((?/ . (?#)) (?# . (?# ?#))))) | |
541 (mapchars | |
542 (function (lambda (c) (or (cdr (assq c chars-alist)) (list c)))))) | |
543 (concat | |
544 (file-name-as-directory (expand-file-name directory)) | |
545 (mapconcat 'char-to-string (apply 'append (mapcar mapchars bufile)) "") | |
546 ".flc")))) | |
547 | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
548 ;; Font Lock Cache Processing Functions: |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
549 |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
550 ;; The version 3 format of the cache is: |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
551 ;; |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
552 ;; (fast-lock-cache-data VERSION TIMESTAMP |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
553 ;; font-lock-syntactic-keywords SYNTACTIC-PROPERTIES |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
554 ;; font-lock-keywords FACE-PROPERTIES) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
555 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
556 (defun fast-lock-save-cache-1 (file timestamp) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
557 ;; Save the FILE with the TIMESTAMP plus fontification data. |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
558 ;; 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
|
559 (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
|
560 (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
|
561 (> (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
|
562 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
|
563 (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
|
564 (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
|
565 (condition-case nil |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
566 (save-excursion |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
567 (print (list 'fast-lock-cache-data 3 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
568 (list 'quote timestamp) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
569 (list 'quote font-lock-syntactic-keywords) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
570 (list 'quote (fast-lock-get-syntactic-properties)) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
571 (list 'quote font-lock-keywords) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
572 (list 'quote (fast-lock-get-face-properties))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
573 tpbuf) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
574 (set-buffer tpbuf) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
575 (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
|
576 (setq fast-lock-cache-timestamp timestamp |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
577 fast-lock-cache-filename file)) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
578 (error (setq saved 'error)) (quit (setq saved 'quit))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
579 (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
|
580 (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
|
581 (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
|
582 ((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
|
583 (t "done")))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
584 ;; 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
|
585 saved)) |
10243 | 586 |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
587 (defun fast-lock-cache-data (version timestamp |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
588 syntactic-keywords syntactic-properties |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
589 keywords face-properties |
10243 | 590 &rest ignored) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
591 ;; Find value of syntactic keywords in case it is a symbol. |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
592 (setq font-lock-syntactic-keywords (font-lock-eval-keywords |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
593 font-lock-syntactic-keywords)) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
594 ;; Compile all keywords in case some are and some aren't. |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
595 (setq font-lock-syntactic-keywords (font-lock-compile-keywords |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
596 font-lock-syntactic-keywords) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
597 syntactic-keywords (font-lock-compile-keywords syntactic-keywords) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
598 |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
599 font-lock-keywords (font-lock-compile-keywords font-lock-keywords) |
17498 | 600 keywords (font-lock-compile-keywords keywords)) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
601 ;; Use the Font Lock cache SYNTACTIC-PROPERTIES and FACE-PROPERTIES if we're |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
602 ;; using cache VERSION format 3, the current buffer's file timestamp matches |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
603 ;; the TIMESTAMP, the current buffer's `font-lock-syntactic-keywords' are the |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
604 ;; same as SYNTACTIC-KEYWORDS, and the current buffer's `font-lock-keywords' |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
605 ;; are the same as KEYWORDS. |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
606 (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
|
607 (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
|
608 (> (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
|
609 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
|
610 (loaded t)) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
611 (if (or (/= version 3) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
612 (buffer-modified-p) |
10243 | 613 (not (equal timestamp buf-timestamp)) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
614 (not (equal syntactic-keywords font-lock-syntactic-keywords)) |
10243 | 615 (not (equal keywords font-lock-keywords))) |
616 (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
|
617 (if verbose (message "Loading %s font lock cache..." (buffer-name))) |
10243 | 618 (condition-case nil |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
619 (fast-lock-add-properties syntactic-properties face-properties) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
620 (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
|
621 (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
|
622 (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
|
623 ((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
|
624 (t "done"))))) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
625 (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
|
626 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
|
627 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
628 ;; Text Properties Processing Functions: |
10243 | 629 |
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
|
630 ;; 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
|
631 ;; 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
|
632 ;(defun fast-lock-get-face-properties () |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
633 ; "Return a list of `face' text properties in the current buffer. |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
634 ;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
|
635 ;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
|
636 ; (save-restriction |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
637 ; (widen) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
638 ; (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
|
639 ; (limit (point-max)) end properties value cell) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
640 ; (while start |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
641 ; (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
|
642 ; value (get-text-property start 'face)) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
643 ; ;; 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
|
644 ; (if (setq cell (assq value properties)) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
645 ; (setcdr cell (cons start (cons end (cdr cell)))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
646 ; (setq properties (cons (list value start end) properties))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
647 ; (setq start (next-single-property-change end 'face))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
648 ; properties))) |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
649 |
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
|
650 ;; 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
|
651 ;; 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
|
652 ;(defun fast-lock-get-face-properties () |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
653 ; "Return a list of `face' text properties in the current buffer. |
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
|
654 ;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
|
655 ;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
|
656 ;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
|
657 ; (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
|
658 ; (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
|
659 ; (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
|
660 ; 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
|
661 ; (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
|
662 ; (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
|
663 ; ;; 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
|
664 ; (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
|
665 ; (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
|
666 ; 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
|
667 ; ;; 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
|
668 ; (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
|
669 ; (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
|
670 ; 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
|
671 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
672 (defun fast-lock-get-face-properties () |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
673 "Return a list of `face' text properties in the current buffer. |
10243 | 674 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
|
675 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
|
676 (save-restriction |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
677 (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
|
678 (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
|
679 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
|
680 (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
|
681 (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
|
682 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
|
683 ;; 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
|
684 (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
|
685 (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
|
686 ((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
|
687 (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
|
688 (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
|
689 properties))) |
10243 | 690 |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
691 (defun fast-lock-get-syntactic-properties () |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
692 "Return a list of `syntax-table' text properties in the current buffer. |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
693 See `fast-lock-get-face-properties'." |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
694 (save-restriction |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
695 (widen) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
696 (let ((start (text-property-not-all (point-min) (point-max) 'syntax-table |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
697 nil)) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
698 end properties value cell) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
699 (while start |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
700 (setq end (next-single-property-change start 'syntax-table nil |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
701 (point-max)) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
702 value (get-text-property start 'syntax-table)) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
703 ;; Make, or add to existing, list of regions with same `syntax-table'. |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
704 (if (setq cell (assoc value properties)) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
705 (setcdr cell (cons start (cons end (cdr cell)))) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
706 (push (list value start end) properties)) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
707 (setq start (text-property-not-all end (point-max) 'syntax-table nil))) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
708 properties))) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
709 |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
710 (defun fast-lock-add-properties (syntactic-properties face-properties) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
711 "Add `syntax-table' and `face' text properties to the current buffer. |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
712 Any existing `syntax-table' and `face' text properties are removed first. |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
713 See `fast-lock-get-face-properties'." |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
714 (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
|
715 (save-restriction |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
716 (widen) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
717 (font-lock-unfontify-region (point-min) (point-max)) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
718 ;; |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
719 ;; Set the `syntax-table' property for each start/end region. |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
720 (while syntactic-properties |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
721 (setq plist (list 'syntax-table (car (car syntactic-properties))) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
722 regions (cdr (car syntactic-properties)) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
723 syntactic-properties (cdr syntactic-properties)) |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
724 (while regions |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
725 (add-text-properties (nth 0 regions) (nth 1 regions) plist) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
726 (setq regions (nthcdr 2 regions)))) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
727 ;; |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
728 ;; Set the `face' property for each start/end region. |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
729 (while face-properties |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
730 (setq plist (list 'face (car (car face-properties))) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
731 regions (cdr (car face-properties)) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
732 face-properties (cdr face-properties)) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
733 (while regions |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
734 (add-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
|
735 (setq regions (nthcdr 2 regions))))))) |
10243 | 736 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
737 ;; Functions for XEmacs: |
10243 | 738 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
739 (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
|
740 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
741 ;; 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
|
742 ;; `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
|
743 (defun fast-lock-get-face-properties () |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
744 "Return a list of `face' text properties in the current buffer. |
10243 | 745 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
|
746 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
|
747 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
|
748 (save-restriction |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
749 (widen) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
750 (let ((properties ()) cell) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
751 (map-extents |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
752 (function (lambda (extent ignore) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
753 (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
|
754 ;; 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
|
755 (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
|
756 (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
|
757 (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
|
758 ;; 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
|
759 ;; `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
|
760 (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
|
761 (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
|
762 (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
|
763 ;; 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
|
764 nil)))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
765 properties))) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
766 ;; |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
767 ;; XEmacs does not support the `syntax-table' text property. |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
768 (defalias 'fast-lock-get-syntactic-properties |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
769 'ignore) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
770 ;; |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
771 ;; Make extents just like XEmacs' font-lock.el does. |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
772 (defun fast-lock-add-properties (syntactic-properties face-properties) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
773 "Set `face' text properties in the current buffer. |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
774 Any existing `face' text properties are removed first. |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
775 See `fast-lock-get-face-properties'." |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
776 (save-restriction |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
777 (widen) |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
778 (font-lock-unfontify-region (point-min) (point-max)) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
779 ;; Set the `face' property, etc., for each start/end region. |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
780 (while face-properties |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
781 (let ((face (car (car face-properties))) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
782 (regions (cdr (car face-properties)))) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
783 (while regions |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
784 (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
|
785 (setq regions (nthcdr 2 regions))) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
786 (setq face-properties (cdr face-properties)))) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
787 ;; XEmacs does not support the `syntax-table' text property. |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
788 )) |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
789 ;; |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
790 ;; 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
|
791 (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
|
792 'fast-lock-after-fontify-buffer)) |
10243 | 793 |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
794 (unless (boundp 'font-lock-syntactic-keywords) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
795 (defvar font-lock-syntactic-keywords nil)) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
796 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
797 (unless (boundp 'font-lock-inhibit-thing-lock) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
798 (defvar font-lock-inhibit-thing-lock nil)) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
799 |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
800 (unless (fboundp 'font-lock-compile-keywords) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
801 (defalias 'font-lock-compile-keywords 'identity)) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
802 |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
803 (unless (fboundp 'font-lock-eval-keywords) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
804 (defun font-lock-eval-keywords (keywords) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
805 (if (symbolp keywords) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
806 (font-lock-eval-keywords (if (fboundp keywords) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
807 (funcall keywords) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
808 (eval keywords))) |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
809 keywords))) |
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
|
810 |
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
|
811 (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
|
812 (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
|
813 (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
|
814 (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
|
815 alist))) |
10243 | 816 |
817 ;; Install ourselves: | |
818 | |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
819 (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
|
820 (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
|
821 (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
|
822 |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
823 ;;;###autoload |
17498 | 824 (when (fboundp 'add-minor-mode) |
825 (defvar fast-lock-mode nil) | |
826 (add-minor-mode 'fast-lock-mode nil)) | |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
827 ;;;###dont-autoload |
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
828 (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
|
829 (setq minor-mode-alist (append minor-mode-alist '((fast-lock-mode nil))))) |
10243 | 830 |
831 ;; Provide ourselves: | |
832 | |
833 (provide 'fast-lock) | |
834 | |
835 ;;; fast-lock.el ends here |