diff --git a/core/core-popup.el b/core/core-popup.el index 1d3049bf2..2fe8681d5 100644 --- a/core/core-popup.el +++ b/core/core-popup.el @@ -39,7 +39,7 @@ "If non-nil, this popup buffer won't be killed when closed.") (defvar doom-popup-inescapable-modes - '(compilation-mode comint-mode) + '(compilation-mode comint-mode "^\\*doom.*\\*$") "A list of modes that should not be closeable with a single ESC.") (defvar doom-popup-protect-modes '(messages-buffer-mode esup-mode help-mode tabulated-list-mode comint-mode) @@ -52,10 +52,7 @@ (advice-add 'shackle-display-buffer :after 'doom*run-popup-post-hooks) (add-hook 'doom-popup-post-hook 'doom|popup-init) ; Keep track of popups (add-hook 'doom-popup-post-hook 'doom|hide-mode-line) ; No mode line in popups - ;; Prevents popups from messaging with windows-moving functions - (defun doom*save-popups (orig-fun &rest args) - (doom/popup-save (apply orig-fun args))) (advice-add 'doom/evil-window-move :around 'doom*save-popups)) @@ -79,10 +76,6 @@ (switch-to-buffer b)))) (after! evil - (defun doom*evil-command-window (orig-fn &rest args) - (cl-flet ((switch-to-buffer ())) - (apply orig-fn args)) - ) (defun doom*evil-command-window (hist cmd-key execute-fn) (when (eq major-mode 'evil-command-window-mode) (user-error "Cannot recursively open command line window")) diff --git a/core/core-scratch.el b/core/core-scratch.el index 28bcace33..69d1acbf3 100644 --- a/core/core-scratch.el +++ b/core/core-scratch.el @@ -13,7 +13,7 @@ (defvar-local doom-buffer-edited nil "If non-nil, the scratch buffer has been edited.") -(def-popup! doom-buffer-name :align below :size 0.3 :select t) +(def-popup! "*doom*" :align below :size 35 :select t) (def-popup! "^\\*doom.+\\*$" :regexp t :align below :size 12 :noselect t) (define-derived-mode doom-mode text-mode "DOOM" diff --git a/core/defuns/defuns-buffers.el b/core/defuns/defuns-buffers.el index 8de8bf1a7..5ad9336ff 100644 --- a/core/defuns/defuns-buffers.el +++ b/core/defuns/defuns-buffers.el @@ -101,21 +101,23 @@ Inspired from http://demonastery.org/2013/04/emacs-evil-narrow-region/" "Kill buffer (but only bury scratch buffer), then switch to a real buffer. Only buries the buffer if it is being displayed in another window." (interactive (list t)) - (if (eq doom-buffer (current-buffer)) - (progn - (when (= (length (get-buffer-window-list doom-buffer nil t)) 1) - (doom-mode-init t)) - (when arg (message "Already in scratch buffer"))) - (let ((new-dir (doom/project-root))) - (if (doom/popup-p (selected-window)) - (doom/popup-close) - (if (> (length (get-buffer-window-list (current-buffer) nil t)) 1) - (bury-buffer) - (kill-this-buffer)) - (unless (doom/real-buffer-p (current-buffer)) - (doom/previous-real-buffer)) - (when (get-buffer-window-list doom-buffer nil t) - (doom|update-scratch-buffer new-dir)))))) + (if (eq doom-buffer (current-buffer)) + (if (one-window-p) + (progn + (when (= (length (get-buffer-window-list doom-buffer nil t)) 1) + (doom-mode-init t)) + (when arg (message "Already in scratch buffer"))) + (doom/previous-real-buffer)) + (let ((new-dir (doom/project-root))) + (if (doom/popup-p (selected-window)) + (doom/popup-close) + (if (> (length (get-buffer-window-list (current-buffer) nil t)) 1) + (bury-buffer) + (kill-this-buffer)) + (unless (doom/real-buffer-p (current-buffer)) + (doom/previous-real-buffer)) + (when (get-buffer-window-list doom-buffer nil t) + (doom|update-scratch-buffer new-dir)))))) ;;;###autoload (defun doom/kill-unreal-buffers () @@ -270,14 +272,14 @@ buffers regardless of project." (if bang (org-capture-string text) ;; or scratch buffer by default - (let* ((project-dir (doom/project-root t)) - (buffer-name doom-buffer-name)) - (doom/popup-buffer buffer-name) - (with-current-buffer buffer-name + (with-current-buffer (doom/popup-buffer doom-buffer) + (doom|update-scratch-buffer nil t) + (unless (eq major-mode mode) + (funcall mode)) + (unless doom-buffer-edited (erase-buffer) - (doom|update-scratch-buffer) - (if text (insert text)) - (funcall mode)))))) + (setq doom-buffer-edited t)) + (if text (insert text)))))) ;;;###autoload (autoload 'doom:cd "defuns-buffers" nil t) (evil-define-command doom:cd (dir) diff --git a/core/defuns/defuns-popups.el b/core/defuns/defuns-popups.el index d867d538a..1d5f0bd19 100644 --- a/core/defuns/defuns-popups.el +++ b/core/defuns/defuns-popups.el @@ -114,10 +114,12 @@ (local-set-key [escape escape] 'doom/popup-close) (let ((map evil-normal-state-local-map)) (define-key map [escape escape] 'doom/popup-close) - (unless (apply #'derived-mode-p doom-popup-inescapable-modes) + (unless (or (apply #'derived-mode-p doom-popup-inescapable-modes) + (--any? (string-match-p it buffer-name) (-filter 'stringp doom-popup-inescapable-modes))) (define-key map [escape] 'doom/popup-close) (define-key map (kbd "ESC") 'doom/popup-close))) - (when (apply #'derived-mode-p doom-popup-protect-modes) + (when (or (apply #'derived-mode-p doom-popup-protect-modes) + (--any? (string-match-p it buffer-name) (-filter 'stringp doom-popup-protect-modes))) (setq-local doom-popup-protect t) (setq doom-last-popup (current-buffer))))))