TeraTerm+c3270端末エミュレータでカラー表示とHomeキーとEndキーを使えるようにする

# 3270端末エミュレータをカラー表示にする。
TeraTermでTERM=vt220にしてc3270端末エミュレータを起動すると、黒背景に黄色文字でメインフレームっぽくないです。

![Image.png](https://qiita-image-store.s3.amazonaws.com/0/76786/aed5cd64-b57b-3ec3-036a-9ff132a8f374.png)

せっかくなので、メインフレーム風のカラー表示にします。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/76786/3da082e1-6222-6bba-45c4-1707903c4660.png)

![Image.png](https://qiita-image-store.s3.amazonaws.com/0/76786/b9cf079f-e83e-c3f5-b4d9-6dcf2d14a405.png)


![Image.png](https://qiita-image-store.s3.amazonaws.com/0/76786/79d4db0c-514a-4e2a-9809-ccc40342c56b.png)


画面をカラー表示するために、terminfoデータベースのエントリのxtermを使います。
単純にexport TERM=xtermだけでもc3270端末エミュレータはカラーになるのですが、このままだと、HomeキーとEndキーが使えません。

TeraTermはvt220キーシーケンスを送りますので、HomeキーはFindキー、EndキーはSelectキーと読み替える必要があります。

ですので、xtermでHomeキーとEndキーを使えるようにするためにカスタマイズして、xterm-myというエントリをterminfoデータベースに作りたいと思います。

## 「infocmp」コマンドでterminfoデータベースのエントリの vt220をテキストファイル化して、FindキーとSelectキーらしきところを探します。
```bash:
[hercules@localhost ~]$ pwd
/home/hercules
[hercules@localhost ~]$ infocmp vt220
[hercules@localhost ~]$ infocmp vt220
#       Reconstructed via infocmp from file: /usr/share/terminfo/v/vt220
vt220|vt200|dec vt220,
        am, mc5i, mir, msgr, xenl, xon,
        cols#80, it#8, lines#24, vt#3,
        acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=^M,
        csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
        cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
        cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
        dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
        ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E)0,
        flash=\E[?5h$<200/>\E[?5l, home=\E[H, ht=^I, hts=\EH,
        ich=\E[%p1%d@, if=/usr/share/tabset/vt100,
        il=\E[%p1%dL, il1=\E[L, ind=\ED,
        is2=\E[?7h\E[>\E[?1h\E F\E[?4l, kbs=^H, kcub1=\E[D,
        kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kf1=\EOP, kf10=\E[21~,
        kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
        kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\EOQ,
        kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf6=\E[17~, kf7=\E[18~,
        kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~,
        kich1=\E[2~, knp=\E[6~, kpp=\E[5~, krdo=\E[29~, kslt=\E[4~,
        lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, mc0=\E[i, mc4=\E[4i,
        mc5=\E[5i, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM,
        rmacs=\E(B$<4>, rmam=\E[?7l, rmir=\E[4l, rmso=\E[27m,
        rmul=\E[24m, rs1=\E[?3l, sc=\E7,
        sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;$<2>,
        sgr0=\E[m\E(B, smacs=\E(0$<2>, smam=\E[?7h, smir=\E[4h,
        smso=\E[7m, smul=\E[4m, tbc=\E[3g,
```

つぎのような記述があると思います。これが、Homeキー(vt220的にはFindキー)、Endキー(vt220的にはSelectキー)に該当します。

```text:
kfnd=\E[1~   ---> Findキー、つまりHomeキー
kslt=\E[4~   ---> Selectキー、つまりSelectキー
```

## terminfoデータベースのエントリのxtermにkfndやksltがあるか調べます。
無いはずです。

```bash:
[hercules@localhost ~]$ infocmp xterm | grep kfnd
[hercules@localhost ~]$ infocmp xterm | grep kslt
```

## terminfoデータベースのエントリのxtermをカスタマイズします。
ファンクションキーの一行前に「kfnd=\E[1~, kslt=\E[4~,」を追記します。

```bash:
[hercules@localhost ~]$ infocmp xterm > xterm_org.src
[hercules@localhost ~]$ cp xterm_org.src xterm_my.src
[hercules@localhost ~]$ vi xterm_my.src
              kdch1=\E[3~, kend=\EOF, kent=\EOM, kf1=\EOP, kf10=\E[21~,
              kfnd=\E[1~, kslt=\E[4~,
              kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q,

[hercules@localhost ~]$ diff xterm_org.src xterm_my.src
2c2
< xterm|xterm terminal emulator (X Window System),
---
> xterm_my|My_xterm terminal emulator (X Window System),
20a21
>         kfnd=\E[1~, kslt=\E[4~,
```

## 「tic」コマンドでterminfoデータベースに「xterm_my」を登録します。

```bash:
$ su [sudo可能なユーザ]
$ sudo tic xterm_my.src
```

## 環境変数を「xterm_my」にしてHercules＆MVSを起動してc3270で接続していみます。

[hercules@localhost ~]$ vi .bashrc
export TERM=xterm_my

冒頭のカラー表示になります。