今後について

プロジェクトページを更新し、今後について書きました。

http://aquaskk.sourceforge.jp/

AquaSKK とともにあった 8 年をふりかえると、人生の節目が詰まっています。

  • 結婚した
  • 子供が生まれた
  • 祖母が死んだ
  • 東日本大震災があった
  • 母親が死んだ
  • 家を建てた(覚悟を決めた)

なかなか感慨深いですね。

ケジメですので、この日記も今日で閉めます。長い間お世話になりました。

またどこかで会いましょう。それまでお元気で。

AquaSKK 4.2 リリース

リリースしました。OS X 10.6 以前には対応していませんので、ご注意下さい。

http://sourceforge.jp/projects/aquaskk/releases/

▼追加・改善された機能
SKK 辞書(UTF-8)を追加
・直接入力モードを追加
Java アプリケーションで文字種切り替え時にゴミが挿入される
・skkserv 辞書の堅牢性向上

▼不具合修正
・送りの判定が甘い

・Undo 直後の確定でゴミが挿入される
・TSM 版互換の入力メニューでTISInputSourceIDが全て同じになっている(チケット #22894)
・「ゎ」をトグルカナ変換しても「ヮ」にならない(チケット #29914)
・skkserv で「localhost 以外からの接続を拒否する」が保存されない
Eclipse で文字種切り替え時にゴミが挿入される
Eclipse で文字種切り替え後にマウスクリックによるカーソル移動ができない
Eclipse でインクリメンタル検索時に l や q で上書きされる
・入力モードメニューのアイコンがグレースケールになる
・入力モードとメニューアイコンが一致しない
・かな規則を切り替えてもすぐに反映されない

▼その他
・最新の SDK に合わせてビルド設定を更新
・各種コンパイル警告への対応

今後のことについては、また改めて書きます。

AquaSKK 4.2 RC6

リリースしました。

▽追加・改善された機能
・特になし

▽不具合修正
・かな規則の切り替えがすぐに反映されない

Mac OS X 10.8 にアップグレードしたらあっさり現象が再現しました。長いことお待たせしてすみませんでした。

はっきりとした原因はわかっていません。ただ、10.7 と 10.8 で NSUserDefaults の挙動が変わっているようなので、setPersistentDomain:forName: で明示的に最新の設定を反映するようにしたところ、解消されたようです。念の為、今回の対応が 10.7 でも有効なことは確認しました。

これで問題が出なければ、リリースできるかなと思っています。

よろしくお願いします。

AquaSKK 4.2 RC5

リリースしました。

▽追加・改善された機能
・特になし

▽不具合修正
Eclipse で文字種切り替え後にマウスクリックによるカーソル移動ができない

これで大きな不具合はもう残ってないかなと思います。

ただ、かな規則がすぐに反映されない件については確認が取れていません。もし、現象が改善しているようなら(していなくても)その旨、ご連絡頂けると助かります。

よろしくお願いします。

AquaSKK 4.2 RC4

リリースしました。

▽追加・改善された機能
・特になし

▽不具合修正
・かな規則がすぐに反映されない(#30719)
・入力モードとメニューアイコンが一致しない

かな規則の不具合が発生している方は直っているかどうか、試してもらえると助かります。今回の対応で、たぶん大丈夫なはずです。

入力モードとアイコンが一致しない件、ご報告ありがとうございました。こちらで現象再現しましたので修正しています。

今月中にはリリースしたいですねぇ。

AquaSKK 4.2 RC3

リリースしました。

▽追加・改善された機能
・特になし

▽不具合修正
・かな規則がすぐに反映されない

かな規則の不具合は再ログインすれば反映される、というお話から、ひょっとしてキャッシュが効いてしまっているのかなと思い、対策してみました。こちらでは再現しないので、確認してもらえると助かります。

Eclipse で更新状態になってしまう件については改善されていません。現状わかっていること(推測もありますが)を書いておきます。

そもそもの問題点

Mac OS X におけるキー入力は通常、システム → IME(AquaSKK など) → アプリケーションの順番で伝播します。例えば、「a」というキー入力が発生すると、AquaSKK はそれをアプリケーション(の proxy オブジェクト)に対して渡します(insertText)。するとアプリケーション側のメソッドが呼ばれて、実際に「a」を描画するという流れになるわけです。

ほとんどのケースはこれで OK なのですが、AquaSKK で言うところの文字種の切り替えキーなどは、そのまま描画されると困ってしまいます。そこで、システムに対して「IME で処理済みだよ」と伝えることで、描画は発生しないけれども、システムはアプリケーションへのイベント伝播をやめる仕組みとなっています。

Eclipse (というか、JRE)における問題は、この「IME で処理済みだよ」を無視してしまう点にあります。

結果として、文字種切り替えキーがそのまま描画されてしまうわけです。ヒドイヨヒドイヨ!!!

なぜ無視してしまうのか?

お行儀の良いアプリケーションではそもそもこういった問題は発生しません。なぜなら、システムがキー入力を渡すことはないからです。では、なぜ Eclipse ではこうなってしまうのか。

それは、キー入力イベントで様々な処理を行いたいからに尽きると思います。ここは推測になりますが、おそらく Eclipse(というか、JRE)ではキー入力を横取りして、以下のような流れになっていると思われます。

システム → JRE(アプリケーション) ⇄ IME

ハリウッドの原則が意図的に無視され、IME は単なるサブルーチンとなっています。同じような実装をしているのが、iTerm などターミナルアプリケーションです。つまり、キー入力に重点を置くアプリケーションはどうしても、こういったモデルにならざるを得ないという事情があるかと思います。

どうすればいいのか?

根本的には Mac OS X 版の JRE を修正し、IME 呼び出し後に「処理済みだよ」と言われたら、アプリケーションにキーを渡さないようにすればいいと思われます。現在の実装ではこの返事を無視し、IME がキー入力を消費だけして出力しない場合には、すなわち処理されなかったイベントと判断して、アプリケーションに横流ししている節があります。

以前、Safari の HTML フォームでも同様の問題が発生したことがあったのですが、その時は不具合報告して対応してもらった経緯があります。JRE はどうすればいいのかなぁ。

ちなみに、ことえりGoogle IME でも文字種切り替え時には Eclipse にゴミが挿入されるケースがあります。

AquaSKK の苦肉の策

というわけでかなり困難な状況なわけですが、要は、IME がなにかしら出力すればアプリケーションにキーが渡ることはないわけです。この秘孔を突いて、AquaSKK では未確定文字列を挿入することで、アプリケーションへのキー伝播をキャンセルするという荒技を行っています。

確定文字列では実際に描画されてしまうので、未確定文字列にするところがこの技の最大のポイントです。最初は null を挿入していたのですが、Eclipse で効果がなかったため、Ctrl-L を挿入するようにしたところ、おとなしくなってくれたのはご存知の通りです。

これでアプリケーション上はゴミが挿入されることがなくなったのですが、その副作用として、ファイルが編集状態になってしまう、という事態を引き起こしてしまったわけですね。おぞましいですが、これは現状、いかんともしがたいなぁと。

まとめ

Java なんか捨てちまえ!!! 嘘です。

AquaSKK 4.2 RC2

リリースしました。

http://sourceforge.jp/projects/aquaskk/releases/

▽追加・改善された機能
・特になし

▽不具合修正
Eclipse でインクリメンタル検索時に l や q で上書きされる
・入力モードメニューのアイコンがグレースケールになる

かな規則の不具合ですが、こちらで再現しません。追加情報お待ちしております。

よろしくお願いします。