KeyRemap4MacBookのパッチ書いた

KeyRemap4MacBookのパッチ書いた。

  • Ctrl + Option + : を Cmd + TAB
  • Ctrl + Option + ; を Cmd + TAB + shift

キーバインドを追加します。デフォルトのCommand + TAB ( アプリケーションの切り替え )の挙動を割り当てることになります。なんだかニッチなバインドです。英数をOptionに切り替えておくとほぼホームポジションのまんま全体を押せる感じなんですけど。

( 自分の設定では Ctrl+; / Ctrl+: をTerminalやSafariEmacsのタブの切り替えに使っているせいか、 ; と : は「横方向」な切り替えボタンとして馴染んでたので ; と : を使ってアプリの切り替え方法無いかなぁーと模索したらとりあえずこうなった経緯。 )


( KeyRemap4MacBookをごにょごにょしたい方は本家の

http://www.pqrs.org/tekezo/macosx/keyremap4macbook/source.html.ja

を眺めながら作業しましょう。 追加の機能を取り入れやすいようにビルド方法が工夫されていて感動しました!

diff -u -r KeyRemap4MacBook-5.1.0.org/files/prefpane/checkbox.xml KeyRemap4MacBook-5.1.0/files/prefpane/checkbox.xml
--- KeyRemap4MacBook-5.1.0.org/files/prefpane/checkbox.xml	2008-11-26 13:26:45.000000000 +0900
+++ KeyRemap4MacBook-5.1.0/files/prefpane/checkbox.xml	2008-11-26 14:01:30.000000000 +0900
@@ -706,6 +706,14 @@
           <name>Option+Tab to F5</name>
           <sysctl>remap.optionTab2f5</sysctl>
         </item>
+	<item>
+          <name>Controll+Option+; to Command+Shift+Tab</name>
+          <sysctl>remap.controllLOptionSemicolon2commandShiftLTab</sysctl>
+        </item>
+	<item>
+          <name>Controll+Option+: to Command+Tab</name>
+          <sysctl>remap.controllLOptionColon2commandTab</sysctl>
+        </item>
       </list>
     </item>
 
diff -u -r KeyRemap4MacBook-5.1.0.org/files/share/reset KeyRemap4MacBook-5.1.0/files/share/reset
--- KeyRemap4MacBook-5.1.0.org/files/share/reset	2008-11-26 13:26:45.000000000 +0900
+++ KeyRemap4MacBook-5.1.0/files/share/reset	2008-11-26 14:29:23.000000000 +0900
@@ -126,6 +126,8 @@
 remap.commandTab2f5 0
 remap.optionTab2commandTab 0
 remap.optionTab2f5 0
+remap.controllLOptionSemicolon2commandShiftLTab 0
+remap.controllLOptionColon2commandTab 0
 option.emacsmode_controlD 0
 option.emacsmode_controlH 0
 option.emacsmode_controlI 0
diff -u -r KeyRemap4MacBook-5.1.0.org/src/core/kext/remap.cpp KeyRemap4MacBook-5.1.0/src/core/kext/remap.cpp
--- KeyRemap4MacBook-5.1.0.org/src/core/kext/remap.cpp	2008-11-26 13:26:45.000000000 +0900
+++ KeyRemap4MacBook-5.1.0/src/core/kext/remap.cpp	2008-11-26 14:01:31.000000000 +0900
@@ -1081,6 +1081,37 @@
     }
   }
 
+  void
+  remap_controllLOptionSemicolon2commandShiftLTab(const RemapParams &params)
+  {
+    if (! config.remap_controllLOptionSemicolon2commandShiftLTab) return;
+
+    if ( params.ex_origKey != KeyCode::SEMICOLON) return;
+
+    if (allFlagStatus.isHeldDown_option() && allFlagStatus.isHeldDown_control()) {
+      *(params.key) = KeyCode::TAB;
+      allFlagStatus.optionL.temporary_decrease();
+      allFlagStatus.controlL.temporary_decrease();
+      allFlagStatus.shiftL.temporary_increase();
+      allFlagStatus.commandL.temporary_increase();
+     }
+  }
+
+  void
+  remap_controllLOptionColon2commandTab(const RemapParams &params)
+  {
+    if (! config.remap_controllLOptionColon2commandTab ) return;
+
+    if ( params.ex_origKey != KeyCode::QUOTE) return;
+
+    if (allFlagStatus.isHeldDown_option() && allFlagStatus.isHeldDown_control()) {
+      *(params.key) = KeyCode::TAB;
+      allFlagStatus.optionL.temporary_decrease();
+      allFlagStatus.controlL.temporary_decrease();
+      allFlagStatus.commandL.temporary_increase();
+     }
+  }
+  
   // ----------------------------------------
   void
   remap_hhkmode(const RemapParams &params)
@@ -2627,6 +2658,8 @@
   remap_commandTab2f5(params);
   remap_optionTab2f5(params);
   remap_optionTab2commandTab(params);
+  remap_controllLOptionSemicolon2commandShiftLTab(params);
+  remap_controllLOptionColon2commandTab(params);
 
   // ----------------------------------------
   remap_app_vm_commandspace2optionbackquote(params);


細かく眺めてないので この書き方がお作法的に正しいのかどうかちょと分からない ...