Subject: bug#9532: 24.0.50; `special-display-regexps' is no longer respected

From: "Drew Adams" <[email-masked]>
Date: Sun, 18 Sep 2011 10:33:18 -0700

> I have this as `special-display-regexps':
> ("[ ]?[*][^*]+[*]")
>
> And both `*info*' and `*unsent mail to [email-masked]*',
> which match that option value, are _not_ displayed as
> special-display buffers.

I see this difference from the previous week's build (and all previous builds
and releases): `same-window-regexps' and `same-window-buffer-names' are now nil.
In the past they were not. 

I do not want the buffer names/patterns in question to be treated differently
wrt `special-display-regexps' - I want such buffers, which match that
special-display pattern, to be treated as, well, special-display.  So I do not
want these names/patterns on `same-window-regexps' or
`same-window-buffer-names'.  So in the past I jumped through a little hoop (see
`cond' below) to remove them from those vars.

But now apparently those variables are not even used (or perhaps not used in the
same way), so it no longer does any good to simply _remove_ a match for such
buffer names from these lists in order to restore its special-display-ness.

These names are apparently being matched somewhere else now (?), in spite of
`special-display-regexps', and I want to prevent such a match.  I want to
prevent such buffers from using the same window.  IOW, I want
`special-display-regexps' to be respected for such buffers too.

Previously (e.g. the build of 2001/9/05), `same-window-regexps' value in emacs
-Q was this (even though `C-h v' said its "original" value was nil, "original"
here apparently being something prior to emacs -Q!):

("\\*rsh-[^-]*\\*\\(\\|<[0-9]*>\\)" "\\*telnet-.*\\*\\(\\|<[0-9]+>\\)"
"^\\*rlogin-.*\\*\\(\\|<[0-9]+>\\)" "\\*info\\*\\(\\|<[0-9]+>\\)"
"\\*gud-.*\\*\\(\\|<[0-9]+>\\)" "\\`\\*Customiz.*\\*\\'")

Now the value in emacs -Q is nil.  So these variables are apparently no longer
the culprits that are overriding/disrespecting `special-display-regexps'.

Previously it was enough to do this, to make *info* and *Customize* buffers
respect `special-display-regexps', letting them be special-display frames:

(cond ((> emacs-major-version 21)
       (remove-hook 'same-window-regexps "\\*info\\*\\(\\|<[0-9]+>\\)")
       (remove-hook 'same-window-regexps "\\`\\*Customiz.*\\*\\'"))
      ((< emacs-major-version 21)
       (remove-hook 'same-window-buffer-names "*info*"))
      (t
       (remove-hook 'same-window-buffer-names "*info*")
       (remove-hook 'same-window-regexps "\\`\\*Customiz.*\\*\\'")))

Now that has no effect.  These vars remain nil, so they are apparently no longer
the places where the "same-window" override of `special-display-regexps' is
coming from.  What hoops must we jump through now, to let such buffers respect
`special-display-regexps'?

Note too that previously I never had to remove `*unsent mail to
[email-masked]*' from these "same-window" vars: such a buffer always
respected `special-display-regexps' in the past.

I generally want Emacs to display a buffer in a separate frame, which is why I
use non-nil `pop-up-frames'.  I generally want buffers that match
`special-display-regexps' to be popped up in a separate, special-display frame.
I do not want Emacs deciding that more and more buffers should be exceptions to
this customized behavior.