annotate lisp/fast-lock.el @ 24102:1086aa5db591

Major rewrite to support cleaner method of dumping; a static "bss" section is used for heap space during preload, and bss data is now written to the proper section area when dumping. (need_to_recreate_heap): Renamed to using_dynamic_heap. (heap_index_in_executable): Obsolete variable removed. (data_section): New variable. (data_start_va): Renamed to data_start. (data_start_file): Obsolete variable removed. (bss_section): (extra_bss_size): (bss_section_static): (bss_start_static): (bss_size_static): (extra_bss_size_static): (heap_section): New variables. (_start): Remove code based on old unexec method. Call init_heap to initialize sbrk heap. (close_file_data): Update size of file when closing, so that unexec doesn't have to work out exact size in advance. (get_bss_info_from_map_file): (get_section_size): Obsolete functions removed. (rva_to_section): Fix minor bug, and add a work-around for a bug in very old linkers. (offset_to_section): (relocate_offset): New functions. (OFFSET_TO_RVA): (RVA_TO_OFFSET): (RVA_TO_SECTION_OFFSET): (PTR_TO_RVA): (PTR_TO_OFFSET): (OFFSET_TO_PTR): New macros. (get_section_info): Modify to support new unexec method; determines address ranges in process that need dumping, and COFF sections where data will be dumped. Allows for static and global bss data to be in separate ranges. No longer relies on knowledge of section names. (copy_executable_and_dump_data_section): Renamed copy_executable_and_dump_data. Completely rewritten to copy executable section by section, so that raw data areas can be expanded to hold dumped data as necessary. Allows for bss data to be in same section as initialized data. Reduces size of static heap section to that used during preload. (dump_bss_and_heap): (w32_fatal_reload_error): (read_in_bss): (map_in_heap): Obsolete functions removed. (unexec): Rounds off preload heap to nearest page rather than virtual allocation unit. Modified to match other changes.
author Andrew Innes <andrewi@gnu.org>
date Sun, 17 Jan 1999 19:21:24 +0000
parents c78112715e6c
children e097c31382f8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
1 ;;; fast-lock.el --- Automagic text properties caching for fast Font Lock mode.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
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
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
5 ;; Author: Simon Marshall <simon@gnu.ai.mit.edu>
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Keywords: faces files
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
7 ;; Version: 3.14
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
14374
e2423983be05 Support for local fontification.
Simon Marshall <simon@gnu.org>
parents: 14169
diff changeset
9 ;;; This file is part of GNU Emacs.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; any later version.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13301
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13301
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13301
diff changeset
24 ;; Boston, MA 02111-1307, USA.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
16579
aadb4abdeaaa (a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents: 15498
diff changeset
28 ;; Lazy Lock mode is a Font Lock support mode.
aadb4abdeaaa (a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents: 15498
diff changeset
29 ;; It makes visiting a file in Font Lock mode faster by restoring its face text
aadb4abdeaaa (a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents: 15498
diff changeset
30 ;; properties from automatically saved associated Font Lock cache files.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;;
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
32 ;; See caveats and feedback below.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; See also the lazy-lock package. (But don't use the two at the same time!)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 ;; Installation:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36 ;;
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
37 ;; Put in your ~/.emacs:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 ;;
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
39 ;; (setq font-lock-support-mode 'fast-lock-mode)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;;
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;; Start up a new Emacs and use font-lock as usual (except that you can use the
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; so-called "gaudier" fontification regexps on big files without frustration).
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;;
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 ;; When you visit a file (which has `font-lock-mode' enabled) that has a
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
45 ;; corresponding Font Lock cache file associated with it, the Font Lock cache
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
46 ;; will be loaded from that file instead of being generated by Font Lock code.
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
47
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
48 ;; Caveats:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 ;;
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
50 ;; A cache will be saved when visiting a compressed file using crypt++, but not
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
51 ;; be read. This is a "feature"/"consequence"/"bug" of crypt++.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 ;;
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
53 ;; Version control packages are likely to stamp all over file modification
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
54 ;; times. Therefore the act of checking out may invalidate a cache.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55
17586
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
56 ;; History:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
57 ;;
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
58 ;; 0.02--1.00:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
59 ;; - Changed name from turbo-prop to fast-lock. Automagic for font-lock only
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
60 ;; - Made `fast-lock-mode' a minor mode, like G. Dinesh Dutt's fss-mode
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
61 ;; 1.00--1.01:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
62 ;; - Turn on `fast-lock-mode' only if `buffer-file-name' or `interactive-p'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
63 ;; - Made `fast-lock-file-name' use `buffer-name' if `buffer-file-name' is nil
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
64 ;; - Moved save-all conditions to `fast-lock-save-cache'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
65 ;; - Added `fast-lock-save-text-properties' to `kill-buffer-hook'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
66 ;; 1.01--2.00: complete rewrite---not worth the space to document
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
67 ;; - Changed structure of text properties cache and threw out file mod checks
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
68 ;; 2.00--2.01:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
69 ;; - Made `condition-case' forms understand `quit'.
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
70 ;; - Made `fast-lock' require `font-lock'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
71 ;; - Made `fast-lock-cache-name' chase links (from Ben Liblit)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
72 ;; 2.01--3.00:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
73 ;; - Changed structure of cache to include `font-lock-keywords' (from rms)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
74 ;; - Changed `fast-lock-cache-mechanisms' to `fast-lock-cache-directories'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
75 ;; - Removed `fast-lock-read-others'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
76 ;; - Made `fast-lock-read-cache' ignore cache owner
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
77 ;; - Made `fast-lock-save-cache-external' create cache directory
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
78 ;; - Made `fast-lock-save-cache-external' save `font-lock-keywords'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
79 ;; - Made `fast-lock-cache-data' check `font-lock-keywords'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
80 ;; 3.00--3.01: incorporated port of 2.00 to Lucid, made by Barry Warsaw
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
81 ;; - Package now provides itself
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
82 ;; - Lucid: Use `font-lock-any-extents-p' for `font-lock-any-properties-p'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
83 ;; - Lucid: Use `list-faces' for `face-list'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
84 ;; - Lucid: Added `set-text-properties'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
85 ;; - Lucid: Made `turn-on-fast-lock' pass 1 not t to `fast-lock-mode'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
86 ;; - Removed test for `fast-lock-mode' from `fast-lock-read-cache'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
87 ;; - Lucid: Added Lucid-specific `fast-lock-get-face-properties'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
88 ;; 3.01--3.02: now works with Lucid Emacs, thanks to Barry Warsaw
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
89 ;; - Made `fast-lock-cache-name' map ":" to ";" for OS/2 (from Serganova Vera)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
90 ;; - Made `fast-lock-cache-name' use abbreviated file name (from Barry Warsaw)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
91 ;; - Lucid: Separated handlers for `error' and `quit' for `condition-case'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
92 ;; 3.02--3.03:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
93 ;; - Changed `fast-lock-save-cache-external' to `fast-lock-save-cache-data'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
94 ;; - Lucid: Added Lucid-specific `fast-lock-set-face-properties'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
95 ;; 3.03--3.04:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
96 ;; - Corrected `subrp' test of Lucid code
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
97 ;; - Replaced `font-lock-any-properties-p' with `text-property-not-all'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
98 ;; - Lucid: Made `fast-lock-set-face-properties' put `text-prop' on extents
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
99 ;; - Made `fast-lock-cache-directories' a regexp alist (from Colin Rafferty)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
100 ;; - Made `fast-lock-cache-directory' to return a usable cache file directory
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
101 ;; 3.04--3.05:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
102 ;; - Lucid: Fix for XEmacs 19.11 `text-property-not-all'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
103 ;; - Replaced `subrp' test of Lucid code with `emacs-version' `string-match'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
104 ;; - Made `byte-compile-warnings' omit `unresolved' on compilation
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
105 ;; - Made `fast-lock-save-cache-data' use a buffer (from Rick Sladkey)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
106 ;; - Reverted to old `fast-lock-get-face-properties' (from Rick Sladkey)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
107 ;; 3.05--3.06: incorporated hack of 3.03, made by Jonathan Stigelman (Stig)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
108 ;; - Reverted to 3.04 version of `fast-lock-get-face-properties'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
109 ;; - XEmacs: Removed `list-faces' `defalias'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
110 ;; - Made `fast-lock-mode' and `turn-on-fast-lock' succeed `autoload' cookies
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
111 ;; - Added `fast-lock-submit-bug-report'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
112 ;; - Renamed `fast-lock-save-size' to `fast-lock-minimum-size'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
113 ;; - Made `fast-lock-save-cache' output a message if no save ever attempted
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
114 ;; - Made `fast-lock-save-cache-data' output a message if save attempted
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
115 ;; - Made `fast-lock-cache-data' output a message if load attempted
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
116 ;; - Made `fast-lock-save-cache-data' do `condition-case' not `unwind-protect'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
117 ;; - Made `fast-lock-save-cache' and `fast-lock-read-cache' return nothing
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
118 ;; - Made `fast-lock-save-cache' check `buffer-modified-p' (Stig)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
119 ;; - Added `fast-lock-save-events'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
120 ;; - Added `fast-lock-after-save-hook' to `after-save-hook' (Stig)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
121 ;; - Added `fast-lock-kill-buffer-hook' to `kill-buffer-hook'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
122 ;; - Changed `fast-lock-save-caches' to `fast-lock-kill-emacs-hook'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
123 ;; - Added `fast-lock-kill-emacs-hook' to `kill-emacs-hook'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
124 ;; - Made `fast-lock-save-cache' check `verify-visited-file-modtime' (Stig)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
125 ;; - Made `visited-file-modtime' be the basis of the timestamp (Stig)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
126 ;; - Made `fast-lock-save-cache-1' and `fast-lock-cache-data' use/reformat it
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
127 ;; - Added `fast-lock-cache-filename' to keep track of the cache file name
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
128 ;; - Added `fast-lock-after-fontify-buffer'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
129 ;; - Added `fast-lock-save-faces' list of faces to save (idea from Stig/Tibor)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
130 ;; - Made `fast-lock-get-face-properties' functions use it
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
131 ;; - XEmacs: Made `fast-lock-set-face-properties' do extents the Font Lock way
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
132 ;; - XEmacs: Removed fix for `text-property-not-all' (19.11 support dropped)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
133 ;; - Made `fast-lock-mode' ensure `font-lock-mode' is on
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
134 ;; - Made `fast-lock-save-cache' do `cdr-safe' not `cdr' (from Dave Foster)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
135 ;; - Made `fast-lock-save-cache' do `set-buffer' first (from Dave Foster)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
136 ;; - Made `fast-lock-save-cache' loop until saved or quit (from Georg Nikodym)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
137 ;; - Made `fast-lock-cache-data' check `buffer-modified-p'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
138 ;; - Made `fast-lock-cache-data' do `font-lock-compile-keywords' if necessary
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
139 ;; - XEmacs: Made `font-lock-compile-keywords' `defalias'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
140 ;; 3.06--3.07:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
141 ;; - XEmacs: Add `fast-lock-after-fontify-buffer' to the Font Lock hook
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
142 ;; - Made `fast-lock-cache-name' explain the use of `directory-abbrev-alist'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
143 ;; - Made `fast-lock-mode' use `buffer-file-truename' not `buffer-file-name'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
144 ;; 3.07--3.08:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
145 ;; - Made `fast-lock-read-cache' set `fast-lock-cache-filename'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
146 ;; 3.08--3.09:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
147 ;; - Made `fast-lock-save-cache' cope if `fast-lock-minimum-size' is an a list
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
148 ;; - Made `fast-lock-mode' respect the value of `font-lock-inhibit-thing-lock'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
149 ;; - Added `fast-lock-after-unfontify-buffer'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
150 ;; 3.09--3.10:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
151 ;; - Rewrite for Common Lisp macros
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
152 ;; - Made fast-lock.el barf on a crap 8+3 pseudo-OS (Eli Zaretskii help)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
153 ;; - XEmacs: Made `add-minor-mode' succeed `autoload' cookie
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
154 ;; - XEmacs: Made `fast-lock-save-faces' default to `font-lock-face-list'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
155 ;; - Made `fast-lock-save-cache' use `font-lock-value-in-major-mode'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
156 ;; - Wrap with `save-buffer-state' (Ray Van Tassle report)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
157 ;; - Made `fast-lock-mode' wrap `font-lock-support-mode'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
158 ;; 3.10--3.11:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
159 ;; - Made `fast-lock-get-face-properties' cope with face lists
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
160 ;; - Added `fast-lock-verbose'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
161 ;; - XEmacs: Add `font-lock-value-in-major-mode' if necessary
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
162 ;; - Removed `fast-lock-submit-bug-report' and bade farewell
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
163 ;; 3.11--3.12:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
164 ;; - Added Custom support (Hrvoje Niksic help)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
165 ;; - Made `save-buffer-state' wrap `inhibit-point-motion-hooks'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
166 ;; - Made `fast-lock-cache-data' simplify calls of `font-lock-compile-keywords'
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
167 ;; 3.12--3.13:
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
168 ;; - Removed `byte-*' variables from `eval-when-compile' (Erik Naggum hint)
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
169 ;; - Changed structure of cache to include `font-lock-syntactic-keywords'
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
170 ;; - Made `fast-lock-save-cache-1' save syntactic fontification data
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
171 ;; - Made `fast-lock-cache-data' take syntactic fontification data
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
172 ;; - Added `fast-lock-get-syntactic-properties'
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
173 ;; - Renamed `fast-lock-set-face-properties' to `fast-lock-add-properties'
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
174 ;; - Made `fast-lock-add-properties' add syntactic and face fontification data
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
175 ;; 3.13--3.14:
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
176 ;; - 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
177 ;; - 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
178 ;; - 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
179
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
180 ;;; 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
181
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 (require 'font-lock)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
184 ;; 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
185 (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
186 (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
187
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 (eval-when-compile
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
189 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
190 ;; We don't do this at the top-level as we only use non-autoloaded macros.
17586
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
191 (require 'cl)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
192 ;;
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
193 ;; We use this to preserve or protect things when modifying text properties.
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
194 (defmacro save-buffer-state (varlist &rest body)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
195 "Bind variables according to VARLIST and eval BODY restoring buffer state."
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
196 (` (let* ((,@ (append varlist
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
197 '((modified (buffer-modified-p)) (buffer-undo-list t)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
198 (inhibit-read-only t) (inhibit-point-motion-hooks t)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
199 before-change-functions after-change-functions
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
200 deactivate-mark buffer-file-name buffer-file-truename))))
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
201 (,@ body)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
202 (when (and (not modified) (buffer-modified-p))
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
203 (set-buffer-modified-p nil)))))
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
204 (put 'save-buffer-state 'lisp-indent-function 1)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
205 ;;
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
206 ;; We use this to verify that a face should be saved.
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
207 (defmacro fast-lock-save-facep (face)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
208 "Return non-nil if FACE is one of `fast-lock-save-faces'."
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
209 (` (or (null fast-lock-save-faces)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
210 (if (symbolp (, face))
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
211 (memq (, face) fast-lock-save-faces)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
212 (let ((faces (, face)))
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
213 (while (unless (memq (car faces) fast-lock-save-faces)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
214 (setq faces (cdr faces))))
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
215 faces)))))
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
216 ;;
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
217 ;; We use this for compatibility with a future Emacs.
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
218 (or (fboundp 'with-temp-message)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
219 (defmacro with-temp-message (message &rest body)
24005
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
220 (` (let ((temp-message (, message)) current-message)
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
221 (unwind-protect
24005
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
222 (progn
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
223 (when temp-message
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
224 (setq current-message (current-message))
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
225 (message temp-message))
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
226 (,@ body))
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
227 (when temp-message
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
228 (message current-message)))))))
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
229 ;;
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
230 ;; We use this for compatibility with a future Emacs.
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
231 (or (fboundp 'defcustom)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
232 (defmacro defcustom (symbol value doc &rest args)
b9ca2d28765c Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents: 17561
diff changeset
233 (` (defvar (, symbol) (, value) (, doc))))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234
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
235 ;(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
236 ; "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
237 ; (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
238 ; (let ((reporter-prompt-for-summary-p t))
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
239 ; (reporter-submit-bug-report "simon@gnu.ai.mit.edu" "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
240 ; '(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
241 ; 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
242 ; 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
243 ; 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
244 ; (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
245 ;
aadb4abdeaaa (a) make fast-lock-get-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 ;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
247 ;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
248 ;
aadb4abdeaaa (a) make fast-lock-get-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 ;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
250 ;In the `*scratch*' buffer, evaluate:"))))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
251
17498
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
252 (defvar fast-lock-mode nil) ; Whether we are turned on.
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
253 (defvar fast-lock-cache-timestamp nil) ; For saving/reading.
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
254 (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
255
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
256 ;; User Variables:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
258 (defcustom fast-lock-minimum-size 25600
18331
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
259 "*Minimum size of a buffer for cached fontification.
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
260 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
261 If nil, means cache files are never created.
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
262 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
263 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
264 ((c-mode . 25600) (c++-mode . 25600) (rmail-mode . 1048576))
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
265 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
266 for buffers in Rmail mode, and size is irrelevant otherwise."
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
267 :type '(choice (const :tag "none" nil)
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
268 (integer :tag "size")
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
269 (repeat :menu-tag "mode specific" :tag "mode specific"
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
270 :value ((t . nil))
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
271 (cons :tag "Instance"
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
272 (radio :tag "Mode"
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
273 (const :tag "all" t)
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
274 (symbol :tag "name"))
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
275 (radio :tag "Size"
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
276 (const :tag "none" nil)
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
277 (integer :tag "size")))))
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
278 :group 'fast-lock)
6156115816da Rearrange custom options.
Simon Marshall <simon@gnu.org>
parents: 18023
diff changeset
279
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16579
diff changeset
280 (defcustom fast-lock-cache-directories '("." "~/.emacs-flc")
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
281 ; - `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
282 ; - `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
283 "*Directories in which Font Lock cache files are saved and read.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 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
285 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
286
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
287 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
288 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
289 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
290 For example:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291
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
292 (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
293 (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
294 =>
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 ((\"^/your/true/home/directory/\" . \".\") \"~/.emacs-flc\")
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 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
298 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
299 :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
300 (cons :tag "Matching"
17507
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17498
diff changeset
301 (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
302 (directory :tag "directory"))))
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16579
diff changeset
303 :group 'fast-lock)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16579
diff changeset
305 (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
306 "*Events under which caches will be saved.
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
307 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
308 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
309 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
310 :type '(set (const :tag "buffer saving" save-buffer)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17498
diff changeset
311 (const :tag "buffer killing" kill-buffer)
fd87760f20cd Cleaned up custom support.
Simon Marshall <simon@gnu.org>
parents: 17498
diff changeset
312 (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
313 :group 'fast-lock)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16579
diff changeset
315 (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
316 "*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
317 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
318 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
319 :type 'boolean
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 16579
diff changeset
320 :group 'fast-lock)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321
17498
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
322 (defcustom fast-lock-verbose font-lock-verbose
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
323 "*If non-nil, means show status messages for cache processing.
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
324 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
325 :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
326 (other :tag "always" t)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
327 (integer :tag "size"))
17498
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
328 :group 'fast-lock)
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
329
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
330 (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
331 (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
332 ;; 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
333 font-lock-face-list)
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
334 "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
335 If nil, means information for all faces will be saved.")
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
337 ;; User Functions:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
339 ;;;###autoload
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 (defun fast-lock-mode (&optional arg)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 "Toggle Fast Lock mode.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 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
343 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
344
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
345 (setq font-lock-support-mode 'fast-lock-mode)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 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
348 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
349 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
350
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
351 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
352 - 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
353 - 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
354 - 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
355 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
356 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
357
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
358 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
359
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
360 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
361 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
362 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
363 `fast-lock-save-others' and `fast-lock-save-faces'."
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 (interactive "P")
13301
0cbf58edd87f Updated to 3.08; don't use `let' var from caller.
Simon Marshall <simon@gnu.org>
parents: 12909
diff changeset
365 ;; 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
366 ;; 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
367 (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
368 (and buffer-file-truename
14374
e2423983be05 Support for local fontification.
Simon Marshall <simon@gnu.org>
parents: 14169
diff changeset
369 (not (memq 'fast-lock-mode font-lock-inhibit-thing-lock))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 (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
371 (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
372 ;; 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
373 (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
374 (font-lock-mode t))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
375 ;; Let's get down to business.
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
376 (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
377 (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
378 (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
379 (fast-lock-read-cache))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 (defun fast-lock-read-cache ()
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
382 "Read the Font Lock cache for the current buffer.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
384 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
385 - 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
386 - 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
387 - 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
388 - 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
389 - Criteria imposed by `fast-lock-cache-directories'.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
391 See `fast-lock-mode'."
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 (interactive)
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
393 (let ((directories fast-lock-cache-directories)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
394 (modified (buffer-modified-p)) (inhibit-read-only t)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 (fontified font-lock-fontified))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 (set (make-local-variable 'font-lock-fontified) nil)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 ;; Keep trying directories until fontification is turned off.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 (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
399 (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
400 (condition-case nil
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
401 (when directory
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
402 (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
403 (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
404 (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
405 (error nil) (quit nil))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
406 (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
407 ;; 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
408 ;; 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
409 ;; of `fast-lock-cache-timestamp'.)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 (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
411 (unless font-lock-fontified
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
412 (setq fast-lock-cache-filename nil font-lock-fontified fontified))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 (defun fast-lock-save-cache (&optional buffer)
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
415 "Save the Font Lock cache of BUFFER or the current buffer.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
417 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
418 - 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
419 - 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
420 - 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
421 - 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
422 - 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
423 - 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
424 - 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
425 - 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
426 - Criteria imposed by `fast-lock-cache-directories'.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
428 See `fast-lock-mode'."
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 (interactive)
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
430 (save-excursion
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
431 (when buffer
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
432 (set-buffer buffer))
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
433 (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
434 (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
435 (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
436 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
437 ;; "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
438 ;; 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
439 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
440 ;; 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
441 ;; (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
442 (not (buffer-modified-p))
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
443 ;; 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
444 ;; (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
445 (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
446 ;; 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
447 ;; (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
448 (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
449 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
450 ;; 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
451 (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
452 (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
453 (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
454 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
455 ;; 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
456 (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
457 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
458 ;; 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
459 (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
460 (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
461 (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
462 (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
463 (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
464 (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
465 (setq directories (cdr directories)))))))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
467 ;;;###autoload
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 (defun turn-on-fast-lock ()
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 "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
470 (fast-lock-mode t))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
471
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
472 ;;; API Functions:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
474 (defun fast-lock-after-fontify-buffer ()
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
475 ;; 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
476 (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
477 (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
478 (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
479 (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
480 ;; 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
481 (setq fast-lock-cache-timestamp nil))
14374
e2423983be05 Support for local fontification.
Simon Marshall <simon@gnu.org>
parents: 14169
diff changeset
482
e2423983be05 Support for local fontification.
Simon Marshall <simon@gnu.org>
parents: 14169
diff changeset
483 (defalias 'fast-lock-after-unfontify-buffer
e2423983be05 Support for local fontification.
Simon Marshall <simon@gnu.org>
parents: 14169
diff changeset
484 'ignore)
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
485
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
486 ;; Miscellaneous Functions:
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
487
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
488 (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
489 ;; 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
490 (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
491 (fast-lock-save-cache)))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
492
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
493 (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
494 ;; 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
495 (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
496 (fast-lock-save-cache)))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
497
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
498 (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
499 ;; 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
500 (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
501 (mapcar 'fast-lock-save-cache (buffer-list))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 (defun fast-lock-cache-directory (directory create)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 "Return usable directory based on DIRECTORY.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 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
506 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
507 See `fast-lock-cache-directories'."
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
508 (let ((dir
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
509 (cond ((not buffer-file-name)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
510 ;; 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
511 nil)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
512 ((stringp directory)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
513 ;; Just a directory.
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
514 directory)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
515 (t
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
516 ;; 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
517 (let ((bufile (expand-file-name buffer-file-truename))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
518 (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
519 (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
520 (cdr directory)))))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 (cond ((not dir)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 nil)
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
523 ((file-accessible-directory-p dir)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
524 dir)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
525 (create
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
526 (condition-case nil
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
527 (progn (make-directory dir t) dir)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
528 (error nil))))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529
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
530 ;; 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
531 ;; 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
532 ;; 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
533 ;; 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
534 ;; made a link from one relative cache directory to another. (Phew!)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 (defun fast-lock-cache-name (directory)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 "Return full cache path name using caching DIRECTORY.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 If DIRECTORY is `.', the path is the buffer file name appended with `.flc'.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 Otherwise, the path name is constructed from DIRECTORY and the buffer's true
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 abbreviated file name, with all `/' characters in the name replaced with `#'
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 characters, and appended with `.flc'.
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541
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
542 If the same file has different cache path names when edited on different
0e165bcd43a2 New version 3.07. Made fast-lock-mode use buffer-file-truename, not buffer-file-name.
Simon Marshall <simon@gnu.org>
parents: 12048
diff changeset
543 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
544 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
545
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 (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
547
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 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
549
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 See `fast-lock-cache-directory'."
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 (if (string-equal directory ".")
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 (concat buffer-file-name ".flc")
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
553 (let* ((bufile (expand-file-name buffer-file-truename))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 (chars-alist
21618
65db9a169ab5 (fast-lock-cache-name): Replace '\' with '#'.
Geoff Voelker <voelker@cs.washington.edu>
parents: 20358
diff changeset
555 (if (memq system-type '(emx windowsnt))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 '((?/ . (?#)) (?# . (?# ?#)) (?: . (?\;)) (?\; . (?\; ?\;)))
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 (mapchars
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 (function (lambda (c) (or (cdr (assq c chars-alist)) (list c))))))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 (concat
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 (file-name-as-directory (expand-file-name directory))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 (mapconcat 'char-to-string (apply 'append (mapcar mapchars bufile)) "")
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 ".flc"))))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
565 ;; Font Lock Cache Processing Functions:
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
566
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
567 ;; The version 3 format of the cache is:
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
568 ;;
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
569 ;; (fast-lock-cache-data VERSION TIMESTAMP
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
570 ;; font-lock-syntactic-keywords SYNTACTIC-PROPERTIES
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
571 ;; font-lock-keywords FACE-PROPERTIES)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
572
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
573 (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
574 ;; 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
575 ;; 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
576 (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
577 (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
578 (> (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
579 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 (saved t))
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
581 (with-temp-message
24005
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
582 (when verbose
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
583 (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
584 (condition-case nil
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
585 (save-excursion
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
586 (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
587 (list 'quote timestamp)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
588 (list 'quote font-lock-syntactic-keywords)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
589 (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
590 (list 'quote font-lock-keywords)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
591 (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
592 tpbuf)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
593 (set-buffer tpbuf)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
594 (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
595 (setq fast-lock-cache-timestamp timestamp
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
596 fast-lock-cache-filename file))
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
597 (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
598 (kill-buffer tpbuf))
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
599 (cond ((eq saved 'quit)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
600 (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
601 ((eq saved 'error)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
602 (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
603 ;; 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
604 saved))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
606 (defun fast-lock-cache-data (version timestamp
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
607 syntactic-keywords syntactic-properties
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
608 keywords face-properties
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 &rest ignored)
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
610 ;; 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
611 (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
612 font-lock-syntactic-keywords))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
613 ;; 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
614 (when font-lock-syntactic-keywords
12d74c41157a Only use syntactic keywords if non-nil.
Simon Marshall <simon@gnu.org>
parents: 18331
diff changeset
615 (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
616 font-lock-syntactic-keywords)))
12d74c41157a Only use syntactic keywords if non-nil.
Simon Marshall <simon@gnu.org>
parents: 18331
diff changeset
617 (when syntactic-keywords
12d74c41157a Only use syntactic keywords if non-nil.
Simon Marshall <simon@gnu.org>
parents: 18331
diff changeset
618 (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
619 (setq font-lock-keywords (font-lock-compile-keywords font-lock-keywords)
17498
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
620 keywords (font-lock-compile-keywords keywords))
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
621 ;; 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
622 ;; 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
623 ;; 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
624 ;; 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
625 ;; are the same as KEYWORDS.
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
626 (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
627 (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
628 (> (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
629 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 (loaded t))
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
631 (if (or (/= version 3)
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
632 (buffer-modified-p)
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 (not (equal timestamp buf-timestamp))
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
634 (not (equal syntactic-keywords font-lock-syntactic-keywords))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 (not (equal keywords font-lock-keywords)))
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 (setq loaded nil)
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
637 (with-temp-message
24005
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
638 (when verbose
c78112715e6c * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 23752
diff changeset
639 (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
640 (condition-case nil
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
641 (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
642 (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
643 (cond ((eq loaded 'quit)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
644 (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
645 ((eq loaded 'error)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
646 (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
647 (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
648 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
649
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
650 ;; Text Properties Processing Functions:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651
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
652 ;; 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
653 ;; 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
654 ;(defun fast-lock-get-face-properties ()
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
655 ; "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
656 ;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
657 ;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
658 ; (save-restriction
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
659 ; (widen)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
660 ; (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
661 ; (limit (point-max)) end properties value cell)
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
662 ; (while start
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
663 ; (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
664 ; value (get-text-property start 'face))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
665 ; ;; 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
666 ; (if (setq cell (assq value properties))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
667 ; (setcdr cell (cons start (cons end (cdr cell))))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
668 ; (setq properties (cons (list value start end) properties)))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
669 ; (setq start (next-single-property-change end 'face)))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
670 ; properties)))
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
671
16579
aadb4abdeaaa (a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents: 15498
diff changeset
672 ;; 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
673 ;; 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
674 ;(defun fast-lock-get-face-properties ()
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
675 ; "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
676 ;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
677 ;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
678 ;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
679 ; (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
680 ; (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
681 ; (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
682 ; 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
683 ; (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
684 ; (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
685 ; ;; 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
686 ; (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
687 ; (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
688 ; 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
689 ; ;; 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
690 ; (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
691 ; (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
692 ; 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
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
694 (defun fast-lock-get-face-properties ()
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
695 "Return a list of `face' text properties in the current buffer.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 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
697 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
698 (save-restriction
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
699 (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
700 (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
701 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
702 (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
703 (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
704 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
705 ;; 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
706 (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
707 (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
708 ((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
709 (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
710 (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
711 properties)))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
713 (defun fast-lock-get-syntactic-properties ()
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
714 "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
715 See `fast-lock-get-face-properties'."
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
716 (save-restriction
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
717 (widen)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
718 (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
719 nil))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
720 end properties value cell)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
721 (while start
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
722 (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
723 (point-max))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
724 value (get-text-property start 'syntax-table))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
725 ;; 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
726 (if (setq cell (assoc value properties))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
727 (setcdr cell (cons start (cons end (cdr cell))))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
728 (push (list value start end) properties))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
729 (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
730 properties)))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
731
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
732 (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
733 "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
734 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
735 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
736 (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
737 (save-restriction
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
738 (widen)
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
739 (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
740 ;;
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
741 ;; 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
742 (while syntactic-properties
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
743 (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
744 regions (cdr (car syntactic-properties))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
745 syntactic-properties (cdr syntactic-properties))
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
746 (while regions
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
747 (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
748 (setq regions (nthcdr 2 regions))))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
749 ;;
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
750 ;; 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
751 (while face-properties
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
752 (setq plist (list 'face (car (car face-properties)))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
753 regions (cdr (car face-properties))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
754 face-properties (cdr face-properties))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
755 (while regions
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
756 (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
757 (setq regions (nthcdr 2 regions)))))))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758
12048
8e3d4f515bbb New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents: 10243
diff changeset
759 ;; Functions for XEmacs:
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
761 (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
762 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
763 ;; 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
764 ;; `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
765 (defun fast-lock-get-face-properties ()
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
766 "Return a list of `face' text properties in the current buffer.
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 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
768 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
769 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
770 (save-restriction
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
771 (widen)
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
772 (let ((properties ()) cell)
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
773 (map-extents
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
774 (function (lambda (extent ignore)
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
775 (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
776 ;; 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
777 (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
778 (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
779 (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
780 ;; 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
781 ;; `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
782 (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
783 (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
784 (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
785 ;; 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
786 nil))))
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
787 properties)))
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
788 ;;
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
789 ;; 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
790 (defalias 'fast-lock-get-syntactic-properties
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
791 'ignore)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
792 ;;
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
793 ;; 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
794 (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
795 "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
796 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
797 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
798 (save-restriction
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
799 (widen)
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
800 (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
801 ;; 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
802 (while face-properties
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
803 (let ((face (car (car face-properties)))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
804 (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
805 (while regions
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
806 (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
807 (setq regions (nthcdr 2 regions)))
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
808 (setq face-properties (cdr face-properties))))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
809 ;; 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
810 ))
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
811 ;;
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
812 ;; 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
813 (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
814 'fast-lock-after-fontify-buffer))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
816 (unless (boundp 'font-lock-syntactic-keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
817 (defvar font-lock-syntactic-keywords nil))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
818
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
819 (unless (boundp 'font-lock-inhibit-thing-lock)
18023
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
820 (defvar font-lock-inhibit-thing-lock nil))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
821
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
822 (unless (fboundp 'font-lock-compile-keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
823 (defalias 'font-lock-compile-keywords 'identity))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
824
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
825 (unless (fboundp 'font-lock-eval-keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
826 (defun font-lock-eval-keywords (keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
827 (if (symbolp keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
828 (font-lock-eval-keywords (if (fboundp keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
829 (funcall keywords)
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
830 (eval keywords)))
12fc8bc96c58 Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents: 17586
diff changeset
831 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
832
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
833 (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
834 (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
835 (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
836 (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
837 alist)))
23752
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
838
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
839 (unless (fboundp 'current-message)
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
840 (defun current-message ()
001e0e875d56 * fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents: 22581
diff changeset
841 ""))
10243
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 ;; Install ourselves:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
845 (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
846 (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
847 (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
848
15498
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
849 ;;;###autoload
17498
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
850 (when (fboundp 'add-minor-mode)
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
851 (defvar fast-lock-mode nil)
5ea11c278a57 Customise.
Simon Marshall <simon@gnu.org>
parents: 17430
diff changeset
852 (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
853 ;;;###dont-autoload
4cd3efec2909 Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents: 14374
diff changeset
854 (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
855 (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
856
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 ;; Provide ourselves:
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 (provide 'fast-lock)
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860
ea9dda158056 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 ;;; fast-lock.el ends here