Las líneas de terminal OS X no entran en desplazamiento hacia atrás


12

Tengo un problema que surge cuando uso la Terminal de Mac OS X (TERM = xterm): a veces se pone en un estado donde las líneas que se desplazan desde la parte superior no se agregan al búfer de desplazamiento hacia atrás. No estoy usando screeno similar; Este es un shell bash simple dentro de una pestaña Terminal.

No hace esto inmediatamente después de abrir una nueva pestaña. Creo que es un efecto secundario de algo que he ejecutado en la pestaña del problema. Supongo que tiene algo que ver con la emulación xterm, posiblemente la región de desplazamiento.

Lo que no ha funcionado:

  • Restablecimiento parcial y completo a través del menú Shell
  • Corriendo reseten la pestaña

¿Hay alguna forma confiable de restablecer la Terminal y / o el estado xterm?

¿Alguien puede dar una explicación de lo que está sucediendo, incluso si la única solución es cerrar la pestaña y abrir una nueva?


¿Qué versión de Mac OS X estás ejecutando? ¿Tiene el búfer en algo menos que "ilimitado" y las líneas que le faltan son simplemente las líneas más antiguas que se cayeron al final del búfer?
Spiff

Mac OS X 10.6.2, y el búfer es de 10,000 líneas, sin embargo, las líneas perdidas son aquellas que se desplazan justo fuera de la pantalla. Si desplazo una página hacia arriba, esas líneas no están allí y, de hecho, a medida que las líneas se desplazan desde la parte superior, la página más reciente de desplazamiento hacia atrás nunca cambia.
Steve Madsen

Respuestas:


19

Esto significa que el terminal está utilizando el búfer de pantalla alternativo. Hay una pantalla principal, que se desplaza hacia el registro de desplazamiento hacia atrás, y una pantalla alternativa que no lo hace. Los programas de "pantalla completa" u "orientados a la pantalla" como top, less, emacs, vim y screen cambian el terminal a la pantalla alternativa de forma predeterminada.

Cada pantalla tiene su propio contenido y estado. Tener una pantalla alternativa permite que los programas se hagan cargo de toda la pantalla, luego restauren los contenidos anteriores cuando salgan, volviendo a la pantalla principal.

A partir de Mac OS X Lion 10.7, Terminal tiene un elemento de menú que puede usar para cambiar manualmente las pantallas:

Ver> Mostrar / Ocultar pantalla alternativa

Esto se proporciona principalmente para que pueda ver o copiar texto desde la pantalla alternativa después de que salga un programa de "pantalla completa". Xterm tiene un comando similar.

También puede usarlo para forzar manualmente a un programa a usar una pantalla en particular, para controlar si la salida va al registro de desplazamiento, por ejemplo. Sin embargo, si actualmente está utilizando un programa que cambia explícitamente a la pantalla alternativa, puede confundirlo u obtener resultados inesperados si lo fuerza a la pantalla principal mientras el programa se está ejecutando, así que use esto con precaución.

Dependiendo del programa, puede tener un argumento de línea de comando o algún otro medio para configurarlo para usar la pantalla principal. por ejemplo, less -X.

Algunas entradas terminfo están diseñados específicamente para suprimir el uso de la pantalla alterna, por ejemplo, xterm1. TERM=xterm1 emacsejecutará Emacs en la pantalla principal. No recomiendo usar de forma xterm1permanente, ya que deshabilita una serie de otras características útiles en comparación con el valor predeterminado xterm-256coloren Lion.

También puede cambiar de pantalla usando el tputcomando para emitir las secuencias de escape desde el interior de un shell o script. tput smcupcambia a la pantalla alternativa y tput rmcupvuelve a la pantalla principal.

Para ver qué programa se está ejecutando actualmente, mire el nombre del programa que se muestra en la ventana Terminal o el título de la pestaña, o mire la ventana Inspector ( Shell> Mostrar inspector ). El último proceso en la lista en el Inspector es (generalmente) el programa actual que usa la pantalla. Ese es el que necesitará configurar para usar la pantalla principal.


1
Esto suena como una respuesta muy prometedora. ¿Hay una explicación razonable de que un programa podría salir anormalmente, dejando activa la pantalla alternativa?
Steve Madsen

Si está de vuelta en el shell después de ejecutar un programa de "pantalla completa", sí, es una posibilidad, aunque los programas más populares, como los que enumeré, son confiables para limpiar después de ellos mismos. Si un programa de "pantalla completa" falla, puede dejar el terminal en la pantalla alternativa. Sin embargo, dijiste que intentaste Shell> Enviar restablecimiento completo , que incluye volver a la pantalla principal. Si vuelve a ocurrir, puede intentar usar este comando para volver a cambiar:tput rmcup
Chris Page

Otra posibilidad es que un programa salga del terminal con una "región de desplazamiento". Hay códigos para indicarle al terminal que solo desplace un subrango de líneas al desplazarse. Los programas usan esto para mostrar líneas de estado, por ejemplo, que no se desplazan fuera de la pantalla. Si la región de desplazamiento no incluye la línea superior, el texto no se desplazará al registro de desplazamiento hacia atrás. Sin embargo, una vez más, usted dijo que había intentado un restablecimiento completo, que también debería eliminarlo.
Chris Page

2
En mi caso, lo que parece haber sucedido es que mi sshsesión en una máquina remota falló (¿se agotó el tiempo?) Mientras estaba dentro vi, aparentemente dejando el terminal en la pantalla alternativa (porque vinunca tuve la oportunidad de limpiar). A partir de entonces, cualquier nueva sshsesión en el mismo terminal exhibiría el problema descrito por el OP, hasta que resolviera el problema seleccionando el elemento de menú Ver> Ocultar pantalla alternativa .
Hephaestus

Gracias, Ver> Mostrar / Ocultar pantalla alternativa ayudó. Tiene una combinación de teclas que debo haber golpeado sin saberlo y no sabía qué sucedió o cómo deshacer
ejemplo, el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.