resizeterm(3x) resizeterm(3x)
is_term_resized, resize_term, resizeterm - curses 端末サイズの変更
#include <curses.h> bool is_term_resized(int lines, int columns); int resize_term(int lines, int columns); int resizeterm(int lines, int columns);
これは curses ライブラリの拡張です。 主に X ウインドウ端末 (例えば xterm ) 上で実行される プログラム用に、ウインドウのサイズを変更するための ncurses のデータへのフックを提供します。
resizeterm 関数は、標準ウインドウと現在ウインドウを 指定の寸法に変更し、 ncurses ライブラリが使う、例えば 変数 LINES と COLS のようにウインドウの寸法を記録している 他の保有データを調整します。
大部分の作業は内部関数 resize_term が行います。 外側の関数 resizeterm は SIGWINCH ハンドラのための 記録作業を追加します。 ウインドウのサイズを変更するとき、 resize_term は 拡張した領域を空白で埋めます。 呼び出し側のアプリケーションはこれらの領域を適切なデータで 満たしてください。 resize_term 関数はすべてのウインドウのサイズを 変更しようとします。 しかし、パッドの呼出規約のため、アプリケーションとの追加的な 相互作用なしにこれらのサイズを変更することはできません。
resize_term 関数がウインドウ構造(体)を変更するかどうかを 調べるために、補助関数 is_term_resized が提供されます。 ウインドウが変更されるなら TRUE を、そうでなければ FALSE を返します。
特記がない限り、これらの関数は失敗のとき整数 ERR を、 成功のとき OK を返します。 これらの関数は、寸法がゼロまたはそれ未満のとき、または ウインドウのメモリを(再)割り当てする間にエラーが発生したときに 失敗します。
これらの関数をシグナルハンドラのサポートに (つまり SIGWINCH のために) 使おうとするときは、 malloc または realloc が割り込まれるかもしれない状況で 呼ばないように注意を払う必要があります。 それらの関数を使うからです。 ncurses が自身の SIGWINCH ハンドラを提供するように 構成されている場合には、 o SIGWINCH を受け取ると、ハンドラはフラグをセットし、 o フラグは wgetch と doupdate でテストされ、 o 次に、 resizeterm 関数を呼び出し、 o それは KEY_RESIZE を ungetch し、次の wgetch 呼び出しで 読み出されるようにします。 KEY_RESIZE は画面サイズが変更され、パッドのように 自動的に再描画されない特別な部分を描画し直さなくては ならないことをアプリケーションに警告します。 シグナルハンドラから resizeterm または resize_term を 直接呼び出すのは安全ではありません。 安全に ncurses のデータ構造のサイズを変更する方法を 与えるために、この間接的な方法が使われます。 環境変数 LINES または COLUMNS が設定されている場合、 ライブラリがオペレーティング・システムから得たウインドウの サイズを使わないようにします。 したがって、 SIGWINCH を受け取っても、画面サイズの変更は 記録されないことがあります。
SVr4 curses では次の方法で画面サイズの変更ができます。 o endwin(3x) で curses を終了し o refresh(3x) を使って再開します。 これは画面をクリアし、壊れたように見えます。 この ncurses 拡張機能は 1995年の中頃に導入されました。 NetBSD curses (2001年) と PDCurses (2003年) にも 採用されました。
curs_getch(3x), curs_variables(3x), wresize(3x).
Thomas Dickey (1988年に BSD curses 用に書かれた 同等の関数から) resizeterm(3x)