Mercurial > emacs
changeset 87520:f5ab33e0dc01
Make rcirc logging more customizable
(rcirc-log-filename-function): New variable.
(rcirc-log): Use `rcirc-log-filename-function' to generate the
log-file name. Don't log anything if it returns nil.
(rcirc-log-write): Use `expand-file-name' when merging the
log-file name from the alist with rcirc-log-directory; this does
the right thing if the name in the alist already an absolute
filename. Make the log-file directory if necessary.
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-976
author | Miles Bader <miles@gnu.org> |
---|---|
date | Wed, 02 Jan 2008 02:20:56 +0000 |
parents | 6a0c500ca3a9 |
children | 0140d3ebb262 c938ab6810a4 |
files | lisp/ChangeLog lisp/net/rcirc.el |
diffstat | 2 files changed, 44 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Wed Jan 02 02:20:42 2008 +0000 +++ b/lisp/ChangeLog Wed Jan 02 02:20:56 2008 +0000 @@ -1,3 +1,13 @@ +2008-01-02 Miles Bader <Miles Bader <miles@gnu.org>> + + * net/rcirc.el (rcirc-log-filename-function): New variable. + (rcirc-log): Use `rcirc-log-filename-function' to generate the + log-file name. Don't log anything if it returns nil. + (rcirc-log-write): Use `expand-file-name' when merging the + log-file name from the alist with rcirc-log-directory; this does + the right thing if the name in the alist already an absolute + filename. Make the log-file directory if necessary. + 2007-12-29 Richard Stallman <rms@gnu.org> * font-lock.el (font-lock-prepend-text-property)
--- a/lisp/net/rcirc.el Wed Jan 02 02:20:42 2008 +0000 +++ b/lisp/net/rcirc.el Wed Jan 02 02:20:56 2008 +0000 @@ -1480,32 +1480,47 @@ (run-hook-with-args 'rcirc-print-hooks process sender response target text))))) +(defcustom rcirc-log-filename-function 'rcirc-generate-new-buffer-name + "A function to generate the filename used by rcirc's logging facility. + +It is called with two arguments, PROCESS and TARGET (see +`rcirc-generate-new-buffer-name' for their meaning), and should +return the filename, or nil if no logging is desired for this +session. + +If the returned filename is absolute (`file-name-absolute-p' +returns true), then it is used as-is, otherwise the resulting +file is put into `rcirc-log-directory'." + :group 'rcirc + :type 'function) + (defun rcirc-log (process sender response target text) "Record line in `rcirc-log', to be later written to disk." - (let* ((filename (rcirc-generate-new-buffer-name process target)) - (cell (assoc-string filename rcirc-log-alist)) - (line (concat (format-time-string rcirc-time-format) - (substring-no-properties - (rcirc-format-response-string process sender - response target text)) - "\n"))) - (if cell - (setcdr cell (concat (cdr cell) line)) - (setq rcirc-log-alist - (cons (cons filename line) rcirc-log-alist))))) + (let ((filename (funcall rcirc-log-filename-function process target))) + (unless (null filename) + (let ((cell (assoc-string filename rcirc-log-alist)) + (line (concat (format-time-string rcirc-time-format) + (substring-no-properties + (rcirc-format-response-string process sender + response target text)) + "\n"))) + (if cell + (setcdr cell (concat (cdr cell) line)) + (setq rcirc-log-alist + (cons (cons filename line) rcirc-log-alist))))))) (defun rcirc-log-write () "Flush `rcirc-log-alist' data to disk. -Log data is written to `rcirc-log-directory'." - (make-directory rcirc-log-directory t) +Log data is written to `rcirc-log-directory', except for +log-files with absolute names (see `rcirc-log-filename-function')." (dolist (cell rcirc-log-alist) - (with-temp-buffer - (insert (cdr cell)) - (let ((coding-system-for-write 'utf-8)) - (write-region (point-min) (point-max) - (concat rcirc-log-directory "/" (car cell)) - t 'quiet)))) + (let ((filename (expand-file-name (car cell) rcirc-log-directory)) + (coding-system-for-write 'utf-8)) + (make-directory (file-name-directory filename) t) + (with-temp-buffer + (insert (cdr cell)) + (write-region (point-min) (point-max) filename t 'quiet)))) (setq rcirc-log-alist nil)) (defun rcirc-join-channels (process channels)