diff lisp/hi-lock.el @ 103056:b6361d016a5a

* hi-lock.el (hi-lock--inhibit-font-lock-hook): New var. (hi-lock-set-pattern, hi-lock-font-lock-hook): Use it (Bug#3068).
author Chong Yidong <cyd@stupidchicken.com>
date Thu, 23 Apr 2009 01:34:54 +0000
parents a9dc0e7c3f2b
children b78ceb253d15
line wrap: on
line diff
--- a/lisp/hi-lock.el	Thu Apr 23 01:34:15 2009 +0000
+++ b/lisp/hi-lock.el	Thu Apr 23 01:34:54 2009 +0000
@@ -564,9 +564,18 @@
            'face-name-history
 	   (cdr hi-lock-face-defaults))))
 
+(defvar hi-lock--inhibit-font-lock-hook nil
+  "Inhibit the action of `hi-lock-font-lock-hook'.
+This is used by `hi-lock-set-pattern'.")
+
 (defun hi-lock-set-pattern (regexp face)
   "Highlight REGEXP with face FACE."
-  (let ((pattern (list regexp (list 0 (list 'quote face) t))))
+  (let ((pattern (list regexp (list 0 (list 'quote face) t)))
+	;; The call to `font-lock-add-keywords' below might disable
+	;; and re-enable font-lock mode.  If so, we don't want
+	;; `hi-lock-font-lock-hook' to run.  This can be removed once
+	;; Bug#635 is fixed. -- cyd
+	(hi-lock--inhibit-font-lock-hook t))
     (unless (member pattern hi-lock-interactive-patterns)
       (font-lock-add-keywords nil (list pattern) t)
       (push pattern hi-lock-interactive-patterns)
@@ -632,11 +641,12 @@
 
 (defun hi-lock-font-lock-hook ()
   "Add hi-lock patterns to font-lock's."
-  (if font-lock-mode
-      (progn
-	(font-lock-add-keywords nil hi-lock-file-patterns t)
-	(font-lock-add-keywords nil hi-lock-interactive-patterns t))
-    (hi-lock-mode -1)))
+  (unless hi-lock--inhibit-font-lock-hook
+    (if font-lock-mode
+	(progn
+	  (font-lock-add-keywords nil hi-lock-file-patterns t)
+	  (font-lock-add-keywords nil hi-lock-interactive-patterns t))
+      (hi-lock-mode -1))))
 
 (defvar hi-lock-string-serialize-hash
   (make-hash-table :test 'equal)