Gostaria de usar set-face-attribute
para escolher uma das duas cores para primeiro plano, dependendo se o plano de fundo do tema atual é claro ou escuro.
O comportamento esperado é que o primeiro plano mude automaticamente se eu alternar de um tema de plano de fundo claro para um tema de plano de fundo escuro ou vice-versa.
Aqui está um caso de uso:
Eu personalizo a face da stripe-hl-line
seguinte forma:
(set-face-attribute 'stripe-hl-line nil
:overline "gray"
:underline "gray"
:foreground "dodger blue")
Mas eu gostaria de mudar o primeiro plano com base apenas se o tema for claro ou escuro. Dessa forma, não preciso me preocupar em personalizar esse rosto em cada tema.
color
biblioteca aqui. Você provavelmente pode obter o valor rgb ou hexadecimal da face do plano de fundo, determinar algum valor limite para "escuro" e definir o primeiro plano de acordo.Respostas:
Graças a @MhavhavanKumar, concentrei-me em obter uma solução baseada em
defface
.Percebi que não posso substituir um existente,
defface
mas sempre posso criar minha própria cor de plano de fundo sensíveldefface
. Em seguida, a única questão era como usar meu deffface personalizado em vez do original.Usarei o mesmo exemplo de substituição do
stripe-hl-line
rosto para percorrer a solução. Essa cara é definida no pacotestripe-buffer
.Aqui estão os passos:
Etapa 1. Defina seu próprio
defface
Isso fará com que a cor do primeiro plano do
my/stripe-hl-line
rosto fique azul desobstruída para fundos escuros e vermelha para fundos claros.Etapa 2. Crie uma função para remapear a face
A
face-remap-add-relative
função é usada para remapear uma face existente para uma nova face. Neste caso, estou remapeando ostripe-hl-line
rosto paramy/stripe-hl-line
.Etapa 3. Faça o remapeamento no local apropriado
Da
stripe-buffer
fonte, vejo que ohl-line
rosto é remapeado para ostripe-hl-line
rosto. Então, precisamos fazer o remapeamento depois que o remapeamento acontecer (que está nastripe-listify-buffer
definição da função).Então, fazemos o remapeamento aconselhando o
stripe-listify-buffer
uso do combinador.:after
advice
Feito!
Dito isto, teria sido incrível usar diretamente algo como
set-face-attribute
definir rostos com base na escuridão do fundo.fonte