naan studio BeOS Multilingual Projectでは、MuTerminal、およびその上で動作する多国語対応コマンドが常に正しく実行できるよう、Be, Inc.が正式対応するまでの間、独自のlocaleシステムを構築することを考えています。ただし、localeシステムと言っても、OSレベルの話ではなく、あくまでもTerminalアプリケーション上での話です。また、私はUNIXのlocale環境を実際に使用したことはありませんし(本で得る知識のみ)、日本語以外の言語のことはさしたる知識も持ちあわせていません。これらの事象に詳しい方のアドバイスを頂ければ幸いです。
もし、コマンドがある特定の文字コードにのみしか対応していない場合(たとえば、SJISは扱えるが、UTF8やEUCは扱えない、など)、そのコマンドが実行される前にMuTerminalの文字コードの設定が正しく行われている必要があります。これは、端末エミュレータの性格上、MuTerminalが文字コードを自動判別したり、設定されている文字コード以外の文字コードが出力されたときに正しくエラーチェックするのが困難だからです。
mt_setコマンドは、MuTerminalとメッセージ通信することによって、MuTerminalに現在設定されている文字コードの情報を取得したり、あるいは文字コードを設定したりすることが出来ます。mt_setコマンドをシェルスクリプトで使用することによって、特定の文字コードにしか対応していないコマンドの使用時や、ホストへのログイン時に、正しく動作するようにできます。
例として、MuTerminalからTelnet経由でNiftyServeへログインするシェルスクリプトを以下に示します。
#!/bin/sh # } |
このように、mt_setコマンドを使用することによって、ユーザーは文字コードを意識することなく、常にシェル上のコマンド(アプリケーション)が正しい動作を行うようにすることができます。
mt_setに現在実装されているオプションは次の通りです。
-a MuTerminalから取得できるすべての情報を表示 -c 現在設定されている文字コードを表示 -h ヘルプを表示 -s code 文字コードをcodeに設定する -v 実行されている端末がMuTerminalかどうかを判定
version 1.2から、MuTerminalとの通信を行う関数をライブラリ化しました。私製コマンドなどで、MuTerminalから現在の文字コードを取得したり、変更したい場合に利用して下さい。mt_setコマンドもこのライブラリを用いてMuTerminalと通信しています。なお、通信用ライブラリは、~/config/libにインストールされます。
現在、ライブラリに登録されている関数は次の通りです。
int check_MuTerminal (void) | 実行端末がMuTerminalがどうかをチェックする。MuTerminalなら0、それ以外は-1がリターンする。 |
int get_coding (void) | 現在のMuTerminalのコーディングを返す。エラーなら-1が返ってくる。 |
int set_coding (int32 coding) | MuTerminalのコーディングをcodingにする。 |
利用する場合はmuterm.hをインクルードしたうえで、コンパイルオプションに-lmutermを加えます。関数から返ってくる整数値とコーディングとの対応はmuterm.hを参考にして下さい。
環境変数LANGは、UNIXのフォーマットをそのまま採用して、
国_言語_文字コード
というフォーマットで現在の設定を保存します。日本語EUCならば
ja_JP.ujis
になります。言語情報は現在のところ未実装です。