TERMCAP(5) | FreeBSD File Formats Manual | TERMCAP(5) |
名称
termcap — 端末ケーパビリティのデータベース書式
termcap |
解説
termcap ファイルは、端末に関するデータベースであり、例えば vi(1) や ncurses(3) が使用します。 termcap には、端末が持つケーパビリティと、操作がどのように行われるのかが記述されています。パディングの必要性および初期化シーケンスも termcap に記述されています。termcap のエントリは、`:' で区切られた複数個のフィールドからなります。各端末の最初のエントリは、`|' 文字で区切った端末名です。最初の名前は、その端末の最も一般的な省略形です。最後の名前は、端末を完全に識別するための長い名前であり、その他は、端末名の類義語です。最後以外の名前は、小文字を使い、空白を含まないようにしてください;最後の名前は、可読性のために大文字や空白を含んでかまいません。
端末名 (最後の冗長なエントリを除く) は、次の約束に従い選んでください。端末を構成するハードウェアの特定の一部を、“hp2621”のように根幹の名前として選びます。この名前は、ハイフンを含んではなりません。ハードウェアのモードやユーザのプリファレンスは、ハイフンとモード指示子を追加して示します。ですから、132 桁モードの“vt100”は、“vt100-w”になります。可能ならば、以下の接尾辞を使用してください:
接尾辞 | 意味 | 例 |
-w | 広いモード (80 桁超) | vt100-w |
-am | 自動マージン付 (通常は、デフォルト) | vt100-am |
-nam | 自動マージン無し | vt100-nam |
- n | 画面上の行数 | aaa-60 |
-na | 矢印キー無し (ローカルのままにする) | concept100-na |
- np | メモリページ数 | concept100-4p |
-rv | 反転表示 | concept100-rv |
ケーパビリティ
記述フィールドに、ケーパビリティの意味を示そうとしています。記述フィールドには、次のようなコードが書いてあることがあります:- (P)
- パディングが指定されるかもしれないことを表します。
- #[1-9]
- 記述フィールドでは、文字列が (# i) として与えられる引数として tparm(3) や tgoto(3) を介して渡されることを示します。
- (P*)
- 影響を受ける行数に従いパディングが変化することを示します。
- (# i)
- i 番目のパラメータを表します。
以下、ブール値のケーパビリティです:
ブール値 TCap 記述 変数 コード auto_left_margin bw cursor_left は、桁 0 から最後の桁に回り込む auto_right_margin am 端末は、自動マージンを持つ no_esc_ctlc xb beehive (f1=escape, f2=ctrl C) ceol_standout_glitch xs 強調表示は、上書きによって消去されない (hp) eat_newline_glitch xn 80 桁より後の改行は、無視される (concept) erase_overstrike eo 空白を上打ちすることで消去可能 generic_type gn 一般的な行タイプ hard_copy hc ハードコピー端末 has_meta_key km メタキーを持ち、最上位ビットをセットする has_status_line hs 追加のステータス行を持つ insert_null_glitch in 挿入モードは、ナルを区別する memory_above da 画面より上の描画が保存される memory_below db 画面より下の描画が保存される move_insert_mode mi 挿入モードでの移動が安全 move_standout_mode ms 強調表示モードでの移動が安全 over_strike os 端末は、上打ちが可能 status_line_esc_ok es ステータス行でエスケープを使用可能 dest_tabs_magic_smso xt 破壊的タブ、強調文字の奇妙な動作 (t1061) tilde_glitch hz ~ を印字できない (hazeltine) transparent_underline ul 下線文字の上打ち xon_xoff xo 端末は、xon/xoff のハンドシェークを使用 needs_xon_xoff nx パディングは、動作しないので xon/xoff が必要 prtr_silent 5i プリンタ出力は、画面にエコーしない hard_cursor HC カーソルが見にくい non_rev_rmcup NR enter_ca_mode は、exit_ca_mode を反転しない no_pad_char NP パディング文字が存在しない non_dest_scroll_region ND スクロール領域が非破壊的 can_change cc 端末は、既存の色を再定義可能 back_color_erase ut 画面は、背景色で消される hue_lightness_saturation hl 端末は、HLS カラー表現のみ使用 (tektronix) col_addr_glitch YA 桁位置指定および micro_column_address ケーパビリティは、正方向の動きのみ cr_cancels_micro_mode YB cr を使用するとマイクロモードがオフになる has_print_wheel YC オペレータが文字セットを変更する必要がある プリンタ row_addr_glitch YD row_address と micro_row_address は、 正方向の動きのみ semi_auto_right_margin YE 最終桁で印字すると cr となる cpi_changes_res YF 文字ピッチを変えると解像度が変わる lpi_changes_res YG 行ピッチを変えると解像度が変わる
以下、数値のケーパビリティです:
数値 TCap 記述 変数 コード columns co 1 行の桁数 init_tabs it タブの初期設定は、# 個の空白ごと lines li 画面もしくはページの行数 lines_of_memory lm 行より大きい場合は、メモリの行数、 0 の場合は、さまざま magic_cookie_glitch sg enter_standout_mode や exit_standout_mode が残す空白文字数 padding_baud_rate pb パディングが必要な最低ボーレート virtual_terminal vt 仮想端末番号 (CB/unix) width_status_line ws ステータス行の桁数 num_labels Nl 画面上のラベル数 label_height lh 各ラベルの行数 label_width lw 各ラベルの桁数 max_attributes ma 端末が扱える属性の最大の組み合わせ maximum_windows MW 定義可能なウィンドウ数の最大 magic_cookie_glitch_ul ug 下線により残される空白数 # # 以下は、SVr4 のカラーサポートにより導入 # max_colors Co 画面上の最大色数 max_pairs pa 画面上の色の組の最大数 no_color_video NC 色付きでは使用できないビデオ属性 # # 以下の数値ケーパビリティは、SVr4.0 の term 構造体に存在しますが、 # マニュアルには、記述されていません。 # これらは、SVr4 のプリンタサポートにより追加されました。 # buffer_capacity Ya 印字前にバッファされるバイト数 dot_vert_spacing Yb 1 インチあたりのピン数で表した垂直ピン間隔 dot_horz_spacing Yc 1 インチあたりのドット数で表した水平 ドット間隔 max_micro_address Yd micro_..._address での最大値 max_micro_jump Ye parm_..._micro での最大値 micro_char_size Yf マイクロモードでの文字サイズ micro_line_size Yg マイクロモードでの行サイズ number_of_pins Yh プリントヘッドのピン数 output_res_char Yi 行あたりのユニット数による水平解像度 output_res_line Yj 行あたりのユニット数による垂直解像度 output_res_horz_inch Yk インチあたりのユニット数による水平解像度 output_res_vert_inch Yl インチあたりのユニット数による垂直解像度 print_rate Ym 1 秒あたりの文字数による印字レート wide_char_size Yn 倍幅モードでの文字ステップサイズ buttons BT マウスのボタン数 bit_image_entwining Yo 各ビットイメージ行として渡される数 bit_image_type Yp ビットイメージデバイスのタイプ
以下、文字列ケーパビリティです:
文字列 TCap 記述 変数 コード back_tab bt 後退タブ (P) bell bl 可聴シグナル (ベル) (P) carriage_return cr キャリッジリターン (P*) change_scroll_region cs 領域を行 #1 から行 #2 までに変更 (P) clear_all_tabs ct 全タブストップをクリア (P) clear_screen cl 画面を消去しカーソルをホームに移動 (P*) clr_eol ce 行末までクリア (P) clr_eos cd 画面末までクリア (P*) column_address ch 絶対指定での水平位置 #1 (P) command_character CC 端末がプロトタイプで設定可能なコマンド文字 cursor_address cm 行 #1 桁 #2 に移動 cursor_down do 1 行下に移動 cursor_home ho カーソルをホームに移動 cursor_invisible vi カーソルを見えなくする cursor_left le 1 つ左に移動 cursor_mem_address CM メモリ相対のカーソル位置指定 cursor_normal ve 通常のカーソル表示にする (cursor_invisible/cursor_visible の無効化) cursor_right nd 1 つ右に移動 cursor_to_ll ll 最終行の最初の桁 cursor_up up 1 行上に移動 cursor_visible vs カーソルを非常に見易くする delete_character dc 文字削除 (P*) delete_line dl 行削除 (P*) dis_status_line ds ステータス行を無効にする down_half_line hd 半行下に移動 enter_alt_charset_mode as 別の文字セット開始 (P) enter_blink_mode mb 点滅オン enter_bold_mode md ボールド (さらに明るい) モードオン enter_ca_mode ti cursor_address を使用するプログラムを開始 する文字列 enter_delete_mode dm 削除モードへ入る enter_dim_mode mh 半輝度モードオン enter_insert_mode im 挿入モードへ入る enter_secure_mode mk ブランクモードオン (文字が見えません) enter_protected_mode mp 保護モードオン enter_reverse_mode mr 反転表示モードオン enter_standout_mode so 強調表示モード開始 enter_underline_mode us 下線モード開始 erase_chars ec #1 個文字を削除 (P) exit_alt_charset_mode ae 別の文字セット終了 (P) exit_attribute_mode me 全属性をオフ exit_ca_mode te cup 使用のプログラムを終了する文字列 exit_delete_mode ed 削除モード終了 exit_insert_mode ei 挿入モードから抜ける exit_standout_mode se 強調表示モードから抜ける exit_underline_mode ue 下線モードから抜ける flash_screen vb 可視ベル (カーソルは、移動しません) form_feed ff ハードコピー端末でのページ排出 (P*) from_status_line fs ステータス行からの復帰 init_1string i1 初期化文字列 init_2string is 初期化文字列 init_3string i3 初期化文字列 init_file if 初期化ファイルの名前 insert_character ic 文字挿入 (P) insert_line al 行挿入 (P*) insert_padding ip 挿入された文字の後にパディングを挿入 key_backspace kb backspace キー key_catab ka clear-all-tabs キー key_clear kC clear-screen または erase キー key_ctab kt clear-tab キー key_dc kD delete-character キー key_dl kL delete-line キー key_down kd down-arrow キー key_eic kM 挿入モードで mir や smir により送られる key_eol kE clear-to-end-of-line キー key_eos kS clear-to-end-of-screen キー key_f0 k0 F0 ファンクションキー key_f1 k1 F1 ファンクションキー key_f10 k; F10 ファンクションキー key_f2 k2 F2 ファンクションキー key_f3 k3 F3 ファンクションキー key_f4 k4 F4 ファンクションキー key_f5 k5 F5 ファンクションキー key_f6 k6 F6 ファンクションキー key_f7 k7 F7 ファンクションキー key_f8 k8 F8 ファンクションキー key_f9 k9 F9 ファンクションキー key_home kh home キー key_ic kI insert-character キー key_il kA insert-line キー key_left kl left-arrow キー key_ll kH last-line キー key_npage kN next-page キー key_ppage kP prev-page キー key_right kr right-arrow キー key_sf kF scroll-forward キー key_sr kR scroll-backward キー key_stab kT set-tab キー key_up ku up-arrow キー keypad_local ke 'キーボード送出' モードから抜ける keypad_xmit ks 'キーボード送出' モードに入る lab_f0 l0 非 f0 の時、ファンクションキー f0 のラベル lab_f1 l1 非 f1 の時、ファンクションキー f1 のラベル lab_f10 la 非 f10 の時、ファンクションキー f10 の ラベル lab_f2 l2 非 f2 の時、ファンクションキー f2 のラベル lab_f3 l3 非 f3 の時、ファンクションキー f3 のラベル lab_f4 l4 非 f4 の時、ファンクションキー f4 のラベル lab_f5 l5 非 f5 の時、ファンクションキー f5 のラベル lab_f6 l6 非 f6 の時、ファンクションキー f6 のラベル lab_f7 l7 非 f7 の時、ファンクションキー f7 のラベル lab_f8 l8 非 f8 の時、ファンクションキー f8 のラベル lab_f9 l9 非 f9 の時、ファンクションキー f9 のラベル meta_off mo メタモードオフ meta_on mm メタモードオン (8 ビット目をオン) newline nw 改行 (cr の後に lf が来たように振舞います) pad_char pc パディング文字 (ナルの代り) parm_dch DC #1 文字を削除 (P*) parm_delete_line DL #1 行を削除 (P*) parm_down_cursor DO #1 行下に移動 (P*) parm_ich IC #1 文字を挿入 (P*) parm_index SF #1 行の前進スクロール (P) parm_insert_line AL #1 行を挿入 (P*) parm_left_cursor LE #1 文字左に移動 (P) parm_right_cursor RI #1 文字右に移動 (P*) parm_rindex SR #1 行の後退スクロール (P) parm_up_cursor UP #1 行上に移動 (P*) pkey_key pk 文字列 #2 をタイプする プログラムファンクションキー #1 pkey_local pl 文字列 #2 を実行する プログラムファンクションキー #1 pkey_xmit px 文字列 #2 を転送する プログラムファンクションキー #1 print_screen ps 画面の内容を印字 prtr_off pf プリンタオフ prtr_on po プリンタオン repeat_char rp 文字 #1 を #2 回繰り返す (P*) reset_1string r1 リセット文字列 reset_2string r2 リセット文字列 reset_3string r3 リセット文字列 reset_file rf リセットファイルの名前 restore_cursor rc save_cursor の最後の位置へカーソルを戻す row_address cv 絶対指定での垂直位置 #1 (P) save_cursor sc 現在のカーソル位置を保存 (P) scroll_forward sf テキストを上にスクロール (P) scroll_reverse sr テキストを下にスクロール (P) set_attributes sa ビデオ属性 #1-#9 を定義 (PG9) set_tab st 全ての行において今いる桁にタブを設定 set_window wi 現在のウィンドウを、行 #1-#2 桁 #3-#4 に 設定 tab ta 次の 8 スペースハードウェアタブストップへ タブ to_status_line ts ステータス行へ移動 underline_char uc 文字に下線を引きその後に移動 up_half_line hu 半行上に移動 init_prog iP 初期化プログラムのパス名 key_a1 K1 キーパッドの左上キー key_a3 K3 キーパッドの右上キー key_b2 K2 キーパッドの中央キー key_c1 K4 キーパッドの左下キー key_c3 K5 キーパッドの右下キー prtr_non pO #1 バイトだけプリンタをオンする termcap_init2 i2 2 番目の初期化文字列 termcap_reset rs 端末リセット文字 # # SVr1 のケーパビリティは、ここまでです。 # IBM の terminfo は、ここまでは、SVr4 と同じですが、ここから先は、 # 異なります。 # char_padding rP insert_padding と似ていますが挿入モード時 に使用 acs_chars ac 図形文字セットの組 - def=vt100 plab_norm pn プログラムラベル #1 は、文字列 #2 を表示 key_btab kB back-tab キー enter_xon_mode SX xon/xoff ハンドシェークオン exit_xon_mode RX xon/xoff ハンドシェークオフ enter_am_mode SA 自動マージンオン exit_am_mode RA 自動マージンオフ xon_character XN XON 文字 xoff_character XF XOFF 文字 ena_acs eA 別の文字セットを有効にする label_on LO ソフトラベルオン label_off LF ソフトラベルオフ key_beg @1 begin キー key_cancel @2 cancel キー key_close @3 close キー key_command @4 command キー key_copy @5 copy キー key_create @6 create キー key_end @7 end キー key_enter @8 enter/send キー key_exit @9 exit キー key_find @0 find キー key_help %1 help キー key_mark %2 mark キー key_message %3 message キー key_move %4 move キー key_next %5 next キー key_open %6 open キー key_options %7 options キー key_previous %8 previous キー key_print %9 print キー key_redo %0 redo キー key_reference &1 reference キー key_refresh &2 refresh キー key_replace &3 replace キー key_restart &4 restart キー key_resume &5 resume キー key_save &6 save キー key_suspend &7 suspend キー key_undo &8 undo キー key_sbeg &9 シフト状態の begin キー key_scancel &0 シフト状態の cancel キー key_scommand *1 シフト状態の command キー key_scopy *2 シフト状態の copy キー key_screate *3 シフト状態の create キー key_sdc *4 シフト状態の delete char キー key_sdl *5 シフト状態の delete line キー key_select *6 select キー key_send *7 シフト状態の end キー key_seol *8 シフト状態の end-of-line キー key_sexit *9 シフト状態の exit キー key_sfind *0 シフト状態の find キー key_shelp #1 シフト状態の help キー key_shome #2 シフト状態の home キー key_sic #3 シフト状態の insert char キー key_sleft #4 シフト状態の left キー key_smessage %a シフト状態の message キー key_smove %b シフト状態の move キー key_snext %c シフト状態の next キー key_soptions %d シフト状態の options キー key_sprevious %e シフト状態の previous キー key_sprint %f シフト状態の print キー key_sredo %g シフト状態の redo キー key_sreplace %h シフト状態の replace キー key_sright %i シフト状態の right キー key_srsume %j シフト状態の resume キー key_ssave !1 シフト状態の save キー key_ssuspend !2 シフト状態の suspend キー key_sundo !3 シフト状態の undo キー req_for_input RF 次の入力文字を送る (pty で使用) key_f11 F1 F11 ファンクションキー key_f12 F2 F12 ファンクションキー key_f13 F3 F13 ファンクションキー key_f14 F4 F14 ファンクションキー key_f15 F5 F15 ファンクションキー key_f16 F6 F16 ファンクションキー key_f17 F7 F17 ファンクションキー key_f18 F8 F18 ファンクションキー key_f19 F9 F19 ファンクションキー key_f20 FA F20 ファンクションキー key_f21 FB F21 ファンクションキー key_f22 FC F22 ファンクションキー key_f23 FD F23 ファンクションキー key_f24 FE F24 ファンクションキー key_f25 FF F25 ファンクションキー key_f26 FG F26 ファンクションキー key_f27 FH F27 ファンクションキー key_f28 FI F28 ファンクションキー key_f29 FJ F29 ファンクションキー key_f30 FK F30 ファンクションキー key_f31 FL F31 ファンクションキー key_f32 FM F32 ファンクションキー key_f33 FN F33 ファンクションキー key_f34 FO F34 ファンクションキー key_f35 FP F35 ファンクションキー key_f36 FQ F36 ファンクションキー key_f37 FR F37 ファンクションキー key_f38 FS F38 ファンクションキー key_f39 FT F39 ファンクションキー key_f40 FU F40 ファンクションキー key_f41 FV F41 ファンクションキー key_f42 FW F42 ファンクションキー key_f43 FX F43 ファンクションキー key_f44 FY F44 ファンクションキー key_f45 FZ F45 ファンクションキー key_f46 Fa F46 ファンクションキー key_f47 Fb F47 ファンクションキー key_f48 Fc F48 ファンクションキー key_f49 Fd F49 ファンクションキー key_f50 Fe F50 ファンクションキー key_f51 Ff F51 ファンクションキー key_f52 Fg F52 ファンクションキー key_f53 Fh F53 ファンクションキー key_f54 Fi F54 ファンクションキー key_f55 Fj F55 ファンクションキー key_f56 Fk F56 ファンクションキー key_f57 Fl F57 ファンクションキー key_f58 Fm F58 ファンクションキー key_f59 Fn F59 ファンクションキー key_f60 Fo F60 ファンクションキー key_f61 Fp F61 ファンクションキー key_f62 Fq F62 ファンクションキー key_f63 Fr F63 ファンクションキー clr_bol cb 行頭までクリア clear_margins MC 左右のソフトマージンをクリア set_left_margin ML 左のソフトマージンを設定 set_right_margin MR 右のソフトマージンを設定 label_format Lf ラベルフォーマット set_clock SC 時刻を #1 時 #2 分 #3 秒に設定 display_clock DK 位置 (#1,#2) に時計を表示 remove_clock RC 時計を取り除く create_window CW ウィンドウ #1 を #2, #3 から #4, #5 までと 定義 goto_window WG ウィンドウ #1 に移動 hangup HU 電話をハングアップする dial_phone DI 番号 #1 にダイヤルする quick_dial QD チェックせずに番号 #1 にダイヤルする tone TO タッチトーンダイヤルを選択 pulse PU パルスダイヤルを選択 flash_hook fh スイッチフックをフラッシュする fixed_pause PA 2-3 秒待つ wait_tone WA ダイヤルトーンを待つ user0 u0 ユーザ文字列 #0 user1 u1 ユーザ文字列 #1 user2 u2 ユーザ文字列 #2 user3 u3 ユーザ文字列 #3 user4 u4 ユーザ文字列 #4 user5 u5 ユーザ文字列 #5 user6 u6 ユーザ文字列 #6 user7 u7 ユーザ文字列 #7 user8 u8 ユーザ文字列 #8 user9 u9 ユーザ文字列 #9 # # SVr4 は、以下のケーパビリティを追加してカラーをサポートしました # orig_pair op デフォルトのペアを元の値に戻す orig_colors oc 色のペア全てを元に戻す initialize_color Ic 色 #1 を (#2,#3,#4) に設定 initialize_pair Ip 色のペア #1 を fg=(#2,#3,#4), bg=(#5,#6,#7) に設定 set_color_pair sp 現在の色のペアを #1 に設定 set_foreground Sf 前景色を #1 に設定 set_background Sb 背景色を #1 に設定 # # SVr4 は、以下のケーパビリティを追加してプリンタをサポートしました # change_char_pitch ZA 1 インチあたりの文字数を変更 change_line_pitch ZB 1 インチあたりの行数を変更 change_res_horz ZC 水平解像度を変更 change_res_vert ZD 垂直解像度を変更 define_char ZE 文字を定義 enter_doublewide_mode ZF 倍幅モードに入る enter_draft_quality ZG ドラフト印字モードに入る enter_italics_mode ZH イタリックモードに入る enter_leftward_mode ZI キャリッジの左向き移動開始 enter_micro_mode ZJ マイクロ移動モードに入る enter_near_letter_quality ZK NLQ 印字モードに入る enter_normal_quality ZL 通常品質印字モードに入る enter_shadow_mode ZM シャドウプリントモード開始 enter_subscript_mode ZN 下付き文字モード enter_superscript_mode ZO 上付き文字モード enter_upward_mode ZP キャリッジの上向き移動開始 exit_doublewide_mode ZQ 倍幅印字モード終了 exit_italics_mode ZR イタリックモード終了 exit_leftward_mode ZS 左向き移動モード終了 exit_micro_mode ZT マイクロ移動モード終了 exit_shadow_mode ZU シャドウプリントモード終了 exit_subscript_mode ZV 下付き文字モード終了 exit_superscript_mode ZW 上付き文字モード終了 exit_upward_mode ZX 逆向き文字移動終了 micro_column_address ZY マイクロモードの column_address micro_down ZZ マイクロモードの cursor_down micro_left Za マイクロモードの cursor_left micro_right Zb マイクロモードの cursor_right micro_row_address Zc マイクロモードの row_address micro_up Zd マイクロモードの cursor_up order_of_pins Ze ソフトウェアビットを印字ヘッドピンに あわせる parm_down_micro Zf マイクロモードの parm_down_cursor parm_left_micro Zg マイクロモードの parm_left_cursor parm_right_micro Zh マイクロモードの parm_right_cursor parm_up_micro Zi マイクロモードの parm_up_cursor select_char_set Zj 文字セットの選択 set_bottom_margin Zk 現在の行を下マージンに設定 set_bottom_margin_parm Zl 下マージンを行 #1 または下から #2 行に設定 set_left_margin_parm Zm 左 (右) マージンを桁 #1 (#2) に設定 set_right_margin_parm Zn 右マージンを桁 #1 に設定 set_top_margin Zo 上マージンを現在の行に設定 set_top_margin_parm Zp 上 (下) マージンを行 #1 (#2) に設定 start_bit_image Zq ビットイメージグラフィクスの印刷開始 start_char_set_def Zr 文字セットの定義開始 stop_bit_image Zs ビットイメージグラフィクスの印刷停止 stop_char_set_def Zt 文字セットの定義終了 subscript_characters Zu 下付き文字となりうる文字のリスト superscript_characters Zv 上付き文字となりうる文字のリスト these_cause_cr Zw 印字すると CR となる文字 zero_motion Zx 次の文字表示では移動しない # # 以下の文字列ケーパビリティは、SVr4.0 の term 構造体にありますが、 # マニュアルページには、記述されていません。 # char_set_names Zy 文字セット名のリスト key_mouse Km マウスイベントが発生した mouse_info Mi マウス状態の情報 req_mouse_pos RQ マウス位置の要求 get_mouse Gm curses がボタンイベントを取得すべき set_a_foreground AF ANSI 前景色を設定 set_a_background AB ANSI 背景色を設定 pkey_plab xl 文字列 #2 をタイプし、文字列 #3 を表示する プログラムファンクションキー device_type dv 言語/コードセットサポートの表示 code_set_init ci 複数コードセットシーケンスの初期化 set0_des_seq s0 コードセット 0 へシフト (EUC セット 0, ASCII) set1_des_seq s1 コードセット 1 へシフト set2_des_seq s2 コードセット 2 へシフト set3_des_seq s3 コードセット 3 へシフト set_lr_margin ML 左右マージンをそれぞれ #1, #2 に設定 set_tb_margin MT 上下マージンをそれぞれ #1, #2 に設定 bit_image_repeat Xy ビットイメージセル #1 を #2 回繰り返す bit_image_newline Zz ビットイメージの次の行に移動 bit_image_carriage_return Yv 同一行の先頭に移動 color_names Yw 色 #1 の名前を与える define_bit_image_region Yx 長方形のビットイメージ領域を定義 end_bit_image_region Yy ビットイメージ領域の終了 set_color_band Yz 色リボン #1 に変更 set_page_length YZ ページ長を #1 行に設定 # # SVr4 は、以下のケーパビリティを追加し、直接 PC クローンをサポートしました # display_pc_char S1 PC 文字を表示 enter_pc_charset_mode S2 PC 文字表示モードに入る exit_pc_charset_mode S3 PC 文字表示モード終了 enter_scancode_mode S4 PC スキャンコードモードに入る exit_scancode_mode S5 PC スキャンコードモードから抜ける pc_term_options S6 PC 端末オプション scancode_escape S7 スキャンコードエミュレーションのための エスケープ alt_scancode_esc S8 スキャンコードエミュレーションのための 別のエスケープ # # XSI curses 標準は、以下のケーパビリティを追加しました。 # enter_horizontal_hl_mode Xh 水平ハイライトモードに入る enter_left_hl_mode Xl 左ハイライトモードに入る enter_low_hl_mode Xo 下ハイライトモードに入る enter_right_hl_mode Xr 右ハイライトモードに入る enter_top_hl_mode Xt 上ハイライトモードに入る enter_vertical_hl_mode Xv 垂直ハイライトモードに入る
以下は、廃れた termcap ケーパビリティです。新しいソフトウェアは、どれにも依存しないようにしてください。
ブール値 TCap 記述 変数 コード linefeed_is_newline NL ^J で下に移動 even_parity EP 端末は、偶数パリティを要求 odd_parity OP 端末は、奇数パリティを要求 half_duplex HD 端末は、半 2 重 lower_case_only LC 端末は、小文字のみ持つ upper_case_only UC 端末は、大文字のみ持つ has_hardware_tabs pt ^I で起動される 8 文字タブがある return_does_clr_eol xr リターンは、行をクリアする tek_4025_insert_line xx Tektronix 4025 の insert-line グリッチ backspaces_with_bs bs 左に移動するために ^H を使用 crt_no_scrolling ns crt は、スクロールできない no_correctly_working_cr nc 行頭に行く手段が無い
数値 TCap 記述 変数 コード backspace_delay dB ^H に必要なパディング form_feed_delay dF ^L に必要なパディング horizontal_tab_delay dT ^I に必要なパディング vertical_tab_delay dV ^V に必要なパディング number_of_function_keys kn ファンクションキーの数 carriage_return_delay dC CR に必要なパディング new_line_delay dN LF に必要なパディング
文字列 TCap 記述 変数 コード other_non_function_keys ko 自己にマップされたキーのリスト arrow_key_map ma 矢印キーをマップ memory_lock_above ml 現在の行より上の画面で見える部分のメモリを ロック memory_unlock mu 現在の行より上の画面で見える部分のメモリの ロックを解除 linefeed_if_not_lf nl 下に移動するために使用 backspace_if_not_bs bc ^H でない場合に左に移動
エントリのサンプル
以下のエントリは、Concept-100 について記述しており、本書において termcap ファイル中の最も複雑なエントリの 1 つです。
ca|concept100|c100|concept|c104|concept100-4p|HDS Concept-100:\ :al=3*\E^R:am:bl=^G:cd=16*\E^C:ce=16\E^U:cl=2*^L:cm=\Ea%+ %+ :\ :co#80:.cr=9^M:db:dc=16\E^A:dl=3*\E^B:do=^J:ei=\E\200:eo:im=\E^P:in:\ :ip=16*:is=\EU\Ef\E7\E5\E8\El\ENH\EK\E\200\Eo&\200\Eo\47\E:k1=\E5:\ :k2=\E6:k3=\E7:kb=^h:kd=\E<:ke=\Ex:kh=\E?:kl=\E>:kr=\E=:ks=\EX:\ :ku=\E;:le=^H:li#24:mb=\EC:me=\EN\200:mh=\EE:mi:mk=\EH:mp=\EI:\ :mr=\ED:nd=\E=:pb#9600:rp=0.2*\Er%.%+ :se=\Ed\Ee:sf=^J:so=\EE\ED:\ :.ta=8\t:te=\Ev \200\200\200\200\200\200\Ep\r\n:\ :ti=\EU\Ev 8p\Ep\r:ue=\Eg:ul:up=\E;:us=\EG:\ :vb=\Ek\200\200\200\200\200\200\200\200\200\200\200\200\200\200\EK:\ :ve=\Ew:vs=\EW:vt#8:xn:\ :bs:cr=^M:dC#9:dT#8:nl=^J:ta=^I:pt:
行末文字に\を使用すれば、複数行にエントリを続けることができます。また空のフィールドを含めて可読性を上げることもできます (ある行の最後のフィールドから次の行の最初のフィールドまでです)。コメントは、“#”で始まる行に含めることができます。
ケーパビリティの型
termcap のケーパビリティには、次の 3 種類があります: 特定の機能を端末が持つかどうかを示す、ブール値ケーパビリティ;画面の大きさや他の属性の大きさを与える、数値ケーパビリティ;そして特定の端末操作を行うために使用可能な文字列を与える、文字列ケーパビリティです。全てのケーパビリティが 2 文字のコードを持ちます。例えば、Concept が、 自動マージン (行末に到達すると、自動的にリターンおよびラインフィードする機能) を持つという事実は、ブール値ケーパビリティ am で示されます。それゆえ Concept の記述は、 am を含みます。数値ケーパビリティの後には、文字 `#' が続き、そして値が続きます。上の例では、画面の桁数を示す co は、Concept に対しては、値 `80' を与えます。
最後に、文字列値のケーパビリティ、例えば ce (行末までクリアのシーケンス) は、2 文字のコード、単一の `='、そして次の `:' までの文字列で与えられます。このケーパビリティにおいては、ミリ秒指定の遅延を `=' の後に指定可能です。この場合、残りの文字列が送られた後、パディング文字が tputs(3) により与えられ、この遅延を発生させます。遅延は、`20' のような数値または `3*' のような `*' が続く数値です。 `*' は、この操作により影響を受ける行数に必要なパディングが比例すること、そして指定量は、影響を受ける各行に必要なパディングであることを示します。 (insert-character の場合でも、係数は、影響を受ける 行 数です;ただし、端末が in を持っていてソフトウェアがこれを使用する場合以外は、この値は、常に 1 です。) `*' が指定される時、`3.5' のような形式により 1/10 ミリ秒単位で行あたりの遅延を指定するのが便利な場合があります。 (10 進数 1 桁分のみ許されます。)
多くのエスケープシーケンスが文字列値のケーパビリティで提供されますので、ここでは、容易に制御文字をエンコードできます。 \E は、 ESC 文字にマップし、 ^X は、適切な X に対して control-X にマップし、シーケンス \n \r \t \b \f は、それぞれ、ラインフィード、リターン、タブ、バックスペース、フォームフィードにマップします。最後に、文字は、 \ の後に 3 桁 8 進数として指定可能ですし、 ^ と \ の文字は、 \^ と \\ として与えられます。ケーパビリティ中に : を入れる必要がある場合、 \: とエスケープするか、8 進数で \072 とエスケープする必要があります。文字列ケーパビリティ中に NUL 文字を入れる必要がある場合、 \200 とエンコードする必要があります。 ( termcap を扱うルーチンは、C の文字列を使用し、出力の最上位ビットをかなり遅い段階で取り除くので、 \200 は、 \000 として出力されます。)
個々のケーパビリティをコメントアウトする必要があるかもしれません。その場合には、ケーパビリティ名の前にピリオドを付けます。例えば、例における最初の cr と ta を見てください。
記述の準備
端末記述を準備する最も効果的な方法は、 termcap 中の似た端末の記述を真似し、 vi(1) を使用して部分記述の正しさを確認することにより、徐々に記述を構築するというものです。非常に稀なことですが、端末によっては、 termcap ファイルの記述能力不足や vi(1) のバグが露呈することがありますので注意してください。あなたが新しく作った端末記述を簡単にテストするには、あなたのホームディレクトリに .termcap という名前のファイルとして置き、プログラムが /usr/share/misc/termcap の前にこれを見るようにします。環境変数 TERMPATH をあなたが作成した記述を含む絶対ファイルパス名のリスト (空白もしくはコロンで区切ります) に設定することにより、プログラムは、これらをリスト順に検索し、他は、検索しないようになります。 termcap(3) を参照してください。 TERMCAP 環境変数は、通常 termcap エントリ自身に設定され、プログラム起動時にファイルを読むことを避けます。行挿入に対する適切なパディングを得るためには、 (端末製造元が記述しなかった場合には)、 vi(1) を使用して /etc/passwd を 9600 ボーで編集し、およそ 16 行を画面中央から削除し、それから `u' キーを何度か素早く押すという、厳しいテストを行います。画面がぐちゃぐちゃになった場合には、通常は、より多くのパディングが必要となります。同様のテストを文字挿入に対しても行うことが可能です。
基本ケーパビリティ
表示の各行の桁数は、 co 数値ケーパビリティで与えられます。表示が CRT になされる場合、画面の行数は、 li ケーパビリティで与えられます。カーソルが右マージンに到達した時に、表示が次の行の先頭に回り込む場合には、 am ケーパビリティを持ちます。端末が画面をクリア可能な場合には、そうするためのコードが cl 文字列ケーパビリティで与えられます。端末が (上書きされる文字の位置をクリアするのではなく) 上打ちする場合には、 os ケーパビリティがあります。端末がプリント端末でソフトコピーユニットを持たない場合、 hc と os を指定してください。 ( os があてはまるのは、Tektronix 4010 シリーズのようなストレージスコープ端末、ハードコピー端末、そして APL 端末です。) カーソルを直ちに左端に移動するためのコードがある場合には、それを cr で指定します。 (通常これは、復帰文字(キャリッジリターン)、すなわち ^M です。) 可聴シグナル (ベルやビープなど) を発生するコードがある場合には、それを bl で指定します。(バックスペースのように) カーソルを 1 つ左に移動するコードがある場合には、このケーパビリティは、 le で指定します。同様に、右上下に移動するコードは、それぞれ nd, up, do で指定します。これらの ローカルなカーソル移動 は、カーソルが通過する文字を変化させてはなりません;例えば、通常は、“nd= ”を使用してはなりません。例外は、端末が os ケーパビリティを持つ場合です。この理由は、通過する文字を空白が消してしまうからです。
ここで非常に重要なポイントは、 termcap でエンコードされるローカルなカーソル移動は、 CRT 表示の左端および上端では、動作が未定義だということです。ローカルなカーソル移動を使用している場合には、左端においては、 bw が与えられているのでなければ、プログラムは、バックスペースを試してはなりませんし、上端においては、上への移動を試してはなりません。
テキストを上にスクロールするには、プログラムは、画面左下角に移動して、 sf (インデックス) 文字列を送ります。テキストを下にスクロールするには、プログラムは、画面左上角に移動して、 sr (逆インデックス) 文字列を送ります。期待された角以外での sf および sr 文字列の動作は、未定義です。パラメータ化したバージョンのスクロールシーケンスは、 SF および SR で、 sf および sr と同様の意味ですが、 1 つパラメータを取ってその行数だけスクロールさせるというところが違います。これらもまた、画面上の適切な角以外での動作は、未定義です。
am ケーパビリティは、画面の右端にてテキスト出力を行った時に、カーソルがその位置に留まるか否かを示します。しかしこれは、最後の桁での nd を必ずしも意味しません。左端らかの左向きのローカル移動は、 bw が与えられている場合のみ定義されます;この場合、左端における le は、直前行の右端へ移動します。例えば、画面の周囲に箱を描画する場合に便利です。端末が切り替え選択式の自動マージンを持つ場合には、 termcap 記述は、通常この機能、 すなわち am がオンであることを仮定します。次行の先頭桁への移動コマンドを端末が持つ場合、このコマンドは、 nw (改行) で与えることができます。これを使用して現在の行の残りの部分をクリアすることができますので、正しく動作する CR および LF を持たない場合には、これらの代りに使用することができます。
これらの機能で、ハードコピー端末および“ガラスの tty”端末を記述するためには、十分です。 Teletype model 33 は、以下のように記述されています
T3|tty33|33|tty|Teletype model 33:\ :bl=^G:co#72:cr=^M:do=^J:hc:os:
また Lear Siegler ADM-3 は、以下のように記述されています
l3|adm3|3|LSI ADM-3:\ :am:bl=^G:cl=^Z:co#80:cr=^M:do=^J:le=^H:li#24:sf=^J:
パラメータ化された文字列
カーソル位置設定などのパラメータを要求する文字列は、パラメータ化された文字列ケーパビリティで記述します。ここでは、 printf(3) に似たエスケープ %x を使用します。その他の文字は、変更されずに渡されます。例えば、カーソル位置設定のために cm ケーパビリティが与えられますが、これは、2 つのパラメータを使用します: それぞれ移動先の行と桁です。 (行と桁は、0 から番号が振られ、ユーザから見える物理画面を参照します。見えないメモリは、参照しません。端末がメモリ相対のカーソル位置設定機能を持つ場合には、 CM という似たケーパビリティで指定されます。)% エンコードは、以下の意味を持ちます:
%% | `%' を出力 |
%d | 値を printf(3) %d のように出力 |
%2 | 値を printf(3) %2d のように出力 |
%3 | 値を printf(3) %3d のように出力 |
%. | 値を printf(3) %c のように出力 |
%+ x | 値に x を加え、% を実行 |
%> xy | もし値 > x の場合には、 y を加える。無出力 |
%r | 2 つのパラメータの順を逆転。無出力 |
%i | 1 増加。無出力 |
%n | 全パラメータに関した 0140 との排他的論理和 (Datamedia 2500) |
%B | BCD (16*(value/10)) + (value%10) を実行。無出力 |
%D | 逆コーディング (value - 2*(value%16))。無出力 (Delta Data) |
Hewlett-Packard 2645 において第 3 行第 12 桁に移動する場合、“\E&a12c03Y”を送って 6 ミリ秒パディングする必要があります。行と桁の関係がここでは、逆であり、行および桁は、2 桁の整数として送ることに注意してください。よって、この端末の cm ケーパビリティは、“ cm=6\E&%r%2c%2Y
”となります。
Datamedia 2500 は、現在の行と桁を“%.”でバイナリエンコードして送る必要があります。“%.”を使用する端末は、カーソルをバックスペース ( le) させる機能と画面上で 1 行カーソルを上に移動 ( up) する機能を持つ必要があります。なぜなら \n, ^D, \r を送出するのは、常に安全というわけではなく、システムがこれらに変更を加えたり捨てたりする場合があるからです。 ( termcap を使用するプログラムは、タブが展開されないように端末モードを設定し、 \t が安全に送られるようにしなければなりません。これは、Ann Arbor 4080 において本質的です。)
最後の例は、Lear Siegler ADM-3a です。この端末では、行と桁は、空白文字で与えますので、“ cm=\E=%+ %+
”となります。
絶対値での行や桁のカーソル位置設定は、単一パラメータのケーパビリティ ch (水平絶対位置) および cv (垂直絶対位置) で与えられます。一般的な 2 パラメータシーケンスよりもこれらを使用する方が短かいことがあり (Hewlett-Packard 2645 の場合)、 cm よりも好んで使用され得ます。パラメータ化されたローカル移動 ( 例えば 、 n 個右に移動) の機能がある場合、 DO, LE, RI, UP として与えられます。これらは、単一パラメータを取り、いくつ移動するのかを示します。第 1 に Tektronix 4025 のような cm を持たない端末で有用です。
カーソル移動
端末が高速にカーソルをホーム (画面の左上角) に移動する方法がある場合、これは、 ho として与えられます。同様に、高速に左下角に移動する方法は、 ll で与えられます;これには、ホームポジションにて up を使用することによる上への移動を含みますが、プログラム自身がこれを実行してはなりません (ただし ll が実行する場合を除く)。なぜならプログラムは、ホームポジションでの上への移動の効果を仮定できないからです。) ホームポジションは、カーソル位置 (0,0) と同じです: 画面の左上角であり、メモリは、無関係です。 (それゆえ、Hewlett-Packard 端末の“\EH”シーケンスは、 ho としては、使用できません。)領域クリア
端末が、現在位置に留まりつつ、現在位置から行末までクリア可能である場合には、この機能は、 ce として与えられます。端末が、現在位置から描画終端までをクリア可能である場合には、この機能は、 cd として与えられます。 cd は、行の最初の桁においてのみ起動可能です。 (よって、真の cd が利用できない場合、この機能は、多数の行を削除する要求にてシミュレート可能です。)行の挿入および削除
端末が、カーソルがいる行の前に新しい空行を開けることが可能な場合、この機能は、 al として与えられます;この機能を起動するには、行頭にいる必要があります。行を開けると、カーソルは、新しい空行の左端に移動します。端末が、カーソルがいる行を削除可能な場合、この機能は、 dl として与えられます;この機能を起動するには、削除する行の先頭にいる必要があります。 1 つパラメータを取ってその数だけ行を挿入および削除する al および dl の変形は、 AL および DL として与えられます。端末が、(VT100 のように) 設定可能なスクロール領域を持つ場合、設定コマンドは、2 つのパラメータを取る cs ケーパビリティとして記述されます: パラメータは、スクロール領域の上端行および下端行です。なんとしたことか、このコマンド使用後のカーソル位置は、未定義です。行挿入および行削除の効果は、このコマンドを使用することで得られます— sc および rc (カーソルの保存と回復) コマンドもまた有用です。画面の上端または下端における行挿入は、真の行挿入/削除を持たない多くの端末において、 sr または sf にて実行できます。また、真の行挿入/削除機能を持つ端末においても、こちらの方が高速な場合が多いです。メモリの一部を、全コマンドが影響するウィンドウとして定義する能力を端末が持つ場合、これは、パラメータ化された文字列 wi で与えられます。 4 つのパラメータは、順番に、メモリにおける開始行・終了行・開始桁・終了桁です。 (この terminfo(5) ケーパビリティは、完全性のために記述しています。 termcap を使用するプログラムは、この機能を使ってはいないでしょう。)
端末が画面より上方の表示メモリを保存する場合、 da ケーパビリティが与えられます;下方の表示メモリが保存される場合、 db が与えられます。これらの機能は、行削除やスクロールにより非空白行が下から現れることや、 sr による後退スクロールにより非空白行が上から現れることを示します。
文字の挿入および削除
termcap にて記述可能な文字挿入および削除に関しては、基本的に 2 種類のインテリジェント端末があります。最も一般的な文字の挿入/削除操作は、現在行の文字にのみ作用し、行末までの文字を厳格にシフトします。他の端末、Concept-100 や Perkin Elmer Owl では、タイプされた空白とタイプされたものではない空白を区別し、挿入/削除に際するシフトは、画面上のタイプされたものではない空白にのみ適用されます。タイプされたものではない空白は、削除されるか、 2 つのタイプされたものではない空白に拡張されます。使用している端末の種類を判別するためには、画面をクリアし、カーソル移動を含めてテキストをタイプします。例えば“abc def
”を、“abc”と“def”の間でローカルなカーソル移動 (空白ではありません) を行ってタイプします。その後、カーソルを“abc”の前に移動し、端末を挿入モードにします。そこで文字をタイプすると行の残りの部分が厳密にシフトされ終端から出て行く場合、あなたの端末は、空白とタイプされたものではない位置とを区別しません。もし挿入に際して、“abc”が“def”のところまでシフトし、それから一緒に現在の行の終端まで移動して次行に移動する場合、あなたの端末は、2 番目の種類の端末を持っていますので、“ナル挿入”を表すケーパビリティ
in を指定します。これら 2 つは、論理的に別の属性 (1 行
対 複数行の挿入モードでタイプされたものではない空白を特別に扱う) ですが、挿入モードをどちらかで記述できない端末を我々は、見たことがありません。
termcap エントリは、挿入モードを持つ端末も、単純なシーケンスを送って現在の行に空白位置を開ける端末も、両方記述可能です。 im は、挿入モードに入るシーケンスを表します。 ei は、挿入モードから抜けるシーケンスを表します。そして、 ic は、挿入する文字を送る直前に送る必要があるシーケンスを表します。真の挿入モードを持つほとんどの端末は、 ic を指定しません;一方、画面上の位置を開けるためにシーケンスを使用する端末は、これを指定する必要があります。 (端末が両方の機能を持つ場合には、挿入モードは、通常 ic が好まれます。実際に両機能を組み合せる必要がある端末の場合以外は、両方を指定しないでください。) 挿入後にパディングが必要な場合、ミリ秒数にて ip (文字列オプション) で与えます。 1 文字挿入後に送る必要があるシーケンスもまた ip で指定します。 `挿入モード' である必要があり、なおかつ挿入文字の前に特別のコードを送る必要がある端末の場合、 im/ ei と ic が与えられ、両方を使用します。単一のパラメータ n を取る IC ケーパビリティは、 ic の効果を n 回繰り返します。
挿入モード中で同一行の文字を削除するために、時々移動が必要になります ( 例えば 挿入位置の後にタブがある場合)。挿入モード中で移動を許す端末の場合、ケーパビリティ mi を指定して、このような場合の挿入を高速化できます。 mi を省略しても速度に影響するだけです。端末によっては、(特に Datamedia のものでは)、挿入モードの動作方法の理由により、 mi を指定してはなりません。
最後に、1 文字削除のために dc を指定可能です。 DC は、単一パラメータ n を取り n 文字削除します。そして削除モードは、 dm および ed で、削除モードの入り方および抜け方を示します (削除モードとは、 dc が動作するために端末がいるべきモードです)。
ハイライト・下線・可視ベル
端末が 1 つまたはそれ以上の種類の表示属性を持つ場合、これらは、様々な方法で表現されていることでしょう。 1 つの表示形式を 強調表示モード として選択してください。このモードは、十分高いコントラストで見易く、エラーメッセージや注意を引く表示のハイライトに適します。 (選択可能ならば、反転表示に半分の明るさ、もしくは反転表示のみが良いでしょう。) 強調表示モードに入るシーケンスおよび出るシーケンスは、それぞれ so および se で与えられます。 TVI 912 や Teleray 1061 のように、強調表示モードの出入りのコードが、 1 つ 2 つの空白やごみの文字を画面上に残す場合、 sg を指定して、何文字残されるのかを指定してください。下線の開始および下線の終了は、それぞれ us および ue で指定します。下線モード変更によるごみは、 sg 同様 ug として指定します。 Microterm Mime のように、現在位置の文字に下線を引き、カーソルをひとつ右の位置に移動するコードを端末が持つ場合、このコードは、 uc で指定します。
その他もろもろのハイライトモードに入るケーパビリティには、 mb (点滅)、 md (ボールドまたは更に明るい)、 mh (暗いまたは半輝度)、 mk (空白または見えないテキスト)、 mp (保護状態)、 mr (反転表示)、 me ( 全て の属性モードをオフ)、 as (別の文字セットモードに入る) そして ae (別の文字セットモードから抜ける) があります。これらのモードを単独でオンにした場合、他のモードをオフにする場合もありますし、オフにしない場合もあります。
モードの任意の組み合わせを設定するシーケンスがある場合、これは、9 個のパラメータを取る sa (属性設定) で指定します。それぞれのパラメータは、0 または 1 であり、対応する属性がオンまたはオフされます。 9 個のパラメータは、順番に次の通りです: 強調表示・下線・反転・点滅・暗い・ボールド・空白・保護・別の文字セット。全モードが sa によりサポートされている必要は無く、サポートされているものに対応するコマンドが存在することのみ必要です。 ( termcap を使用するプログラムは、このケーパビリティをサポートしていないでしょう。このケーパビリティは、 terminfo(5) との互換性のために定義しています。)
各文字セルに追加された属性ビットを管理するのではなく、“マジッククッキー”グリッチ ( sg および ug) を持つ端末では、描画アルゴリズムに影響するモード設定シーケンスを受信した時に、特別な“クッキー”または“ごみ文字”を画面に残します。
Hewlett-Packard 2621 のように、新しい行へ移動した時やカーソル位置を設定した時に自動的に強調表示モードから抜ける端末があります。このような端末においては、強調表示モードを使用するプログラムは、カーソル移動や改行送信前に強調表示モードから抜ける必要があります。このような問題が無い端末では、 ms ケーパビリティが存在し、このオーバヘッドが不要であることを示します。
エラーを静かに伝えるために端末が画面をフラッシュさせる方法を持つ場合 (ベルの代りです)、これは、 vb として指定します;この機能は、カーソルを移動してはなりません。
カーソルが最下行になくても、通常時よりも見易くする必要がある場合 (例えば、点滅していない下線を、より見つけ易いブロックや点滅する下線に変更する場合)、このシーケンスは、 vs で与えます。カーソルを完全に見えなくする方法がある場合には、これは、 vi ケーパビリティで指定します。これらのモードの効果を打ち消すケーパビリティ ve も指定する必要があります。
(特別なコードを必要とせずに) 下線を引かれた文字を端末が正しく表示する場合、しかもその機能が上打ちではない場合、このケーパビリティを ul で示します。上打ちを空白にて消去可能な場合、これは、 eo で示します。
キーパッド
キーを押した時にコードを送出するキーパッドを持つ端末では、この情報を指定することができます。キーパッドがローカルモードにおいてのみ動作する端末は、扱うことができないことに注意してください。 (これは、例えば Hewlett-Packard 2621 でシフト状態でないキーにあてはまります)。キーコードの送出 / 非送出をキーパッドに設定できる場合は、設定のためのコードは、 ks および ke で指定します。そうでない場合は、キーパッドは、常にコードを送出するものと仮定されます。 left-arrow, right-arrow, up-arrow, down-arrow, home のキーで送出されるコードは、それぞれ kl, kr, ku, kd, kh, で指定します。 f0, f1, ..., f9 のようなファンクションキーがある場合には、これらのキーが送るコードは、 k0, k1, ..., k9 で指定します。これらのキーがデフォルトの f0 から f9 以外のラベルを持つ場合、このラベルは、 l0, l1, ..., l9 で指定します。その他の特殊キーで送出されるコードは、次のように与えられます: kH (ホームダウン)、 kb (バックスペース)、 ka (全タブクリア)、 kt (この桁のタブストップをクリア)、 kC (画面クリアまたは消去)、 kD (文字削除)、 kL (行削除)、 kM (挿入モードから抜ける)、 kE (行末までクリア)、 kS (画面の終りまでクリア)、 kI (文字挿入または挿入モードに入る)、 kA (行挿入)、 kN (次のページ)、 kP (前のページ)、 kF (前進/下降スクロール)、 kR (後退/上昇スクロール)、 kT (この桁にタブストップを設定)。更に、キーパッドが 4 つの矢印キーを含む 3 × 3 のキー配列を持つ場合、他の 5 つのキーは、 K1, K2, K3, K4, K5 で指定します。 3 × 3 の方向パッドが必要な時、これらのキーは、有用です。以前“その他”のファンクションキーを記述するために使用された、廃れた ko ケーパビリティは、上記のケーパビリティにより完全に置き換えられました。 ma エントリは、また、端末の矢印キーが 1 文字矢印キーであることを示すためにも使用されます。これは、廃れた方法ですが、 vi のバージョン 2 で未だ使用されています。メモリ制約の理由で、このコマンドを使用しているミニコンピュータがあるでしょう。このフィールドは、 kl, kr, ku, kd, kh と冗長関係にあります。このフィールドは、2 文字の複数グループから構成されます。各グループにおいては、最初の文字は、矢印キーが何を送るかを表し、 2 番目の文字は、対応する vi のコマンドを表します。コマンドは、 h が kl に、 j が kd に、 k が ku に、 l が kr に、 H が kh に対応します。例えば Mime では、“ ma=^Hh^Kj^Zk^Xl
”となり、矢印キーの left (^H), down (^K), up (^Z), down (^X) を示します。 (Mime には、home キーはありません。)
タブおよび初期化
これらのケーパビリティを使用するプログラムを実行する時に端末を特別なモードにすることが必要な場合、このモードに入るコードおよび出るコードは、 ti と te で指定します。これが関係あるのは、例えば Concept のようなメモリページを複数持つ端末です。端末がメモリ相対のカーソル位置設定のみ持ち、画面相対のカーソル位置設定を持たない場合には、画面サイズのウィンドウに表示を固定し、カーソル位置設定が正しく動作するようにする必要があります。これは、Tektronix 4025 でも使用され、 ti は、コマンド文字を termcap が使うように設定します。他のケーパビリティとしては、端末初期化文字列 is や、長い初期化文字列を格納するファイル名 if があります。これらの文字列は、端末を termcap 記述と矛盾がないモードに設定するものと期待されています。これらは、通常、ユーザがログインするたびに、 tset(1) プログラムによって端末に送られます。印字は、次の順に行われます: まず is;次に ct と st によるタブ設定;そして最後に if です。 ( terminfo(5) では、 is の代りに i1-i2 を使用し、プログラム iP を実行し、他の初期化の後 i3 を印字します。) まったくわけがわからない状態から回復するためのよりハードなリセットシーケンスの組が、類推できる名前 rs および rf で与えられます。これらの文字列は、端末がはまった状態に陥いった時に使用される reset(1) プログラムにより出力されます。 ( terminfo(5) は、 rs の代りに r1-r3 を使用します。) これらのコマンドが画面上を騒がせ、なおかつログイン時に必ずしも必要ではない場合に限り、通常これらは、 rs および rf に格納します。例えば、VT100 を 80 桁モードに設定するコマンドは、普通に考えると is の一部に入れるでしょうが、これは、画面に困ったゴミを生じさせますし、端末は、普段既に 80 桁モードですので、実際は、入れる必要はありません。
端末がハードウェアタブを持つ場合、次のタブストップまで進むコマンドは、 ta で指定します (通常は、 ^I です)。直前のタブストップへ左向きに移動する“バックタブ”コマンドは、 bt で指定します。タブストップが端末には、送られずに計算機により展開されることを端末ドライバモードが示す場合、 ta や bt が存在するとしても、プログラムでこれらを使用しないというのが約束になっています。なぜなら、ユーザがタブストップを正しく設定していないかもしれないからです。端末電源オン時に各 n 位置ごとにハードウェアタブが初期設定される端末の場合、数値パラメータ it を使用し、タブストップ間隔を示します。このコマンドは、通常 tset(1) コマンドが使用し、ドライバモードをハードウェアタブ展開に設定するか否か、およびタブストップを設定するか否かを決定します。端末が不揮発性メモリにタブストップを保存可能な場合、 termcap 記述は、タブストップが正しく設定されるものと仮定できます。
タブストップを設定およびクリアするコマンドが存在する場合、これらのコマンドは、 ct (全タブストップをクリア) および st (全ての行における現在の桁にタブストップを設定) で指定します。タブ設定のために、ここで示した方法より複雑なシーケンスが必要な場合、このシーケンスは、 is や if で指定します。
遅延
端末ドライバのパディングを制御するケーパビリティもあります。これらのケーパビリティは、第 1 にハードコピー端末にて必要とされ、 tset(1) プログラムにより端末ドライバのモードを適切に設定するために使用されます。ケーパビリティ cr, sf, le, ff, ta に埋め込まれる遅延は、端末ドライバの適切な遅延ビットを設定する効果があります。 pb (パディングボーレート) を指定した場合、この値より低いボーレートにおいては、これらの値は、無視されます。 4.2BSD の tset(1) では、遅延は、別の数値ケーパビリティ dC, dN, dB, dF, dT で与えられます。その他
端末が NUL (0) 文字以外のパディング文字を必要とする場合には、 pc で指定します。 pc 文字列の最初の文字のみが使用されます。端末がカーソル位置を保存および回復するコマンドを持つ場合には、これらは、 sc および rc で指定します。
通常は、ソフトウェアが使用しない追加の“ステータス行”を端末が持つ場合、この事実を示すことができます。ステータス行が最下行の下に追加の行として見える場合には、ケーパビリティ hs を指定します。ステータス行の位置への移動およびステータス行からの復帰のための特別な文字列は、 ts および fs で指定します。 ( ts の前にカーソルが存在した位置に、 fs は、カーソルを戻す必要があります。必要ならば、 sc および rc の文字列を ts および fs に含めてこの効果を得ることができます。) ケーパビリティ ts は、ステータス行の何桁目にカーソルが移動すべきを示すパラメータを 1 つ取ります。エスケープシーケンスや他の特殊コマンド、例えばタブがステータス行でも動作するならば、フラグ es を指定します。ステータス行をオフにする (または内容を消去する) 文字列は、 ds で指定します。通常、ステータス行の幅は、画面の他の部分、 すなわち co と同じであると仮定されます。 (端末が行全体の使用を許さない等の理由で) ステータス行の幅が異なる場合には、その幅を桁数で数値パラメータ ws で指定します。
端末が半行上下に移動可能な場合、 hu (半行上) および hd (半行下) で指定します。これは、ハードコピー端末で上付き文字および下付き文字を使用するために有用です。ハードコピー端末がページを排出して次のページに移動 (フォームフィード) することができる場合、これは、 ff (通常 ^L です) で指定します。
指定した文字を指定した回数繰り返すコマンド (同一文字を何度も送出する時間を節約します) がある場合、パラメータ化された文字列 rp で指定します。最初のパラメータは、繰り返される文字であり、2 番目のパラメータは、繰り返す回数です。 (これは、 terminfo(5) の機能であり、 termcap を使用するプログラムは、この機能をサポートしていないでしょう。)
Tektronix 4025 のように端末が設定可能なコマンド文字を持つ場合、 CC で指定します。全ケーパビリティで使用されるプロトタイプコマンド文字が選択されます。この文字を識別するために、この文字が CC ケーパビリティにより与えられます。次の約束をサポートしている UNIX システムがあります: すなわち、 CC 環境変数を検査し、もし設定されている場合には、プロトタイプ文字を環境変数で設定されているものと置き換えるという約束です。このように CC 環境変数を使用することは、 make(1) との衝突が発生しますので、非常に悪い考えです。
特定の既知の端末を表現するものではない端末記述、 switch, dialup, patch, network では、 gn (一般) ケーパビリティを設定し、端末に対してどのように話しかければよいのか分らないとプログラムが文句を言えるようにします。 (このケーパビリティは、エスケープシーケンスが既知である 仮想 端末記述にはあてはまりません。
端末が xoff/xon (DC3/DC1) ハンドシェークを使用してフロー制御する場合、 xo を指定します。コストに関するより良い判定を可能とするために依然としてパディング情報を指定する必要がありますが、実際にパディング文字が送出されるということはありません。
シフトキーのように動作し、送出される文字の 8 ビット目をセットする“メタキー”を端末が備える場合、 km を設定してこの事実を示すことができます。これが指定されない場合は、ソフトウェアは、8 ビット目は、パリティであると仮定し、通常これをクリアしてしまいます。“メタモード”をオンおよびオフする文字列が存在する場合、これらは、 mm および mo で指定します。
画面 1 枚分より多くのメモリ行を端末が備える場合、メモリの行数を lm で指定します。明示的に値 0 を指定すると、行数は、固定ではないものの画面分より多くのメモリがあることを示します。
UNIX システムの仮想端末プロトコルにてサポートされる端末である場合、端末番号は、 vt で与えられます。
端末に接続された外部プリンタを制御するメディアコピー文字列は、次のように与えられます。すなわち ps: 画面内容の印字; pf: プリンタオフ;および po: プリンタオンです。プリンタオン時には、端末に送られる全てのテキストは、プリンタに送られます。プリンタオン時に端末画面にもテキストが表示されるか否かは未定義です。このバリエーションである pO は、単一のパラメータを取り、パラメータ値で指定される文字数だけプリンタをオンにし、その後プリンタをオフにします。このパラメータは、255 を越えてはなりません。 pf を含む全テキストは、 pO が有効である間、透過的にプリンタに渡されます。
プログラムファンクションキーへの文字列は、 pk, pl, px で指定します。これらの文字列は、次の 2 つのパラメータを取ります: それぞれ、プログラム対象のファンクションキー番号 (0 から 9 まで) と、プログラムの文字列です。この範囲外のファンクションキー番号を指定すると、ここでは、定義できないキーを端末依存の方式でプログラムするかもしれません。これらのケーパビリティの差異は、 pk は、指定したキーを押すと指定した文字列をユーザがタイプしたものとして扱うものであり; pl は、ローカルモードの端末にて指定した文字列を実行させるものであり; px は、指定した文字列を計算機に送出させるものである点です。不幸なことに、 termcap では、文字列パラメータが定義されていないため、 terminfo(5) のみがこれらのケーパビリティをサポートします。
xterm(1) 端末エミュレータについて、 less(1) または more(1) のようなページャ (pager) または vi(1) のようたエディタが存在するとき、 FreeBSD の伝統的な振る舞いは、プログラムが終了したのち、画面をクリア しません 。利用者が画面をクリアするのを好むなら、利用者が直接または例として使用できる termcap ファイルにこのケーパビリティを追加する多くの“xterm-clear”エントリがあります。
グリッチと不良
文字 `~' を表示できない Hazeltine 端末は、 hz を指定する必要があります。nc ケーパビリティは、現在廃れていますが、以前は、Datamedia 端末を表すために使用していました。この端末では、キャリッジリターンに対して \r \n をエコーし、続くラインフィードを無視します。
Concept のように am による折り返しの直後のラインフィードを無視する端末では、 xn を指定します。
強調表示を取り除くために (単に通常のテキストを上書きするだけで済まず) ce が必要な場合、 xs を指定します。
タブによって移動された全ての文字が空白にされてしまう Teleray 端末では、 xt (破壊的なタブ) を指定する必要があります。このグリッチは、“マジッククッキー”の先頭にカーソル位置を設定できないことと、強調表示を消すためには、行削除と行挿入が必要であることも表現します。
ESC や ^C の文字を正しく送出できない Beehive Superbee は、 xb を指定し、“f1”キーが ESC として使用され、“f2”キーが ^C として使用されることを示します。 (特定の Superbee のみがこの問題を持ち、これは、 ROM に依存します。)
ある特定の端末に他の問題がある場合、 xx の形式のケーパビリティを追加することにより正しく動作するようにしても構いません。
似た端末
2 つの非常によく似た端末がある場合、例外はあるもののもう一方にそっくりであると、一方を定義することができます。文字列ケーパビリティ tc には、似た端末の名前を与えます。このケーパビリティは、 最後 である必要があり、組み合わせたエントリの長さは、1024 を越えてはなりません。 tc の前に指定したケーパビリティは、 tc により呼び出される端末タイプの記述に優先します。ケーパビリティのキャンセルのためには、 xx@ を tc の呼び出しの左に置きます。 xx は、キャンセルされるケーパビリティです。例えば、エントリ
hn|2621-nl:ks@:ke@:tc=2621:
は、ビジュアルモードでファンクションキーラベルをオンにしないために ks と ke のケーパビリティを持たない“2621-nl”を定義します。端末の種々のモードやユーザの種々のプリファレンスを記述するために有用です。
関連ファイル
- /usr/share/misc/termcap
- 端末記述を格納するファイル
- /usr/share/misc/termcap.db
- 端末記述を格納するハッシュデータベースファイル ( cap_mkdb(1) を参照)。
関連項目
cap_mkdb(1), ex(1), more(1), tset(1), ul(1), vi(1), xterm(1), ncurses(3), printf(3), termcap(3), term(5)警告とバグ
注: termcap の機能は、 AT&T System V UNIX Release 2.0 の terminfo(5) に置き換えられました。“廃れた”とされるケーパビリティを使用していなければ、移行のための苦痛は、比較的少ないです。現在、行数および桁数は、 termcap エントリに格納するものと同様に、カーネルが格納します。現在、ほとんどのプログラムは、カーネルの情報を最初に使用します;このファイルに記述されている情報は、カーネルが情報を持たない時のみ使用されます。
vi(1) プログラムは、文字列ケーパビリティには、256 文字しか許しませんが、 termlib(3) のルーチンは、このバッファの溢れをチェックしません。単一エントリの総計の長さは、1024 を越えてはなりません (エスケープされた改行は、除きます)。
全てのプログラムが全てのエントリをサポートしているわけではありません。
歴史
termcap ファイルフォーマットは、 3BSD で登場しました。December 13, 2009 | FreeBSD |