emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/talk.el,v


From: Miles Bader
Subject: [Emacs-diffs] Changes to emacs/lisp/talk.el,v
Date: Wed, 29 Aug 2007 05:28:39 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Miles Bader <miles>     07/08/29 05:28:10

Index: lisp/talk.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/talk.el,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- lisp/talk.el        26 Jul 2007 05:26:35 -0000      1.13
+++ lisp/talk.el        29 Aug 2007 05:28:02 -0000      1.14
@@ -46,17 +46,44 @@
   ;; Add the new buffers to all talk frames.
   (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)))))
+;;;###autoload
+(defun talk ()
+  "Connect to the Emacs talk group from the current X display or tty frame."
+  (interactive)
+  (let ((type (frame-live-p (selected-frame)))
+       (display (frame-terminal (selected-frame))))
+    (cond
+     ((eq type t)
+      (talk-add-display (selected-frame)))
+     ((eq type 'x)
+      (talk-add-display (frame-terminal (selected-frame))))
+     (t
+      (error "Unknown frame type"))))
+  (talk-update-buffers))
+
+(defun talk-add-display (frame)
+  (let* ((display (if (frame-live-p frame)
+                     (frame-terminal frame)
+                   frame))
+        (elt (assoc display talk-display-alist))
+        (name (concat "*talk-" (terminal-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-frame-functions 'talk-handle-delete-frame)
     (setq talk-display-alist
          (cons (list display frame buffer) (delq elt talk-display-alist)))))
 
+(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."
   (interactive)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]