Theresa O’Connor

Munging Gmane’s Archived-At Header

Hi there!

First of all, sorry about the lack of posts of late. Imagine a standard explanation here, including all the normal bits about work, holidays, and social lives.

Now, on to the good stuff. I read lots of mailing lists via Gmane. Gmane includes an Archived-At header which points to Gmane's permalink for the article. I prefer Gmane's Gnus-like web interface to its blog-like one; here's how I automatically change the link to the one I prefer. Note that the link needs to be changed in two places: in the header text, and in the gnus-data text property of the header text.

(defun ted-mangle-gmane-archival-gnus-data (link)
  "Mangle the `gnus-data' property value LINK.
Specifically, change the archival URL from permalink.gmane.org (Gmane's
blog-like interface) to article.gmane.org (Gmane's newslike interface)."
  (let ((original-date (get-text-property 5 'original-date link))
        (face (get-text-property 5 'face link)))
    (propertize (replace-regexp-in-string "permalink" "article"
                                          (substring-no-properties link))
                'face face 'original-date original-date)))

(defun ted-mangle-gmane-archival-header ()
  "Mangle Gmane's Archived-At header to be more useful.
Specifically, change the archival URL from permalink.gmane.org (Gmane's
blog-like interface) to article.gmane.org (Gmane's newslike interface)."
  (gnus-with-article-headers
   (when (gnus-article-goto-header "Archived-At")
     (save-excursion
       (alter-text-property (+ 2 (point)) (1- (line-end-position)) 'gnus-data
                            'ted-mangle-gmane-archival-gnus-data))
     (when (re-search-forward "permalink" (line-end-position) t)
       (replace-match (propertize "article" 'face 'gnus-header-content))))))

(add-hook 'gnus-article-prepare-hook 'ted-mangle-gmane-archival-header)

I think this is a good illustration of how to use gnus-article-prepare-hook to munge articles.