branch: elpa/rainbow-delimiters
commit 9c4950a28390300bf8003d4d20ee682e02eda608
Author: Fanael Linithien <[email protected]>
Commit: Fanael Linithien <[email protected]>
Properly tear down the mode when changing major mode.
Unpropertize is now run when changing major mode, so stale highlighting
will not carry on from the previous major mode.
---
rainbow-delimiters.el | 34 ++++++++++++++++++++++------------
1 file changed, 22 insertions(+), 12 deletions(-)
diff --git a/rainbow-delimiters.el b/rainbow-delimiters.el
index 0ec8871d92..b8ded8a84a 100644
--- a/rainbow-delimiters.el
+++ b/rainbow-delimiters.el
@@ -581,22 +581,32 @@ Used by jit-lock for dynamic highlighting."
;;; Minor mode:
+(defun rainbow-delimiters-mode-turn-on ()
+ "Set up `rainbow-delimiters-mode'."
+ ;; Flush the ppss cache now in case there's something left in there.
+ (setq rainbow-delimiters-parse-partial-sexp-cache nil)
+ (add-hook 'before-change-functions
'rainbow-delimiters-syntax-ppss-flush-cache t t)
+ (add-hook 'change-major-mode-hook 'rainbow-delimiters-mode-turn-off nil t)
+ (jit-lock-register 'rainbow-delimiters-propertize-region t)
+ ;; Create necessary syntax tables inheriting from current major-mode.
+ (set (make-local-variable 'rainbow-delimiters-syntax-table)
+ (rainbow-delimiters-make-syntax-table (syntax-table))))
+
+(defun rainbow-delimiters-mode-turn-off ()
+ "Tear down `rainbow-delimiters-mode'."
+ (kill-local-variable 'rainbow-delimiters-syntax-table)
+ (rainbow-delimiters-unpropertize-region (point-min) (point-max))
+ (jit-lock-unregister 'rainbow-delimiters-propertize-region)
+ (remove-hook 'change-major-mode-hook 'rainbow-delimiters-mode-turn-off t)
+ (remove-hook 'before-change-functions
'rainbow-delimiters-syntax-ppss-flush-cache t))
+
;;;###autoload
(define-minor-mode rainbow-delimiters-mode
"Highlight nested parentheses, brackets, and braces according to their
depth."
nil "" nil ; No modeline lighter - it's already obvious when the mode is on.
- (if (not rainbow-delimiters-mode)
- (progn
- (remove-hook 'before-change-functions
'rainbow-delimiters-syntax-ppss-flush-cache t)
- (jit-lock-unregister 'rainbow-delimiters-propertize-region)
- (rainbow-delimiters-unpropertize-region (point-min) (point-max)))
- ;; Flush the ppss cache now in case there's something left in there.
- (setq rainbow-delimiters-parse-partial-sexp-cache nil)
- (add-hook 'before-change-functions
'rainbow-delimiters-syntax-ppss-flush-cache t t)
- (jit-lock-register 'rainbow-delimiters-propertize-region t)
- ;; Create necessary syntax tables inheriting from current major-mode.
- (set (make-local-variable 'rainbow-delimiters-syntax-table)
- (rainbow-delimiters-make-syntax-table (syntax-table)))))
+ (if rainbow-delimiters-mode
+ (rainbow-delimiters-mode-turn-on)
+ (rainbow-delimiters-mode-turn-off)))
;;;###autoload
(defun rainbow-delimiters-mode-enable ()