Package: emacs;
Reported by: "Drew Adams" <drew.adams <at> oracle.com>
Date: Fri, 13 Jul 2012 18:07:01 UTC
Severity: normal
Found in version 24.1
Done: martin rudalics <rudalics <at> gmx.at>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: martin rudalics <rudalics <at> gmx.at> To: Drew Adams <drew.adams <at> oracle.com> Cc: 11939 <at> debbugs.gnu.org Subject: bug#11939: 24.1; `save-buffers-kill-emacs' loses minibuffer focuswhenit calls `list-processes' Date: Tue, 07 Aug 2012 10:58:30 +0200
> You seem to be saying that if BUFFER is selected/current, and if input is read > somewhere (where?) - then what? The focus gets automatically redirected to the > minibuffer frame? A BUFFER is not selected, only a window or a frame is. I say that when a window on a minibuffer-less frame is selected and its buffer is current at the time a `yes-or-no-p' question is asked, focus for reading input from the minibuffer gets redirected to a minibuffer-equipped frame. > This is not about reading input with BUFFER selected/current. The idea is to > have the _previously_ selected buffer be selected/current, while input is read > from the minibuffer. The idea is not to make BUFFER selected/current, but just > to display it. I don't talk about ideas. I talk about the current implementation of dialogs that read text from the minibuffer. > Beyond that, that sentence of mine was shorthand. It (apparently) is not enough > that the focus be redirected once, at some point, to the minibuffer frame. It > needs to either remain there (somehow preventing MS Windows from moving it away) > or be put back there (after MS Windows moves it to BUFFER's frame). Focus redirection is done by Emacs. MS Windows won't redirect focus. > IOW, even > if redirection is happening now as it should, it is not sufficient if, after > that redirection to the minibuffer, the OS changes the focus again (to the new > frame). Any redirection is permanent for a frame until it's explicitly changed by Emacs. >> IIUC you want to modify the behavior of `yes-or-no-p' to >> redirect frame focus in your sense. > > I don't know why you mention `yes-or-no-p'. This is about reading from the > minibuffer, in general. > > I don't want or not want to modify `yes-or-no-p' or `read-from-minibuffer'. I'm > just saying that if the problem is that we want to display BUFFER, and it gets > displayed in a new frame, and we want to read from the minibuffer, then we do > not want, for that minibuffer reading, the input focus to be in BUFFER's frame. Above you say that > It (apparently) is not enough > that the focus be redirected once, at some point, to the minibuffer frame. so you want to modify `yes-or-no-p' or `read-from-minibuffer'. > Yes, when reading from the minibuffer is initiated, > the minibuffer frame should get the focus. But the user (or Emacs) should not > be prevented from switching the focus to another frame. > > All that we are trying to prevent or remedy is the focus switching to another > (new) frame by the OS. We should not be preventing either Emacs or the user > from switching focus to another frame, just because the minibuffer is active. > > That is the only point I was trying to make here. And my point is that beyond the initial redirection the mechanism reading keyboard events is responsible for providing such behavior. > I did not know where you were asking the question. By that, I assume you mean > that the new frame is selected (and has the focus?) when you invoke > `yes-or-no-p'. Is that right? I temporarily select the new frame when I invoke `yes-or-no-p'. The new frame will be selected again by `handle-switch-frame' if and when Emacs is notified by the OS. > Just for my info, why does it matter where `yes-or-no-p' is invoked? _Should_ > it matter, or is it just a fact that we must live with that it does matter? It does matter if and when the selected frame does not have a minibuffer and I want to redirect focus to a minibuffer frame. >> > Yes, it is more restrictive than the actual problem encountered. >> > As I said, it might suffice in practice, but there is nothing in the >> > problem description that requires that the buffer itself be temporary. >> >> I have to kill the buffer to remove the frame. > > I don't understand why, but probably I don't need to understand everything. Why > doesn't `delete-frame' do what you need? Because the window is "quit" when the user is done with the dialog. `quit-window' deletes the frame only if the buffer is killed or `frame-auto-hide-function' takes over. >> And I have to remove the frame because you complained that >> `save-window-excursion' cannot remove a popped up frame. > > Hm. I don't recall that at all, but I believe you that I did. Was that in some > other thread? In the thread on the behavior of `dired-mark-pop-up' IIRC. >> If we use `frame-auto-hide-function', the caller does not have to kill >> the buffer and there's no need to make this construct work >> for temporary buffers only. > > That sounds good to me. Perhaps I'm missing something. I don't want to steer > you down the wrong path, but what you say here sounds good to me. > > If the more general case can be handled, then the more restrictive case > (temporary buffer, not just temporary display) could presumably be handled also, > as a subcase, no? Or even if not as a subcase, as a separate case. > > IOW, if possible it would be good to have both possibilities, so a programmer > could get the right behavior for a given context: If s?he wants that buffer to > be temporary, then call a construct that treats it as such (killing it). If > s?he wants that buffer not to be temporary and only its display to be temporary > then call a construct that does that instead. > >> > Anyway, let's talk about this later. >> >> It's your choice. > > Can we have both possibilities? > > If not, let's get the temporary-buffer one first. IOW, I think you have that > case almost nailed - there is just the special-display/dedicatedness that does > not work yet. Then have a look at what happens there. martin
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.