La documentación de Face Attributes sugiere que agregar un line-width
de -n
al atributo box
dibuje una línea de ancho n cuyas partes superior e inferior ocupen el espacio del texto subyacente, evitando así cualquier aumento en la altura de los caracteres.
Así que agregué la siguiente línea a mi archivo de tema personal para los candidatos de isearch ( lazy-highlight
):
`(lazy-highlight ((,class (:box (:line-width -1 :color ,search) :background ,bg1 :foreground ,fg1))))
Esto funciona bien teniendo en cuenta la altura, sin embargo, el ancho del texto cambia como se ve en el gif a continuación:
¿Hay alguna forma de hacer que la parte izquierda y derecha del cuadro también ocupe el texto subyacente para que no haya cambios en el ancho del texto?
Respuestas:
Mi caso de uso para este SE es tener un cuadro alrededor de la
region
cara, por lo que la región resaltada entransient-mark-mode
es visible incluso cuando la región se superpone con algunas otras superposiciones:Por ejemplo, con
iedit-mode
:Cada vez que el texto se resalta con "región encuadrada" puedo ver el ancho del texto descrito parpadeando.
El truco sucio que pude encontrar para eliminar este parpadeo es agregar un cuadro con el color de fondo a la
default
cara. Desafortunadamente, este truco introduciría una serie de problemas en otros lugares, como un espacio adicional entre líneas o la representación incorrecta de los widgets de botones (por ejemplo, en los buffers de personalización).La solución final se da en el siguiente informe de error (vea el parche adjunto al final del hilo):
Texto que mueve el cursor en movimiento con el cuadro alrededor del texto habilitado
Esta solución afecta a los componentes internos de Emacs y requiere una compilación personalizada de Emacs después de aplicar el parche.
Voy a probar la solución posterior pronto. Sin embargo, el problema es que mi
init.el
sería incompatible con las compilaciones de Emacs de stock y tendrá que usar alguna lógica adicional para encontrar si se aplica el parche anterior.Con suerte, después de algunas pruebas, este parche sería aceptado en la fuente de Emacs ...
2019-01-21 seguimiento:
Parece que el parche mencionado anteriormente no es compatible con el último código fuente de Emacs. Tuve que hacer algunos cambios para que funcione con la rama maestra actual de Emacs git. En lugar de crear otro parche, hice un tenedor en github y creé una rama aguas arriba con el parche de la caja de la cara:
cara-caja-parche
Construir Emacs desde esta rama es lo mismo que las compilaciones de Emacs.
El siguiente es el
init.el
código que debe ser compatible con las versiones Emacs parcheadas y vainilla:Solo se prueba en Linux con GTK +
fuente
eabs (s->face->box_line_width)
amax (s->face->box_line_width, 0)
y ningún otro cambio.