]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - keyboard/hhkb/keymap.c
Add tap toggle feature to action.
[qmk_firmware.git] / keyboard / hhkb / keymap.c
index 38461290b378d02aa58600653dd374dd6f6febbe..2d0dabd703c705c8bd7e6193f8a3e861d8245b18 100644 (file)
@@ -51,27 +51,20 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 }
 
 
-/*
-static const action_t PROGMEM fn_actions[] = {
-    ACTION_LAYER_TO_DEFAULT_ON_RELEASED,    // Fn0
-    ACTION_LAYER_SET_ON_PRESSED(1),         // Fn1
-    ACTION_LAYER_SET_TAP_KEY(2, KC_SLASH),  // Fn2
-    ACTION_LAYER_SET_TAP_KEY(3, KC_SCLN),   // Fn3
-    ACTION_LAYER_SET_ON_PRESSED(3),         // Fn4
-    ACTION_LAYER_SET_TAP_KEY(5, KC_SPC),    // Fn5
-    ACTION_NO,                              // Fn6
-    ACTION_NO,                              // Fn7
-};
-*/
 static const uint16_t PROGMEM fn_actions[] = {
     ACTION_LAYER_TO_DEFAULT_ON_RELEASED,    // Fn0
     ACTION_LAYER_SET_ON_PRESSED(1),         // Fn1
     ACTION_LAYER_SET_TAP_KEY(2, KC_SLASH),  // Fn2
     ACTION_LAYER_SET_TAP_KEY(3, KC_SCLN),   // Fn3
-    ACTION_LAYER_SET_ON_PRESSED(3),         // Fn4
+    //ACTION_LAYER_SET_ON_PRESSED(3),         // Fn4
+    ACTION_FUNCTION(0x01, 0xA), // Fn4
     ACTION_LAYER_SET_TAP_KEY(5, KC_SPC),    // Fn5
-    ACTION_NO,                              // Fn6
-    ACTION_NO,                              // Fn7
+    ACTION_LMODS_TAP(MOD_BIT(KC_LCTL), KC_BSPC), // Fn6
+    ACTION_RMODS_TAP(MOD_BIT(KC_RCTL), KC_ENT), // Fn7
+
+    ACTION_LMODS_TAP(MOD_BIT(KC_LSFT), ONE_SHOT),   // Fn8
+    ACTION_LAYER_SET_ON_RELEASED_TAP_TOGGLE(1),                     // Fn9
+    ACTION_LAYER_BIT_TAP_TOGGLE(1),                 // Fn10
 };
 
 
@@ -91,8 +84,8 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
      */
     KEYMAP(ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, BSLS,GRV, \
            TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSPC, \
-           LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   FN3, QUOT,ENT, \
-           LSFT,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, FN2, RSFT,FN1, \
+           FN6, A,   S,   D,   F,   G,   H,   J,   K,   L,   FN3, QUOT,FN7, \
+           FN8, Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, FN2, RSFT,FN10, \
                 LGUI,LALT,          FN5,                RALT,FN4),
 
     /* Layer 1: HHKB mode (HHKB Fn)
@@ -111,7 +104,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     KEYMAP(PWR, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, INS, DEL, \
            CAPS,NO,  NO,  NO,  NO,  NO,  NO,  NO,  PSCR,SLCK,BRK, UP,  NO,  BSPC, \
            LCTL,VOLD,VOLU,MUTE,NO,  NO,  PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, \
-           LSFT,NO,  NO,  NO,  NO,  NO,  PPLS,PMNS,END, PGDN,DOWN,RSFT,FN0, \
+           LSFT,NO,  NO,  NO,  NO,  NO,  PPLS,PMNS,END, PGDN,DOWN,RSFT,FN10, \
                 LGUI,LALT,          SPC,                RALT,RGUI),
 
     /* Layer 2: Vi mode (Slash)
@@ -208,7 +201,7 @@ action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col) {
         case KC_MS_UP ... KC_MS_ACCEL2:
             action.code = ACTION_MOUSEKEY(key);
             break;
-/*
+/* TODO
         case KC_LCTRL ... KC_LGUI:
             action.code = ACTION_LMODS(MOD_BIT(key));
             break;
@@ -216,8 +209,12 @@ action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col) {
             action.code = ACTION_RMODS(MOD_BIT(key)>>4);
             break;
 */
-        case KC_FN0 ... KC_FN7:
-            action.code = pgm_read_word(&fn_actions[FN_INDEX(key)]);
+        case KC_FN0 ... FN_MAX:
+            if (FN_INDEX(key) < sizeof(fn_actions) / sizeof(fn_actions[0])) {
+                action.code = pgm_read_word(&fn_actions[FN_INDEX(key)]);
+            } else {
+                action.code = ACTION_NO;
+            }
             break;
         case KC_NO ... KC_UNDEFINED:
         default:
@@ -226,3 +223,18 @@ action_t keymap_get_action(uint8_t layer, uint8_t row, uint8_t col) {
     }
     return action;
 }
+
+// TODO: how to define action function
+void action_call_function(keyevent_t event, uint8_t id)
+{
+    // '(' Shift+9
+    if (event.pressed) {
+        register_code(KC_LSHIFT);
+        register_code(KC_9);
+        debug("action_call_function: pressed: id: "); debug_hex(id); debug("\n");
+    } else {
+        unregister_code(KC_9);
+        unregister_code(KC_LSHIFT);
+        debug("action_call_function: released: id: "); debug_hex(id); debug("\n");
+    }
+}