From: "François Pinard" <pinard@iro.umontreal.ca>
Subject: Using Gnus _from_ RMAIL mode
Date: 07 Jan 2000 12:46:33 -0500 [thread overview]
Message-ID: <oqzouhrczq.fsf@titan.progiciels-bpi.ca> (raw)
[-- Attachment #1: Type: text/plain, Size: 4223 bytes --]
Hi, people. Let me share with you some Emacs LISP code I use to ease using
Gnus _from_ RMAIL mode, so take advantage of threading or MIME features.
I have a great deal of archives kept in a few thousands of Babyl files, which
are kept that way instead of being turned into `nnml' files. This saves
some i-nodes, but more importantly, I do not see how I would manage the big
Group or Topics display it would generate. I like the group list all within
the window, but I do not want revealing or hiding topics all the time :-).
Yet, while in these archives, I much miss Gnus highlighting, threading,
MIME-handling, as well as plenty of other nice features. I would call
Gnus to the rescue in some occasions, and return to RMAIL mode once done.
With this, the `!' command in RMAIL mode generates a two windows views: a
Gnus summary for the whole Babyl filey, and the current message now shown
as a Gnus article. Quitting the group brings you back in RMAIL mode,
right on your original message. Your Gnus work and marks are forgotten.
There is a prefixed version of that command. `C-u !' in RMAIL mode gets
the same thing as above, without the summary. You just have the feeling
that your RMAIL message has been repainted the Gnus way. `q' return you
to RMAIL. However, `C-u !' uses a quite different machinery internally.
As it is meant for a single message, it avoids the whole rescanning of
a possibly huge Babyl file, by using a new backend meant for this case.
This is `nnone', appended as an attachment near the end of this message.
(defun fp-maybe-start-gnus ()
"Have Gnus started, if not already."
(save-window-excursion
(unless (gnus-alive-p)
(gnus))))
(autoload 'gnus-alive-p "gnus-util")
(defun fp-rmail-mode-routine ()
;; [...]
(local-set-key "!" 'fp-rmail-display-with-gnus)
;;
)
(add-hook 'rmail-mode-hook 'fp-rmail-mode-routine)
;; FIXME: Rather depend on uniquification of names.
(defvar fp-rmail-display-with-gnus-counter 0
"To make sure no two servers are simultaneously opened with the same name.")
(defun fp-rmail-display-with-gnus (flag)
"Display the whole Babyl file with Gnus, using a nndoc ephemeral server.
With a flag argument, display only the current message instead, using nnone."
(interactive "P")
(fp-maybe-start-gnus)
(if flag
(fp-rmail-display-babyl-message-with-gnus)
(fp-rmail-display-babyl-file-with-gnus)))
(defun fp-rmail-display-babyl-message-with-gnus ()
"Display current message with Gnus, using a nnone ephemeral server."
(interactive)
(let ((rmail-buffer (current-buffer))
(nnone-buffer (save-excursion
(nnheader-set-temp-buffer " *copy article*")))
(group (format "nnone:%s-%d[%d]"
(file-name-nondirectory buffer-file-name)
(incf fp-rmail-display-with-gnus-counter)
rmail-current-message)))
(if (rmail-msg-is-pruned)
(let ((modified (buffer-modified-p)))
(rmail-toggle-header)
(append-to-buffer nnone-buffer (point-min) (point-max))
(rmail-toggle-header)
(set-buffer-modified-p modified))
(append-to-buffer nnone-buffer (point-min) (point-max)))
(if (gnus-group-read-ephemeral-group
group `(nnone ,group (nnone-article-buffer ,nnone-buffer))
nil (cons rmail-buffer (current-window-configuration)))
(progn
(gnus-summary-beginning-of-article)
(bury-buffer)
(delete-window))
(kill-buffer nnone-buffer)
(set-buffer rmail-buffer)
(gnus-error 3 "Article couldn't be entered"))))
(defun fp-rmail-display-babyl-file-with-gnus ()
"Display the whole Babyl file with Gnus, using a nndoc ephemeral server.
Automatically selects within Gnus the message which is current in RMAIL."
(let ((rmail-buffer (current-buffer))
(group (format "nndoc:%s-%d"
(file-name-nondirectory buffer-file-name)
(incf fp-rmail-display-with-gnus-counter)))
(article rmail-current-message))
(if (save-restriction
(widen)
(gnus-group-read-ephemeral-group
group `(nndoc ,group (nndoc-address ,rmail-buffer)
(nndoc-article-type babyl))
t (cons rmail-buffer (current-window-configuration))))
(gnus-summary-goto-article article)
(set-buffer rmail-buffer)
(gnus-error 3 "Babyl group couldn't be entered"))))
[-- Attachment #2: nnone.el --]
[-- Type: application/emacs-lisp, Size: 1427 bytes --]
[-- Attachment #3: Type: text/plain, Size: 59 bytes --]
--
François Pinard http://www.iro.umontreal.ca/~pinard
reply other threads:[~2000-01-07 17:46 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=oqzouhrczq.fsf@titan.progiciels-bpi.ca \
--to=pinard@iro.umontreal.ca \
/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).