El terminal se ajusta a 80 caracteres incluso si la ventana es más ancha

2

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 lessintenta formatear el texto para esa ventana más amplia.

  • Esto es lo mismo para OS X 10.8.5 nativo lessy las instalaciones de less458 MacPorts. Incluso es lo mismo si lessse invoca de forma remota en algún otro host desde una sesión ssh interactiva.
  • resizeimprime el tamaño correcto y eval `resize`no ayuda. Lo cual no es sorprendente, ya lessque 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 TERMla variable de entorno en xterm-colorlugar 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-256colory 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-colorconfiguració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'.
MvG
fuente
@mark: Hay muchas similitudes, pero son preguntas diferentes. Esto pregunta "¿cómo soluciono este problema de envoltura de 80 columnas", mientras que "¿Qué terminal está emulando la aplicación Mountain Lion Terminal?" Pregunta sobre la emulación de terminal y terminal en general, y solo de manera incidental menciona un problema de envoltura de 80 columnas como una motivación para haciendo la pregunta
Chris Page

Respuestas:

1

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 TERMvariable de entorno era xterm-colorporque era más compatible con Terminal, pero ese no ha sido el caso para varias versiones de OS X. El valor predeterminado actual es xterm-256color.

Si se está conectando a un host remoto que no incluye xterm-256color, primero intente xterm-16colory luego xtermy 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 que xterm-color.

Vea mi respuesta https://apple.stackexchange.com/a/79016/6883 para más detalles.

Chris Page
fuente
Si la respuesta es la misma que otra pregunta, entonces la pregunta es un duplicado y debe cerrarse como tal
Mark
2
La pregunta es diferente, y las respuestas solo se superponen parcialmente. Es por eso que simplemente me referí a él en lugar de marcar esto como un duplicado.
Chris Page