Färben von mu4e-Headern basierend auf dem Titelinhalt

8

Ich möchte die Nachrichten in meiner *mu4e-headers*Ansicht einfärben , je nachdem von welcher Mailingliste sie stammen. Ich bin ziemlich neu in Emacs Gesichtsveränderungen, und ich habe nichts gesehen, was dafür relevant aussah. Gibt es programmatische Hooks zum Definieren einer Fläche pro Zeile?

Beispiel: Wenn sich eine E-Mail in meinem INBOX / ML-Ordner befindet, möchte ich, dass sie grün ist. Wenn es nur in meinem Posteingang ist, würde ich es blau mögen.

Justin Abrahms
quelle

Antworten:

1

Linienflächen sind in definiert mu4e~headers-line-handler-functions. Um das Gesicht bedingt zu ändern, können Sie Ihre Einstellungen vornehmen mu4e-mailing-list-colorsund den folgenden Code (basierend auf der mu4e~headers-line-apply-flag-faceFunktion) ausprobieren :

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

Geben Sie hier die Bildbeschreibung ein

Für einen verwirrenderen Effekt können Sie ein neues Kopfzeilenfeld hinzufügen und die Schriftart nur für diesen Teil der Zeile hinzufügen. Sie werden auch hinzufügen müssen (:colorize . 1)zu mu4e-headers-fieldsund optimieren die Zahlen in add-face-text-property. Hier ist ein Beispiel:

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

Geben Sie hier die Bildbeschreibung ein

jagrg
quelle
Danke für die Antwort @jagrg! Leider verschwindet der Farbbalken in der zweiten Lösung, wenn Ihr Punkt auf einer bestimmten Nachricht liegt. Ich denke, die Hervorhebung überschreibt es irgendwie. Irgendeine Idee, wie man das behebt?
Matthew Piziak
@MatthewPiziak können Sie jetzt versuchen.
Jagrg
Interessanterweise wird für mich immer noch nicht der vollständige Balken angezeigt , aber ich kann die Farbe unterstrichen sehen: imgur.com/XX7lAnvl.png .
Matthew Piziak
Ich habe aufgehört zu mu4e-header-highlight-faceerben regionund jetzt erscheint es. Ich weiß nicht warum, aber mein regionhat DistantForeground: gtk_selection_fg_colorund Background: #11472b. Wie auch immer, ich finde, dass das Entfernen der regionVererbung mit meiner Konfiguration sowieso sauberer aussieht, also behalte ich das bei.
Matthew Piziak