MacVim でのインライン入力のフォント幅を直す

MacVim で日本語入力をする際に入力幅がおかしくなるという問題を直す ad-hoc なパッチを作成してみました.
インライン入力部のフォントを強制的に Osaka-Mono にしただけですが(笑).

こんな感じのパッチを PrivatePortfile/MacVim に取り込んでもらえるとありがたいです... > splhack の中の人 様

diff --git a/src/MacVim/MMTextView.m b/src/MacVim/MMTextView.m
index bd2609f..7c21014 100644
--- a/src/MacVim/MMTextView.m
+++ b/src/MacVim/MMTextView.m
@@ -742,7 +742,8 @@ enum {
     }
 
     if (text && [text length] > 0) {
-        [markedTextField setFont:[ts font]];
+        //[markedTextField setFont:[ts font]];
+        [markedTextField setFont:[NSFont fontWithName:@"Osaka-Mono" size:[[ts font] pointSize]]];
         if ([text isKindOfClass:[NSAttributedString class]])
             [markedTextField setAttributedStringValue:text];
         else

Amazonに生駒市立図書館と奈良市立図書館の蔵書検索リンクを追加する

おとなの図書館活用術【Amazon編】 - ITmedia エンタープライズを読み、こりゃ便利そうだと思ったので、公開されているスクリプトを元にして僕がよく利用する図書館用のものを作ってみました。

奈良市立図書館用
生駒市立図書館用

yukkie’s noteさんやnatu_nの日記さんのところで公開されていたスクリプトを参考にしました。感謝します。

インライン入力可能な Mac 用 Vim 7.0 (2)

すみません,前に作った dmg は runtime 関係が入っていませんでした.
その問題を直して新しく dmg を作り http://iplab.naist.jp/member/mio-su/dist/vim/vim7.0.109-inline0.2.dmg に置いておきましたので,ご利用ください.

あと,czk-htn さんが Panther 用のバイナリを作ろうとしていることもあり,うちの vim source tree からインライン入力部分を抽出してみました.http://iplab.naist.jp/member/mio-su/dist/vim/inline0.2.diff に置いておきます.オリジナルのソースに Kaoriya vim 7.0 パッチを当て,このパッチを当ててください.

最後に,うちの環境だけかもしれませんが,Terminal から open コマンドで Vim.app を起動した場合はメニューが文字化けしないのに,ドックから起動すると文字化けする場合は,~/.gvimrc に

if has('mac')
source $VIMRUNTIME/delmenu.vim
set langmenu=ja_jp.utf-8
source $VIMRUNTIME/menu.vim
endif

のように書くと,ドックから起動しても化けなくなります.お試しあれ.

インライン入力可能な Mac 用 Vim 7.0

僕は Mac でのエディタは Vim 6.4 Kaoriya 版をメインに使っていたりします.
で,そろそろ 7.0 に移行したいなぁと思って調べてみると,どうやら Mac 向けの Kaoriya 版 7.0 は無く,有志さんが 6.4 用のパッチを7.0 に当てて公開しているみたいなのですが,それらでは IM でインライン日本語入力が出来ないらしいじゃないですか! (インライン入力でなければ出来ます)


これは不便だということでちょっと原因を調べてみることにしました.7.0 のソースに 7.0 の Kaoriya パッチ(今はWinのみサポート)と 6.4 用の Kaoriya パッチから IM のインライン入力っぽい箇所を切り出したものをあてて,gui_mac.c あたりの TSM 関係の関数に適当に当たりを付けて gdb で調査することしばし.


分かったことは以下の通り.(あまり自信はないんだけど)

  • インライン入力で日本語を入力すると,ShiftJIS の文字列が tsmproc_post() に渡り,add_to_input_buf_csi() が呼ばれ,そのままインプットバッファに入る.
  • インライン入力ではなく日本語を入力すると,UTF-16? の文字列が gui_mac_doKeyEventCarbon() 内の GetEventParameter() に渡り,Vim の内部エンコーディング(たぶん UTF-8?) に変換され,add_to_input_buf() が呼ばれ,インプットバッファに.


よって,tsmproc_post() 内に渡った ShiftJIS の文字列を UTF-8 に変換してやればいいんじゃないか,と考えました.とっても ad-hoc だけど,とりあえず使えればいいや,ということで.


実際に変換するコードを入れてみたら,なんとなくうまくいったような気がします.
ただし,
set termencoding=utf-8
すると表示が文字化けして
set termencoding=japan
だと化けないという謎が・・・.暇ができたらもうちょっと深く調べよう.


Universal Binarydmzhttp://iplab.naist.jp/member/mio-su/dist/vim/vim7.0-inline0.1.dmg に置いておきました.ただし,Intel Mac では未テストです.不都合等ありましたら教えてください.
今回僕が追加した変換部分だけのパッチはそのうち作ります.