Update.
[riece] / lisp / riece-misc.el
index d3a21d4..e3ff301 100644 (file)
 (require 'riece-server)
 (require 'riece-user)
 
-(defun riece-get-buffer-create (name)
-  (let ((buffer (get-buffer-create name)))
+(defun riece-get-buffer-create (name &optional init-major-mode)
+  (let ((buffer (get-buffer name)))
+    (unless (and buffer
+                (or (null init-major-mode)
+                    (eq (with-current-buffer buffer
+                          major-mode)
+                        init-major-mode)))
+      (setq buffer (generate-new-buffer name)))
     (unless (memq buffer riece-buffer-list)
       (setq riece-buffer-list (cons buffer riece-buffer-list)))
     buffer))
@@ -59,7 +65,7 @@
   (while buffers
     (run-hooks 'riece-before-insert-functions)
     (save-excursion
-      (set-buffer (riece-get-buffer-create (car buffers)))
+      (set-buffer (car buffers))
       (let ((inhibit-read-only t)
            buffer-read-only
            (start (goto-char (point-max))))
 \(i.e. it matches `riece-channel-regexp')"
   (string-match (concat "^" riece-channel-regexp) string))
 
+(defun riece-user-p (string)
+  "Return t if STRING is a user.
+\(i.e. it matches `riece-user-regexp')"
+  (string-match (concat "^" riece-user-regexp) string))
+
 (defun riece-current-nickname ()
   "Return the current nickname."
-  (riece-with-server-buffer (riece-identity-server riece-current-channel)
+  (riece-with-server-buffer (riece-current-server-name)
     (if riece-real-nickname
        (riece-make-identity riece-real-nickname riece-server-name))))
 
       (substring user-at-host 1)
     user-at-host))
 
-(defun riece-get-users-on-server ()
-  (riece-with-server-buffer (riece-identity-server riece-current-channel)
-    (let (users)
+(defun riece-get-users-on-server (server-name)
+  (delq nil (mapcar (lambda (identity)
+                     (if (riece-user-p (riece-identity-prefix identity))
+                         identity))
+                   (riece-get-identities-on-server server-name))))
+
+(defun riece-get-identities-on-server (server-name)
+  (riece-with-server-buffer server-name
+    (let (identities)
       (mapatoms
        (lambda (atom)
-        (unless (riece-channel-p (symbol-name atom))
-          (setq users (cons (symbol-name atom) users))))
+        (setq identities
+              (cons (riece-make-identity (symbol-name atom) server-name)
+                    identities)))
        riece-obarray)
-      (if (member riece-real-nickname users)
-         users
-       (cons riece-real-nickname users)))))
+      identities)))
+
+(defun riece-check-channel-commands-are-usable (&optional channel)
+   (unless riece-current-channel
+     (error (substitute-command-keys
+            "Type \\[riece-command-join] to join a channel")))
+   (if (and channel
+           (not (riece-channel-p (riece-identity-prefix
+                                  riece-current-channel))))
+       (error "Not on a channel")))
 
 (provide 'riece-misc)