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.

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.