curs_slk(3x) curs_slk(3x)
slk_init, slk_set, slk_wset, slk_refresh, slk_noutrefresh, slk_label, slk_clear, slk_restore, slk_touch, slk_attron, slk_attrset, slk_attroff, slk_attr_on, slk_attr_set, slk_attr_off, slk_attr, slk_color - curses ソフトウェア・ファンクションキー・ラベル・ルーチン
#include <curses.h> int slk_init(int fmt); int slk_set(int labnum, const char *label, int fmt); int slk_refresh(void); int slk_noutrefresh(void); char *slk_label(int labnum); int slk_clear(void); int slk_restore(void); int slk_touch(void); 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, void* opts); attr_t slk_attr(void); int slk_color(short color_pair); int slk_wset(int labnum, const wchar_t *label, int fmt);
slk* 関数群は、多くの端末に存在するソフトウェア・ ファンクションキー・ラベル (以下ソフトラベル) を操作します。 ソフトラベルを持たない端末のために、curses は stdscr と 変数 LINES のサイズを縮小し、stdscr の最下行を専用とします。 curses は各 8 文字以内の 8 個のラベルを標準化しています。 これに加え、ncurses の実装は各 5 文字以内の 12 個のラベルを シミュレートするモードをサポートしています。 これは今日の PC のような利用者機器に便利です。 ncurses はハードウェアのサポートを全く使おうとすることなく、 画面の最下部 2 行以内を使ってこのモードをシミュレートします。 slk_init ルーチンは initscr または newterm を呼び出す前に 呼び出さなければなりません。 最終的に initscr が stdscr から 1 行を使ってソフトラベルを エミュレートするとき、fmt は画面上にラベルをどう配置するかを 決定します。 0 3-2-3 配置でラベルを表示します 1 4-4 配置でラベルを表示します 2 PC のような 4-4-4 配置でラベルを表示します 3 これもPC のような 4-4-4 配置ですが、 それに加えて見出し行を作成し、 利用者がキー番号を識別しやすくします slk_set ルーチン (とワイド文字用ライブラリの slk_wset ルーチン) は、次の 3 つの引数を取ります。 labnum 1 から 8 (slk_init で fmt が 2 または 3 の場合は 12) までのラベル番号 label ラベルとして表示される、8 (slk_init で fmt が 2 または 3 の場合は 5) 文字までの長さの文字列。 ヌル文字列またはヌルポインタの場合は 空白のラベルを設定します fmt 0, 1, 2 のいずれかであり、それぞれラベル内で 左寄せ、中央揃え、右寄せにして表示します slk_refresh と slk_noutrefresh ルーチンは wrefresh と wnoutrefresh ルーチンに対応しています。 slk_label ルーチンは、ラベル番号 labnum の現在のラベルを 返します。先行または後続する空白は取り除かれます。 slk_clear ルーチンは画面からソフトラベルをクリアします。 slk_restore ルーチンは slk_clear が実行された後、 ソフトラベルを画面上に復元します。 slk_touch ルーチンは、次に slk_noutrefresh が実行された時に すべてのソフトラベルを出力するように強制します。 slk_attron, slk_attrset, slk_attroff, slk_attr ルーチンは attron, attrset, attroff, attr_get に対応しています。 これらは画面の最下行でソフトラベルがシミュレートされている 場合のみ有効です。 ソフトラベルのデフォルトの強調表示は A_STANDOUT です (これを文書化していない System V curses と同様に)。 slk_color ルーチンは color_set に対応しています。 これは画面の最下行でソフトラベルがシミュレートされている 場合のみ有効です。
これらのルーチンは失敗のとき ERR を、正常終了のとき OK (SVr4 は「ERR 以外の整数値」としか指定していません) を 返します。 X/Open はエラーの条件を何も定義していません。この実装では slk_attr ソフトラベルで使われている属性値を返します slk_attroff, slk_attron, slk_clear, slk_noutrefresh, slk_refresh, slk_touch 端末またはソフトラベルが初期化されていない場合に エラーを返します slk_attrset 端末またはソフトラベルが初期化されていない場合に エラーを返します slk_attr_set 端末またはソフトラベルが初期化されていない場合、 または色のペアが 0 〜 COLOR_PAIRS-1 の範囲外の 場合、または opts がヌルでない場合に エラーを返します slk_color 端末またはソフトラベルが初期化されていない場合、 または色のペアが 0 〜 COLOR_PAIRS-1 の範囲外の 場合にエラーを返します slk_init 書式引数 fmt が 0 〜 3 の範囲外の場合に エラーを返します slk_label エラーの場合 NULL を返します slk_set 端末またはソフトラベルが初期化されていない場合、 または引数 labnum がラベル数の範囲外の場合、 または書式引数 fmt が 0 〜 2 の範囲外の場合、 またはラベル用のメモリが確保できない場合に エラーを返します
すぐ後に wrefresh が続くでしょうから、ほとんどの アプリケーションは slk_noutrefresh を使うでしょう。
これらの関数は XSI Curses standard, Issue 4 に記載されて います。 同書は属性操作関数 slk_attron, slk_attroff, slk_attrset の 引数を attr_t 型とし、const 修飾子を追加しています。 slk_init() 関数の書式コード 2 と 3、および slk_attr 関数は ncurses に固有です。
curses(3x), curs_attr(3x), curs_initscr(3x), curs_refresh(3x), curs_variables(3x). curs_slk(3x)