shell – ¿Qué es exactamente el búfer scrollback y scrollback?

Pregunta:

¿Qué son "scrollback" y "scrollback buffer" en programas como bash y screen , y cómo se relacionan con tty, los programas que se están ejecutando y stdin / stdout / stderr?

Aquí está la única definición de "scrollback" que encontré hasta ahora (en la wiki de archlinux ):

Scrollback es una función que se implementa en una consola de texto para permitir al usuario volver a ver las líneas de texto que se han desplazado fuera de la pantalla. Esto es posible gracias a un búfer creado solo para este propósito entre el adaptador de video y el dispositivo de visualización; el búfer de retroceso.

Pero, esto me plantea más preguntas:

  • ¿Significa "función" como en "subrutina" o como en "función"?
  • ¿Existe un estándar Unix o API para este búfer de desplazamiento hacia atrás?
  • En una "pila" de programas, como vim lanzado en screen lanzado en bash lanzado en ssh lanzado en un emulador de terminal, ¿cuál de estos programas está controlando el búfer de retroceso?

También utilicé la screen para volcar el desplazamiento hacia atrás en un archivo . Este archivo tenía mucho espacio en blanco en la parte superior, y parece que la "vista" que me muestra mi emulador de terminal son simplemente las pocas líneas inferiores del búfer.

  • ¿Es por eso que un programa como vim puede "borrar" toda la ventana de mi terminal, porque obtiene acceso temporal al búfer de desplazamiento hacia atrás del shell padre?
  • ¿O vim usa su propio búfer de retroceso que de alguna manera se superpone en la parte superior del búfer de retroceso principal?

Respuesta:

Esta es una pregunta un poco complicada. Intentaré responder a sus preguntas una a una, pero primero una descripción general:

El búfer de desplazamiento hacia atrás es implementado por su emulador de terminal ( xterm , Konsole, GNOME Terminal). Contiene todo el texto que se ha mostrado en la pantalla, incluida la salida estándar y el error estándar de cada programa que ejecuta en el terminal. Es una funcionalidad completamente terminal que le permite ver la salida anterior que puede haber pasado por usted o para verificar lo que se dijo anteriormente.

Puede pensar en el búfer de retroceso como una página larga de salida registrada y en la ventana de su terminal como una ventana que mira solo una parte de ella en un momento dado. Si no se ha desplazado hacia arriba, lo que está viendo es el final del búfer. Por lo general, habrá un límite configurado en el terminal de cuántas líneas realiza un seguimiento antes de que comience a olvidar.

