MacBookキーボードをもっとHappy Hacking Keyboardにする
をソースコードに修正を加えた上で利用し、MacBookキーボードをHHKBに近づけようと。キーボードはどちらも英語配列のものを使っている。
MacBookを自宅で使う時はずっと外付けキーボードを使っている。見た目重視で極薄Apple Keyboardを利用していたが、集中して長時間タイプしていると隣のキーを押してしまうなどタイプミスに苛立ち、しばらく前からHHKB Lite2 for Macを利用している。始めは少しとまどったが、Fnキー押しながらのカーソルキー操作に慣れてくると、本当に手首の位置を変えずにタイプでき、マウスに右手をやるのも面倒になるぐらい。手首の位置を固定・安定・疲労減の目的で買ったリストレストが大当たりで、HHKB使うならこのリストレストが欠かせない。
エレコム リストレスト 疲労軽減 "COMFY" ロング(ブラック) MOH-012BK
- 出版社/メーカー: エレコム
- 発売日: 2006/10/14
- メディア: Personal Computers
- 購入: 12人 クリック: 77回
- この商品を含むブログ (2件) を見る
こんなふうに設置してる。
この感じに慣れた後で困ったのが、場所を変えてMacBookのキーボードがHHKBに慣れた指に馴染めなくなったこと。一番困るのはdeleteキーの場所だ。HHKBではReturnキーのすぐ上にあり手首を動かさずに右薬指で押しているのだが、MacBookキーボード(英語配列)だとそこはバックスラッシュなわけで。それをなんとかしたいと見つけたKeyRemap4MacBookだったのだが、勢いでそれ以外もソース修正を行った。
ソース修正内容
オリジナルのソースはKeyRemap4MacBook-3.2.0.tar.gzにした。それには「HHK compatible Arrow Key Mode」というモードが用意されているので、それに、
- MacBookのキーボードでのみ有効
- deleteキーと「\」キーを入れ替える
- 右のshiftキーをfnキーとして扱う
- 数字キー(1〜0)と「-」「=」キーをfnキーと合わせて、F1〜F12キーとして扱う
を追加する。次は変更したソースファイル。
src/kext/remap.cpp
remap_hhkmode(const RemapParams ¶ms)
を以下のように追記変更。
void remap_hhkmode(const RemapParams ¶ms) { if (! config.remap_hhkmode) return; // 追加その1:始まり ====== // enable for only MacBook Keyboard if (*(params.keyboardType) != KeyboardType::MACBOOK) return; // exchange delete and backslash RemapUtil::keyToKey(params, KeyCode::BACKSLASH, KeyCode::DELETE); RemapUtil::keyToKey(params, KeyCode::DELETE, KeyCode::BACKSLASH); // shiftR => fn RemapUtil::modifierToModifier(params, ModifierFlag::SHIFT_R, ModifierFlag::FN); RemapUtil::toFN(params); // 追加その1:終わり ====== if (! allFlagStatus.fn.isHeldDown()) return; allFlagStatus.keypad = false; // [ => up if (params.ex_origKey == KeyCode::BRACKET_LEFT) { *(params.key) = KeyCode::CURSOR_UP; allFlagStatus.cursor = true; allFlagStatus.fn.temporary_decrease(); } // ※中略※ // , => End if (params.ex_origKey == KeyCode::COMMA) { *(params.key) = KeyCode::END; } // 追加その2:始まり ====== if (params.ex_origKey == KeyCode::FN_KEY_1) { *(params.key) = KeyCode::F1; } if (params.ex_origKey == KeyCode::FN_KEY_2) { *(params.key) = KeyCode::F2; } if (params.ex_origKey == KeyCode::FN_KEY_3) { *(params.key) = KeyCode::F3; } if (params.ex_origKey == KeyCode::FN_KEY_4) { *(params.key) = KeyCode::F4; } if (params.ex_origKey == KeyCode::FN_KEY_5) { *(params.key) = KeyCode::F5; } if (params.ex_origKey == KeyCode::FN_KEY_6 || params.ex_origKey == KeyCode::KEY_6) { *(params.key) = KeyCode::F6; } if (params.ex_origKey == KeyCode::FN_KEY_7 || params.ex_origKey == KeyCode::KEY_7) { *(params.key) = KeyCode::F7; } if (params.ex_origKey == KeyCode::FN_KEY_8 || params.ex_origKey == KeyCode::KEY_8) { *(params.key) = KeyCode::F8; } if (params.ex_origKey == KeyCode::FN_KEY_9 || params.ex_origKey == KeyCode::KEY_9) { *(params.key) = KeyCode::F9; } if (params.ex_origKey == KeyCode::FN_KEY_0 || params.ex_origKey == KeyCode::KEY_0) { *(params.key) = KeyCode::F10; } if (params.ex_origKey == KeyCode::FN_KEY_MINUS || params.ex_origKey == KeyCode::MINUS) { *(params.key) = KeyCode::F11; } if (params.ex_origKey == KeyCode::FN_KEY_EQUAL) { *(params.key) = KeyCode::F12; } // 追加その2:終わり ====== }
ここにこのようにまとめれば同ファイルのorg_pqrs_KeyRemap4MacBook::remap_core(const RemapParams ¶ms)
も、files/prefpane/sysctl.xmlの修正も必要ない。ただ、左Fnキー・右Fnキー(元右shiftキー)を押しながらの数字キーなどのKeyCodeがそれぞれ変わったりするので、次のファイルも編集した。
src/kext/keycode.cpp
namespace KeyCode { enum KeyCode { // ※中略※ // 追加始まり ====== FN_KEY_1 = 18, FN_KEY_2 = 19, FN_KEY_3 = 20, FN_KEY_4 = 21, FN_KEY_5 = 23, FN_KEY_6 = 71, FN_KEY_7 = 89, FN_KEY_8 = 91, FN_KEY_9 = 92, FN_KEY_0 = 75, FN_KEY_MINUS = 81, FN_KEY_EQUAL = 24, // 追加終わり ====== // ※中略※ }; }
保存してmakeしてpkgインストールして有効化しておしまい
ソースのトップディレクトリで
make clean all
KeyRemap4MacBook-3.2.0.pkgが作成されるがそれをインストール(アップグレード)しても自分の環境(Mac OS 10.4.11)ではシステム環境設定に設定項目が増えない。ソースからmakeしたものではなくpkgダウンロードして最初にインストールしたときは項目追加されたんだけど。
error: There is no SDK at specified SDKROOT path '/MacOSX10.4u.sdk'
が出ているのが原因かなと思ったけど今はあまり調べずに
sudo sysctl -w keyremap4macbook.remap.hhkmode=1
で設定を有効化した。もちろん再起動とかしても設定は残る。
MacBookキーボードに最初からある左Fnキーと右のshiftキーをFnキーにしたもの、それぞれの挙動が少し違って無理矢理合わせている感があるな…。数字キーなどでは挙動が同じになるようにしたが、実際のF7キーとかをそれぞれのFnキーと合わせて押すと挙動が変わる。が、F7キーとかHHKBにはないし使わないし問題ないやってことで今回はこれにて終了。また追記するかもしれない。でも、当初の目的(deleteと「\」の入れ替え)以上のことはできた。