2011-08現在バージョンは7.3.0であり、コンパイルしなくても簡単にオリジナルキーマッピングを追加できるようになっている。
以下は参考情報。
まずXcodeをインストールします
まずKeyRemap4MacBookのソースコードをダウンロードしてくる。
2010-11-04現在
6.9.0のファイルが→http://pqrs.org/macosx/keyremap4macbook/source.html.jaから落とせます
以下過去のドキュメント
ダウンロードしてくるソースは 2010-05-02 現在で 6.5.0 のものではなくて 開発中のコード (tar.gz)と呼ばれるものか、リポジトリから取得してください。6.5.0ではコンパイルが通りません。
ソース置き場→http://pqrs.org/macosx/keyremap4macbook/source.html.ja
圧縮されているので解凍する。
自分のhome以下にsourceフォルダを作ってその中に解凍したKeyRemap4MacBookのソースをフォルダごと一式突っ込む
一回素でコンパイルしてみる。
make clean all
出来上がり。普通に通った。
その場で
open KeyRemap4MacBook.pkg
とうちこめばインストーラーが起動する。
じゃんじゃんやっていけば普通に上書きインストールされる。 最後に再起動を促されるが、別にしなくてもその時点で反映されてるっぽ
設定とアプリは別に保存されているので、前回の設定がそのまま引き継がれる
設定を編集してみる ドキュメントがほとんどないわけだが、サンプルとHPを参考にやってみる、基本的に言語で書かないといけないみたいなんだけど、キーを置き換えるだけ、みたいな簡単な定型スクリプトはXMLで書いておけば、コードを自動生成してくれるみたいだ。
そのXMLは
KeyRemap4MacBook-xxx/files/prefpane/checkbox.xml
なのでこいつを一応保存しておいて、新しく編集する
Sample KeyRemap4MacBook for developer という項目にもうそのままのサンプルがたくさん上がっているのでこいつを切り貼りして持ってくる。
このコード自体は
KeyRemap4MacBook-xxx/files/prefpane/include/sample.xml
ここに置いてある
<autogen>--KeyToKey-- KeyCode::A, KeyCode::B</autogen>
6.5.0以降のバージョンで仮想モデファイアキーというのが定義できるようになった。こいつはまったく新しいctrlキーみたいなもんで、既存の動きに影響を与えずにあらたなキーマッピングを得られるので非常に重宝する。
修飾するとき | 割り当てるとき |
---|---|
ModifierFlag::EXTRA1 | KeyCode::VK_MODIFIER_EXTRA1 |
ModifierFlag::EXTRA2 | KeyCode::VK_MODIFIER_EXTRA2 |
ModifierFlag::EXTRA3 | KeyCode::VK_MODIFIER_EXTRA3 |
ModifierFlag::EXTRA4 | KeyCode::VK_MODIFIER_EXTRA4 |
ModifierFlag::EXTRA5 | KeyCode::VK_MODIFIER_EXTRA5 |
これを普通のキー割り当てのように既存のキーに割り当てる。英数キーに割り当てて親指シフトのように使うには
<autogen>--KeyToKey-- KeyCode::JIS_EISUU, KeyCode::VK_MODIFIER_EXTRA1</autogen>
こうなる
今回やりたいのはMacBookの英数キーを押しながらesdxと押したらアローキーの上下左右になり afを押すとHomeとEndになるという動き
ポイントとしては英数キーはなんの働きでもない単なるプッシュスイッチとして動作させること。
そこで作者さんのtweetを眺めていたら。 12102016364 という風に仮想モデファイイアキーという、今までのどのキーでもないモデファイアキーを設定できるみたい
キー設定はこんな感じ
サンプルでいうKeyToModifierで英数キーにこの仮想モデファイヤを割り当ててから 仮想モデ+eとかのKey + Modifire to Keyの実装をすればよいのだな・・・ かなりすっきり開けたよ。
ということでXMLをつらつら組み上げてみる
/users/hoge/source/KeyRemap4MacBook-xxxxxxxxxxxxxxxx/files/prefpane/include/sample.xml
からいくつかぱくる。
まず英数をモデファイアに設定するために key to modifierの項目を見る
<item> <name>KeyToKey (Standard)</name> <appendix>A to B (KeyToKey)</appendix> <appendix>S to SHIFT_L (KeyToModifier)</appendix> <appendix>SHIFT_L to Return (ModifierToKey)</appendix> <appendix>Option_L to Command_L</appendix> <sysctl>remap.samples_keytokey_standard</sysctl> <autogen>--KeyToKey-- KeyCode::A, KeyCode::B</autogen> <autogen>--KeyToKey-- KeyCode::S, KeyCode::SHIFT_L</autogen> <autogen>--KeyToKey-- KeyCode::SHIFT_L, KeyCode::RETURN</autogen> <autogen>--KeyToKey-- KeyCode::OPTION_L, KeyCode::COMMAND_L</autogen> </item>
ここから取り出すと
<autogen>--KeyToKey-- KeyCode::S, KeyCode::SHIFT_L</autogen>
これだこれを英数から仮想モデに書き換える 英数のキーコードは
KeyCode::JIS_EISUU
なので
<autogen>--KeyToKey-- KeyCode::JIS_EISUU, KeyCode::VK_MODIFIER_EXTRA1</autogen>
こうなるそしてここにコンビネーションを書き入れる ダイアモンドカーソルのサンプルから引っ張ってくると
<item> <name>Control_L+WSAD to Up/Down/Left/Right</name> <sysctl>remap.diamond_cursor_controlL_wsad</sysctl> <autogen>--KeyToKey-- KeyCode::W, ModifierFlag::CONTROL_L, KeyCode::CURSOR_UP</autogen> <autogen>--KeyToKey-- KeyCode::S, ModifierFlag::CONTROL_L, KeyCode::CURSOR_DOWN</autogen> <autogen>--KeyToKey-- KeyCode::A, ModifierFlag::CONTROL_L, KeyCode::CURSOR_LEFT</autogen> <autogen>--KeyToKey-- KeyCode::D, ModifierFlag::CONTROL_L, KeyCode::CURSOR_RIGHT</autogen> </item>
これになると
書き換えると
<item> <name>exmod1+EXSD to Up/Down/Left/Right</name> <sysctl>remap.diamond_cursor_exmod1_exsd</sysctl> <autogen>--KeyToKey-- KeyCode::E, ModifierFlag::EXTRA1, KeyCode::CURSOR_UP</autogen> <autogen>--KeyToKey-- KeyCode::X, ModifierFlag::EXTRA1, KeyCode::CURSOR_DOWN</autogen> <autogen>--KeyToKey-- KeyCode::S, ModifierFlag::EXTRA1, KeyCode::CURSOR_LEFT</autogen> <autogen>--KeyToKey-- KeyCode::D, ModifierFlag::EXTRA1, KeyCode::CURSOR_RIGHT</autogen> </item>
こうなるこれにさっきにモデファイ分もいれて
<item> <name>exmod1+WXSD to Up/Down/Left/Right</name> <sysctl>remap.diamond_cursor_exmod1_exsd</sysctl> <autogen>--KeyToKey-- KeyCode::JIS_EISUU, KeyCode::VK_MODIFIER_EXTRA1</autogen> <autogen>--KeyToKey-- KeyCode::E, ModifierFlag::EXTRA1, KeyCode::CURSOR_UP</autogen> <autogen>--KeyToKey-- KeyCode::X, ModifierFlag::EXTRA1, KeyCode::CURSOR_DOWN</autogen> <autogen>--KeyToKey-- KeyCode::S, ModifierFlag::EXTRA1, KeyCode::CURSOR_LEFT</autogen> <autogen>--KeyToKey-- KeyCode::D, ModifierFlag::EXTRA1, KeyCode::CURSOR_RIGHT</autogen> </item>
できた! こいつをちゃんとしたXML階層にのっけて
<item> <name>Ore Mode</name> <list> <item> <name>exmod1+EXSD to Up/Down/Left/Right</name> <sysctl>remap.diamond_cursor_exmod1_exsd</sysctl> <autogen>--KeyToKey-- KeyCode::JIS_EISUU, KeyCode::VK_MODIFIER_EXTRA1</autogen> <autogen>--KeyToKey-- KeyCode::E, ModifierFlag::EXTRA1, KeyCode::CURSOR_UP</autogen> <autogen>--KeyToKey-- KeyCode::X, ModifierFlag::EXTRA1, KeyCode::CURSOR_DOWN</autogen> <autogen>--KeyToKey-- KeyCode::S, ModifierFlag::EXTRA1, KeyCode::CURSOR_LEFT</autogen> <autogen>--KeyToKey-- KeyCode::D, ModifierFlag::EXTRA1, KeyCode::CURSOR_RIGHT</autogen> </item> </list> </item>
こうなる checkbox.xmlの最後にくっつけて保存してさっきのやりかたでコンパイルしてインストール、設定が一覧に現れるのでチェックすれば有効になる。
HomeとENDも さらにmod1+Aとmod1+Fのキーでhomeとendにも割り当てたいので改造する。 ここでのポイントはMacのHomeとEndがWindowsのHomeとEndのような動作をしないということだ。
MacのHomeとEndはWindow頭に移動とWindow末尾に移動という動作になっている。 行頭行末移動は
command + ← command + →
というショートカットに割り当てられている。
なのでこいつをもってきて
<autogen>--KeyToKey-- KeyCode::A, ModifierFlag::EXTRA1, KeyCode::CURSOR_LEFT, ModifierFlag::COMMAND_L</autogen> <autogen>--KeyToKey-- KeyCode::F, ModifierFlag::EXTRA1, KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L</autogen>
このようにする。
おまけ MacではcommandキーがWindowsでいうControlキーのような立場にあるわけだが慣れないので多用するコピペだけctrlに移植する。
<item> <name>copy paste winstyle</name> <sysctl>remap.copy_paste_winstyle</sysctl> <autogen>--KeyToKey-- KeyCode::C, ModifierFlag::CONTROL_L, KeyCode::C, ModifierFlag::COMMAND_L</autogen> <autogen>--KeyToKey-- KeyCode::V, ModifierFlag::CONTROL_L, KeyCode::V, ModifierFlag::COMMAND_L</autogen> <autogen>--KeyToKey-- KeyCode::X, ModifierFlag::CONTROL_L, KeyCode::X, ModifierFlag::COMMAND_L</autogen> </item>