Mein Anwendungsfall für diese SE besteht darin, ein Kästchen um das region
Gesicht zu haben, sodass der hervorgehobene Bereich in transient-mark-mode
sichtbar ist, auch wenn sich der Bereich mit einigen anderen Überlagerungen überlappt:
(set-face-attribute 'region nil
:box '(:line-width -1
:color "gtk_selection_bg_color"
:style nil))
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:
(unwind-protect
(condition-case ex
(set-face-attribute
'region nil
:box '(:line-width (-1 . -1)
:color "gtk_selection_bg_color"
:style nil))
('error
(set-face-attribute
'region nil
:box '(:line-width -1
:color "gtk_selection_bg_color"
:style nil)))))
Es wird nur unter Linux mit GTK + getestet