¿Cambiar el color de fondo de un bloque específico?

7

Me gustaría comenzar un color de fondo diferente comenzando desde una función hasta el final.

Me gusta esto:

ingrese la descripción de la imagen aquí

Soy consciente de que puede definir los colores de fondo de algunas caras como funciones y nombres de funciones como foobar. Pero solo afecta el color de fondo de las palabras functiony foobar. Me gustaría cambiar el color de fondo de toda la línea donde se encuentran las estadísticas de la función y terminar con ella.

¿Por qué preguntarías? Me resultaría mucho más fácil distinguir qué partes pertenecen a una función.

Entonces, me pregunto si hay una manera práctica de administrar esto en Emacs, ¿hay un paquete Lisp para lograr algo así?

ReneFroger
fuente
Una superposición con una cara sería lo más fácil en mi opinión, similar a resaltar una región en particular, puede elegir el color y la prioridad. Por ejemplo, echar un vistazo a las funciones isearch-highlightyisearch-dehighlight
lawlist

Respuestas:

4
  1. Puede usar el resaltado de la biblioteca para resaltar una región utilizando una superposición o propiedades de texto, en particular, la propiedad face. Para resaltar el fondo, use una cara que use atributo backgroundpero no foreground.

    Si usa la propiedad de texto, facetambién puede copiar propiedades de un texto y pegarlas en otro texto. Entonces, si su definición cambia y se hace más grande, puede copiar parte de la parte resaltada y luego pegar su propiedad faceen la parte no resaltada.

    También puede usar las funciones definidas en la biblioteca para hacer automáticamente (por ejemplo, como un gancho de cambio de búfer o periódicamente, en un temporizador) extender el resaltado de un defun para acomodar los cambios en él.

    Si usa una superposición, puede usar los comandos de borrado de resaltado (por ejemplo, hlt-eraser) para eliminar solo la última cara con la que resaltó. Arrastre el mouse sobre el texto donde desea eliminar el resaltado.

  2. Podrías usar el bloqueo de fuente ordinario. Agregue un patrón font-lock-keywordsque use una función que reconozca el inicio y el final de su definición. Consulte el manual de Elisp, las palabras clave de personalización del nodo, así como el nodo principal, el modo de bloqueo de fuente y sus otros elementos secundarios.


ACTUALIZAR después de tu comentario

Creo que tal vez esté preguntando sobre resaltar no la región, sino las líneas tocadas por la región, y extender el resaltado más allá del final del texto (incluso más allá de los espacios en blanco). ¿Es asi? Si es así, intente esto:

(defun hlt-highlight-lines (start end face msgp)
  "Highlight full lines in region, window-wide."
  (interactive (list (save-excursion (goto-char (region-beginning))
                                     (line-beginning-position))
                     (save-excursion (goto-char (region-end))
                                     (line-beginning-position 2))
                     nil
                     t))
  (hlt-highlight-region start end face msgp))
Dibujó
fuente
Drew, gracias por tu respuesta. Me tomó un tiempo responder a su respuesta porque quería probar estas aplicaciones. Sin embargo, la highlightbiblioteca no funcionó para mí. Solo aplica un fondo sobre dónde está el texto. Cuando finaliza el texto, se detiene con el color de fondo. ¿Cualquier sugerencia?
ReneFroger
1. Creo que tal vez estás preguntando acerca de extender el resaltado más allá del final del texto (incluso más allá de cualquier espacio en blanco). ¿Es asi? Si es así, pruebe el comando que agregué anteriormente. 2. ¿También probaste la respuesta de bloqueo de fuente? Eso también debería funcionar.
Dibujó el
En cualquier caso, agregué ese comando simple al highlight.el. Si te ayuda, bien.
Dibujó el
Tenga en cuenta que esto funciona siempre que tenga una nueva línea después de la última línea que desea resaltar.
zck