X-Git-Url: http://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-misc.el;h=0e218e6eb33594424c1e0645103422f384f7cbb0;hp=60a02c002a6568b33053e81eb72018a59cb6ee09;hb=7f49617682aff4897389a9a83f8b640033b65321;hpb=b2a4a502157459f7e060cd04322152c83adf32f8 diff --git a/lisp/riece-misc.el b/lisp/riece-misc.el index 60a02c0..0e218e6 100644 --- a/lisp/riece-misc.el +++ b/lisp/riece-misc.el @@ -32,19 +32,40 @@ (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)) +(defun riece-scan-property-region (property start end function) + (catch 'done + (while t + ;; Search for the beginning of the property region. + (unless (get-text-property start property) + (setq start (next-single-property-change start property nil end))) + (if (= start end) + (throw 'done nil)) + ;; Search for the end of the property region. + (let ((region-end (next-single-property-change start property nil end))) + (if (= region-end end) + (throw 'done nil)) + (funcall function start region-end) + (setq start region-end))))) + (defun riece-insert (buffers string) (unless (listp buffers) (setq buffers (list buffers))) (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)))) @@ -160,7 +181,9 @@ user-at-host)) (defun riece-get-users-on-server () - (riece-with-server-buffer (riece-identity-server riece-current-channel) + (riece-with-server-buffer (if riece-current-channel + (riece-identity-server riece-current-channel) + "") (let (users) (mapatoms (lambda (atom) @@ -171,6 +194,15 @@ users (cons riece-real-nickname users))))) +(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) ;;; riece-misc.el ends here