curs_touch(3x) curs_touch(3x)
touchwin, touchline, untouchwin, wtouchln, is_linetouched, is_wintouched - curses 画面更新制御ルーチン
#include <curses.h> int touchwin(WINDOW *win); int touchline(WINDOW *win, int start, int count); int untouchwin(WINDOW *win); int wtouchln(WINDOW *win, int y, int n, int changed); bool is_linetouched(WINDOW *win, int line); bool is_wintouched(WINDOW *win);
touchwin と touchline ルーチンは、ウインドウ全体が 描画されたかのように見せかけることで、ウインドウのどの部分が タッチ(変更をマーク)されたかという最適化情報をすべて 破棄します。(訳注: touchline については後出) これは重なりあったウインドウの場合、時々必要です。1つの ウインドウへの変更が他のウインドウに影響するにもかかわらず、 他方のウインドウのどの行が変更されたかという記録に 変更が反映されないためです。 touchline ルーチンは start 行から始まる count 行分のみが 変更されたように見せかけます。 untouchwin ルーチンは、ウインドウ内のすべての行が直前の wrefresh 呼び出し以降変更されていないかのようにマークします。 wtouchln ルーチンはウインドウ内の y 行から始まる n 行分を、 直前の wrefresh 呼び出し以降変更されたかのように(changed=1)、 あるいは変更されていないかのように(changed=0)見せかけます。 is_linetouched と is_wintouched ルーチンは、指定の 行/ウインドウが直前の wrefresh 呼び出し以降変更されているなら TRUE を返し、そうでなければ FALSE を返します。 それに加えて、指定のウインドウに対して line が無効な場合に is_linetouched は ERR を返します。 (訳注: bool 型で返せるか疑問)
すべてのルーチンは、上のルーチン説明で特記していないかぎり、 失敗した場合に整数 ERR を、正常終了の場合に ERR 以外の整数値を 返します。 X/Open はエラーの条件を何も定義していません。この実装では is_linetouched ウインドウ・ポインタがヌル、または行番号が ウインドウの外だった場合にエラーを返します。 ERR は、この関数の正常な戻り値である TRUE や FALSE とは異なることに注意してください。 (訳注: bool 型で返せるか疑問) wtouchln ウインドウ・ポインタがヌル、または行番号が ウインドウの外だった場合にエラーを返します。
これらの関数は XSI Curses standard, Issue 4 に記載されて います。 curses の歴史的ないくつかの実装では、明文化されていない 機能として、 touchwin(stdscr) または clear(stdscr) とする ことで clearok(..., 1) と同等な処理ができました。 これは ncurses では動作しません。
wtouchln 以外のすべてのルーチンは、 マクロであるかもしれないことに注意してください。
curses(3x), curs_refresh(3x), curs_variables(3x). curs_touch(3x)