Solución:
Es una combinación de cosas. El recomendado TERM
porque PuTTY es “putty”, pero debido a la inercia, la mayoría de la gente usa “xterm”. El soporte de dibujo de líneas en la descripción del terminal xterm es diferente de las suposiciones de PuTTY porque xterm admite luit, que tiene algunas limitaciones con la forma en que se administra el conjunto de caracteres alternativo (consulte el informe de error de Debian # 254316: ncurses-base: solución para el manejo de pantalla de register sgr0 no es del todo correcto).
Si utiliza infocmp
para comparar, puede ver estas líneas que tratan con el conjunto de caracteres alternativo:
acsc: '``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~', '``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~'.
enacs: NULL, 'E(BE)0'.
rmacs: 'E(B', '^O'.
smacs: 'E(0', '^N'.
Los VT100 pueden tener dos conjuntos de caracteres “designados”, denominados G0 y G1:
- El dibujo de línea “xterm” funciona cambiando la designación de G0 entre los caracteres ASCII y el dibujo de línea,
- el dibujo de línea de “masilla” funciona designando ASCII en G0 y dibujo de línea en G1 y cambiando entre los dos con los caracteres de control de entrada / salida.
Aunque ambos son compatibles con VT100, el esquema xterm no funciona con PuTTY. Debido al vínculo con luit
, la descripción de terminal normal para xterm
no cambiará (a menos que sea posible modificar luit
para resolver el problema para sus usuarios), por lo que se necesita una solución para los usuarios de PuTTY:
-
utilice una descripción de terminal diferente a la recomendada, por ejemplo,
TERM=putty
. El cuadro de diálogo de configuración de PuTTY le permite establecer variables de entorno para pasar a la máquina remota.Esto tiene el inconveniente de que algunos sistemas no tienen instalada la base de datos del terminal ncurses completa, debido al “tamaño” (es de 6.8Mb en mi máquina local). También,
TERM
puede no estar en la lista de variables de entorno ssh permitidas. -
puede compilar su propia entrada terminfo con el tic de ncurses, por ejemplo,
cat >foo <<"EOF"
xterm|my terminfo entry,
enacs=E(BE)0,
rmacs=^O,
smacs=^N,
use=xterm-new,
EOF
tic foo -
utilizar la pantalla GNU. Hace sus propias correcciones y pasa a compensar los problemas de PuTTY.
Otras lecturas
- SCS – Seleccionar juego de caracteres (manual del VT100)
- 4.4 Selección de juego de caracteres (SCS) (manual del VT220)
- La base de datos de Terminfo es grande, ¿necesito todo eso? (Preguntas frecuentes de ncurses)
- Putty: inicie sesión, ejecute comando / cambie la variable de entorno y NO cierre la sesión
Quiero hacer algunas adiciones. Enfrenté el mismo problema: muchas herramientas basadas en ncurses como dialog
, menuconfig
y nconfig
de fuentes Linux kenrel, incluso mc
se rompe cuando se construye con ncurses (aunque mc
está construido usando Slang en muchos sistemas operativos y no se ve afectado).
Esto es lo que paso
ncurses utiliza smacs
registro de terminfo para cambiar a “juego de caracteres alternativo” y luego usa acsc
dibujar cajas. Envía a
que es un personaje de dibujo de caja en un juego de caracteres alternativo (ACS). Estos son los gráficos VT100.
Algunos emuladores de terminal hoy en día no son compatibles con ACS cuando están en UTF-8 porque las aplicaciones tienen la capacidad de enviar puntos de código de dibujo de caja reales.
Hay capacidad no oficial U8
(¡U mayúscula!) en terminfo
que le dice a ncurses: “En lugar de ACS, use puntos de código de dibujo de cajas reales”.
Tengo esta capacidad infocmp -x xterm-utf
y para masilla también, pero no para xterm
.
Como puedes leer en ncurses(3)
(https://invisible-island.net/ncurses/man/ncurses.3x.html), ncurses
es consciente de la consola Linux y la pantalla GNU (y tmux, que también usa screen
como TERM
) y siempre comportarse como si U8
fueron puestos.
Para otros terminales que no son compatibles con ACS cuando están en UTF, puede configurar NCURSES_NO_UTF8_ACS
.
Desafortunadamente, ncurses no es consciente de la masilla.
También hay luit
que puede convertir ACS en puntos Unicode.
Entonces, esto es lo que podemos hacer para ejecutar ncurses + putty en UTF-8:
-
Usar terminal con
U8#1
capacidad. Este está configurado para masilla (por cierto, sugiero usarputty-256color
en lugar de). Puedes crear tu propia entrada conU8#1
ycolors#256
y compilarlo contic -x
. Tenga cuidado de que el mouse no funcione en terminales que no comiencen conxterm
(vermouseinterval(3)
, Sección ERRORES). Por eso no usoputty
Terminal. Sugiero copiarxterm-utf8
, agregarcolors#256
, compílelo y quédese con él: funciona perfectamente con putty, mouse y utf8. -
Puedes configurar
NCURSES_NO_UTF8_ACS
en tu perfil. -
Tu puedes correr
screen
otmux
: se estableceráTERM
parascreen
y arreglarncurses
-
Tu puedes correr
luit
: hará todas las conversiones por usted. -
Desde putty 0.71, puede pedir a putty que admita dibujos ACS incluso en UTF-8