feature/eval: improve compatibility with feature/popups

This makes quickrun, *doom eval* and *Pp Eval Output* buffers behave
better.

Eval output buffers should a) shrink themselves to the size of their
output (within reason), b) *not* grab focus, and c) be easy to close
from afar with C-g/Escape.

Gotchas:

1. Quickrun gets output asynchronously, so we shrink it on
   quickrun-after-run-hook, not in the popup rule.
2. *doom eval* and *Pp Eval Output* opens with its output ready, so the
   popup system may shrink those to fit.
3. *doom eval* and *Pp Eval Output* handle window selection themselves.
   Let them by setting the select window parameter to #'ignore.
This commit is contained in:
Henrik Lissner 2018-01-08 16:18:16 -05:00
parent b6bf0d7afd
commit d443aed25c
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 14 additions and 7 deletions

View file

@ -66,8 +66,12 @@ function that creates and returns the REPL buffer."
(unless (boundp 'display-line-numbers) (unless (boundp 'display-line-numbers)
(add-hook 'quickrun--mode-hook #'nlinum-mode)) (add-hook 'quickrun--mode-hook #'nlinum-mode))
:config :config
(set! :popup "^\\*\\(?:doom eval\\|Pp Eval Output\\|quickrun\\)" (setq quickrun-focus-p nil)
'((window-height . 0.2)) '((transient . 0)))
(set! :popup "^\\*quickrun"
'((size . 0.3)) '((transient . 0)))
(set! :popup "^\\*\\(?:\\(?:Pp E\\|doom e\\)val\\)"
'((size . +popup-shrink-to-fit)) '((transient . 0) (select . ignore)))
(defun +eval*quickrun-auto-close (&rest _) (defun +eval*quickrun-auto-close (&rest _)
"Allows us to silently re-run quickrun from within the quickrun buffer." "Allows us to silently re-run quickrun from within the quickrun buffer."

View file

@ -28,8 +28,11 @@ to a pop up buffer."
(prin1 result buf) (prin1 result buf)
(pp-buffer) (pp-buffer)
(setq lines (count-lines (point-min) (point-max))) (setq lines (count-lines (point-min) (point-max)))
(goto-char (point-min)) (cond ((> lines 1)
(if (> lines 1) (save-selected-window
(pop-to-buffer buf t) (pop-to-buffer buf)
(message "%s" (buffer-substring (point-min) (point-max))) (with-current-buffer buf
(kill-buffer buf))))) (goto-char (point-min)))))
(t
(message "%s" (buffer-substring (point-min) (point-max)))
(kill-buffer buf))))))