curs_touch(3x) curs_touch(3x)
touchwin, touchline, untouchwin, wtouchln, is_linetouched, is_wintouched - curses refresh control routines 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);
The touchwin and touchline routines throw away all opti- mization information about which parts of the window have been touched, by pretending that the entire window has been drawn on. This is sometimes necessary when using overlapping windows, since a change to one window affects the other window, but the records of which lines have been changed in the other window do not reflect the change. The routine touchline only pretends that count lines have been changed, beginning with line start. touchwin と touchline ルーチンは、ウインドウ全体が 描画されたかのように見せかけることで、ウインドウのどの部分が タッチ(変更をマーク)されたかという最適化情報をすべて 破棄します。(訳注: touchline については後出) これは重なりあったウインドウの場合、時々必要です。1つの ウインドウへの変更が他のウインドウに影響するにもかかわらず、 他方のウインドウのどの行が変更されたかという記録に 変更が反映されないためです。 touchline ルーチンは start 行から始まる count 行分のみが 変更されたように見せかけます。 The untouchwin routine marks all lines in the window as unchanged since the last call to wrefresh. untouchwin ルーチンは、ウインドウ内のすべての行が直前の wrefresh 呼び出し以降変更されていないかのようにマークします。 The wtouchln routine makes n lines in the window, starting at line y, look as if they have (changed=1) or have not (changed=0) been changed since the last call to wrefresh. wtouchln ルーチンはウインドウ内の y 行から始まる n 行分を、 直前の wrefresh 呼び出し以降変更されたかのように(changed=1)、 あるいは変更されていないかのように(changed=0)見せかけます。 The is_linetouched and is_wintouched routines return TRUE if the specified line/window was modified since the last call to wrefresh; otherwise they return FALSE. In addi- tion, is_linetouched returns ERR if line is not valid for the given window. is_linetouched と is_wintouched ルーチンは、指定の 行/ウインドウが直前の wrefresh 呼び出し以降変更されているなら TRUE を返し、そうでなければ FALSE を返します。 それに加えて、指定のウインドウに対して line が無効な場合に is_linetouched は ERR を返します。 (訳注: bool 型で返せるか疑問)
All routines return the integer ERR upon failure and an integer value other than ERR upon successful completion, unless otherwise noted in the preceding routine descrip- tions. すべてのルーチンは、上のルーチン説明で特記していないかぎり、 失敗した場合に整数 ERR を、正常終了の場合に ERR 以外の整数値を 返します。 X/Open does not define any error conditions. In this im- plementation X/Open はエラーの条件を何も定義していません。この実装では is_linetouched returns an error if the window pointer is null, or if the line number is outside the window. Note that ERR is distinct from TRUE and FALSE, which are the normal return values of this function. ウインドウ・ポインタがヌル、または行番号が ウインドウの外だった場合にエラーを返します。 ERR は、この関数の正常な戻り値である TRUE や FALSE とは異なることに注意してください。 (訳注: bool 型で返せるか疑問) wtouchln returns an error if the window pointer is null, or if the line number is outside the window. ウインドウ・ポインタがヌル、または行番号が ウインドウの外だった場合にエラーを返します。
The XSI Curses standard, Issue 4 describes these func- tions. これらの関数は XSI Curses standard, Issue 4 に記載されて います。 Some historic curses implementations had, as an undocu- mented feature, the ability to do the equivalent of clearok(..., 1) by saying touchwin(stdscr) or clear(std- scr). This will not work under ncurses. curses の歴史的ないくつかの実装では、明文化されていない 機能として、 touchwin(stdscr) または clear(stdscr) とする ことで clearok(..., 1) と同等な処理ができました。 これは ncurses では動作しません。
Note that all routines except wtouchln may be macros. wtouchln 以外のすべてのルーチンは、 マクロであるかもしれないことに注意してください。
curses(3x), curs_refresh(3x), curs_variables(3x). curs_touch(3x)