summaryrefslogtreecommitdiff
path: root/lisp/talk.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/talk.el')
-rw-r--r--lisp/talk.el54
1 files changed, 26 insertions, 28 deletions
diff --git a/lisp/talk.el b/lisp/talk.el
index 6d542b0f99b..56549431aab 100644
--- a/lisp/talk.el
+++ b/lisp/talk.el
@@ -49,41 +49,39 @@ Each element has the form (DISPLAY FRAME BUFFER).")
(defun talk ()
"Connect to the Emacs talk group from the current X display or tty frame."
(interactive)
- (let ((type (frame-live-p (selected-frame))))
- (if (eq type t)
- ;; Termcap frame
- (talk-add-tty-frame (selected-frame))
- (if (eq type 'x)
- ;; X frame
- (talk-add-display (frame-parameter (selected-frame) 'display))
- (error "Could not determine frame type"))))
+ (let ((type (frame-live-p (selected-frame)))
+ (display (frame-display (selected-frame))))
+ (cond
+ ((eq type t)
+ (talk-add-display (selected-frame)))
+ ((eq type 'x)
+ (talk-add-display (frame-display (selected-frame))))
+ (t
+ (error "Unknown frame type"))))
(talk-update-buffers))
-(defun talk-add-display (display)
- (let* ((elt (assoc display talk-display-alist))
- (name (concat "*talk-" display "*"))
- buffer frame)
- (if (not (and elt (frame-live-p (setq frame (nth 1 elt)))))
- (setq frame (make-frame-on-display display (list (cons 'name name)))))
- (if (not (and elt (buffer-name (get-buffer (setq buffer (nth 2 elt))))))
- (setq buffer (get-buffer-create name)))
- (setq talk-display-alist
- (cons (list display frame buffer) (delq elt talk-display-alist)))))
-
-(defun talk-add-tty-frame (frame)
- (let* ((elt (assoc (frame-tty-name frame) talk-display-alist))
- (name (concat "*talk-" (frame-tty-name frame) "*"))
+(defun talk-add-display (frame)
+ (let* ((display (if (frame-live-p frame)
+ (frame-display frame)
+ frame))
+ (elt (assoc display talk-display-alist))
+ (name (concat "*talk-" (display-name display) "*"))
buffer)
+ (unless (frame-live-p frame)
+ (setq frame (make-frame-on-display display (list (cons 'name name)))))
+ (if (and elt (frame-live-p (nth 1 elt)))
+ (setq frame (nth 1 elt)))
(if (not (and elt (buffer-name (get-buffer (setq buffer (nth 2 elt))))))
(setq buffer (get-buffer-create name)))
- (add-to-list 'delete-tty-after-functions 'talk-handle-delete-tty)
+ (add-to-list 'delete-frame-functions 'talk-handle-delete-frame)
(setq talk-display-alist
- (cons (list (frame-tty-name frame) frame buffer) (delq elt talk-display-alist)))))
+ (cons (list display frame buffer) (delq elt talk-display-alist)))))
-(defun talk-handle-delete-tty (tty)
- (let ((elt (assoc tty talk-display-alist)))
- (setq talk-display-alist (delq elt talk-display-alist))
- (talk-update-buffers)))
+(defun talk-handle-delete-frame (frame)
+ (dolist (d talk-display-alist)
+ (when (eq (nth 1 d) frame)
+ (setq talk-display-alist (delq d talk-display-alist))
+ (talk-update-buffers))))
(defun talk-disconnect ()
"Disconnect this display from the Emacs talk group."