* 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
(unless current-frame
(if (fboundp 'x-create-frame)
(let ((params (if nowait
(unless current-frame
(if (fboundp 'x-create-frame)
(let ((params (if nowait
+ ;; 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
(list (cons 'client proc)))))
(setq frame (make-frame-on-display
(or display
If emacsclient was started with a list of filenames to edit, then
only these files will be asked to be saved."
(interactive "P")
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
(if proc
(let ((buffers (server-client-get proc 'buffers)))
;; If client is bufferless, emulate a normal Emacs session
(if buffers
(lambda () (memq (current-buffer) buffers))
t))
(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)
(save-buffers-kill-emacs))))
(define-key ctl-x-map "#" 'server-edit)