English version

Mutt

Introduction

Mutt est certainement le meilleur logiciel de lecture de courrier électronique (en anglais, mail user agent) existant sous Unix. Voici quelques-unes de ses fonctionnalités...

Personnellement, j'utilise Mutt depuis octobre 1996 (version 0.47).

Ressources

Anciennes ressources

Terminal

Affichage des caractères

Si votre terminal est correctement configuré, i.e. si l'encodage des caractères utilisé par le terminal correspond bien à vos locales, il n'y a théoriquement rien à configurer du côté de Mutt (mais voir ci-dessous). En effet, par défaut, les caractères sont automatiquement convertis dans l'encodage spécifié par les locales, via la bibliothèque libiconv. Ce comportement peut être changé en spécifiant un autre encodage dans la variable $charset.

Si votre terminal est configuré pour utiliser un encodage d'Unicode (normalement UTF-8), tout devrait bien se passer, sauf problème éventuel (comme des fontes manquantes) non spécifique à Mutt. Sinon, il est possible que certains caractères à afficher ne fassent pas partie du jeu de caractères local. Par exemple, c'est le cas du symbole Euro () en ISO-8859-1, ou plus généralement, du guillemet simple fermant (), que certains utilisent comme apostrophe. Lorsqu'un tel caractère ne peut pas être converti ou que la chaîne d'entrée contient une séquence invalide, Mutt affiche à la place un ou plusieurs caractères de remplacement (en général, ce sont des points d'interrogation). Alternativement, on peut vouloir remplacer un caractère non représentable dans le jeu de caractères local par un caractère équivalent ou semblable. Cela s'appelle la translittération, qui peut être activée à l'aide du suffixe //TRANSLIT. Ainsi le guillemet simple fermant peut être remplacé par le caractère accent aigu (´) ou par le caractère apostrophe (') dans un terminal utilisant l'encodage ISO-8859-1.

Pour utiliser la translittération dans Mutt, il suffit donc d'ajouter la ligne suivante à votre fichier .muttrc:

set charset=`locale charmap`//TRANSLIT

