bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#58909: 29.0.50; [WIP PATCH] Deleting the last frame of an emacsclien


From: Jim Porter
Subject: bug#58909: 29.0.50; [WIP PATCH] Deleting the last frame of an emacsclient doesn't ask to save
Date: Mon, 31 Oct 2022 13:28:01 -0700

On 10/31/2022 12:52 PM, Eli Zaretskii wrote:
Date: Mon, 31 Oct 2022 12:38:04 -0700
From: Jim Porter <jporterbugs@gmail.com>
Cc: 58909@debbugs.gnu.org

Still,
'C-x C-c' still prompts in that case too. My understanding is that it
does so because when an application is waiting for the emacsclient to
finish, you can't go back from killing the terminal/client; you *can*
(usually) go back if you're only killing a frame.

My interpretation of why "C-x C-c" prompts is that it does the same as
when you use it from a non-client frame.  We want the same UX in both
cases.  "C-x 5 0" should IMO likewise produce the same behavior in
both cases.

That's actually my goal too: I'd like to ensure that the UX for a client frame is as similar as possible as for a non-client frame. Since we disagree on what that similarity should be, I guess that means we have different mental models for some part of this. If it helps, I'll try to explain how I think of it.

From a client frame, 'C-x C-c' prompts to save all the file-buffers associated with that client, and then kills the client, which kills the frames for that client. That's similar to 'C-x C-c' in a non-client setting: it kills *all* frames and prompts to save *all* file-buffers. So I see the client as a "sub" Emacs: it owns some frames and (partially) owns some buffers. Commands on the client then work on that subset, and only that subset. Since frames can only be owned by a single client, in my mind frame commands also work within that client's subset.

For frame-deletion, non-client Emacs lets you kill a single frame via 'C-x 5 0' or clicking the X in the frame's title bar. However, if it's the last frame, then:

C-x 5 0 -> Error: "Attempt to delete the sole visible or iconified frame"
  Clicking X -> Call 'save-buffers-kill-emacs' (see 'handle-delete-frame')

To me, that would mean that the matching UX for a client with a single frame (but possibly other frames for Emacs overall) is:

  C-x 5 0    -> Error
  Clicking X -> Call 'save-buffers-kill-terminal'

Signaling an error for 'C-x 5 0' seems excessively strict to me, so calling 'save-buffers-kill-terminal' in both cases seemed like a good compromise to me. Instead of getting an error, the user gets a prompt, but can still proceed with killing that frame if they're sure.





reply via email to

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