¿Cómo puedo utilizar las entradas terminfo en FreeBSD?

¿Cómo puedo utilizar las entradas terminfo en FreeBSD?

En mi máquina Linux local, estoy usandotermitas (basadas en TEV). Viene con su propioinformación terminológicafile ( xterm-termite), que no se distribuye con ncurses de forma predeterminada.

Intento conectarme a un servidor FreeBSD remoto. Desafortunadamente, FreeBSD por defecto sólo utiliza el formato termcap más antiguo. No he podido encontrar una manera de convertir terminfo a termcap. Entonces, si bien puedo compilar una versión de ncurses que incluye soporte terminfo desde los puertos ( devel/ncurses), las aplicaciones ncurses se vincularán a la biblioteca proporcionada por el sistema de forma predeterminada. Esto da como resultado que las aplicaciones no se inicien:

$ echo $TERM
xterm-termite
$ toe | grep termite
xterm-termite   VTE-based terminal
$ tmux
open terminal failed: can't find terminfo database
$ htop
Error opening terminal: xterm-termite.

( toeenumera las entradas de terminfo)

¿Cómo puedo hacer que FreeBSD use terminfo de forma predeterminada, o forzar a las aplicaciones a usar la biblioteca ncurses proporcionada por el puerto, o al menos convertir terminfo en datos de termcap?

(Soy consciente desolucionescomo establecer TERMun valor seguro como xterm-256color, pero creo que eso anula el propósito de terminfo)

Respuesta1

La forma convencional de convertir terminfo a termcap es con

infocmp -Cr

ElinfocmpLa opción -Cindica infocmpque se use.termcapnombres, y la -ropción le dice que traduzca terminfocapacidadesal formato termcap. Algunas (como las expresiones utilizadas en sgr) no se traducirán y infocmppueden dejar capacidades comentadas si hay suficiente espacio.

Por "espacio suficiente", se refiere al hecho de que las aplicaciones termcap reales solo permiten 1023 bytes en una descripción. FreeBSD usa ncurses debajo, pero algunas aplicaciones hacen suposiciones sobre la longitud de la entrada.

Sin embargo, FreeBSD tiene un archivo termcap que es independiente de ncurses. También hay un "puerto" para ncurses, que algunos encuentran útil.

Por cierto, puede que te estés refiriendo a esto:termita/termita.terminfo. Si lo tradujiste, es posible que veas algo como

# vim: noet:ts=8:sw=8:sts=0
# (untranslatable capabilities removed to fit entry within 1023 bytes)
# (sgr removed to fit entry within 1023 bytes)
# (acsc removed to fit entry within 1023 bytes)
# (terminfo-only capabilities suppressed to fit entry within 1023 bytes)
xterm-termite|VTE-based terminal:\
        :am:hs:km:mi:ms:xn:\
        :co#80:it#8:li#24:\
        :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
        :K2=\EOE:LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:\
        :UP=\E[%dA:ae=\E(B:al=\E[L:as=\E(0:bl=^G:bt=\E[Z:cd=\E[J:\
        :ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:\
        :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:\
        :ds=\E]2;\007:ec=\E[%dX:ei=\E[4l:fs=^G:ho=\E[H:im=\E[4h:\
        :is=\E[!p\E[?3;4l\E[4l\E>:k1=\EOP:k2=\EOQ:k3=\EOR:\
        :k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:\
        :k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:\
        :kd=\EOB:ke=\E[?1l\E>:kh=\EOH:kl=\EOD:kr=\EOC:\
        :ks=\E[?1h\E=:ku=\EOA:le=^H:md=\E[1m:me=\E[0m:mh=\E[2m:\
        :mm=\E[?1034h:mo=\E[?1034l:mr=\E[7m:nd=\E[C:rc=\E8:sc=\E7:\
        :se=\E[27m:sf=^J:so=\E[7m:sr=\EM:st=\EH:ta=^I:te=\E[?1049l:\
        :ti=\E[?1049h:ts=\E]2;:ue=\E[24m:up=\E[A:us=\E[4m:\
        :vb=\E[?5h\E[?5l:ve=\E[?12l\E[?25h:vi=\E[?25l:\
        :vs=\E[?12;25h:

Hay algunos errores en la entrada terminfo (VTE no admite el modo meta, por ejemplo). Además, en el formato termcap puede observar que la mayoría de las teclas de función desaparecen (límite de 1023 bytes).

Otras lecturas:

Respuesta2

A veces es necesario realizar algunos cambios manuales para traducir las cosas correctamente.

He realizado los siguientes cambios para que traduzca las partes "importantes" de la descripción.

  • Capacidades eliminadas que no se pueden representar en formato termcap:
    • Cambio de color dinámico (ccc/initc)
    • Secuencia de configuración de atributos múltiples (sgr)
    • Visual Bell (flash, requiere retraso intermedio que no funciona en termcap)
  • Capacidades eliminadas que no son útiles:
    • Caracteres de dibujo de caja VT100 (smacs/rmacs/acsc, también cambiado sgr0)
    • Metaclave de 8 bits (km/smm/rmm), también Thomas Dickey mencionó que en realidad no funciona.
    • Impresión (mc5i/mc0/mc4/mc5)
    • Cursor parpadeante (cvvis, también cambió cnorm)
    • Extensiones de maldiciones de HP (meml/memu)
    • Cambio dinámico de tabulaciones (hts/tbc)
    • Atributos utilizados con poca frecuencia (tenue/invisivo)
  • Capacidades eliminadas que rara vez se utilizan y son excesivamente largas.
    • Teclas de función/cursor desplazadas (kf13+, kLFT/etc [nombres en mayúsculas], kind, kri [usado para subir/abajo])
    • Secuencias de inicio y reinicio de formato largo (is2/rs2)
    • Identificación y respuesta del terminal (u8/u9)
  • Se reescribieron algunas cosas para que se ajusten mejor o sean compatibles con termcap
    • Se cambió setab/setaf a una versión menos eficiente compatible con termcap.
    • Se modificó smkx/rmkx/clear para que sea más corto.

Esto lo redujo a 1001 caracteres sin sacrificar nada "importante" (en particular, todavía admite 256 colores y configura el texto de la barra de título)

xterm-termite|Terminal basado en TEV:\
    :NP:am:hs:mi:ms:ut:xn:\
    :Co#256:co#80:it#8:li#24:pa#32767:\
    :@7=\EOF:@8=\EOM:AB=\E[48;5;%dm:AF=\E[38;5;%dm:AL=\E[%dL:\
    :DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:F1=\E[23~:F2=\E[24~:\
    :IC=\E[%d@:K2=\EOE:Km=\E[M:LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:\
    :SA=\E[?7h:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:ZH=\E[3m:\
    :ZR=\E[23m:al=\E[L:bl=^G:bt=\E[Z:cb=\E[1K:cd=\E[J:ce=\E[K:\
    :ch=\E[%i%dG:cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:\
    :cs=\E[%i%d;%dr:cv=\E[%i%dd:dc=\E[P:dl=\E[M:do=^J:\
    :ds=\E]2;\007:ec=\E[%dX:ei=\E[4l:fs=^G:ho=\E[H:im=\E[4h:\
    :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:\
    :k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:kB=\E[Z:kD=\E[3~:\
    :kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:kd=\EOB:ke=\E[?1l:\
    :kh=\EOH:kl=\EOD:kr=\EOC:ks=\E[?1h:ku=\EOA:le=^H:md=\E[1m:\
    :me=\E[m:mr=\E[7m:nd=\E[C:op=\E[39;49m:r1=\Ec:rc=\E8:\
    :sc=\E7:se=\E[27m:sf=^J:so=\E[7m:sr=\EM:ta=^I:te=\E[?1049l:\
    :ti=\E[?1049h:ts=\E]2;:u6=\E[%i%d;%dR:u7=\E[6n:ue=\E[24m:\
    :arriba=\E[A:us=\E[4m:ve=\E[?25h:vi=\E[?25l:

Tenga en cuenta que todas las líneas sangradas deben utilizar tabulaciones para la sangría.

Lo importante para la compatibilidad con el color son las capacidades AB y AF; no se pueden traducir automáticamente desde setab/setaf porque es una terminal de 256 colores. La parte relevante del termcap es :AB=\E[48;5;%dm:AF=\E[38;5;%dm:; para el modo que no sea de 256 colores sería :AB=\E[4%dm:AF=\E[3%dm:(y Co#8, pa#64para combinar).

información relacionada