マウスを使わず Emacs の日本語入力を可能にする

[戻る]

2018 年春頃に Windows10 を update (1803 という噂) してから後 emacs の IME 切り替えが おかしくなりました. 具体的には C-o を押すとにモード行は [あ] と表示されるのですが, 日本語が入らないのです. この問題, 私の PC だけで発生しているのではなく こことかここ, ここなんかでも議論されてます.

解決策としては

  1. マウスでウィンドウ位置・サイズを少しずらす
  2. F10 を何回か押す
  3. 言語の詳細設定「アプリウィンドウごとに異なる入力方式を設定する」のチェックをはずす
という手があるようです. このうち c. の策は 2016年頃の解決策で 2018年に復活した今回では効果ありません (既にチェックは外れている: 設定⇒デバイス⇒入力⇒キーボードの詳細設定から確認可) . 一方 b. の策に関しては ここで .emacs をいじって自動でする Tips というのも見つけましたが, メニューバのある emacs 限定の対策なため, メニューバもツールバーも消している私の環境では残念ながら使えません.

まぁそのうち治るだろうと, 毎回 a. の策: マウスで位置をちょびっと 動かすということをやっていたのですが, 9 ヵ月経っても治る様子がなく, だんだんとフラストレーションが溜っていきます. なんとなく解決策も思いついたので, 重い腰をあげ (この手の作業は本家が治ったらまったく役立たずになるので空しいのですが) 自力でなんとかしてみることにしました.

emacs の起動と言っても中身は runemacs です. 以前これを改造して環境変数 HOME をいじってから 起動するようにしていましたが, さらにそれを改造して

  1. runemacs の最後 (return (int)ret_code; の直前) で起動した emacs の位置を得る
  2. ツールバー推定位置に SetCursorPos() でマウスポインタを持っていく
  3. mouse_event() でウィンドウを掴んだ後, SetCursorPos() でウィンドウを グリグリ動かした後離す
  4. 最後にマウスポインタを元に位置に戻す
といったことをするようにしてみました. 実行形式はこちらです. runemacs.exe と同じ位置 (bin の下) に runemacs3.exe を置いて, ショートカット等で runemacs.exe の代わりにこれを使うようにするだけです. 環境変数 HOME をいじるバージョンですから, 使う際は dotemacs ディレクトリの 位置に気を付けてください (bin や lisp と同じ位置に置く).

なお 3. でぐりぐり動かす時間は短いと効果が表れないし, 長いと起動時にワンテンポ遅れてイラつきます. トライアンドエラーの結果 0.2 秒にしています. このため HDD の止まった NAS 上のファイル等, 読み込みに時間がかかるファイルの場合失敗することがあります. その場合諦めて a. の策 (手動でぐりぐり) を施行してください.


2019.02