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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
17498
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
3 ;; Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; any later version.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13301
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13301
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13301
diff changeset
24 ;; Boston, MA 02111-1307, USA.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; See also the lazy-lock package. (But don't use the two at the same time!)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; Installation:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;;
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
37 ;; Put in your ~/.emacs:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;;
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; Start up a new Emacs and use font-lock as usual (except that you can use the
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; so-called "gaudier" fontification regexps on big files without frustration).
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;;
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 (require 'font-lock)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
235 (defvar fast-lock-mode nil) ; Whether we are turned on.
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
236 (defvar fast-lock-cache-timestamp nil) ; For saving/reading.
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 Each item should be either DIR or a cons pair of the form (REGEXP . DIR) where
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 DIR is a directory name (relative or absolute) and REGEXP is a regexp.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 until one succeeds (i.e., until a readable or writable one is found). If an
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 item contains REGEXP, DIR is used only if the buffer file name matches REGEXP.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 For example:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304
17498
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
305 (defcustom fast-lock-verbose font-lock-verbose
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
306 "*If non-nil, means show status messages for cache processing.
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
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
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
311 :group 'fast-lock)
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
320 ;; User Functions:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
322 ;;;###autoload
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 (defun fast-lock-mode (&optional arg)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 "Toggle Fast Lock mode.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
374 See `fast-lock-mode'."
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 (fontified font-lock-fontified))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 (set (make-local-variable 'font-lock-fontified) nil)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 ;; Keep trying directories until fontification is turned off.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
411 See `fast-lock-mode'."
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
450 ;;;###autoload
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 (defun turn-on-fast-lock ()
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 (defun fast-lock-cache-directory (directory create)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 "Return usable directory based on DIRECTORY.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 Returns nil if the directory does not exist, or, if CREATE non-nil, cannot be
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 created. DIRECTORY may be a string or a cons pair of the form (REGEXP . DIR).
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 (cond ((not dir)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 (defun fast-lock-cache-name (directory)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 "Return full cache path name using caching DIRECTORY.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 If DIRECTORY is `.', the path is the buffer file name appended with `.flc'.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 Otherwise, the path name is constructed from DIRECTORY and the buffer's true
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 abbreviated file name, with all `/' characters in the name replaced with `#'
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 characters, and appended with `.flc'.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 (if (string-equal directory ".")
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 (chars-alist
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 (if (eq system-type 'emx)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 '((?/ . (?#)) (?# . (?# ?#)) (?: . (?\;)) (?\; . (?\; ?\;)))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 '((?/ . (?#)) (?# . (?# ?#)))))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 (mapchars
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 (function (lambda (c) (or (cdr (assq c chars-alist)) (list c))))))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 (concat
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 (file-name-as-directory (expand-file-name directory))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 (mapconcat 'char-to-string (apply 'append (mapcar mapchars bufile)) "")
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 ".flc"))))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 (not (equal keywords font-lock-keywords)))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
737 ;; Functions for XEmacs:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
817 ;; Install ourselves:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
824 (when (fboundp 'add-minor-mode)
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
825 (defvar fast-lock-mode nil)
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
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
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 ;; Provide ourselves:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 (provide 'fast-lock)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 ;;; fast-lock.el ends here