aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaroly Lorentey2005-09-11 03:51:40 +0000
committerKaroly Lorentey2005-09-11 03:51:40 +0000
commit62c5106ca59c5771ba2e62725985ba802afdc0d1 (patch)
tree7c4abe778d0d76603afb9e9b11cf631b8ecb2892
parentb8ccaf6fb3041fc99edf29e3c9ea9aa1ca04c1bd (diff)
downloademacs-62c5106ca59c5771ba2e62725985ba802afdc0d1.tar.gz
emacs-62c5106ca59c5771ba2e62725985ba802afdc0d1.zip
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
-rw-r--r--lisp/server.el14
1 files changed, 11 insertions, 3 deletions
diff --git a/lisp/server.el b/lisp/server.el
index cae3ceaa5dd..9250e7b10bc 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -612,7 +612,12 @@ The following commands are accepted by the client:
612 (unless current-frame 612 (unless current-frame
613 (if (fboundp 'x-create-frame) 613 (if (fboundp 'x-create-frame)
614 (let ((params (if nowait 614 (let ((params (if nowait
615 nil 615 ;; Flag frame as client-created, but use a dummy client.
616 ;; This will prevent the frame from being deleted when
617 ;; emacsclient quits while also preventing
618 ;; `server-save-buffers-kill-display' from unexpectedly
619 ;; killing emacs on that frame.
620 (list (cons 'client 'nowait))
616 (list (cons 'client proc))))) 621 (list (cons 'client proc)))))
617 (setq frame (make-frame-on-display 622 (setq frame (make-frame-on-display
618 (or display 623 (or display
@@ -1052,7 +1057,8 @@ With prefix arg, silently save all file-visiting buffers, then kill.
1052If emacsclient was started with a list of filenames to edit, then 1057If emacsclient was started with a list of filenames to edit, then
1053only these files will be asked to be saved." 1058only these files will be asked to be saved."
1054 (interactive "P") 1059 (interactive "P")
1055 (let ((proc (frame-parameter (selected-frame) 'client))) 1060 (let ((proc (frame-parameter (selected-frame) 'client))
1061 (frame (selected-frame)))
1056 (if proc 1062 (if proc
1057 (let ((buffers (server-client-get proc 'buffers))) 1063 (let ((buffers (server-client-get proc 'buffers)))
1058 ;; If client is bufferless, emulate a normal Emacs session 1064 ;; If client is bufferless, emulate a normal Emacs session
@@ -1062,7 +1068,9 @@ only these files will be asked to be saved."
1062 (if buffers 1068 (if buffers
1063 (lambda () (memq (current-buffer) buffers)) 1069 (lambda () (memq (current-buffer) buffers))
1064 t)) 1070 t))
1065 (server-delete-client proc)) 1071 (server-delete-client proc)
1072 (when (frame-live-p frame)
1073 (delete-frame frame)))
1066 (save-buffers-kill-emacs)))) 1074 (save-buffers-kill-emacs))))
1067 1075
1068(define-key ctl-x-map "#" 'server-edit) 1076(define-key ctl-x-map "#" 'server-edit)