Windows 10でUS配列のMac系キーボード(つまりCommandキーがある)を使い、Macでよくある英かな変換(Windowsでは無変換と変換でIMEのON/OFFを切り変えるアレ)を行い、かつEmacsキーバインドを利用するための方法について。まぁつまり、Mac(US配列)でやっていることをWindowsでもやりたい、ということ。
(追記)なおこの記事はSATECHIのキーボードでやってますが、US配列ならまぁだいたい同じです。SATECHIのキーボードは焼酎を盛大に零したところ、何もしていないのに壊れました。私は阿呆です。
(追記)JISキーボードをUS配列で頑張る編書きました。
(追記 2024-06-20)下記記事にも書いてますがEmacsキーバインドについてはFakeymacsでファイナルアンサーです。

環境
- キーボード…SATECHI ST-BWSKMS
- US配列
- Commandキーがある(Mac用)
- WindowsではWindowsキーになる(101配列…なのにあるんだね)
- テンキー邪魔(そこがウリなんだろうけれど)
- Windows 10 Home
- keyhac 1.77
- ChgKey 1.50
ハードウェアはSATECHIのST-BWSKMS。MacでもWindowsでも使えるマルチデバイス対応…なのはいいのだけれど、テンキーが邪魔。いや、テンキーがあるのが良いところなのだろうけれど。しかし、テンキーレスで似たようなキーボードを見つけられなかった……。
keyhacは使用するソフトウェア。ChgKeyはキースワップのソフトウェア。
(追記)商品切れてた。これが代替かな。
(追記)ってかテンキーレス出てた。これがほしかったんや。いまさらだけど。
やりたいこと
- 左右のCommandキーで英数とかなの変換
- Emacsキーバインドと普通のショートカットの共存
つまり、US配列のキーボードを使っている時のMacと同じことを、Windowsでもやりたいわけだ。
Emacsキーバインド
WindowsでEmacsキーバインドを実現できるソフトウェアについては色々ある。XKeymacs、AutoHotkey、keyhac……一番ラクなのは設定がほとんど必要のないXKeymacsだと思われ、実際それを使っていた。が、今回は英かな変換もやりたい。そうすると、やはりAutoHotKeyやkeyhacを使ってちゃんとマッピングしたほうが良いだろう。最初は基本的なところはXKeymacsを使って、他は別のソフトを…なんて考えたりもしたのだが、AutoHotkeyを使ったソフト(「WindowsのAlt空打ちで日本語入力(IME)を切り替えるツールを作った | karakaram-blog」)とXKeymacsを併用すると、おかしくなったので、まぁやっぱりキーのマッピングに関わるようなソフトウェアは一つに絞ったほうがよいのだろうと思う。
ということで、AutoHotkeyかkeyhacということになるのだが、keyhacのほうがpythonが使えて親しみやすかったのと、それを使ってEmacsキーバインドと英かな変換のそれぞれを実現している人がいたので、keyhacを使うことにした。
「Keyhac - Pythonによる柔軟なキーカスタマイズツール - craftware」をインストールしたら、「Windows の操作を emacs のキーバインドで行うための設定 (Keyhac版) - NTEmacs @ ウィキ - アットウィキ」の設定ファイル(力作!ありがとうございます)を有り難く使わせていただく。
これで、左CtrlキーでEmacsキーバインド、右Ctrlキーで通常のショートカットが使える。Win+R→shell:startupでスタートアップを開き、exeのショートカットを置いてWindows起動時にkeyhacが実行されるようにする。
……XKeymacsより安定して動くなぁ……。
英かな変換
次に、英かな変換。Windowsにおける英かな変換の実現方法で、もっともポピュラーなのは「変換・無変換キー」にIMEのON/OFFを割り当てるというやり方だろう。しかし、US配列のキーボードにそんなキーはない。中にはAX配列という特殊な配列をもとにカスタマイズする猛者もいるようなのだが(「Windowsで右Altキーに[漢字]キーを割り当てる方法(AXキーボード設定を利用する方法):Tech TIPS - @IT」、「Uchan Note: 日本語キーボードを US 配列で使いつつ、変換/無変換キーで IME ON/OFF」)、これは設定がややこしいうえに、右Ctrlが使えないなどあるそうなので(参考「AXドライバで英語キーボードを使う(Win10,7対応):G'sのだらだらぐーたら日記 on blog」)、Emacsキーバインドとの共存を目指す今回の用途には向くまい。
まぁおとなしくkeyhacの設定でなんとかする。「WindowsでMac風の日本語入力 | afainu.action.mark2」を参考にさせていただいた。参考の記事では、左Ctrlキーを単独で押すとIME/OFF、右Ctrlキーを単独で押すとIME/ON…としているが、ここでは後述するキー配置の問題があるので、逆にした。つまり、左CtrlキーでIME/ON、右CtrlキーでIME/OFFとした。
def ime_on():
keymap.wnd.setImeStatus( 1 )
def ime_off():
keymap.wnd.setImeStatus( 0 )
keymap_global[ "O-LCtrl" ] = ime_on
keymap_global[ "O-RCtrl" ] = ime_off
これをkeyhacの設定ファイルに追記すればよい。
キースワップ
最後に、キーの配置を色々と変える。レジストリをいじるのはしんどいので、ChgKey(「Change Key」非常駐型でフリーのキー配置変更ソフト - 窓の杜ライブラリ)を使わせていただいた。
設定については、実際に使うキーボードや好みもあるだろうが、自分の場合は以下のように変更した。
- Caps Lock → Left Ctrl
- Left Ctrl → Left Windows
- Left Windows (Left Command) → Right Ctrl
- Right Windows (Right Command) → Left Ctrl
右Windows(左Command)に左Ctrlを当てているのがミソ。こんな画面は感じ。

Caps Lockと左Ctrlのスワップはよくある。ってかCaps Lockいらない。なので、左Ctrlには左Windowsキーをあてがった。で、左Windowsキー、つまり左Commandキーには右Ctrlキー。そして右Windowsキー、つまり左Commandには、左Ctrlキーをあてがう。
なんでかというと、英かな変換のため、左右Commandキーには別のキーをあてがう必要があるからだ。で、Ctrlキーを単独で押下した時には、英かな変換がされるようにすれば、やりたいことが達成される。
JISのがいいのかしら…いやいや…
ここに至るまでとても時間がかかった。それでもなんとかできたのは、色々な人の努力の賜物。本当に有り難いことです。
しかしそもそも日本語キーボードに慣れていればここまで苦労することもなかったよなぁというのも事実で、やはり日本人にはJIS配列なのかしら、などと思い悩む今日この頃(Macノートも店頭モデルの安くなったのが買えるし)。でも、自分はノートはJIS配列、デスクトップはUS配列で並行してここ数年やっているけれど、US配列のほうが合ったんだ。クォーテーションとかコロンとか、カッコの配置とか、使いやすいからかな。あと対照的で綺麗。
ということで、懲りずにUS配列のキーボードを使い続けるであろう。



コメント
コメント一覧 (1件)
> def ime_on():
> keymap.wnd.setImeStatus( 1 )
(中略)
> keymap_global[ “O-LCtrl” ] = ime_on
(後略)
うーむ。私の環境では「wnd が定義されてないよ!」と怒られました。
あと、関数呼び出しは ime_on() になるのかと思っていました・・・