Suponga que el límite es de 1000 líneas. Para las primeras mil líneas de salida en su sesión, simplemente agregue al búfer y puede desplazarse hacia arriba hasta el inicio de su sesión. Tan pronto como obtenga la línea 1001 de salida, la primera línea en el búfer se borrará, y lo más atrás que pueda desplazarse será la segunda línea de su sesión. El búfer siempre contendrá las mil líneas de salida más recientes que se mostraron en su pantalla, y puede desplazarse hacia arriba para ver la salida anterior en cualquier momento.

  • ¿Significa "función" como en "subrutina" o como en "función"?

    Esta es "función" como en "característica". El emulador de terminal tiene una funcionalidad que registra lo que está en la pantalla y le permite desplazarse hacia arriba y hacia abajo. Las consolas de algunos sistemas también admiten scrollback limitado.

    Se vuelve un poco más complicado una vez que agregas la screen a la mezcla. En ese punto, la screen está emulando el búfer de retroceso en sí mismo; es por eso que puede copiar y pegar desde él dentro del programa, en lugar de solo con (digamos) X selección.

  • ¿Existe un estándar Unix o API para este búfer de desplazamiento hacia atrás?

    La respuesta corta es no, solo la proporciona su terminal. La respuesta más larga la encontraremos en la parte inferior.

  • En una "pila" de programas, como vim lanzado en pantalla lanzado en bash lanzado en ssh lanzado en un emulador de terminal, ¿cuál de estos programas está controlando el búfer de retroceso?

    En el caso de vim y bash , no lo controlan en absoluto (advertencia, nuevamente, a continuación). Su terminal proporciona el búfer de retroceso para todos los programas dentro de él, comenzando desde su shell. screen , como se mencionó anteriormente, simula el retroceso en sí.

  • También utilicé la pantalla para volcar el desplazamiento hacia atrás en un archivo. Este archivo tenía mucho espacio en blanco en la parte superior, y parece que la "vista" que me muestra mi emulador de terminal son simplemente las pocas líneas inferiores del búfer.

    Este es el búfer interno de la screen . Lo que está en su pantalla en ese momento generalmente será lo que está en la parte inferior del búfer.

  • ¿Es por eso que un programa como vim puede "borrar" toda la ventana de mi terminal, porque obtiene acceso temporal al búfer de desplazamiento hacia atrás del shell padre?

    Aquí hay una parte en la que se vuelve mucho más complejo. Prácticamente todos los emuladores de terminal basados ​​en X están simulando un VT100, y una de las cosas que hacen allí es admitir un "búfer de pantalla alternativo" . A diferencia del búfer ordinario que se utiliza para la mayoría de las interacciones de terminales con salida secuencial, el búfer de pantalla alternativo es del tamaño exacto de su terminal. No se puede desplazar hacia arriba o hacia abajo porque no es más grande que lo que se muestra.

    La idea es permitir que una aplicación de pantalla completa haga lo que debe hacer sin que nada que ya tenga en la pantalla interfiera con ella, y luego permitirle volver exactamente a la pantalla que tenía antes. Es por eso que cuando ingresa vim , llena toda la pantalla, pero cuando lo deja, la salida de terminal que tenía de antemano, todas sus indicaciones anteriores y la salida de comando, vuelve de nuevo. vim cambia al búfer de pantalla alternativo cuando se inicia y vuelve al búfer normal cuando sale.

    Este búfer alternativo es una de las advertencias que mencioné anteriormente. A veces, el programa realmente tiene la capacidad de decirle al terminal qué hacer con el búfer.

    screen es otro programa que hace esto, por lo que la funcionalidad de desplazamiento de su terminal generalmente no funciona mientras está en una sesión de screen : screen emula el búfer de desplazamiento hacia atrás, por lo que debe usar su funcionalidad interna para llegar a la salida anterior.

  • ¿O vim usa su propio búfer de retroceso que de alguna manera se superpone en la parte superior del búfer de retroceso principal?

    La mayoría de las veces respondí esto en la pregunta anterior, pero la respuesta corta a esta pregunta en particular es que vim obtiene su propio búfer temporal, sin retroceso, desde la terminal, y luego realiza todo su propio desplazamiento de sus documentos internamente.

Todas esas excepciones que mencioné:

Se vuelve un poco más complicado. Dije que las aplicaciones no tienen ningún control sobre el retroceso y que es proporcionado completamente por la terminal. En algunos casos, con algunos terminales, la interacción es limitada. El programa imprime ciertas secuencias de escape (si alguna vez ha usado el color de la terminal manualmente en el pasado, habrá visto cómo se ven) y la terminal puede interpretarlas y cambiar su comportamiento, o incluso enviar información al programa. Las secuencias de escape disponibles se describen en la base de datos termcap (capacidad terminal) .

Algunos terminales admiten consultas y manipulación limitadas del búfer de retroceso. Muchas derivadas de xterm tienen secuencias de escape que dirigen al terminal a desplazarse por su vista. Muchos terminales también admiten especificar un área particular de la pantalla para desplazarse, dejando el resto intacto. Eso tiende a romper el búfer de retroceso.

Casi todos los terminales admiten secuencias para mover el cursor por la pantalla, que es la forma en que la biblioteca ncurses puede actualizar todas las diferentes partes de la pantalla. Puede ver las secuencias de VT100 compatibles con xterm . La forma en que estos interactúan con el búfer de desplazamiento hacia atrás puede ser un poco extraña a veces, particularmente en el caso de algo que implementa su propio comportamiento de desplazamiento, como el comando less . Puede terminar con líneas duplicadas o faltantes en su desplazamiento hacia atrás porque redibujó less texto en la parte superior de una manera que su terminal no esperaba. Otros programas a veces terminan llenando su búfer con múltiples copias de su pantalla completa.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım