X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Friece-misc.el;h=6b8cd45e7091008ddcdf684ad711d4ab2988ba15;hb=f7974cb688850bf3f41ee2f7329fc3d5e8c41c97;hp=12013e4531b123f2a3d0c170443c0c119fd9e060;hpb=4a4b0b7ff3b62f77e956dfd4d1d6d32f6c2fdbb7;p=riece diff --git a/lisp/riece-misc.el b/lisp/riece-misc.el index 12013e4..6b8cd45 100644 --- a/lisp/riece-misc.el +++ b/lisp/riece-misc.el @@ -1,4 +1,4 @@ -;;; riece-misc.el --- miscellaneous functions (not inlined) +;;; riece-misc.el --- miscellaneous functions (not inlined) -*- lexical-binding: t -*- ;; Copyright (C) 1998-2003 Daiki Ueno ;; Author: Daiki Ueno @@ -19,8 +19,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Code: @@ -32,6 +32,7 @@ (require 'riece-server) (require 'riece-user) (require 'riece-mode) +(require 'riece-cache) (defun riece-get-buffer-create (name &optional init-major-mode) (let ((buffer (get-buffer name))) @@ -65,17 +66,28 @@ (setq buffers (list buffers))) (while buffers (run-hooks 'riece-before-insert-functions) - (save-excursion - (set-buffer (car buffers)) + (with-current-buffer (car buffers) (let ((inhibit-read-only t) buffer-read-only - (start (goto-char (point-max)))) - (insert (format-time-string "%H:%M") " " string) + start + window + point) + ;; Save the current for the case when (car buffers) is the + ;; currently selected buffer. + (save-excursion + (setq start (goto-char (point-max))) + (insert (format-time-string "%H:%M") " " string) + (setq point (point))) (if (and (not (riece-frozen (current-buffer))) - (get-buffer-window (current-buffer))) - (set-window-point (get-buffer-window (current-buffer)) - (point))) - (run-hook-with-args 'riece-after-insert-functions start (point)))) + (setq window (get-buffer-window (current-buffer))) + (not (pos-visible-in-window-p point window))) + (save-excursion ;save-selected-window changes + ;current buffer + (save-selected-window + (select-window window) + (goto-char point) ;select-window changes current point + (recenter riece-window-center-line)))) + (run-hook-with-args 'riece-after-insert-functions start point))) (setq buffers (cdr buffers)))) (defun riece-insert-change (buffer message) @@ -166,7 +178,11 @@ (defun riece-concat-server-name (string) (if (equal riece-server-name "") string - (concat string " (from " riece-server-name ")"))) + (let ((server-name (concat " (from " riece-server-name ")"))) + (put-text-property 0 (length server-name) + 'riece-server-name riece-server-name + server-name) + (concat string server-name)))) (defun riece-concat-user-status (status string) (if status @@ -202,22 +218,31 @@ user-at-host)) (defun riece-get-users-on-server (server-name) - (delq nil (mapcar (lambda (identity) - (if (riece-user-p (riece-identity-prefix identity)) - identity)) - (riece-get-identities-on-server server-name)))) + (riece-with-server-buffer server-name + (let (identities) + (mapatoms + (lambda (user) + (setq identities + (cons (riece-make-identity (symbol-name user) server-name) + identities))) + (riece-cache-hash-obarray riece-user-cache)) + identities))) -(defun riece-get-identities-on-server (server-name) +(defun riece-get-channels-on-server (server-name) (riece-with-server-buffer server-name (let (identities) (mapatoms - (lambda (atom) + (lambda (channel) (setq identities - (cons (riece-make-identity (symbol-name atom) server-name) + (cons (riece-make-identity (symbol-name channel) server-name) identities))) - riece-obarray) + (riece-cache-hash-obarray riece-channel-cache)) identities))) +(defun riece-get-identities-on-server (server-name) + (nconc (riece-get-channels-on-server server-name) + (riece-get-users-on-server server-name))) + (defun riece-check-channel-commands-are-usable (&optional channel) (unless riece-current-channel (error (substitute-command-keys