# 漢字コードの自動制御

制御シーケンスで送受信漢字コードを変更出来るようにする

## 機能

TTXKcodeChange プラグインを入れると、リモート側から制御シーケンスを使用して送受信漢字コードの設定が変更出来るようになります。
以下の制御シーケンスをサポートしています。

<OSC>5963;Pt<ST>
<OSC>5963;Pt<BEL>
  設定用シーケンス
  Ptは Key=Value の形式で指定し、;で区切る事で複数指定する事もできます。現在のところ、以下のKeyが使えます。

      KT  -- 送信漢字コード
             Valueとして SJIS, EUC, JIS, UTF8 を受け付けます。
      KR  -- 受信漢字コード
             Valueとして SJIS, EUC, JIS, UTF8, UTF8m を受け付けます。

<OSC>5964;Pt<ST>
<OSC>5964;Pt<BEL>
  問い合わせ用シーケンス
  Ptには問い合わせる設定を指定します。;で区切る事で複数指定する事もできます。問い合わせに対して、以下の形式の応答を返します。

      Key=Value;[Key=Value;...]

## 使用例

ログインシェルがzshの時の設定例です。

    [.zloginの記述]
    echo -n "\e]5964;kt;kr\a"              # KT/KRの設定を問い合わせる
    read -t 1 TT_ORG_KCODE                 # 応答を待つ(タイムアウト:1秒)
    if [ $? -eq 0 ]; then
      echo -n "\e]5963;kr=euc;kt=euc\a"    # 応答があったなら設定を変更する
    fi

    [.zlogoutの記述]
    # .zloginで漢字コードの設定が保存されていたら、その設定に戻す。
    if [ " ${TT_ORG_KCODE}" != " " ]; then
      echo -n "\e]5963;${TT_ORG_KCODE}\a"
    fi

## 解説

受信データのフックのサンプルです。
受信データを監視し、対応している制御シーケンスだった場合は設定の変更を行います。
問い合わせに対する応答は、送信バッファを直接書き換えるという少々強引な方法を取っています。
このプラグインを改造すれば、他の設定も制御シーケンスで変更出来るようになるかもしれません。

## バグ

- 制御シーケンスのパース部分は少々いい加減です。
- 使用している制御シーケンスのパラメータ番号の選び方が安易です。
- 将来的にこの機能はTera Term本体に組み込まれるかもしれません。
- シリアル接続で使用するには、Tera Term 4.60以降が必要です。
- 送信バッファの空きが少ない場合、問い合わせに対する応答が途中で切れる場合があります。