Subject: 24.0.50; regression: `special-display-popup-frame' broken

From: "Drew Adams" <[email-masked]>
Date: Mon, 13 Jun 2011 10:43:07 -0700

I do not have a recipe from emacs -Q.  The simplest recipe I have
offhand is to start with this:
 
runemacs.exe -Q --debug-init -l "hexrgb.el" -l "oneonone.el" -f
"1on1-emacs"
 
You can download the two files mentioned
from here:
http://www.emacswiki.org/cgi-bin/wiki?action=index;match=%5C.(el%7Ctar)(%5C.gz)%
3F%24
 
And then do this:
 
M-x f TAB ; to display *Completions* frame.
C-]       ; to return to top level.
 
M-x f TAB o
 
Or just hit TAB twice in a row: M-x f TAB TAB.  IOW, try to type more
input in minibuffer.  This raises the error
 
"Buffer is read-only #<buffer *Completions*>"
 
This should not happen, because the code that creates my special-display
frame *Completions* does this:
 
(redirect-frame-focus (selected-frame) 1on1-minibuffer-frame)
 
The code that does that is in function
`1on1-display-*Completions*-frame', which is invoked via this entry on
list `special-display-buffer-names':
 
("*Completions*" 1on1-display-*Completions*-frame
 ((background-color ...)))
 
My guess is that `special-display-popup-frame' is the culprit, but the
effect is as if `redirect-frame-focus' were no longer respected.  And I
see that the code of `special-display-popup-frame' has not changed
recently.
 
What seems to be happening (determined by debugging entry to
`1on1-display-*Completions*-frame'), is that
`1on1-display-*Completions*-frame' gets called only when the frame is
created, not each time `special-display-popup-frame' is called.  So if
*Completions* is already displayed `1on1-display-*Completions*-frame' is
not invoked for its display, and the call to `redirect-frame-focus' is
not effected.
 
`C-h f special-display-popup-frame' says that it is obsolete as of 24.1,
but this just now stopped working.
 
And the doc, AFAICT, says nothing about how to do what users have always
done using `special-display-buffer-names'.  That uses
`special-display-popup-frame', which is still the default value of
`special-display-function'.
 
This seems to be horribly broken now.  I see other problems that might
(or might not) be related: breakage of dedicated frames (no longer
dedicated), so that, for instance, other buffers get put into my
dedicated *Completions* frame.
 
We seem to be in a halfway position now, between two horses (or two
chairs, depending on your culture).  The default value of
`special-display-function' is a function that is declared obsolete!  And
things that have always worked no longer work at all.
 
It's not clear, if users are being required to adjust their code, what
adjustments are needed.  Some guidance needs to be provided, in addition
to fixing any related bugs.
 
I cannot use Emacs for the moment, starting with this build.  I must use
an older build until this problem (and perhaps related problems) can be
fixed.

In GNU Emacs 24.0.50.1 (i386-mingw-nt5.1.2600)
 of 2011-06-13 on 3249CTO
Windowing system distributor `Microsoft Corp.', version 5.1.2600
configured using `configure --with-gcc (4.5) --no-opt --cflags
-Ic:/build/include'