From 4cffd2213707e403e379ec24934ec37edba3b6d3 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 1 Aug 2006 18:58:18 +0000 Subject: [PATCH] (font-lock-extend-jit-lock-region-after-change): New fun. (font-lock-turn-on-thing-lock): Use it. --- lisp/ChangeLog | 3 +++ lisp/font-lock.el | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0540072e0c7..039c0ad90fc 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2006-08-01 Stefan Monnier + * font-lock.el (font-lock-extend-jit-lock-region-after-change): New fun. + (font-lock-turn-on-thing-lock): Use it. + * longlines.el (longlines-show-region): Make it work on read-only buffers as well. diff --git a/lisp/font-lock.el b/lisp/font-lock.el index 207d3b88f86..ecf54895c1c 100644 --- a/lisp/font-lock.el +++ b/lisp/font-lock.el @@ -893,7 +893,11 @@ The value of this variable is used when Font Lock mode is turned on." (set (make-local-variable 'font-lock-fontified) t) ;; Use jit-lock. (jit-lock-register 'font-lock-fontify-region - (not font-lock-keywords-only)))))) + (not font-lock-keywords-only)) + ;; Tell jit-lock how we extend the region to refontify. + (add-hook 'jit-lock-after-change-extend-region-functions + 'font-lock-extend-jit-lock-region-after-change + nil t))))) (defun font-lock-turn-off-thing-lock () (cond ((and (boundp 'fast-lock-mode) fast-lock-mode) @@ -1096,6 +1100,35 @@ what properties to clear before refontifying a region.") end (progn (goto-char end) (line-beginning-position 2)))) (font-lock-fontify-region beg end))))) +(defvar jit-lock-start) (defvar jit-lock-end) +(defun font-lock-extend-jit-lock-region-after-change (beg end old-len) + (let ((region (font-lock-extend-region beg end old-len))) + (if region + (setq jit-lock-start (min jit-lock-start (car region)) + jit-lock-end (max jit-lock-end (cdr region))) + (save-excursion + (goto-char beg) + (forward-line 0) + (setq jit-lock-start + (min jit-lock-start + (if (and (not (eobp)) + (get-text-property (point) 'font-lock-multiline)) + (or (previous-single-property-change + (point) 'font-lock-multiline) + (point-min)) + (point)))) + (goto-char end) + (forward-line 1) + (setq jit-lock-end + (max jit-lock-end + (if (and (not (bobp)) + (get-text-property (1- (point)) + 'font-lock-multiline)) + (or (next-single-property-change + (1- (point)) 'font-lock-multiline) + (point-max)) + (point)))))))) + (defun font-lock-fontify-block (&optional arg) "Fontify some lines the way `font-lock-fontify-buffer' would. The lines could be a function or paragraph, or a specified number of lines. -- 2.39.2