TL;DR
- IME使用時に
ctrl + altの入力でctrlキーが継続して押下された状態になる現象がストレス - Power Toysで設定していたCapsLockキーとCtrlキーを入れ替える再マッピングがIMEと干渉してたっぽい
- Power Toysのキーマッピングを無効化してCtrl2capを導入することで解決
困っていたこと
- VS CodeでLaTeXを使って論文を書くときに
ctrl + alt + bでタイプセットするとctrlキーが押下されたままのような挙動になって、直後のタイピングで意図しないショートカットが発動したりマウスホイールのスクロールで画面の拡大縮小がおこったりする事故が発生していて地味なストレスだった - 直後に
ctrlキーを再度押下するとこの現象は消えるので、論文を書き始めて何回もタイプセットをすると手癖でctrl + alt + b → ctrlとすることで事故を防いでいた - これは
ctrl + alt、つまりctrlキーとaltキーが同時に押下されることでおこる現象っぽい(bキーは現象の再現には無関係)
原因の洗い出し
Windosの固定キー等の機能設定を確認
この手の問題にあたって調べると一番目にするのがこの対策。当然試してたけど効果はなくて、改めて確認してみたけどフィルターキーなどほかのものも含めてちゃんとオフになっていた。これは原因じゃない
VS Code側の設定の問題
VS Codeのキーバインド等の設定は正直かなり雑にやっていたのでここが一番怪しいと踏んでいたけど、ざっと見た感じおかしそうなところはない。
ということで、VS Code以外の場所(メモ帳とかブラウザの検索窓とか)でctrl + altを入力してみると現象が再現。VS Codeの設定による問題でもなさそう。
IMEの問題
日本語入力に使っているWindows IME/Google日本語入力のどちらでもこの問題に遭遇するので、これらのIMEをそれぞれオフにして英語キーボード入力で同様にctrl + altすると問題は再現しない → IMEが一因っぽい
キーマッピングツール
もう一点気になってたところ。US配列のキーボードを使っていて、ctrlキーが左下にあって押しづらいのでPower ToysのKeyboard Managerを使ってctrlとCapsLockを入れ替えるようにしていた。これが悪さをしているのでは?ということ。
結論としてはこれがビンゴで、Power Toysによるキーの再マップをオフにするとIME有効時でもctrl押しっぱなし現象は出なくなった。ただ、ctrlキーを押すたびに小指が攣りそうになってつらい。
じゃあどうする?
- IMEを使うのをやめる(厳しい)
- ほかのIMEツールをつかう(うーん)
- Power Toysによるキーの再マップをやめる(まずはこれを試してみる)
ということでPower Toysの代替を探しているとCtrl2capというツールを発見。どうやらMicrosoftの公式っぽく、古いソフトで、2006年のv2.0リリースから約18年ぶりに昨年アップデートがあって現在v3.0が最新版らしい。
Ctrl2capを開発したマーク・ルシノビッチ氏は、Windowsの仕事に関わる前、ほとんどをUNIXコンピューターと向き合っていたそうです。そのUNIXコンピューターのキーボードは、標準的なPCのキーボードの「Caps Lock」キーの位置に、「Control(Ctrl)」キーが配置されていたそうです。彼は、長年体にしみついたキーボード操作を忘れることはせずに、そしてWindows NTのデバイスドライバー開発を学ぶため、「Caps Lock」キー操作を「Control(Ctrl)」キー操作に変換するツールを作り出したというわけです。それは1995年のことだそうで、後にSysinternalsと呼ばれるようになる数々のツールの最初の1つになりました。- かつて山市良と呼ばれたおじさんのブログ
機能は至極単純で、CapsLockキーを無効化してCtrlキーに書き換えるというもの。名前が逆な気がするけど、Ctrl(機能)をCapsLockキーに割り当てるという意味での命名なのだろうな多分。
この機能はレジストリの書き換えとかほかのツールでも実現できるみたいだけどこのツールは、CapsLockをキーボードから消し去りたいという私の望みをかなえるたった一つの機能だけをそなえたシンプルなソフトウェアで、何か運命のようなものを感じて即インストールしました。手順はシンプルで、
- Sysinternals (Miclosoft Learn)からZIP形式で配布されているツールをダウンロード
- ダウンロードしたファイルを解凍
- 管理者権限でコマンドプロンプトを起動
- 解凍先のディレクトリに移動(例:
cd Downloard\Ctrl2cap) - プロンプトに
ctrl2cap /install入力して実行するとライセンスに関する表示が出るので同意してインストール - 再起動するとCapsLockが無効化されてCtrlキーとして使えるように
- (アンインストールは同じディレクトリで
ctrl2cap /uninstallして再起動)
ともかくこの状態で再度ctrl + altをあちこちで試してみると、なんと無事に件の問題が解決できていました。そもそもLaTeXのタイプセットを違うキーバインドにすればいいじゃんという話でもあるんですが、思いがけずCtrl2capという素敵なツールに出会うことができたしまあめでたしです。私は人類がCapsLockという前時代の化石から解放される日が来ることを祈っています。人類は私の論文執筆がスムーズに進むことを祈っていてください。