Don't let server-save-buffers-kill-display unexpectedly kill Emacs on --no-wait's...
authorKaroly Lorentey <lorentey@elte.hu>
Sun, 11 Sep 2005 03:51:40 +0000 (03:51 +0000)
committerKaroly Lorentey <lorentey@elte.hu>
Sun, 11 Sep 2005 03:51:40 +0000 (03:51 +0000)
* 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

index cae3cea..9250e7b 100644 (file)
@@ -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)