私は今、数日間情報を見つけようとしています。私の目標を明確にすることは、ncurses
のようなCライブラリを作成することです。 ANSIエスケープシーケンスとその使用方法を完全に認識しています。ただし、移植性が必要なので、terminfo
データベースに興味があるのはそのためです。次のようなドキュメントの一部を読みました。
理論と原理は理解できましたが、実際には、Cのようなプログラミング言語でデータベースにアクセス/インターフェースする方法の例はありません。
現在、私の頭に浮かぶ唯一の方法は、メモリにterminfo
データベースバイナリファイルをロードして手動でアクセスすることですが、独自のスキームを構築する必要があり、それ以上はありませんこれらの神のいまいましいデータベースにアクセスするための簡単/実用的/公式な方法。
FreeBSDのtermcapデータベースにアクセスするには、オペレーティングシステムに付属する方法があります。 FreeBSD Cライブラリには、capabilitiesデータベースにアクセスするためのAPIがあります。したがって、getcap()
et al。低レベルで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世紀の20世紀の限界点にまで及んでいます。 ECMA-48:1976に準拠していない実際のビデオ端末、さらには紙の端末はほとんどありません。そして、しばしば実際のビデオ端末が実際に行うことと実際には一致しないterminfo抽象化は、いくつかの点で、多少歪んだ方法を強制するため、移植性への障害です働くことの。
これは特にターミナル入力に当てはまり、実際にはECMA-48(RXVT、Interix、Linux KVT、およびSCOコンソール)1980年代初頭以降、固定文字列に一致するtermcap/terminfoモデルはあまり適合していません。しかし、「ローカル」/「xmit」計算キーパッドのアイデアは、 「カーソルアドレッシングモード」、および3つだけの形式のカーソルマニフェストも、端末が実際に機能する方法と一致しません。
Ncursesを再発明するつもりareである場合は、少なくともそのカラーペアモデルをコピーしないでください。これはECMA-48とAIXtermのカラーシステムとほとんど一致していません。ましてや、端末が四半世紀以上にわたって持っていたITU T.416インデックスカラーメカニズムとダイレクトカラーメカニズムは言うまでもありません。
getcap
。 BSDライブラリ関数マニュアル。 FreeBSD。 2002-03-22。tgetent
。 ncurses(3X)マニュアルFreeBSD。