This module provides a customizable popup window management system.
Not all windows are created equally. Some are less important. Some I want gone once they have served their purpose, like code output or a help buffer. Others I want to stick around, like a scratch buffer or org-capture popup.
More than that, popups ought to be the second class citizens of my editor; spawned off to the side, discarded with the push of a button (e.g. ESC or C-g), and easily restored if I want to see them again. Of course, this system should clean up after itself and kill off buffers I mark as transient.
- @hlissner
Become a maintainer?
- +all
- Enable fallback rules to ensure all temporary/special buffers (whose name begins with a space or asterix) are treated as popups.
- +defaults
- Enable reasonable default popup rules for a variety of buffers.
This module doesn’t install any packages.
- doom-package:help-mode has been advised to follow file links in the buffer you were in before entering the popup, rather than in a new window.
- doom-package:wgrep buffers are advised to close themselves when aborting or committing changes.
- doom-package:persp-mode is advised to restore popup windows when loading a session from file.
- Interactive calls to
windmove-*
commands (used byevil-window-*
commands) will ignore theno-other-window
window parameter, allowing you to switch to popup windows as if they’re ordinary windows. balance-windows
has been advised to close popups while it does its business, then restore them afterwards.- doom-package:neotree advises
balance-windows
, which causes major slow-downs when paired with ourbalance-window
advice, so we removes neotree’s advice. - doom-package:org-mode is an ongoing (and huge) effort. It has a scorched-earth window
management system I’m not fond of. ie. it kills all windows and monopolizes
the frame. On top of that, it really likes to use
switch-to-buffer
for most of its buffer management, which completely bypassesdisplay-buffer-alist
. Some work has gone into reversing this.
This module does not have a changelog yet.
Enable this module in your doom!
block.
This module has no external requirements.
🔨 This module has no usage documentation yet. Write some?
🔨 This module’s configuration documentation is incomplete. Complete it?
This module has two functions for defining your own rules for popups:
(set-popup-rule! PREDICATE &key IGNORE ACTIONS SIDE SIZE WIDTH HEIGHT SLOT VSLOT TTL QUIT SELECT MODELINE AUTOSAVE PARAMETERS)
(set-popup-rules! &rest RULESETS)
PREDICATE
is a predicate function or regexp string to match against the
buffer’s name. You’ll find comprehensive documentation on the other keywords in
set-popup-rule!
’s docstring (SPC h f set-popup-rule!).
📌 Popup rules end up in
display-buffer-alist
, which instructsdisplay-buffer
calls on how to set up windows for buffers that meet certain conditions. However, some plugins can avoid it entirely if they useset-buffer
orswitch-to-buffer
, which don’t obeydisplay-buffer-alist
.
Multiple popup rules can be defined with set-popup-rules!
:
(set-popup-rules!
'(("^ \\*" :slot -1) ; fallback rule for special buffers
("^\\*" :select t)
("^\\*Completions" :slot -1 :ttl 0)
("^\\*\\(?:scratch\\|Messages\\)" :ttl t)
("^\\*Help" :slot -1 :size 0.2 :select t)
("^\\*doom:"
:size 0.35 :select t :modeline t :quit t :ttl t)))
Omitted parameters in a set-popup-rules!
will use the defaults set in
+popup-defaults
.
Disabling hidden mode-line in popups
By default, the mode-line is hidden in popups. To disable this, you can either:
- Change the default
:modeline
property in+popup-defaults
:;; in $DOOMDIR/config.el (plist-put +popup-defaults :modeline t)
A value of
t
will instruct popups to use the default mode-line. Any popup rule with a:modeline
property can still override this. - Completely disable management of the mode-line in popups:
;; in $DOOMDIR/config.el (remove-hook '+popup-buffer-mode-hook #'+popup-set-modeline-on-enable-h)
There are no known problems with this module. Report one?
This module has no FAQs yet. Ask one?
🔨 This module’s appendix is incomplete. Write more?
+popup/other
(aliased toother-popup
, bound to C-x p)+popup/toggle
+popup/close
+popup/close-all
+popup/toggle
+popup/restore
+popup/raise
- Functions
+popup-window-p WINDOW
+popup-buffer-p BUFFER
+popup-buffer BUFFER &optional ALIST
+popup-parameter PARAMETER &optional WINDOW
+popup-parameter-fn PARAMETER &optional WINDOW
+popup-windows
- Macros
without-popups!
save-popups!
- Hooks
+popup-adjust-fringes-h
+popup|set-modeline
+popup-close-on-escape-h
+popup-cleanup-rules-h
- Minor modes
+popup-mode
+popup-buffer-mode