Subject: bug#20538: 24.4; Attempt to delete a surrogate minibuffer frame

From: martin rudalics <[email-masked]>
Date: Mon, 11 May 2015 12:08:39 +0200

>> It probably happens because ediff (by default) display the "control
 >> panel" in a frame without minibuffer and Emacs doesn't allow to make
 >> such a frame the last remaining one.
 >
 > Not exactly.
 >
 > In the meanwhile, I noticed that the bug can be reproduced as
 > follows:
 >
 > emacs -Q foo bar
 >
 > M-x ediff-buffers ; to compare buffers foo and bar
 >
 > ; select buffer foo
 >
 > C-x 5 2 ; display buffer foo in a 2nd window in new frame
 >
 > ; in the frame displaying buffers foo and bar
 >
 > M-x delete-frame
 >
 > Error: Attempt to delete a surrogate minibuffer frame

Because the "frame displaying buffers foo and bar" is the frame that has
the minibuffer for the minibuffer-less "frame displaying the Ediff
control panel".  As I said above you are not allowed to delete the frame
with the minibuffer because that would make the minibuffer-less frame
the last remaining one.

 > ; select the frame displaying the Ediff control panel
 >
 > M-x delete-frame
 >
 > Success!

That frame has no minibuffer.  Hence it cannot possibly serve as
surrogate minibuffer frame and you can delete it without any problems.

 > It seems this should be the other way round: the "surrogate
 > minibuffer attribute" should be given to the frame displaying the
 > Ediff control panel instead of the frame displaying buffers foo and bar.

The surrogate minibuffer frame is the one whose minibuffer substitutes
the non-existing minibuffer of the control panel frame.  This is how
ediff sets things up.

martin