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."