Colorare le intestazioni mu4e in base al contenuto del titolo


8

Vorrei colorare i messaggi a mio *mu4e-headers*avviso, a seconda della mailing list da cui provengono. Sono piuttosto nuovo alle modifiche del viso di Emacs e non ho visto nulla di rilevante per questo. Esistono hook programmatici per la definizione di una faccia per linea?

Esempio: se un'e-mail si trova nella mia cartella INBOX / ML, la vorrei verde. Se è solo nella mia INBOX, mi piacerebbe blu.

Risposte:


1

Le facce di linea sono definite in mu4e~headers-line-handler-functions. Per modificare il volto in modo condizionale, puoi impostare le tue preferenze mu4e-mailing-list-colorse provare il seguente codice (basato sulla mu4e~headers-line-apply-flag-facefunzione):

(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)

inserisci qui la descrizione dell'immagine

Per un effetto più delicato puoi aggiungere un nuovo campo di intestazione e aggiungere la fontificazione solo su quella parte della linea. Avrete anche aggiungere (:colorize . 1)alle mu4e-headers-fieldse modificare i numeri add-face-text-property. Ecco un esempio:

(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))

inserisci qui la descrizione dell'immagine


Grazie per la risposta @jagrg! Sfortunatamente la barra dei colori nella seconda soluzione scompare quando il tuo punto è su un particolare messaggio. Penso che l'evidenziazione lo stia ignorando in qualche modo. Qualche idea su come risolverlo?
Matthew Piziak,

@MatthewPiziak puoi provare ora.
Jagrg

È interessante notare che non mostra ancora la barra completa per me, ma posso vedere il colore nella sottolineatura: imgur.com/XX7lAnvl.png .
Matthew Piziak,

Ho smesso mu4e-header-highlight-facedi ereditare da regione ora sembra. Non so perché, ma il mio regionha DistantForeground: gtk_selection_fg_colore Background: #11472b. Ad ogni modo, trovo che rimuovere l' regioneredità sia comunque più pulito con la mia configurazione, quindi lo tengo.
Matthew Piziak,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.