Here is a simple way to make Emacs show certain buffers in their own frame, by default. (And that frame will be reused when you refer to its buffer.)
special-display-buffer-names or option
special-display-regexps to reflect the names of the buffers you want to display in their own frames.
For example, if all Alchemist buffers start with
Alchemist, and no other buffers do, then this is all you need:
(add-to-list 'special-display-regexps "\\`Alchemist ")
(setq special-display-regexps '("\\`Alchemist "))
special-display-regexps is just a list of regexps that are matched against buffer names. Option
special-display-buffer-names is just a list of buffer names.
C-h f special-display-buffer-names says this:
special-display-buffer-names is a variable defined in
Its value is shown below.
This variable is obsolete since 24.3;
This variable can be risky when used as a file-local variable.
List of names of buffers that should be displayed specially.
Displaying a buffer with
its name is in this list, displays the buffer in a way specified
(the default for
special-display-function) usually displays
the buffer in a separate frame made with the parameters specified
has been set to some other function, that function is called with
the buffer as first, and
nil as second argument.
Alternatively, an element of this list can be specified as
(BUFFER-NAME FRAME-PARAMETERS), where
BUFFER-NAME is a buffer
FRAME-PARAMETERS an alist of
(PARAMETER . VALUE) pairs.
special-display-popup-frame will interpret such pairs as frame
parameters when it creates a special frame, overriding the
corresponding values from
As a special case, if
(same-window . t)
special-display-popup-frame displays that buffer in the
selected window. If
(same-frame . t),
it displays that buffer in a window on the selected frame.
special-display-function specifies some other function than
special-display-popup-frame, that function is called with the
BUFFER-NAME as first, and
FRAME-PARAMETERS as second
Finally, an element of this list can be also specified as
(BUFFER-NAME FUNCTION OTHER-ARGS). In that case,
special-display-popup-frame will call
FUNCTION with the buffer
BUFFER-NAME as first argument, and
OTHER-ARGS as the
Any alternative function specified here is responsible for
setting up the quit-restore parameter of the window used.
If this variable appears "not to work", because you added a
name to it but the corresponding buffer is displayed in the
selected window, look at the values of
same-window-regexps. Those variables take precedence over
You can customize this variable.
Alternatively, you can use option
Emacs claims that the
special-display-* variables are obsolete, but they work just fine. They should never have been deprecated, IMO. That was done when the
display-buffer-alist monster was created. The idea was perhaps that the
special-display-* options made it too easy to do such a simple thing. ;-)
It is good that
display-buffer-alist was created. It is not good (IMHO) for Emacs to consider
special-display-* to be deprecated.