X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Friece-display.el;h=f675e991e803b7a7dbd5ef744a28eaf9d516392a;hb=a4172314ca68caab7e2cef48323d0e296141b18d;hp=f739af4bdc29b7e3addbdf16bed95dd3f8e82ebd;hpb=25f675dd30aeec0d4f6450905f15023cb05e92ff;p=riece diff --git a/lisp/riece-display.el b/lisp/riece-display.el index f739af4..f675e99 100644 --- a/lisp/riece-display.el +++ b/lisp/riece-display.el @@ -29,48 +29,50 @@ (require 'riece-misc) (require 'riece-layout) -(defvar riece-update-buffer-functions - '(riece-update-user-list-buffer - riece-update-channel-list-buffer - riece-update-status-indicators +(defvar riece-channel-buffer-format "*Channel:%s*" + "Format of channel message buffer.") +(defvar riece-channel-buffer-alist nil + "An alist mapping identities to channel buffers.") + +(defvar riece-update-buffer-functions nil + "Functions to redisplay the buffer. +Local to the buffer in `riece-buffer-list'.") + +(defvar riece-update-indicator-functions + '(riece-update-status-indicators riece-update-channel-indicator - riece-update-short-channel-indicator - riece-update-channel-list-indicator)) + riece-update-long-channel-indicator + riece-update-channel-list-indicator) + "Functions to update modeline indicators.") (defun riece-update-user-list-buffer () (save-excursion (set-buffer riece-user-list-buffer) - (when (and riece-current-channel - (riece-channel-p (riece-identity-prefix riece-current-channel))) - (let (users operators speakers) - (with-current-buffer (process-buffer (riece-server-process - (riece-identity-server - riece-current-channel))) - (setq users - (riece-channel-get-users - (riece-identity-prefix riece-current-channel)) - operators - (riece-channel-get-operators - (riece-identity-prefix riece-current-channel)) - speakers - (riece-channel-get-speakers - (riece-identity-prefix riece-current-channel)))) - (let ((inhibit-read-only t) - buffer-read-only) + (if (and riece-current-channel + (riece-channel-p (riece-identity-prefix riece-current-channel))) + (let* ((users + (with-current-buffer (process-buffer (riece-server-process + (riece-identity-server + riece-current-channel))) + (riece-channel-get-users (riece-identity-prefix + riece-current-channel)))) + (inhibit-read-only t) + buffer-read-only) (erase-buffer) + (riece-kill-all-overlays) (while users - (insert (if (member (car users) operators) + (insert (if (memq ?o (cdr (car users))) "@" - (if (member (car users) speakers) + (if (memq ?v (cdr (car users))) "+" " ")) (riece-format-identity - (riece-make-identity (car users) + (riece-make-identity (car (car users)) (riece-identity-server riece-current-channel)) t) "\n") - (setq users (cdr users)))))))) + (setq users (cdr users))))))) (defun riece-update-channel-list-buffer () (save-excursion @@ -80,11 +82,11 @@ (index 1) (channels riece-current-channels)) (erase-buffer) + (riece-kill-all-overlays) (while channels (if (car channels) - (let ((point (point))) - (insert (riece-format-channel-list-line - index (car channels))))) + (insert (riece-format-channel-list-line + index (car channels)))) (setq index (1+ index) channels (cdr channels)))))) @@ -100,6 +102,12 @@ (defun riece-update-channel-indicator () (setq riece-channel-indicator + (if riece-current-channel + (riece-format-identity riece-current-channel) + "None"))) + +(defun riece-update-long-channel-indicator () + (setq riece-long-channel-indicator (if riece-current-channel (if (riece-channel-p (riece-identity-prefix riece-current-channel)) (riece-concat-channel-modes @@ -110,12 +118,6 @@ (riece-format-identity riece-current-channel)) "None"))) -(defun riece-update-short-channel-indicator () - (setq riece-short-channel-indicator - (if riece-current-channel - (riece-format-identity riece-current-channel) - "None"))) - (defun riece-update-channel-list-indicator () (if (and riece-current-channels ;; There is at least one channel. @@ -162,12 +164,17 @@ "F" "-"))))) -(defun riece-update-buffers () - (if riece-current-channel - (setq riece-channel-buffer (get-buffer (riece-channel-buffer-name - riece-current-channel)))) - (run-hooks 'riece-update-buffer-functions) - (force-mode-line-update t)) +(defun riece-update-buffers (&optional buffers) + (unless buffers + (setq buffers riece-buffer-list)) + (while buffers + (save-excursion + (set-buffer (car buffers)) + (run-hooks 'riece-update-buffer-functions)) + (setq buffers (cdr buffers))) + (run-hooks 'riece-update-indicator-functions) + (force-mode-line-update t) + (run-hooks 'riece-update-buffer-hook)) (defun riece-channel-buffer-name (identity) (let ((channels (riece-identity-member identity riece-current-channels))) @@ -181,7 +188,11 @@ (autoload 'riece-channel-mode "riece")) (defun riece-channel-buffer-create (identity) (with-current-buffer - (riece-get-buffer-create (riece-channel-buffer-name identity)) + (riece-get-buffer-create (riece-channel-buffer-name identity) + 'riece-channel-mode) + (setq riece-channel-buffer-alist + (cons (cons identity (current-buffer)) + riece-channel-buffer-alist)) (unless (eq major-mode 'riece-channel-mode) (riece-channel-mode) (let (buffer-read-only) @@ -193,9 +204,13 @@ (run-hook-with-args 'riece-channel-buffer-create-functions identity))) (current-buffer))) +(defun riece-channel-buffer (identity) + (cdr (riece-identity-assoc identity riece-channel-buffer-alist))) + (defun riece-switch-to-channel (identity) (let ((last riece-current-channel)) - (setq riece-current-channel identity) + (setq riece-current-channel identity + riece-channel-buffer (riece-channel-buffer riece-current-channel)) (run-hook-with-args 'riece-after-switch-to-channel-functions last))) (defun riece-join-channel (identity)