Je voudrais utiliser set-face-attribute
pour choisir l'une des deux couleurs pour le premier plan selon que l'arrière-plan du thème actuel est clair ou sombre.
Le comportement attendu est que le premier plan change automatiquement si je passe d'un thème d'arrière-plan clair à un thème d'arrière-plan sombre ou vice-versa.
Voici un cas d'utilisation:
Je personnalise le visage de stripe-hl-line
comme suit:
(set-face-attribute 'stripe-hl-line nil
:overline "gray"
:underline "gray"
:foreground "dodger blue")
Mais je voudrais changer le premier plan en fonction du fait que le thème soit clair ou sombre. De cette façon, je n'ai pas à me soucier de personnaliser ce visage dans chaque thème.
color
bibliothèque ici. Vous pouvez probablement obtenir la valeur RVB ou hexadécimale de la face d'arrière-plan, déterminer une valeur de seuil pour "sombre" et définir le premier plan en conséquence.Réponses:
Grâce à @MadhavanKumar, je me suis concentré sur la dérivation d'une solution basée sur
defface
.J'ai réalisé que je ne peux pas remplacer un existant
defface
mais je peux toujours créer ma propre couleur de fond sensibledefface
. Ensuite, la seule question était de savoir comment utiliser ma définition personnalisée au lieu de l'original.Je vais utiliser le même exemple de remplacement du
stripe-hl-line
visage pour parcourir la solution. Cette face est définie dans le packagestripe-buffer
.Voici les étapes:
Étape 1. Définissez le vôtre
defface
Il en résultera que la couleur de premier plan du
my/stripe-hl-line
visage sera bleu clair pour les arrière-plans sombres et rouge pour les arrière-plans clairs.Étape 2. Créez une fonction pour remapper le visage
La
face-remap-add-relative
fonction est utilisée pour remapper un visage existant sur un nouveau visage. Dans ce cas, je remappe lestripe-hl-line
visagemy/stripe-hl-line
.Étape 3. Faites le remappage à l'emplacement approprié
De la
stripe-buffer
source, je vois que lehl-line
visage est remappé enstripe-hl-line
face. Nous devons donc faire notre remappage après que le remappage se produise (ce qui est dans lastripe-listify-buffer
définition de la fonction).Nous faisons donc notre remappage en conseillant d'
stripe-listify-buffer
utiliser le combinateur.:after
advice
Terminé!
Cela dit, il aurait été génial d'utiliser directement quelque chose comme
set-face-attribute
pour définir des visages en fonction de l'obscurité de l'arrière-plan.la source