Mercurial > emacs
changeset 26746:d22cd599a91a
(font-lock-default-fontify-region): Fix subtle
off-by-one problem that could force re-fontifying the whole buffer.
(font-lock-remove-keywords): New function.
(font-lock-add-keywords): Use the new function to ensure idempotence.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Tue, 07 Dec 1999 06:31:57 +0000 |
parents | 91304e25926b |
children | a65919d40cd0 |
files | lisp/font-lock.el |
diffstat | 1 files changed, 20 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/font-lock.el Tue Dec 07 06:31:32 1999 +0000 +++ b/lisp/font-lock.el Tue Dec 07 06:31:57 1999 +0000 @@ -753,12 +753,24 @@ ;; Otherwise if Font Lock mode is on, set or add the keywords now. (if (eq append 'set) (setq font-lock-keywords keywords) + (font-lock-remove-keywords keywords) (let ((old (if (eq (car-safe font-lock-keywords) t) (cdr font-lock-keywords) font-lock-keywords))) (setq font-lock-keywords (if append (append old keywords) (append keywords old)))))))) + +;;;###autoload +(defun font-lock-remove-keywords (keywords) + "Remove highlighting KEYWORDS from the current buffer." + (setq font-lock-keywords (copy-list font-lock-keywords)) + (dolist (keyword keywords) + (setq font-lock-keywords + (delete keyword + (delete (font-lock-compile-keyword keyword) + font-lock-keywords))))) + ;;; Global Font Lock mode. @@ -1096,8 +1108,15 @@ ;; check to see if we should expand the beg/end area for ;; proper multiline matches (setq beg (if (get-text-property beg 'font-lock-multiline) + ;; if the text-property is non-nil, (1+ beg) + ;; is valid. We need to use (1+ beg) for the + ;; case where (get-text-property (1- beg)) is nil + ;; in which case we want to keep BEG but + ;; previous-single-property-change will return + ;; the previous change (if any) rather than + ;; the one at BEG. (or (previous-single-property-change - beg 'font-lock-multiline) + (1+ beg) 'font-lock-multiline) (point-min)) beg)) (setq end (or (text-property-any end (point-max)