zshのバージョン4.3.0以降ではMULTIBYTEがサポートされましたので、EUCがうまく扱えるか(とくにEUC-JPのファイル名を扱えるかどうか)を試してみました。
うちの環境はこんな感じです。
- OS: NetBSD 3.0
- arch: i386
試したのは、zsh-4.3.2 です。
まずはmakeします。
% tar zxvf zsh-4.3.2.tar.gz
% cd zsh-4.3.2
% ./configure --prefix=/usr/local --enable-multibyte
% gmake
% su
# gmake install
新しいzshを起動します。
% /usr/local/bin/zsh
./Etc/FAQ 5.3によると、LANGを設定すればマルチバイトが扱えるらしいので、LANGをEUC-JPに設定します。
% export LANG=ja_JP.eucJP
日本語ファイル名を補完したりしてみましたが、うまく動作しているようです。
確認したのは、以下の機能です。
TAB expand-or-complete
Ctrl-F forward-char
Ctrl-B backward-char
Ctrl-H backward-delete-char
Ctrl-D delete-char-or-list
これらが使えればまずは通常の使用にたえるかなと思います。
ところが、入力ができません。
たとえば、
% echo 漢字
と入力しようとして、「漢字」を確定させると
% echo
のようになってしまいます。Debian GNU/Linux 上のzsh-4.3.2ではこの問題は再現せずちゃんとEUC-JP文字列が入力できています。
そこでNetBSD上でデバッガを使ってしらべてみたところ、Src/Zle/zle_main.c:getrestchar()のなかでmbrtowc()に問題がありそうというところまでわかりました。以下コード概要です。
getrestchar(int inchar)
{
char c = inchar;
- snip -
static mbstate_t mbs;
- snip -
size_t cnt = mbrtowc(