Mit:
(when window-system
(set-face-background 'hl-line "light yellow")
(global-hl-line-mode 1))
Aktuelle Zeile durch gelben Hintergrund hervorgehoben, aber wenn Text Hintergrundeigenschaften hat, wird er auch überschrieben (wie Diff-Modus, Regenbogen-Modus).
Ist es möglich, den Hintergrund nur für Teile festzulegen, die keine geeigneten Eigenschaften haben?
UPDATE Ich beginne zu experimentieren, scheint, dass Punktierung nicht mit dem Hintergrund in Konflikt steht:
(set-face-stipple 'hl-line '(4 4 "\x01\x00\x00\x00"))
(set-face-attribute 'hl-line nil :inherit nil)
Aber Tupfen beschädigen leider das Aussehen des Textes ...
elisp
syntax-highlighting
hl-line-mode
Gavenkoa
quelle
quelle
(when (memq NAME-OF-FACE (mapcar (function (lambda (ovr) (overlay-get ovr 'face))) (overlays-at (point)))) (remove-overlays BEGINNING-POINT ENDING-POINT 'face hl-line))
Antworten:
Das Problem ist, dass manchmal die Texteigenschaft
face
zum Hervorheben verwendet wird undhl-line-mode
eine Überlagerung verwendet wird. Und Überlagerungen werden immer "über" derface
Hervorhebung von Texteigenschaften angezeigt .diff-mode
Verwendet beispielsweise die Texteigenschaft, keine Überlagerung. In solchen Fällen haben Sie kein Glück.Für die Hervorhebung, die durch eine Überlagerung erzeugt wird, können Sie einfach die Überlagerungspriorität der hl-Linien-Überlagerung verringern: entweder
hl-line-overlay
oderglobal-hl-line-overlay
, sodass diese Überlagerung "unter" der anderen Überlagerungshervorhebung zu liegen scheint.Wenn Sie die Bibliothek verwenden
hl-line+.el
, können Sie mit der Optionhl-line-overlay-priority
die Überlagerungspriorität festlegen. Siehe auch Emacs-Wiki-Seite Aktuelle Zeile markieren . (Das Ändern der Überlagerungspriorität hat jedoch keine Auswirkung, wenn die andere Hervorhebung nicht aus einer Überlagerung stammt.)quelle
hl-line-overlay
Eigenschaft zu? Es erscheint zB nicht incustomize-variable
.hl-line+.el
Sie einfach die Option anhl-line-overlay-priority
. Andernfalls können Sie dies nicht (außer durch Neudefinition oder Beratung der vorab bereitgestellten Funktionen). Das ist der Punkt, an dem diese Benutzeroption bereitgestellt wird.Ich beende mit Teillösung - nur am Zeilenende hervorheben:
quelle
Stolperte über diese Frage, als versucht wurde, den
hl-line
Hintergrund nicht zu überschreiben (obwohl es sich in diesem Fall um Einrückungsrichtlinien handelte):Ich habe mich dazu entschlossen, die Hervorhebungslinie nach dem Einzug zu zeichnen :
Ersetzen
(+ (line-beginning-position 1) (current-indentation))
durch(point)
funktioniert auch (beginnend am Cursor).quelle