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

関連情報