cursesはUnix系システム向けの端末制御ライブラリであり、テキストユーザーインターフェース(TUI)アプリケーションの構築を可能にする。
その名前は「カーソル最適化」という用語をもじったものです。これは、文字セル端末(例: VT100 )上でのアプリケーションの表示を管理する関数ライブラリです。[ 2 ]
cursesライブラリを使用すると、プログラマは特定の端末タイプを直接記述することなく、テキストベースのアプリケーションを作成できます。実行システム上のcursesライブラリは、端末タイプに基づいて適切な制御文字を送信します。また、端末画面にマッピングされる1つ以上のウィンドウの抽象化を提供します。各ウィンドウは文字マトリックスで表されます。プログラマは各ウィンドウの希望する外観を設定し、cursesパッケージに画面の更新を指示します。ライブラリは、表示を更新するために必要な最小限の変更セットを決定し、端末固有の機能と制御シーケンスを使用してこれらを実行します。
つまり、プログラマーは画面の表示方法を示す文字マトリックスを作成し、実際の処理はcursesに任せるということです。
curses API については、いくつかの場所で説明されています。[ 3 ] curses の実装のほとんどは、数千もの異なる端末の機能を記述できるデータベースを使用しています。PDCurses のように、端末データベースではなく専用のデバイスドライバを使用する実装もいくつかあります。ほとんどの実装はterminfoを使用し、一部はtermcap を使用しています。Curses は、文字セル端末への後方移植性とシンプルさという利点があります。ビットマップグラフィックや複数のフォントを必要としないアプリケーションの場合、curses を使用したインターフェース実装は、通常、Xツールキットを使用した実装よりもはるかにシンプルで高速になります。
最初の curses ライブラリはKen Arnoldによって作成され、当初はBSD UNIXとともにリリースされ、いくつかのゲームで使用されました。中でも特に有名なのはRogue です。[ 4 ] [ 5 ] [ 6 ] 1990 年代には、BSD ライブラリにいくつかの改良が加えられ、「4.4BSD」 curses として、例えば、複数の種類のビデオハイライトを提供するようになりました。しかし、これらは広く使用されていません。
「curses」という名前は、カーソル最適化をもじったものです。[ 7 ] cursesがviエディタで使用されていたと誤って述べられることがありますが、実際には、カーソル移動を最適化するcursesのコードは、cursesより前に存在したviから借用されたものです。[ 5 ]
Goodheartによると、Ken Arnoldによるcursesのオリジナル実装は、termcapライブラリの関数を再利用し、それに機能を追加することから始まった。[ 8 ]数年後、バークレーでviとtermcapのソースコードを保守していたMary Ann Hortonは、 AT&T Corporationに移り、 terminfoを使用した別のバージョンを作成した。これはUNIX System IIIとUNIX System Vの一部となった。後者のライセンス制限のため、BSD版とAT&T版のライブラリは独立して開発された。termcap/terminfoの改良に加えて、AT&T版では他にも改良が加えられた。
AT&T curses の開発は、X/Open Curses が定義された 1990 年代半ばに停止したようです。[ 9 ] 1995 年、BSD のメンテナーであるKeith Bostic は、 ncursesを優先して curses ライブラリを正式に非推奨にしました。[ 10 ] ncurses と PDCurses の開発は継続されています。NetBSDオペレーティングシステムでは、BSD curses のバージョンが引き続きメンテナンスされています(ワイド文字サポート、termcap から terminfo への移行など)。
AT&T curses を模倣して、少なくとも 3 つの実装からさまざまな開発の方向性が始まりました。Pavel Curtisによるpcurses (1982 年に開始)、Mark Hessling が自身のエディタTHE をサポートするために開発したPDCurses (Public Domain curses) (1987 年に開始)、Rexx /Curses [ 11 ]、およびPC curses (バージョン 1.4 以前、Björn Larsson が 1990 年以前に Pavel Curtis のライブラリに触発されて開発) [ 12 ] [ 13 ]
ncurses(新しいcurses)は「pcurses として始まり、1993年後半にncurses 1.8.1として再発行された」[ 14 ] 。ncursesはcursesの最も広く知られている実装であり、 NetBSDプロジェクトのBSD cursesなど、他のバリエーションのさらなる開発を促した。[ 15 ] [ 16 ]
ncursesライブラリは当初Linux、OpenBSD、FreeBSD、NetBSD上で開発されましたが、主にThomas Dickeyによって他の多くのANSI/POSIX UNIXシステムに移植されています。PDCursesはncursesと同一ではありませんが、同じ関数呼び出しを使用し、ncursesと同じように動作します。ただし、PDCursesはDOS、Win32、OS/2のコンソールウィンドウやX11など、異なるデバイスを対象としています。両者間の移植は難しくありません。たとえば、ローグライクゲームADOMはLinuxとncurses用に作成され、後にDOSとPDCursesに移植されました。[ 17 ] [ 18 ]
Cursesは、コンソールモードで動作するPC、ハードウェアANSI端末、 TelnetまたはSSHクライアントなど、テキストのみのデバイス上でGUIのような機能を実現するように設計されています。Cursesベースのソフトウェアとは、ユーザーインターフェースがcursesライブラリ、または互換性のあるライブラリ( ncursesなど)によって実装されているソフトウェアのことです。
Cursesベースのプログラムは、テキストのみのデバイスで一般的に見られるコマンドラインインターフェース(CLI)ではなく、テキストボックスやスクロール可能なリストなどの「ウィジェット」を含む、従来のグラフィカルユーザーインターフェースに似たユーザーインターフェースを備えていることが多い。そのため、CLIベースのプログラムよりもユーザーフレンドリーでありながら、テキストのみのデバイスでも動作させることができる。また、Cursesベースのソフトウェアは、GUIベースのソフトウェアよりもリソース消費量が少なく、ハードウェアとソフトウェアの両面でより幅広いシステムで動作できる。これには、1990年以前の古いマシンから、テキストのみのディスプレイを使用する最新の組み込みシステムまでが含まれる。
Cursesは一般的にUnix系オペレーティングシステムと関連付けられることが多いが、Microsoft Windows向けの実装も存在する。
Larsson が作成した PC curses (バージョン 1.4) に基づく。
は Pavel Curtis の [パッケージ] の移植/書き換えです。