* riece-display.el (riece-channel-buffer-create): Add new hook.
[riece] / lisp / riece-display.el
index e5a6584..37fd476 100644 (file)
@@ -29,8 +29,9 @@
 (require 'riece-misc)
 
 (defvar riece-update-buffer-functions
-  '(riece-user-list-update-buffer
-    riece-channel-list-update-buffer
+  '(riece-update-user-list-buffer
+    riece-update-channel-list-buffer
+    riece-update-status-indicators
     riece-update-channel-indicator
     riece-update-channel-list-indicator))
 
@@ -46,7 +47,7 @@
   :group 'riece-looks)
 
 (defun riece-configure-windows ()
-  (let ((buffer (current-buffer))
+  (let ((buffer (window-buffer))
        (show-user-list
         (and riece-user-list-buffer-mode
              riece-current-channel
        (unless (riece-frozen riece-user-list-buffer)
          (set-window-start (get-buffer-window riece-user-list-buffer)
                            (point-min)))))
-  (if (get-buffer-window riece-channel-list-buffer)
+  (if (and riece-channel-list-buffer
+          (get-buffer-window riece-channel-list-buffer))
       (with-current-buffer riece-channel-list-buffer
        (unless (riece-frozen riece-channel-list-buffer)
          (set-window-start (get-buffer-window riece-channel-list-buffer)
                            (point-min))))))
 
-(defun riece-user-list-update-buffer ()
-  (if (get-buffer riece-user-list-buffer)
+(defun riece-update-user-list-buffer ()
+  (if (and riece-user-list-buffer
+          (get-buffer riece-user-list-buffer))
       (save-excursion
        (set-buffer riece-user-list-buffer)
        (when (and riece-current-channel
                  (insert " " (car users) "\n")))
              (setq users (cdr users))))))))
 
-(defun riece-channel-list-update-buffer ()
-  (if (get-buffer riece-channel-list-buffer)
+(defun riece-update-channel-list-buffer ()
+  (if (and riece-channel-list-buffer
+          (get-buffer riece-channel-list-buffer))
       (save-excursion
        (set-buffer riece-channel-list-buffer)
        (let ((inhibit-read-only t)
          (erase-buffer)
          (while channels
            (if (car channels)
-               (insert (format "%2d:%s\n" index (car channels))))
+               (insert (format "%2d: %s\n" index (car channels))))
            (setq index (1+ index)
                  channels (cdr channels)))))))
 
-(defsubst riece-update-channel-indicator ()
+(defun riece-update-channel-indicator ()
   (setq riece-channel-indicator
        (if riece-current-channel
            (riece-concat-current-channel-modes
                 (concat riece-current-channel ": "
                         (riece-channel-get-topic riece-current-channel))
               riece-current-channel))
-         "None"))
-  (with-current-buffer riece-command-buffer
-    (force-mode-line-update)))
+         "None")))
 
 (defun riece-update-channel-list-indicator ()
   (if (and riece-current-channels
               ",")))
     (setq riece-channel-list-indicator "No channel")))
 
+(defun riece-update-status-indicators ()
+  (with-current-buffer riece-command-buffer
+    (riece-with-server-buffer
+     (setq riece-away-indicator
+          (if (and riece-real-nickname
+                   (riece-user-get-away riece-real-nickname))
+              "A"
+            "-")
+          riece-operator-indicator
+          (if (and riece-real-nickname
+                   (riece-user-get-operator riece-real-nickname))
+              "O"
+            "-")
+          riece-user-indicator riece-real-nickname)))
+  (setq riece-freeze-indicator
+       (with-current-buffer (if (and riece-channel-buffer-mode
+                                     riece-channel-buffer)
+                                riece-channel-buffer
+                              riece-dialogue-buffer)
+         (if (eq riece-freeze 'own)
+             "f"
+           (if riece-freeze
+               "F"
+             "-")))))
+
 (defun riece-update-buffers ()
   (run-hooks 'riece-update-buffer-functions)
-  (force-mode-line-update t))
+  (force-mode-line-update t)
+  (run-hooks 'riece-update-buffers-hook))
 
 (eval-when-compile
   (autoload 'riece-channel-mode "riece"))
                           (concat "Created on "
                                   (funcall riece-format-time-function
                                            (current-time))
-                                  "\n"))))
+                                  "\n"))
+       (run-hook-with-args 'riece-channel-buffer-create-functions identity)))
     (current-buffer)))
 
 (eval-when-compile
   (setq riece-last-channel riece-current-channel
        riece-current-channel identity
        riece-channel-buffer
-       (cdr (riece-identity-assoc-no-server
+       (cdr (riece-identity-assoc
              identity riece-channel-buffer-alist))
        riece-user-list-buffer 
-       (cdr (riece-identity-assoc-no-server
-             identity riece-user-list-buffer-alist))))
+       (cdr (riece-identity-assoc
+             identity riece-user-list-buffer-alist)))
+  (run-hooks 'riece-channel-switch-hook))
 
 (defun riece-join-channel (channel-name)
   (let ((identity (riece-make-identity channel-name)))
-    (unless (riece-identity-member-no-server
+    (unless (riece-identity-member
             identity riece-current-channels)
       (setq riece-current-channels
            (riece-identity-assign-binding
             identity riece-current-channels
             riece-default-channel-binding)))
-    (unless (riece-identity-assoc-no-server
+    (unless (riece-identity-assoc
             identity riece-channel-buffer-alist)
       (let ((buffer (riece-channel-buffer-create identity)))
        (setq riece-channel-buffer-alist
              (cons (cons identity buffer)
                    riece-channel-buffer-alist))))
-    (unless (riece-identity-assoc-no-server
+    (unless (riece-identity-assoc
             identity riece-user-list-buffer-alist)
       (let ((buffer (riece-user-list-buffer-create identity)))
        (setq riece-user-list-buffer-alist
 
 (defun riece-part-channel (channel-name)
   (let* ((identity (riece-make-identity channel-name))
-        (pointer (riece-identity-member-no-server
+        (pointer (riece-identity-member
                   identity riece-current-channels)))
     (if pointer
        (setcar pointer nil))
-    ;;XXX
-    (if (riece-identity-equal-no-server identity riece-current-channel)
+    (if (riece-identity-equal identity riece-current-channel)
        (riece-switch-to-nearest-channel pointer))))
 
 (defun riece-configure-windows-predicate ()
   (riece-update-buffers)
   (if (or force
          (funcall riece-configure-windows-predicate))
-      (funcall riece-configure-windows-function)))
+      (funcall riece-configure-windows-function))
+  (run-hooks 'riece-redisplay-buffers-hook))
 
 (provide 'riece-display)
+
+;;; riece-display.el ends here