emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-bug-tracker] bug#4940: closed (Avoiding loss of rcirc messages fr


From: GNU bug Tracking System
Subject: [Emacs-bug-tracker] bug#4940: closed (Avoiding loss of rcirc messages from the on disk log)
Date: Sat, 22 Jan 2011 16:19:02 +0000

Your message dated Sat, 22 Jan 2011 17:26:01 +0100
with message-id <address@hidden>
and subject line 
has caused the GNU bug report #4940,
regarding Avoiding loss of rcirc messages from the on disk log
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
4940: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=4940
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: Avoiding loss of rcirc messages from the on disk log Date: Sat, 31 Oct 2009 05:19:06 +0200 User-agent: Gnus (www.gnus.org), GNU Emacs (www.gnu.org/software/emacs/)
[ Resent from
  http://lists.gnu.org/archive/html/emacs-devel/2009-10/msg00691.html ]


The IRC buffers of "rcirc.el" use the auto-save mechanism to push log
messages on disk.  This is a very good idea, since it avoids hitting the
disk for every single line of the IRC log.  On busy channels it probably
saves a *lot* of time that would be spent waiting for messages to be
saved on disk.

Unfortunately, it also means that the simple action of killing an rcirc
buffer may lose some of the messages.  Any messages still on the alist
`rcirc-log-alist' are still in memory and I've noticed that some of
these may not be written to the log files in `rcirc-log-directory'.

I have now bound `C-c L' locally to a function that explicitly calls
`rcirc-log-write':

    (defun keramida/rcirc-log-write ()
      "A command-wrapper for the `rcirc-log-write' function.  This
    wrapper may be bound to a key, so that `rcirc-log-write' can be
    called from any IRC buffer to immediately save any pending
    messages on disk."
      (interactive)
      (if (null rcirc-log-alist)
          (message "No IRC messages to save")
        (when rcirc-log-directory
          (rcirc-log-write)
          (message "IRC messages saved in %s" rcirc-log-directory))))

    (defun keramida/rcirc-setup-keys ()
      "Set up some custom keys that I find useful in rcirc buffers."
      (local-set-key (kbd "C-c L") 'keramida/rcirc-log-write))

    (add-hook 'rcirc-mode-hook 'keramida/rcirc-setup-keys)

This is ok for now, but it seems slightly ugly.

Looking at the source code of rcirc, I see that it adds its own
`rcirc-kill-buffer-hook' to the `kill-buffer-hook'.  This calls
`rcirc-clean-up-buffer', but there is no call to `rcirc-log-write' in
the rcirc buffer cleanup function.

Would it be a good idea to install the following change to `rcirc.el' so
that all log messages are flushed to disk when an rcirc buffer is
killed?

------------------------------------------------------------------------
diff -r e1381fd70a71 lisp/net/rcirc.el
--- a/lisp/net/rcirc.el Fri Apr 03 03:02:01 2009 +0300
+++ b/lisp/net/rcirc.el Sat Oct 31 05:12:55 2009 +0200
@@ -984,6 +984,8 @@ If ALL is non-nil, update prompts in all
 (defun rcirc-kill-buffer-hook ()
   "Part the channel when killing an rcirc buffer."
   (when (eq major-mode 'rcirc-mode)
+    (when (and rcirc-log-directory rcirc-log-alist)
+      (rcirc-log-write))
     (rcirc-clean-up-buffer "Killed buffer")))
 
 (defun rcirc-change-major-mode-hook ()
------------------------------------------------------------------------


--- End Message ---
--- Begin Message --- Subject: Date: Sat, 22 Jan 2011 17:26:01 +0100
I just pushed this change, only slightly modified, to trunk. Thanks!


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]