Coloration des en-têtes mu4e en fonction du contenu du titre


8

Je voudrais colorer les messages selon moi *mu4e-headers*, en fonction de la liste de diffusion dont ils proviennent. Je suis plutôt novice face aux modifications apportées à emacs, et je n'ai rien vu de pertinent à ce sujet. Existe-t-il des crochets programmatiques pour définir une face par ligne?

Exemple: si un e-mail se trouve dans mon dossier INBOX / ML, je voudrais qu'il soit vert. Si c'est juste dans mon INBOX, je le voudrais bleu.

Réponses:


1

Les faces des lignes sont définies dans mu4e~headers-line-handler-functions. Pour changer le visage de manière conditionnelle, vous pouvez définir vos préférences dans mu4e-mailing-list-colorset essayer le code suivant (basé sur la mu4e~headers-line-apply-flag-facefonction):

(defvar mu4e-mailing-list-colors
  '(("emacs-devel.gnu.org" . "green")
    ("emacs-orgmode.gnu.org" . "blue")))

(defun mu4e~headers-line-apply-mailing-list-face (msg line)
  "Adjust LINE's face property based on the MSG's mailing-list value."
  (let* ((ml (mu4e-message-field msg :mailing-list))
         (face (if (assoc ml mu4e-mailing-list-colors)
                   `(:foreground ,(assoc-default ml mu4e-mailing-list-colors))
                 'mu4e-header-face)))
    (when (fboundp 'add-face-text-property)
      (add-face-text-property 0 (length line) face t line))
    line))

(add-to-list 'mu4e~headers-line-handler-functions
             'mu4e~headers-line-apply-mailing-list-face)

entrez la description de l'image ici

Pour un effet plus soudain, vous pouvez ajouter un nouveau champ d'en- tête et ajouter la police uniquement sur cette partie de la ligne. Vous devrez également ajouter (:colorize . 1)à mu4e-headers-fieldset modifier les chiffres dans add-face-text-property. Voici un exemple:

(add-to-list 'mu4e-header-info-custom
             '(:colorize . (:name "Mailing list"
                            :shortname ""
                            :function (lambda (_msg)
                                        (make-string 1 ?█)))))

(defun mu4e~headers-line-apply-mailing-list-face (msg line)
  "Adjust LINE's face property based on the mailing list."
  (let* ((ml (mu4e-message-field msg :mailing-list))
         (face (if (assoc ml mu4e-mailing-list-colors)
                   (let ((color (assoc-default ml mu4e-mailing-list-colors)))
                     `(:foreground ,color :background ,color))
                 `(:foreground ,(face-attribute 'highlight :background)))))
    (when (fboundp 'add-face-text-property)
      (add-face-text-property 53 54 face t line))
    line))

entrez la description de l'image ici


Merci pour la réponse @jagrg! Malheureusement, la barre de couleur dans la deuxième solution disparaît lorsque votre point est sur un message particulier. Je pense que la mise en évidence l'emporte en quelque sorte. Une idée de comment résoudre ce problème?
Matthew Piziak

@MatthewPiziak pouvez-vous essayer maintenant.
jagrg

Fait intéressant, il ne montre toujours pas la barre complète pour moi, mais je peux voir la couleur dans le soulignement: imgur.com/XX7lAnvl.png .
Matthew Piziak

J'ai cessé mu4e-header-highlight-faced'hériter regionet maintenant il apparaît. Je ne sais pas pourquoi, mais mon regiona DistantForeground: gtk_selection_fg_coloret Background: #11472b. Quoi qu'il en soit, je trouve que la suppression de l' regionhéritage semble plus propre avec ma configuration de toute façon, donc je garde cela.
Matthew Piziak
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.