効率的なキーボードのキー配列についての提案
目的
当方、タッチタイピングによるローマ字入力は問題なくできているのですが、MacのCommandやOption、WindowsのCtrlやAltなどの装飾キー を使ったショートカットキーの入力時にキーボードをつい見てしまうことが多いことに気がつきました。
キーボードを見ず、なるべく指をホームポジションから動かさないような配置にすることで効率的かつ正確にキーを入力することができるようなキー配列を考えます。
前提条件
- ホームポジションについて
Fキーに左手の人差し指、Jキーに右手の人差し指を置く普通のホームポジションで使用します。
なるべく物は増やしたくないのでUSB切り替え機を使って接続先を切り替えます。
- US配列のキーボードを使用
US配列のキーボードを使用する理由は何点かあります。
- IME関係の余計なキーがない
- かな表示がなくデザインが良い
- キーの配置が合理的
- Returnキー(WindowsのEnterキー)、Deleteキー(WindowsのBackSpaceキー)が横長で押しやすい
- WindowsのゲームはUS配列前提でボタン割り当てが設計されている
などなど。かな入力をしない人はUS配列オススメです。
日本だと手に入れにくいのが本当に難点・・・
- 使用するキーボードはMx Keys mini for Mac
WindowsのUS配列の場合、スペースキーの隣にAltキーが配置されます。
自分の使用用途ではCommandキー(WindowsのCtrlキー)の方が都合が良く、キースワップをするにしてもAltキーがCtrlの役割というのはなんか気持ち悪いのでMac用を選択しました。
最終的なキー配置
ホームポジションからなるべく手を離さずにショートカット入力するというコンセプトで作成しています。
使用感をなるべく近くするため、役割が似ているキーは同じ位置に配置しています。
Macの装飾キーの配置
Windowsの装飾キーの配置
装飾キーのキースワップについて
Mac
もともとのキー配置が最終的なキー配置にほぼほぼ近いのですが、Capslockの位置だけ変更する必要があります。
なぜかMacのUS配列キーボードはJIS配列でControlの位置にCapslockが配置されています。
小指で押しやすい位置にあるのになぜ・・・。唯一US配列がJIS配列にハードウェア上で劣っている点だと思っています。
OS純正のシステム設定でも良いのですが、後々使うことになるのでKarabiner-Elementsというソフトウェアでキースワップします。ここは好みの問題です。
Windows
- Command → Win
- Option → Alt
- Control → Ctrl
というように認識されます。
今回はMX keys miniのCommandの位置にCtrl、Controlの位置にWinキーを配置したいので
Windows側でキースワップする必要があります。
AutoHotKeyなどのキースワップソフトだと動作が安定しないため、OSのレジストリを直接書き換えを行うChgKeyというソフトを使います。
本来Capslockがある位置にはF13というハードウェアには実装されない使わないファンクションキーを配置します。
これはショートカットを自作して使用するためです。
↓
IMEの切り替えについて
Mac
JIS配列のキーボードでは”英数”と”かな”というキーで切り替えができますが、US配列ではできません。
割とこの機能が使いやすいためJIS配列を使っている人が多いのではないでしょうか。
US配列ではOS側でのIMEの切り替えはControl+スペースで行うことができますが正直使いにくいです。
この問題を解決するべく、Karabiner-Elementsを使用します。
Complex Modificationsの中のAdd ruleで下記のルールを追加します。
これで左Command空打ちでIME OFF、右Command空打ちでIME ONにできるようになります。
正直これが使えるならJISキーボード使う理由はほぼないかなと個人的には思っています。
この機能は英かなというソフトでも実現できるようですが、わざわざこの機能のためだけに1つのソフトウェアを導入するのはどうかなと思い今回は使用してません。
Windows
Macと同様に左Ctrl空打ちでIME OFF、右Ctrl空打ちでIME ONにできるよう設定します。
AutoHotKeyというソフトをインストールし、スクリプトに次のコードを書き込みます。
IME_SET(SetSts, WinTitle="A") {
ControlGet,hwnd,HWND,,,%WinTitle%
if (WinActive(WinTitle)) {
ptrSize := !A_PtrSize ? 4 : A_PtrSize
VarSetCapacity(stGTI, cbSize:=4+4+(PtrSize*6)+16, 0)
NumPut(cbSize, stGTI, 0, "UInt") ; DWORD cbSize;
hwnd := DllCall("GetGUIThreadInfo", Uint,0, Uint,&stGTI)
? NumGet(stGTI,8+PtrSize,"UInt") : hwnd
}return DllCall("SendMessage"
, UInt, DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hwnd)
, UInt, 0x0283 ;Message : WM_IME_CONTROL
, Int, 0x006 ;wParam : IMC_SETOPENSTATUSs
, Int, SetSts) ;lParam : 0 or 1
}
上のコードの下に次のリンク先のコードをコピペ
https://github.com/karakaram/alt-ime-ahk/blob/master/alt-ime-ahk.ahk
ただし、ここに書いてあるコードは左右のAltキーの空打ちによる切り替えのため、後半コードの一部を
LAlt up → LCtrl up
RAlt up → RCtrl up
に変更します。
これでAutoHotKeyが常駐している間は左右のCtrlキー空打ちでIMEの切り替えが可能となります。
ショートカットキーの設定
Mac
MacにはWindowsにあるWinキーが無い代わりにControlキーが存在します。
コーディングや文書作成で非常に有用なショートカットが下記のように存在します。
OSレベルで十分にサポートされているため、ショートカットキーは追加では作成しません。
control + A:行または段落の先頭に移動
control + E:行または段落の末尾に移動
control + F:1 文字分進む
control + B:1 文字分戻る
control + L:カーソルまたは選択範囲を表示領域の中央に表示
control + P:1 行上に移動
control + N:1 行下に移動
control + O:挿入ポイントの後に 1 行挿入
control + T:挿入ポイントの右側の文字と左側の文字を置換
control + H:前の文字を1文字削除
control + D:先の文字を1文字削除
Windows
Macにあるようなショートカットキーを実現するため先ほど使用したAutoHotKeyのスクリプトに次のコードを追加します。
F13 & B::Left
F13 & P::Up
F13 & N::Down
F13 & F::Right
F13 & D::Delete
F13 & H::Backspace
F13 & A::Home
F13 & E::End
これでMacのControlキーに配置したF13キーを使って似たようなショートカットを実現することができます。
使用感
まとめと今後
今回の設定によっていずれのOSでもキーボードを見る機会はほぼなくなりました。これまで当たり前だと思っていることに疑問を持つことは非常に大切であると学びました。
色々設定して感じたことですがMac OSはなるべく楽にタッチタイピングできるように設計されているように感じました。
CapslockのキースワップとIMEの切り替え設定以外、設定は弄っておりません。
WindowsではUS配列とJIS配列を同時に扱うことはできないのですが、Macではできるあたり細かいところまで考えられていると感心します。(同時に使う人はほとんどいないと思いますが・・・)
今回はソフトウェア側でキースワップをしていましたが、実際にはハードウェアである入力機器側でキースワップする方が安定します。
PFUというメーカーのHHKBはハードウェア側でキースワップできるらしいので、Bluetoothではない無線タイプが出たら買っても良いかなと考えています。
無刻印も選べるので、キースワップしても印字されているキーと入力されるキーが違うということがないのも良いです。
もしくは自作キーボードに手を出すしかないのかと思っています。沼にハマりたくないですが・・・。