diff --git a/lisp/paren.el b/lisp/paren.el index a45a08abd3..5c3c85828b 100644 --- a/lisp/paren.el +++ b/lisp/paren.el @@ -114,8 +114,28 @@ show-paren-mode show-paren-delay t #'show-paren-function)) (unless show-paren-mode - (delete-overlay show-paren--overlay) - (delete-overlay show-paren--overlay-1))) + (show-paren--delete-overlays))) + +(defun show-paren--delete-overlays () + (delete-overlay show-paren--overlay) + (delete-overlay show-paren--overlay-1)) + +;;;###autoload +(define-minor-mode show-paren-local-mode + "Toggle `show-paren-mode' only in this buffer." + :variable (buffer-local-value 'show-paren-mode (current-buffer)) + (cond + ((eq show-paren-mode (default-value 'show-paren-mode)) + (unless show-paren-mode + (show-paren--delete-overlays)) + (kill-local-variable 'show-paren-mode)) + ((not (default-value 'show-paren-mode)) + ;; Locally enabled, but globally disabled. + (show-paren-mode 1) ; Setup the timer. + (setq-default show-paren-mode nil) ; But keep it globally disabled. + ) + (t ;; Locally disabled only. + (show-paren--delete-overlays)))) (defun show-paren--unescaped-p (pos) "Determine whether the paren after POS is unescaped."