[AquaSKK] cbnm, Component Bundle Name
閉塞感漂う Panther 対応ですが、ちょっとだけ進展がありましたので、そのご報告。
謎の cbnm
MacUIM のリソースファイル MUIM.r にあって、AquaSKK の BIM.r にないものがあります。それは、
data 'cbnm' (0) { ... };
という箇所です。以前から気になってはいたのですが、ADC や Google で調べても手がかりがつかめなかったため、放置していました。
で、今回たまたま BIM.r にこの部分をコピペしてビルド & インストールしたところ、なんと AquaSKK でもアイコンが表示されるようになったのです!!! *1
一体全体、cbnm は何者なんでしょうか?
DeRez でダンプする
早速 Developer ツール付属の DeRez を使って「ことえり」のリソースをダンプしてみました。
% /Developer/Tools/DeRez Kotoeri.rsrc -useDF ... data 'cbnm' (0, "Component Bundle Name", sysheap, purgeable) { $"1163 6F6D 2E61 7070 6C65 2E4B 6F74 6F65" /* .com.apple.Kotoe */ $"7269" /* ri */ }; ...
どうやら cbnm は「Component Bundle Name」の略で、Info.plist の CFBundleIdentifier を 16進で表現したもののようです。しかし、先頭が 0x11 で始まっているのが不可解です。これは制御文字の DC1 です。文字列の長さを表わしているわけでもないようだし、MacUIM も 0x11 で始まってます。固定のプレフィクスなんでしょうか?
cbnm の役割
今までにわかったことを材料に、cbnm の役割を推測してみます。
- コンポーネントマネージャがリソースファイルをロードする
- もし cbnm が定義されていれば、その値を取得する
- cbnm と一致する CFBundleIdentifier を持つ Info.plist をロードする
- Info.plist に定義されている入力モードとアイコンが表示される
では確認してみます。MacUIM のリソースから cbnm をコメントアウトすると... 見事アイコンがメニューに表示されなくなりました!!! Tiger では必要のないものですが、Panther では大切な働きをしていたわけですね。いずれにしても、cbnm なしではアイコン表示できないことがわかったので、BIM.r にも定義を追加することにしました。
AquaSKK のアイコン表示は?
% echo .org.ccm-software.AquaSKKInputMethod|od -x
の結果を先頭だけ 0x11 に変えて BIM.r に取り込んでみたのですが、駄目でした。自分でも期待していただけに、とても悔しい。でも、あともう少しというところまで来ていると思うので、引き続き調査してみます。それにしても、なんとも泥臭いやり方ですね。残念なことですが、開発者向けドキュメントの充実度に関しては圧倒的に Windows が勝っていると感じます。なんとか改善して欲しいところです。
ASCII/U.S. 問題
2 ちゃんねるの AquaSKK スレで ASCII モード関連の要望がたくさんありました。ASCII モードが U.S. とは違うために、いろいろと不便が生じてます。こちらもどうすれば幸せになれるか、考えてみます。
*1:この時点では、MacUIM 側の Info.plist を読んで表示していたわけですが...