Tô màu mu4e dựa trên nội dung tiêu đề


8

Tôi muốn tô màu các tin nhắn trong *mu4e-headers*chế độ xem của tôi , tùy thuộc vào danh sách gửi thư mà chúng đến từ đâu. Tôi còn khá mới mẻ với sự thay đổi khuôn mặt của emacs và tôi không thấy bất cứ điều gì có vẻ phù hợp cho việc này. Có các móc lập trình để xác định khuôn mặt trên mỗi dòng không?

Ví dụ: Nếu một email nằm trong thư mục INBOX / ML của tôi, tôi muốn nó có màu xanh lá cây. Nếu nó chỉ trong INBOX của tôi, tôi muốn nó có màu xanh.

Câu trả lời:


1

Mặt đường được xác định trong mu4e~headers-line-handler-functions. Để thay đổi khuôn mặt một cách có điều kiện, bạn có thể đặt tùy chọn của mình mu4e-mailing-list-colorsvà thử mã sau (dựa trên mu4e~headers-line-apply-flag-facechức năng):

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

nhập mô tả hình ảnh ở đây

Để có hiệu ứng lộn xộn hơn, bạn có thể thêm trường tiêu đề mới và chỉ thêm phông chữ trên phần đó của dòng. Bạn cũng sẽ cần phải thêm (:colorize . 1)vào mu4e-headers-fieldsvà tinh chỉnh các con số trong add-face-text-property. Đây là một ví dụ:

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

nhập mô tả hình ảnh ở đây


Cảm ơn câu trả lời @jagrg! Thật không may, thanh màu trong giải pháp thứ hai biến mất khi điểm của bạn nằm trên một thông điệp cụ thể. Tôi nghĩ rằng sự nổi bật là ghi đè nó bằng cách nào đó. Bất cứ ý tưởng làm thế nào để khắc phục điều đó?
Matthew Piziak

@MatthewPiziak bạn có thể thử ngay bây giờ.
jagrg

Thật thú vị, nó vẫn không hiển thị thanh đầy đủ cho tôi, nhưng tôi có thể thấy màu trong phần gạch chân: imgur.com/XX7lAnvl.png .
Matthew Piziak

Tôi đã ngừng mu4e-header-highlight-facekế thừa từ regionvà bây giờ nó xuất hiện. Không chắc tại sao, nhưng tôi regionDistantForeground: gtk_selection_fg_colorBackground: #11472b. Dù sao, tôi thấy rằng việc loại bỏ regionquyền thừa kế có vẻ sạch hơn với cấu hình của tôi, vì vậy tôi đang giữ điều đó.
Matthew Piziak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.