Colorear encabezados mu4e según el contenido del título

8

Me gustaría colorear los mensajes en mi *mu4e-headers*vista, dependiendo de la lista de correo de donde provienen. Soy bastante nuevo en las modificaciones de cara de emacs, y no vi nada que pareciera relevante para esto. ¿Hay ganchos programáticos para definir una cara por línea?

Ejemplo: si hay un correo electrónico en mi carpeta INBOX / ML, me gustaría que sea verde. Si solo está en mi INBOX, me gustaría que sea azul.

Justin Abrahms
fuente

Respuestas:

1

Las caras de línea se definen en mu4e~headers-line-handler-functions. Para cambiar la cara condicionalmente, puede establecer sus preferencias mu4e-mailing-list-colorsy probar el siguiente código (basado en la mu4e~headers-line-apply-flag-facefunción):

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

ingrese la descripción de la imagen aquí

Para un efecto más súbito, puede agregar un nuevo campo de encabezado y agregar la fuente solo en esa parte de la línea. También tendrá que añadir (:colorize . 1)a mu4e-headers-fieldsy ajustar los números en add-face-text-property. Aquí hay un ejemplo:

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

ingrese la descripción de la imagen aquí

jagrg
fuente
Gracias por la respuesta @jagrg! Desafortunadamente, la barra de color en la segunda solución desaparece cuando su punto está en un mensaje en particular. Creo que el resaltado lo está anulando de alguna manera. ¿Alguna idea de como arreglarlo?
Matthew Piziak
@MatthewPiziak puedes probar ahora.
jagrg
Curiosamente, todavía no muestra la barra completa para mí, pero puedo ver el color en el subrayado: imgur.com/XX7lAnvl.png .
Matthew Piziak
Dejé mu4e-header-highlight-facede heredar de regiony ahora aparece. No estoy seguro de por qué, pero mi regiontiene DistantForeground: gtk_selection_fg_colory Background: #11472b. De todos modos, encuentro que eliminar la regionherencia se ve más limpio con mi configuración de todos modos, así que me quedo con eso.
Matthew Piziak