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.
master
Fanael Linithien 12 years ago
parent a1dd352c1a
commit 9c4950a283
  1. 34
      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 ()

Loading…
Cancel
Save