X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-display.el;h=be46a46eb6ba0eba61cd16e1892871f3bb682ce9;hp=be5934cce3f9cc14dde8e12d4730d483aab87c32;hb=c0343026d50895188908cd67c70909cc1fb54119;hpb=29eadaf23bafb853270b90c09348bff759b23fd1 diff --git a/lisp/riece-display.el b/lisp/riece-display.el index be5934c..be46a46 100644 --- a/lisp/riece-display.el +++ b/lisp/riece-display.el @@ -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)) @@ -39,13 +40,22 @@ :type 'function :group 'riece-looks) +(defcustom riece-configure-windows-predicate + #'riece-configure-windows-predicate + "Function to check whether window reconfiguration is needed." + :type 'function + :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 ;; User list buffer is nuisance for private conversation. (riece-channel-p riece-current-channel)))) + ;; Can't expand minibuffer to full frame. + (if (eq (selected-window) (minibuffer-window)) + (other-window 1)) (delete-other-windows) (if (and riece-current-channel (or show-user-list riece-channel-list-buffer-mode)) @@ -92,14 +102,16 @@ (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 @@ -118,8 +130,9 @@ (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) @@ -129,11 +142,11 @@ (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 @@ -143,9 +156,7 @@ (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 @@ -165,9 +176,35 @@ ","))) (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")) @@ -197,27 +234,28 @@ (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 @@ -243,26 +281,31 @@ (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 () + ;; The current channel is changed, and some buffers are visible. + (unless (equal riece-last-channel riece-current-channel) + (let ((buffers riece-buffer-list)) + (catch 'found + (while buffers + (if (and (buffer-live-p (car buffers)) + (get-buffer-window (car buffers))) + (throw 'found t) + (setq buffers (cdr buffers)))))))) + (defun riece-redisplay-buffers (&optional force) (riece-update-buffers) (if (or force - ;; The current channel is changed, and some buffers are visible. - (unless (equal riece-last-channel riece-current-channel) - (let ((buffers riece-buffer-list)) - (catch 'found - (while buffers - (if (and (buffer-live-p (car buffers)) - (get-buffer-window (car buffers))) - (throw 'found t) - (setq buffers (cdr buffers)))))))) - (funcall riece-configure-windows-function))) + (funcall riece-configure-windows-predicate)) + (funcall riece-configure-windows-function)) + (run-hooks 'riece-redisplay-buffers-hook)) (provide 'riece-display) + +;;; riece-display.el ends here