[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master d37dcfa: New minor mode 'show-paren-local-mode'
From: |
Dmitry Gutov |
Subject: |
master d37dcfa: New minor mode 'show-paren-local-mode' |
Date: |
Fri, 10 Sep 2021 22:12:32 -0400 (EDT) |
branch: master
commit d37dcfa30ff20aa2d5b0d6c2e43ef5930e72e375
Author: Dmitry Gutov <dgutov@yandex.ru>
Commit: Dmitry Gutov <dgutov@yandex.ru>
New minor mode 'show-paren-local-mode'
* lisp/paren.el (show-paren--delete-overlays):
New function, extracted from show-paren-mode.
(show-paren-local-mode): New minor mode.
(show-paren-mode): Update docstring to mention it (bug#29381).
* doc/emacs/programs.texi (Matching): Update show-paren-mode section.
---
doc/emacs/programs.texi | 3 ++-
etc/NEWS | 4 ++++
lisp/paren.el | 32 +++++++++++++++++++++++++++-----
3 files changed, 33 insertions(+), 6 deletions(-)
diff --git a/doc/emacs/programs.texi b/doc/emacs/programs.texi
index 09216c2..522c092 100644
--- a/doc/emacs/programs.texi
+++ b/doc/emacs/programs.texi
@@ -813,7 +813,8 @@ displayed. The default is 102400.
of automatic matching. Whenever point is before an opening delimiter
or after a closing delimiter, the delimiter, its matching delimiter,
and optionally the text between them are highlighted. To toggle Show
-Paren mode, type @kbd{M-x show-paren-mode}. To customize it, type
+Paren mode, type @kbd{M-x show-paren-mode}. To toggle it in single
+buffer, type @kbd{M-x show-paren-local-mode}. To customize it, type
@kbd{M-x customize-group @key{RET} paren-showing}. The customizable
options which control the operation of this mode include:
diff --git a/etc/NEWS b/etc/NEWS
index ea7bb6b..50cf074 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -983,6 +983,10 @@ achieve that.
It used to be enabled when Emacs is started in GUI mode but not when started
in text mode. The cursor still only actually blinks in GUI frames.
+** New minor mode 'show-paren-local-mode'.
+It serves as a local counterpart for 'show-paren-mode', allowing you
+to toggle it separately in different buffers.
+
* Changes in Specialized Modes and Packages in Emacs 28.1
diff --git a/lisp/paren.el b/lisp/paren.el
index a45a08a..708605f 100644
--- a/lisp/paren.el
+++ b/lisp/paren.el
@@ -101,9 +101,11 @@ its position."
(define-minor-mode show-paren-mode
"Toggle visualization of matching parens (Show Paren mode).
-Show Paren mode is a global minor mode. When enabled, any
-matching parenthesis is highlighted in `show-paren-style' after
-`show-paren-delay' seconds of Emacs idle time."
+When enabled, any matching parenthesis is highlighted in `show-paren-style'
+after `show-paren-delay' seconds of Emacs idle time.
+
+This is a global minor mode. To toggle the mode in a single buffer,
+use `show-paren-local-mode'."
:global t :group 'paren-showing
;; Enable or disable the mechanism.
;; First get rid of the old idle timer.
@@ -114,8 +116,28 @@ matching parenthesis is highlighted in `show-paren-style'
after
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."
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master d37dcfa: New minor mode 'show-paren-local-mode',
Dmitry Gutov <=