Y no digas " $TERM
", siempre es así xterm
.
¿Cómo puede un bash
script decir en qué terminal se está ejecutando, específicamente si es iTerm, Terminal.app o realmente un xterm?
Pregunto porque reset
no funciona¹ fuera de la caja en Terminal.app e iTerm2. iTerm2, sin embargo, reconoce una secuencia de escape para hacer un reinicio de terminal ( \x1b]50;ClearScrollback\x07
), y si pudiera detectarlo, podría anularlo reset
con un alias que haga lo correcto. AFAICT, Terminal.app carece de una secuencia de reinicio, y las personas recurren a la ridícula piratería informática para hackear eso .
Mi objetivo final aquí es tener reset
el mismo trabajo si estoy trabajando en OS X o Linux, trabajando local o remotamente a través de SSH. (No quiero tener que intentar recordar cuál, y es útil hacer reset && command-that-outputs-a-bunch
y tener trabajo de entrada). Terminal.app e iTerm están tirando una llave en este plan al no implementarse reset
correctamente.
Esto significa que simplemente anular reset
no lo es todo: si estoy en una máquina Linux, necesita saber si estoy usando gnome-terminal
o iTerm para enviar la secuencia de escape correcta.
¿Hay alguna manera (incluso si necesito un ioctl
) de preguntarle al terminal qué es realmente ?
¹ Para los fines de esta pregunta, el reinicio debe borrar la pantalla, reiniciar el cursor y borrar el búfer de desplazamiento.
reset
, ya que eso es lo que mis dedos saben.
reset
comando borre el contenido de desplazamiento hacia atrás del emulador de terminal, pero no se garantiza que lo haga, porque el desplazamiento hacia atrás es una característica específica del emulador de terminal, no realmente un parte de una terminal. Sin embargo, Terminal admite una extensión de la secuencia de escape ED (Erase in Display) para borrar el desplazamiento hacia atrás ESC [ 3 J
. Puede borrar la pantalla y luego usar eso, por ejemploreset && printf '\e[3J’
xterm
(a través de TERM=xterm
) espero que emules un superconjunto del XTerm, que borra su retroceso al reiniciar. (Al igual que si enviaras la secuencia de escape para "azul", esperarías azul). Por supuesto, mi xterm me dice eso Erase is backspace.
, y estoy agradecido de que nada más lo haga; Eso es molesto.
Terminal.app
la configuración, la pestaña del terminal y establece las líneas de desplazamiento en 0? ¿Deshabilita todo el texto sobre la línea actual, o simplemente cualquier cosa sobre la parte superior de la pantalla? Lo sé, no es exactamente lo que pediste, vale la pena intentarlo.