X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-misc.el;h=e3ff301f20802662fdda1f20d10b484ab63ba833;hp=d3a21d4b2ea240b42830fd92caa06497abae0200;hb=585902b534e239ed9089e5f92bd4c6c225fe033c;hpb=478bffcd22a1ec6dea4e8ed2ecbb0f562cbd41a2 diff --git a/lisp/riece-misc.el b/lisp/riece-misc.el index d3a21d4..e3ff301 100644 --- a/lisp/riece-misc.el +++ b/lisp/riece-misc.el @@ -32,8 +32,14 @@ (require 'riece-server) (require 'riece-user) -(defun riece-get-buffer-create (name) - (let ((buffer (get-buffer-create name))) +(defun riece-get-buffer-create (name &optional init-major-mode) + (let ((buffer (get-buffer name))) + (unless (and buffer + (or (null init-major-mode) + (eq (with-current-buffer buffer + major-mode) + init-major-mode))) + (setq buffer (generate-new-buffer name))) (unless (memq buffer riece-buffer-list) (setq riece-buffer-list (cons buffer riece-buffer-list))) buffer)) @@ -59,7 +65,7 @@ (while buffers (run-hooks 'riece-before-insert-functions) (save-excursion - (set-buffer (riece-get-buffer-create (car buffers))) + (set-buffer (car buffers)) (let ((inhibit-read-only t) buffer-read-only (start (goto-char (point-max)))) @@ -99,9 +105,14 @@ \(i.e. it matches `riece-channel-regexp')" (string-match (concat "^" riece-channel-regexp) string)) +(defun riece-user-p (string) + "Return t if STRING is a user. +\(i.e. it matches `riece-user-regexp')" + (string-match (concat "^" riece-user-regexp) string)) + (defun riece-current-nickname () "Return the current nickname." - (riece-with-server-buffer (riece-identity-server riece-current-channel) + (riece-with-server-buffer (riece-current-server-name) (if riece-real-nickname (riece-make-identity riece-real-nickname riece-server-name)))) @@ -174,17 +185,31 @@ (substring user-at-host 1) user-at-host)) -(defun riece-get-users-on-server () - (riece-with-server-buffer (riece-identity-server riece-current-channel) - (let (users) +(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)))) + +(defun riece-get-identities-on-server (server-name) + (riece-with-server-buffer server-name + (let (identities) (mapatoms (lambda (atom) - (unless (riece-channel-p (symbol-name atom)) - (setq users (cons (symbol-name atom) users)))) + (setq identities + (cons (riece-make-identity (symbol-name atom) server-name) + identities))) riece-obarray) - (if (member riece-real-nickname users) - users - (cons riece-real-nickname users))))) + identities))) + +(defun riece-check-channel-commands-are-usable (&optional channel) + (unless riece-current-channel + (error (substitute-command-keys + "Type \\[riece-command-join] to join a channel"))) + (if (and channel + (not (riece-channel-p (riece-identity-prefix + riece-current-channel)))) + (error "Not on a channel"))) (provide 'riece-misc)