Mercurial > emacs
annotate lisp/jit-lock.el @ 49506:ac9e2eeeb03d
New format of AUTHORS file; list each
author name once followed by contributed and changed files.
Improve selection of entries to include in list, and generate list
of unrecognized entries indicating syntax errors in ChangeLog files.
(authors-coding-system): New variable.
(authors-many-files): Update doc string.
(authors-aliases): Change format. Now one entry with multiple
aliases per author.
(authors-valid-file-names, authors-renamed-files-alist)
(authors-renamed-files-regexps): New variables.
(authors-canonical-file-name): New function. Validates that file
exists or occurs in one of the above lists. Record unrecognized
file names in global authors-invalid-file-names list.
(authors-add): Change to record per-change counts.
(authors-canonical-author-name): Handle new format of
authors-aliases list.
(authors-scan-change-log): Rename FILE arg to LOG-FILE.
Change doc string to describe new entry format.
Only add author entries for valid file names.
(authors-print): Replace by authors-add-to-author-list.
(authors-add-to-author-list): New function which reorders
per-file entries and adds them to global authors-author-list.
(authors): Instead of authors-print to insert in *Authors* buffer,
use authors-add-to-author-list to reorder the list and then
insert result in *Authors* buffer with new format.
Generate *Authors Errors* compilation-mode buffer listing
unrecognized ChangeLog entries.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Wed, 29 Jan 2003 00:13:11 +0000 |
parents | 2cf6194833de |
children | e88404e8f2cf |
rev | line source |
---|---|
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37781
diff
changeset
|
1 ;;; jit-lock.el --- just-in-time fontification |
25003 | 2 |
35418 | 3 ;; Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. |
25003 | 4 |
5 ;; Author: Gerd Moellmann <gerd@gnu.org> | |
6 ;; Keywords: faces files | |
7 | |
8 ;; This file is part of GNU Emacs. | |
9 | |
10 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
11 ;; it under the terms of the GNU General Public License as published by | |
12 ;; the Free Software Foundation; either version 2, or (at your option) | |
13 ;; any later version. | |
14 | |
15 ;; GNU Emacs is distributed in the hope that it will be useful, | |
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 ;; GNU General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
23 ;; Boston, MA 02111-1307, USA. | |
24 | |
25 ;;; Commentary: | |
26 | |
27 ;; Just-in-time fontification, triggered by C redisplay code. | |
28 | |
29 ;;; Code: | |
30 | |
31 | |
32 (eval-when-compile | |
28501
030a9790d290
(with-buffer-unmodified): New macro.
Gerd Moellmann <gerd@gnu.org>
parents:
28208
diff
changeset
|
33 (defmacro with-buffer-unmodified (&rest body) |
030a9790d290
(with-buffer-unmodified): New macro.
Gerd Moellmann <gerd@gnu.org>
parents:
28208
diff
changeset
|
34 "Eval BODY, preserving the current buffer's modified state." |
030a9790d290
(with-buffer-unmodified): New macro.
Gerd Moellmann <gerd@gnu.org>
parents:
28208
diff
changeset
|
35 (let ((modified (make-symbol "modified"))) |
030a9790d290
(with-buffer-unmodified): New macro.
Gerd Moellmann <gerd@gnu.org>
parents:
28208
diff
changeset
|
36 `(let ((,modified (buffer-modified-p))) |
32152
00f38571e2b1
(with-buffer-unmodified): Use unwind-protect.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29827
diff
changeset
|
37 (unwind-protect |
00f38571e2b1
(with-buffer-unmodified): Use unwind-protect.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29827
diff
changeset
|
38 (progn ,@body) |
00f38571e2b1
(with-buffer-unmodified): Use unwind-protect.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29827
diff
changeset
|
39 (unless ,modified |
00f38571e2b1
(with-buffer-unmodified): Use unwind-protect.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29827
diff
changeset
|
40 (restore-buffer-modified-p nil)))))) |
28501
030a9790d290
(with-buffer-unmodified): New macro.
Gerd Moellmann <gerd@gnu.org>
parents:
28208
diff
changeset
|
41 |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
42 (defmacro with-buffer-prepared-for-jit-lock (&rest body) |
25003 | 43 "Execute BODY in current buffer, overriding several variables. |
44 Preserves the `buffer-modified-p' state of the current buffer." | |
28521
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
45 `(with-buffer-unmodified |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
46 (let ((buffer-undo-list t) |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
47 (inhibit-read-only t) |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
48 (inhibit-point-motion-hooks t) |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
49 (inhibit-modification-hooks t) |
28521
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
50 deactivate-mark |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
51 buffer-file-name |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
52 buffer-file-truename) |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
53 ,@body)))) |
28501
030a9790d290
(with-buffer-unmodified): New macro.
Gerd Moellmann <gerd@gnu.org>
parents:
28208
diff
changeset
|
54 |
25003 | 55 |
56 | |
57 ;;; Customization. | |
58 | |
59 (defcustom jit-lock-chunk-size 500 | |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
60 "*Jit-lock chunks of this many characters, or smaller." |
25003 | 61 :type 'integer |
62 :group 'jit-lock) | |
63 | |
64 | |
65 (defcustom jit-lock-stealth-time 3 | |
66 "*Time in seconds to wait before beginning stealth fontification. | |
67 Stealth fontification occurs if there is no input within this time. | |
32581
38b7e156a71f
(jit-lock-stealth-time): Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents:
32531
diff
changeset
|
68 If nil, stealth fontification is never performed. |
25003 | 69 |
70 The value of this variable is used when JIT Lock mode is turned on." | |
71 :type '(choice (const :tag "never" nil) | |
72 (number :tag "seconds")) | |
73 :group 'jit-lock) | |
74 | |
75 | |
76 (defcustom jit-lock-stealth-nice 0.125 | |
77 "*Time in seconds to pause between chunks of stealth fontification. | |
78 Each iteration of stealth fontification is separated by this amount of time, | |
79 thus reducing the demand that stealth fontification makes on the system. | |
80 If nil, means stealth fontification is never paused. | |
81 To reduce machine load during stealth fontification, at the cost of stealth | |
82 taking longer to fontify, you could increase the value of this variable. | |
83 See also `jit-lock-stealth-load'." | |
84 :type '(choice (const :tag "never" nil) | |
85 (number :tag "seconds")) | |
86 :group 'jit-lock) | |
87 | |
88 | |
89 (defcustom jit-lock-stealth-load | |
90 (if (condition-case nil (load-average) (error)) 200) | |
91 "*Load in percentage above which stealth fontification is suspended. | |
92 Stealth fontification pauses when the system short-term load average (as | |
93 returned by the function `load-average' if supported) goes above this level, | |
94 thus reducing the demand that stealth fontification makes on the system. | |
95 If nil, means stealth fontification is never suspended. | |
96 To reduce machine load during stealth fontification, at the cost of stealth | |
97 taking longer to fontify, you could reduce the value of this variable. | |
98 See also `jit-lock-stealth-nice'." | |
99 :type (if (condition-case nil (load-average) (error)) | |
100 '(choice (const :tag "never" nil) | |
101 (integer :tag "load")) | |
102 '(const :format "%t: unsupported\n" nil)) | |
103 :group 'jit-lock) | |
104 | |
105 | |
106 (defcustom jit-lock-stealth-verbose nil | |
107 "*If non-nil, means stealth fontification should show status messages." | |
108 :type 'boolean | |
109 :group 'jit-lock) | |
110 | |
111 | |
112 (defcustom jit-lock-defer-contextually 'syntax-driven | |
113 "*If non-nil, means deferred fontification should be syntactically true. | |
114 If nil, means deferred fontification occurs only on those lines modified. This | |
115 means where modification on a line causes syntactic change on subsequent lines, | |
116 those subsequent lines are not refontified to reflect their new context. | |
117 If t, means deferred fontification occurs on those lines modified and all | |
118 subsequent lines. This means those subsequent lines are refontified to reflect | |
119 their new syntactic context, either immediately or when scrolling into them. | |
120 If any other value, e.g., `syntax-driven', means deferred syntactically true | |
121 fontification occurs only if syntactic fontification is performed using the | |
122 buffer mode's syntax table, i.e., only if `font-lock-keywords-only' is nil. | |
123 | |
124 The value of this variable is used when JIT Lock mode is turned on." | |
125 :type '(choice (const :tag "never" nil) | |
126 (const :tag "always" t) | |
127 (other :tag "syntax-driven" syntax-driven)) | |
128 :group 'jit-lock) | |
129 | |
41502
828432e1e1d4
Modify a commented-out non-nil value of jit-lock-defer-time, to
Eli Zaretskii <eliz@gnu.org>
parents:
41336
diff
changeset
|
130 (defcustom jit-lock-defer-time nil ;; 0.25 |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
131 "Idle time after which deferred fontification should take place. |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
132 If nil, fontification is not deferred." |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
133 :group 'jit-lock |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
134 :type '(choice (const :tag "never" nil) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
135 (number :tag "seconds"))) |
25003 | 136 |
137 ;;; Variables that are not customizable. | |
138 | |
139 (defvar jit-lock-mode nil | |
140 "Non-nil means Just-in-time Lock mode is active.") | |
141 (make-variable-buffer-local 'jit-lock-mode) | |
142 | |
32152
00f38571e2b1
(with-buffer-unmodified): Use unwind-protect.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29827
diff
changeset
|
143 (defvar jit-lock-functions nil |
00f38571e2b1
(with-buffer-unmodified): Use unwind-protect.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29827
diff
changeset
|
144 "Functions to do the actual fontification. |
00f38571e2b1
(with-buffer-unmodified): Use unwind-protect.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29827
diff
changeset
|
145 They are called with two arguments: the START and END of the region to fontify.") |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
146 (make-variable-buffer-local 'jit-lock-functions) |
25003 | 147 |
148 (defvar jit-lock-first-unfontify-pos nil | |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
149 "Consider text after this position as contextually unfontified. |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
150 If nil, contextual fontification is disabled.") |
25003 | 151 (make-variable-buffer-local 'jit-lock-first-unfontify-pos) |
152 | |
153 | |
154 (defvar jit-lock-stealth-timer nil | |
155 "Timer for stealth fontification in Just-in-time Lock mode.") | |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
156 |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
157 (defvar jit-lock-defer-timer nil |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
158 "Timer for deferred fontification in Just-in-time Lock mode.") |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
159 |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
160 (defvar jit-lock-buffers nil |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
161 "List of buffers with pending deferred fontification.") |
25003 | 162 |
163 ;;; JIT lock mode | |
164 | |
165 (defun jit-lock-mode (arg) | |
166 "Toggle Just-in-time Lock mode. | |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
167 Turn Just-in-time Lock mode on if and only if ARG is non-nil. |
25003 | 168 Enable it automatically by customizing group `font-lock'. |
169 | |
170 When Just-in-time Lock mode is enabled, fontification is different in the | |
171 following ways: | |
172 | |
173 - Demand-driven buffer fontification triggered by Emacs C code. | |
174 This means initial fontification of the whole buffer does not occur. | |
175 Instead, fontification occurs when necessary, such as when scrolling | |
176 through the buffer would otherwise reveal unfontified areas. This is | |
177 useful if buffer fontification is too slow for large buffers. | |
178 | |
179 - Stealthy buffer fontification if `jit-lock-stealth-time' is non-nil. | |
180 This means remaining unfontified areas of buffers are fontified if Emacs has | |
181 been idle for `jit-lock-stealth-time' seconds, while Emacs remains idle. | |
182 This is useful if any buffer has any deferred fontification. | |
183 | |
184 - Deferred context fontification if `jit-lock-defer-contextually' is | |
185 non-nil. This means fontification updates the buffer corresponding to | |
186 true syntactic context, after `jit-lock-stealth-time' seconds of Emacs | |
187 idle time, while Emacs remains idle. Otherwise, fontification occurs | |
188 on modified lines only, and subsequent lines can remain fontified | |
189 corresponding to previous syntactic contexts. This is useful where | |
190 strings or comments span lines. | |
191 | |
192 Stealth fontification only occurs while the system remains unloaded. | |
193 If the system load rises above `jit-lock-stealth-load' percent, stealth | |
194 fontification is suspended. Stealth fontification intensity is controlled via | |
29413
ce16b083b459
(jit-lock-saved-fontify-buffer-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29288
diff
changeset
|
195 the variable `jit-lock-stealth-nice'." |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
196 (setq jit-lock-mode arg) |
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
197 (cond (;; Turn Just-in-time Lock mode on. |
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
198 jit-lock-mode |
25003 | 199 |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
200 ;; Mark the buffer for refontification. |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
201 (jit-lock-refontify) |
29413
ce16b083b459
(jit-lock-saved-fontify-buffer-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29288
diff
changeset
|
202 |
25003 | 203 ;; Install an idle timer for stealth fontification. |
32181
f3afd1ff75a8
(jit-lock-mode): Use jit-lock-defer-contextually
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32157
diff
changeset
|
204 (when (and jit-lock-stealth-time (null jit-lock-stealth-timer)) |
29413
ce16b083b459
(jit-lock-saved-fontify-buffer-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29288
diff
changeset
|
205 (setq jit-lock-stealth-timer |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
206 (run-with-idle-timer jit-lock-stealth-time t |
25003 | 207 'jit-lock-stealth-fontify))) |
208 | |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
209 ;; Init deferred fontification timer. |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
210 (when (and jit-lock-defer-time (null jit-lock-defer-timer)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
211 (setq jit-lock-defer-timer |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
212 (run-with-idle-timer jit-lock-defer-time t |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
213 'jit-lock-deferred-fontify))) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
214 |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
215 ;; Initialize deferred contextual fontification if requested. |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
216 (when (eq jit-lock-defer-contextually t) |
32181
f3afd1ff75a8
(jit-lock-mode): Use jit-lock-defer-contextually
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32157
diff
changeset
|
217 (setq jit-lock-first-unfontify-pos |
f3afd1ff75a8
(jit-lock-mode): Use jit-lock-defer-contextually
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32157
diff
changeset
|
218 (or jit-lock-first-unfontify-pos (point-max)))) |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
219 |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
220 ;; Setup our hooks. |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
221 (add-hook 'after-change-functions 'jit-lock-after-change nil t) |
25003 | 222 (add-hook 'fontification-functions 'jit-lock-function)) |
223 | |
224 ;; Turn Just-in-time Lock mode off. | |
225 (t | |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
226 ;; Cancel our idle timers. |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
227 (when (and (or jit-lock-stealth-timer jit-lock-defer-timer) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
228 ;; Only if there's no other buffer using them. |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
229 (not (catch 'found |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
230 (dolist (buf (buffer-list)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
231 (with-current-buffer buf |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
232 (when jit-lock-mode (throw 'found t))))))) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
233 (when jit-lock-stealth-timer |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
234 (cancel-timer jit-lock-stealth-timer) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
235 (setq jit-lock-stealth-timer nil)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
236 (when jit-lock-defer-timer |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
237 (cancel-timer jit-lock-defer-timer) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
238 (setq jit-lock-defer-timer nil))) |
25003 | 239 |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
240 ;; Remove hooks. |
29413
ce16b083b459
(jit-lock-saved-fontify-buffer-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29288
diff
changeset
|
241 (remove-hook 'after-change-functions 'jit-lock-after-change t) |
25003 | 242 (remove-hook 'fontification-functions 'jit-lock-function)))) |
243 | |
32181
f3afd1ff75a8
(jit-lock-mode): Use jit-lock-defer-contextually
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32157
diff
changeset
|
244 ;;;###autoload |
f3afd1ff75a8
(jit-lock-mode): Use jit-lock-defer-contextually
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32157
diff
changeset
|
245 (defun jit-lock-register (fun &optional contextual) |
32157
c3d137c056d1
(jit-lock-register, jit-lock-unregister): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32156
diff
changeset
|
246 "Register FUN as a fontification function to be called in this buffer. |
c3d137c056d1
(jit-lock-register, jit-lock-unregister): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32156
diff
changeset
|
247 FUN will be called with two arguments START and END indicating the region |
32181
f3afd1ff75a8
(jit-lock-mode): Use jit-lock-defer-contextually
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32157
diff
changeset
|
248 that needs to be (re)fontified. |
f3afd1ff75a8
(jit-lock-mode): Use jit-lock-defer-contextually
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32157
diff
changeset
|
249 If non-nil, CONTEXTUAL means that a contextual fontification would be useful." |
32156
b3596a2daf42
(jit-lock-register, jit-lock-unregister): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32152
diff
changeset
|
250 (add-hook 'jit-lock-functions fun nil t) |
32181
f3afd1ff75a8
(jit-lock-mode): Use jit-lock-defer-contextually
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32157
diff
changeset
|
251 (when (and contextual jit-lock-defer-contextually) |
f3afd1ff75a8
(jit-lock-mode): Use jit-lock-defer-contextually
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32157
diff
changeset
|
252 (set (make-local-variable 'jit-lock-defer-contextually) t)) |
32156
b3596a2daf42
(jit-lock-register, jit-lock-unregister): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32152
diff
changeset
|
253 (jit-lock-mode t)) |
b3596a2daf42
(jit-lock-register, jit-lock-unregister): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32152
diff
changeset
|
254 |
b3596a2daf42
(jit-lock-register, jit-lock-unregister): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32152
diff
changeset
|
255 (defun jit-lock-unregister (fun) |
32157
c3d137c056d1
(jit-lock-register, jit-lock-unregister): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32156
diff
changeset
|
256 "Unregister FUN as a fontification function. |
32156
b3596a2daf42
(jit-lock-register, jit-lock-unregister): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32152
diff
changeset
|
257 Only applies to the current buffer." |
b3596a2daf42
(jit-lock-register, jit-lock-unregister): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32152
diff
changeset
|
258 (remove-hook 'jit-lock-functions fun t) |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
259 (unless jit-lock-functions (jit-lock-mode nil))) |
25003 | 260 |
29413
ce16b083b459
(jit-lock-saved-fontify-buffer-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29288
diff
changeset
|
261 ;; This function is used to prevent font-lock-fontify-buffer from |
ce16b083b459
(jit-lock-saved-fontify-buffer-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29288
diff
changeset
|
262 ;; fontifying eagerly the whole buffer. This is important for |
ce16b083b459
(jit-lock-saved-fontify-buffer-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29288
diff
changeset
|
263 ;; things like CWarn mode which adds/removes a few keywords and |
ce16b083b459
(jit-lock-saved-fontify-buffer-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29288
diff
changeset
|
264 ;; does a refontify (which takes ages on large files). |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
265 (defun jit-lock-refontify (&optional beg end) |
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
266 "Force refontification of the region BEG..END (default whole buffer)." |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
267 (with-buffer-prepared-for-jit-lock |
29708
f37b857741b1
(jit-lock-mode): Force jit-refontify when turned on.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29413
diff
changeset
|
268 (save-restriction |
f37b857741b1
(jit-lock-mode): Force jit-refontify when turned on.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29413
diff
changeset
|
269 (widen) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
270 (put-text-property (or beg (point-min)) (or end (point-max)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
271 'fontified nil)))) |
25003 | 272 |
273 ;;; On demand fontification. | |
274 | |
275 (defun jit-lock-function (start) | |
276 "Fontify current buffer starting at position START. | |
277 This function is added to `fontification-functions' when `jit-lock-mode' | |
278 is active." | |
279 (when jit-lock-mode | |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
280 (if (null jit-lock-defer-time) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
281 ;; No deferral. |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
282 (jit-lock-fontify-now start (+ start jit-lock-chunk-size)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
283 ;; Record the buffer for later fontification. |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
284 (unless (memq (current-buffer) jit-lock-buffers) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
285 (push (current-buffer) jit-lock-buffers)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
286 ;; Mark the area as defer-fontified so that the redisplay engine |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
287 ;; is happy and so that the idle timer can find the places to fontify. |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
288 (with-buffer-prepared-for-jit-lock |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
289 (put-text-property start |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
290 (next-single-property-change |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
291 start 'fontified nil |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
292 (min (point-max) (+ start jit-lock-chunk-size))) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
293 'fontified 'defer))))) |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
294 |
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
295 (defun jit-lock-fontify-now (&optional start end) |
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
296 "Fontify current buffer from START to END. |
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
297 Defaults to the whole buffer. END can be out of bounds." |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
298 (with-buffer-prepared-for-jit-lock |
28501
030a9790d290
(with-buffer-unmodified): New macro.
Gerd Moellmann <gerd@gnu.org>
parents:
28208
diff
changeset
|
299 (save-excursion |
47725
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
300 (unless start (setq start (point-min))) |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
301 (setq end (if end (min end (point-max)) (point-max))) |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
302 ;; This did bind `font-lock-beginning-of-syntax-function' to |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
303 ;; nil at some point, for an unknown reason. Don't do this; it |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
304 ;; can make highlighting slow due to expensive calls to |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
305 ;; `parse-partial-sexp' in function |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
306 ;; `font-lock-fontify-syntactically-region'. Example: paging |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
307 ;; from the end of a buffer to its start, can do repeated |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
308 ;; `parse-partial-sexp' starting from `point-min', which can |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
309 ;; take a long time in a large buffer. |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
310 (let (next) |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
311 (save-match-data |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
312 ;; Fontify chunks beginning at START. The end of a |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
313 ;; chunk is either `end', or the start of a region |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
314 ;; before `end' that has already been fontified. |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
315 (while start |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
316 ;; Determine the end of this chunk. |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
317 (setq next (or (text-property-any start end 'fontified t) |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
318 end)) |
25395
9d8fff117316
(jit-lock-function): Extend the fontified range
Gerd Moellmann <gerd@gnu.org>
parents:
25341
diff
changeset
|
319 |
47725
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
320 ;; Decide which range of text should be fontified. |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
321 ;; The problem is that START and NEXT may be in the |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
322 ;; middle of something matched by a font-lock regexp. |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
323 ;; Until someone has a better idea, let's start |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
324 ;; at the start of the line containing START and |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
325 ;; stop at the start of the line following NEXT. |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
326 (goto-char next) (setq next (line-beginning-position 2)) |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
327 (goto-char start) (setq start (line-beginning-position)) |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
328 |
47725
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
329 ;; Fontify the chunk, and mark it as fontified. |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
330 ;; We mark it first, to make sure that we don't indefinitely |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
331 ;; re-execute this fontification if an error occurs. |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
332 (put-text-property start next 'fontified t) |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
333 (run-hook-with-args 'jit-lock-functions start next) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
334 |
47725
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
335 ;; Find the start of the next chunk, if any. |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
336 (setq start (text-property-any next end 'fontified nil)))))))) |
25003 | 337 |
338 | |
339 ;;; Stealth fontification. | |
340 | |
341 (defsubst jit-lock-stealth-chunk-start (around) | |
342 "Return the start of the next chunk to fontify around position AROUND.. | |
343 Value is nil if there is nothing more to fontify." | |
27537
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
344 (if (zerop (buffer-size)) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
345 nil |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
346 (save-restriction |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
347 (widen) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
348 (let* ((next (text-property-not-all around (point-max) 'fontified t)) |
27537
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
349 (prev (previous-single-property-change around 'fontified)) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
350 (prop (get-text-property (max (point-min) (1- around)) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
351 'fontified)) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
352 (start (cond |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
353 ((null prev) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
354 ;; There is no property change between AROUND |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
355 ;; and the start of the buffer. If PROP is |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
356 ;; non-nil, everything in front of AROUND is |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
357 ;; fontified, otherwise nothing is fontified. |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
358 (if (eq prop t) |
27537
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
359 nil |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
360 (max (point-min) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
361 (- around (/ jit-lock-chunk-size 2))))) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
362 ((eq prop t) |
27537
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
363 ;; PREV is the start of a region of fontified |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
364 ;; text containing AROUND. Start fontifying a |
27537
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
365 ;; chunk size before the end of the unfontified |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
366 ;; region in front of that. |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
367 (max (or (previous-single-property-change prev 'fontified) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
368 (point-min)) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
369 (- prev jit-lock-chunk-size))) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
370 (t |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
371 ;; PREV is the start of a region of unfontified |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
372 ;; text containing AROUND. Start at PREV or |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
373 ;; chunk size in front of AROUND, whichever is |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
374 ;; nearer. |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
375 (max prev (- around jit-lock-chunk-size))))) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
376 (result (cond ((null start) next) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
377 ((null next) start) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
378 ((< (- around start) (- next around)) start) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
379 (t next)))) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
380 result)))) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
381 |
25003 | 382 |
383 (defun jit-lock-stealth-fontify () | |
384 "Fontify buffers stealthily. | |
385 This functions is called after Emacs has been idle for | |
386 `jit-lock-stealth-time' seconds." | |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
387 ;; I used to check `inhibit-read-only' here, but I can't remember why. -stef |
25003 | 388 (unless (or executing-kbd-macro |
389 (window-minibuffer-p (selected-window))) | |
390 (let ((buffers (buffer-list)) | |
391 minibuffer-auto-raise | |
392 message-log-max) | |
27537
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
393 (while (and buffers (not (input-pending-p))) |
25003 | 394 (let ((buffer (car buffers))) |
395 (setq buffers (cdr buffers)) | |
27537
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
396 |
25003 | 397 (with-current-buffer buffer |
398 (when jit-lock-mode | |
399 ;; This is funny. Calling sit-for with 3rd arg non-nil | |
400 ;; so that it doesn't redisplay, internally calls | |
401 ;; wait_reading_process_input also with a parameter | |
402 ;; saying "don't redisplay." Since this function here | |
403 ;; is called periodically, this effectively leads to | |
404 ;; process output not being redisplayed at all because | |
405 ;; redisplay_internal is never called. (That didn't | |
406 ;; work in the old redisplay either.) So, we learn that | |
407 ;; we mustn't call sit-for that way here. But then, we | |
408 ;; have to be cautious not to call sit-for in a widened | |
409 ;; buffer, since this could display hidden parts of that | |
410 ;; buffer. This explains the seemingly weird use of | |
411 ;; save-restriction/widen here. | |
412 | |
413 (with-temp-message (if jit-lock-stealth-verbose | |
414 (concat "JIT stealth lock " | |
415 (buffer-name))) | |
27537
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
416 |
28521
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
417 ;; Perform deferred unfontification, if any. |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
418 (when jit-lock-first-unfontify-pos |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
419 (save-restriction |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
420 (widen) |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
421 (when (and (>= jit-lock-first-unfontify-pos (point-min)) |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
422 (< jit-lock-first-unfontify-pos (point-max))) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
423 ;; If we're in text that matches a complex multi-line |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
424 ;; font-lock pattern, make sure the whole text will be |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
425 ;; redisplayed eventually. |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
426 (when (get-text-property jit-lock-first-unfontify-pos |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
427 'jit-lock-defer-multiline) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
428 (setq jit-lock-first-unfontify-pos |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
429 (or (previous-single-property-change |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
430 jit-lock-first-unfontify-pos |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
431 'jit-lock-defer-multiline) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
432 (point-min)))) |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
433 (with-buffer-prepared-for-jit-lock |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
434 (remove-text-properties |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
435 jit-lock-first-unfontify-pos (point-max) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
436 '(fontified nil jit-lock-defer-multiline nil))) |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
437 (setq jit-lock-first-unfontify-pos (point-max))))) |
28501
030a9790d290
(with-buffer-unmodified): New macro.
Gerd Moellmann <gerd@gnu.org>
parents:
28208
diff
changeset
|
438 |
28521
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
439 ;; In the following code, the `sit-for' calls cause a |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
440 ;; redisplay, so it's required that the |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
441 ;; buffer-modified flag of a buffer that is displayed |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
442 ;; has the right value---otherwise the mode line of |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
443 ;; an unmodified buffer would show a `*'. |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
444 (let (start |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
445 (nice (or jit-lock-stealth-nice 0)) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
446 (point (point-min))) |
28521
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
447 (while (and (setq start |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
448 (jit-lock-stealth-chunk-start point)) |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
449 (sit-for nice)) |
25003 | 450 |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
451 ;; fontify a block. |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
452 (jit-lock-fontify-now start (+ start jit-lock-chunk-size)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
453 ;; If stealth jit-locking is done backwards, this leads to |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
454 ;; excessive O(n^2) refontification. -stef |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
455 ;; (when (>= jit-lock-first-unfontify-pos start) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
456 ;; (setq jit-lock-first-unfontify-pos end)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
457 |
28521
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
458 ;; Wait a little if load is too high. |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
459 (when (and jit-lock-stealth-load |
73d4caf44d53
(with-buffer-unmodified): Use
Gerd Moellmann <gerd@gnu.org>
parents:
28501
diff
changeset
|
460 (> (car (load-average)) jit-lock-stealth-load)) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
461 (sit-for (or jit-lock-stealth-time 30))))))))))))) |
25003 | 462 |
463 | |
464 | |
465 ;;; Deferred fontification. | |
466 | |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
467 (defun jit-lock-deferred-fontify () |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
468 "Fontify what was deferred." |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
469 (when jit-lock-buffers |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
470 ;; Mark the deferred regions back to `fontified = nil' |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
471 (dolist (buffer jit-lock-buffers) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
472 (when (buffer-live-p buffer) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
473 (with-current-buffer buffer |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
474 ;; (message "Jit-Defer %s" (buffer-name)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
475 (with-buffer-prepared-for-jit-lock |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
476 (let ((pos (point-min))) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
477 (while |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
478 (progn |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
479 (when (eq (get-text-property pos 'fontified) 'defer) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
480 (put-text-property |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
481 pos (setq pos (next-single-property-change |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
482 pos 'fontified nil (point-max))) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
483 'fontified nil)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
484 (setq pos (next-single-property-change pos 'fontified))))))))) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
485 (setq jit-lock-buffers nil) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
486 ;; Force fontification of the visible parts. |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
487 (let ((jit-lock-defer-time nil)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
488 ;; (message "Jit-Defer Now") |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
489 (sit-for 0) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
490 ;; (message "Jit-Defer Done") |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
491 ))) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
492 |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
493 |
25003 | 494 (defun jit-lock-after-change (start end old-len) |
495 "Mark the rest of the buffer as not fontified after a change. | |
496 Installed on `after-change-functions'. | |
497 START and END are the start and end of the changed text. OLD-LEN | |
498 is the pre-change length. | |
499 This function ensures that lines following the change will be refontified | |
500 in case the syntax of those lines has changed. Refontification | |
501 will take place when text is fontified stealthily." | |
502 (when jit-lock-mode | |
29827
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
503 (save-excursion |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
504 (with-buffer-prepared-for-jit-lock |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
505 ;; It's important that the `fontified' property be set from the |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
506 ;; beginning of the line, else font-lock will properly change the |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
507 ;; text's face, but the display will have been done already and will |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
508 ;; be inconsistent with the buffer's content. |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
509 (goto-char start) |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
510 (setq start (line-beginning-position)) |
32531
2555cdee2fed
(jit-lock-after-change): If we're in text that
Gerd Moellmann <gerd@gnu.org>
parents:
32485
diff
changeset
|
511 |
37781
67b115277d7d
(jit-lock-after-change): Check the font-lock-multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35429
diff
changeset
|
512 ;; If we're in text that matches a multi-line font-lock pattern, |
67b115277d7d
(jit-lock-after-change): Check the font-lock-multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35429
diff
changeset
|
513 ;; make sure the whole text will be redisplayed. |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
514 ;; I'm not sure this is ever necessary and/or sufficient. -stef |
37781
67b115277d7d
(jit-lock-after-change): Check the font-lock-multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35429
diff
changeset
|
515 (when (get-text-property start 'font-lock-multiline) |
67b115277d7d
(jit-lock-after-change): Check the font-lock-multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35429
diff
changeset
|
516 (setq start (or (previous-single-property-change |
67b115277d7d
(jit-lock-after-change): Check the font-lock-multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35429
diff
changeset
|
517 start 'font-lock-multiline) |
67b115277d7d
(jit-lock-after-change): Check the font-lock-multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35429
diff
changeset
|
518 (point-min)))) |
67b115277d7d
(jit-lock-after-change): Check the font-lock-multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35429
diff
changeset
|
519 |
29827
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
520 ;; Make sure we change at least one char (in case of deletions). |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
521 (setq end (min (max end (1+ start)) (point-max))) |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
522 ;; Request refontification. |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
523 (put-text-property start end 'fontified nil)) |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
524 ;; Mark the change for deferred contextual refontification. |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
525 (when jit-lock-first-unfontify-pos |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
526 (setq jit-lock-first-unfontify-pos |
dd9436a06050
(jit-lock-after-change): Don't assume point is at START.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29799
diff
changeset
|
527 (min jit-lock-first-unfontify-pos start)))))) |
25003 | 528 |
529 (provide 'jit-lock) | |
530 | |
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37781
diff
changeset
|
531 ;;; jit-lock.el ends here |