scim-bridge.el version 0.7.2 リリース

12/11時点の最新版はversion 0.7.2.2です(詳細は追記を参照)。

(図:インクリメンタル検索しているところ)
ダウンロードはこちらでどうぞ↓
scim-bridge.el - irie @ ウィキ - アットウィキ
version 0.7.1からの変更点

  • インクリメンタル検索(isearch-mode)でSCIMを使用できるようにした
    • タイ語のようなsurrounding textを要求する言語でも使える
    • 手書き入力パッドからの入力も可能
    • Migemoとの併用ができる
  • 入力フォーカスをチェックする時間間隔を状況に応じて変化させるようにした
  • キーマップの構成を大幅に変更し、必要に応じて4段階で切り替えるようにした
    • SCIMがオフの時には印字可能文字を含まないキーマップに切り替えるようにした
    • keymap-parentを利用して階層的にキーマップを定義するようにした
    • かな入力方式を使う設定をしない場合に、キーマップに不必要なキーを含めないようにした
  • SCIM-Bridgeとの接続/切断およびデータ送信/受信のコードを書き直した
    • SCIM-Bridgeが異常終了しないようにし、万一終了した場合には自動的に再起動するようにした
    • SCIM-Bridgeエージェントとの接続のための埋め込みのPerlスクリプトを廃止した
  • escapeやC-c等のキーイベントをSCIMに送るような設定をしても、プレフィックスキーとしてきちんと処理できるようにした
  • マウスのドラッグ&ドロップ操作でファイルを開くとカーソル色が追従できない不具合を修正
  • アンドゥが無効のバッファでプリエディットが破壊されるような操作をするとエラーが出て操作不能になる場合がある不具合を修正
  • awesomeウインドウマネージャで起動に失敗することがある不具合を修正

今回はインクリメンタル検索への対応がメインです。その他にもかなり多くの変更をしていて、全体の4分の1以上は新規または書き直したコードです。
インクリメンタル検索はanthy.elの時よりもかなり複雑ですが、原理的にはほぼ同じで、isearch関係の関数にdefadviceしまくっています。isearch-mode中でSCIMをトグルするキーは通常のバッファでの編集と同じです(C-SPCとか全角/半角とか)。
入力フォーカスのチェック周期は、SCIMがオンの場合だけ短く、SCIMがオフの場合や、書き込み禁止のバッファ、他のアプリケーションにフォーカスが移った場合などは長くなります。これでCPUに無駄に負担をかけないようにしています。w3mなどで画像表示したときのチラつきが軽減したような気が…
あと、SCIM-Bridgeのバージョンが古いと(ver.0.4.12以前)、色々問題があることがわかりました。

  1. キーマップの切り替えがうまくいかないため、日本語入力ができない
  2. インクリメンタル検索で使えない
  3. カーソルの色が変わらない
  4. SCIMがオンの時も入力フォーカス監視の周期が遅いままになる

これは、古いバージョンのSCIM-Bridgeでは入力状態(SCIMのオン/オフ)が検出できないためです。特に1は致命的です。これを回避するには

(setq scim-use-minimum-keymap nil)

とすれば、とりあえず入力できるようになると思います。
また、ウインドウマネージャによっては正常に動作しないものがあるようです。ウインドウマネージャが_NET_ACTIVE_WINDOWをサポートしていない、あるいは実装が不完全な場合にはほとんどダメです。_NET_FRAME_EXTENTSをサポートしていない場合にもうまくいかない場合があります。

追記(12/9):バグを修正してversion 0.7.2.1をリリースしました。
version 0.7.2からの変更点:

  • scim-cusor-colorがnilの場合にカーソル色をforeground colorで上書きするようになっていた不具合を修正
  • バッファのメジャーモードを変更した際にscim-disable-keymapによるscimの無効化が解除されない不具合を修正

追記2(12/11):更にバグを修正してversion 0.7.2.2をリリースしました。
version 0.7.2.1からの変更点:

  • プリエディット中にM-x等でミニバッファに移るとバッファにゴミが残ってしまう不具合を修正
  • 一部のIMEngineでプリエディット中にisearch-modeに入るとバッファにゴミが残ってしまう不具合を修正
  • 一部のIMEngineでisearch-modeでプリエディット中にC-gで中断すると正常にプリエディットを終了できない不具合を修正

1番目のバグは、0.7.2でpost-command-hookの関数を書き直した時に処理の順序を間違えて書いたのが原因です。うう。isearch-mode関係は新しい部分なので、まだ派手なバグがあるかも。
あと、文章ばかりで地味なのでスクリーンショットを貼ってみました。