2008-01-25

vim 7.1.241

vim 7.1.241に追従しました。

http://lapangan.net/darwinports/index.php?PrivatePortfile%2FVim

searchまわりにさらに変更が入ったのでmigemoまわりをあわせて変更(kaoriyaさんにメールで報告済み)しました。


+ruby でbuildできないという件を調べてみたのですが、手元では再現できませんでした。なんでしょう。


MacVimは何やら興味深い更新があったのですが、実際にinstallしてみるとあんまり変わってない印象です。

http://lapangan.net/darwinports/index.php?PrivatePortfile%2FMacVim

local ports

/opt/local/etc/macports/sources.conf

# To prevent a source from synchronizing when `port sync` is used,
# append [nosync] to the end of the line
# Example: file:///Users/landonf/misc/MacPorts/dports [nosync]


知らなかった。

subversionからcheckoutしててsyncに失敗してたので、毎度コメントアウトしてた。[nosync]付けた。

2008-01-19

vim 7.1.235

vim 7.1.235 に追従しました。

http://lapangan.net/darwinports/index.php?PrivatePortfile%2FVim

cf.sourceforge.jp にログインできない件を対応していただきましたので(感謝)、バイナリも更新しました。

http://sourceforge.jp/forum/forum.php?forum_id=13839

2008-01-14

vim 7.1.228

vim 7.1.228 に追従。

http://lapangan.net/darwinports/index.php?PrivatePortfile%2FVim

パッチのラッシュ。落ち着いたかな?


cf.sourceforge.jp の OS X にログインできない問題は放置されっぱなし... なのでバイナリはおあずけです。

2008-01-09

不思議なこと解決 iTerm編

[ 1867339 ] decode_utf8 always looks the lead byte for getting reqbyte

表示文字列がUTF-8だった場合、文字の先頭バイトを見て、それが何バイト分の文字(「あ」は3byte、「×」は2byteとか)なのか判定するとこがあるのですが、そこが常に文字列の先頭バイトを見てるので、3byte,2byte混在文字列(「○×」とか)においておかしな挙動になるわけですね。

PrivatePortfileもpatchが取込まれるまでの暫定処置として更新しました。

http://lapangan.net/darwinports/index.php?PrivatePortfile%2FiTerm


ターミナルもiTermも option + y でバックスラッシュが入力されるのは何がどうなってるんだろう。

あとLeopardでiTermが落ちる現象は未確認です。Tigerでも急に落ちる時は落ちます...

vim 7.1.211

vim 7.1.211 に追従。

http://lapangan.net/darwinports/index.php?PrivatePortfile%2FVim


以前のパッチファイルを置き換える 7.1.126ne なんてファイルができてましたが、101-200 patch も出てたのでややこしいことにならなくてよかった。

2008-01-08

不思議なこと1つ解決

http://homepage.mac.com/nand/macosx/emacs_jis_keyboard.html

ことえりの環境設定で「JISキーボードの¥キーで入力する文字」を「\(バックスラッシュ)」にするのが良さそう。


ことえりじゃない環境であれば、KeyRemap4MacBook で変換するのがよいと思います(要改造ですかね)。


(追記 2008/1/10)
kimurawさんとこにCocoaアプリでの切り替え方法が掲載されてます。
http://kimuraw.txt-nifty.com/d/2008/01/swp_yen_bslash.html


英語キーボードでも option 押しながら入力するとASCII以外が打てることに気づきました。

option + y で簡単に ¥ が打てます。

¥¥¥¥¥¥¥¥


vim 7.1.211 に追従。searchitの引数がかわってkaoriyaパッチあてに失敗するので一時的に対策。

2008-01-07

不思議なこと

OS Xで日本語キーボードの円マーク(¥マーク)を押すと何が入力されるんでしょうか?

ASCIIコードの範囲なら 0x5C (バックスラッシュ) なんかな。
UTF-8まで広げると 0xC2A5 (¥) か。

うーむ。アプリによったり、なんらかのコンテキストによる? vimならfileencode見てどっちを入力するか決めるとか。

勝手にIME ONになってUTF-8のコードが入力されるという挙動も考えられなくはないか。


そもそもバックスラッシュキーは存在するのか? windows用日本語キーボードでバックスラッシュキーと円マークキーが両方あるのを見たような気がする...

http://pc.watch.impress.co.jp/docs/2006/0519/apple1_28.jpg

なかった...


http://araistudy.g.hatena.ne.jp/czk-htn/20080106/1199575618

○×[0x0a]

の次の行がずれるという挙動でした。

×[0x0a]

は、ずれませんでした。

でも

×○[0x0a]

は、ずれます。ということは

〇±

も、ずれるんじゃないでしょうか。ずれました。


ということで、UTF-8で


C2B1 ±
C397 ×
C3B7 ÷


などの2byte文字と3byte文字が混じると次の行の表示先頭位置がずれるようです。

ずれるというか、前の行の表示位置を引きずってる感じですね。改行時の表示位置が初期化されないルートがありそう。

2008-01-05

辞書その4

Leopardの辞書.appはWikipediaも検索できるんですが、ダウンロード済みのものを検索するわけじゃなくて、実際にWikipediaで検索してるみたい。

漁ってみると、/Applications/Dictionary.app/Contents/Resources/Wikipedia.privatedictionary/にURLやらクエリの出し方、結果の取り出し方、サポート用Javascriptなどが置いてあります。

同じようにやればいいんじゃ

と思いながら眺めてみても、どうやらDictionaryの実行ファイル中から決めうちで呼び出してるっぽいので、改造はできても、追加は難しそう。


class-dump(MacPortsにも入ってます)でDictionaryを見てみるとWikipedia用の専用クラスが入ってるのがわかります。

SIMBLで似たような別のクラスを突っ込むという手も取れなくもないかも。

辞書その3

Problem:
Some applications do about 90% of what I want.
Solution:
Develop my own applications.
Better Solution:
Patch the application myself... ← いまココ


RubyInjectは早々にあきらめ、SIMBLを使ってみます。


com.apple.Dictionary をフックするbundleを作ります。右上の検索入力欄はどうみてもNSTextFieldなので、NSTextFieldをposeAsClassでのっとります。NSTextFieldは、ふつうdelegateで変更を通知するはずなので、setDelegateをのっとって検索文字列変更時にどのインスタンスに通知するか覗いてみます。どうやら BrowserWindowController が相手のもよう。のでNSTextFieldインスタンスをもったNSWindowControllerの子クラスを作って、そのインスタンスをNSTextFieldのdelegateに設定してみます。

これで検索文字列決定時にcontrolTextDidEndEditingが呼ばれるようになりました!

#import 

@interface MyNSTextField : NSTextField
{
}
@end

@interface MyNSWindowController : NSWindowController
{
id _textField;
}
@end

@implementation MyNSTextField

+ (void)load
{
[self poseAsClass:[NSTextField class]];
NSLog(@"MyNSTextField::load");
}

- (void)setDelegate:(id)anObject
{
if ([@"BrowserWindowController" isEqualToString:[anObject className]]) {
MyNSWindowController *windowController =
[[MyNSWindowController alloc] init];
[windowController set:self];
[super setDelegate:windowController];
}
}

@end

@implementation MyNSWindowController

- (void)set:(id)textField
{
NSLog(@"MyNSWindowController set");
_textField = textField;
}

- (void)controlTextDidEndEditing:(NSNotification *)aNotification
{
NSLog(@"controlTextDidEndEditing");
NSLog([_textField stringValue]);
}

@end


こんな感じですね。setDelegateを奪い取ってる気がしますが、一応動いてます。

あとは検索文字列をオンライン辞書ででも検索して発音音声を返せば念願達成。こっから先はRubyCocoaで繋ぐつもり。

辞書その2

光明が見えた方向に進んでみたが、辿り着いた場所には扉があったものの、それは固く閉ざされていた...


って感じですか。

辞書.appの検索入力をフックできればいいんとちゃいますか。

いくつか方法があると思いますが、まずは、気になっていたRubyInjectで。

machレベルで関数上書きすると。最近はtext segmentが書き込み禁止にされてしまって寂しいですが、それはそれとしてインストールしてみます。

$ xcodebuild SYMROOT=/tmp
$ cp -r /tmp/Release/RubyInject.framework /Library/Frameworks


でもって、Dictionary.app起動してpsとかでプロセスIDを調べて

sudo ruby inject.rb プロセスID


とすると irb が起動して、いろいろできます。


辞書.appの右上のNSTextFieldっぽいところの文字列を引っこ抜ければよいと思うので探してみます。

require 'osx/cocoa'
include OSX
def walk(d)
instance = d[1]
NSLog d[0]
NSLog instance.class.to_s
begin
NSLog instance.stringValue.to_s
rescue
end
NSLog " "
begin
instance.subviews.count.times do |i|
walk [d[0] + ".subviews[#{i}]", instance.subviews[i]]
end
rescue
end
end

NSApp.windows.count.times do |i|
walk ["NSApp.windows[#{i}].contentView", NSApp.windows[i].contentView]
end


環境設定ウィンドウの文字列と同じものを見つけたので、setStringValue したら書き換えることができました!

しかし、右上のNSTextFieldらしきのにはどうも辿り着けない。うーん。

辞書

Leopardの辞書.app

インクリメンタル検索できるし、内容も充実。

ただ欲を言えば発音音声が欲しい。


ということで、発音音声付き辞書アプリケーションを得るべく、自分でアプリケーションを作ってみる方向で、辞書を検索する方法を探してみました。

http://numata.designed.jp/?plugin=numa_diary&file=Diary&title=日記&date=20071029

によればDictionary ServicesというAPI群があるらしい。何故かCarbon API。


さっそくこのAPIを使ってObjective-Cで辞書.appもどきを作ってみました。

http://prdownloads.sourceforge.jp/splhack/28808/EDict_test.tbz2

Leopard以降用です。ソースコードのみ。Xcodeでビルドできます。


作ってみて気づいたこと。
  1. インクリメンタル検索ができない。
  2. 取得できるデータがプレーンテキスト(リッチテキストじゃない)
  3. リッチテキストで表示できるAPI(HIDictionaryWindowShow)もあるけど、これは辞書.appが起動して表示することになる


うーん。

2008-01-03

vim 7.1.189

しばらく更新がなかったvimですが、年明け早々たくさんpatchが出てたので追従。

http://lapangan.net/darwinports/index.php?PrivatePortfile%2FVim

更新後再度見に行ったら7.1.190が出てるくらい活発。win32用のパッチなので影響なしですが。


cf.sourceforge.jpのOS Xにログインできない状況が続いている(サポートには問い合わせ済み)のでバイナリはまた今度。

PrivatePortfile/CMigemo

PrivatePortfileのcmigemoがインストールできないのを調べてみました。

なぜかbuild時に $(CC) が O2 に展開されて、command not foundになってました。
sudo port -v build +utf8 で確認(verboseオプション)。

port configure +utf8 後、worksrcpathでmakeすると平気。何故 CC に cc 以外が設定されるのか追求してませんが、CC=ccで対策して更新。

http://lapangan.net/darwinports/index.php?PrivatePortfile%2FCMigemo

make時の環境変数設定方法が変わったのか、Leopardのせいなのか。