今日も窓辺でプログラム

外資系企業勤めのエンジニアが勉強した内容をまとめておくブログ

HHKB + AutoHotKey で、Mac の Command と Control を使い分けられる操作感を Windows でも手に入れる

Windows と Mac の Control キーの違いから生じる問題

Windows ではコピーやペースト等のショットカットの実行に Control キー (Ctrl) を多用します。

一方で Mac では Ctrl キーはカーソル移動等に使うことが多く、コピーやペーストといった操作には代わりに Command キー (Cmd) を使用します。

Mac での Emacs ライクなキー移動等に慣れてしまい、かつ仕事とプライベートでの OS が Win/Mac で異なる場合、Windows を使っている場合にキー移動の効率が落ちたりショートカットが思うように実行できずにストレスを感じてしまうこととなります。

解決策

Happy Hacking Keyboard (HHKB) と AutoHotkey を併用することで解決を試みます。

基本方針としては、Mac のキーを Windows 側では次のように代替し、Windows の左 Ctrl と 右 Ctrl を Mac の Ctrl と Cmd に近い位置に配置することを目指すことになります。

Mac Windows
Ctrl 左 Ctrl
Cmd 右 Ctrl

物理的なキー配置の実現

左 Ctrl を A キーの左隣に、右 Ctrl を Mac でいう Cmd キーのあたりに配置するには、HHKB を購入し、キーマップ変更ツールを使用します。

ショートカットの設定

AutoHotkey にて以下の設定を行います。

  • Mac の Ctrl キーを使ったカーソル移動関連ショートカットを、左 Ctrl キーを使って実現する
  • 上記で使えなくなったショートカットを右 Ctrl との組み合わせで使用可能にする
  • Mac の Cmd キーを使ったショートカットのうち Windows 側でも欲しいものを右 Ctrl との組み合わせで使用可能にする

下記は一例ですが、このような設定ファイルを用意するイメージです。

; Emacs-like keybindings for moving cursor
<^p::Up
<^n::Down
<^f::Right
<^b::Left
<^a::Home
<^e::End
<^d::Delete
<^h::Backspace

; Use Right Ctrl to trigger "Mac Ctrl" shortcuts
>^p::Send "^p"
>^n::Send "^n"
>^f::Send "^f"
>^b::Send "^b"
>^a::Send "^a"
>^e::Send "^e"
>^d::Send "^d"
>^h::Send "^h"

; Mac Command key shortcuts
>^c::Send "^c"
>^x::Send "^x"
>^v::Send "^v"
>^s::Send "^s"

問題点

問題点として、たまにキー入力が AutoHotkey に奪われずに送信されてしまうことがあります。

例えば "左Ctrl + P" を連打してカーソル移動している場合に、ブラウザだったら意図せず「印刷」ダイアログが表示されたり、VSCode だったら意図せずコマンドパレットが表示されたりといった具合に、結構ストレスを感じるので何とかしたいと思っています。