[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: master 6e5d79c048: Display show-paren-context-when-offscreen in chil
From: |
Tassilo Horn |
Subject: |
Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame |
Date: |
Mon, 07 Feb 2022 16:45:06 +0100 |
User-agent: |
mu4e 1.7.7; emacs 29.0.50 |
Tassilo Horn <tsdh@gnu.org> writes:
> Here's a patch
As always, I've forgotten to attach the patch. So here it is.
> which implements both showing the context in an overlay and in the
> header-line in addition to the already pushed child-frame approach
> (just set show-paren-context-when-offscreen to either 'child-frame,
> 'overlay, or 'header-line for comparison).
>
> In the overlay and header-line cases, I replace newlines in the context
> string with spaces so that the context always only takes one line.
> (Note to self: probably that should be cut to window-width, too, so that
> you don't get continuation lines which would cause the buffer text to
> "bounce down and back up again".)
>
> The overlay approach has the problem that the context text isn't
> outstanding visually. With the child-frame approach, one can customize
> the child-frame-border face's :background to get a nice and outstanding
> look. Is there a way to make the context text a bit more outstanding?
> Since it's a buffer-substring, it's usually font-locked already and that
> should be kept, of course.
>
> The header-line approach has the problem that the text "bounces" because
> usually there is no header-line, so its toggled on and off again. But
> at least, the context text is immediately distinguishable.
>
> So all in all, I still like the child-frame approach best but have no
> problem with offering the other options as well.
>From e92a8d062cca54152bd816bdf88dad0bade87120 Mon Sep 17 00:00:00 2001
From: Tassilo Horn <tsdh@gnu.org>
Date: Mon, 7 Feb 2022 15:05:14 +0100
Subject: [PATCH] Show show-paren context in overlay or header-line
---
lisp/paren.el | 66 ++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 60 insertions(+), 6 deletions(-)
diff --git a/lisp/paren.el b/lisp/paren.el
index 6de4364b4f..e0a8d6fc24 100644
--- a/lisp/paren.el
+++ b/lisp/paren.el
@@ -368,6 +368,51 @@ show-paren--show-context-in-child-frame
(add-hook 'post-command-hook
#'show-paren--delete-context-child-frame))))
+(defvar-local show-paren--context-overlay nil)
+
+(defun show-paren--delete-context-overlay ()
+ (when show-paren--context-overlay
+ (delete-overlay show-paren--context-overlay)
+ (setq show-paren--context-overlay nil))
+ (remove-hook 'post-command-hook #'show-paren--delete-overlays
+ 'local))
+
+(defun show-paren--show-context-in-overlay (text)
+ "Show TEXT in an overlay at the top-left of the current window."
+ ;; FIXME: This works pretty well but the overlay text is not
+ ;; outstanding at all. It's good that it's the font-locked string
+ ;; but it would be good if we could place a :box or :background face
+ ;; attribute, too.
+ (setq text (replace-regexp-in-string "\n" " " text))
+ (show-paren--delete-context-overlay)
+ (let* ((beg (window-start))
+ (end (save-excursion
+ (goto-char beg)
+ (line-end-position))))
+ (setq show-paren--context-overlay (make-overlay beg end)))
+ (overlay-put show-paren--context-overlay 'display text)
+ (add-hook 'post-command-hook #'show-paren--delete-context-overlay
+ nil 'local))
+
+(defvar-local show-paren--orig-header-line-format nil)
+
+(defun show-paren--restore-orig-header-line-format ()
+ (setq header-line-format show-paren--orig-header-line-format)
+ (remove-hook 'post-command-hook
+ #'show-paren--restore-orig-header-line-format
+ 'local))
+
+(defun show-paren--show-context-in-header-line (text)
+ "Show TEXT in the header-line."
+ ;; FIXME: This bounces the buffer one line down which is a bit
+ ;; annoying. Can we do anything about it?
+ (setq text (replace-regexp-in-string "\n" " " text))
+ (setq show-paren--orig-header-line-format header-line-format)
+ (setq header-line-format text)
+ (add-hook 'post-command-hook
+ #'show-paren--restore-orig-header-line-format
+ nil 'local))
+
(defun show-paren-function ()
"Highlight the parentheses until the next input arrives."
(let ((data (and show-paren-mode (funcall show-paren-data-function))))
@@ -438,12 +483,21 @@ show-paren-function
(let ((open-paren-line-string
(blink-paren-open-paren-line-string openparen))
(message-log-max nil))
- (if (and (eq show-paren-context-when-offscreen
- 'child-frame)
- (display-graphic-p))
- (show-paren--show-context-in-child-frame
- open-paren-line-string)
- (minibuffer-message "Matches %s"
open-paren-line-string)))))
+ (cond ((and (eq show-paren-context-when-offscreen
+ 'child-frame)
+ (display-graphic-p))
+ (show-paren--show-context-in-child-frame
+ open-paren-line-string))
+ ((eq show-paren-context-when-offscreen
+ 'overlay)
+ (show-paren--show-context-in-overlay
+ open-paren-line-string))
+ ((eq show-paren-context-when-offscreen
+ 'header-line)
+ (show-paren--show-context-in-header-line
+ open-paren-line-string))
+ (show-paren-context-when-offscreen
+ (minibuffer-message "Matches %s"
open-paren-line-string))))))
;; Always set the overlay face, since it varies.
(overlay-put show-paren--overlay 'priority show-paren-priority)
(overlay-put show-paren--overlay 'face face))))))
--
2.35.1
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Lars Ingebrigtsen, 2022/02/06
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Po Lu, 2022/02/06
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Tassilo Horn, 2022/02/07
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Arash Esbati, 2022/02/07
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Tassilo Horn, 2022/02/07
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame,
Tassilo Horn <=
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Arash Esbati, 2022/02/07
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Tassilo Horn, 2022/02/07
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Arash Esbati, 2022/02/08
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Tassilo Horn, 2022/02/08
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Tassilo Horn, 2022/02/09
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Po Lu, 2022/02/09
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Tassilo Horn, 2022/02/09
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Po Lu, 2022/02/09
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Tassilo Horn, 2022/02/09
- Re: master 6e5d79c048: Display show-paren-context-when-offscreen in child frame, Tassilo Horn, 2022/02/09