Mercurial > emacs
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 |
rev | line source |
---|---|
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
1 ;;; fast-lock.el --- Automagic text properties caching for fast Font Lock mode. |
10243 | 2 |
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 | 4 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
5 ;; Author: Simon Marshall <simon@gnu.ai.mit.edu> |
10243 | 6 ;; Keywords: faces files |
23752
001e0e875d56
* fast-lock.el (fast-lock-save-cache-1):
Simon Marshall <simon@gnu.org>
parents:
22581
diff
changeset
|
7 ;; Version: 3.14 |
10243 | 8 |
14374
e2423983be05
Support for local fontification.
Simon Marshall <simon@gnu.org>
parents:
14169
diff
changeset
|
9 ;;; This file is part of GNU Emacs. |
10243 | 10 |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
13 ;; the Free Software Foundation; either version 2, or (at your option) | |
14 ;; any later version. | |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
14169 | 22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
24 ;; Boston, MA 02111-1307, USA. | |
10243 | 25 |
26 ;;; Commentary: | |
27 | |
16579
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
28 ;; Lazy Lock mode is a Font Lock support mode. |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
29 ;; It makes visiting a file in Font Lock mode faster by restoring its face text |
aadb4abdeaaa
(a) make fast-lock-get-face-properties cope with face property lists, (b) add fast-lock-verbose to control messages.
Simon Marshall <simon@gnu.org>
parents:
15498
diff
changeset
|
30 ;; properties from automatically saved associated Font Lock cache files. |
10243 | 31 ;; |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
32 ;; See caveats and feedback below. |
10243 | 33 ;; See also the lazy-lock package. (But don't use the two at the same time!) |
34 | |
35 ;; Installation: | |
36 ;; | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
37 ;; Put in your ~/.emacs: |
10243 | 38 ;; |
15498
4cd3efec2909
Protect before- and after-change-functions when updating text properties.
Simon Marshall <simon@gnu.org>
parents:
14374
diff
changeset
|
39 ;; (setq font-lock-support-mode 'fast-lock-mode) |
10243 | 40 ;; |
41 ;; Start up a new Emacs and use font-lock as usual (except that you can use the | |
42 ;; so-called "gaudier" fontification regexps on big files without frustration). | |
43 ;; | |
44 ;; When you visit a file (which has `font-lock-mode' enabled) that has a | |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
45 ;; corresponding Font Lock cache file associated with it, the Font Lock cache |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
46 ;; will be loaded from that file instead of being generated by Font Lock code. |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
47 |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
48 ;; Caveats: |
10243 | 49 ;; |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
50 ;; A cache will be saved when visiting a compressed file using crypt++, but not |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
51 ;; be read. This is a "feature"/"consequence"/"bug" of crypt++. |
10243 | 52 ;; |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
53 ;; Version control packages are likely to stamp all over file modification |
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
54 ;; times. Therefore the act of checking out may invalidate a cache. |
10243 | 55 |
17586
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
56 ;; History: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
57 ;; |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
58 ;; 0.02--1.00: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
59 ;; - Changed name from turbo-prop to fast-lock. Automagic for font-lock only |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
60 ;; - Made `fast-lock-mode' a minor mode, like G. Dinesh Dutt's fss-mode |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
61 ;; 1.00--1.01: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
62 ;; - Turn on `fast-lock-mode' only if `buffer-file-name' or `interactive-p' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
63 ;; - Made `fast-lock-file-name' use `buffer-name' if `buffer-file-name' is nil |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
64 ;; - Moved save-all conditions to `fast-lock-save-cache' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
65 ;; - Added `fast-lock-save-text-properties' to `kill-buffer-hook' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
66 ;; 1.01--2.00: complete rewrite---not worth the space to document |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
67 ;; - Changed structure of text properties cache and threw out file mod checks |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
68 ;; 2.00--2.01: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
69 ;; - Made `condition-case' forms understand `quit'. |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
70 ;; - Made `fast-lock' require `font-lock' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
71 ;; - Made `fast-lock-cache-name' chase links (from Ben Liblit) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
72 ;; 2.01--3.00: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
73 ;; - Changed structure of cache to include `font-lock-keywords' (from rms) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
74 ;; - Changed `fast-lock-cache-mechanisms' to `fast-lock-cache-directories' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
75 ;; - Removed `fast-lock-read-others' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
76 ;; - Made `fast-lock-read-cache' ignore cache owner |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
77 ;; - Made `fast-lock-save-cache-external' create cache directory |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
78 ;; - Made `fast-lock-save-cache-external' save `font-lock-keywords' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
79 ;; - Made `fast-lock-cache-data' check `font-lock-keywords' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
80 ;; 3.00--3.01: incorporated port of 2.00 to Lucid, made by Barry Warsaw |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
81 ;; - Package now provides itself |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
82 ;; - Lucid: Use `font-lock-any-extents-p' for `font-lock-any-properties-p' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
83 ;; - Lucid: Use `list-faces' for `face-list' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
84 ;; - Lucid: Added `set-text-properties' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
85 ;; - Lucid: Made `turn-on-fast-lock' pass 1 not t to `fast-lock-mode' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
86 ;; - Removed test for `fast-lock-mode' from `fast-lock-read-cache' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
87 ;; - Lucid: Added Lucid-specific `fast-lock-get-face-properties' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
88 ;; 3.01--3.02: now works with Lucid Emacs, thanks to Barry Warsaw |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
89 ;; - Made `fast-lock-cache-name' map ":" to ";" for OS/2 (from Serganova Vera) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
90 ;; - Made `fast-lock-cache-name' use abbreviated file name (from Barry Warsaw) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
91 ;; - Lucid: Separated handlers for `error' and `quit' for `condition-case' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
92 ;; 3.02--3.03: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
93 ;; - Changed `fast-lock-save-cache-external' to `fast-lock-save-cache-data' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
94 ;; - Lucid: Added Lucid-specific `fast-lock-set-face-properties' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
95 ;; 3.03--3.04: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
96 ;; - Corrected `subrp' test of Lucid code |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
97 ;; - Replaced `font-lock-any-properties-p' with `text-property-not-all' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
98 ;; - Lucid: Made `fast-lock-set-face-properties' put `text-prop' on extents |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
99 ;; - Made `fast-lock-cache-directories' a regexp alist (from Colin Rafferty) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
100 ;; - Made `fast-lock-cache-directory' to return a usable cache file directory |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
101 ;; 3.04--3.05: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
102 ;; - Lucid: Fix for XEmacs 19.11 `text-property-not-all' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
103 ;; - Replaced `subrp' test of Lucid code with `emacs-version' `string-match' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
104 ;; - Made `byte-compile-warnings' omit `unresolved' on compilation |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
105 ;; - Made `fast-lock-save-cache-data' use a buffer (from Rick Sladkey) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
106 ;; - Reverted to old `fast-lock-get-face-properties' (from Rick Sladkey) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
107 ;; 3.05--3.06: incorporated hack of 3.03, made by Jonathan Stigelman (Stig) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
108 ;; - Reverted to 3.04 version of `fast-lock-get-face-properties' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
109 ;; - XEmacs: Removed `list-faces' `defalias' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
110 ;; - Made `fast-lock-mode' and `turn-on-fast-lock' succeed `autoload' cookies |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
111 ;; - Added `fast-lock-submit-bug-report' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
112 ;; - Renamed `fast-lock-save-size' to `fast-lock-minimum-size' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
113 ;; - Made `fast-lock-save-cache' output a message if no save ever attempted |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
114 ;; - Made `fast-lock-save-cache-data' output a message if save attempted |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
115 ;; - Made `fast-lock-cache-data' output a message if load attempted |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
116 ;; - Made `fast-lock-save-cache-data' do `condition-case' not `unwind-protect' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
117 ;; - Made `fast-lock-save-cache' and `fast-lock-read-cache' return nothing |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
118 ;; - Made `fast-lock-save-cache' check `buffer-modified-p' (Stig) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
119 ;; - Added `fast-lock-save-events' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
120 ;; - Added `fast-lock-after-save-hook' to `after-save-hook' (Stig) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
121 ;; - Added `fast-lock-kill-buffer-hook' to `kill-buffer-hook' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
122 ;; - Changed `fast-lock-save-caches' to `fast-lock-kill-emacs-hook' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
123 ;; - Added `fast-lock-kill-emacs-hook' to `kill-emacs-hook' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
124 ;; - Made `fast-lock-save-cache' check `verify-visited-file-modtime' (Stig) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
125 ;; - Made `visited-file-modtime' be the basis of the timestamp (Stig) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
126 ;; - Made `fast-lock-save-cache-1' and `fast-lock-cache-data' use/reformat it |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
127 ;; - Added `fast-lock-cache-filename' to keep track of the cache file name |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
128 ;; - Added `fast-lock-after-fontify-buffer' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
129 ;; - Added `fast-lock-save-faces' list of faces to save (idea from Stig/Tibor) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
130 ;; - Made `fast-lock-get-face-properties' functions use it |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
131 ;; - XEmacs: Made `fast-lock-set-face-properties' do extents the Font Lock way |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
132 ;; - XEmacs: Removed fix for `text-property-not-all' (19.11 support dropped) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
133 ;; - Made `fast-lock-mode' ensure `font-lock-mode' is on |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
134 ;; - Made `fast-lock-save-cache' do `cdr-safe' not `cdr' (from Dave Foster) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
135 ;; - Made `fast-lock-save-cache' do `set-buffer' first (from Dave Foster) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
136 ;; - Made `fast-lock-save-cache' loop until saved or quit (from Georg Nikodym) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
137 ;; - Made `fast-lock-cache-data' check `buffer-modified-p' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
138 ;; - Made `fast-lock-cache-data' do `font-lock-compile-keywords' if necessary |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
139 ;; - XEmacs: Made `font-lock-compile-keywords' `defalias' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
140 ;; 3.06--3.07: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
141 ;; - XEmacs: Add `fast-lock-after-fontify-buffer' to the Font Lock hook |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
142 ;; - Made `fast-lock-cache-name' explain the use of `directory-abbrev-alist' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
143 ;; - Made `fast-lock-mode' use `buffer-file-truename' not `buffer-file-name' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
144 ;; 3.07--3.08: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
145 ;; - Made `fast-lock-read-cache' set `fast-lock-cache-filename' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
146 ;; 3.08--3.09: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
147 ;; - Made `fast-lock-save-cache' cope if `fast-lock-minimum-size' is an a list |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
148 ;; - Made `fast-lock-mode' respect the value of `font-lock-inhibit-thing-lock' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
149 ;; - Added `fast-lock-after-unfontify-buffer' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
150 ;; 3.09--3.10: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
151 ;; - Rewrite for Common Lisp macros |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
152 ;; - Made fast-lock.el barf on a crap 8+3 pseudo-OS (Eli Zaretskii help) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
153 ;; - XEmacs: Made `add-minor-mode' succeed `autoload' cookie |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
154 ;; - XEmacs: Made `fast-lock-save-faces' default to `font-lock-face-list' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
155 ;; - Made `fast-lock-save-cache' use `font-lock-value-in-major-mode' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
156 ;; - Wrap with `save-buffer-state' (Ray Van Tassle report) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
157 ;; - Made `fast-lock-mode' wrap `font-lock-support-mode' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
158 ;; 3.10--3.11: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
159 ;; - Made `fast-lock-get-face-properties' cope with face lists |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
160 ;; - Added `fast-lock-verbose' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
161 ;; - XEmacs: Add `font-lock-value-in-major-mode' if necessary |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
162 ;; - Removed `fast-lock-submit-bug-report' and bade farewell |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
163 ;; 3.11--3.12: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
164 ;; - Added Custom support (Hrvoje Niksic help) |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
165 ;; - Made `save-buffer-state' wrap `inhibit-point-motion-hooks' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
166 ;; - Made `fast-lock-cache-data' simplify calls of `font-lock-compile-keywords' |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
167 ;; 3.12--3.13: |
b9ca2d28765c
Version 3.12.01 from author; defgroup happens in font-lock.el; don't prevent from compiling on emacs 19.34 etc.
Simon Marshall <simon@gnu.org>
parents:
17561
diff
changeset
|
168 ;; - Removed `byte-*' variables from `eval-when-compile' (Erik Naggum hint) |
18023
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
169 ;; - Changed structure of cache to include `font-lock-syntactic-keywords' |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
170 ;; - Made `fast-lock-save-cache-1' save syntactic fontification data |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
171 ;; - Made `fast-lock-cache-data' take syntactic fontification data |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
172 ;; - Added `fast-lock-get-syntactic-properties' |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
173 ;; - Renamed `fast-lock-set-face-properties' to `fast-lock-add-properties' |
12fc8bc96c58
Update for syntax-table text properties.
Simon Marshall <simon@gnu.org>
parents:
17586
diff
changeset
|
174 ;; - Made `fast-lock-add-properties' add syntactic and face fontification data |
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 | 182 (require 'font-lock) |
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 | 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 | 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 | 252 (defvar fast-lock-mode nil) ; Whether we are turned on. |
253 (defvar fast-lock-cache-timestamp nil) ; For saving/reading. | |
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 | 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 | 259 "*Minimum size of a buffer for cached fontification. |
260 Only buffers more than this can have associated Font Lock cache files saved. | |
261 If nil, means cache files are never created. | |
262 If a list, each element should be a cons pair of the form (MAJOR-MODE . SIZE), | |
263 where MAJOR-MODE is a symbol or t (meaning the default). For example: | |
264 ((c-mode . 25600) (c++-mode . 25600) (rmail-mode . 1048576)) | |
265 means that the minimum size is 25K for buffers in C or C++ modes, one megabyte | |
266 for buffers in Rmail mode, and size is irrelevant otherwise." | |
267 :type '(choice (const :tag "none" nil) | |
268 (integer :tag "size") | |
269 (repeat :menu-tag "mode specific" :tag "mode specific" | |
270 :value ((t . nil)) | |
271 (cons :tag "Instance" | |
272 (radio :tag "Mode" | |
273 (const :tag "all" t) | |
274 (symbol :tag "name")) | |
275 (radio :tag "Size" | |
276 (const :tag "none" nil) | |
277 (integer :tag "size"))))) | |
278 :group 'fast-lock) | |
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 | 284 Each item should be either DIR or a cons pair of the form (REGEXP . DIR) where |
285 DIR is a directory name (relative or absolute) and REGEXP is a regexp. | |
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 | 288 until one succeeds (i.e., until a readable or writable one is found). If an |
289 item contains REGEXP, DIR is used only if the buffer file name matches REGEXP. | |
290 For example: | |
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 | 296 |
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 | 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 | 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 | 321 |
17498 | 322 (defcustom fast-lock-verbose font-lock-verbose |
323 "*If non-nil, means show status messages for cache processing. | |
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 | 328 :group 'fast-lock) |
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 | 336 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
337 ;; User Functions: |
10243 | 338 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
339 ;;;###autoload |
10243 | 340 (defun fast-lock-mode (&optional arg) |
341 "Toggle Fast Lock mode. | |
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 | 346 |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 380 |
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 | 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 | 390 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
391 See `fast-lock-mode'." |
10243 | 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 | 395 (fontified font-lock-fontified)) |
396 (set (make-local-variable 'font-lock-fontified) nil) | |
397 ;; Keep trying directories until fontification is turned off. | |
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 | 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 | 413 |
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 | 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 | 427 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
428 See `fast-lock-mode'." |
10243 | 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 | 466 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
467 ;;;###autoload |
10243 | 468 (defun turn-on-fast-lock () |
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 | 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 | 502 |
503 (defun fast-lock-cache-directory (directory create) | |
504 "Return usable directory based on DIRECTORY. | |
505 Returns nil if the directory does not exist, or, if CREATE non-nil, cannot be | |
506 created. DIRECTORY may be a string or a cons pair of the form (REGEXP . DIR). | |
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 | 521 (cond ((not dir) |
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 | 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 | 535 (defun fast-lock-cache-name (directory) |
536 "Return full cache path name using caching DIRECTORY. | |
537 If DIRECTORY is `.', the path is the buffer file name appended with `.flc'. | |
538 Otherwise, the path name is constructed from DIRECTORY and the buffer's true | |
539 abbreviated file name, with all `/' characters in the name replaced with `#' | |
540 characters, and appended with `.flc'. | |
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 | 551 (if (string-equal directory ".") |
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 | 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 | 556 '((?/ . (?#)) (?# . (?# ?#)) (?: . (?\;)) (?\; . (?\; ?\;))) |
557 '((?/ . (?#)) (?# . (?# ?#))))) | |
558 (mapchars | |
559 (function (lambda (c) (or (cdr (assq c chars-alist)) (list c)))))) | |
560 (concat | |
561 (file-name-as-directory (expand-file-name directory)) | |
562 (mapconcat 'char-to-string (apply 'append (mapcar mapchars bufile)) "") | |
563 ".flc")))) | |
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 | 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 | 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 | 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 | 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 | 635 (not (equal keywords font-lock-keywords))) |
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 | 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 | 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 | 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 | 758 |
12048
8e3d4f515bbb
New version 3.06 from author.
Simon Marshall <simon@gnu.org>
parents:
10243
diff
changeset
|
759 ;; Functions for XEmacs: |
10243 | 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 | 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 | 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 | 842 |
843 ;; Install ourselves: | |
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 | 850 (when (fboundp 'add-minor-mode) |
851 (defvar fast-lock-mode nil) | |
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 | 856 |
857 ;; Provide ourselves: | |
858 | |
859 (provide 'fast-lock) | |
860 | |
861 ;;; fast-lock.el ends here |