Gnus development mailing list
 help / color / mirror / Atom feed
* Split replies to go with originals
@ 1999-01-28 18:35 Kai.Grossjohann
  0 siblings, 0 replies; 8+ messages in thread
From: Kai.Grossjohann @ 1999-01-28 18:35 UTC (permalink / raw)


[-- Attachment #1: Type: text/plain, Size: 1891 bytes --]

For a long time, I have wanted the following feature: after I have
manually moved a certain article to a certain group, I want all
followups (or replies) to that article to go to that same group
automatically.

Back in the sixties, I created the following patch which will enable
Gnus to do that.  I'm interested in you folks trying it out to see if
it works.  Lars has said that he's willing to add this feature to Gnus
but that he's going to rewrite the mail splitting thing.  Now that
he's rewritten mail fetching, I think this is a good time to once
again check whether this feature works, before actually integrating it
into the Gnus core.

What does the patch do?

Well, Gnus keeps a log of recently seen mail in ~/.nnmail-cache.  This
patch just adds the group name along with the message id, and then
there's a splitting function for nnmail-split-fancy which looks up
message ids in the In-Reply-To and References headers in that file to
find out the right group name.  The file format is
backward-compatible, i.e. you can continue to use your existing file;
the group name will be added to newly encountered messages.  And the
patch is smart enough to only put the group name in if it's a group in
the mail backend where mail is split to.  (This is also the part that
will need to be changed when mail splitting is improved.)

The patch is for pgnus 0.63 but still applies cleanly to 0.73, except
for an offset of some lines.

How do you use it?

You need not do anything for this to store the message ids in
~/.nnmail-cache.  The patch defines a function
nnmail-split-fancy-with-parent which can be invoked from
nnmail-split-fancy like so:

  (setq nnmail-split-fancy
        '(| (: nnmail-split-fancy-with-parent)
            ;; other splits go here
         ))

Modify as appropriate.

I'm interested in all kinds of feedback.

kai
-- 
Abort this operation?   [Abort]  [Cancel]


[-- Attachment #2: mail split patch --]
[-- Type: application/x-patch, Size: 3389 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread
* Split replies to go with originals
@ 1998-11-11 19:59 Kai.Grossjohann
  1998-11-12 11:02 ` Terje Sannum
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Kai.Grossjohann @ 1998-11-11 19:59 UTC (permalink / raw)


Pre-alpha code alert!

I have now produced the following patch for
pgnus-0.42/lisp/nnmail.el.  It is truly horrible code, and almost not
tested at all, but it *has* worked for two messages now :-)

What does it do?

You manually put a message in the foo group (using B m, say).  Now,
you get a reply for that message, and naturally, you want to put it in
the foo group, too.  Here's some code which does this if you have
nnmail-treat-duplicates set to a non-nil value and if you use
nnmail-split-fancy.

I have the following in ~/.gnus:

,-----
| (setq nnmail-split-fancy
|       '(| (: nnmail-split-fancy-with-parent)
|           ---other-split-rules-go-here---
|        )
| )
`-----

This should be all you need to get going.  Please tell me if it works
for you, and also don't hesitate to make suggestions for
nnmail-cache-insert -- that's the most horrible part.

kai
-- 
Life is hard and then you die.

--- nnmail.el.ORIG	Wed Nov 11 09:59:27 1998
+++ nnmail.el	Wed Nov 11 20:51:34 1998
@@ -1484,12 +1484,59 @@
 
 (defun nnmail-cache-insert (id)
   (when nnmail-treat-duplicates
-    (unless (gnus-buffer-live-p nnmail-cache-buffer)
-      (nnmail-cache-open))
+    ;; Store some information about the group this message is written
+    ;; to.  This function might have been called from various places.
+    ;; Sometimes, a function up in the calling sequence has an
+    ;; argument GROUP which is bound to a string, the group name.  At
+    ;; other times, there is a function up in the calling sequence
+    ;; which has an argument GROUP-ART which is a list of pairs, and
+    ;; the car of a pair is a group name.  Should we check that the
+    ;; length of the list is equal to 1? -- kai
+    (let ((g nil))
+      (cond ((and (boundp 'group) group)
+             (setq g group))
+            ((and (boundp 'group-art) group-art (listp group-art))
+             (setq g (caar group-art)))
+            (t (setq g "")))
+      (unless (gnus-buffer-live-p nnmail-cache-buffer)
+        (nnmail-cache-open))
+      (save-excursion
+        (set-buffer nnmail-cache-buffer)
+        (goto-char (point-max))
+        (insert id "\t" g "\n")))))
+
+;; Fetch the group name corresponding to the message id stored in the
+;; cache.
+(defun nnmail-cache-fetch-group (id)
+  (when (and nnmail-treat-duplicates nnmail-cache-buffer)
     (save-excursion
       (set-buffer nnmail-cache-buffer)
       (goto-char (point-max))
-      (insert id "\n"))))
+      (when (search-backward id nil t)
+        (beginning-of-line)
+        (skip-chars-forward "^\n\r\t")
+        (unless (eolp)
+          (forward-char 1)
+          (buffer-substring (point)
+                            (progn (end-of-line) (point))))))))
+
+;; Function for nnmail-split-fancy: look up all references in the
+;; cache and if a match is found, return that group.
+(defun nnmail-split-fancy-with-parent ()
+  (let* ((refstr (or (message-fetch-field "references")
+                     (message-fetch-field "in-reply-to")))
+         (references nil)
+         (res nil))
+    (when refstr
+      (setq references (nreverse (gnus-split-references refstr)))
+      (unless (gnus-buffer-live-p nnmail-cache-buffer)
+        (nnmail-cache-open))
+      (mapcar (lambda (x)
+                (setq res (or (nnmail-cache-fetch-group x) res))
+                (when (string= "drafts" res)
+                  (setq res nil)))
+              references)
+      res)))
 
 (defun nnmail-cache-id-exists-p (id)
   (when nnmail-treat-duplicates


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~1999-01-28 18:35 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-01-28 18:35 Split replies to go with originals Kai.Grossjohann
  -- strict thread matches above, loose matches on Subject: below --
1998-11-11 19:59 Kai.Grossjohann
1998-11-12 11:02 ` Terje Sannum
1998-11-12 11:14   ` Kai.Grossjohann
1998-11-12 22:42     ` Terje Sannum
1998-11-13 17:14 ` Wes Hardaker
1998-11-13 22:20   ` Kai.Grossjohann
1998-11-13 22:39 ` Kai.Grossjohann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).