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

From: "Roland Winkler" <[email-masked]>
Date: Mon, 11 May 2015 12:03:16 -0500

On Mon May 11 2015 martin rudalics wrote:
> 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.

I see, thank you, initially I was rather off with my interpretation
of what was happening.

My usage scenario is the following:

Normally I run emacs with always no more than two frames.  I create
a 2nd frame as needed, but I delete it when it is not needed anymore
so that it does not clutter the desktop.  An ediff session then adds
one more frame for the ediff control panel.  Yet during an ediff
session I can get side-tracked: the frame used for displaying the ediff
buffers A and B may get used for something else, then I create
another frame and finally I want to delete the frame that Ediff
wants to use as surrogate minibuffer frame.

I understand that the frame displaying the ediff control panel needs
*some* other frame to provide a minibuffer.  Is it necessary that a
particular frame serves this purpose?  Or would it be sufficient
that emacs made sure that always at least one frame has a proper
minibuffer?  (In the case of the ediff control panel, I believe it
is fair to assume that anyway this frame rarely requires a proper
minibuffer. For me, the control panel is effectively the minibuffer
for an ediff session: commands are entered in that buffer; there is
no need for "a minibuffer for the ediff minibuffer".)

If nothing else, it would be good if the error message issued when
attempting to delete a surrogate minibuffer frame could be improved:
I got this error message at a point when I was not thinking about
ediff, but I just wanted to get back to my default "one frame
setup"; and it happened I wanted to delete the wrong frame to
achieve this goal.

Roland