X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Friece-log.el;h=4398f8b6c15c3f66cc4ff1520d2ef074b74c2c9e;hb=f88a663c1b379044573897f6f2ae44e5f5172ed6;hp=8acc9da44a04fec8f9a55e883a304511df7d2234;hpb=d1afcdd626fefdf537d742e2598cdcb9ffa039ef;p=riece diff --git a/lisp/riece-log.el b/lisp/riece-log.el index 8acc9da..4398f8b 100644 --- a/lisp/riece-log.el +++ b/lisp/riece-log.el @@ -30,7 +30,8 @@ ;;; Code: -(eval-when-compile (require 'riece-message)) +(eval-when-compile (require 'riece-message) + (require 'riece-button)) (defgroup riece-log nil "Save irc log" @@ -55,6 +56,11 @@ If integer, flash back only this line numbers. t means all lines." (boolean :tag "flash back or not")) :group 'riece-log) +(defcustom riece-log-coding-system nil + "*Coding system used for log files." + :type 'symbol + :group 'riece-log) + (defun riece-log-display-message-function (message) (let ((open-bracket (funcall riece-message-make-open-bracket-function message)) @@ -62,14 +68,14 @@ If integer, flash back only this line numbers. t means all lines." (funcall riece-message-make-close-bracket-function message)) (name (funcall riece-message-make-name-function message)) - (file (riece-log-get-file (riece-message-target message)))) + (file (riece-log-get-file (riece-message-target message))) + (coding-system-for-write riece-log-coding-system)) (unless (file-directory-p (file-name-directory file)) (make-directory (file-name-directory file) t)) - (with-temp-buffer - (insert (concat (format-time-string "%H:%M") " " - open-bracket name close-bracket - " " (riece-message-text message) "\n")) - (write-region (point-min) (point-max) file t 0)))) + (write-region (concat (format-time-string "%H:%M") " " + open-bracket name close-bracket + " " (riece-message-text message) "\n") + nil file t 0))) (defun riece-log-get-file (identity) (expand-file-name @@ -80,7 +86,7 @@ If integer, flash back only this line numbers. t means all lines." (let ((channel (riece-identity-prefix identity)) (server (riece-identity-server identity)) (map (assoc (riece-format-identity identity) riece-log-directory-map)) - name) + name) (cond (map (setq name (cdr map))) ((string-match riece-channel-regexp channel) (let ((suffix (match-string 2 channel))) @@ -108,6 +114,16 @@ If integer, flash back only this line numbers. t means all lines." (let (buffer-read-only) (goto-char (point-max)) (insert string) + (goto-char (point-min)) + (while (re-search-forward + "^[0-9][0-9]:[0-9][0-9] [<>]\\([^<>]+\\)[<>] " nil t) + (put-text-property (match-beginning 1) (match-end 1) + 'riece-identity + (riece-make-identity + (riece-match-string-no-properties 1) + (riece-identity-server identity)))) + (if (memq 'riece-button riece-addons) + (riece-button-update-buffer)) (goto-char (point-max)) (set-window-point (get-buffer-window (current-buffer)) (point)))))))) @@ -118,6 +134,10 @@ If integer, flash back only this line numbers. t means all lines." (find-file (riece-log-get-directory channel)) (find-file riece-log-directory))) +(defun riece-log-requires () + (if (memq 'riece-button riece-addons) + '(riece-button))) + (defun riece-log-insinuate () ;; FIXME: Use `riece-after-insert-functions' for trapping change, ;; notice, wallops and so on. But must add argument.