Sous Mac OS X (Darwin), la commande locale charmap ne fonctionne malheureusement pas (sans même terminer dans un état d'erreur), bien qu'elle soit définie par POSIX. J'utilise donc la ligne suivante dans mon fichier .muttrc:

set charset=`codeset 2> /dev/null || locale charmap`//TRANSLIT

où le source C de la commande codeset est le suivant: codeset.c.

Note: si vous utilisez Mutt dans une session Screen en UTF-8 sur un terminal ISO-8859, alors la translittération ne pourrait être faite que par Screen (de manière nécessairement plus limitée, de façon à respecter l'alignement des caractères dans le terminal), mais Screen ne semble pas supporter la translittération et n'utilise pas libiconv.

Xterm et copier-coller

Si vous utilisez le terminal xterm, il est recommandé de mettre la ressource X11 keepSelection à true (vous devez avoir xterm #230 ou plus). Ceci peut être fait de manière permanente en ajoutant la ligne

*keepSelection: true

à votre fichier $XAPPLRESDIR/XTerm ou

XTerm*keepSelection: true

à votre fichier .Xresources (les différentes façons de fixer cette option peuvent dépendre de votre système et votre configuration). Cette option se trouve aussi dans le menu VT Options (qui apparaît avec Ctrl-clic avec le bouton du milieu), mais cela affecterait uniquement la fenêtre xterm courante.

Si vous utilisez Emacs comme éditeur...

Encodage des caractères

Si vous ne l'avez pas encore fait, il faut d'abord régler les problèmes liés aux encodages des caractères (charset), en particulier si votre langue contient des caractères non ASCII (par exemple à cause de diacritiques, comme les accents) ou si vous communiquez avec des personnes dont le nom peut contenir de tels caractères. Lorsque vous devez composer un message (que ce soit un nouveau message ou une réponse), Mutt lance l'éditeur avec un contenu (éventuellement vide) dans l'encodage spécifié par votre environnement (locales). Lorsque vous quittez l'éditeur, le fichier contenant le message doit avoir le même encodage (qui n'est pas forcément celui utilisé lors de l'envoi du message par Mutt).

Par défaut, Emacs est configuré pour utiliser l'encodage (coding system, dans le jargon d'Emacs) spécifié par les locales. Vous n'avez donc rien à faire de particulier. En cas de conflit avec le reste de votre configuration, vous pouvez toujours mettre la ligne suivante dans un find-file-hook de votre fichier .emacs:

(prefer-coding-system locale-coding-system)

Cela peut cependant poser des problèmes si vous devez éditer des messages avec la fonction edit-message de Mutt; dans ce cas, le code donné plus bas est préférable, même s'il n'est pas parfait.

Par défaut, les entrées-sorties ne sont pas configurées correctement lorsqu'Emacs est lancé dans un terminal texte (e.g. xterm). Pour cela, vous devez ajouter à votre .emacs:

(when (not window-system)
  (set-keyboard-coding-system locale-coding-system)
  (set-terminal-coding-system locale-coding-system)
)

Aussi, si vous avez un fichier de signature, celui-ci doit être également dans l'encodage spécifié par les locales. Si vous utilisez plusieurs locales (c'est mon cas), vous pouvez convertir la signature dans le bon encodage à la volée avec iconv, en mettant la bonne commande dans votre .muttrc. Par exemple, pour faire une conversion à partir de iso-8859-1:

set signature="iconv -f iso-8859-1 $HOME/.signature|"

Divers

Exemple de code Emacs LISP pour placer le curseur après les lignes de l'en-tête éventuelle et enlever toute signature citée quand on répond à des messages (remerciements à Ralf Fassel pour son aide):

(add-hook 'find-file-hooks (lambda ()
  (when (string-match "^mutt-.*-[0-9]+-[0-9]+-[0-9]+$"
                      (file-name-nondirectory (buffer-file-name)))

    (set (make-local-variable 'backup-inhibited) t)

    ;; The following code is executed only when composing messages
    ;; (new messages or replies), not when editing messages (which
    ;; start with "From ") from the mailbox.
    (when (looking-at "^From:")
      (flush-lines "^\\(> \n\\)*> -- \\(\\(\n> .*\\)+\\|$\\)")
      (not-modified)
      (search-forward "\n\n" nil t))

    (mail-mode)
)))

À placer dans son fichier .emacs après adaptation éventuelle...

Un autre exemple, pour choisir correctement le système de codage du fichier édité:

(defun mutt-search-header (regexp)
  (goto-char (point-min))
  (while (not (or (eolp) (looking-at regexp)))
    (forward-line 1))
  (not (eolp))
)

(defun mutt-find-file-coding-system (arg-list)
  "\
Determine the coding system of a mail file.  Use the current locale if the
file doesn't declare a charset (in practice, when composing a mail message
instead of editing one).  This is a heuristic."
  (if (eq (car arg-list) 'insert-file-contents)
      (let ((case-fold-search t))
        (save-excursion
          (goto-char (point-min))
          (cond
           ((looking-at "^From:")  ;; Composed mail (new mail or reply).
            locale-coding-system)
           ((and (mutt-search-header "Content-Transfer-Encoding: 8bit")
                 (mutt-search-header
                  "Content-Type:.*charset=\"?\\([-0-9a-z]*\\)"))
            (let ((charset (intern (downcase (match-string 1)))))
              (if (memq charset (coding-system-list))
                  (progn
                    (message "Found charset %s in header." charset)
                    charset)
                'undecided-unix)))
           (t 'undecided-unix))))
    'undecided-unix)
)

(modify-coding-system-alist 'file "/mutt-.*-[0-9]+-[0-9]+-[0-9]+\\'"
                            'mutt-find-file-coding-system)

Ce doit être le système de codage spécifié par les locales lors de la composition d'un message (soit un nouveau message ou une réponse). Mais quand un message est édité (grâce à la fonction edit-message de Mutt), ce devrait être le charset du message, lorsque cela a un sens (les messages avec attachements MIME ne sont pas supportés).

Configuration

Voici mon .muttrc (fichier de configuration). Il ne devrait plus contenir de commandes strictement privées (comme les commandes alternates). Mais il est sage de le comprendre et de l'adapter à vos besoins avant de l'utiliser.

Bugs

La liste des bugs qui me concernent:



webmaster@vinc17.org