Saya ingin menggunakan set-face-attribute
untuk memilih satu dari dua warna untuk latar depan tergantung pada apakah latar belakang tema saat ini terang atau gelap.
Perilaku yang diharapkan adalah bahwa latar depan berubah secara otomatis jika saya beralih dari tema latar belakang terang ke tema latar belakang gelap atau sebaliknya.
Berikut ini adalah use case:
Saya menyesuaikan wajah stripe-hl-line
sebagai berikut:
(set-face-attribute 'stripe-hl-line nil
:overline "gray"
:underline "gray"
:foreground "dodger blue")
Tapi saya ingin mengubah latar depan berdasarkan hanya jika temanya terang atau gelap. Dengan begitu saya tidak perlu khawatir tentang menyesuaikan wajah itu di setiap tema.
color
perpustakaan di sini. Anda mungkin bisa mendapatkan nilai rgb atau hex dari latar belakang, menentukan beberapa nilai ambang untuk "gelap", dan mengatur latar depan yang sesuai.Jawaban:
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 sensitifdefface
. 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 paketstripe-buffer
.Berikut langkah-langkahnya:
Langkah 1. Tentukan milik Anda
defface
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 ulangstripe-hl-line
wajahmy/stripe-hl-line
.Langkah 3. Lakukan pemetaan ulang di lokasi yang sesuai
Dari
stripe-buffer
sumbernya, saya melihat bahwahl-line
wajahnya dipetakan kembali kestripe-hl-line
muka. Jadi kita perlu melakukan pemetaan ulang setelah terjadi pemetaan ulang (yang ada dalamstripe-listify-buffer
definisi fungsi).Jadi kami melakukan pemetaan ulang dengan memberi saran
stripe-listify-buffer
menggunakan kombinator.:after
advice
Selesai!
Yang mengatakan, itu akan luar biasa untuk secara langsung menggunakan sesuatu seperti
set-face-attribute
untuk mengatur wajah berdasarkan kegelapan latar belakang.sumber