FreeBSD에서 terminfo 항목을 어떻게 사용할 수 있나요?

FreeBSD에서 terminfo 항목을 어떻게 사용할 수 있나요?

내 로컬 Linux 컴퓨터에서 다음을 사용하고 있습니다.흰개미(VTE 기반). 자체적으로 제공됩니다.용어 정보xterm-termite기본적으로 ncurses와 함께 배포되지 않는 파일( )입니다.

원격 FreeBSD 서버에 연결하려고 합니다. 불행하게도 FreeBSD는 기본적으로 이전 termcap 형식만 사용합니다. terminfo를 termcap로 변환하는 방법을 찾지 못했습니다. 따라서 포트( devel/ncurses)의 terminfo 지원을 포함하는 ncurses 버전을 컴파일할 수 있지만 ncurses 애플리케이션은 기본적으로 시스템 제공 lib에 연결됩니다. 이로 인해 앱이 실행되지 않습니다.

$ 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.

( toeterminfo 항목 나열)

FreeBSD가 기본적으로 terminfo를 사용하도록 하거나, 응용 프로그램이 포트에서 제공하는 ncurses lib를 사용하도록 하거나, 적어도 terminfo를 termcap 데이터로 변환하도록 하려면 어떻게 해야 합니까?

(저는 알고 있어요.해결 방법TERM와 같은 안전한 값으로 설정하는 것과 비슷 xterm-256color하지만 이는 terminfo의 목적을 무너뜨리는 것 같습니다)

답변1

terminfo를 termcap로 변환하는 일반적인 방법은 다음과 같습니다.

infocmp -Cr

그만큼infocmp옵션은 사용하라고 -C알려줍니다infocmp텀캡이름을 입력하고 -r옵션은 terminfo를 번역하도록 지시합니다.능력termcap 형식으로. 일부(예: 에 사용된 표현식 sgr)는 번역되지 않으며 infocmp공간이 충분할 경우 주석 처리된 기능을 남길 수도 있습니다.

"충분한 공간"이란 실제 termcap 응용 프로그램이 설명에 1023바이트만 허용한다는 사실을 나타냅니다. FreeBSD는 아래에서 ncurses를 사용하지만 일부 응용 프로그램은 항목 길이에 대해 가정합니다.

그러나 FreeBSD에는 ncurses와 독립적인 termcap 파일이 있습니다. ncurses에 대한 "포트"도 있는데 일부는 유용하다고 생각합니다.

그건 그렇고, 당신은 이것을 언급할 수도 있습니다:흰개미/termite.terminfo. 번역해 보면 이런 내용이 나올 수도 있습니다.

# 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:

terminfo 항목에 몇 가지 오류가 있습니다(예를 들어 VTE는 메타 모드를 지원하지 않습니다). 또한 termcap 형식에서는 대부분의 기능 키가 사라지는 것을 볼 수 있습니다(1023바이트 제한).

추가 자료:

답변2

때로는 내용을 제대로 번역하기 위해 수동으로 변경해야 하는 경우도 있습니다.

설명의 "중요한" 부분을 번역하기 위해 다음과 같이 변경했습니다.

  • termcap 형식으로 표시할 수 없는 기능이 제거되었습니다.
    • 동적 색상 변경(ccc/initc)
    • 다중 속성 설정 순서(sgr)
    • Visual Bell(플래시, termcap에서는 작동하지 않는 중간 지연 필요)
  • 유용하지 않은 기능이 제거되었습니다.
    • VT100 상자 그리기 문자(smacs/rmacs/acsc, sgr0도 변경됨)
    • 8비트 메타 키(km/smm/rmm)도 Thomas Dickey가 실제로 작동하지 않는다고 언급했습니다.
    • 인쇄(mc5i/mc0/mc4/mc5)
    • 깜박이는 커서(cvvis, cnorm도 변경됨)
    • HP 저주 확장(meml/memu)
    • 탭 정지의 동적 변경(hts/tbc)
    • 자주 사용되지 않는 속성(dim/invis)
  • 거의 사용되지 않고 지나치게 긴 기능이 제거되었습니다.
    • Shifted 기능/커서 키(kf13+, kLFT/etc [대문자 이름], kind, kri [위로/아래로 이동에 사용됨])
    • 긴 형식의 초기화 및 재설정 시퀀스(is2/rs2)
    • 단말기 식별 및 응답(u8/u9)
  • 더 잘 맞도록 일부 내용을 다시 작성했습니다/termcap과 호환 가능
    • setab/setaf를 덜 효율적인 termcap 호환 버전으로 변경했습니다.
    • smkx/rmkx/clear를 더 짧게 변경했습니다.

이를 통해 "중요한" 내용을 희생하지 않고 1001자로 줄였습니다(특히 여전히 256가지 색상을 지원하고 제목 표시줄 텍스트 설정).

xterm-termite|VTE 기반 터미널:\
    :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:\
    :up=\E[A:us=\E[4m:ve=\E[?25h:vi=\E[?25l:

들여쓰기된 모든 줄은 들여쓰기를 위해 탭을 사용해야 합니다.

색상 지원에서 중요한 것은 AB 및 AF 기능입니다. 256색 터미널이기 때문에 setab/setaf에서 자동으로 변환할 수 없습니다. termcap의 관련 부분은 다음과 같습니다 :AB=\E[48;5;%dm:AF=\E[38;5;%dm:. 256색이 아닌 모드의 경우 :AB=\E[4%dm:AF=\E[3%dm:(및 Co#8, pa#64일치)입니다.

관련 정보