X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Friece-mini.el;h=4a19a7268b69987a513d4a0fcae923e11aac5086;hb=bf2df5d4bf0f70c7f102eb924e352f83d46f3fa4;hp=8c6bbc3af4b7704197f1c0d36ec21dd3355d31b4;hpb=5f340611c56a3390fd6ee34dc30224555bc9de72;p=elisp%2Friece.git diff --git a/lisp/riece-mini.el b/lisp/riece-mini.el index 8c6bbc3..4a19a72 100644 --- a/lisp/riece-mini.el +++ b/lisp/riece-mini.el @@ -1,4 +1,4 @@ -;;; riece-mini.el --- "riece on minibuffer" add-on +;;; riece-mini.el --- use Riece only on the minibuffer ;; Copyright (C) 2003 OHASHI Akira ;; Author: OHASHI Akira @@ -18,11 +18,13 @@ ;; 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. ;;; Commentary: +;; NOTE: This is an add-on module for Riece. + ;; This add-on shows arrival messages to minibuffer. And you can send ;; message using minibuffer. ;; @@ -30,45 +32,64 @@ ;; are visiting other buffers. ;; To use, add the following line to your ~/.riece/init.el: -;; (add-to-list 'riece-addons 'riece-mini t) +;; (add-to-list 'riece-addons 'riece-mini) ;; -;; And for using conveniently, bind any global key to -;; `riece-mini-send-message'. +;; For using conveniently, bind any global key to +;; `riece-mini-send-message' and `riece-mini-show-backlog'. ;; For example: ;; (global-set-key "\C-cm" 'riece-mini-send-message) +;; (global-set-key "\C-cb" 'riece-mini-show-backlog) ;;; Code: -(eval-when-compile (require 'riece-message)) +(require 'riece-message) +(require 'riece-biff) + +(defgroup riece-mini nil + "Use Riece only on the minibuffer." + :group 'riece) + +(defcustom riece-mini-backlog-size 5 + "*Line numbers for logging back log." + :type 'integer + :group 'riece-mini) (defvar riece-mini-last-channel nil) +(defvar riece-mini-backlog-history nil) +(defvar riece-mini-backlog-shown nil) -(defmacro riece-mini-message-no-log (string &rest args) +(defconst riece-mini-description + "Use Riece only on the minibuffer.") + +(defun riece-mini-message-no-log (string &rest args) "Like `message', except that message logging is disabled." (if (featurep 'xemacs) (if args - `(display-message 'no-log (format ,string ,@args)) - `(display-message 'no-log ,string)) - `(let (message-log-max) - (message ,string ,@args)))) + (display-message 'no-log (apply #'format string args)) + (display-message 'no-log string)) + (let (message-log-max) + (apply #'message string args)))) (defun riece-mini-display-message-function (message) "Show arrival messages to minibuffer." - (unless (or (eq (window-buffer (selected-window)) - (get-buffer riece-command-buffer)) - (riece-message-own-p message) - (active-minibuffer-window)) - (let ((open-bracket - (funcall riece-message-make-open-bracket-function message)) - (close-bracket - (funcall riece-message-make-close-bracket-function message)) - (global-name - (funcall riece-message-make-global-name-function message))) - (setq riece-mini-last-channel (riece-message-target message)) - (riece-mini-message-no-log - "%s" (concat (format-time-string "%H:%M") " " - open-bracket global-name close-bracket - " " (riece-message-text message)))))) + (let ((string (concat (format-time-string "%H:%M") " " + (riece-format-message message t)))) + (when (string-match "\\(.*\\)$" string) + (setq string (riece-match-string-no-properties 1 string))) + (while (>= (length riece-mini-backlog-history) + riece-mini-backlog-size) + (setq riece-mini-backlog-history + (cdr riece-mini-backlog-history))) + (setq riece-mini-backlog-history + (reverse (cons string (reverse riece-mini-backlog-history)))) + (when (and (get 'riece-mini 'riece-addon-enabled) + (not (or (eq (window-buffer (selected-window)) + (get-buffer riece-command-buffer)) + (riece-message-own-p message) + (active-minibuffer-window)))) + (unless (riece-message-type message) + (setq riece-mini-last-channel (riece-message-target message))) + (riece-mini-message-no-log "%s" string)))) (defun riece-mini-send-message (arg) "Send message using minibuffer. @@ -79,8 +100,8 @@ If twice (C-u C-u), then ask the channel." (target (cond ((equal arg '(16)) - (completing-read "Channel/User: " - (mapcar #'list riece-current-channels) nil t)) + (riece-completing-read-identity + "Channel/User: " riece-current-channels nil t)) (arg (or riece-mini-last-channel riece-current-channel)) (t riece-current-channel))) (message (read-string (format "Message to %s: " target)))) @@ -90,11 +111,47 @@ If twice (C-u C-u), then ask the channel." (format "PRIVMSG %s :%s\r\n" (riece-identity-prefix target) message)) - (riece-own-channel-message message target)))) + (riece-display-message + (riece-make-message (riece-current-nickname) target + message nil t))))) + +(defun riece-mini-show-backlog () + "Send back logs to minibuffer." + (interactive) + (when riece-mini-backlog-history + (let ((height (1+ riece-mini-backlog-size))) + (mapc #'(lambda (string) + (setq height (+ height + (/ (length string) (window-width))))) + riece-mini-backlog-history) + (let ((max-mini-window-height height) + (resize-mini-windows t)) + (setq riece-mini-backlog-shown t) + (when (and (memq 'riece-biff riece-addons) + (get 'riece-biff 'riece-addon-enabled)) + (riece-biff-clear)) + (riece-mini-message-no-log + "%s" (mapconcat #'identity riece-mini-backlog-history "\n")))))) + +(defun riece-mini-pre-command () + (when riece-mini-backlog-shown + (let ((resize-mini-windows t)) + (setq riece-mini-backlog-shown nil) + (riece-mini-message-no-log "")))) + +(defun riece-mini-requires () + (if (memq 'riece-biff riece-addons) + '(riece-biff))) (defun riece-mini-insinuate () (add-hook 'riece-after-display-message-functions - 'riece-mini-display-message-function)) + 'riece-mini-display-message-function) + (add-hook 'pre-command-hook 'riece-mini-pre-command)) + +(defun riece-mini-uninstall () + (remove-hook 'riece-after-display-message-functions + 'riece-mini-display-message-function) + (remove-hook 'pre-command-hook 'riece-mini-pre-command)) (provide 'riece-mini)