* riece-commands.el (riece-command-topic): Use
[riece] / lisp / riece-misc.el
index 2ba5785..0e218e6 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))
 
+(defun riece-scan-property-region (property start end function)
+  (catch 'done
+    (while t
+      ;; Search for the beginning of the property region.
+      (unless (get-text-property start property)
+       (setq start (next-single-property-change start property nil end)))
+      (if (= start end)
+         (throw 'done nil))
+      ;; Search for the end of the property region.
+      (let ((region-end (next-single-property-change start property nil end)))
+       (if (= region-end end)
+           (throw 'done nil))
+       (funcall function start region-end)
+       (setq start region-end)))))
+
 (defun riece-insert (buffers string)
   (unless (listp buffers)
     (setq buffers (list buffers)))
   (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))))
 (defun riece-concat-channel-topic (target string)
   (riece-with-server-buffer (riece-identity-server target)
     (let ((topic (riece-channel-get-topic (riece-identity-prefix target))))
-      (if topic
-         (concat string ": " topic)
-       string))))
+      (if (or (null topic)
+             (equal topic ""))
+         string
+       (concat string ": " topic)))))
 
 (defun riece-concat-channel-modes (target string)
   (riece-with-server-buffer (riece-identity-server target)
     user-at-host))
 
 (defun riece-get-users-on-server ()
-  (riece-with-server-buffer (riece-identity-server riece-current-channel)
+  (riece-with-server-buffer (if riece-current-channel
+                               (riece-identity-server riece-current-channel)
+                             "")
     (let (users)
       (mapatoms
        (lambda (atom)
          users
        (cons riece-real-nickname users)))))
 
+(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)
 
 ;;; riece-misc.el ends here