2008年1月9日水曜日

MacVim インラインパッチ

google code project で公開されている MacVim,見た目が cocoa, carbon vim に比べて OS X 的
というかすごく洗練されていて素晴らしいんだけど,
インライン周りに難があって常用する気になれてなかった...

問題は,二つあって,
1. インライン入力時に新たに開かれるポップアップウィンドウがどうも半角処理されているっぽい.
2. インライン入力時でも,Ctrl-{Keydown} が vim のコマンドとして受け付けられてしまう.

1 の方は,まぁ見にくいというだけでなんとか耐えられるけど,2の方は...
IM入力時は Ctrl-{p,i},Ctrl-{n,o} で変換文節の伸縮,通常時は tab 移動とかをしたい僕としては致命的な問題.

ということで,二つを解決する簡単なハックをしてみた.
本当は,インライン入力をポップアップウィンドウじゃなく,インライン描画にしたいんだけど,
結構手がかかりそうなので,とりあえずペンディング.

MacVim プロジェクトのページは,ここ.http://code.google.com/p/macvim/
パッチはこんな感じ.

--- src/MacVim/MMTextView.m-    2008-01-09 09:22:35.000000000 +0900
+++ src/MacVim/MMTextView.m     2008-01-09 09:35:37.000000000 +0900
@@ -184,6 +184,13 @@
     // TODO: Figure out a way to disable Cocoa key bindings entirely, without
     // affecting input management.
     if ([event modifierFlags] & NSControlKeyMask) {
+        SInt32 currentScript = GetScriptManagerVariable(smKeyScript);
+        SInt32 systemScript = GetScriptManagerVariable(smSysScript);
+        if (currentScript != smRoman && currentScript == systemScript)
+        {
+            [super keyDown:event];
+               return;
+               }
         NSString *unmod = [event charactersIgnoringModifiers];
         if ([unmod length] == 1 && [unmod characterAtIndex:0] <= 0x7f
                                 && [unmod characterAtIndex:0] >= 0x60) {
@@ -403,7 +410,7 @@
     }
 
     if (text && [text length] > 0) {
-        [markedTextField setFont:[ts font]];
+        //[markedTextField setFont:[ts font]];
         if ([text isKindOfClass:[NSAttributedString class]])
             [markedTextField setAttributedStringValue:text];
         else

1 件のコメント:

Stefan Eletzhofer さんのコメント...

Could you please forward these patches to the MacVIM list and have a (english, please) explanation
attached what these patches do, exactly?

Thanks,
seletz