Improve popup + doom buffer handling
This commit is contained in:
parent
f14f427744
commit
ef9b59197a
4 changed files with 30 additions and 33 deletions
|
@ -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"))
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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))))))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue