Saltar al contenido

Los caracteres ACS no funcionan en masilla incluso con la exportación NCURSES_NO_UTF8_ACS = 1

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 usar putty-256color en lugar de). Puedes crear tu propia entrada con U8#1 y colors#256 y compilarlo con tic -x. Tenga cuidado de que el mouse no funcione en terminales que no comiencen con xterm (ver mouseinterval(3), Sección ERRORES). Por eso no uso putty Terminal. Sugiero copiar xterm-utf8, agregar colors#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 o tmux: se establecerá TERM para screen y arreglar ncurses

  • 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

    Desde putty 0.71 puede pedir a putty que admita dibujos ACS incluso en UTF-8

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *