Wie stelle ich die Randfarben auf die Hintergrundfarbe ein?

12

Ich verwende einen ablenkungsfreien Modus, der riesige Ränder verwendet, um den aufgerufenen Puffer zu zentrieren bzg-big-fringe-mode.

Das Problem ist, dass diese Ränder oft eine andere Farbe haben als der Hintergrund, was einen unschönen visuellen Effekt ergibt (siehe das Bild am Ende).

Ich habe kein Problem damit, dies manuell zu beheben, indem ich die Randfarbe wie folgt auf die Hintergrundfarbe setze:

(set-face-attribute 'fringe nil :background "#3F3F3F" :foreground "#3F3F3F")

Problem ist, dass bei einem Themenwechsel die Randfarben grau bleiben, obwohl dies für das neue Thema keinen Sinn ergibt.

Gibt es eine Möglichkeit, den Rand programmgesteuert auf die Hintergrundfarbe einzustellen?

Ich brauche wohl zwei Dinge:

  1. Die Möglichkeit, die Hintergrundfarbe für Ränder auf die Standardhintergrundfarbe festzulegen.
  2. Eine Funktion, die an wechselnde Themen gebunden ist und die 1. oben funktioniert.

Ich denke, ich sollte in der Lage sein, 2) obwohl ich keine Emacs-Fähigkeiten habe, aber wie mache ich 1)?

Oder ist das aus irgendeinem Grund eine schlechte Idee? Wenn ja, wie würde ein besserer Ansatz aussehen?

Bildbeschreibung hier eingeben

Die unfun Katze
quelle

Antworten:

11

Der offizielle Weg wäre, das betreffende Thema so anzupassen, dass das Randgesicht genauso aussieht wie das Hintergrundgesicht. Eine Gesichtsspezifikation nach dem Vorbild von (fringe :inherit default)sollte den Trick machen.

Alternativ können Sie es im laufenden Betrieb mit einem Code-Snippet ändern:

(defun my-tone-down-fringes ()
  (set-face-attribute 'fringe nil
                      :foreground (face-foreground 'default)
                      :background (face-background 'default)))

Das einzige Problem wäre, es bei jedem Themenwechsel anzuwenden. Ich kann keinen Haken finden, der so aussieht, als könnte er die Arbeit erledigen, was ein bisschen traurig ist und defadviceauch nicht richtig zu funktionieren scheint. Zumindest nicht in Emacs 24.4

Wasamasa
quelle
Vielen Dank. Ich werde bis Montag mit der Annahme warten, falls jdn eine Lösung hat.
The Unfun Cat
1
Gibt es einen Grund, face-backgroundund face-foregroundin diesem Code-Snippet nicht zu verwenden ?
Constantine
Es ist nicht bearbeitet.
Wasamasa
4

Sie können die Randfarbe auf Null setzen. In diesem Fall müssen Sie sich keine Gedanken über Themenänderungen machen. Ich habe folgendes in meiner Konfiguration:

(set-face-attribute 'fringe nil :background nil)

Und der Rand verschwindet einfach .... :)

Pandita
quelle
0

Irgendwie hat es 'fringeaufgehört, für mich zu arbeiten, und jetzt funktioniert Folgendes:

(set-face-attribute 'linum nil :background "gray19")
yPhil
quelle