Mewarnai header mu4e berdasarkan pada konten judul

8

Saya ingin mewarnai pesan-pesan dalam *mu4e-headers*pandangan saya , tergantung dari mana mereka berasal. Saya agak baru menghadapi perubahan emacs, dan saya tidak melihat apa pun yang tampak relevan untuk ini. Apakah ada kait terprogram untuk menentukan wajah per-baris?

Contoh: Jika email ada di folder INBOX / ML saya, saya ingin warna hijau. Jika hanya di INBOX saya, saya suka warna biru.

Justin Abrahms
sumber

Jawaban:

1

Wajah garis didefinisikan dalam mu4e~headers-line-handler-functions. Untuk mengubah wajah secara kondisional, Anda dapat mengatur preferensi Anda mu4e-mailing-list-colorsdan mencoba kode berikut (berdasarkan mu4e~headers-line-apply-flag-facefungsi):

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

masukkan deskripsi gambar di sini

Untuk efek yang lebih suddle, Anda dapat menambahkan bidang header baru dan menambahkan fontifikasi hanya pada bagian baris tersebut. Anda juga harus menambahkan (:colorize . 1)untuk mu4e-headers-fieldsdan tweak angka dalam add-face-text-property. Ini sebuah contoh:

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

masukkan deskripsi gambar di sini

jagrg
sumber
Terima kasih atas jawabannya @jagrg! Sayangnya bilah warna pada solusi kedua menghilang ketika poin Anda ada pada pesan tertentu. Saya pikir sorotan menimpanya entah bagaimana. Adakah cara untuk memperbaikinya?
Matius Piziak
@ MatthewPiziak dapat Anda coba sekarang.
jagrg
Menariknya, itu masih tidak menunjukkan bilah penuh untuk saya, tapi saya bisa melihat warna di garis bawah: imgur.com/XX7lAnvl.png .
Matius Piziak
Saya berhenti mu4e-header-highlight-facemewarisi dari regiondan sekarang muncul. Tidak yakin mengapa, tapi regionpunya saya DistantForeground: gtk_selection_fg_colordan Background: #11472b. Lagi pula, saya menemukan bahwa menghapus regionwarisan tampak lebih bersih dengan konfigurasi saya, jadi saya tetap melakukannya.
Matius Piziak