Specify "mode: text" as well as "mode: outline".
[riece] / lisp / riece-log.el
index 8e303b8..6c3ae7c 100644 (file)
@@ -1,4 +1,4 @@
-;;; riece-log.el --- saving irc logs add-on
+;;; riece-log.el --- Save IRC logs
 ;; Copyright (C) 2003 OHASHI Akira
 ;; Copyright (C) 2004 Daiki Ueno
 
 
 ;;; 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:
 
@@ -36,7 +33,8 @@
 (require 'riece-button)
 
 (defgroup riece-log nil
-  "Save irc log"
+  "Save IRC logs."
+  :prefix "riece-"
   :group 'riece)
 
 (defcustom riece-log-directory
@@ -71,11 +69,6 @@ If integer, flash back only this line numbers. t means all lines."
   :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))
@@ -96,19 +89,20 @@ It is created if there is at least one instance of Emacs running riece-log.")
 (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") " "
@@ -116,13 +110,17 @@ It is created if there is at least one instance of Emacs running riece-log.")
                      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)
@@ -137,7 +135,7 @@ It is created if there is at least one instance of Emacs running riece-log.")
        (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))
@@ -188,8 +186,8 @@ It is created if there is at least one instance of Emacs running riece-log.")
 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
@@ -263,12 +261,11 @@ If LINES is t, insert today's logs entirely."
       (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 ()
@@ -290,14 +287,19 @@ If LINES is t, insert today's logs entirely."
   (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)