diff options
| author | Karoly Lorentey | 2004-04-19 14:16:10 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2004-04-19 14:16:10 +0000 |
| commit | 6ed9e43af1ab2e8929bbdf30b31af0c6e774b619 (patch) | |
| tree | a425288cdc653063da4f1422c1826211db66f570 | |
| parent | 6087973173dba8d068ba4e97e8b290d2ddbf0da8 (diff) | |
| download | emacs-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.el | 26 |
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 | ||