Improve popup + doom buffer handling

This commit is contained in:
Henrik Lissner 2016-05-26 18:44:56 -04:00
parent f14f427744
commit ef9b59197a
4 changed files with 30 additions and 33 deletions

View file

@ -39,7 +39,7 @@
"If non-nil, this popup buffer won't be killed when closed.") "If non-nil, this popup buffer won't be killed when closed.")
(defvar doom-popup-inescapable-modes (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.") "A list of modes that should not be closeable with a single ESC.")
(defvar doom-popup-protect-modes (defvar doom-popup-protect-modes
'(messages-buffer-mode esup-mode help-mode tabulated-list-mode comint-mode) '(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) (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|popup-init) ; Keep track of popups
(add-hook 'doom-popup-post-hook 'doom|hide-mode-line) ; No mode line in popups (add-hook 'doom-popup-post-hook 'doom|hide-mode-line) ; No mode line in popups
;; Prevents popups from messaging with windows-moving functions ;; 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)) (advice-add 'doom/evil-window-move :around 'doom*save-popups))
@ -79,10 +76,6 @@
(switch-to-buffer b)))) (switch-to-buffer b))))
(after! evil (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) (defun doom*evil-command-window (hist cmd-key execute-fn)
(when (eq major-mode 'evil-command-window-mode) (when (eq major-mode 'evil-command-window-mode)
(user-error "Cannot recursively open command line window")) (user-error "Cannot recursively open command line window"))

View file

@ -13,7 +13,7 @@
(defvar-local doom-buffer-edited nil (defvar-local doom-buffer-edited nil
"If non-nil, the scratch buffer has been edited.") "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) (def-popup! "^\\*doom.+\\*$" :regexp t :align below :size 12 :noselect t)
(define-derived-mode doom-mode text-mode "DOOM" (define-derived-mode doom-mode text-mode "DOOM"

View file

@ -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 "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." the buffer if it is being displayed in another window."
(interactive (list t)) (interactive (list t))
(if (eq doom-buffer (current-buffer)) (if (eq doom-buffer (current-buffer))
(progn (if (one-window-p)
(when (= (length (get-buffer-window-list doom-buffer nil t)) 1) (progn
(doom-mode-init t)) (when (= (length (get-buffer-window-list doom-buffer nil t)) 1)
(when arg (message "Already in scratch buffer"))) (doom-mode-init t))
(let ((new-dir (doom/project-root))) (when arg (message "Already in scratch buffer")))
(if (doom/popup-p (selected-window)) (doom/previous-real-buffer))
(doom/popup-close) (let ((new-dir (doom/project-root)))
(if (> (length (get-buffer-window-list (current-buffer) nil t)) 1) (if (doom/popup-p (selected-window))
(bury-buffer) (doom/popup-close)
(kill-this-buffer)) (if (> (length (get-buffer-window-list (current-buffer) nil t)) 1)
(unless (doom/real-buffer-p (current-buffer)) (bury-buffer)
(doom/previous-real-buffer)) (kill-this-buffer))
(when (get-buffer-window-list doom-buffer nil t) (unless (doom/real-buffer-p (current-buffer))
(doom|update-scratch-buffer new-dir)))))) (doom/previous-real-buffer))
(when (get-buffer-window-list doom-buffer nil t)
(doom|update-scratch-buffer new-dir))))))
;;;###autoload ;;;###autoload
(defun doom/kill-unreal-buffers () (defun doom/kill-unreal-buffers ()
@ -270,14 +272,14 @@ buffers regardless of project."
(if bang (if bang
(org-capture-string text) (org-capture-string text)
;; or scratch buffer by default ;; or scratch buffer by default
(let* ((project-dir (doom/project-root t)) (with-current-buffer (doom/popup-buffer doom-buffer)
(buffer-name doom-buffer-name)) (doom|update-scratch-buffer nil t)
(doom/popup-buffer buffer-name) (unless (eq major-mode mode)
(with-current-buffer buffer-name (funcall mode))
(unless doom-buffer-edited
(erase-buffer) (erase-buffer)
(doom|update-scratch-buffer) (setq doom-buffer-edited t))
(if text (insert text)) (if text (insert text))))))
(funcall mode))))))
;;;###autoload (autoload 'doom:cd "defuns-buffers" nil t) ;;;###autoload (autoload 'doom:cd "defuns-buffers" nil t)
(evil-define-command doom:cd (dir) (evil-define-command doom:cd (dir)

View file

@ -114,10 +114,12 @@
(local-set-key [escape escape] 'doom/popup-close) (local-set-key [escape escape] 'doom/popup-close)
(let ((map evil-normal-state-local-map)) (let ((map evil-normal-state-local-map))
(define-key map [escape escape] 'doom/popup-close) (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 [escape] 'doom/popup-close)
(define-key map (kbd "ESC") '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-local doom-popup-protect t)
(setq doom-last-popup (current-buffer)))))) (setq doom-last-popup (current-buffer))))))