git-subtree-dir: users/glittershark/emacs.d git-subtree-mainline:2edb963b97git-subtree-split:69ee53bffa
		
			
				
	
	
		
			61 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			EmacsLisp
		
	
	
	
	
	
;;; ~/.doom.d/show-matching-paren.el -*- 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)
 |