Die Dokumentation von Face - Attribute legt nahe , dass das Hinzufügen eines line-width
der -n
auf dem Feld Attribut
Zeichnen Sie eine Linie mit der Breite n, deren oberer und unterer Teil den Raum des zugrunde liegenden Textes einnehmen, um eine Erhöhung der Zeichenhöhe zu vermeiden.
Daher habe ich meiner persönlichen Themendatei für Suchkandidaten ( lazy-highlight
) die folgende Zeile hinzugefügt :
`(lazy-highlight ((,class (:box (:line-width -1 :color ,search) :background ,bg1 :foreground ,fg1))))
Dies funktioniert in Anbetracht der Höhe einwandfrei. Die Textbreite ändert sich jedoch wie im folgenden GIF dargestellt:
Gibt es eine Möglichkeit, den linken und rechten Teil des Felds so zu gestalten, dass auch der zugrunde liegende Text belegt wird, sodass sich die Textbreite nicht ändert?
Antworten:
Mein Anwendungsfall für diese SE besteht darin, ein Kästchen um das
region
Gesicht zu haben, sodass der hervorgehobene Bereich intransient-mark-mode
sichtbar ist, auch wenn sich der Bereich mit einigen anderen Überlagerungen überlappt:Zum Beispiel mit
iedit-mode
:Jedes Mal, wenn der Text mit "Boxed Region" hervorgehoben wird, flackert die beschriebene Textbreite.
Der schmutzige Hack, den ich finden könnte, um dieses Flackern zu beseitigen, besteht darin, dem
default
Gesicht eine Box mit Hintergrundfarbe hinzuzufügen . Leider würde ein solcher Hack an anderen Stellen eine Reihe von Problemen verursachen, z. B. eine zusätzliche Lücke zwischen den Zeilen oder ein falsches Rendern von Schaltflächen-Widgets (z. B. in Anpassungspuffern).Die endgültige Lösung finden Sie im folgenden Fehlerbericht (siehe angehängten Patch am Ende des Threads):
Text flackert beweglicher Cursor mit aktiviertem Feld um Text
Diese Lösung wirkt sich auf Emacs-Interna aus und erfordert nach dem Anwenden des Patches eine benutzerdefinierte Emacs-Erstellung.
Ich werde bald die spätere Lösung ausprobieren. Das Problem ist jedoch, dass mein
init.el
Computer dann nicht mehr mit Standard-Emacs-Builds kompatibel ist und eine zusätzliche Logik verwenden muss, um festzustellen, ob der obige Patch angewendet wird.Hoffentlich wird dieser Patch nach einigen Tests in die Emacs-Quelle aufgenommen ...
Follow-up 2019-01-21 :
Es scheint, dass der oben genannte Patch nicht mit dem neuesten Emacs-Quellcode kompatibel ist. Ich musste einige Änderungen vornehmen, damit es mit dem aktuellen Emacs Git-Master-Zweig funktioniert. Anstatt einen weiteren Patch zu erstellen, habe ich eine Gabelung bei Github erstellt und einen Zweig von oben mit dem Face-Box-Patch erstellt:
Face-Box-Patch
Das Erstellen von Emacs aus diesem Zweig entspricht dem Erstellen von Emacs-Beständen.
Der folgende
init.el
Code sollte sowohl mit gepatchten als auch mit Vanilla Emacs-Versionen kompatibel sein:Es wird nur unter Linux mit GTK + getestet
quelle
eabs (s->face->box_line_width)
zumax (s->face->box_line_width, 0)
und keine anderen Änderungen zu ändern .