Mercurial > emacs
annotate lisp/jit-lock.el @ 110410:f2e111723c3a
Merge changes made in Gnus trunk.
Reimplement nnimap, and do tweaks to the rest of the code to support that.
* gnus-int.el (gnus-finish-retrieve-group-infos)
(gnus-retrieve-group-data-early): New functions.
* gnus-range.el (gnus-range-nconcat): New function.
* gnus-start.el (gnus-get-unread-articles): Support early retrieval of
data.
(gnus-read-active-for-groups): Support finishing the early retrieval of
data.
* gnus-sum.el (gnus-summary-move-article): Pass the move-to group name
if the move is internal, so that nnimap can do fast internal moves.
* gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for
nnimap usage.
* nnimap.el: Rewritten.
* nnmail.el (nnmail-inhibit-default-split-group): New internal variable
to allow the mail splitting to not return a default group. This is
useful for nnimap, which will leave unmatched mail in the inbox.
* utf7.el (utf7-encode): Autoload.
Implement shell connection.
* nnimap.el (nnimap-open-shell-stream): New function.
(nnimap-open-connection): Use it.
Get the number of lines by using BODYSTRUCTURE.
(nnimap-transform-headers): Get the number of lines in each message.
(nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the
number of lines.
Not all servers return UIDNEXT. Work past this problem.
Remove junk from end of file.
Fix typo in "bogus" section.
Make capabilties be case-insensitive.
Require cl when compiling.
Don't bug out if the LIST command doesn't have any parameters.
2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change)
* nnimap.el (nnimap-get-groups): Don't bug out if the LIST command
doesn't have any parameters.
(mm-text-html-renderer): Document gnus-article-html.
2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix)
* mm-decode.el (mm-text-html-renderer): Document gnus-article-html.
* dgnushack.el: Define netrc-credentials.
If the user doesn't have a /etc/services, supply some sensible port defaults.
Have `unseen-or-unread' select an unread unseen article first.
(nntp-open-server): Return whether the open was successful or not.
Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ).
Save result so that it doesn't say "failed" all the time.
Add ~/.authinfo to the default, since that's probably most useful for users.
Don't use the "finish" method when we're reading from the agent.
Add some more nnimap-relevant agent stuff to nnagent.el.
* nnimap.el (nnimap-with-process-buffer): Removed.
Revert one line that was changed by mistake in the last checkin.
(nnimap-open-connection): Don't error out when we can't make a connection
nnimap-related changes to avoid bugging out if we can't contact a server.
* gnus-start.el (gnus-get-unread-articles): Don't try to scan groups
from methods that are denied.
* nnimap.el (nnimap-possibly-change-group): Return nil if we can't log
in.
(nnimap-finish-retrieve-group-infos): Make sure we're not waiting for
nothing.
* gnus-sum.el (gnus-select-newsgroup): Indent.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Sat, 18 Sep 2010 10:02:19 +0000 |
parents | 619b4d494232 |
children | 417b1e4d63cd |
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 |
64762
41bb365f41c4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64091
diff
changeset
|
3 ;; Copyright (C) 1998, 2000, 2001, 2002, 2003, 2004, |
106815 | 4 ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
25003 | 5 |
6 ;; Author: Gerd Moellmann <gerd@gnu.org> | |
7 ;; Keywords: faces files | |
110015
280c8ae2476d
Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents:
106815
diff
changeset
|
8 ;; Package: emacs |
25003 | 9 |
10 ;; This file is part of GNU Emacs. | |
11 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
12 ;; GNU Emacs is free software: you can redistribute it and/or modify |
25003 | 13 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
14 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
15 ;; (at your option) any later version. |
25003 | 16 |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79721
diff
changeset
|
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
25003 | 24 |
25 ;;; Commentary: | |
26 | |
27 ;; Just-in-time fontification, triggered by C redisplay code. | |
28 | |
29 ;;; Code: | |
30 | |
31 | |
32 (eval-when-compile | |
72248
a1a0b1eed3a8
(jit-lock-fontify-now): Preserve the buffer's
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72231
diff
changeset
|
33 (require 'cl) |
a1a0b1eed3a8
(jit-lock-fontify-now): Preserve the buffer's
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72231
diff
changeset
|
34 |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
35 (defmacro with-buffer-prepared-for-jit-lock (&rest body) |
25003 | 36 "Execute BODY in current buffer, overriding several variables. |
37 Preserves the `buffer-modified-p' state of the current buffer." | |
53756
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
38 (declare (debug t)) |
110035
619b4d494232
Use with-silent-modifications.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
110015
diff
changeset
|
39 `(let ((inhibit-point-motion-hooks t)) |
619b4d494232
Use with-silent-modifications.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
110015
diff
changeset
|
40 (with-silent-modifications |
619b4d494232
Use with-silent-modifications.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
110015
diff
changeset
|
41 ,@body)))) |
25003 | 42 |
43 ;;; Customization. | |
44 | |
53709
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
45 (defgroup jit-lock nil |
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
46 "Font Lock support mode to fontify just-in-time." |
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
47 :version "21.1" |
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
48 :group 'font-lock) |
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
49 |
25003 | 50 (defcustom jit-lock-chunk-size 500 |
100171 | 51 "Jit-lock fontifies chunks of at most this many characters at a time. |
67923
ea28d90f5964
(jit-lock-chunk-size): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
66579
diff
changeset
|
52 |
ea28d90f5964
(jit-lock-chunk-size): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents:
66579
diff
changeset
|
53 This variable controls both display-time and stealth fontification." |
25003 | 54 :type 'integer |
55 :group 'jit-lock) | |
56 | |
57 | |
76291
7d2b5814cd4e
* NEWS (fontification): Mention that the new default for
David Kastrup <dak@gnu.org>
parents:
75347
diff
changeset
|
58 (defcustom jit-lock-stealth-time nil |
100171 | 59 "Time in seconds to wait before beginning stealth fontification. |
25003 | 60 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
|
61 If nil, stealth fontification is never performed. |
25003 | 62 |
63 The value of this variable is used when JIT Lock mode is turned on." | |
64 :type '(choice (const :tag "never" nil) | |
76291
7d2b5814cd4e
* NEWS (fontification): Mention that the new default for
David Kastrup <dak@gnu.org>
parents:
75347
diff
changeset
|
65 (number :tag "seconds" :value 16)) |
25003 | 66 :group 'jit-lock) |
67 | |
68 | |
61746
86d97731e558
(jit-lock-stealth-time): Change default value to 16.
Eli Zaretskii <eliz@gnu.org>
parents:
60461
diff
changeset
|
69 (defcustom jit-lock-stealth-nice 0.5 |
100171 | 70 "Time in seconds to pause between chunks of stealth fontification. |
25003 | 71 Each iteration of stealth fontification is separated by this amount of time, |
72 thus reducing the demand that stealth fontification makes on the system. | |
73 If nil, means stealth fontification is never paused. | |
74 To reduce machine load during stealth fontification, at the cost of stealth | |
75 taking longer to fontify, you could increase the value of this variable. | |
76 See also `jit-lock-stealth-load'." | |
77 :type '(choice (const :tag "never" nil) | |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47725
diff
changeset
|
78 (number :tag "seconds")) |
25003 | 79 :group 'jit-lock) |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47725
diff
changeset
|
80 |
25003 | 81 |
82 (defcustom jit-lock-stealth-load | |
83 (if (condition-case nil (load-average) (error)) 200) | |
100171 | 84 "Load in percentage above which stealth fontification is suspended. |
25003 | 85 Stealth fontification pauses when the system short-term load average (as |
86 returned by the function `load-average' if supported) goes above this level, | |
87 thus reducing the demand that stealth fontification makes on the system. | |
88 If nil, means stealth fontification is never suspended. | |
89 To reduce machine load during stealth fontification, at the cost of stealth | |
90 taking longer to fontify, you could reduce the value of this variable. | |
91 See also `jit-lock-stealth-nice'." | |
92 :type (if (condition-case nil (load-average) (error)) | |
93 '(choice (const :tag "never" nil) | |
94 (integer :tag "load")) | |
95 '(const :format "%t: unsupported\n" nil)) | |
96 :group 'jit-lock) | |
97 | |
98 | |
99 (defcustom jit-lock-stealth-verbose nil | |
100171 | 100 "If non-nil, means stealth fontification should show status messages." |
25003 | 101 :type 'boolean |
102 :group 'jit-lock) | |
103 | |
104 | |
53755
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
105 (defvaralias 'jit-lock-defer-contextually 'jit-lock-contextually) |
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
106 (defcustom jit-lock-contextually 'syntax-driven |
100171 | 107 "If non-nil, means fontification should be syntactically true. |
53755
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
108 If nil, means fontification occurs only on those lines modified. This |
25003 | 109 means where modification on a line causes syntactic change on subsequent lines, |
110 those subsequent lines are not refontified to reflect their new context. | |
53755
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
111 If t, means fontification occurs on those lines modified and all |
25003 | 112 subsequent lines. This means those subsequent lines are refontified to reflect |
53756
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
113 their new syntactic context, after `jit-lock-context-time' seconds. |
53755
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
114 If any other value, e.g., `syntax-driven', means syntactically true |
25003 | 115 fontification occurs only if syntactic fontification is performed using the |
116 buffer mode's syntax table, i.e., only if `font-lock-keywords-only' is nil. | |
117 | |
118 The value of this variable is used when JIT Lock mode is turned on." | |
119 :type '(choice (const :tag "never" nil) | |
120 (const :tag "always" t) | |
121 (other :tag "syntax-driven" syntax-driven)) | |
122 :group 'jit-lock) | |
123 | |
53756
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
124 (defcustom jit-lock-context-time 0.5 |
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
125 "Idle time after which text is contextually refontified, if applicable." |
62531
c905fcf5e3d9
Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents:
61746
diff
changeset
|
126 :type '(number :tag "seconds") |
c905fcf5e3d9
Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents:
61746
diff
changeset
|
127 :group 'jit-lock) |
c905fcf5e3d9
Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents:
61746
diff
changeset
|
128 |
41502
828432e1e1d4
Modify a commented-out non-nil value of jit-lock-defer-time, to
Eli Zaretskii <eliz@gnu.org>
parents:
41336
diff
changeset
|
129 (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
|
130 "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
|
131 If nil, fontification is not deferred." |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
132 :group 'jit-lock |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
133 :type '(choice (const :tag "never" nil) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
134 (number :tag "seconds"))) |
25003 | 135 |
136 ;;; Variables that are not customizable. | |
137 | |
138 (defvar jit-lock-mode nil | |
139 "Non-nil means Just-in-time Lock mode is active.") | |
140 (make-variable-buffer-local 'jit-lock-mode) | |
141 | |
32152
00f38571e2b1
(with-buffer-unmodified): Use unwind-protect.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29827
diff
changeset
|
142 (defvar jit-lock-functions nil |
00f38571e2b1
(with-buffer-unmodified): Use unwind-protect.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29827
diff
changeset
|
143 "Functions to do the actual fontification. |
00f38571e2b1
(with-buffer-unmodified): Use unwind-protect.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29827
diff
changeset
|
144 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
|
145 (make-variable-buffer-local 'jit-lock-functions) |
25003 | 146 |
53709
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
147 (defvar jit-lock-context-unfontify-pos nil |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
148 "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
|
149 If nil, contextual fontification is disabled.") |
53709
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
150 (make-variable-buffer-local 'jit-lock-context-unfontify-pos) |
25003 | 151 |
152 | |
153 (defvar jit-lock-stealth-timer nil | |
154 "Timer for stealth fontification in Just-in-time Lock mode.") | |
72508
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
155 (defvar jit-lock-stealth-repeat-timer nil |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
156 "Timer for repeated stealth fontification in Just-in-time Lock mode.") |
53756
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
157 (defvar jit-lock-context-timer nil |
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
158 "Timer for context 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
|
159 (defvar jit-lock-defer-timer nil |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
160 "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
|
161 |
53709
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
162 (defvar jit-lock-defer-buffers nil |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
163 "List of buffers with pending deferred fontification.") |
72508
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
164 (defvar jit-lock-stealth-buffers nil |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
165 "List of buffers that are being fontified stealthily.") |
25003 | 166 |
167 ;;; JIT lock mode | |
168 | |
169 (defun jit-lock-mode (arg) | |
170 "Toggle Just-in-time Lock mode. | |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
171 Turn Just-in-time Lock mode on if and only if ARG is non-nil. |
25003 | 172 Enable it automatically by customizing group `font-lock'. |
173 | |
174 When Just-in-time Lock mode is enabled, fontification is different in the | |
175 following ways: | |
176 | |
177 - Demand-driven buffer fontification triggered by Emacs C code. | |
178 This means initial fontification of the whole buffer does not occur. | |
179 Instead, fontification occurs when necessary, such as when scrolling | |
180 through the buffer would otherwise reveal unfontified areas. This is | |
181 useful if buffer fontification is too slow for large buffers. | |
182 | |
183 - Stealthy buffer fontification if `jit-lock-stealth-time' is non-nil. | |
184 This means remaining unfontified areas of buffers are fontified if Emacs has | |
185 been idle for `jit-lock-stealth-time' seconds, while Emacs remains idle. | |
186 This is useful if any buffer has any deferred fontification. | |
187 | |
53755
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
188 - Deferred context fontification if `jit-lock-contextually' is |
25003 | 189 non-nil. This means fontification updates the buffer corresponding to |
53756
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
190 true syntactic context, after `jit-lock-context-time' seconds of Emacs |
25003 | 191 idle time, while Emacs remains idle. Otherwise, fontification occurs |
192 on modified lines only, and subsequent lines can remain fontified | |
193 corresponding to previous syntactic contexts. This is useful where | |
194 strings or comments span lines. | |
195 | |
196 Stealth fontification only occurs while the system remains unloaded. | |
197 If the system load rises above `jit-lock-stealth-load' percent, stealth | |
198 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
|
199 the variable `jit-lock-stealth-nice'." |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
200 (setq jit-lock-mode arg) |
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
201 (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
|
202 jit-lock-mode |
25003 | 203 |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
204 ;; Mark the buffer for refontification. |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
205 (jit-lock-refontify) |
29413
ce16b083b459
(jit-lock-saved-fontify-buffer-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29288
diff
changeset
|
206 |
25003 | 207 ;; 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
|
208 (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
|
209 (setq jit-lock-stealth-timer |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
210 (run-with-idle-timer jit-lock-stealth-time t |
25003 | 211 'jit-lock-stealth-fontify))) |
212 | |
72508
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
213 ;; Create, but do not activate, the idle timer for repeated |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
214 ;; stealth fontification. |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
215 (when (and jit-lock-stealth-time (null jit-lock-stealth-repeat-timer)) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
216 (setq jit-lock-stealth-repeat-timer (timer-create)) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
217 (timer-set-function jit-lock-stealth-repeat-timer |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
218 'jit-lock-stealth-fontify '(t))) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
219 |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
220 ;; Init deferred fontification timer. |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
221 (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
|
222 (setq jit-lock-defer-timer |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
223 (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
|
224 'jit-lock-deferred-fontify))) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
225 |
53709
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
226 ;; Initialize contextual fontification if requested. |
53755
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
227 (when (eq jit-lock-contextually t) |
53756
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
228 (unless jit-lock-context-timer |
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
229 (setq jit-lock-context-timer |
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
230 (run-with-idle-timer jit-lock-context-time t |
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
231 'jit-lock-context-fontify))) |
53709
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
232 (setq jit-lock-context-unfontify-pos |
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
233 (or jit-lock-context-unfontify-pos (point-max)))) |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
234 |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
235 ;; Setup our hooks. |
29799
baa52c9029f6
(with-buffer-prepared-for-jit-lock):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29708
diff
changeset
|
236 (add-hook 'after-change-functions 'jit-lock-after-change nil t) |
25003 | 237 (add-hook 'fontification-functions 'jit-lock-function)) |
238 | |
239 ;; Turn Just-in-time Lock mode off. | |
240 (t | |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
241 ;; Cancel our idle timers. |
53756
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
242 (when (and (or jit-lock-stealth-timer jit-lock-defer-timer |
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
243 jit-lock-context-timer) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
244 ;; 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
|
245 (not (catch 'found |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
246 (dolist (buf (buffer-list)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
247 (with-current-buffer buf |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
248 (when jit-lock-mode (throw 'found t))))))) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
249 (when jit-lock-stealth-timer |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
250 (cancel-timer jit-lock-stealth-timer) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
251 (setq jit-lock-stealth-timer nil)) |
53756
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
252 (when jit-lock-context-timer |
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
253 (cancel-timer jit-lock-context-timer) |
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
254 (setq jit-lock-context-timer nil)) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
255 (when jit-lock-defer-timer |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
256 (cancel-timer jit-lock-defer-timer) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
257 (setq jit-lock-defer-timer nil))) |
25003 | 258 |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
259 ;; Remove hooks. |
29413
ce16b083b459
(jit-lock-saved-fontify-buffer-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29288
diff
changeset
|
260 (remove-hook 'after-change-functions 'jit-lock-after-change t) |
25003 | 261 (remove-hook 'fontification-functions 'jit-lock-function)))) |
262 | |
32181
f3afd1ff75a8
(jit-lock-mode): Use jit-lock-defer-contextually
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32157
diff
changeset
|
263 (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
|
264 "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
|
265 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
|
266 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
|
267 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
|
268 (add-hook 'jit-lock-functions fun nil t) |
53755
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
269 (when (and contextual jit-lock-contextually) |
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
270 (set (make-local-variable 'jit-lock-contextually) t)) |
32156
b3596a2daf42
(jit-lock-register, jit-lock-unregister): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32152
diff
changeset
|
271 (jit-lock-mode t)) |
b3596a2daf42
(jit-lock-register, jit-lock-unregister): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32152
diff
changeset
|
272 |
b3596a2daf42
(jit-lock-register, jit-lock-unregister): New functions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32152
diff
changeset
|
273 (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
|
274 "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
|
275 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
|
276 (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
|
277 (unless jit-lock-functions (jit-lock-mode nil))) |
25003 | 278 |
29413
ce16b083b459
(jit-lock-saved-fontify-buffer-function): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29288
diff
changeset
|
279 ;; 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
|
280 ;; 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
|
281 ;; 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
|
282 ;; 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
|
283 (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
|
284 "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
|
285 (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
|
286 (save-restriction |
f37b857741b1
(jit-lock-mode): Force jit-refontify when turned on.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29413
diff
changeset
|
287 (widen) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
288 (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
|
289 'fontified nil)))) |
25003 | 290 |
291 ;;; On demand fontification. | |
292 | |
293 (defun jit-lock-function (start) | |
294 "Fontify current buffer starting at position START. | |
295 This function is added to `fontification-functions' when `jit-lock-mode' | |
296 is active." | |
66534
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
297 (when (and jit-lock-mode (not memory-full)) |
69599
0b906e4eb64e
(jit-lock-function): Check for the actual defer-timer rather than just
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69499
diff
changeset
|
298 (if (null jit-lock-defer-timer) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
299 ;; No deferral. |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
300 (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
|
301 ;; Record the buffer for later fontification. |
53709
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
302 (unless (memq (current-buffer) jit-lock-defer-buffers) |
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
303 (push (current-buffer) jit-lock-defer-buffers)) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
304 ;; 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
|
305 ;; 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
|
306 (with-buffer-prepared-for-jit-lock |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
307 (put-text-property start |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
308 (next-single-property-change |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
309 start 'fontified nil |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
310 (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
|
311 'fontified 'defer))))) |
32305
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
312 |
ca771411a7fd
Don't require font-lock any more.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32181
diff
changeset
|
313 (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
|
314 "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
|
315 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
|
316 (with-buffer-prepared-for-jit-lock |
28501
030a9790d290
(with-buffer-unmodified): New macro.
Gerd Moellmann <gerd@gnu.org>
parents:
28208
diff
changeset
|
317 (save-excursion |
47725
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
318 (unless start (setq start (point-min))) |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
319 (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
|
320 ;; 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
|
321 ;; 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
|
322 ;; 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
|
323 ;; `parse-partial-sexp' in function |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
324 ;; `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
|
325 ;; 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
|
326 ;; `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
|
327 ;; take a long time in a large buffer. |
72231
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
328 (let ((orig-start start) next) |
47725
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
329 (save-match-data |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
330 ;; 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
|
331 ;; 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
|
332 ;; before `end' that has already been fontified. |
73135
365ddb09e339
(jit-lock-fontify-now): Don't fontify the empty text.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72865
diff
changeset
|
333 (while (and start (< start end)) |
47725
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
334 ;; Determine the end of this chunk. |
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
335 (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
|
336 end)) |
25395
9d8fff117316
(jit-lock-function): Extend the fontified range
Gerd Moellmann <gerd@gnu.org>
parents:
25341
diff
changeset
|
337 |
47725
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
338 ;; 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
|
339 ;; 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
|
340 ;; 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
|
341 ;; 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
|
342 ;; 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
|
343 ;; 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
|
344 (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
|
345 (goto-char start) (setq start (line-beginning-position)) |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47725
diff
changeset
|
346 |
66151
934d10a9685c
(jit-lock-fontify-now): Move jit-lock-context-unfontify-pos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
347 ;; Make sure the contextual refontification doesn't re-refontify |
934d10a9685c
(jit-lock-fontify-now): Move jit-lock-context-unfontify-pos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
348 ;; what's already been refontified. |
934d10a9685c
(jit-lock-fontify-now): Move jit-lock-context-unfontify-pos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
349 (when (and jit-lock-context-unfontify-pos |
934d10a9685c
(jit-lock-fontify-now): Move jit-lock-context-unfontify-pos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
350 (< jit-lock-context-unfontify-pos next) |
66439
52c79134b5d5
(jit-lock-fontify-now): Be careful not to skip multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66156
diff
changeset
|
351 (>= jit-lock-context-unfontify-pos start) |
52c79134b5d5
(jit-lock-fontify-now): Be careful not to skip multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66156
diff
changeset
|
352 ;; Don't move boundary forward if we have to |
52c79134b5d5
(jit-lock-fontify-now): Be careful not to skip multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66156
diff
changeset
|
353 ;; refontify previous text. Otherwise, we risk moving |
52c79134b5d5
(jit-lock-fontify-now): Be careful not to skip multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66156
diff
changeset
|
354 ;; it past the end of the multiline property and thus |
52c79134b5d5
(jit-lock-fontify-now): Be careful not to skip multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66156
diff
changeset
|
355 ;; forget about this multiline region altogether. |
52c79134b5d5
(jit-lock-fontify-now): Be careful not to skip multiline
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
66156
diff
changeset
|
356 (not (get-text-property start 'jit-lock-defer-multiline))) |
66151
934d10a9685c
(jit-lock-fontify-now): Move jit-lock-context-unfontify-pos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
357 (setq jit-lock-context-unfontify-pos next)) |
934d10a9685c
(jit-lock-fontify-now): Move jit-lock-context-unfontify-pos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
358 |
47725
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
359 ;; 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
|
360 ;; 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
|
361 ;; 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
|
362 (put-text-property start next 'fontified t) |
53755
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
363 (condition-case err |
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
364 (run-hook-with-args 'jit-lock-functions start next) |
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
365 ;; If the user quits (which shouldn't happen in normal on-the-fly |
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
366 ;; jit-locking), make sure the fontification will be performed |
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
367 ;; before displaying the block again. |
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
368 (quit (put-text-property start next 'fontified nil) |
9bd36e762e48
(jit-lock-stealth-fontify): Allow quit.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53709
diff
changeset
|
369 (funcall 'signal (car err) (cdr err)))) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
370 |
72231
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
371 ;; The redisplay engine has already rendered the buffer up-to |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
372 ;; `orig-start' and won't notice if the above jit-lock-functions |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
373 ;; changed the appearance of any part of the buffer prior |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
374 ;; to that. So if `start' is before `orig-start', we need to |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
375 ;; cause a new redisplay cycle after this one so that any changes |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
376 ;; are properly reflected on screen. |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
377 ;; To make such repeated redisplay happen less often, we can |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
378 ;; eagerly extend the refontified region with |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
379 ;; jit-lock-after-change-extend-region-functions. |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
380 (when (< start orig-start) |
73136
db20c4c0a56f
(jit-lock-force-redisplay): Rename from jit-lock-fontify-again.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73135
diff
changeset
|
381 (run-with-timer 0 nil 'jit-lock-force-redisplay |
72865
1ba9cc2a8b76
(jit-lock-fontify-again): New function.
Kim F. Storm <storm@cua.dk>
parents:
72508
diff
changeset
|
382 (current-buffer) start orig-start)) |
72231
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
383 |
47725
2cf6194833de
(jit-lock-fontify-now): Don't widen.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
41502
diff
changeset
|
384 ;; 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
|
385 (setq start (text-property-any next end 'fontified nil)))))))) |
25003 | 386 |
73136
db20c4c0a56f
(jit-lock-force-redisplay): Rename from jit-lock-fontify-again.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73135
diff
changeset
|
387 (defun jit-lock-force-redisplay (buf start end) |
db20c4c0a56f
(jit-lock-force-redisplay): Rename from jit-lock-fontify-again.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73135
diff
changeset
|
388 "Force the display engine to re-render buffer BUF from START to END." |
db20c4c0a56f
(jit-lock-force-redisplay): Rename from jit-lock-fontify-again.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73135
diff
changeset
|
389 (with-current-buffer buf |
db20c4c0a56f
(jit-lock-force-redisplay): Rename from jit-lock-fontify-again.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73135
diff
changeset
|
390 (with-buffer-prepared-for-jit-lock |
db20c4c0a56f
(jit-lock-force-redisplay): Rename from jit-lock-fontify-again.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73135
diff
changeset
|
391 ;; Don't cause refontification (it's already been done), but just do |
db20c4c0a56f
(jit-lock-force-redisplay): Rename from jit-lock-fontify-again.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73135
diff
changeset
|
392 ;; some random buffer change, so as to force redisplay. |
73137 | 393 (put-text-property start end 'fontified t)))) |
72865
1ba9cc2a8b76
(jit-lock-fontify-again): New function.
Kim F. Storm <storm@cua.dk>
parents:
72508
diff
changeset
|
394 |
1ba9cc2a8b76
(jit-lock-fontify-again): New function.
Kim F. Storm <storm@cua.dk>
parents:
72508
diff
changeset
|
395 |
25003 | 396 |
397 ;;; Stealth fontification. | |
398 | |
399 (defsubst jit-lock-stealth-chunk-start (around) | |
102971
dfda66dfca92
* jit-lock.el (jit-lock-stealth-chunk-start): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
102043
diff
changeset
|
400 "Return the start of the next chunk to fontify around position AROUND. |
25003 | 401 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
|
402 (if (zerop (buffer-size)) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
403 nil |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
404 (save-restriction |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
405 (widen) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
406 (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
|
407 (prev (previous-single-property-change around 'fontified)) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
408 (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
|
409 'fontified)) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
410 (start (cond |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
411 ((null prev) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
412 ;; There is no property change between AROUND |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
413 ;; 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
|
414 ;; 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
|
415 ;; fontified, otherwise nothing is fontified. |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
416 (if (eq prop t) |
27537
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
417 nil |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
418 (max (point-min) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
419 (- around (/ jit-lock-chunk-size 2))))) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
420 ((eq prop t) |
27537
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
421 ;; 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
|
422 ;; text containing AROUND. Start fontifying a |
27537
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
423 ;; 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
|
424 ;; region in front of that. |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
425 (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
|
426 (point-min)) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
427 (- prev jit-lock-chunk-size))) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
428 (t |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
429 ;; 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
|
430 ;; text containing AROUND. Start at PREV or |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
431 ;; 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
|
432 ;; nearer. |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
433 (max prev (- around jit-lock-chunk-size))))) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
434 (result (cond ((null start) next) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
435 ((null next) start) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
436 ((< (- around start) (- next around)) start) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
437 (t next)))) |
d04b7ce72b4a
(jit-lock-function): Widen before calculating end
Gerd Moellmann <gerd@gnu.org>
parents:
25395
diff
changeset
|
438 result)))) |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47725
diff
changeset
|
439 |
72508
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
440 (defun jit-lock-stealth-fontify (&optional repeat) |
25003 | 441 "Fontify buffers stealthily. |
72508
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
442 This function is called repeatedly after Emacs has become idle for |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
443 `jit-lock-stealth-time' seconds. Optional argument REPEAT is expected |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
444 non-nil in a repeated invocation of this function." |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
445 ;; Cancel timer for repeated invocations. |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
446 (unless repeat |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
447 (cancel-timer jit-lock-stealth-repeat-timer)) |
25003 | 448 (unless (or executing-kbd-macro |
66534
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
449 memory-full |
72508
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
450 (window-minibuffer-p (selected-window)) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
451 ;; For first invocation set up `jit-lock-stealth-buffers'. |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
452 ;; In repeated invocations it's already been set up. |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
453 (null (if repeat |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
454 jit-lock-stealth-buffers |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
455 (setq jit-lock-stealth-buffers (buffer-list))))) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
456 (let ((buffer (car jit-lock-stealth-buffers)) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
457 (delay 0) |
25003 | 458 minibuffer-auto-raise |
72508
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
459 message-log-max |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
460 start) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
461 (if (and jit-lock-stealth-load |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
462 (> (car (load-average)) jit-lock-stealth-load)) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
463 ;; Wait a little if load is too high. |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
464 (setq delay jit-lock-stealth-time) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
465 (if (buffer-live-p buffer) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
466 (with-current-buffer buffer |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
467 (if (and jit-lock-mode |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
468 (setq start (jit-lock-stealth-chunk-start (point)))) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
469 ;; Fontify one block of at most `jit-lock-chunk-size' |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
470 ;; characters. |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
471 (with-temp-message (if jit-lock-stealth-verbose |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
472 (concat "JIT stealth lock " |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
473 (buffer-name))) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
474 (jit-lock-fontify-now start |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
475 (+ start jit-lock-chunk-size)) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
476 ;; Run again after `jit-lock-stealth-nice' seconds. |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
477 (setq delay (or jit-lock-stealth-nice 0))) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
478 ;; Nothing to fontify here. Remove this buffer from |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
479 ;; `jit-lock-stealth-buffers' and run again immediately. |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
480 (setq jit-lock-stealth-buffers (cdr jit-lock-stealth-buffers)))) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
481 ;; Buffer is no longer live. Remove it from |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
482 ;; `jit-lock-stealth-buffers' and run again immediately. |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
483 (setq jit-lock-stealth-buffers (cdr jit-lock-stealth-buffers)))) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
484 ;; Call us again. |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
485 (when jit-lock-stealth-buffers |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
486 (timer-set-idle-time jit-lock-stealth-repeat-timer (current-idle-time)) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
487 (timer-inc-time jit-lock-stealth-repeat-timer delay) |
5d642f9eff22
* emacs-lisp/timer.el (timer-set-idle-time, run-with-idle-timer):
Chong Yidong <cyd@stupidchicken.com>
parents:
72431
diff
changeset
|
488 (timer-activate-when-idle jit-lock-stealth-repeat-timer t))))) |
25003 | 489 |
490 | |
491 ;;; Deferred fontification. | |
492 | |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
493 (defun jit-lock-deferred-fontify () |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
494 "Fontify what was deferred." |
66534
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
495 (when (and jit-lock-defer-buffers (not memory-full)) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
496 ;; Mark the deferred regions back to `fontified = nil' |
53709
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
497 (dolist (buffer jit-lock-defer-buffers) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
498 (when (buffer-live-p buffer) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
499 (with-current-buffer buffer |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
500 ;; (message "Jit-Defer %s" (buffer-name)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
501 (with-buffer-prepared-for-jit-lock |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
502 (let ((pos (point-min))) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
503 (while |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
504 (progn |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
505 (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
|
506 (put-text-property |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
507 pos (setq pos (next-single-property-change |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
508 pos 'fontified nil (point-max))) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
509 'fontified nil)) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
510 (setq pos (next-single-property-change pos 'fontified))))))))) |
53709
f790b749630e
(jit-lock): Move group declaration from font-lock.el.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
52401
diff
changeset
|
511 (setq jit-lock-defer-buffers nil) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
512 ;; Force fontification of the visible parts. |
69599
0b906e4eb64e
(jit-lock-function): Check for the actual defer-timer rather than just
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69499
diff
changeset
|
513 (let ((jit-lock-defer-timer nil)) |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
514 ;; (message "Jit-Defer Now") |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
515 (sit-for 0) |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
516 ;; (message "Jit-Defer Done") |
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
517 ))) |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47725
diff
changeset
|
518 |
41336
36e754afaf7a
(jit-lock-defer-time): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38436
diff
changeset
|
519 |
53756
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
520 (defun jit-lock-context-fontify () |
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
521 "Refresh fontification to take new context into account." |
66534
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
522 (unless memory-full |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
523 (dolist (buffer (buffer-list)) |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
524 (with-current-buffer buffer |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
525 (when jit-lock-context-unfontify-pos |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
526 ;; (message "Jit-Context %s" (buffer-name)) |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
527 (save-restriction |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
528 (widen) |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
529 (when (and (>= jit-lock-context-unfontify-pos (point-min)) |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
530 (< jit-lock-context-unfontify-pos (point-max))) |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
531 ;; If we're in text that matches a complex multi-line |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
532 ;; font-lock pattern, make sure the whole text will be |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
533 ;; redisplayed eventually. |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
534 ;; Despite its name, we treat jit-lock-defer-multiline here |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
535 ;; rather than in jit-lock-defer since it has to do with multiple |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
536 ;; lines, i.e. with context. |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
537 (when (get-text-property jit-lock-context-unfontify-pos |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
538 'jit-lock-defer-multiline) |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
539 (setq jit-lock-context-unfontify-pos |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
540 (or (previous-single-property-change |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
541 jit-lock-context-unfontify-pos |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
542 'jit-lock-defer-multiline) |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
543 (point-min)))) |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
544 (with-buffer-prepared-for-jit-lock |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
545 ;; Force contextual refontification. |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
546 (remove-text-properties |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
547 jit-lock-context-unfontify-pos (point-max) |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
548 '(fontified nil jit-lock-defer-multiline nil))) |
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
549 (setq jit-lock-context-unfontify-pos (point-max))))))))) |
53756
bbadbe04fc3d
(jit-lock-context-time, jit-lock-context-timer): New var.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
53755
diff
changeset
|
550 |
72231
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
551 (defvar jit-lock-start) (defvar jit-lock-end) ; Dynamically scoped variables. |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
552 (defvar jit-lock-after-change-extend-region-functions nil |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
553 "Hook that can extend the text to refontify after a change. |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
554 This is run after every buffer change. The functions are called with |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
555 the three arguments of `after-change-functions': START END OLD-LEN. |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
556 The extended region to refontify is returned indirectly by modifying |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
557 the variables `jit-lock-start' and `jit-lock-end'. |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
558 |
72431
f13889b47192
(jit-lock-fontify-now): Protect the modified status of the right buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72248
diff
changeset
|
559 Note that extending the region this way is not strictly necessary, except |
f13889b47192
(jit-lock-fontify-now): Protect the modified status of the right buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72248
diff
changeset
|
560 that the nature of the redisplay code tends to otherwise leave some of |
f13889b47192
(jit-lock-fontify-now): Protect the modified status of the right buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72248
diff
changeset
|
561 the rehighlighted text displayed with the old highlight until the next |
f13889b47192
(jit-lock-fontify-now): Protect the modified status of the right buffer.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
72248
diff
changeset
|
562 redisplay (see comment about repeated redisplay in `jit-lock-fontify-now').") |
72231
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
563 |
25003 | 564 (defun jit-lock-after-change (start end old-len) |
565 "Mark the rest of the buffer as not fontified after a change. | |
566 Installed on `after-change-functions'. | |
567 START and END are the start and end of the changed text. OLD-LEN | |
568 is the pre-change length. | |
569 This function ensures that lines following the change will be refontified | |
570 in case the syntax of those lines has changed. Refontification | |
571 will take place when text is fontified stealthily." | |
66534
364aad458607
(jit-lock-function, jit-lock-stealth-fontify)
Richard M. Stallman <rms@gnu.org>
parents:
66439
diff
changeset
|
572 (when (and jit-lock-mode (not memory-full)) |
72231
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
573 (let ((jit-lock-start start) |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
574 (jit-lock-end end)) |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
575 (with-buffer-prepared-for-jit-lock |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
576 (run-hook-with-args 'jit-lock-after-change-extend-region-functions |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
577 start end old-len) |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
578 ;; Make sure we change at least one char (in case of deletions). |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
579 (setq jit-lock-end (min (max jit-lock-end (1+ start)) (point-max))) |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
580 ;; Request refontification. |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
581 (put-text-property jit-lock-start jit-lock-end 'fontified nil)) |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
582 ;; Mark the change for deferred contextual refontification. |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
583 (when jit-lock-context-unfontify-pos |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
584 (setq jit-lock-context-unfontify-pos |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
585 ;; Here we use `start' because nothing guarantees that the |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
586 ;; text between start and end will be otherwise refontified: |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
587 ;; usually it will be refontified by virtue of being |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
588 ;; displayed, but if it's outside of any displayed area in the |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
589 ;; buffer, only jit-lock-context-* will re-fontify it. |
3ca9684795fe
(jit-lock-fontify-now): Cause a second redisplay if needed.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69599
diff
changeset
|
590 (min jit-lock-context-unfontify-pos jit-lock-start)))))) |
49597
e88404e8f2cf
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
47725
diff
changeset
|
591 |
25003 | 592 (provide 'jit-lock) |
593 | |
66151
934d10a9685c
(jit-lock-fontify-now): Move jit-lock-context-unfontify-pos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
64762
diff
changeset
|
594 ;; arch-tag: 56b5de6e-f581-453b-bb97-49c39372ff9e |
38436
b174db545cfd
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
37781
diff
changeset
|
595 ;;; jit-lock.el ends here |