mfiler2 続き
日本語ファイル名の表示が少しおかしいです。濁音、半濁音が2文字に分かれて表示されています。
iTerm + mfiler2
「シ」+「"」の2文字に分かれて表示されており、文字幅カウントは半角4文字分。見た目が悪い以外は特に問題無し。
で、Unicodeって良く知らないんですけど、これは合成文字とかいうやつに違いない、と思って調べてみました。
- UTF-8-MAC - MacWiki
- http://homepage1.nifty.com/nomenclator/unicode/normalization.htm
- Netatalk and Samba
うーん、かなり複雑みたいですけど、要は、
- NFC / 正規結合 -- 「が」はUCS2の段階で2バイト
- NFD / 正規分解 -- 「が」はUCS2の段階で「か」+「"」の4バイト
ということですかね。そして、MacOSXのファイルシステムのエンコーディングはNFDで正規化されている、と。
- iTerm
- screen
- curses
- mfiler2
のどこに問題があるのかわかりませんけど、とりあえず mfiler2 でファイル名のエンコーディング変換に iconv を呼んでいる箇所を utf8-mac にすればNFCにしてくれるっぽいので、それで良いような気がします。暇を見てやってみます。
まだ少ししか触っていないですけど、他は特に問題無さそうです。
即席パッチ
diff -ru mfiler2-2.6.8c/command.cpp mfiler2-2.6.8b.patched/command.cpp --- mfiler2-2.6.8c/command.cpp 2007-03-14 16:17:43.000000000 +0900 +++ mfiler2-2.6.8b.patched/command.cpp 2007-03-19 23:19:29.000000000 +0900 @@ -628,6 +628,9 @@ else if(strcmp(RSTRING(name)->ptr, "utf8") == 0) { gKanjiCodeFileName = kUtf8; } + else if(strcmp(RSTRING(name)->ptr, "utf8-mac") == 0) { + gKanjiCodeFileName = kUtf8Mac; + } else if(strcmp(RSTRING(name)->ptr, "eucjp") == 0) { gKanjiCodeFileName = kEucjp; } diff -ru mfiler2-2.6.8c/minato_lib/minato_curses.c mfiler2-2.6.8b.patched/minato_lib/minato_curses.c --- mfiler2-2.6.8c/minato_lib/minato_curses.c 2007-03-15 20:00:39.000000000 +0900 +++ mfiler2-2.6.8b.patched/minato_lib/minato_curses.c 2007-03-19 23:23:12.000000000 +0900 @@ -49,10 +49,10 @@ vector_obj* gKeyMap = NULL; // キーマップの動的配列 -char gKanjiCodeName[3][256]; // 漢字コードの名前 +char gKanjiCodeName[4][256]; // 漢字コードの名前 -char* gKanjiCodeString[4] = { - "eucjp", "sjis", "utf8", "unknown" +char* gKanjiCodeString[5] = { + "eucjp", "sjis", "utf8", "utf8-mac", "unknown" }; //////////////////////////////////////////////////////////////////////////////// @@ -144,6 +144,7 @@ strcpy(gKanjiCodeName[kEucjp], "eucjp"); strcpy(gKanjiCodeName[kSjis], "sjis"); strcpy(gKanjiCodeName[kUtf8], "utf-8"); + strcpy(gKanjiCodeName[kUtf8Mac], "utf-8-mac"); } //////////////////////////////////////////////////////////////////////////////// diff -ru mfiler2-2.6.8c/minato_lib/minato_curses.h mfiler2-2.6.8b.patched/minato_lib/minato_curses.h --- mfiler2-2.6.8c/minato_lib/minato_curses.h 2007-03-15 20:01:00.000000000 +0900 +++ mfiler2-2.6.8b.patched/minato_lib/minato_curses.h 2007-03-19 23:20:30.000000000 +0900 @@ -74,11 +74,11 @@ int mkbuf_exist(); // キーボードバッファが存在すれば真を返す /// 漢字関連関数 /////////////////////////////////////////////////////////////////////////// -enum eKanjiCode { kEucjp, kSjis, kUtf8, kUnknown }; // 漢字コード +enum eKanjiCode { kEucjp, kSjis, kUtf8, kUtf8Mac, kUnknown }; // 漢字コード extern enum eKanjiCode gKanjiCode; -extern char* gKanjiCodeString[4]; +extern char* gKanjiCodeString[5]; -extern char gKanjiCodeName[3][256]; // 漢字コードの名前 +extern char gKanjiCodeName[4][256]; // 漢字コードの名前 extern int is_kanji(unsigned char c); // 引数が漢字一バイト目かどうか extern int is_hankaku(unsigned char c); // 引数が半角文字一バイト目かどうか
$ echo 'option_kanjicode_filename "utf8-mac"' >>~/.mfiler
ファイル名の表示は直りましたけど、一行編集に入るとダメでした。結構難しいかも。