core-popups: clone buffer if visible elsewhere

Allows us to modify the buffer in the pop up window indepdently from the
rest.
This commit is contained in:
Henrik Lissner 2017-05-12 12:11:40 +02:00
parent 29d01756ea
commit ed6941e8ae
3 changed files with 8 additions and 4 deletions

View file

@ -114,7 +114,8 @@ only close popups that have an :autoclose property in their rule (see
;;;###autoload ;;;###autoload
(defun doom/popup () (defun doom/popup ()
"Display currently selected buffer in a popup window." "Display currently selected buffer in a popup window."
(doom-popup-buffer (current-buffer) :align t)) (interactive)
(doom-popup-buffer (current-buffer) :align t :autokill t))
(defun doom--popup-data (window) (defun doom--popup-data (window)
(let ((buffer (window-buffer window))) (let ((buffer (window-buffer window)))

View file

@ -192,7 +192,11 @@ and setting `doom-popup-rules' within it. Returns the window."
(shackle-match (window-buffer (car args)))) (shackle-match (window-buffer (car args))))
((bufferp (car args)) ((bufferp (car args))
(shackle-match (car args)))))) (shackle-match (car args))))))
(window (apply orig-fn args))) window)
(when (get-buffer-window-list (car args) nil t)
(setq plist (append (list :autokill t) plist))
(setcar args (clone-indirect-buffer (buffer-name (car args)) nil t)))
(setq window (apply orig-fn args))
(unless window (unless window
(error "No popup window was found for %s: %s" (car args) plist)) (error "No popup window was found for %s: %s" (car args) plist))
(with-selected-window window (with-selected-window window

View file

@ -74,8 +74,7 @@
(defun +doom|buffer-mode-off () (defun +doom|buffer-mode-off ()
"Disable `doom-buffer-mode' in popup buffers." "Disable `doom-buffer-mode' in popup buffers."
(when (and doom-buffer-mode (when doom-buffer-mode
(not (get-buffer-window-list)))
(doom-buffer-mode -1))) (doom-buffer-mode -1)))
(add-hook 'doom-popup-mode-hook #'+doom|buffer-mode-off) (add-hook 'doom-popup-mode-hook #'+doom|buffer-mode-off)