* riece-addon.el (riece-command-list-addons): Use
[riece] / lisp / riece-display.el
index 6745e2d..a3d59e2 100644 (file)
@@ -125,11 +125,13 @@ Local to the buffer in `riece-buffer-list'.")
                 (riece-identity-server riece-current-channel))
          (riece-with-server-buffer (riece-identity-server
                                     riece-current-channel)
-           (riece-identity-assoc
-            (riece-identity-prefix (nth 1 (riece-signal-args signal)))
-            (riece-channel-get-users (riece-identity-prefix
-                                      riece-current-channel))
-            t)))))
+           (when (riece-channel-p (riece-identity-prefix
+                                   riece-current-channel))
+             (riece-identity-assoc
+              (riece-identity-prefix (nth 1 (riece-signal-args signal)))
+              (riece-channel-get-users (riece-identity-prefix
+                                        riece-current-channel))
+              t))))))
   (riece-connect-signal
    'user-renamed
    (lambda (signal handback)
@@ -325,7 +327,9 @@ Local to the buffer in `riece-buffer-list'.")
        (while pointer
          (if (cdr pointer)
              (setcdr pointer (cons "," (cdr pointer))))
-         (setq pointer (cdr (cdr pointer)))))
+         (setq pointer (cdr (cdr pointer))))
+       (setq riece-channel-list-indicator
+             (riece-normalize-modeline-string riece-channel-list-indicator)))
     (setq riece-channel-list-indicator "No channel")))
 
 (defun riece-update-status-indicators ()
@@ -400,7 +404,8 @@ Local to the buffer in `riece-buffer-list'.")
     (if channels
        (setq identity (car channels))
       (if riece-debug
-         (message "%S is not a member of riece-current-channels" identity)))
+         (riece-debug (format "%S is not a member of riece-current-channels"
+                              identity))))
     (format riece-channel-buffer-format (riece-format-identity identity))))
 
 (eval-when-compile
@@ -424,7 +429,14 @@ Local to the buffer in `riece-buffer-list'.")
     (current-buffer)))
 
 (defun riece-channel-buffer (identity)
-  (cdr (riece-identity-assoc identity riece-channel-buffer-alist)))
+  (let ((entry (riece-identity-assoc identity riece-channel-buffer-alist)))
+    (if entry
+       (if (buffer-live-p (cdr entry))
+           (cdr entry)
+         (if riece-debug
+             (riece-debug
+              (format "riece-channel-buffer: nonexistent buffer: %s"
+                      (riece-format-identity identity))))))))
 
 (defun riece-switch-to-channel (identity)
   (let ((last riece-current-channel)
@@ -474,7 +486,8 @@ Local to the buffer in `riece-buffer-list'.")
     (if pointer
        (setcar pointer nil))
     (if (riece-identity-equal identity riece-current-channel)
-       (riece-switch-to-nearest-channel pointer))))
+       (riece-switch-to-nearest-channel pointer))
+    (funcall riece-buffer-dispose-function (riece-channel-buffer identity))))
 
 (defun riece-redisplay-buffers (&optional force)
   (riece-update-buffers)