26.11 Special Buffer Frames
You can make certain chosen buffers, for which Emacs normally creates
a second window when you have just one window, appear in special frames
of their own. To do this, set the variable
special-display-buffer-names
to a list of buffer names; any
buffer whose name is in that list automatically gets a special frame,
when an Emacs command wants to display it “in another window.”
For example, if you set the variable this way,
(setq special-display-buffer-names
'("*Completions*" "*grep*" "*tex-shell*"))
then completion lists, grep
output and the TeX mode shell
buffer get individual frames of their own. These frames, and the
windows in them, are never automatically split or reused for any other
buffers. They continue to show the buffers they were created for,
unless you alter them by hand. Killing the special buffer deletes its
frame automatically.
More generally, you can set special-display-regexps
to a list
of regular expressions; then a buffer gets its own frame if its name
matches any of those regular expressions. (Once again, this applies only
to buffers that normally get displayed for you in a separate window.)
The variable special-display-frame-alist
specifies the frame
parameters for these frames. It has a default value, so you don't need
to set it.
For those who know Lisp, an element of
special-display-buffer-names
or special-display-regexps
can also be a list. Then the first element is the buffer name or
regular expression; the rest of the list specifies how to create the
frame. It can be an association list specifying frame parameter
values; these values take precedence over parameter values specified
in special-display-frame-alist
. If you specify the symbol
same-window
as a “frame parameter” in this list, with a
non-nil
value, that means to use the selected window if
possible. If you use the symbol same-frame
as a “frame
parameter” in this list, with a non-nil
value, that means to
use the selected frame if possible.
Alternatively, the value can have this form:
(function args...)
where function is a symbol. Then the frame is constructed by
calling function; its first argument is the buffer, and its
remaining arguments are args.
An analogous feature lets you specify buffers which should be
displayed in the selected window. See Force Same Window. The
same-window feature takes precedence over the special-frame feature;
therefore, if you add a buffer name to
special-display-buffer-names
and it has no effect, check to see
whether that feature is also in use for the same buffer name.