X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-display.el;h=33144ddc1b4b7c0cc4868aa6130086f994e140f6;hp=62d2125e6fdf27fff26aaee26e244cc5914fbcd7;hb=478bffcd22a1ec6dea4e8ed2ecbb0f562cbd41a2;hpb=89a68ce09795eb46cfd4870882107186db9b06ab diff --git a/lisp/riece-display.el b/lisp/riece-display.el index 62d2125..33144dd 100644 --- a/lisp/riece-display.el +++ b/lisp/riece-display.el @@ -29,15 +29,16 @@ (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-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)) - -(defvar riece-channel-list-changed nil) + riece-update-long-channel-indicator + riece-update-channel-list-indicator) + "Functions to update modeline indicators.") (defun riece-update-user-list-buffer () (save-excursion @@ -61,34 +62,52 @@ buffer-read-only) (erase-buffer) (while users - (if (member (car users) operators) - (insert "@" (car users) "\n") - (if (member (car users) speakers) - (insert "+" (car users) "\n") - (insert " " (car users) "\n"))) + (insert (if (member (car users) operators) + "@" + (if (member (car users) speakers) + "+" + " ")) + (riece-format-identity + (riece-make-identity (car users) + (riece-identity-server + riece-current-channel)) + t) + "\n") (setq users (cdr users)))))))) (defun riece-update-channel-list-buffer () - (if riece-channel-list-changed - (save-excursion - (set-buffer riece-channel-list-buffer) - (let ((inhibit-read-only t) - buffer-read-only - (index 1) - (channels riece-current-channels)) - (erase-buffer) - (while channels - (if (car channels) - (let ((point (point))) - (insert (format "%2d: %s\n" index - (riece-format-identity (car channels)))) - (put-text-property point (point) 'riece-identity - (car channels)))) - (setq index (1+ index) - channels (cdr channels))))))) + (save-excursion + (set-buffer riece-channel-list-buffer) + (let ((inhibit-read-only t) + buffer-read-only + (index 1) + (channels riece-current-channels)) + (erase-buffer) + (while channels + (if (car channels) + (insert (riece-format-channel-list-line + index (car channels)))) + (setq index (1+ index) + channels (cdr channels)))))) + +(defun riece-format-channel-list-line (index channel) + (or (run-hook-with-args-until-success + 'riece-format-channel-list-line-functions index channel) + (concat (format "%2d:%c" index + (if (riece-identity-equal channel riece-current-channel) + ?* + ? )) + (riece-format-identity channel) + "\n"))) (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 @@ -99,32 +118,25 @@ (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 riece-channel-list-changed - (if (and riece-current-channels - ;; There is at least one channel. - (delq nil (copy-sequence riece-current-channels))) - (let ((index 1)) - (setq riece-channel-list-indicator - (mapconcat - #'identity - (delq nil - (mapcar - (lambda (channel) - (prog1 - (if channel - (format "%d:%s" index - (riece-format-identity channel))) - (setq index (1+ index)))) - riece-current-channels)) - ","))) - (setq riece-channel-list-indicator "No channel")))) + (if (and riece-current-channels + ;; There is at least one channel. + (delq nil (copy-sequence riece-current-channels))) + (let ((index 1)) + (setq riece-channel-list-indicator + (mapconcat + #'identity + (delq nil + (mapcar + (lambda (channel) + (prog1 + (if channel + (format "%d:%s" index + (riece-format-identity channel))) + (setq index (1+ index)))) + riece-current-channels)) + ","))) + (setq riece-channel-list-indicator "No channel"))) (defun riece-update-status-indicators () (if riece-current-channel @@ -152,12 +164,15 @@ "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) - (setq riece-channel-list-changed nil) +(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)) (defun riece-channel-buffer-name (identity) @@ -186,7 +201,9 @@ (defun riece-switch-to-channel (identity) (let ((last riece-current-channel)) - (setq riece-current-channel identity) + (setq riece-current-channel identity + riece-channel-buffer (get-buffer (riece-channel-buffer-name + riece-current-channel))) (run-hook-with-args 'riece-after-switch-to-channel-functions last))) (defun riece-join-channel (identity) @@ -199,8 +216,7 @@ (if channel (riece-parse-identity channel))) riece-default-channel-binding))) - (riece-channel-buffer-create identity) - (setq riece-channel-list-changed t))) + (riece-channel-buffer-create identity))) (defun riece-switch-to-nearest-channel (pointer) (let ((start riece-current-channels) @@ -225,8 +241,7 @@ (if pointer (setcar pointer nil)) (if (riece-identity-equal identity riece-current-channel) - (riece-switch-to-nearest-channel pointer)) - (setq riece-channel-list-changed t))) + (riece-switch-to-nearest-channel pointer)))) (defun riece-redisplay-buffers (&optional force) (riece-update-buffers)