Descripción del problema
Si aumento el ancho de una ventana Terminal versión 2.3 (309), y luego uso less
(o algún comando que invoca less
, como man
) en esa ventana, a menudo obtengo resultados confusos, ya que las líneas se ajustan a 80 caracteres a pesar de que la ventana es más ancha y less
intenta formatear el texto para esa ventana más amplia.
- Esto es lo mismo para OS X 10.8.5 nativo
less
y las instalaciones deless
458 MacPorts. Incluso es lo mismo siless
se invoca de forma remota en algún otro host desde una sesión ssh interactiva. resize
imprime el tamaño correcto yeval `resize`
no ayuda. Lo cual no es sorprendente, yaless
que parece tener la idea correcta de cuán ancha es la ventana, solo está confundido por el hecho de que las líneas se rompen demasiado temprano.- La salida normal de la línea de comando (fuera
less
) abarcará toda la ventana.
Análisis
Esto parece ser un error en la forma en que la aplicación maneja cup (modo de posicionamiento del cursor). El siguiente código se puede usar para reproducir el problema:
tput smcup; echo {0..200}; sleep 2; tput rmcup
Todo el problema parece estar relacionado con el hecho de que he configurado Terminal para establecer el modo de emulación y TERM
la variable de entorno en xterm-color
lugar de la predeterminada xterm-256color
. Lo hice ya que este último no está disponible en varios hosts a los que ssh, lo que hace que las aplicaciones en esos hosts se quejen de la falta de funcionalidad.
Soluciones alternativas
Una forma de evitar este problema parece ser ejecutar el comando
tput -T xterm-256color smcup; tput -T xterm-256color rmcup
después de cada cambio de tamaño de terminal. Pero eso es bastante molesto. Otra solución sería volver a cambiar la emulación de terminal xterm-256color
y copiar los datos de terminfo a los hosts remotos que no admiten ese valor de fábrica. Lo que también puede ser molesto si solo quieres echar un vistazo rápido a algún host remoto.
Pregunta central
En general, me parece que la emulación de la xterm-color
configuración no es compatible como cabría esperar. ¿Es esto un error en Terminal.app, o no entendí algo sobre cómo se supone que funciona todo este desastre?
¿Alguien tiene una solución más adecuada para manejar estas incompatibilidades?
Detalles técnicos
Para obtener más información, aquí está el resultado de infocmp xterm-color xterm-256color
, ligeramente truncado eliminando algunas definiciones clave:
comparing xterm-color to xterm-256color.
comparing booleans.
bce: F:T.
ccc: F:T.
mc5i: F:T.
npc: F:T.
comparing numbers.
colors: 8, 256.
ncv: NULL, NULL.
pairs: 64, 32767.
comparing strings.
blink: NULL, '\E[5m'.
cbt: NULL, '\E[Z'.
civis: NULL, '\E[?25l'.
cnorm: NULL, '\E[?12l\E[?25h'.
cvvis: NULL, '\E[?12;25h'.
ech: NULL, '\E[%p1%dX'.
el1: NULL, '\E[1K'.
enacs: '\E)0', NULL.
flash: NULL, '\E[?5h$<100/>\E[?5l'.
hpa: NULL, '\E[%i%p1%dG'.
ich: NULL, '\E[%p1%d@'.
indn: NULL, '\E[%p1%dS'.
initc: NULL, '\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\'.
invis: NULL, '\E[8m'.
is2: '\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8', '\E[!p\E[?3;4l\E[4l\E>'.
kDC: NULL, '\E[3;2~'.
kEND: NULL, '\E[1;2F'.
kHOM: NULL, '\E[1;2H'.
[ ⋮ ]
kri: NULL, '\E[1;2A'.
kslt: '\E[4~', NULL.
mc0: NULL, '\E[i'.
mc4: NULL, '\E[4i'.
mc5: NULL, '\E[5i'.
op: '\E[m', '\E[39;49m'.
rin: NULL, '\E[%p1%dT'.
rmacs: '^O', '\E(B'.
rmam: NULL, '\E[?7l'.
rmcup: '\E[2J\E[?47l\E8', '\E[?1049l'.
rmm: NULL, '\E[?1034l'.
rmso: '\E[m', '\E[27m'.
rmul: '\E[m', '\E[24m'.
rs1: NULL, '\Ec'.
rs2: '\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8', '\E[!p\E[?3;4l\E[4l\E>'.
setab: '\E[4%p1%dm', '\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m'.
setaf: '\E[3%p1%dm', '\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m'.
sgr: NULL, '%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m'.
sgr0: '\E[m', '\E(B\E[m'.
smacs: '^N', '\E(0'.
smam: NULL, '\E[?7h'.
smcup: '\E7\E[?47h', '\E[?1049h'.
smm: NULL, '\E[?1034h'.
vpa: NULL, '\E[%i%p1%dd'.
Respuestas:
xterm-color
representa una rama más antigua de Xterm que no refleja con precisión una serie de características importantes compatibles con Terminal (y Xterm).En versiones anteriores de Terminal, el valor predeterminado de la
TERM
variable de entorno eraxterm-color
porque era más compatible con Terminal, pero ese no ha sido el caso para varias versiones de OS X. El valor predeterminado actual esxterm-256color
.Si se está conectando a un host remoto que no incluye
xterm-256color
, primero intentexterm-16color
y luegoxterm
y vea si están disponibles. Son esencialmente los mismos, excepto que declaran diferentes números de colores admitidos. Representan el Xterm actual y son mucho más compatibles con Terminal quexterm-color
.Vea mi respuesta https://apple.stackexchange.com/a/79016/6883 para más detalles.
fuente