Freebsd

如何在 FreeBSD 上使用 terminfo 條目?

  • December 10, 2017

在我的本地 Linux 機器上,我使用的是termite (VTE-based)。它帶有自己的terminfo文件 ( xterm-termite),預設情況下不隨 ncurses 分發。

我嘗試連接到遠端 FreeBSD 伺服器。不幸的是,FreeBSD 預設只使用舊的 termcap 格式。我一直無法找到將 terminfo 轉換為 termcap 的方法。因此,雖然我可以編譯一個版本的 ncurses,其中包括來自埠 ( devel/ncurses) 的 terminfo 支持,但預設情況下,ncurses 應用程序將連結到系統提供的庫。這會導致應用程序無法啟動:

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

toe列出 terminfo 條目)

如何讓 FreeBSD 預設使用 terminfo,或者強制應用程序使用埠提供的 ncurses 庫,或者至少將 terminfo 轉換為 termcap 數據?

(我知道諸如設置為安全值之類的變通方法,但我認為這違背了 terminfo 的目的)TERM``xterm-256color

將 terminfo 轉換為 termcap 的正常方法是

infocmp -Cr

infocmp選項告訴使用termcap名稱,該選項告訴它將 terminfo功能轉換為 termcap 格式。有些(例如 中使用的表達式)不會翻譯,如果有足夠的空間,可能會留下註釋掉的功能。-C``infocmp``-r``sgr``infocmp

“足夠的空間”是指真正的 termcap 應用程序在描述中只允許 1023 個字節。FreeBSD 在底層使用 ncurses,但一些應用程序會假設條目長度。

然而,FreeBSD 確實有一個獨立於 ncurses 的 termcap 文件。ncurses 還有一個“埠”,有些人覺得它很有用。

順便說一句,您可能指的是這個:白蟻/白蟻.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 字節限制)。

進一步閱讀:

引用自:https://unix.stackexchange.com/questions/291412