diff options
| author | Karoly Lorentey | 2005-09-11 03:51:40 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2005-09-11 03:51:40 +0000 |
| commit | 62c5106ca59c5771ba2e62725985ba802afdc0d1 (patch) | |
| tree | 7c4abe778d0d76603afb9e9b11cf631b8ecb2892 | |
| parent | b8ccaf6fb3041fc99edf29e3c9ea9aa1ca04c1bd (diff) | |
| download | emacs-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.el | 14 |
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. | |||
| 1052 | If emacsclient was started with a list of filenames to edit, then | 1057 | If emacsclient was started with a list of filenames to edit, then |
| 1053 | only these files will be asked to be saved." | 1058 | only 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) |