Change-Id: I6c6847fac56f0a9a1a2209792e00a3aec5e672b9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10809 Autosubmit: aspen <root@gws.fyi> Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: lukegb <lukegb@tvl.fyi>
		
			
				
	
	
		
			61 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
| ;;; -*- lexical-binding: t; -*-
 | |
| 
 | |
| ;;; https://with-emacs.com/posts/ui-hacks/show-matching-lines-when-parentheses-go-off-screen/
 | |
| 
 | |
| ;; we will call `blink-matching-open` ourselves...
 | |
| (remove-hook 'post-self-insert-hook
 | |
|              #'blink-paren-post-self-insert-function)
 | |
| ;; this still needs to be set for `blink-matching-open` to work
 | |
| (setq blink-matching-paren 'show)
 | |
| 
 | |
| (let ((ov nil)) ; keep track of the overlay
 | |
|   (advice-add
 | |
|    #'show-paren-function
 | |
|    :after
 | |
|     (defun show-paren--off-screen+ (&rest _args)
 | |
|       "Display matching line for off-screen paren."
 | |
|       (when (overlayp ov)
 | |
|         (delete-overlay ov))
 | |
|       ;; check if it's appropriate to show match info,
 | |
|       ;; see `blink-paren-post-self-insert-function'
 | |
|       (when (and (overlay-buffer show-paren--overlay)
 | |
|                  (not (or cursor-in-echo-area
 | |
|                           executing-kbd-macro
 | |
|                           noninteractive
 | |
|                           (minibufferp)
 | |
|                           this-command))
 | |
|                  (and (not (bobp))
 | |
|                       (memq (char-syntax (char-before)) '(?\) ?\$)))
 | |
|                  (= 1 (logand 1 (- (point)
 | |
|                                    (save-excursion
 | |
|                                      (forward-char -1)
 | |
|                                      (skip-syntax-backward "/\\")
 | |
|                                      (point))))))
 | |
|         ;; rebind `minibuffer-message' called by
 | |
|         ;; `blink-matching-open' to handle the overlay display
 | |
|         (cl-letf (((symbol-function #'minibuffer-message)
 | |
|                    (lambda (msg &rest args)
 | |
|                      (let ((msg (apply #'format-message msg args)))
 | |
|                        (setq ov (display-line-overlay+
 | |
|                                  (window-start) msg ))))))
 | |
|           (blink-matching-open))))))
 | |
| 
 | |
| (defun display-line-overlay+ (pos str &optional face)
 | |
|   "Display line at POS as STR with FACE.
 | |
| 
 | |
| FACE defaults to inheriting from default and highlight."
 | |
|   (let ((ol (save-excursion
 | |
|               (goto-char pos)
 | |
|               (make-overlay (line-beginning-position)
 | |
|                             (line-end-position)))))
 | |
|     (overlay-put ol 'display str)
 | |
|     (overlay-put ol 'face
 | |
|                  (or face '(:inherit default :inherit highlight)))
 | |
|     ol))
 | |
| 
 | |
| (setq show-paren-style 'paren
 | |
|       show-paren-delay 0.03
 | |
|       show-paren-highlight-openparen t
 | |
|       show-paren-when-point-inside-paren nil
 | |
|       show-paren-when-point-in-periphery t)
 | |
| (show-paren-mode 1)
 |