Nhờ @MadhavanKumar, tôi tập trung vào việc tìm ra giải pháp dựa trên defface
.
Tôi nhận ra rằng tôi không thể ghi đè lên hiện tại defface
nhưng tôi luôn có thể tạo màu nền nhạy cảm của riêng mình defface
. Sau đó, câu hỏi duy nhất là làm thế nào để sử dụng defface tùy chỉnh của tôi thay vì ban đầu.
Tôi sẽ sử dụng cùng một ví dụ về ghi đè stripe-hl-line
khuôn mặt để đi qua giải pháp. Khuôn mặt này được xác định trong gói stripe-buffer
.
Dưới đây là các bước:
Bước 1. Xác định của riêng bạn defface
(defface my/stripe-hl-line
'((((background dark)) (:overline "gray" :underline "gray" :foreground "dodger blue"))
(t (:overline "gray" :underline "gray" :foreground "red")))
"Bold face for highlighting the current line in Hl-Line mode."
:group 'stripe-buffer)
Điều này sẽ dẫn đến màu nền trước của my/stripe-hl-line
mặt là màu xanh lam cho nền tối và màu đỏ cho nền sáng.
Bước 2. Tạo một chức năng để ánh xạ lại khuôn mặt
Các face-remap-add-relative
chức năng được sử dụng để remap một khuôn mặt hiện có để một khuôn mặt mới. Trong trường hợp này, tôi đang ánh xạ lại stripe-hl-line
khuôn mặt my/stripe-hl-line
.
(defun my/stripe-hl-line-face-remap ()
(face-remap-add-relative 'stripe-hl-line 'my/stripe-hl-line))
Bước 3. Thực hiện ánh xạ lại ở vị trí thích hợp
Từ stripe-buffer
nguồn, tôi thấy rằng hl-line
khuôn mặt được ánh xạ lại để stripe-hl-line
đối mặt. Vì vậy, chúng ta cần thực hiện ánh xạ lại sau khi ánh xạ đó xảy ra (nằm trong stripe-listify-buffer
định nghĩa hàm).
Vì vậy, chúng tôi thực hiện ánh xạ lại bằng cách tư vấn stripe-listify-buffer
sử dụng bộ kết hợp.:after
advice
(advice-add 'stripe-listify-buffer :after #'my/stripe-hl-line-face-remap)
Làm xong!
Điều đó nói rằng, sẽ thật tuyệt vời khi trực tiếp sử dụng một cái gì đó như set-face-attribute
để đặt khuôn mặt dựa trên bóng tối nền.