emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Stop frames stealing eachothers' minibuffers!


From: Gregory Heytings
Subject: Re: Stop frames stealing eachothers' minibuffers!
Date: Fri, 27 Nov 2020 10:06:54 +0000
User-agent: Alpine 2.22 (NEB 394 2020-01-19)


Note that this patch and discussion started with the following observation (on Oct 13):

(i) Have two frames open displaying buffers.
(ii) On frame F1 do C-x b.  This leaves a minibuffer open there.
(iii) Move to F2.
(iv) Do C-x 8 RET <enter some character>.
F1's minibuffer is now on F2.  This is bad.

But I see the same with Emacs 27. After moving to F2, the minibuffer of F1 appears there.


Are you sure? You see the minibuffer moving from frame F1 to frame F2, without doing anything? With Emacs 27? I have Emacs 27.1, and do not see this, neither with graphical nor with terminal Emacs.

It is indeed not possible to replicate the behavior of Emacs 27 and
earlier.  What we have is, for example:

  | Emacs 21-27 | Emacs 28 with (setq m-f-s-f t) | Emacs 28 with (setq m-f-s-f 
nil)
A | MB1 on F1   | MB1 on F2                      | MB1 on F1
B | MB1+2 on F2 | MB1+2 on F2                    | MB1 on F1, MB2 on F2 [1]

A: type C-x C-f on frame F1, switch to frame F2
B: type C-x C-f on frame F1, switch to frame F2, type M-:

Right.  Needs 'enable-recursive-minibuffers' non-nil to replicate.


Or using a command which temporarily sets enable-recursive-minibuffers, like C-x 8 RET or C-h f or C-h w or... But without enable-recursive-minibuffers this patch and discussion would not take place, you simply get a "Command attempted to use minibuffer while in minibuffer". In any case, it is not possible to replicate the behavior of Emacs 21-27, which is IMO not a good thing, especially for something as central to Emacs as the minibuffer.

[1] There is also a severe regression in this case. Type C-x C-f on frame F1, switch to frame F2, type M-:. "Find file" is still visible in the miniwindow on frame F1; switch to frame F1.

Experiment 1: Type the name of a file and RET. You'll get the error message "End of file during parsing", and MB2 on frame F2 will be left. MB1 is now unuseable, and impossible to leave, it will stay on F1 whatever you do.

'keyboard-escape-quit' gets me out. While this should be the last resort only, it happened to me occasionally before Alan's changes. Yet, your scenario must be fixed.


Indeed, 'abort-recursive-edit' also works. But as you write these commands should be used in last resort, especially as they are not known to newcomers.

Experiment 2: Type C-g. MB2 on frame F2 will be left, and "Find file" will stay in MB1 on frame F1. However you cannot use it anymore, the keymap of MB1 is now minibuffer-inactive-mode-map. And like in experiment 1, you cannot leave it.

Bad indeed.  Must be fixed too.


IMO "fixing" in this case should be going back to the earlier state (the Emacs 21-27 behavior), and first trying to _precisely_ define the desired new behavior.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]