Gnus development mailing list
 help / color / mirror / Atom feed
From: Kai.Grossjohann@CS.Uni-Dortmund.DE
Subject: Split replies to go with originals
Date: 11 Nov 1998 20:59:54 +0100	[thread overview]
Message-ID: <vafzp9yngp1.fsf@ramses.cs.uni-dortmund.de> (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


             reply	other threads:[~1998-11-11 19:59 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1998-11-11 19:59 Kai.Grossjohann [this message]
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
1999-01-28 18:35 Kai.Grossjohann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=vafzp9yngp1.fsf@ramses.cs.uni-dortmund.de \
    --to=kai.grossjohann@cs.uni-dortmund.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).