Avec:
(when window-system
(set-face-background 'hl-line "light yellow")
(global-hl-line-mode 1))
ligne actuelle surlignée par un arrière-plan jaune, mais si le texte a des propriétés d'arrière-plan, il est également écrasé (comme le mode diff, le mode arc-en-ciel).
Est-il possible de définir l'arrière-plan uniquement pour les pièces qui n'ont pas de propriétés appropriées?
MISE À JOUR Je commence à expérimenter, il semble que le pointillé ne soit pas en conflit avec le fond:
(set-face-stipple 'hl-line '(4 4 "\x01\x00\x00\x00"))
(set-face-attribute 'hl-line nil :inherit nil)
Mais le pointillé endommage malheureusement l'apparence du texte ...
elisp
syntax-highlighting
hl-line-mode
gavenkoa
la source
la source
(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))
Réponses:
Le problème est que la propriété text est parfois
face
utilisée pour la mise en surbrillance ethl-line-mode
utilise une superposition. Et les superpositions apparaissent toujours "au-dessus de" laface
mise en évidence des propriétés de texte .diff-mode
, par exemple, utilise la propriété text, pas une superposition. Donc, pour des cas comme celui-ci, vous n'avez pas de chance.Mais pour la mise en surbrillance produite par une superposition, vous pouvez simplement réduire la priorité de superposition de la superposition de ligne hl: soit
hl-line-overlay
ouglobal-hl-line-overlay
, de sorte que cette superposition semble être "au-dessous" de l'autre superposition de superposition.Si vous utilisez la bibliothèque,
hl-line+.el
vous pouvez utiliser l'optionhl-line-overlay-priority
pour définir la priorité de superposition. Voir aussi la page Wiki Emacs Mettre en surbrillance la ligne actuelle . (Mais encore une fois, la modification de la priorité de superposition n'a aucun effet si l'autre surbrillance ne provient pas d'une superposition.)la source
hl-line-overlay
propriété? Par exemple, il n'apparaît pas danscustomize-variable
.hl-line+.el
vous n'avez qu'à personnaliser l'optionhl-line-overlay-priority
. Sinon, vous ne pouvez pas (sauf en redéfinissant ou en conseillant les fonctions pré-fournies). C'est le point de fournir cette option utilisateur.Je termine avec une solution partielle - surlignez uniquement à la fin de la ligne:
la source
Je suis tombé sur cette question en essayant de ne pas faire de la
hl-line
substitution l'arrière-plan (bien qu'il s'agissait de guides d'indentation dans ce cas):Je me suis installé là-dessus, qui commence à dessiner la ligne de surbrillance après l'indentation:
Remplacer
(+ (line-beginning-position 1) (current-indentation))
par des(point)
œuvres aussi (en commençant par le curseur).la source