Thanks for answering.
I'm still a bit dense in the following sense: You have a fullscreen
frame, do C-x 5 2 and now see the new frame on a new desktop but it
apparently didn't get focus because, as you say, the prompt doesn't
appear there. However, in your initial posting you say that "Focus
shifts there". What makes you think that focus shifted there? The
appearance of the cursor, the mode line, some decoration in the new
frame? Does C-x 2 split a window in the new or old frame?
C-x 2: New frame, surprisingly. But subsequent commands are still messed up. For example, after C-x 2 I now have 2 windows in the new frame, but if I try M-x, the prompt shows up the old frame! That's without trying any of the hooks you suggested.
Focus: Sorry. I did not use the right terminology. I only at the moment work on my laptop with a single physical screen. So when a "new frame opens on new desktop", what I see on my physical screen is the old desktop slides off to the left and a new desktop with a new frame appears. I probably should not have used the word "focus." I get a new frame with a highlighted cursor in the main window.
Just noticed another weirdness, btw:
– I see a blinking cursor with emacs -Q.
– But after I have two frames in different desktops, immediately after I switch between desktops (in either direction), the cursor is highlighted, but does not blink.
– In fact, this cursor thing has nothing to do with full screen or desktops: with two regular frames next to each other on a common desktop, when I click on a frame to switch focus there, the cursor gets highlighted, but does not blink until I do something... But if I do C-x 5 2 to switch frames, it blinks as it should. And when I switch from Firefox (where I am writing this) to Emacs (using Alt-TAB [=command-TAB]), the cursor initially does not blink.
Another experiment (similar to what I wrote in an earlier email): Do the C-x 5 2 from a full-screen frame. Do a M-x. I do *not* see the prompt. Now use MacOS shortcut keys to switch frames (ctrl-right/left). Then the M-x prompt appears in BOTH frames. In one it is selected (cursor is highlighted) and in the other it is not (highlighted cursor is in the main *scratch* window). This is w/o any of the hooks you wanted me to try. Just plain Macports Emacs -Q.
Hope this helps,
–Boris
>> I'd like to understand the focus issue. What does C-x 5 o do when run
>> in the old frame?
>
>
> - Opened "Emacs -Q"
> - Clicked the green button (fullscreen)
> - C-x 5 2 (new frame opens on another desktop)
> - I swipe to original desktop
> - C-x 5 o switches to the new one and repeating it takes me back
Does C-x 5 o also switch the desktop you see?
> What does running 'foo' defined as
>>
>> (defun foo ()
>> (interactive)
>> (let ((frame (make-frame)))
>> (sit-for 3)
>> (message "%s" (frame-focus-state frame))))
>>
>
> When I do this in an non-full-screen frame, a new frame pops up with a "t"
>
> When I do it in a full-screen frame, a new frame pops up but a "t' is in
> the OLD frame. And then (I think) with some delay it also appears in the
> NEW frame.
This "delay" should come from the (sit-for 3) call.
>> report? Is the message shown in both frames?
>>
>> Does 'foo' specified as
>>
>> (defun foo ()
>> (interactive)
>> (let ((frame (make-frame)))
>> (select-frame-set-input-focus frame)))
>>
>> behave the same way?
>
>
> I get a "nil" in both frames.
The nil would come from the return value of the frame focusing function
so my question was silly. What I really meant with "behave the same
way" was whether the new frame does get input focus with this 'foo',
that is, whether now Emacs shows the prompt in the new frame when you
try executing a command. I suppose the answer is "no".
> Hard to tell if it's simulataneous (as I
> cannot look at them at the same time) and maybe switching desktops triggers
> something.
>
> Does
>>
>> (add-hook 'after-make-frame-functions 'select-frame-set-input-focus)
>>
>> change anything?
>
>
> Not really. When I make a new frame, a new frame on a new desktop appears,
> but typing M-x shows no change on screen. When I switch back to the
> original screen M-x shows on screen AND when I switch again NOW I can see
> M-x prompt on the new screen as well.
>
>
> Does
>>
>> (add-hook 'after-make-frame-functions 'redirect-frame-focus)
>>
>> change anything?
>>
>
> No. Same behavior as after the other add-hook.
I see.
> Another oddity (or is it expected): when I switch back-and-forth between
> desktops having typed M-x, on one screen the focus (selected window?) is on
> the M-x line and on the other on *scratch* (where I originally ran the C-x
> 5 2 command). Not sure which is which by now...
>
> Actually, after a few switches back and forth, the M-x line is the selected
> window in the frame where I typed it (new frame) and it's not selected in
> the old frame.
>
> Not sure if this helps in any way.
Not yet. If you have two normal (non-fullscreen) frames of the same
Emacs process on two different desktops, type a command so that a prompt
appears in one of them and then do C-x 5 o: Does the prompt move to the
other frame? Right away?
BTW: Do you have Mission Control installed and active? Maybe some
setting in it triggers the "put the frame on the other desktop because
the first one is too crowded" behavior.
martin