EN JA
TERMCAP(5)
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 として出力されます。)

個々のケーパビリティをコメントアウトする必要があるかもしれません。その場合には、ケーパビリティ名の前にピリオドを付けます。例えば、例における最初の crta を見てください。

記述の準備

端末記述を準備する最も効果的な方法は、 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 ケーパビリティがあります。端末がプリント端末でソフトコピーユニットを持たない場合、 hcos を指定してください。 ( 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/ eiic が与えられ、両方を使用します。単一のパラメータ 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 のコマンドを表します。コマンドは、 hkl に、 jkd に、 kku に、 lkr に、 Hkh に対応します。例えば Mime では、“ ma=^Hh^Kj^Zk^Xl”となり、矢印キーの left (^H), down (^K), up (^Z), down (^X) を示します。 (Mime には、home キーはありません。)

タブおよび初期化

これらのケーパビリティを使用するプログラムを実行する時に端末を特別なモードにすることが必要な場合、このモードに入るコードおよび出るコードは、 tite で指定します。これが関係あるのは、例えば Concept のようなメモリページを複数持つ端末です。端末がメモリ相対のカーソル位置設定のみ持ち、画面相対のカーソル位置設定を持たない場合には、画面サイズのウィンドウに表示を固定し、カーソル位置設定が正しく動作するようにする必要があります。これは、Tektronix 4025 でも使用され、 ti は、コマンド文字を termcap が使うように設定します。

他のケーパビリティとしては、端末初期化文字列 is や、長い初期化文字列を格納するファイル名 if があります。これらの文字列は、端末を termcap 記述と矛盾がないモードに設定するものと期待されています。これらは、通常、ユーザがログインするたびに、 tset(1) プログラムによって端末に送られます。印字は、次の順に行われます: まず is;次に ctst によるタブ設定;そして最後に 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 で指定します。タブストップが端末には、送られずに計算機により展開されることを端末ドライバモードが示す場合、 tabt が存在するとしても、プログラムでこれらを使用しないというのが約束になっています。なぜなら、ユーザがタブストップを正しく設定していないかもしれないからです。端末電源オン時に各 n 位置ごとにハードウェアタブが初期設定される端末の場合、数値パラメータ it を使用し、タブストップ間隔を示します。このコマンドは、通常 tset(1) コマンドが使用し、ドライバモードをハードウェアタブ展開に設定するか否か、およびタブストップを設定するか否かを決定します。端末が不揮発性メモリにタブストップを保存可能な場合、 termcap 記述は、タブストップが正しく設定されるものと仮定できます。

タブストップを設定およびクリアするコマンドが存在する場合、これらのコマンドは、 ct (全タブストップをクリア) および st (全ての行における現在の桁にタブストップを設定) で指定します。タブ設定のために、ここで示した方法より複雑なシーケンスが必要な場合、このシーケンスは、 isif で指定します。

遅延

端末ドライバのパディングを制御するケーパビリティもあります。これらのケーパビリティは、第 1 にハードコピー端末にて必要とされ、 tset(1) プログラムにより端末ドライバのモードを適切に設定するために使用されます。ケーパビリティ cr, sf, le, ff, ta に埋め込まれる遅延は、端末ドライバの適切な遅延ビットを設定する効果があります。 pb (パディングボーレート) を指定した場合、この値より低いボーレートにおいては、これらの値は、無視されます。 4.2BSDtset(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:

は、ビジュアルモードでファンクションキーラベルをオンにしないために kske のケーパビリティを持たない“2621-nl”を定義します。端末の種々のモードやユーザの種々のプリファレンスを記述するために有用です。

関連ファイル

/usr/share/misc/termcap
端末記述を格納するファイル
/usr/share/misc/termcap.db
端末記述を格納するハッシュデータベースファイル ( cap_mkdb(1) を参照)。

警告とバグ

: termcap の機能は、 AT&T System V UNIX Release 2.0 の terminfo(5) に置き換えられました。“廃れた”とされるケーパビリティを使用していなければ、移行のための苦痛は、比較的少ないです。

現在、行数および桁数は、 termcap エントリに格納するものと同様に、カーネルが格納します。現在、ほとんどのプログラムは、カーネルの情報を最初に使用します;このファイルに記述されている情報は、カーネルが情報を持たない時のみ使用されます。

vi(1) プログラムは、文字列ケーパビリティには、256 文字しか許しませんが、 termlib(3) のルーチンは、このバッファの溢れをチェックしません。単一エントリの総計の長さは、1024 を越えてはなりません (エスケープされた改行は、除きます)。

全てのプログラムが全てのエントリをサポートしているわけではありません。

歴史

termcap ファイルフォーマットは、 3BSD で登場しました。
December 13, 2009 FreeBSD