1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-17 11:20:39 -08:00

Fix face issues in show-paren context overlay (bug#59527)

* lisp/paren.el (show-paren--show-context-in-overlay): Use
show-paren-priority as overlay priority (fixes problem 2 of
bug#59527).
* lisp/simple.el (blink-paren-open-paren-line-string): Ensure the
context lines are font-locked before taking the
buffer-substring (fixes problem 1 of bug#59527).
This commit is contained in:
Tassilo Horn 2022-11-24 10:47:54 +01:00
parent 8252211833
commit 005efce764
2 changed files with 37 additions and 27 deletions

View file

@ -410,6 +410,10 @@ It is the default value of `show-paren-data-function'."
(line-end-position)))) (line-end-position))))
(setq show-paren--context-overlay (make-overlay beg end))) (setq show-paren--context-overlay (make-overlay beg end)))
(overlay-put show-paren--context-overlay 'display text) (overlay-put show-paren--context-overlay 'display text)
;; Use the (default very high) `show-paren-priority' ensuring that
;; not other overlays shine through (bug#59527).
(overlay-put show-paren--context-overlay 'priority
show-paren-priority)
(overlay-put show-paren--context-overlay (overlay-put show-paren--context-overlay
'face `(:box 'face `(:box
( :line-width (1 . -1) ( :line-width (1 . -1)

View file

@ -9184,33 +9184,39 @@ The function should return non-nil if the two tokens do not match.")
"Return the line string that contains the openparen at POS." "Return the line string that contains the openparen at POS."
(save-excursion (save-excursion
(goto-char pos) (goto-char pos)
;; Capture the regions in terms of (beg . end) conses whose
;; buffer-substrings we want to show as a context string. Ensure
;; they are font-locked (bug#59527).
(let (regions)
;; Show what precedes the open in its line, if anything. ;; Show what precedes the open in its line, if anything.
(cond (cond
((save-excursion (skip-chars-backward " \t") (not (bolp))) ((save-excursion (skip-chars-backward " \t") (not (bolp)))
(buffer-substring (line-beginning-position) (setq regions (list (cons (line-beginning-position)
(1+ pos))) (1+ pos)))))
;; Show what follows the open in its line, if anything. ;; Show what follows the open in its line, if anything.
((save-excursion ((save-excursion
(forward-char 1) (forward-char 1)
(skip-chars-forward " \t") (skip-chars-forward " \t")
(not (eolp))) (not (eolp)))
(buffer-substring pos (setq regions (list (cons pos (line-end-position)))))
(line-end-position)))
;; Otherwise show the previous nonblank line, ;; Otherwise show the previous nonblank line,
;; if there is one. ;; if there is one.
((save-excursion (skip-chars-backward "\n \t") (not (bobp))) ((save-excursion (skip-chars-backward "\n \t") (not (bobp)))
(concat (setq regions (list (cons (progn
(buffer-substring (progn
(skip-chars-backward "\n \t") (skip-chars-backward "\n \t")
(line-beginning-position)) (line-beginning-position))
(progn (end-of-line) (progn (end-of-line)
(skip-chars-backward " \t") (skip-chars-backward " \t")
(point))) (point)))
;; Replace the newline and other whitespace with `...'. (cons pos (1+ pos)))))
"..."
(buffer-substring pos (1+ pos))))
;; There is nothing to show except the char itself. ;; There is nothing to show except the char itself.
(t (buffer-substring pos (1+ pos)))))) (t (setq regions (list (cons pos (1+ pos))))))
;; Ensure we've font-locked the context region.
(font-lock-ensure (caar regions) (cdar (last regions)))
(mapconcat (lambda (region)
(buffer-substring (car region) (cdr region)))
regions
"..."))))
(defvar blink-paren-function 'blink-matching-open (defvar blink-paren-function 'blink-matching-open
"Function called, if non-nil, whenever a close parenthesis is inserted. "Function called, if non-nil, whenever a close parenthesis is inserted.