ncurses
は、Unix/Linux 環境で動作する CUI (Character User Interface) アプリケーションを開発するためのライブラリです。
このライブラリを使うと、ターミナル上でウィンドウや色付きテキスト、キーボード入力管理など、GUIライクな操作をCUIで実現できます。
主な特徴
- ターミナルの抽象化
- ターミナルの低レベル制御(カーソル移動、スクリーン操作など)を簡略化。
- ANSIエスケープシーケンスを意識せずにコードを書くことが可能。
- マルチプラットフォーム
- 多くのUnix系環境で動作し、互換性のあるインターフェースを提供。
- 高度な操作サポート
- ウィンドウ管理、色の使用、キーボード入力の処理、スクロール可能なビューなど。
- バックバッファリング
- 画面の描画を効率化するために、画面操作をバッファにまとめて反映(”ダブルバッファリング” に似た動作)。
- 互換性
- 古い
curses
ライブラリの拡張版で、より多くの機能を提供。
主な機能
1. ウィンドウ管理
- ターミナル全体を分割してウィンドウを作成。
- 各ウィンドウに対して独立した描画操作が可能。
2. カーソル操作
- カーソル位置を自由に設定可能。
- 入力カーソルの非表示や表示操作も可能。
3. 色の管理
- ターミナルが色をサポートしている場合、テキストや背景の色を変更可能。
- 色のペアを定義し、特定の領域に適用。
4. キーボード入力
- 文字単位やキー単位での入力を処理。
- 特殊キー(例: 矢印キー、ファンクションキー)の処理も簡単。
5. スクロールやリフレッシュ
- 画面やウィンドウ内でのスクロール処理。
- 効率的に画面を更新。
基本的な使い方
サンプルコード: “Hello World” を表示
#include <ncurses.h>
int main() {
initscr(); // ncursesの初期化
printw("Hello, World!"); // メッセージを画面に表示
refresh(); // 画面を更新
getch(); // ユーザー入力を待機
endwin(); // ncursesの終了処理
return 0;
}
initscr()
: ncursesを初期化し、デフォルトのウィンドウを作成。printw()
: テキストを現在のカーソル位置に表示。refresh()
: バッファから画面に内容を反映。getch()
: キー入力を1つ受け取る。endwin()
: ncursesを終了し、通常のターミナルモードに戻す。
サンプルコード: 色付きテキストを表示
#include <ncurses.h>
int main() {
initscr(); // ncursesの初期化
start_color(); // 色を使用可能にする
init_pair(1, COLOR_RED, COLOR_BLACK); // 色ペア(前景: 赤, 背景: 黒)を定義
attron(COLOR_PAIR(1)); // 色ペア1を適用
printw("This is red text on black background!");
attroff(COLOR_PAIR(1)); // 色ペア1を解除
refresh(); // 画面を更新
getch(); // ユーザー入力を待機
endwin(); // ncursesの終了処理
return 0;
}
start_color()
: 色サポートを有効化。init_pair(pair_number, fg_color, bg_color)
: 色ペアを定義。attron()
/attroff()
: 属性(色や装飾)を適用/解除。
主な関数一覧
以下は ncurses
のよく使われる関数の一部です:
関数 | 説明 |
---|---|
initscr() | ncursesライブラリの初期化 |
endwin() | ncursesの終了 |
printw() | テキストを表示 |
refresh() | 画面を更新 |
getch() | ユーザーのキー入力を取得 |
start_color() | 色の使用を有効化 |
init_pair() | 色ペアを定義 |
attron() | 属性(色や装飾)を有効化 |
attroff() | 属性を解除 |
mvprintw(y, x, text) | 指定位置にテキストを表示 |
clear() | 画面をクリア |
noecho() | 入力された文字を画面に表示しない |
cbreak() | 標準入力バッファリングを無効化 |
newwin() | 新しいウィンドウを作成 |
delwin() | ウィンドウを削除 |
利用シーン
- ターミナルベースのアプリケーション
例:htop
,nano
,tmux
- ゲーム
例: テキストベースのゲーム(スネーク、チェスなど)。 - システムモニタリングツール
例: サーバー状態をリアルタイムに表示。
ncurses
は軽量で強力なツールセットを提供し、ターミナルベースのアプリケーション開発に非常に有用です。