From 2dc20ca8004a628dbce63749e286d13bcfb2e703 Mon Sep 17 00:00:00 2001
From: "Richard M. Stallman" <rms@gnu.org>
Date: Tue, 20 Aug 2002 17:22:30 +0000
Subject: [PATCH] (font-lock-change-mode): New function. (font-lock-mode): Use
 font-lock-change-mode instead of font-lock-unfontify-buffer.
 (font-lock-maximum-size, font-lock-verbose): Add defvars.

---
 lisp/font-core.el | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/lisp/font-core.el b/lisp/font-core.el
index 6b97afd3274..0894380eb76 100644
--- a/lisp/font-core.el
+++ b/lisp/font-core.el
@@ -25,6 +25,9 @@
 
 ;;; Code:
 
+(defvar font-lock-maximum-size)
+(defvar font-lock-verbose)
+
 ;; This variable is used by mode packages that support Font Lock mode by
 ;; defining their own keywords to use for `font-lock-keywords'.  (The mode
 ;; command should make it buffer-local and set it to provide the set up.)
@@ -209,8 +212,19 @@ your own function which is called when `font-lock-mode' is toggled via
   (funcall font-lock-function font-lock-mode)
   ;; Arrange to unfontify this buffer if we change major mode later.
   (if font-lock-mode
-      (add-hook 'change-major-mode-hook 'font-lock-unfontify-buffer nil t)
-    (remove-hook 'change-major-mode-hook 'font-lock-unfontify-buffer t)))
+      (add-hook 'change-major-mode-hook 'font-lock-change-mode nil t)
+    (remove-hook 'change-major-mode-hook 'font-lock-change-mode t)))
+
+;; Get rid of fontification for the old major mode.
+;; We do this when changing major modes.
+(defun font-lock-change-mode ()
+  (let ((inhibit-read-only t))
+    (save-restriction
+      (widen)
+      (remove-list-of-text-properties
+       (point-min) (point-max) '(font-lock-face))))
+  (when font-lock-defaults
+    (font-lock-unfontify-buffer)))
 
 (defun font-lock-default-function (font-lock-mode)
   ;; Turn on Font Lock mode.
-- 
2.39.5