Software-soft message-gnus
Lire ses courrier avec Gnus
<cadre type=aparte>Emacs is not built by hate of vi. vi is irrelevant. It is no more then a strange punishment that the unbelievers submit themselves to</cadre>
Pourquoi gnus ?
Gnus est un lecteur de newsgroups (quel anglicisme horrible !) qui est fournit avec GNU Emacs. Il peut aussi servir de lecteur de courriel. Les avantages que j'y trouve sont les suivants :
- même comportement du lecteur de courriel en mode graphique et mode texte
- extensible...
Prérequis
Evidemment, il est de bon goût d'avoir Emacs installé sur son ordinateur. Il est aussi préférable d'être un peu familier avec Emacs. Nous allons aussi faire usage de procmail et fetchmail, matériel qui devrait être présent sur tout GNU/Linux décent.
L'épreuve demande un peu de tenacité. Mais ça doit être jouable.
Restez loggué et faites toutes les manips avec votre utilisateur normal (sauf précision contraire).
Télécharger les courriers
Vous êtes en train de le comprendre : Emacs ne va pas télécharger vos courriers, nous allons faire appel à fetchmail (télécharge) et procmail (distribue). Autant laisser faire chaque outil ce qu'il fait parfaitement. Cela vous permettra d'utiliser votre conf fetchmail et procmail avec d'autres lecteurs de courriel, si une folle envie vous en prennait.
Le .forward
Ce fichier définit qui doit gérer la redistribution de courrier arrivé en local pour l'utilisateur. Tapez ce qui suit, cela suffira :
echo "|/usr/bin/procmail" > ~/.forward
Le .procmailrc
Premièrement, il faut créer un dossier où procmail stockera les courriers arrivés, dans différents fichiers selon la configuration. Ici, il s'agit de ~/.mail-gnus
mkdir ~/.mail-gnus
Ensuite, il faut créer un fichier ~/.procmailrc de configuration comme celui-ci :
PATH=/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/.mail-gnus # You'd better make sure it exists
DEFAULT=$MAILDIR/inbox
LOGFILE=$HOME/.from_procmail
LOCKFILE=$HOME/.lockmail
# Tout les courriers venant ou allant vers une adresse chez gnu.org
# sont posés dans une boîte appellée gnu-devel.
:0
* ^[From|To|Cc].*@gnu.org
gnu-devel
# Tout les autres courriers iront dans $DEFAULT,
# c'est-à-dire inbox.
Le .fetchmailrc
Après avoir configuré la redistribution de courrier en local, nous allons maintenant configurer le téléchargement de courrier.
Voici un exemple pour un compte pop3. Il faut bien entendu substituer moa par l'utilisateur local destinataire, yeupou par le login free.fr et nibelungen par le nom de la machine hôte (hostname quoi).
# Général
set syslog
set bouncemail
set no spambounce
set properties ""
# Chaque compte sur chaque serveur
poll pop.free.fr with proto POP3
user 'yeupou' there with password 'xxx' is 'moa@nibelungen' here
Ensuite, il faudrait que fetchmail tourne en démon. La commande suivante devrait faire l'affaire :
fetchmail -d60 --fetchmailrc /home/moa/.fetchmailrc --norewrite
L'idéal est d'avoir ce démon au démarrage de la machine (ajoutez cette ligne dans /etc/rc.local
) ou lors de votre login (ajoutez cette ligne dans le fichier qui gère votre session - par exemple ~/.Xclients
ou ~/.xinitrc
).
Si fetchmail tourne et que vous avez reçu du courrier, alors il devrait se trouver dans un (ou des) fichier(s) dans le dossier ~/.mails-gnus
Adapter son .emacs
Nous allons maintenant signaler à Emacs l'existence de gnus. Il suffit de copier-coller ce qui suit dans votre ~/.emacs.
;; Definit Gnus comme lecteur courriel
(custom-set-variables
'(read-mail-command (quote gnus))
'(message-directory "~/.Mail/"))
;; Definit Galeon comme brouteur web, pour suivre les liens
(setq browse-url-browser-function 'browse-url-generic
browse-url-generic-program "galeon")
Créer son .gnus
Et nous sommes maintenant dans le vif du sujet, la configuration de gnus. Tout ce qui suit doit être ajouté dans le fichier ~/.gnus
Identité
Corrigez nom et adresse courriel.
;;**** BASIC IDENTITY
(setq user-full-name "Votre Nom"
user-mail-address "votre@courriel.org"
mail-user-agent (quote message-user-agent))
;; Def charset
(setq gnus-default-charset (quote iso-8859-15)
gnus-default-posting-charset (quote iso-8859-15))
(message "gnus.el: BASIC IDENTITY initialized")
Arrivée du courrier
Rien à changer si vous avez suivi ce qui précède.
;;*******************
;;***** GETTING MAILS
;; In mail-source, procmail store files that
;; We store mails here - this is also defined in my .emacs,
;; it's the only way I found to avoid apparition of ~/Mail/.
(setq gnus-directory "~/.News/")
(setq message-directory "~/.Mail/")
;; fetchmail previously downloaded.
(setq mail-sources
(list '(directory
:path "~/.mail-gnus/"
:suffix ""
))
)
;; We choose nnml: everybody says it's the fastest backend on earth.
;; GNUS est avant tout un lecteur de news, autant ne pas s'en priver
(setq gnus-select-method '(nntp "news.free.fr"))
;;veillez à changer le nom du serveur de news de votre FAI
;; et pour les mails
(add-to-list 'gnus-secondary-select-methods '(nnml ""))
;; We trash duplicates mails.
(setq nnmail-treat-duplicates 'delete)
;; We just read mail, no newsgroups.
;;(setq gnus-check-new-newsgroups nil)
(message "gnus.el: GETTING MAILS initialized")
Mime Types
Rien à changer si vous avez suivi ce qui précède. Je ne pourrais pas vous donner de détails à ce propos, que je n'ai fait que copier-coller à partir d'un autre .emacs (mais ça marche bien).
;;************************
;; MIME Settings for PGnus
(require 'mm-util)
(defun mm-read-charset (prompt)
"Return a charset."
'iso-8859-15)
(setq gnus-default-posting-charset (quote iso-8859-15))
(setq gnus-article-decode-mime-words t)
(setq gnus-article-decode-charset 1)
(setq gnus-mime-view-all-parts t) ; View all the MIME parts in current article
(setq gnus-ignored-mime-types
'("text/x-vcard"))
(setq gnus-unbuttonized-mime-types nil) ; MIME type -> no buttons when rendered
(setq
;; Add buttons
gnus-treat-buttonize t
;; Add buttons to the head
gnus-treat-buttonize-head 'head
;; Emphasize text
gnus-treat-emphasize t
;; Fill the article
gnus-treat-fill-article nil
;; Remove carriage returns
gnus-treat-strip-cr 'last
;; Hide headers
gnus-treat-hide-headers 'head
;; Hide boring headers
gnus-treat-hide-boring-headers 'head
;; Hide the signature
gnus-treat-hide-signature nil
;; Hide cited text
gnus-treat-hide-citation nil
;; Strip PGP signatures
gnus-treat-strip-pgp 'last
;; Strip PEM signatures
gnus-treat-strip-pem 'last
;; Highlight the headers
gnus-treat-highlight-headers 'head
;; Highlight cited text
gnus-treat-highlight-citation 'last
;; Highlight the signature
gnus-treat-highlight-signature 'last
;; Display the Date in UT (GMT)
gnus-treat-date-ut nil
;; Display the Date in the local timezone
gnus-treat-date-local nil
;; Display the date in the original timezone
gnus-treat-date-original nil
;; Strip trailing blank lines
gnus-treat-strip-trailing-blank-lines 'last
;; Strip leading blank lines
gnus-treat-strip-leading-blank-lines 'last
;; Strip multiple blank lines
gnus-treat-strip-multiple-blank-lines 'last
;; Strip all blank lines
;; gnus-treat-strip-blank-lines nil
;; Treat overstrike highlighting
gnus-treat-overstrike 'last
)
;;* show the text/plain part before the text/html part in multpart/alternative
(require 'mm-decode)
;;;-- no way do compile with this
;;;--(push "text/plain" mm-alternative-precedence)
;;;--(setq mm-alternative-precedence "text/plain")
(message "gnus.el: MIME initialized")
Archives
Rien à changer si vous avez suivi ce qui précède. Je ne pourrais pas vous donner de détails à ce propos, que je n'ai fait que copier-coller à partir d'un autre .emacs (mais ça marche bien).
;;***********************
;; ARCHIVES: one file per month
(setq gnus-message-archive-group
'((if (message-news-p)
"misc-news"
(concat "mail." (format-time-string
"%Y-%m" (current-time)))))
)
(message "gnus.el: ARCHIVES initialized")
Interface
Rien à changer si vous avez suivi ce qui précède. Logiquement ça marche, lisez les commentaires pour personnaliser.
;;***********************
;;************* INTERFACE
;; Here I define how to display subject lines etc...
;; I wanna see thoses groups everytime
(setq gnus-permanently-visible-groups
"^nnml\\|^nnfolder\\|^inbox\\|^gnu-devel\\|^savannah-hackers\\|^trash")
;; I like it verbose
(setq gnus-verbose 2000)
;; I wanna be able to access my previous post
(setq gnus-fetch-old-headers t)
;; I wanna keep track of the last time I rode a group
(add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
;; *Group* buffer: how to format each group entry.
(setq gnus-group-line-format
"%M%m %4N/%4t non-lus: %(%-20,20g%) depuis le %2,2~(cut 6)\
d/%2,2~(cut 4)d à %2,2~(cut 9)dh%2,2~(cut 11)d\n"
;;
;; %var details C-h i
;;`M' An asterisk if the group only has marked articles.
;;'N' Number of unread articles.
;;`t' Estimated total number of articles.
;;`G' Group name.
;;`D' Newsgroup description.
;;`m' `%' (`gnus-new-mail-mark') if there has arrived new mail to the
;; group lately.
;;`D' Last time the group as been accessed.
;;
;; For the record, a default group line format
;;(setq gnus-group-line-format "%M\%S\%p\%P\%5y: %(%-40,40g%) %6,6~(cut 2)d\n")
)
;; *Summary*: how to format each mail entry.
(setq gnus-summary-line-format
"%-1R %-1U %-15,15n | %2,2~(cut 6)o/%2,2~(cut 4)o %2,2~(cut 9)oh%2,2~(cut 11)\
o | %I%(%0,40s%)\n"
gnus-summary-same-subject ">>>"
gnus-summary-mode-line-format "%V: %%b"
;; %var details C-h i
;; `s' Subject if the article is the root of the thread or the previous
;; article had a different subject, `gnus-summary-same-subject'
;; otherwise. (`gnus-summary-same-subject' defaults to `""'.)
;; `n' The name (from the `From' header).
;; `L' Number of lines in the article.
;; `I' Indentation based on thread level (*note Customizing Threading::).
;; `>' One space for each thread level.
;; `<' Twenty minus thread level spaces.
;; `U' Unread.
;; `R' This misleadingly named specifier is the "secondary mark". This
;; mark will say whether the article has been replied to, has been
;; cached, or has been saved.
;; `D' `Date'.
;; `d' The `Date' in `DD-MMM' format.
;;`o' The `Date' in YYYYMMDD`T'HHMMSS format.
;;
;; For the record the default string is
;; `%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n'.
)
;; I remove mailing list identifiers for mail from list I read often, that
;; are already stored in a particular directory
(setq gnus-list-identifiers
'( "\\[savannah-hackers\\]"
"\\[savannah-dev\\]"
))
;; I do not like graphics smileys.
(setq gnus-treat-display-smileys nil)
;; I wanna particular dimensions while reading mails
(setq
gnus-build-sparse-threads 'some
gnus-use-trees t
gnus-generate-tree-function 'gnus-generate-horizontal-tree
gnus-tree-minimize-window nil)
(if (or (not (getenv "DISPLAY"))
(string-match ":0" (getenv "DISPLAY")))
(progn
(gnus-add-configuration
'(article
(vertical 1.0
(summary 0.40 point)
(article 1.0)
)
)))
(progn
(gnus-add-configuration
'(article
(vertical 1.0
(summary 0.40 point)
(article 1.0)
)
)))
)
(setq font-lock-maximum-decoration t
font-lock-maximum-size nil)
(require 'font-lock)
(set-face-foreground 'gnus-summary-normal-ticked-face "pale violet red")
(set-face-foreground 'gnus-summary-high-ticked-face "pale violet red")
(message "gnus.el: INTERFACE initialized")
Réponses
Corrigez nom et adresse courriel.
; Hey, please remove my address from To: and Ccc: while I do a
;; wide reply.
;; seen at http://www.gnusfr.org/gen.php3/2002/04/02/36,0,1,0.html
(setq message-dont-reply-to-names
"utilisateur@\\(gnu\\|free\\).\\(org\\|fr\\)")
;; I want my replies to begin with something like "<user> writes:"
(defun message-insert-citation-line ()
"La fonction qui insere une ligne aux reponses"
(when message-reply-headers
;; In savannah-hackers group, we talk english
(if (string-equal gnus-newsgroup-name "savannah-hackers")
(insert (mail-header-from message-reply-headers) " said:\n\n")
(insert (mail-header-from message-reply-headers) " a tapoté :\n\n")
)))
(message "gnus.el: REPLY initialized")
Plusieurs Identités
Pour utiliser ceci, vous devez mettre la main sur gnus-pers.el dispo http://www.comsecmilnavpac.net/elisp/ en théorie. Vous devez modifier ce contenu en lien avec votre utilisation. Dans la première partie, on associe des identités à des groupes.
(custom-set-variables
;; This is the hash "group name => identity"
'(gnus-personality-electric-headers (quote
(
(any ".*u-strasbg.*" "formel")
(any ".*gnu.*" "gnu")
)))
;; There are my identities
'(gnus-personalities (quote
(
; usual
("default"
"mathieu <yeupou@coleumes.org>"
""
"~/.signature"
)
; GNU voluteering
("gnu"
"Mathieu Roy <yeupou@gnu.org>"
""
"~/.signature_gnu"
)
; Formal, neutral
("formel"
"Mathieu Roy <mathieu.roy@coleumes.org>"
""
"~/.signature_formel"
)
)))
'(gnus-pers-cc-fix nil)
)
(require 'gnus-pers)
(gnus-personality-init)
(message "gnus.el: IDENTITIES initialized")
Utiliser gnus
Et voilà, le stade de la configuration est passé. Il suffit de lancer emacs, et d'y lancer gnus, en tapant M-x gnus (M = Meta, donc alt).
Envoyer un courriel
Une fois gnus lancé, tapez m
. Remplissez les champs qui vont bien. Par exemple, envoyez vous un courrier, pour tester le tout. Vous pouvez changer votre identité en tapant C-cC-l
. Pour finir, tapez C-c C-c
pour envoyer le courrier.
Consulter les courriels reçus
Il faut maintenant dire quels groupes (en fait, fichiers crées par procmail, selon le .procmailrc) vous desirez lire. Vous regardez dans le menu "Groups" -> "Subscribe" -> "Subscribe to a group". Il vous est demandé de taper le nom du groupe. Tapez tabulation. Si un courriel à bien été reçu, au moins un groupe doit être disponible. Sélectionnez le... Rentrez dans le groupe en tapant entrée... Utilisez les menus et apprennez les raccourcis claviers :)
FDL
Ce document est libre, selon les termes de la licence GNU FDL
Copyright
Copyright © 04/10/2002, Mathieu Roy
Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. |