ncurses

せりか式 - マニュアル - ncurses

ncurses

CUIにおいて,スクリーンや,キー入力,カーソルなどを管理するライブラリです.
このライブラリを利用することで,CUIベースでダイアログを出したり,いろいろ出来るようです.
ここでは,自分で使うと思った関数のみ簡単な説明を書いています.

このページは,BSDのマニュアルを参考に,私が解釈したものです.
間違っているかもしれませんので,自己責任で参考にしてください.
より詳しく知りたい場合は,BSDのマニュアルを見て下さい.

ヘッダファイルncurses.hのインクルードとライブラリncurses.aのリンクが必要です
#include <ncurses.h>
-lncurses

使い方

  1. 作成
    initscr もしくは newterm
  2. 設定
    少なくともcbreak もしくは nocbreakを呼び出すべき.
  3. 利用
  4. 後処理
    endwinで端末のリセットとカーソルを左下に移動する.
    また,必要に応じて,endwin後にdelscreenを呼ぶ.

スクリーンとウィンドウ

curses画面は,スクリーンという端末と,端末上のウィンドウの2種類から構成されます.
ウィンドウは,通常のウィンドウの他に,パッドと呼ばれる画面サイズに影響されないウィンドウもあります.

名前の規約?

接頭辞により,引数が変わるようです.

wで始まる関数は,引数にウィンドウを指定します.
pで始まる関数は,引数にパッドを指定します.
接頭辞の無い関数は,stdscrを使用します.

mvで始まる関数は、実際の処理を行う前にy行,x列目にmoveします.
mvwで始まる関数は,ウィンドウと x,y 座標の両方を指定します

ここでは,最も単純な形式のみのせています.
関数宣言の後ろに付けられるプレフィックス一覧を乗せておきます.
また,ワイド文字用の関数も存在しますが,ここでは省略します.

プレフィックスの例
int addch(chtype ch); [w,mv,mvw]                    // 左記の場合,以下の関数が省略されています
int waddch(WINDOW *win, chtype ch);
int mvaddch(int y, int x, chtype ch);
int mvwaddch(WINDOW *win, int y, int x, chtype ch); // ウィンドウが先なことに注意

関数一覧


スクリーン

スクリーンは,端末の基礎となる部分です.
特に必要がない限りinitscrだけで十分かと思います.

1: initscr();
2: ...
3: endwin();
WINDOW *iniscr(void);
端末の初期化.
環境変数TERM,標準入出力を利用し,端末を初期化します.
int endwin(void);
スクリーンをリセットし,カーソルを左下に移動します.
スクリーン関連のメモリなどは解放しないため,必要に応じてdelscreenを呼び出す必要があります.
bool isendwin(void);
現在のスクリーン上において,すでに,endwinが呼ばれているか返します.
SCREEN *newterm(const char *type, FILE *outfd, FILE *infd);
指定された端末タイプ,入出力用ファイルディスクリプタを利用して新しいスクリーンを作成します.
SCREEN *set_term(SCREEN *new);
現在のスクリーンを切り替える.
返値は,今までのスクリーン.
void delscreen(SCREEN* sp);
スクリーンで利用しているメモリを解放します.
現在使用中のスクリーンを解放しないように注意

ウィンドウ

ウィンドウは,スクリーンからはみ出すように作ることはできません.
作成・移動によってはみ出てしまうときはエラーとなります.

1: WINDOW *wnd = subwin(stdscr, 10, 20, 10, 5);
2: if(wnd) wprintw(wnd, "(10, 5)");
3: else    printw("error");
4: delwin(wnd);
ウィンドウの作成と削除
WINDOW *newwin(int nlines, int ncols, int begin_y, int begin_x);
nlines行,ncols列の新しいウィンドウを,begin_y行,begin_x列目に作成します.
WINDOW *subwin(WINDOW *orig, int nlines, int ncols, int begin_y, int begin_x);
nlines行,ncols列の新しいウィンドウを指定したウィンドウのbegin_y行,begin_x列目に作成します.
int delwin(WINDOW *win);
指定したウィンドウを削除します.
WINDOW *derwin(WINDOW *orig, int nlines, int ncols, int begin_y, int begin_x);
int mvderwin(WINDOW *win, int par_y, int par_x);
WINDOW *dupwin(WINDOW *win);
void wsyncup(WINDOW *win);
void wsyncdown(WINDOW *win);
int syncok(WINDOW *win, bool bf);
void wcursyncup(WINDOW *win);
パッドの作成

パッドは,サイズ制限のないウィンドウです.
パッドを利用した場合,画面の更新は行われないため,必要に応じてprefreshで画面を更新する必要があります.

WINDOW *newpad(int nlines, int ncols);
nlines行,ncols列の新しいパッドを作成します.
WINDOW *subpad(WINDOW *orig, int nlines, int ncols, int begin_y, int begin_x);
nlines行,ncols列の新しいパッドを指定したウィンドウのbegin_y行,begin_x列目に作成します.
操作
int mvwin(WINDOW *win, int y, int x);
指定したウィンドウを,y行目,x列目に移動します.
int wresize(WINDOW *win, int lines, int columns);
指定したウィンドウを,lines行,columns列にリサイズします.
int overlay(const WINDOW *srcwin, WINDOW *dstwin);
dstwinウィンドウに,srcwinウィンドウが重なるように配置します.
srcwinが更新されても,dstwinの内容は破壊されません.
2つのウィンドウは違う大きさでもかまいません.
int overwrite(const WINDOW *srcwin, WINDOW *dstwin);
srcwinの更新によりdstwinが破壊されること以外は,overlayと同じです.
int copywin(WINDOW *srcwin, WINDOW *dstwin, int sminrow, int smincol, int dminrow, int dmincol, int dmaxrow, int dmaxcol, int overlay);
配置する座標を指定できること以外は,overlayと同じです.
int scrl(int n); [w]
nが正の数の場合,上方向にn行スクロールします.
負の数の場合,下方向にn行スクロールします.
この関数を使う場合,scrollokでスクロールが有効になっている必要があります.
int scroll(WINDOW *win);
wscrl(win, 1)と同等です.
int beep(void);
可能であれば端末の警告音を鳴らします.
鳴らすことができない場合,端末をフラッシュ(ビジブルベル)させます.
どちらもできない場合,なにも起きません.
int flash(void);
端末をフラッシュさせます.
フラッシュさせることができない場合,警告音を鳴らします.
どちらもできない場合,なにも起きません.
属性
void getparyx(WINDOW *win, int y, int x);
指定したウィンドウがサブウィンドウであるとき,親ウィンドウにおける左上座標を取得します.
サブウィンドウではないとき,xとyには-1が入れられれます.
これは,関数ではなくマクロで実装されています.
void getbegyx(WINDOW *win, int y, int x);
指定されたウィンドウの座標を取得します.
これは,関数ではなくマクロで実装されています.
void getmaxyx(WINDOW *win, int y, int x);
指定されたウィンドウのサイズを取得します.
これは,関数ではなくマクロで実装されています.
int border(chtype ls, chtype rs, chtype ts, chtype bs, chtype tl, chtype tr, chtype bl, chtype br); [w]
ウィンドウに枠を作成します.
引数には,それぞれの位置に出力する文字を指定することができ,0を指定した場合,デフォルトの文字が使用されます.
引数とデフォルトの文字
ls  左側    ACS_VLINE
rs  右側    ACS_VLINE
ts  上側    ACS_HLINE
ds  下側    ACS_HLINE
tl  左上隅  ACS_ULCORNER
tr  右上隅  ACS_URCORNER
bl  左下隅  ACS_LLCORNER
br  右下隅  ACS_LRCORNER
ライングラフィックスに関しては,こちら参照.
int box(WINDOW *win, chtype verch, chtype horch);
wborder(win, verch, verch, horch, horch, 0, 0, 0, 0)と同等です.
int hline(chtype ch, int n); [w,mv,mvw]
現在のカーソル位置から最大nの長さを持つ水平線を引きます.
カーソル位置は変わりません.
int vline(chtype ch, int n); [w,mv,mvw]
垂直線を引くこと以外は,hlineと同じです.
void bkgdset(const chtype ch); [w]
ウィンドウの背景を設定します.
int bkgd(const chtype ch); [w]
chtype getbkgd(WINDOW *win);
ウィンドウの背景を取得します.
int attron(int attrs); [w]
ウィンドウの属性中の指定した属性を有効にします.
指定できる属性に関しては,こちら参照.
int attroff(int attrs); [w]
ウィンドウの属性中の指定した属性を無効にします.
指定できる属性に関しては,こちら参照.
int attrset(int attrs);
ウィンドウの属性を,指定した属性に設定します.
指定できる属性に関しては,こちら参照.
int standend(void); [w]
attrset(A_NORMAL)と同等です.
int standout(void); [w]
attron(A_STANDOUT)と同等です.
int color_set(short color_pair_number, void* opts); [w]
ウィンドウの前景 / 背景を設定します.
optは将来のための予約変数で,現在のところNULLを渡さないといけません.
int attr_on(attr_t attrs, void *opts); [w]
属性の指定がattr_t型であること以外は,attronと同じです.
optは将来のための予約変数で,現在のところNULLを渡さないといけません.
int attr_off(attr_t attrs, void *opts); [w]
属性の指定がattr_t型であること以外は,attroffと同じです.
optは将来のための予約変数で,現在のところNULLを渡さないといけません.
int attr_set(attr_t attrs, short pair, void *opts); [w]
属性の指定がattr_t型であること以外は,attrsetと同じです.
optは将来のための予約変数で,現在のところNULLを渡さないといけません.
int attr_get(attr_t *attrs, short *pair, void *opts); [w]
現在の属性および色のペアを取得します.
optは将来のための予約変数で,現在のところNULLを渡さないといけません.
int chgat(int n, attr_t attr, short color, const void *opts) [w,mv,mvw]
カーソル位置から,n文字の属性を変更します.
optは将来のための予約変数で,現在のところNULLを渡さないといけません.

カラー属性を扱うための関数です.
これらの関数を使う場合,あらかじめstart_colorを呼び出しておく必要があります.

int start_color(void);
カラー属性を扱うために,初期化します.
この関数は,initscrと一緒に呼び出しておくこと.
int init_pair(short pair, short f, short b);
色のペアの定義を初期化・変更します.
pairはペアの番号で,1からCOLOR_PAIRS-1の間の値を指定します.
fbは前景色と背景色で,0からCOLORSの間の値を指定します.
pair = 0は前景色が白,背景色が黒に設定されており,変更することはできません.
int pair_content(short pair, short *f, short *b);
指定したペア番号の前景色と背景色を取得します.
int init_color(short color, short r, short g, short b);
色の定義を初期化・変更します.
colorは色の番号で,1からCOLORの間の値を指定します.
rgbは色の赤,緑,青の要素の強さで,0から1000の間の値を指定します.
ここで変更された色は直ちに画面へ反映されます.
int color_content(short color, short *r, short *g, short *b);
指定した色番号のRGBの強さを取得します.
bool has_colors(void);
現在の端末が色を扱えるか返します.
扱える場合は,TRUEが返されます.
bool can_change_color(void);
現在の端末が色を扱え,かつ,色の変更をサポートしているか返します.
扱える場合は,TRUEが返されます.
int assume_default_colors(int fg, int bg);
デフォルトの背景色と前景色として使う色番号を指定します.
これは,唯一色ペア0の色の組み合わせを変更する手段になります.
この関数は,ncursesの拡張関数です.
int use_default_colors(void);
assume_default_colors(-1, -1)と等価です.

カーソル関連

int move(int y, int x); [w]
カーソルをy行x列に移動します.
void getyx(WINDOW *win, int y, int x);
カーソルの座標を取得します.
これは,関数ではなくマクロで実装されています.

マウス関連

int getmouse(MEVENT *event);
int ungetmouse(MEVENT *event);
mmask_t mousemask(mmask_t newmask, mmask_t *oldmask);
bool wenclose(WINDOW *win, int y, int x);
bool mouse_trafo(int* pY, int* pX, bool to_screen); [w]
int mouseinterval(int erval);

入力関連

設定

端末からの入力の制御です.

1: cbreak();    // キー入力を直ちに受け付ける
2: noecho();    // エコーしない
int cbreak(void);
キーの入力をRaw Modeにします.
このモードでは,キー入力はバッファされず,すぐにプログラムに渡されます
int nocbreak(void);
キーの入力をCooked Modeにします.
このモードでは,改行かキャリッジリターンが入力されるまで,キー入力をバッファします.
int halfdelay(int tenths);
Raw Modeとほぼ同じですが,thnths * 10分の1秒待って入力が無かった場合エラーとなります.
このモードを抜けるときは,nocbreakを呼びます.
int echo(void);
キーをタイプしたときに,スクリーンにエコーするモードにします.
int noecho(void);
キーをタイプしても,スクリーンにエコーしないモードにします.
int intrflush(WINDOW *win, bool bf);
キーボードからの割り込み(interrupt(SIGINT),break,quit(SIGQUIT))が発生したときに,ウィンドウの内容をflashするか指定します.
int keypad(WINDOW *win, bool bf);
bfにTRUEを指定した場合,wgetch等において,ファンクションキーを押したときにファンクションキーのコードを返すようになります.
FALSEの場合,エスケープシーケンスのまま取り出されます.
返されるキーコードに関しては,マニュアル,もしくはこちら参照.
int define_key(char *definition, int keycode);
キーコードにキーを割り当てます.
definitionがNULLであった場合,そのキーコードは削除されます.
char * keybound(int keycode, int count);
指定したキーコードに割り当てられたキーを取得します.
int keyok(int keycode, bool enable);
指定したキーコードの有効/無効を切り替えます
int meta(WINDOW *win, bool bf);
int nodelay(WINDOW *win, bool bf);
bfにTRUEを指定した場合,getchなどの呼び出しが,非ブロッキングモードになります.
非ブロッキングモードでは,入力の準備が無い(バッファにデータが無い)場合,ERRが返されます.
int raw(void);
int noraw(void);
void noqiflush(void);
void qiflush(void);
int notimeout(WINDOW *win, bool bf);
timeout関数とペアでは無いことに注意
次のキー入力までのタイムアウトを利用するか指定します.
これは,エスケープシーケンスの解釈に利用されます.
void timeout(int delay); [w]
nodelayとほぼ同じですが,ERRを返すまでのタイムアウト時間を指定できる点が違います.
delayに負の値を指定すると,ブロッキングモードになります.
delayに0を指定すると,非ブロッキングモードになります.
delayに正の値を指定すると,delayミリ秒待ち,その間に入力が無い場合ERRを返します.
int typeahead(int fd);
入力

入力は,scanw系関数と,get系関数,in系関数があります. 違いはほとんどありませんが, scanw系関数は書式付き入力, get系関数は通常の入力, in系関数はウィンドウの文字の読み込み といったところでしょうか.

int scanw(char *fmt [, arg] ...); [w,mv,mvw]
getstrにおいて入力された文字列を元に,scanfに従い書式化した場合と同等です.
int vwscanw(WINDOW *win, char *fmt, va_list varglist);
可変引数をva_listとして渡すこと以外は,scanwと同じです.
この関数を使う場合,ヘッダファイルvarargs.hもインクルードしておく必要があります.
int getch(void); [w,mv,mvw]
1文字読み込みます.
keypadTRUEに設定されている場合は,キーコードが帰ってくる可能性があります.
返されるキーコードに関しては,マニュアル,もしくはこちら参照.
int ungetch(int ch);
1文字押し込みます.
ここで押し込んだ文字が,次のgetchで返されます.
押し込みが保証されているのは,1文字のみです.
int getstr(char *str); [w,mv,mvw]
改行かキャリッジリターンがを受け取るまで,キーボードから文字列を読み込みます.
int getnstr(char *str, int n); [w,mv,mvw]
読み込む文字列の最大長を指定すること以外は,getstrと同じです.
chtype inch(void); [w,mv,mvw]
カーソル位置の文字を属性付きで読み出します.
int instr(char *str); [w,mv,mvw]
カーソル位置からヌル文字までを読み出します.
int innstr(char *str, int n); [w,mv,mvw]
読み込む文字列の最大長を指定すること以外は,instrと同じです.
int inchstr(chtype *chstr); [w,mv,mvw]
読み出す文字列が属性付きであること以外は,instrと同じです.
int inchnstr(chtype *chstr, int n); [w,mv,mvw]
読み込む文字列の最大長を指定すること以外は,inchstrと同じです.

出力関連

設定

端末への出力に関する設定です.

1: idlok();       // 行の挿入を行うようにします
2: scrollok();    // ウィンドウをスクロールするようにします
int clearok(WINDOW *win, bool bf);
画面をクリアし,全画面を再描画するようにします.
端末をリセットするときや視覚効果を得たいときに使います?
int idlok(WINDOW *win, bool bf);
行の挿入/削除を行えるようにします.
画面のスクロールは,最下行に行を追加するので,scrollokを呼び出すときは,この関数も呼び出す必要があります.
void idcok(WINDOW *win, bool bf);
文字の挿入/削除を行えるようにします.
デフォルトで有効になっている模様.
void immedok(WINDOW *win, bool bf);
int leaveok(WINDOW *win, bool bf);
int setscrreg(int top, int bot); [w]
スクロールする領域を指定します.
int scrollok(WINDOW *win, bool bf);
最終行で改行が発生したとき,スクロールするか指定します.
int nl(void);
改行をリターンとラインフィードに変換します.
int nonl(void);
改行をリターンとラインフィードに変換しません.
出力

出力は,printw系関数と,add系関数,ins系関数があります. 違いはほとんどありませんが, printw系関数は書式付き出力, add系関数はカーソルの後ろに文字列を追加, ins系関数はカーソルの前に文字列を挿入 といったところでしょうか.

int printw(char *fmt [, arg] ...); [w,mv,mvw]
printfに従い書式化した文字列を,addstrに渡した場合と同等です.
int vwprintw(WINDOW *win, char *fmt, va_list varglist);
可変引数をva_listとして渡すこと以外は,printwと同じです.
この関数を使う場合,ヘッダファイルvarargs.hもインクルードしておく必要があります.
int addch(chtype ch); [w,mv,mvw]
カーソル位置に文字を追加し,カーソルを進めます.
このとき,右端であれば次の行の先頭にカーソルを移動します.
また,最下行であり,スクロール可能(scrollok)であれば,スクロールします.
この関数では,ライン描画文字を出力することができます.
使えるライン描画文字はこちら参照.
int echochar(chtype ch); [w]
addchrefresh続けて呼び出された場合と同等です.
出力する文字が,制御文字ではなく,かつ,1文字だけである場合は,こちらの関数を使った方がいいようです.
int pechochar(WINDOW *pad, chtype ch);
対象がパッドであること以外,echocharと同等です.
int addstr(const char *str); [w,mv,mvw]
カーソル位置に文字列を追加し,カーソルを進めます.
addchと同様に,必要に応じて改行・スクロールされます.
int addnstr(const char *str, int n); [w,mv,mvw]
出力する文字列の最大長を指定すること以外は,addstrと同じです.
nに負の数を指定した場合,内部でn = strlen(str)を呼び出している模様.
int addchstr(const chtype *chstr); [w,mv,mvw]
addstrに似ていますが,以下の点において異なります.
そのため,addstrと比較して,高速に動作します.
int addchnstr(const chtype *chstr, int n); [w,mv,mvw]
出力する文字列の最大長を指定すること以外は,addchstrと同じです.
nに負の数を指定した場合,内部でn = strlen(str)を呼び出している模様.
int insch(chtype ch); [w,mv,mvw]
カーソル位置にchを挿入します.
この結果,その行の最後の文字が削除されるかもしれません.
また,この関数では,カーソルの位置は変化しません.
int insstr(const char *str); [w,mv,mvw]
カーソルの位置に文字列を挿入します.
また,この関数では,カーソルの位置は変化しません.
int insnstr(const char *str, int n); [w,mv,mvw]
出力する文字列の最大長を指定すること以外は,insstrと同じです.
nに負の数を指定した場合,内部でn = strlen(str)を呼び出している模様.
int insnstr(const char *str, int n); [w,mv,mvw]
出力する文字列の最大長を指定すること以外は,insstrと同じです.
nに負の数を指定した場合,内部でn = strlen(str)を呼び出している模様.
int insdelln(int n); [w]
現在行の上にn行空行を追加します.
その結果,下端のn行が消えるかもしれません.
nに負の数を指定した場合,現在行の下の行からn行削除されます.
int insertln(void); [w]
insdelln(1)を呼び出すのと同等です.

消去

int erase(void); [w]
ウィンドウに空白をコピーすることにより文字を消去します.
int clear(void); [w]
clearokを呼び出し,次のrefreshの呼び出し時に画面全体を再描画します.
int clrtoeol(void); [w]
カーソル位置から行の終わりまでを削除します.
int clrtobot(void); [w]
カーソル位置から画面の終わりまでを削除します.
int delch(void);
カーソル位置の文字を削除します.
これにより,カーソルより右の文字が,一つずつ左にずれます.
int deleteln(void);
カーソルのある行を削除します.
これにより,次の行以降が一行ずつ上にずれます.

更新

int refresh(void); [w]
端末をウィンドウデータに基づき再描画します.
この関数は,wnoutrefreshdoupdateを連続で呼び出すのとほぼ等価です.
int prefresh(WINDOW *pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol);
対象がパッドであること以外,wrefreshと同等です.
ただし,ウィンドウ中におけるパッドの位置関係を示す引数が追加されています.
pminrowpmincolはパッド内での座標, sminrowsmincolsmaxrowsmaxcolはスクリーン内での座標になります.
パッドの幅と高さは,スクリーン座標から計算されます.
つまり,pmaxrow = pminrow + (pmaxrow - pminrow)になります.
これらの座標は,完全にパッド,ウィンドウの内部にある必要があります.
int wnoutrefresh(WINDOW *win);
ウィンドウデータを仮想画面にコピーします.
複数のウィンドウを更新する場合,単純にrefresh関数を呼び出すより効率的に画面の更新を行うことができます.
int pnoutrefresh(WINDOW *pad, int pminrow, int pmincol, int sminrow, int smincol, int smaxrow, int smaxcol);
対象がパッドであること以外,wnoutrefreshと同等です.
追加引数に関しては,prefreshと同じです.
int doupdate(void);
仮想画面と実際の画面を比較し,画面を更新します.
int touchwin(WINDOW *win);
指定したウィンドウを更新対象に指定します.
int redrawwin(WINDOW *win);
touchwinとほぼ同等です.
int touchline(WINDOW *win, int start, int count);
指定した行を更新対象に指定します.
int wredrawln(WINDOW *win, int beg_line, int num_lines);
touchlineとほぼ同等です.
int untouchwin(WINDOW *win);
最後のrefresh以降,更新が無かったようにします.
int wtouchln(WINDOW *win, int y, int n, int changed);
y行目にn行の空白行を作成します.
changedに0を指定した場合,画面の更新を設定しません.
0以外であれば,画面が更新されたように設定します.
bool is_wintouched(WINDOW *win);
指定したウィンドウが更新されているか調べます.
更新されていれば,TRUEが返されます.
bool is_linetouched(WINDOW *win, int line);
指定した行が更新されているか調べます.
更新されていれば,TRUEが返されます.

ソフトラベル

int slk_init(int fmt);
int slk_set(int labnum, const char *label, int fmt);
char *slk_label(int labnum);
int slk_attron(const chtype attrs);
int slk_attroff(const chtype attrs);
int slk_attrset(const chtype attrs);
int slk_attr_on(attr_t attrs, void* opts);
int slk_attr_off(const attr_t attrs, void * opts);
int slk_attr_set(const attr_t attrs, short color_pair_number, void* opts);
attr_t slk_attr(void);
int slk_color(short color_pair_number);
int slk_refresh(void);
int slk_noutrefresh(void);
int slk_clear(void);
int slk_restore(void);
int slk_touch(void);

端末情報

端末の情報を取得するための関数です

curses 環境問い合わせ (クエリ) ルーチン
int baudrate(void);
char erasechar(void);
int erasewchar(wchar_t *ch);
bool has_ic(void);
bool has_il(void);
char killchar(void);
int killwchar(wchar_t *ch);
char *longname(void);
attr_t term_attrs(void);
chtype termattrs(void);
char *termname(void);
int has_key(int ch);
指定したファンクションキーを現在の端末が認識するか調べます.
認識できる場合,TRUEが返されます.
指定できるキーコードに関しては,マニュアル,もしくはこちら参照.

その他

