Distinguir entre líneas en blanco al final del búfer y la parte inferior de la ventana?

7

P: ¿cómo puedo obtener un indicador visual que distinga entre el final del búfer y la parte inferior de la ventana?

Caso de uso: tengo un búfer con algunas líneas en blanco en la parte inferior. Sin embargo, la parte inferior de la ventana más allá de las líneas en blanco también está en blanco. Me gustaría poder decir, visualmente, dónde termina el búfer / se detienen las líneas en blanco.

Vim hace esto con caracteres que no son de texto en la parte inferior de una ventana (es decir, las tildes) para indicar que no hay nada en el búfer (como líneas en blanco) en ese espacio, como en la siguiente captura de pantalla:

Vim tildes

¿Cómo se obtendría el análogo de esta función Vim en Emacs?

EDITAR: la respuesta de @ glucas parece correcta, pero me encantaría ver una respuesta que no use el margen, ya que configuré la mía en cero para ahorrar espacio en la pantalla de una pequeña computadora portátil.

Dan
fuente
¿Qué tal usar el empty-linecomponente del fringe-indicator-listpara indicar dónde comienza el final del búfer? Por ejemplo, (setq fringe-indicator-alist '((empty-line . empty-line))) agregue componentes adicionales a la lista según lo desee. Este método, sin embargo, requiere una franja para ser visible. Ver también: reddit.com/r/emacs/comments/2kdztw/…
lawlist

Respuestas:

7

Puede personalizar indicate-empty-linespara habilitar un marcador marginal en las líneas después del final del archivo, o llamar toggle-indicate-empty-linespara activarlo y desactivarlo de forma interactiva.

Hay un paquete en MELPA que reemplaza el indicador de franja predeterminado con un ~ para una apariencia más cercana a lo que obtienes con vi. Ver vi-tilde-fringe.

Actualizado

Un enfoque alternativo sería utilizar el modo de espacios en blanco para hacer visibles los saltos de línea. Intenta whitespace-newline-mode, posiblemente retocando la whitespace-newlinecara. Visualmente, este enfoque está más ocupado que lo que hace vi ya que está marcando todas las líneas en el búfer, excepto las líneas vacías después del contenido, pero logra un resultado similar. (También es posible configurar el modo de espacio en blanco o un modo derivado personalizado para resaltar solo las líneas vacías al final del contenido del búfer).

glucas
fuente
+1 ya que probablemente esta sea la respuesta. Sin embargo, no uso el margen, así que dejaré la pregunta abierta un poco más para ver si alguien tiene una solución que no sea complementaria.
Dan
4

He escrito un paquete, char-font-lock , que (entre otros) resalta las líneas vacías al final de un búfer.

También resalta la última línea (en caso de que no termine con una nueva línea), el espacio al final de las líneas, los caracteres de tabulación y los caracteres que no son ascii. Puede elegir cuál de las cosas le gustaría resaltar.

Por ejemplo: ingrese la descripción de la imagen aquí

Lindydancer
fuente
1
Hmm, eso no suena realmente relacionado ya que la pregunta es sobre poner las cosas en la ventana donde no hay líneas ...
wasamasa
1
No, la pregunta era "¿cómo puedo obtener un indicador visual que distinga entre el final del búfer y la parte inferior de la ventana?" Mi paquete hace esto resaltando líneas vacías al final de un búfer. Si no obtiene ningún resaltado, entonces sabe que el archivo está formateado correctamente con una nueva línea al final de la última lista no vacía. Es cierto que no resalta cosas como lo hace vi, pero eso no era parte de la pregunta.
Lindydancer
Creo que el OP solicitó que se indicaran líneas de pantalla vacías . Sin embargo, según su captura de pantalla, su paquete parece resaltar líneas físicas vacías .
@lunaryorn, lo leí como si al OP no le gustara el hecho de que las líneas vacías al final de un búfer no son visibles. ("Me gustaría poder decir, visualmente, dónde termina el búfer / se detienen las líneas en blanco")
Lindydancer
1
De acuerdo, el punto de esta pregunta parece ser cómo saber dónde termina el contenido del búfer. Resaltar las últimas líneas de ese contenido parece un enfoque tan válido como resaltar el espacio después del contenido.
glucas
3

Alguien escribió un paquete que gestiona una superposición que abarca el área después del final del archivo:

https://github.com/jmickelin/vim-empty-lines-mode

Sin embargo, tenga en cuenta que, si bien esta solución se comporta más correctamente y funciona también en terminales, necesariamente será menos eficiente y tendrá más errores que la indicadora de franjas.

wasamasa
fuente
Solo una nota: este modo menor hace lo que estaba buscando hacer, pero los usuarios deben saber que actualiza las superposiciones al final del búfer después de cada comando, por lo que puede ser un poco más pesado de lo que uno quisiera.
Dan
D'oh ... y resulta que tiene errores y no parece jugar bien con el estrechamiento.
Dan
Oh no, la respuesta no fue aceptada ._.
wasamasa
Sí, lo siento, es un buen hallazgo, pero voy a esperar por ahora por las razones citadas en mis comentarios hasta que tenga la oportunidad de probarlo más rigurosamente.
Dan