aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaroly Lorentey2004-04-19 14:16:10 +0000
committerKaroly Lorentey2004-04-19 14:16:10 +0000
commit6ed9e43af1ab2e8929bbdf30b31af0c6e774b619 (patch)
treea425288cdc653063da4f1422c1826211db66f570
parent6087973173dba8d068ba4e97e8b290d2ddbf0da8 (diff)
downloademacs-6ed9e43af1ab2e8929bbdf30b31af0c6e774b619.tar.gz
emacs-6ed9e43af1ab2e8929bbdf30b31af0c6e774b619.zip
Fix error on deleting an emacsclient terminal (Dan Nicolaescu).
lisp/server.el (server-delete-client): Check that the buffer is live before switching to it. Also, check that the tty display still has live buffers before deleting it. (server-handle-delete-frame): Don't do anything if the frame was on a tty device (reported by Dan Nicolaescu). git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-148
-rw-r--r--lisp/server.el26
1 files changed, 15 insertions, 11 deletions
diff --git a/lisp/server.el b/lisp/server.el
index e26272df011..4eb5c421f4f 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -218,19 +218,21 @@ New clients have no properties."
218 (setq server-clients (delq client server-clients)) 218 (setq server-clients (delq client server-clients))
219 219
220 (dolist (buf buffers) 220 (dolist (buf buffers)
221 (with-current-buffer buf 221 (when (buffer-live-p buf)
222 ;; Remove PROC from the clients of each buffer. 222 (with-current-buffer buf
223 (setq server-buffer-clients (delq proc server-buffer-clients)) 223 ;; Remove PROC from the clients of each buffer.
224 ;; Kill the buffer if necessary. 224 (setq server-buffer-clients (delq proc server-buffer-clients))
225 (when (and (null server-buffer-clients) 225 ;; Kill the buffer if necessary.
226 (or (and server-kill-new-buffers 226 (when (and (null server-buffer-clients)
227 (not server-existing-buffer)) 227 (or (and server-kill-new-buffers
228 (server-temp-file-p))) 228 (not server-existing-buffer))
229 (kill-buffer (current-buffer))))) 229 (server-temp-file-p)))
230 (kill-buffer (current-buffer))))))
230 231
231 ;; Delete the client's tty. 232 ;; Delete the client's tty.
232 (let ((tty (server-client-get client 'tty))) 233 (let ((tty (server-client-get client 'tty)))
233 (when tty (delete-tty tty))) 234 (when (and tty (server-tty-live-p tty))
235 (delete-tty tty)))
234 236
235 ;; Delete the client's frames. 237 ;; Delete the client's frames.
236 (dolist (frame (frame-list)) 238 (dolist (frame (frame-list))
@@ -279,7 +281,9 @@ New clients have no properties."
279(defun server-handle-delete-frame (frame) 281(defun server-handle-delete-frame (frame)
280 "Delete the client connection when the emacsclient frame is deleted." 282 "Delete the client connection when the emacsclient frame is deleted."
281 (let ((proc (frame-parameter frame 'client))) 283 (let ((proc (frame-parameter frame 'client)))
282 (when proc 284 (when (and proc (window-system frame))
285 ;; (Closing a terminal frame must not trigger a delete;
286 ;; we must wait for delete-tty-after-functions.)
283 (server-log (format "server-handle-delete-frame, frame %s" frame) proc) 287 (server-log (format "server-handle-delete-frame, frame %s" frame) proc)
284 (server-delete-client proc)))) 288 (server-delete-client proc))))
285 289