より高いレベルで…

より高いレベルで…

最近情報を見つけようとしています。明らかに、私の目標はncursesCに似たライブラリを作成することです。私は完全に知っていますANSIエスケープシーケンスそしてそれを使用する方法。しかし、私は移植性が欲しいので、terminfoデータベースに興味があります。たとえば、文書の一部を読みました。

これにより理論と原理を理解できましたが、実際にCなどのプログラミング言語を使用してデータベースにアクセス/接続する方法の例を見つけることができませんでした。

現在私が考えることができる唯一の方法は、terminfoデータベースバイナリをメモリにロードして手動でアクセスを実行することです。しかし、私は私自身のシステムを構築する必要がありますが、より簡単で/実用的/公式的な方法がないことが奇妙です。このクソデータベースにアクセスしてみてください。

答え1

FreeBSDのtermcapデータベースにアクセスするには:はいオペレーティングシステムのメソッドです。 FreeBSD Cライブラリにはアクセス用のAPIがあります。能力データベース。だからgetcap()誰かを待ってください。低レベル termcap データベースにアクセスするために呼び出される関数です。 (サブレベルのAPIは実際には存在しますが、データベースがプログラムをgetcap()使用して構築された可変長レコードフラットファイルでも、適切に索引付けされたバイナリデータベースファイルでもよいという事実をAPIほど抽象化しませんcap_mkdb。)

より高いレベルはtgetent()tputs()等です。 (これらは多くのLinuxベースのオペレーティングシステムなどのterminfoオペレーティングシステムにも存在します。)しかし、これはFreeBSD Cライブラリのtermcap ncursesライブラリの一部であり、ユーザーは独自の "ncursesのような"ライブラリを作成しようとしています。 (Linuxベースのオペレーティングシステムでは、terminfo ncursesライブラリの一部です。)

ncurses の独自の terminfo API を介さずに terminfo データベースレコードにアクセスする例は unibilium ライブラリです。 NeoVIMはこれを使用します。

より高いレベルで…

terminfo/termcapのアイデアはより持ち運びに便利21世紀の2番目の10年になると、それは実際に転換点以上に達しました。 ECMA-48:1976規格に準拠していない紙の端末はもちろん、実際のビデオ端末にはほとんど会いません。用語情報の抽象化は実際のビデオ端末の機能と一致しないことが多く、ある意味では障害移植性はやや歪んだ作業方法を強制するからです。

これは特に以下に適用されます。端子入力実際には1980年代初頭からECMA-48であり(RXVT、Interix、Linux KVT、およびSCOコンソール用のいくつかのステートマシンボードを含む)、固定文字列を一致させるtermcap / terminfoモデルは非常に適していません。しかし、「ネイティブ」/「xmit」電卓キーボード、「カーソルアドレッシングモード」、および3つの形式のカーソル表現に関するアイデアも、端末が実際に機能する方法とは一致しませんでした。

もしあなたならはいncursesを再発明するには、少なくともカラーペアモデルをコピーしないでください。これはECMA-48およびAIXtermカラーシステムとほとんど互換性がなく、端末で25年以上使用されてきたITU T.416インデックスおよび直接カラーメカニズムは言うまでもありません。

追加読書

関連情報