From 62c5106ca59c5771ba2e62725985ba802afdc0d1 Mon Sep 17 00:00:00 2001 From: Karoly Lorentey Date: Sun, 11 Sep 2005 03:51:40 +0000 Subject: [PATCH] Don't let server-save-buffers-kill-display unexpectedly kill Emacs on --no-wait's X frames. * lisp/server.el (server-process-filter): Use a dummy client with --no-wait's X frames. (server-save-buffers-kill-display): Explicitly delete frame after deleting its client, in case it was a dummy. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-412 --- lisp/server.el | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lisp/server.el b/lisp/server.el index cae3ceaa5d..9250e7b10b 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -612,7 +612,12 @@ The following commands are accepted by the client: (unless current-frame (if (fboundp 'x-create-frame) (let ((params (if nowait - nil + ;; Flag frame as client-created, but use a dummy client. + ;; This will prevent the frame from being deleted when + ;; emacsclient quits while also preventing + ;; `server-save-buffers-kill-display' from unexpectedly + ;; killing emacs on that frame. + (list (cons 'client 'nowait)) (list (cons 'client proc))))) (setq frame (make-frame-on-display (or display @@ -1052,7 +1057,8 @@ With prefix arg, silently save all file-visiting buffers, then kill. If emacsclient was started with a list of filenames to edit, then only these files will be asked to be saved." (interactive "P") - (let ((proc (frame-parameter (selected-frame) 'client))) + (let ((proc (frame-parameter (selected-frame) 'client)) + (frame (selected-frame))) (if proc (let ((buffers (server-client-get proc 'buffers))) ;; If client is bufferless, emulate a normal Emacs session @@ -1062,7 +1068,9 @@ only these files will be asked to be saved." (if buffers (lambda () (memq (current-buffer) buffers)) t)) - (server-delete-client proc)) + (server-delete-client proc) + (when (frame-live-p frame) + (delete-frame frame))) (save-buffers-kill-emacs)))) (define-key ctl-x-map "#" 'server-edit) -- 2.39.2