Berkat @MadhavanKumar, saya fokus untuk mendapatkan solusi berdasarkan defface.
Saya menyadari bahwa saya tidak dapat mengganti yang sudah ada deffacetetapi saya selalu dapat membuat warna latar belakang saya sendiri sensitif defface. Kemudian satu-satunya pertanyaan adalah bagaimana cara menggunakan custom defface saya, bukan yang asli.
Saya akan menggunakan contoh yang sama dari menimpa stripe-hl-linewajah untuk berjalan melalui solusi. Wajah ini didefinisikan dalam paket stripe-buffer.
Berikut langkah-langkahnya:
Langkah 1. Tentukan milik Anda 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)
Ini akan menghasilkan warna latar depan my/stripe-hl-lineyang menghindar biru untuk latar belakang gelap dan merah untuk latar belakang terang.
Langkah 2. Buat fungsi untuk memetakan kembali wajah
The face-remap-add-relativeFungsi ini digunakan untuk memetakan wajah yang ada untuk wajah baru. Dalam hal ini, saya memetakan ulang stripe-hl-linewajah my/stripe-hl-line.
(defun my/stripe-hl-line-face-remap ()
(face-remap-add-relative 'stripe-hl-line 'my/stripe-hl-line))
Langkah 3. Lakukan pemetaan ulang di lokasi yang sesuai
Dari stripe-buffersumbernya, saya melihat bahwa hl-linewajahnya dipetakan kembali ke stripe-hl-linemuka. Jadi kita perlu melakukan pemetaan ulang setelah terjadi pemetaan ulang (yang ada dalam stripe-listify-bufferdefinisi fungsi).
Jadi kami melakukan pemetaan ulang dengan memberi saran stripe-listify-buffermenggunakan kombinator.:after advice
(advice-add 'stripe-listify-buffer :after #'my/stripe-hl-line-face-remap)
Selesai!
Yang mengatakan, itu akan luar biasa untuk secara langsung menggunakan sesuatu seperti set-face-attributeuntuk mengatur wajah berdasarkan kegelapan latar belakang.