Mercurial > emacs
comparison lisp/server.el @ 83444:00c55c52afd8
Make all frames created in an emacsclient session belong to that client.
* lisp/frame.el (make-frame): Also inherit 'client parameter. Don't
override explicitly specified values with inherited ones.
* server.el (server-delete-client): Delete frames after deleting the tty.
Clear 'client parameter before deleting a frame.
* server.el (server-handle-delete-frame): Delete the client if this was
its last frame.
* startup.el (fancy-splash-default-action): Fix typo in comment.
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-484
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Mon, 02 Jan 2006 07:50:53 +0000 |
parents | 6359ac574acf |
children | 8eba1344ed4f |
comparison
equal
deleted
inserted
replaced
83443:4d989ab8dad8 | 83444:00c55c52afd8 |
---|---|
268 (or (and server-kill-new-buffers | 268 (or (and server-kill-new-buffers |
269 (not server-existing-buffer)) | 269 (not server-existing-buffer)) |
270 (server-temp-file-p))) | 270 (server-temp-file-p))) |
271 (kill-buffer (current-buffer)))))) | 271 (kill-buffer (current-buffer)))))) |
272 | 272 |
273 ;; Delete the client's frames. | |
274 (unless noframe | |
275 (dolist (frame (frame-list)) | |
276 (when (and (frame-live-p frame) | |
277 (equal proc (frame-parameter frame 'client))) | |
278 ;; Prevent `server-handle-delete-frame' from calling us | |
279 ;; recursively. | |
280 (set-frame-parameter frame 'client nil) | |
281 (delete-frame frame)))) | |
282 | |
273 ;; Delete the client's tty. | 283 ;; Delete the client's tty. |
274 (let ((terminal (server-client-get client 'terminal))) | 284 (let ((terminal (server-client-get client 'terminal))) |
275 (when (eq (terminal-live-p terminal) t) | 285 (when (eq (terminal-live-p terminal) t) |
276 (delete-terminal terminal))) | 286 (delete-terminal terminal))) |
277 | |
278 ;; Delete the client's frames. | |
279 (unless noframe | |
280 (dolist (frame (frame-list)) | |
281 (if (and (frame-live-p frame) | |
282 (equal (car client) (frame-parameter frame 'client))) | |
283 (delete-frame frame)))) | |
284 | 287 |
285 ;; Delete the client's process. | 288 ;; Delete the client's process. |
286 (if (eq (process-status (car client)) 'open) | 289 (if (eq (process-status (car client)) 'open) |
287 (delete-process (car client))) | 290 (delete-process (car client))) |
288 | 291 |
316 (defun server-handle-delete-frame (frame) | 319 (defun server-handle-delete-frame (frame) |
317 "Delete the client connection when the emacsclient frame is deleted." | 320 "Delete the client connection when the emacsclient frame is deleted." |
318 (let ((proc (frame-parameter frame 'client))) | 321 (let ((proc (frame-parameter frame 'client))) |
319 (when (and (frame-live-p frame) | 322 (when (and (frame-live-p frame) |
320 proc | 323 proc |
321 (or (window-system frame) | 324 ;; See if this is the last frame for this client. |
322 ;; A terminal device must not yet be deleted if | 325 (< 1 (let ((frame-num 0)) |
323 ;; there are other frames on it. | 326 (dolist ((f (frame-list))) |
324 (< 0 (let ((frame-num 0)) | 327 (when (eq proc (frame-parameter f 'client)) |
325 (mapc (lambda (f) | 328 (setq frame-num (1+ frame-num)))) |
326 (when (eq (frame-terminal f) | 329 frame-num))) |
327 (frame-terminal frame)) | |
328 (setq frame-num (1+ frame-num)))) | |
329 (frame-list)) | |
330 frame-num)))) | |
331 (server-log (format "server-handle-delete-frame, frame %s" frame) proc) | 330 (server-log (format "server-handle-delete-frame, frame %s" frame) proc) |
332 (server-delete-client proc 'noframe)))) ; Let delete-frame delete the frame later. | 331 (server-delete-client proc 'noframe)))) ; Let delete-frame delete the frame later. |
333 | 332 |
334 (defun server-handle-suspend-tty (terminal) | 333 (defun server-handle-suspend-tty (terminal) |
335 "Notify the emacsclient process to suspend itself when its tty device is suspended." | 334 "Notify the emacsclient process to suspend itself when its tty device is suspended." |