Colorir cabeçalhos do mu4e com base no conteúdo do título

8

Eu gostaria de colorir as mensagens na minha *mu4e-headers*opinião, dependendo da lista de correspondência de onde elas vêm. Sou um novato no emacs que enfrenta alterações e não vi nada que parecesse relevante para isso. Existem ganchos programáticos para definir uma face por linha?

Exemplo: se um email estiver na minha pasta INBOX / ML, eu gostaria que ele fosse verde. Se é apenas na minha caixa de entrada, eu gostaria azul.

Justin Abrahms
fonte

Respostas:

1

As faces da linha são definidas em mu4e~headers-line-handler-functions. Para alterar a face condicionalmente, você pode definir suas preferências mu4e-mailing-list-colorse tentar o seguinte código (com base na mu4e~headers-line-apply-flag-facefunção):

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

insira a descrição da imagem aqui

Para um efeito mais súbito, você pode adicionar um novo campo de cabeçalho e adicionar fonte apenas nessa parte da linha. Você também terá que adicionar (:colorize . 1)para mu4e-headers-fieldse ajustar os números add-face-text-property. Aqui está um exemplo:

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

insira a descrição da imagem aqui

jagrg
fonte
Obrigado pela resposta @jagrg! Infelizmente, a barra de cores na segunda solução desaparece quando seu ponto está em uma mensagem específica. Eu acho que o destaque está anulando de alguma forma. Alguma idéia de como consertar isso?
Matthew Piziak 06/07/19
@MatthewPiziak, você pode tentar agora.
jagrg
Curiosamente, ele ainda não mostra a barra completa para mim, mas posso ver a cor no sublinhado: imgur.com/XX7lAnvl.png .
Matthew Piziak 08/07/19
Eu parei mu4e-header-highlight-facede herdar regione agora parece. Não sei por que, mas o meu regiontem DistantForeground: gtk_selection_fg_colore Background: #11472b. De qualquer forma, acho que remover a regionherança parece mais limpo com a minha configuração, então estou mantendo isso.
Matthew Piziak 08/07/19