tools/eval: add +overlay feature
Now, inline evaluation will display results in an overlay next to the cursor, rather than in the minibuffer (unless it gets too big, in which case it'll use a popup buffer).
This commit is contained in:
parent
c2f6aa3e9d
commit
84a063ca78
7 changed files with 111 additions and 33 deletions
|
@ -1,12 +1,16 @@
|
|||
;;; tools/eval/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
(defvar +eval-overlay-max-lines 4
|
||||
"The output height threshold (inclusive) before output is displayed in a popup
|
||||
buffer rather than an overlay on the line at point.")
|
||||
|
||||
;; remove ellipsis when printing sexps in message buffer
|
||||
(setq eval-expression-print-length nil
|
||||
eval-expression-print-level nil)
|
||||
|
||||
|
||||
;;
|
||||
;; Packages
|
||||
;;; Packages
|
||||
|
||||
(set-popup-rule!
|
||||
(lambda (bufname _)
|
||||
|
@ -26,15 +30,6 @@
|
|||
|
||||
(set-popup-rule! "^\\*quickrun" :size 0.3 :ttl 0)
|
||||
|
||||
(defadvice! +eval--quickrun-auto-close-a (&rest _)
|
||||
"Allows us to silently re-run quickrun from within the quickrun buffer."
|
||||
:before '(quickrun quickrun-region)
|
||||
(when-let (win (get-buffer-window quickrun--buffer-name))
|
||||
(let ((inhibit-message t))
|
||||
(quickrun--kill-running-process)
|
||||
(message ""))
|
||||
(delete-window win)))
|
||||
|
||||
(defadvice! +eval--quickrun-fix-evil-visual-region-a ()
|
||||
"Make `quickrun-replace-region' recognize evil visual selections."
|
||||
:override #'quickrun--outputter-replace-region
|
||||
|
@ -51,17 +46,47 @@
|
|||
(insert output))
|
||||
(setq quickrun-option-outputter quickrun--original-outputter))))
|
||||
|
||||
(defadvice! +eval--quickrun-auto-close-a (&rest _)
|
||||
"Silently re-create the quickrun popup when re-evaluating."
|
||||
:before '(quickrun quickrun-region)
|
||||
(when-let (win (get-buffer-window quickrun--buffer-name))
|
||||
(let ((inhibit-message t))
|
||||
(quickrun--kill-running-process)
|
||||
(message ""))
|
||||
(delete-window win)))
|
||||
|
||||
(add-hook! 'quickrun-after-run-hook
|
||||
(defun +eval-quickrun-shrink-window-h ()
|
||||
"Shrink the quickrun output window once code evaluation is complete."
|
||||
(when-let (win (get-buffer-window quickrun--buffer-name))
|
||||
(with-selected-window (get-buffer-window quickrun--buffer-name)
|
||||
(let ((ignore-window-parameters t))
|
||||
(shrink-window-if-larger-than-buffer))))))
|
||||
|
||||
(add-hook! 'quickrun-after-run-hook
|
||||
(shrink-window-if-larger-than-buffer)))))
|
||||
(defun +eval-quickrun-scroll-to-bof-h ()
|
||||
"Ensures window is scrolled to BOF on invocation."
|
||||
(when-let (win (get-buffer-window quickrun--buffer-name))
|
||||
(with-selected-window win
|
||||
(goto-char (point-min)))))))
|
||||
(goto-char (point-min))))))
|
||||
|
||||
;; Display evaluation results in an overlay next to the cursor. If the output
|
||||
;; is more than 4 lines long, it is displayed in a popup.
|
||||
(when (featurep! +overlay)
|
||||
(defadvice! +eval--inhibit-quickrun-popup-a (buf cb)
|
||||
:override #'quickrun--pop-to-buffer
|
||||
(setq quickrun--original-buffer (current-buffer))
|
||||
(with-current-buffer buf
|
||||
(setq quickrun-option-outputter #'ignore)
|
||||
(funcall cb)))
|
||||
|
||||
(advice-add #'quickrun--recenter :override #'ignore)
|
||||
(add-hook! 'quickrun-after-run-hook
|
||||
(defun +eval-display-in-popup-overlay-h ()
|
||||
(+eval-display-results
|
||||
(with-current-buffer quickrun--buffer-name
|
||||
(string-trim (buffer-string)))
|
||||
quickrun--original-buffer)))))
|
||||
|
||||
|
||||
(use-package! eros
|
||||
:when (featurep! +overlay)
|
||||
:hook (emacs-lisp-mode . eros-mode))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue