cursesの基本的な関数
cursesの多くの関数のうち,基本的なものを紹介する.
cursesには沢山の関数がある.ここではそのうちの以下の機能を使ってみる.
- カーソルの移動
- 文字出力
- 文字の削除
- 画面のクリア
カーソルの移動には
int move(int y, int x);を使用する.左上が0,0となる.そして縦にy,横にxが増加していく.また,ウィンドウが複数になると,ウィンドウを指定してそのウィンドウのカーソルを移動させることができる.
int wmove(WINDOW *win, int y, int x);複数のウィンドウの扱いについては別項に記述する.
文字を出力する関数はいろいろある.最も基本的なものとして以下がある.
- int printw(char *fmt [, arg] ...);
- cursesにおけるprintf.
- int addch(chtype ch);
- 現在のカーソル位置で文字を上書きする.この結果,カーソルは一つ進む.
- int insch(chtype ch);
- 現在のカーソル位置に文字を挿入する.現在のカーソルより右側にある文字は全て右に一つずつずれる.
- int mvprintw(int y, int x, char *fmt [, arg] ...);
- カーソルを移動してprintwする.
- int mvwprintw(WINDOW *win, int y, int x, char *fmt [, arg] ...);
- ウィンドウを指定し,カーソルを移動してprintwする.
- int waddch(WINDOW *win, chtype ch);
- ウィンドウを指定して文字を出力する.
- int mvaddch(int y, int x, chtype ch);
- カーソルを移動して文字を出力する.
- int mvwaddch(WINDOW *win, int y, int x, chtype ch);
- ウィンドウを指定し,カーソルを移動して文字を出力する.
- int echochar(chtype ch);
- addchしたあとrefreshする.
- int wechochar(WINDOW *win, chtype ch);
- waddchしたあとwrefreshする.
- int winsch(WINDOW *win, chtype ch);
- ウィンドウを指定して文字を挿入する.
- int mvinsch(int y, int x, chtype ch);
- カーソルを移動して文字を挿入する.
- int mvwinsch(WINDOW *win, int y, int x, chtype ch);
- ウィンドウを指定し,カーソルを移動して文字を挿入する.
文字の削除には以下の関数がある.
- int delch(void);
- カーソル位置の文字を削除する.
- int wdelch(WINDOW *win);
- ウィンドウを指定してdelch.
- int mvdelch(int y, int x);
- カーソルを移動してその文字を削除.
- int mvwdelch(WINDOW *win, int y, int x);
- ウィンドウを指定してmvdelch.
画面をクリアして0からやりなおしたいこともある.画面のクリアには以下の関数がある.
- int erase(void);
- 画面の全ての位置にスペースを出力する.
- int werase(WINDOW *win);
- ウィンドウを指定してeraseする.
- int clear(void);
- 画面をクリアする.大抵端末コマンドを呼び出すのでeraseより確実らしい.
- int wclear(WINDOW *win);
- ウィンドウを指定してclearする.
- int clrtobot(void);
- カーソルの位置以降の画面をクリアする.
- int wclrtobot(WINDOW *win);
- ウィンドウを指定してclrtobotする.
- int clrtoeol(void);
- カーソルの位置以降の行をクリアする.
- int wclrtoeol(WINDOW *win);
- ウィンドウを指定してclrtoeolする.
上記の関数のうち,いくつかを使用したサンプルを作ってみた.まず,以下はmvaddchとclearを使用するサンプルである.
このサンプルは'*'をウィンドウに表示していく.ウィンドウの端にいくとバウンドする.LINESとCOLSという変数を使用している.両者はinitscrで画面の行数と列数に設定される.また,STAR_COUNT個の'*'を表示すると画面をclearする.以上を引数回数繰り返す.
二つ目のサンプルはdelchを使用するサンプルである.
このサンプルは引数の文字列が左から登場して右端まで移動し,また左まで移動してそのまま消えて行く.

