-;;; riece-log.el --- saving irc logs add-on
+;;; riece-log.el --- Save IRC logs
;; Copyright (C) 2003 OHASHI Akira
;; Copyright (C) 2004 Daiki Ueno
;; 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:
-;; This add-on saves irc logs for every channel.
-
-;; To use, add the following line to your ~/.riece/init.el:
-;; (add-to-list 'riece-addons 'riece-log)
+;;; NOTE: This is an add-on module for Riece.
;;; Code:
(require 'riece-message)
(require 'riece-button)
+(require 'riece-mcat)
(defgroup riece-log nil
- "Save irc log"
+ "Save IRC logs."
+ :prefix "riece-"
:group 'riece)
(defcustom riece-log-directory
:type 'symbol
:group 'riece-log)
-(defcustom riece-log-open-directory-function 'find-file
- "*Function for opening a directory."
- :type 'function
- :group 'riece-log)
-
(defface riece-log-date-face
'((((class color)
(background dark))
(defconst riece-log-file-name-regexp
(concat (riece-make-interval-regexp "[0-9]" 8) "\\.txt\\(\\.\\(.*\\)\\)?$"))
-(defvar riece-log-enabled nil)
-
(defconst riece-log-description
- "Saving IRC logs")
+ "Save IRC logs.")
(defun riece-log-display-message-function (message)
- (if riece-log-enabled
- (let ((coding-system-for-write (or riece-log-coding-system
- buffer-file-coding-system))
- (file (riece-log-get-file (riece-message-target message)
- coding-system-for-write))
- file-name-coding-system
- default-file-name-coding-system)
+ (if (get 'riece-log 'riece-addon-enabled)
+ (let* ((coding-system-for-write
+ (if (featurep 'mule)
+ (or riece-log-coding-system
+ (car (get-language-info current-language-environment
+ 'coding-system)))))
+ (file (riece-log-make-file-name (riece-message-target message)
+ coding-system-for-write))
+ file-name-coding-system
+ default-file-name-coding-system)
(unless (file-directory-p (file-name-directory file))
(make-directory (file-name-directory file) t))
(write-region (concat (format-time-string "%H:%M") " "
nil file t 0
riece-log-lock-file))))
-(defun riece-log-get-file (identity coding-system)
- (expand-file-name
- (format "%s.txt.%s" (format-time-string "%Y%m%d") coding-system)
- (riece-log-get-directory identity)))
-
-(defun riece-log-get-files (identity time)
- (let ((directory (riece-log-get-directory identity))
+(defun riece-log-make-file-name (identity coding-system)
+ (expand-file-name (if (featurep 'mule)
+ (format "%s.txt.%s"
+ (format-time-string "%Y%m%d")
+ coding-system)
+ (format "%s.txt"
+ (format-time-string "%Y%m%d")))
+ (riece-log-directory identity)))
+
+(defun riece-log-list-files (identity time)
+ (let ((directory (riece-log-directory identity))
(time-prefix (format-time-string "%Y%m%d" (or time '(0 0))))
files)
(when (file-directory-p directory)
(setq files (cdr files)))
files)))
-(defun riece-log-get-directory (identity)
+(defun riece-log-directory (identity)
(let ((prefix (riece-identity-canonicalize-prefix
(riece-identity-prefix identity)))
(server (riece-identity-server identity))
If LINES is t, insert today's logs entirely."
(let* (file-name-coding-system
default-file-name-coding-system
- (files (riece-log-get-files identity
- (if (eq lines t) (current-time))))
+ (files (riece-log-list-files identity
+ (if (eq lines t) (current-time))))
name coding-system date point)
(while (and (or (eq lines t) (> lines 0)) files)
(save-restriction
(when riece-log-flashback
(riece-insert-info (current-buffer)
(if (eq riece-log-flashback t)
- "Recent messages of the day:\n"
- (format "Recent messages up to %d lines:\n"
+ (riece-mcat "Recent messages of the day:\n")
+ (format (riece-mcat
+ "Recent messages up to %d lines:\n")
riece-log-flashback)))
(let (buffer-read-only
(point (goto-char (point-max))))
(set-window-point (get-buffer-window (current-buffer))
(point)))))
-(defun riece-log-open-directory (&optional channel)
+(defun riece-log-dired (&optional channel)
(interactive)
- (let ((directory (riece-log-get-directory
- (or channel riece-current-channel))))
+ (let ((directory (riece-log-directory (or channel riece-current-channel))))
(if (file-directory-p directory)
- (funcall riece-log-open-directory-function directory)
+ (dired directory)
(error "No log directory"))))
(defun riece-log-requires ()
(add-hook 'riece-channel-buffer-create-functions
'riece-log-flashback))
+(defun riece-log-uninstall ()
+ (setq riece-log-lock-file nil)
+ (remove-hook 'riece-after-display-message-functions
+ 'riece-log-display-message-function)
+ (remove-hook 'riece-channel-buffer-create-functions
+ 'riece-log-flashback))
+
(defvar riece-command-mode-map)
(defun riece-log-enable ()
- (define-key riece-command-mode-map "\C-cd" 'riece-log-open-directory)
- (setq riece-log-enabled t))
+ (define-key riece-command-mode-map "\C-cd" 'riece-log-dired))
(defun riece-log-disable ()
- (define-key riece-command-mode-map "\C-cd" nil)
- (setq riece-log-enabled nil))
+ (define-key riece-command-mode-map "\C-cd" nil))
(provide 'riece-log)