Gnus development mailing list
 help / color / mirror / Atom feed
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).