From d443aed25c947342c6bd9039ffd4ec5034454aae Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 8 Jan 2018 16:18:16 -0500 Subject: [PATCH] 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. --- modules/feature/eval/config.el | 8 ++++++-- modules/lang/emacs-lisp/autoload.el | 13 ++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/modules/feature/eval/config.el b/modules/feature/eval/config.el index 1a2565dd6..ce7999af5 100644 --- a/modules/feature/eval/config.el +++ b/modules/feature/eval/config.el @@ -66,8 +66,12 @@ function that creates and returns the REPL buffer." (unless (boundp 'display-line-numbers) (add-hook 'quickrun--mode-hook #'nlinum-mode)) :config - (set! :popup "^\\*\\(?:doom eval\\|Pp Eval Output\\|quickrun\\)" - '((window-height . 0.2)) '((transient . 0))) + (setq quickrun-focus-p nil) + + (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 _) "Allows us to silently re-run quickrun from within the quickrun buffer." diff --git a/modules/lang/emacs-lisp/autoload.el b/modules/lang/emacs-lisp/autoload.el index 6b0af7015..795165eb7 100644 --- a/modules/lang/emacs-lisp/autoload.el +++ b/modules/lang/emacs-lisp/autoload.el @@ -28,8 +28,11 @@ to a pop up buffer." (prin1 result buf) (pp-buffer) (setq lines (count-lines (point-min) (point-max))) - (goto-char (point-min)) - (if (> lines 1) - (pop-to-buffer buf t) - (message "%s" (buffer-substring (point-min) (point-max))) - (kill-buffer buf))))) + (cond ((> lines 1) + (save-selected-window + (pop-to-buffer buf) + (with-current-buffer buf + (goto-char (point-min))))) + (t + (message "%s" (buffer-substring (point-min) (point-max))) + (kill-buffer buf))))))