X-Git-Url: https://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-mini.el;h=860f514bcdc6f3301953f7a5f47e8edfaecbcdab;hp=fb676a9671a959a41407f338cca4fc3289465de2;hb=6a3367eb76ce4834e00da30bcee740e17de8f83a;hpb=0d0406f27b64461d8428c19e43c4dbad0e37bdfd diff --git a/lisp/riece-mini.el b/lisp/riece-mini.el index fb676a9..860f514 100644 --- a/lisp/riece-mini.el +++ b/lisp/riece-mini.el @@ -41,12 +41,13 @@ ;;; Code: (require 'riece-message) +(require 'riece-biff) (defgroup riece-mini nil "riece on minibuffer" :group 'riece) -(defcustom riece-mini-backlog-size 10 +(defcustom riece-mini-backlog-size 5 "*Line numbers for logging back log." :type 'integer :group 'riece-mini) @@ -60,33 +61,35 @@ (defconst riece-mini-description "Send arrival messages to minibuffer") -(defmacro riece-mini-message-no-log (string &rest args) +(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." - (when (and riece-mini-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))) - (let ((string (concat (format-time-string "%H:%M") " " - (riece-format-message message t)))) - (riece-mini-message-no-log "%s" string) - (while (>= (length riece-mini-backlog-history) - riece-mini-backlog-size) - (setq riece-mini-backlog-history - (cdr riece-mini-backlog-history))) + (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 - (reverse (cons string (reverse riece-mini-backlog-history))))))) + (cdr riece-mini-backlog-history))) + (setq riece-mini-backlog-history + (reverse (cons string (reverse riece-mini-backlog-history)))) + (when (and riece-mini-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. @@ -115,12 +118,20 @@ If twice (C-u C-u), then ask the channel." (defun riece-mini-show-backlog () "Send back logs to minibuffer." (interactive) - (let ((max-mini-window-height riece-mini-backlog-size) - (resize-mini-windows t)) - (when riece-mini-backlog-history - (setq riece-mini-backlog-shown t) - (riece-mini-message-no-log - (mapconcat 'identity riece-mini-backlog-history ""))))) + (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) + riece-biff-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 @@ -128,6 +139,10 @@ If twice (C-u C-u), then ask the channel." (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)