コンパイルされたterminfoファイルからtermcap文字列をどのように生成しますか?

コンパイルされたterminfoファイルからtermcap文字列をどのように生成しますか?

このスレッドのタイトルはほとんどすべてを教えてくれます。

私はこの問題を検索したときに私が望むことをするというプログラムに言及していましたが、unticこのプログラムは私のディストリビューションの公式パッケージにはないようです。

(コンパイルされた)terminfoからtermcapに移動する他の方法はありますか?

答え1

man infotocap:

infotocap - terminfo記述をtermcap記述に変換する

注釈付き

ユーティリティは実際にリンクです。tic、走る-C モデル。他のものを使用することができますtic次のオプション-fそして -x

これはソース対ソースです。コンパイルされたterminfoソース(terminfoまたはtermcap)の場合は、次のようにします。infocmp:

生成の源-Cオプションはtermcapエントリとして直接使用できますが、パラメータ化されたすべての文字列をtermcap形式に変更できるわけではありません。 infocmpほとんどのパラメータ化された情報を変換しようとする試みが行われ、変換されていない情報は出力に明確に表示され、コメントアウトされます。これは手動で編集する必要があります。

infocmpこれを使用する方法はさまざまです。 termcapに変換するのはそのうちの1つです。

infocmp バイナリ terminfo エントリを他の terminfo エントリと比較し、terminfo 記述を書き換えるために使用できます。 use= terminfoフィールドまたはさまざまな形式のバイナリファイル(用語)から用語情報の説明を印刷します。 すべての場合において、ブールフィールドが最初に印刷され、次に数値フィールド、最後に文字列フィールドが印刷されます。

tic および infocmp は、マニュアルページで処理される端末データベースの場所に関する情報を想定しています。TERMINFO。ターミナルデータベースの一部ではない任意のファイル名の場合は、スクリプトを使用して既存のターミナルデータベースと同じディレクトリにコピーできます。

#!/bin/sh
mytemp=$(mktemp -d)
trap 'rm -rf "$mytemp"; exit 1' INT QUIT TERM HUP
trap 'rm -rf "$mytemp"; exit 0' EXIT
TERMINFO=$mytemp; export TERMINFO
TERMINFO_DIRS=$mytemp; export TERMINFO_DIRS

for name in "$@"
do
        [ -f "$name" ] || continue
        case $(file "$name") in
        *Compiled\ *terminfo\ entry*)
                actual=$(file "$name" | sed -E -e 's%^.*"([^"]+)".*$%\1%')
                leader=$(echo "$actual" | sed -E -e 's%^(.).*%\1%')
                part="$mytemp/$leader"
                mkdir -p "$part"
                cp "$name" "$part/$actual"
                full="$part/$actual"
                infocmp -C -T "$actual" | sed -e "s%$full%$name%"
                ;;
        esac
done

それじゃない完全通常、ncursesを使用する一部のプラットフォームでは、次のような他の構造を使用しているためtermマンページ。

関連情報