Subject: Re: bug#57939: 29.0.50; Fixing raise-frame on Sway

From: Po Lu <[email-masked]>
Date: Tue, 20 Sep 2022 09:30:57 +0800

Sean Whitton <[email-masked]> writes:

> Under Sway, with pgtk, raise-frame doesn't work.  We could make it work
> by using Sway's IPC to send a request to "focus" the frame.  This can be
> done without invoking any external processes, but here is a hack using
> swaymsg(1) just as a demonstration:
>
>     (defun spw/sway-raise-frame (orig-fun &optional frame)
>       (unless frame (setq frame (selected-frame)))
>       (if (member "XDG_CURRENT_DESKTOP=sway"
>                   (frame-parameter frame 'environment))
>           (call-process "swaymsg" nil nil nil
>     		    (format "[title=\"%s\"]"
>                             (frame-parameter frame 'name))
>     		    "focus")
>         (funcall orig-fun frame)))
>     (advice-add 'raise-frame :around #'spw/sway-raise-frame)

> On the one hand, Sway is one of the more popular Wayland compositors, so
> it would be nice to support this.  On the other hand, this isn't a
> generic wlroots mechanism -- it will work only for Sway.  (I suppose
> it's possible that some other compositors will adopt Sway's IPC.)

If there's anything I've learned in over 2 decades of dealing with
windowing on GNU/Linux, it's that these mechanisms tend to be yanked
from underneath our feet.  It sounds very risky to add support for that
to such a basic function in Emacs.

In addition, raise-frame is not really supposed to focus the frame.  But
I guess that's unavoidable here.

And what if there are multiple frames with the same name? What frame is
raised in that case?

So thanks, but this is not really the right thing for Emacs.