Berkat @MadhavanKumar, saya fokus untuk mendapatkan solusi berdasarkan defface
.
Saya menyadari bahwa saya tidak dapat mengganti yang sudah ada defface
tetapi 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-line
wajah 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-line
yang menghindar biru untuk latar belakang gelap dan merah untuk latar belakang terang.
Langkah 2. Buat fungsi untuk memetakan kembali wajah
The face-remap-add-relative
Fungsi ini digunakan untuk memetakan wajah yang ada untuk wajah baru. Dalam hal ini, saya memetakan ulang stripe-hl-line
wajah 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-buffer
sumbernya, saya melihat bahwa hl-line
wajahnya dipetakan kembali ke stripe-hl-line
muka. Jadi kita perlu melakukan pemetaan ulang setelah terjadi pemetaan ulang (yang ada dalam stripe-listify-buffer
definisi fungsi).
Jadi kami melakukan pemetaan ulang dengan memberi saran stripe-listify-buffer
menggunakan 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-attribute
untuk mengatur wajah berdasarkan kegelapan latar belakang.