FreeBSD에서 terminfo 항목을 사용하는 방법은 무엇입니까?

FreeBSD에서 terminfo 항목을 사용하는 방법은 무엇입니까?

내 로컬 Linux 컴퓨터에서 사용하고 있습니다.흰개미(VTE 기반). 그것은 자신의 것을 가지고 있습니다용어 정보파일( xterm-termite)은 기본적으로 ncurses와 함께 배포되지 않습니다.

원격 FreeBSD 서버에 연결하려고 합니다. 불행하게도 FreeBSD는 기본적으로 이전 termcap 형식만 사용합니다. terminfo를 termcap로 변환하는 방법을 찾을 수 없습니다. 따라서 ports() 에 대한 terminfo 지원을 포함하는 ncurses 버전을 컴파일할 수 있지만 devel/ncursesncurses 애플리케이션은 기본적으로 시스템 제공 라이브러리에 대한 링크로 설정됩니다. 이로 인해 애플리케이션이 시작되지 않습니다.

$ 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 라이브러리를 사용하도록 하거나, 적어도 terminfo를 termcap 데이터로 변환하도록 하려면 어떻게 해야 합니까?

(알아요해결책TERM안전한 값을 설정하는 것과 비슷 xterm-256color하지만 이는 terminfo의 목적을 무너뜨리는 것 같습니다)

답변1

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

infocmp -Cr

이것정보 CMP옵션은 사용하라고 -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)
  • 거의 사용되지 않고 지나치게 긴 기능을 제거했습니다.
    • 기능/커서 키 이동(kf13+, kLFT/etc [대문자 이름], 종류, 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#8pa#64

관련 정보