(while server-frames
(let ((frame (cadar server-frames)))
(setq server-frames (cdr server-frames))
- (when frame-live-p frame (delete-frame frame 'force))))
+ (when (frame-live-p frame) (delete-frame frame 'force))))
(unless leave-dead
(if server-process
(server-log (message "Restarting server")))
(coding-system (and default-enable-multibyte-characters
(or file-name-coding-system
default-file-name-coding-system)))
- client nowait eval
+ client nowait eval newframe
(files nil)
(lineno 1)
(columnno 0))
(setq request "")))))
;; Open a new frame at the client. ARG is the name of the pseudo tty.
((and (equal "-pty" arg) (string-match "\\([^ ]*\\) \\([^ ]*\\) " request))
+ (setq newframe t)
(let ((pty (server-unquote-arg (match-string 1 request)))
(type (server-unquote-arg (match-string 2 request))))
(setq request (substring request (match-end 0)))
(if eval
(condition-case err
(let ((v (eval (car (read-from-string arg)))))
- (when v
+ (when (and (not newframe v))
(with-temp-buffer
(let ((standard-output (current-buffer)))
(pp v)
(server-visit-files files client nowait)
(run-hooks 'post-command-hook))
;; CLIENT is now a list (CLIENTNUM BUFFERS...)
- (if (null (cdr client))
+ (if (and (not newframe) (null (cdr client)))
;; This client is empty; get rid of it immediately.
(progn
(let ((frame (assq (car client) server-frames)))
;; since we've already effectively done that.
(if (null next-buffer)
(if server-clients
- (server-switch-buffer (nth 1 (car server-clients)) killed-one)
+ (let ((buffer (nth 1 (car server-clients))))
+ (and buffer (server-switch-buffer buffer killed-one)))
(unless (or killed-one (window-dedicated-p (selected-window)))
(switch-to-buffer (other-buffer))
(message "No server buffers remain to edit")))