X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-misc.el;h=fb511b5c6dc274c1d791b2766399cca3eae4351b;hb=56b722577563032371ad6b29e3c0c86c074d7ea4;hp=0a68bb1f8712d64c9a4c6b631ac222618da38c04;hpb=0409dc12fef66f90f93ee19c1e20a290ca4b61c0;p=elisp%2Friece.git diff --git a/lisp/riece-misc.el b/lisp/riece-misc.el index 0a68bb1..fb511b5 100644 --- a/lisp/riece-misc.el +++ b/lisp/riece-misc.el @@ -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: @@ -31,6 +31,8 @@ (require 'riece-channel) (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))) @@ -68,12 +70,20 @@ (set-buffer (car buffers)) (let ((inhibit-read-only t) buffer-read-only - (start (goto-char (point-max)))) + (start (goto-char (point-max))) + window + point) (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))) + (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)))) @@ -124,11 +134,12 @@ (while (string-match "^\\([^ ]+\\) +" string) (setq parameters (nconc parameters (list (match-string 1 string))) string (substring string (match-end 0))) - (and (not (equal "" string)) (eq ?: (aref string 0)) - (setq string (substring string 1)) - (throw 'done nil)))) - (or (equal "" string) - (setq parameters (nconc parameters (list string)))) + (when (and (not (equal "" string)) (eq ?: (aref string 0))) + (setq string (substring string 1) + parameters (nconc parameters (list string))) + (throw 'done nil))) + (or (equal "" string) + (setq parameters (nconc parameters (list string))))) parameters))) (defun riece-concat-channel-topic (target string) @@ -143,7 +154,16 @@ (riece-with-server-buffer (riece-identity-server target) (let ((modes (riece-channel-get-modes (riece-identity-prefix target)))) (if modes - (concat string " [" (apply #'string modes) "]") + (concat string " [" + (mapconcat + (lambda (mode) + (if (riece-mode-parameter mode) + (format "%c(%s)" + (riece-mode-flag mode) + (riece-mode-parameter mode)) + (char-to-string (riece-mode-flag mode)))) + modes "") + "]") string)))) (defun riece-concat-message (string message) @@ -155,7 +175,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 @@ -191,22 +215,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