emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/rainbow-delimiters 9c4950a283 060/188: Properly tear down


From: ELPA Syncer
Subject: [nongnu] elpa/rainbow-delimiters 9c4950a283 060/188: Properly tear down the mode when changing major mode.
Date: Sat, 1 Jan 2022 00:58:52 -0500 (EST)

branch: elpa/rainbow-delimiters
commit 9c4950a28390300bf8003d4d20ee682e02eda608
Author: Fanael Linithien <fanael4@gmail.com>
Commit: Fanael Linithien <fanael4@gmail.com>

    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 ()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]