Dank @MadhavanKumar habe ich mich darauf konzentriert, eine Lösung basierend auf abzuleiten defface
.
Mir wurde klar, dass ich ein vorhandenes nicht überschreiben defface
kann, aber ich kann immer meinen eigenen Hintergrund farbempfindlich erstellen defface
. Dann war die einzige Frage, wie ich mein benutzerdefiniertes Defface anstelle des Originals verwenden sollte.
Ich werde das gleiche Beispiel für das Überschreiben des stripe-hl-line
Gesichts verwenden, um durch die Lösung zu gehen. Dieses Gesicht ist im Paket definiert stripe-buffer
.
Hier sind die Schritte:
Schritt 1. Definieren Sie Ihre eigenen 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)
Dies führt dazu, dass die Vordergrundfarbe des my/stripe-hl-line
Gesichts für dunkle Hintergründe dodgerblau und für helle Hintergründe rot ist .
Schritt 2. Erstellen Sie eine Funktion, um das Gesicht neu zuzuordnen
Die face-remap-add-relative
Funktion wird verwendet, um ein vorhandenes Gesicht einem neuen Gesicht zuzuordnen. In diesem Fall ordne ich das stripe-hl-line
Gesicht neu zu my/stripe-hl-line
.
(defun my/stripe-hl-line-face-remap ()
(face-remap-add-relative 'stripe-hl-line 'my/stripe-hl-line))
Schritt 3. Führen Sie die Neuzuordnung an der entsprechenden Stelle durch
Aus der stripe-buffer
Quelle sehe ich, dass das hl-line
Gesicht dem Gesicht neu zugeordnet wird stripe-hl-line
. Wir müssen also unsere Neuzuordnung durchführen, nachdem diese Neuzuordnung erfolgt ist (was in der stripe-listify-buffer
Funktionsdefinition enthalten ist).
Deshalb machen wir unsere Neuzuordnung, indem wir die stripe-listify-buffer
Verwendung des Kombinators empfehlen .:after
advice
(advice-add 'stripe-listify-buffer :after #'my/stripe-hl-line-face-remap)
Getan!
Trotzdem wäre es fantastisch gewesen, so etwas direkt zu verwenden set-face-attribute
, um Gesichter basierend auf der Dunkelheit im Hintergrund festzulegen.