char *unctrl(chtype c);
cから属性を取り除き,表示する文字を返します.
wunctrlという関数も存在しますが,これはワイド文字用の関数です.
char *keyname(int c);
キーcに対応する文字列を返します.
void filter(void);
void use_env(bool f);
FALSEを指定しておくことで, LINES, COLUMNの値を,環境変数からではなく, terminfo データベースにから読み出すようにします.
initscrを呼び出す前に呼び出しておく必要があります.
int putwin(WINDOW *win, FILE *filep);
ウィンドウに関する情報をすべて,filepに出力します.
WINDOW *getwin(FILE *filep);
putwinに出力してある情報から,ウィンドウを作成します.
int delay_output(int ms);
出力をmsミリ秒遅らせます.
この関数はsleepするわけではないので,あまり使用は推奨されません.
int flushinp(void);
先行して入力してあるデータをすべて破棄します.
const char * curses_version(void);
cursesライブラリのバージョンを返します.
int use_extended_names(bool enable);
int resize_term(int lines, int columns);
X端末用です.
端末のサイズを変更します.
int resizeterm(int lines, int columns);
X端末用です.
SIGWINCH ハンドラのため処理を含むこと以外は,resize_termと同じです.
bool is_term_resized(int lines, int columns);
X端末用です.
端末のサイズが変更されていればTRUEを返します.

デバッグ

デバッグ用の関数です.
これらの関数を使う場合,ncursesライブラリの代わりに,ncurses_gライブラリをリンクする必要があります.
トレースファイルは,カレントディレクトリのtraceという名前のファイルになります.

void trace(const unsigned int param);
トレースするレベルを指定します.
指定できるパラメータに関しては,こちら参照.
void _tracef(const char *format, ...);
書式付きで出力します.
void _tracedump(const char *label, WINDOW *win);
char *_traceattr(attr_t attr);
char *_traceattr2(int buffer, chtype ch);
char *_nc_tracebits(void);
char *_tracechar(const unsigned char ch);
char *_tracechtype(chtype ch);
char *_tracechtype2(int buffer, chtype ch);
char *_tracemouse(const MEVENT *event);
int scr_dump(const char *filename);
現在のスクリーンの内容をファイルへダンプします.
int scr_restore(const char *filename);
scr_dumpによりダンプされたファイルから画面を復帰させます.
int scr_init(const char *filename);
scr_dumpによりダンプされたファイルの情報を元に,スクリーンを初期化します.
int scr_set(const char *filename);
scr_initscr_resutoreを連続で呼び出すのと等価です.

低レベルの関数

以下の関数は,使用が推奨されません.
可能な限り,標準のcurses関数を使うようにしてください.

cursesルーチン
int def_prog_mode(void);
int def_shell_mode(void);
int reset_prog_mode(void);
int reset_shell_mode(void);
int resetty(void);
int savetty(void);
void getsyx(int y, int x);
void setsyx(int y, int x);
int ripoffline(int line, int (*init)(WINDOW *, int));
int curs_set(int visibility);
int napms(int ms);
msミリ秒 sleep します.
terminfo ケーパビリティデータベースへのインタフェース

この関数を使う場合,ヘッダファイルterm.hをインクルードし,
extern char PC; extern char * UP; extern char * BC; extern short ospeed; を宣言する必要があります.

int tgetent(char *bp, const char *name);
int tgetflag(char *id);
int tgetnum(char *id);
char *tgetstr(char *id, char **area);
char *tgoto(const char *cap, int col, int row);
int tputs(const char *str, int affcnt, int (*putc)(int));
terminfo データベースへのインタフェース

この関数を使う場合,ヘッダファイルterm.hをインクルードする必要があります.

int setupterm(const char *term, int fildes, int *errret);
int setterm(const char *term);
TERMINAL *set_curterm(TERMINAL *nterm);
int del_curterm(TERMINAL *oterm);
int restartterm(const char *term, int fildes, int *errret);
char *tparm(const char *str, ...);
int tputs(const char *str, int affcnt, int (*putc)(int));
int putp(const char *str);
int vidputs(chtype attrs, int (*putc)(char));
int vidattr(chtype attrs);
int vid_puts(attr_t attrs, short pair, void *opts, int (*putc)(char));
int vid_attr(attr_t attrs, short pair, void *opts);
int mvcur(int oldrow, int oldcol, int newrow, int newcol);
int tigetflag(const char *capname);
int tigetnum(const char *capname);
char *tigetstr(const char *capname);

注意

ウィンドウの積み重ねは,panelライブラリ使う必要があるようです.


トップへ