On Thu, 01 Jul 2004, Wes Hardaker yowled:
>>>>>> On Thu, 01 Jul 2004 21:43:18 +0100, Nix <[EMAIL PROTECTED]> said:
> 
> nix> Alas, I can't do that: BBDB is triggered immediately *after* Gnus
> nix> prepares the article buffer and hides the headers, following
> nix> which `bbdb-extract-field-value' can't find the header (because
> nix> it's hidden).
> 
> Using a gnus function to find the header instead should work.  I
> forget the function to use though.

There is none, as far as I can tell: the header structure used doesn't
store all headers, only some of them, and there's no way to get at the
other headers without laying out the article afresh (using
`gnus-request-article' in a temporary buffer).

But that's not terribly slow (2.3 minutes on this 500MHz UltraSPARC IIi
for 100,000 calls, including 100,000 fetches of the news article in
question over a 100Mb/s network; about ten milliseconds per call), so
I've done that.

Have a patch (against bbdb-2.34, but this function is unchanged for
donkeys' years, so the only problem applying it should be slop).

I've tested it against Gnus 5.8.8 and 5.10.6: I see no reason why it
shouldn't work with 5.6 as well. (I can't remember enough about earlier
versions to know if it'll work there.)

2004-07-02  Nix  <[EMAIL PROTECTED]>

        * lisp/bbdb-hooks.el (bbdb-extract-field-value):
        Handle fields hidden by Gnus by re-extracting into a temporary
        buffer.

Index: bbdb/lisp/bbdb-hooks.el
===================================================================
RCS file: /pack/xemacscvs/XEmacs/packages/xemacs-packages/bbdb/lisp/bbdb-hooks.el,v
retrieving revision 1.5
diff -u -r1.5 bbdb-hooks.el
--- bbdb/lisp/bbdb-hooks.el     2002/02/12 22:56:38     1.5
+++ bbdb/lisp/bbdb-hooks.el     2004/07/02 20:59:09
@@ -118,22 +117,38 @@
   ;; we can't special-case VM here to use its cache, because the cache has
   ;; divided real-names from addresses; the actual From: and Subject: fields
   ;; exist only in the message.
-  (setq field-name (concat (regexp-quote field-name) "[ \t]*:[ \t]*"))
-  (let ((case-fold-search t)
-    done)
-    (while (not (or done
-            (looking-at "\n") ; we're at BOL
-            (eobp)))
-      (if (looking-at field-name)
-      (progn
-        (goto-char (match-end 0))
-        (setq done (buffer-substring (point)
-                     (progn (end-of-line) (point))))
-        (while (looking-at "\n[ \t]")
-          (setq done (concat done " "
-               (buffer-substring (match-end 0)
-                 (progn (end-of-line 2) (point))))))))
-      (forward-line 1))
+  (let ((temp-buffer-name)
+        (orig-major-mode major-mode)
+        done)
+    (save-excursion
+      (if (memq major-mode
+                '(gnus-summary-mode gnus-article-mode gnus-tree-mode))
+          (let ((temp-buffer-name (generate-new-buffer-name " *bbdb-extract temp*"))
+                (current-article (with-current-buffer gnus-summary-buffer
+                                   gnus-current-article))
+                (current-group gnus-newsgroup-name))
+            (set-buffer (get-buffer-create temp-buffer-name))
+            (gnus-request-article current-article current-group (current-buffer))))
+      (setq field-name (concat (regexp-quote field-name) "[ \t]*:[ \t]*"))
+      (let ((case-fold-search t))
+        (while (not (or done
+                (looking-at "\n") ; we're at BOL
+                (eobp)))
+          (if (looking-at field-name)
+          (progn
+            (goto-char (match-end 0))
+            (setq done (buffer-substring (point)
+                         (progn (end-of-line) (point))))
+            (while (looking-at "\n[ \t]")
+              (setq done (concat done " "
+                   (buffer-substring (match-end 0)
+                     (progn (end-of-line 2) (point))))))))
+          (forward-line 1))))
+    (if (memq orig-major-mode 
+              '(gnus-summary-mode gnus-article-mode gnus-tree-mode))
+        (let ((kill-buffer-hook nil)
+              (kill-buffer-query-functions nil))
+          (kill-buffer temp-buffer-name)))
     done))

-- 
`Some people find it difficult to accept that it is not always possible
 to explain things which should be explicable.'


-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com
_______________________________________________
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/bbdb-info
BBDB Home Page: http://bbdb.sourceforge.net/

Reply via email to