twitter で見た回避策
なるほど、Windows Terminal の時だけ、MS-IME を使用するようにするわけですか
Windows Terminal起動時にGoogle日本語入力が英数モード "_A" にならないようにしたい人生はいまだ未達なんですが、ストレスを軽減する方策はあります。
— たわら ¦¦ HackGenのひと (@tawara_san) 2023年7月6日
1. 言語と地域設定から、Google 日本語入力、Microsoft IMEを両方有効化 https://t.co/injBBeRQUO pic.twitter.com/EwXcS8Tj54
Windows 11 の場合に選択すべきメニュー場所がちょっと違うようなので、メモ
- 「1. 言語と地域設定から、Google 日本語入力、Microsoft IMEを両方有効化」が見付からなかったが、設定せずとも 2. 以降だけで一応 OK だった(自分の環境だけ?)
- 設定
→ 時刻と言語
→ 入力
→ キーボードの詳細設定
→ アプリウインドウごとに異なる入力方式を設定する - WindowsTerminal 上で、Windowsキー + SPACE を押下して、MS-IME を選択 (SPACEでトグル)
- ブラウザなどのテキストエリアで同様に、Google-IME を選択
ただ、これタブを増やす時は大丈夫ですが、新規に WindowsTerminal を起動する時は、都度 Windowsキー + SPACE がいるんですよね…
別解の検討
自分は WindowsTerminal 上での日本語入力はすべてアプリ側組み込みの SKK を使ってるので、いっそ、WindowsTerimnal では IME を常時オフがのぞましかったんですが… 残念ながら Null-IME 的なものは巷にはないようです。
他のアプローチなども考えていて、WindowsTerminal が起動した時に IME をオフするようなコマンドを発行できないかなと、Windows の API をググったりしてみたのですが
1案
(APIの呼び出しのイメージ)
Imc := ImmGetContext( ウインドウハンドル ) ImmSetOpenStatus(himc , false ) ImmReleaseContext( hwnd , himc )
このウインドウハンドルを取得の仕方がたいへんそうなので、頓挫中。
これ、普通のコンソールウインドウであれば、 go-windows-consoleicon でやっているように GetConsoleWindow で得られるんですが、WindowsTerminal の場合、コンソールアプリ側から見えるコンソールウインドウは多分隠しウインドウで、実際に表示されているウインドウとは異るはずなので使えない。
あとのアプローチとしては考えたのは EnumWindows 関数で全てのウインドウハンドルを列挙して、全部に対して上を実行するという方法。無茶だなぁ
2案
WriteConsoleInputW 経由で、キーボードイベントとして VK_IME_OFF
など IME のオフにするようなスキャンコードを送り込むという方式ですが…これも現状うまくゆかず。
( おそらく1案と同様、アプリから見えるコンソールと表示されるコンソールが異なるせいではないかと )