Use the same log file for incoming and outgoing private messages
[riece] / lisp / riece-log.el
index 5568996..5eabb8b 100644 (file)
@@ -1,4 +1,4 @@
-;;; riece-log.el --- Save IRC logs
+;;; riece-log.el --- Save IRC logs -*- lexical-binding: t -*-
 ;; Copyright (C) 2003 OHASHI Akira
 ;; Copyright (C) 2004 Daiki Ueno
 
@@ -20,8 +20,8 @@
 
 ;; 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:
 
@@ -31,6 +31,7 @@
 
 (require 'riece-message)
 (require 'riece-button)
+(require 'riece-mcat)
 
 (defgroup riece-log nil
   "Save IRC logs."
@@ -89,22 +90,23 @@ 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
   "Save IRC logs.")
 
 (defun riece-log-display-message-function (message)
-  (if riece-log-enabled
+  (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)
+            (file (riece-log-make-file-name
+                   (if (and (riece-message-private-p message)
+                            (not (riece-message-own-p message)))
+                       (riece-message-speaker message)
+                     (riece-message-target message))
+                   coding-system-for-write))
+            (file-name-coding-system 'no-conversion))
        (unless (file-directory-p (file-name-directory file))
          (make-directory (file-name-directory file) t))
        (write-region (concat (format-time-string "%H:%M") " "
@@ -113,7 +115,7 @@ It is created if there is at least one instance of Emacs running riece-log.")
                      riece-log-lock-file))))
 
 (defun riece-log-make-file-name (identity coding-system)
-  (expand-file-name (if (featurep 'mule)
+  (expand-file-name (if (and (featurep 'mule) coding-system)
                        (format "%s.txt.%s"
                                (format-time-string "%Y%m%d")
                                coding-system)
@@ -186,8 +188,7 @@ It is created if there is at least one instance of Emacs running riece-log.")
 (defun riece-log-insert (identity lines)
   "Insert logs for IDENTITY at most LINES.
 If LINES is t, insert today's logs entirely."
-  (let* (file-name-coding-system
-        default-file-name-coding-system
+  (let* ((file-name-coding-system 'no-conversion)
         (files (riece-log-list-files identity
                                      (if (eq lines t) (current-time))))
         name coding-system date point)
@@ -239,8 +240,9 @@ If LINES is t, insert today's logs entirely."
   (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))))
@@ -298,12 +300,10 @@ If LINES is t, insert today's logs entirely."
 
 (defvar riece-command-mode-map)
 (defun riece-log-enable ()
-  (define-key riece-command-mode-map "\C-cd" 'riece-log-dired)
-  (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)