Leopard で、アプリケーションごとにインプットマネージャの状態を保持してくれないのが微妙に不便だったので、別々に保持するのを作ってみた。要 SIMBL。

http://limechat.net/inputswitcher/index_ja.html

詳しい仕組みはこんな感じ。(ドキュメントより抜粋)

InputSwitcherClient.bundle は、SIMBL 経由で各アプリケーションのプロセスに潜り込み、アプリケーションの activate と、deactivate の2つのイベントを、あらかじめ起動しておいた InputSwitcher.app に通知します。

InputSwitcher.app は、各アプリケーションごとに入力ソースの状態を保持しています。activate イベントの通知を受け取ったときに、入力ソースをオン・オフして、以前の入力ソースの状態に復元します。deactivate イベントの通知のときに、入力ソースの状態を覚えておきます。

こうすることで、Leopard でも入力ソースの状態を各アプリケーションごとに別々に保持することができるようになります。

なお、現在の実装上、いくつかの制限があります。

Cocoa アプリケーションでしか動作しないので、以下のソフトでは動作しないことを確認しています。その場合でも、内部的にグローバル状態を別に保持しておいてそれを適用しているので、支障なく利用できると思います。

Finder

Firefox

iTunes

まれに、Firefox がアクティブになった瞬間に入力ソースの状態を変えると、そこから Cmd+Space を押しても入力ソースの状態を変えられなくなることがあるという不具合を確認しています。そのため、他のアプリケーションから Firefox にフォーカスを移したときにだけ、入力ソースの状態を変えないようにしてあります。