annotate lisp/fast-lock.el @ 51242:661e2fe7e775

(autoconf-mode setups): Recognise AH_ and AU_ entries in "(autoconf)Autoconf Macro Index". Add "(autoconf)M4 Macro Index" and "(autoconf)Autotest Macro Index". Remove duplicate copy of "(automake)Macro and Variable Index". Keep automake after all autoconf possibilities, so as to prefer those.
author Juanma Barranquero <lekktu@gmail.com>
date Sun, 25 May 2003 21:03:57 +0000
parents 99be3a1e2589
children 695cf19ef79e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 27415
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
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
3 ;; Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
25278
cbe304a26771 Fix maintainer address.
Karl Heuer <kwzh@gnu.org>
parents: 24726
diff changeset
5 ;; Author: Simon Marshall <simon@gnu.org>
27415
f46410ff7c5e Change maintainer to FSF.
Dave Love <fx@gnu.org>
parents: 25278
diff changeset
6 ;; Maintainer: FSF
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; Keywords: faces files
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
8 ;; Version: 3.14
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 27415
diff changeset
10 ;; This file is part of GNU Emacs.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; 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
14 ;; the Free Software Foundation; either version 2, or (at your option)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; any later version.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; 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
23 ;; 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
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13301
diff changeset
25 ;; Boston, MA 02111-1307, USA.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;;; Commentary:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
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
29 ;; 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
30 ;; 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
31 ;; properties from automatically saved associated Font Lock cache files.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;;
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
33 ;; See caveats and feedback below.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;; 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
35
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;; Installation:
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 49241
diff changeset
37 ;;
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
38 ;; Put in your ~/.emacs:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;;
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
40 ;; (setq font-lock-support-mode 'fast-lock-mode)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;;
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; 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
43 ;; so-called "gaudier" fontification regexps on big files without frustration).
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;;
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 ;; 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
46 ;; 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
47 ;; 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
48
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
49 ;; Caveats:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 ;;
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
51 ;; 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
52 ;; be read. This is a "feature"/"consequence"/"bug" of crypt++.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 ;;
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
54 ;; 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
55 ;; times. Therefore the act of checking out may invalidate a cache.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56
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
57 ;; 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
58 ;;
b9ca2d28765c Version 3.12.01 from author; defgroup 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 ;; 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
60 ;; - 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
61 ;; - 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
62 ;; 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
63 ;; - 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
64 ;; - 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
65 ;; - 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
66 ;; - 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
67 ;; 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
68 ;; - 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
69 ;; 2.00--2.01:
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 49241
diff changeset
70 ;; - Made `condition-case' forms understand `quit'.
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
71 ;; - 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
72 ;; - 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
73 ;; 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
74 ;; - 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
75 ;; - 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
76 ;; - 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
77 ;; - 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
78 ;; - 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
79 ;; - 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
80 ;; - 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
81 ;; 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
82 ;; - 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
83 ;; - 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
84 ;; - 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
85 ;; - 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
86 ;; - 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
87 ;; - 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
88 ;; - 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
89 ;; 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
90 ;; - 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
91 ;; - 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
92 ;; - 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
93 ;; 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
94 ;; - 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
95 ;; - 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
96 ;; 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
97 ;; - 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
98 ;; - 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
99 ;; - 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
100 ;; - 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
101 ;; - 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
102 ;; 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
103 ;; - 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
104 ;; - 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
105 ;; - 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
106 ;; - 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
107 ;; - 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
108 ;; 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
109 ;; - 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
110 ;; - 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
111 ;; - 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
112 ;; - 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
113 ;; - 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
114 ;; - 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
115 ;; - 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
116 ;; - 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
117 ;; - 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
118 ;; - 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
119 ;; - 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
120 ;; - 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
121 ;; - 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
122 ;; - 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
123 ;; - 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
124 ;; - 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
125 ;; - 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
126 ;; - 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
127 ;; - 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
128 ;; - 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
129 ;; - 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
130 ;; - 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
131 ;; - 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
132 ;; - 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
133 ;; - 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
134 ;; - 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
135 ;; - 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
136 ;; - 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
137 ;; - 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
138 ;; - 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
139 ;; - 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
140 ;; - 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
141 ;; 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
142 ;; - 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
143 ;; - 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
144 ;; - 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
145 ;; 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
146 ;; - 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
147 ;; 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
148 ;; - 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
149 ;; - 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
150 ;; - 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
151 ;; 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
152 ;; - 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
153 ;; - 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
154 ;; - 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
155 ;; - 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
156 ;; - 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
157 ;; - 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
158 ;; - 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
159 ;; 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
160 ;; - 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
161 ;; - 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
162 ;; - 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
163 ;; - 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
164 ;; 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
165 ;; - 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
166 ;; - 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
167 ;; - 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
168 ;; 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
169 ;; - 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
170 ;; - 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
171 ;; - 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
172 ;; - 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
173 ;; - Added `fast-lock-get-syntactic-properties'
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
174 ;; - 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
175 ;; - Made `fast-lock-add-properties' add syntactic and face fontification data
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
176 ;; 3.13--3.14:
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
177 ;; - Made `fast-lock-cache-name' cope with `windowsnt' (Geoff Voelker fix)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
178 ;; - Made `fast-lock-verbose' use `other' widget (Andreas Schwab fix)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
179 ;; - Used `with-temp-message' where possible to make messages temporary.
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
180
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
181 ;;; 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
182
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 (require 'font-lock)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
185 ;; 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
186 (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
187 (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
188
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 (eval-when-compile
41608
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
190 ;;
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
191 ;; We don't do this at the top-level as we only use non-autoloaded macros.
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
192 (require 'cl)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
193 ;;
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
194 ;; We use this to preserve or protect things when modifying text properties.
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
195 (defmacro save-buffer-state (varlist &rest body)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
196 "Bind variables according to VARLIST and eval BODY restoring buffer state."
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
197 `(let* (,@(append varlist
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
198 '((modified (buffer-modified-p)) (buffer-undo-list t)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
199 (inhibit-read-only t) (inhibit-point-motion-hooks t)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
200 before-change-functions after-change-functions
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
201 deactivate-mark buffer-file-name buffer-file-truename)))
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
202 ,@body
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
203 (when (and (not modified) (buffer-modified-p))
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
204 (set-buffer-modified-p nil))))
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
205 (put 'save-buffer-state 'lisp-indent-function 1)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
206 ;;
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
207 ;; We use this to verify that a face should be saved.
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
208 (defmacro fast-lock-save-facep (face)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
209 "Return non-nil if FACE is one of `fast-lock-save-faces'."
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
210 `(or (null fast-lock-save-faces)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
211 (if (symbolp ,face)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
212 (memq ,face fast-lock-save-faces)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
213 (let ((faces ,face))
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
214 (while (unless (memq (car faces) fast-lock-save-faces)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
215 (setq faces (cdr faces))))
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
216 faces))))
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
217 ;;
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
218 ;; We use this for compatibility with a future Emacs.
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
219 (or (fboundp 'with-temp-message)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
220 (defmacro with-temp-message (message &rest body)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
221 `(let ((temp-message ,message) current-message)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
222 (unwind-protect
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
223 (progn
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
224 (when temp-message
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
225 (setq current-message (current-message))
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
226 (message temp-message))
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
227 ,@body)
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
228 (when temp-message
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
229 (message current-message))))))
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
230 ;;
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
231 ;; We use this for compatibility with a future Emacs.
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
232 (or (fboundp 'defcustom)
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 49241
diff changeset
233 (defmacro defcustom (symbol value doc &rest args)
41608
45db352a0971 Converted backquote to the new style.
Sam Steingold <sds@gnu.org>
parents: 38412
diff changeset
234 `(defvar ,symbol ,value ,doc))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235
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
236 ;(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
237 ; "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
238 ; (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
239 ; (let ((reporter-prompt-for-summary-p t))
25278
cbe304a26771 Fix maintainer address.
Karl Heuer <kwzh@gnu.org>
parents: 24726
diff changeset
240 ; (reporter-submit-bug-report "simon@gnu.org" "fast-lock 3.14"
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
241 ; '(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
242 ; 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
243 ; 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
244 ; 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
245 ; (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
246 ;
aadb4abdeaaa (a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents: 15498
diff changeset
247 ;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
248 ;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
249 ;
aadb4abdeaaa (a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents: 15498
diff changeset
250 ;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
251 ;In the `*scratch*' buffer, evaluate:"))))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
252
17498
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
253 (defvar fast-lock-mode nil) ; Whether we are turned on.
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
254 (defvar fast-lock-cache-timestamp nil) ; For saving/reading.
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
255 (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
256
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
257 ;; User Variables:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
259 (defcustom fast-lock-minimum-size 25600
18331
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
260 "*Minimum size of a buffer for cached fontification.
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
261 Only buffers more than this can have associated Font Lock cache files saved.
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
262 If nil, means cache files are never created.
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
263 If a list, each element should be a cons pair of the form (MAJOR-MODE . SIZE),
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
264 where MAJOR-MODE is a symbol or t (meaning the default). For example:
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
265 ((c-mode . 25600) (c++-mode . 25600) (rmail-mode . 1048576))
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
266 means that the minimum size is 25K for buffers in C or C++ modes, one megabyte
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
267 for buffers in Rmail mode, and size is irrelevant otherwise."
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
268 :type '(choice (const :tag "none" nil)
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
269 (integer :tag "size")
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
270 (repeat :menu-tag "mode specific" :tag "mode specific"
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
271 :value ((t . nil))
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
272 (cons :tag "Instance"
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
273 (radio :tag "Mode"
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
274 (const :tag "all" t)
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
275 (symbol :tag "name"))
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
276 (radio :tag "Size"
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
277 (const :tag "none" nil)
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
278 (integer :tag "size")))))
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
279 :group 'fast-lock)
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
280
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16579
diff changeset
281 (defcustom fast-lock-cache-directories '("." "~/.emacs-flc")
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
282 ; - `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
283 ; - `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
284 "*Directories in which Font Lock cache files are saved and read.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 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
286 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
287
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
288 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
289 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
290 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
291 For example:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292
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
293 (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
294 (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
295 =>
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
296 ((\"^/your/true/home/directory/\" . \".\") \"~/.emacs-flc\")
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 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
299 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
300 :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
301 (cons :tag "Matching"
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17498
diff changeset
302 (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
303 (directory :tag "directory"))))
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16579
diff changeset
304 :group 'fast-lock)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16579
diff changeset
306 (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
307 "*Events under which caches will be saved.
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
308 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
309 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
310 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
311 :type '(set (const :tag "buffer saving" save-buffer)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17498
diff changeset
312 (const :tag "buffer killing" kill-buffer)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17498
diff changeset
313 (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
314 :group 'fast-lock)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16579
diff changeset
316 (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
317 "*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
318 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
319 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
320 :type 'boolean
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16579
diff changeset
321 :group 'fast-lock)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322
17498
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
323 (defcustom fast-lock-verbose font-lock-verbose
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
324 "*If non-nil, means show status messages for cache processing.
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
325 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
326 :type '(choice (const :tag "never" nil)
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
327 (other :tag "always" t)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
328 (integer :tag "size"))
17498
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
329 :group 'fast-lock)
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
330
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
331 (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
332 (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
333 ;; 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
334 font-lock-face-list)
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
335 "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
336 If nil, means information for all faces will be saved.")
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
338 ;; User Functions:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
340 ;;;###autoload
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 (defun fast-lock-mode (&optional arg)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 "Toggle Fast Lock mode.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 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
344 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
345
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
346 (setq font-lock-support-mode 'fast-lock-mode)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 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
349 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
350 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
351
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
352 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
353 - 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
354 - 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
355 - 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
356 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
357 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
358
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
359 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
360
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
361 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
362 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
363 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
364 `fast-lock-save-others' and `fast-lock-save-faces'."
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 (interactive "P")
13301
0cbf58edd87f Updated to 3.08; don't use `let' var from caller.
Simon Marshall <simon@gnu.org>
parents: 12909
diff changeset
366 ;; 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
367 ;; 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
368 (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
369 (and buffer-file-truename
14374
e2423983be05 Support for local fontification.
Simon Marshall <simon@gnu.org>
parents: 14169
diff changeset
370 (not (memq 'fast-lock-mode font-lock-inhibit-thing-lock))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 (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
372 (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
373 ;; 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
374 (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
375 (font-lock-mode t))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
376 ;; Let's get down to business.
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
377 (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
378 (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
379 (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
380 (fast-lock-read-cache))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 (defun fast-lock-read-cache ()
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
383 "Read the Font Lock cache for the current buffer.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
385 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
386 - 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
387 - 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
388 - 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
389 - 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
390 - Criteria imposed by `fast-lock-cache-directories'.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
392 See `fast-lock-mode'."
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 (interactive)
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
394 (let ((directories fast-lock-cache-directories)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
395 (modified (buffer-modified-p)) (inhibit-read-only t)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 (fontified font-lock-fontified))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 (set (make-local-variable 'font-lock-fontified) nil)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 ;; Keep trying directories until fontification is turned off.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 (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
400 (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
401 (condition-case nil
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
402 (when directory
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
403 (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
404 (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
405 (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
406 (error nil) (quit nil))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
407 (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
408 ;; 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
409 ;; 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
410 ;; of `fast-lock-cache-timestamp'.)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 (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
412 (unless font-lock-fontified
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
413 (setq fast-lock-cache-filename nil font-lock-fontified fontified))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 (defun fast-lock-save-cache (&optional buffer)
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
416 "Save the Font Lock cache of BUFFER or the current buffer.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
418 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
419 - 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
420 - 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
421 - 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
422 - 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
423 - 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
424 - 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
425 - 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
426 - 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
427 - Criteria imposed by `fast-lock-cache-directories'.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
429 See `fast-lock-mode'."
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 (interactive)
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
431 (save-excursion
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
432 (when buffer
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
433 (set-buffer buffer))
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
434 (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
435 (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
436 (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
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 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
439 ;; 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
440 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
441 ;; 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
442 ;; (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
443 (not (buffer-modified-p))
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
444 ;; 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
445 ;; (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
446 (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
447 ;; 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
448 ;; (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
449 (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
450 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
451 ;; 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
452 (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
453 (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
454 (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
455 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
456 ;; 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
457 (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
458 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
459 ;; 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
460 (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
461 (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
462 (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
463 (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
464 (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
465 (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
466 (setq directories (cdr directories)))))))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
468 ;;;###autoload
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 (defun turn-on-fast-lock ()
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 "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
471 (fast-lock-mode t))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
472
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
473 ;;; API Functions:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
475 (defun fast-lock-after-fontify-buffer ()
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
476 ;; 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
477 (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
478 (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
479 (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
480 (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
481 ;; 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
482 (setq fast-lock-cache-timestamp nil))
14374
e2423983be05 Support for local fontification.
Simon Marshall <simon@gnu.org>
parents: 14169
diff changeset
483
e2423983be05 Support for local fontification.
Simon Marshall <simon@gnu.org>
parents: 14169
diff changeset
484 (defalias 'fast-lock-after-unfontify-buffer
e2423983be05 Support for local fontification.
Simon Marshall <simon@gnu.org>
parents: 14169
diff changeset
485 'ignore)
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
486
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
487 ;; Miscellaneous Functions:
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
488
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
489 (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
490 ;; 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
491 (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
492 (fast-lock-save-cache)))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
493
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
494 (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
495 ;; 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
496 (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
497 (fast-lock-save-cache)))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
498
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
499 (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
500 ;; 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
501 (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
502 (mapcar 'fast-lock-save-cache (buffer-list))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 (defun fast-lock-cache-directory (directory create)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 "Return usable directory based on DIRECTORY.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 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
507 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
508 See `fast-lock-cache-directories'."
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
509 (let ((dir
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
510 (cond ((not buffer-file-name)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
511 ;; 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
512 nil)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
513 ((stringp directory)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
514 ;; Just a directory.
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
515 directory)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
516 (t
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
517 ;; 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
518 (let ((bufile (expand-file-name buffer-file-truename))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
519 (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
520 (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
521 (cdr directory)))))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 (cond ((not dir)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 nil)
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
524 ((file-accessible-directory-p dir)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
525 dir)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
526 (create
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
527 (condition-case nil
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
528 (progn (make-directory dir t) dir)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
529 (error nil))))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530
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
531 ;; 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
532 ;; 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
533 ;; 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
534 ;; 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
535 ;; made a link from one relative cache directory to another. (Phew!)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 (defun fast-lock-cache-name (directory)
49241
05e79d32e0c7 (fast-lock-cache-name): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 41608
diff changeset
537 "Return full cache file name using caching DIRECTORY.
05e79d32e0c7 (fast-lock-cache-name): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 41608
diff changeset
538 If DIRECTORY is `.', the file name is the buffer file name appended with `.flc'.
05e79d32e0c7 (fast-lock-cache-name): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 41608
diff changeset
539 Otherwise, the file name is constructed from DIRECTORY and the buffer's true
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 abbreviated file name, with all `/' characters in the name replaced with `#'
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 characters, and appended with `.flc'.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542
49241
05e79d32e0c7 (fast-lock-cache-name): Doc fix.
Kim F. Storm <storm@cua.dk>
parents: 41608
diff changeset
543 If the same file has different cache file names when edited on different
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
544 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
545 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
546
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
547 (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
548
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
549 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
550
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
551 See `fast-lock-cache-directory'."
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 (if (string-equal directory ".")
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 (concat buffer-file-name ".flc")
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
554 (let* ((bufile (expand-file-name buffer-file-truename))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 (chars-alist
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 49241
diff changeset
556 (if (memq system-type '(emx windows-nt cygwin))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 '((?/ . (?#)) (?# . (?# ?#)) (?: . (?\;)) (?\; . (?\; ?\;)))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 '((?/ . (?#)) (?# . (?# ?#)))))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 (mapchars
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 (function (lambda (c) (or (cdr (assq c chars-alist)) (list c))))))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 (concat
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 (file-name-as-directory (expand-file-name directory))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 (mapconcat 'char-to-string (apply 'append (mapcar mapchars bufile)) "")
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 ".flc"))))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
566 ;; Font Lock Cache Processing Functions:
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
567
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
568 ;; The version 3 format of the cache is:
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
569 ;;
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
570 ;; (fast-lock-cache-data VERSION TIMESTAMP
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
571 ;; font-lock-syntactic-keywords SYNTACTIC-PROPERTIES
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
572 ;; font-lock-keywords FACE-PROPERTIES)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
573
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
574 (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
575 ;; 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
576 ;; 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
577 (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
578 (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
579 (> (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
580 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
581 (saved t))
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
582 (with-temp-message
24005
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
583 (when verbose
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
584 (format "Saving %s font lock cache..." (buffer-name)))
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
585 (condition-case nil
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
586 (save-excursion
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
587 (print (list 'fast-lock-cache-data 3
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
588 (list 'quote timestamp)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
589 (list 'quote font-lock-syntactic-keywords)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
590 (list 'quote (fast-lock-get-syntactic-properties))
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
591 (list 'quote font-lock-keywords)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
592 (list 'quote (fast-lock-get-face-properties)))
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
593 tpbuf)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
594 (set-buffer tpbuf)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
595 (write-region (point-min) (point-max) file nil 'quietly)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
596 (setq fast-lock-cache-timestamp timestamp
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
597 fast-lock-cache-filename file))
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
598 (error (setq saved 'error)) (quit (setq saved 'quit)))
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
599 (kill-buffer tpbuf))
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
600 (cond ((eq saved 'quit)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
601 (message "Saving %s font lock cache...quit" (buffer-name)))
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
602 ((eq saved 'error)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
603 (message "Saving %s font lock cache...failed" (buffer-name))))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
604 ;; 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
605 saved))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
607 (defun fast-lock-cache-data (version timestamp
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
608 syntactic-keywords syntactic-properties
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
609 keywords face-properties
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 &rest ignored)
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
611 ;; 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
612 (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
613 font-lock-syntactic-keywords))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
614 ;; Compile all keywords in case some are and some aren't.
20358
12d74c41157a Only use syntactic keywords if non-nil.
Simon Marshall <simon@gnu.org>
parents: 18331
diff changeset
615 (when font-lock-syntactic-keywords
12d74c41157a Only use syntactic keywords if non-nil.
Simon Marshall <simon@gnu.org>
parents: 18331
diff changeset
616 (setq font-lock-syntactic-keywords (font-lock-compile-keywords
12d74c41157a Only use syntactic keywords if non-nil.
Simon Marshall <simon@gnu.org>
parents: 18331
diff changeset
617 font-lock-syntactic-keywords)))
12d74c41157a Only use syntactic keywords if non-nil.
Simon Marshall <simon@gnu.org>
parents: 18331
diff changeset
618 (when syntactic-keywords
12d74c41157a Only use syntactic keywords if non-nil.
Simon Marshall <simon@gnu.org>
parents: 18331
diff changeset
619 (setq syntactic-keywords (font-lock-compile-keywords syntactic-keywords)))
12d74c41157a Only use syntactic keywords if non-nil.
Simon Marshall <simon@gnu.org>
parents: 18331
diff changeset
620 (setq font-lock-keywords (font-lock-compile-keywords font-lock-keywords)
17498
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
621 keywords (font-lock-compile-keywords keywords))
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
622 ;; 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
623 ;; 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
624 ;; 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
625 ;; 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
626 ;; are the same as KEYWORDS.
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
627 (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
628 (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
629 (> (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
630 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
631 (loaded t))
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
632 (if (or (/= version 3)
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
633 (buffer-modified-p)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634 (not (equal timestamp buf-timestamp))
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
635 (not (equal syntactic-keywords font-lock-syntactic-keywords))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 (not (equal keywords font-lock-keywords)))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 (setq loaded nil)
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
638 (with-temp-message
24005
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
639 (when verbose
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
640 (format "Loading %s font lock cache..." (buffer-name)))
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
641 (condition-case nil
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
642 (fast-lock-add-properties syntactic-properties face-properties)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
643 (error (setq loaded 'error)) (quit (setq loaded 'quit))))
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
644 (cond ((eq loaded 'quit)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
645 (message "Loading %s font lock cache...quit" (buffer-name)))
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
646 ((eq loaded 'error)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
647 (message "Loading %s font lock cache...failed" (buffer-name)))))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
648 (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
649 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
650
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
651 ;; Text Properties Processing Functions:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652
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
653 ;; 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
654 ;; 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
655 ;(defun fast-lock-get-face-properties ()
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
656 ; "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
657 ;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
658 ;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
659 ; (save-restriction
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
660 ; (widen)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
661 ; (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
662 ; (limit (point-max)) end properties value cell)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
663 ; (while start
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
664 ; (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
665 ; value (get-text-property start 'face))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
666 ; ;; 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
667 ; (if (setq cell (assq value properties))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
668 ; (setcdr cell (cons start (cons end (cdr cell))))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
669 ; (setq properties (cons (list value start end) properties)))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
670 ; (setq start (next-single-property-change end 'face)))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
671 ; properties)))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
672
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
673 ;; 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
674 ;; 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
675 ;(defun fast-lock-get-face-properties ()
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
676 ; "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
677 ;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
678 ;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
679 ;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
680 ; (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
681 ; (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
682 ; (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
683 ; 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
684 ; (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
685 ; (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
686 ; ;; 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
687 ; (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
688 ; (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
689 ; 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
690 ; ;; 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
691 ; (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
692 ; (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
693 ; 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
694
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
695 (defun fast-lock-get-face-properties ()
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
696 "Return a list of `face' text properties in the current buffer.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 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
698 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
699 (save-restriction
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
700 (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
701 (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
702 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
703 (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
704 (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
705 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
706 ;; 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
707 (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
708 (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
709 ((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
710 (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
711 (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
712 properties)))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
714 (defun fast-lock-get-syntactic-properties ()
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
715 "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
716 See `fast-lock-get-face-properties'."
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
717 (save-restriction
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
718 (widen)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
719 (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
720 nil))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
721 end properties value cell)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
722 (while start
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
723 (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
724 (point-max))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
725 value (get-text-property start 'syntax-table))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
726 ;; 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
727 (if (setq cell (assoc value properties))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
728 (setcdr cell (cons start (cons end (cdr cell))))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
729 (push (list value start end) properties))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
730 (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
731 properties)))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
732
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
733 (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
734 "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
735 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
736 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
737 (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
738 (save-restriction
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
739 (widen)
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
740 (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
741 ;;
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
742 ;; 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
743 (while syntactic-properties
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
744 (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
745 regions (cdr (car syntactic-properties))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
746 syntactic-properties (cdr syntactic-properties))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
747 (while regions
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
748 (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
749 (setq regions (nthcdr 2 regions))))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
750 ;;
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
751 ;; 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
752 (while face-properties
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
753 (setq plist (list 'face (car (car face-properties)))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
754 regions (cdr (car face-properties))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
755 face-properties (cdr face-properties))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
756 (while regions
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
757 (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
758 (setq regions (nthcdr 2 regions)))))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
760 ;; Functions for XEmacs:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
762 (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
763 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
764 ;; 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
765 ;; `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
766 (defun fast-lock-get-face-properties ()
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
767 "Return a list of `face' text properties in the current buffer.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768 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
769 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
770 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
771 (save-restriction
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
772 (widen)
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
773 (let ((properties ()) cell)
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
774 (map-extents
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
775 (function (lambda (extent ignore)
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
776 (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
777 ;; 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
778 (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
779 (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
780 (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
781 ;; 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
782 ;; `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
783 (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
784 (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
785 (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
786 ;; 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
787 nil))))
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
788 properties)))
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
789 ;;
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
790 ;; 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
791 (defalias 'fast-lock-get-syntactic-properties
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
792 'ignore)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
793 ;;
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
794 ;; 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
795 (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
796 "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
797 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
798 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
799 (save-restriction
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
800 (widen)
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
801 (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
802 ;; 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
803 (while face-properties
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
804 (let ((face (car (car face-properties)))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
805 (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
806 (while regions
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
807 (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
808 (setq regions (nthcdr 2 regions)))
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
809 (setq face-properties (cdr face-properties))))
49549
99be3a1e2589 Cygwin support patch.
Juanma Barranquero <lekktu@gmail.com>
parents: 49241
diff changeset
810 ;; XEmacs does not support the `syntax-table' text property.
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
811 ))
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
812 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
813 ;; 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
814 (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
815 'fast-lock-after-fontify-buffer))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
817 (unless (boundp 'font-lock-syntactic-keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
818 (defvar font-lock-syntactic-keywords nil))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
819
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
820 (unless (boundp 'font-lock-inhibit-thing-lock)
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
821 (defvar font-lock-inhibit-thing-lock nil))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
822
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
823 (unless (fboundp 'font-lock-compile-keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
824 (defalias 'font-lock-compile-keywords 'identity))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
825
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
826 (unless (fboundp 'font-lock-eval-keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
827 (defun font-lock-eval-keywords (keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
828 (if (symbolp keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
829 (font-lock-eval-keywords (if (fboundp keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
830 (funcall keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
831 (eval keywords)))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
832 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
833
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
834 (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
835 (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
836 (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
837 (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
838 alist)))
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
839
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
840 (unless (fboundp 'current-message)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
841 (defun current-message ()
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
842 ""))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 ;; Install ourselves:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
846 (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
847 (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
848 (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
849
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
850 ;;;###autoload
17498
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
851 (when (fboundp 'add-minor-mode)
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
852 (defvar fast-lock-mode nil)
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
853 (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
854 ;;;###dont-autoload
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
855 (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
856 (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
857
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 ;; Provide ourselves:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 (provide 'fast-lock)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 ;;; fast-lock.el ends here