Jak ustawić kolory frędzli na dowolny kolor tła?

12

Używam trybu wolnego od zakłóceń, który wykorzystuje gigantyczne prążki do centrowania nazwanego bufora bzg-big-fringe-mode.

Problem w tym, że te frędzle często mają inny kolor niż tło, co daje brzydki efekt wizualny (patrz zdjęcie na końcu).

Nie mam problemu z ręcznym ustawieniem tego, ustawiając kolor frędzli na kolor tła, tak jak:

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

Problem polega na tym, że przy zmianie motywów kolory prążków pozostają szare, chociaż nie ma to sensu w przypadku nowego motywu.

Czy istnieje sposób programowego ustawienia grzywki na kolor tła?

Chyba potrzebuję dwóch rzeczy:

  1. Możliwość ustawienia domyślnego koloru tła na marginesie.
  2. Funkcja uzależniona od zmiany motywów i spełniająca powyższe 1.

Myślę, że powinienem być w stanie zrobić 2), chociaż nie mam umiejętności emacsa, ale jak mam to zrobić 1)?

A może z jakiegoś powodu to zły pomysł? Jeśli tak, jak wyglądałoby lepsze podejście?

wprowadź opis zdjęcia tutaj

The Unfun Cat
źródło

Odpowiedzi:

11

Oficjalnym sposobem byłoby dostosowanie danego motywu, aby twarz z grzywką wyglądała tak samo jak twarz z tłem. Spec twarzy wzdłuż linii (fringe :inherit default)powinien załatwić sprawę.

Możesz też zmodyfikować go w locie za pomocą fragmentu kodu:

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

Jedynym problemem, jaki pozostał, byłoby zastosowanie go przy każdej zmianie motywu. Nie mogę znaleźć żadnego haka, który wyglądałby tak, jakby był w stanie wykonać pracę, która jest trochę smutna, defadvicenie wydaje się również, aby działała poprawnie. Przynajmniej nie w Emacsie 24.4

wasamasa
źródło
Dzięki. Poczekam do poniedziałku z akceptacją na wypadek, gdyby ktoś miał rozwiązanie.
The Unfun Cat,
1
Czy istnieje powód, aby nie używać face-backgroundi face-foregroundw tym fragmencie kodu?
Constantine,
Nie ma, edytowane.
wasamasa,
6

Możesz ustawić kolor frędzli na zero, w takim przypadku nie musisz się martwić o zmiany motywu. W mojej konfiguracji mam następujące elementy:

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

A grzywka po prostu znika .... :)

pandita
źródło
0

Jakoś 'fringeprzestał dla mnie działać, a teraz to:

(set-face-attribute 'linum nil :background "gray19")
yPhil
źródło