]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
macros
authorJack Humbert <jack.humb@gmail.com>
Mon, 23 Mar 2015 04:33:54 +0000 (00:33 -0400)
committerJack Humbert <jack.humb@gmail.com>
Mon, 23 Mar 2015 04:33:54 +0000 (00:33 -0400)
keyboard/planck/extended_keymap_common.c
keyboard/planck/extended_keymap_common.h
keyboard/planck/extended_keymap_jack.c

index d9f79ac041cbb283c53819288b240d6aba8ad136..f8fc3209fb63de9a8380c3641090b0f015ace553 100644 (file)
@@ -33,15 +33,19 @@ action_t action_for_key(uint8_t layer, keypos_t key)
        // 16bit keycodes - important
     uint16_t keycode = keymap_key_to_keycode(layer, key);
 
-    if (keycode > 0x00FF && keycode < 0x2000) {
+    if (keycode >= 0x0100 && keycode < 0x2000) {
        // Has a modifier
        action_t action;
        // Split it up
        action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF);
        return action;
-       } else if (keycode > 0x1FFF && keycode < 0x3000) {
+       } else if (keycode >= 0x2000 && keycode < 0x3000) {
                // Is a shortcut for function layer, pull last 12bits
         return keymap_func_to_action(keycode & 0xFFF);
+       } else if (keycode >= 0x3000 && keycode < 0x4000) {
+       action_t action;
+       action.code = ACTION_MACRO(keycode & 0xFF);
+       return action;
        }
 
     switch (keycode) {
@@ -173,9 +177,8 @@ action_t keymap_fn_to_action(uint16_t keycode)
     return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
 }
 
-/* translates Fn keycode to action */
 action_t keymap_func_to_action(uint16_t keycode)
 {
        // For FUNC without 8bit limit
     return (action_t){ .code = pgm_read_word(&fn_actions[(int)keycode]) };
-}
\ No newline at end of file
+}
index 24c2cb848e1e473c18295a722552fbcb942d428b..66712459c6e3478f3095330dd4a4e3c4c59e2007 100644 (file)
@@ -111,5 +111,42 @@ extern const uint16_t fn_actions[];
 #define CM_DOT  KC_DOT
 #define CM_SLSH KC_SLSH
 
+// Make it easy to support these in macros
+#define KC_CM_Q    CM_Q    
+#define KC_CM_W    CM_W    
+#define KC_CM_F    CM_F    
+#define KC_CM_P    CM_P    
+#define KC_CM_G    CM_G    
+#define KC_CM_J    CM_J    
+#define KC_CM_L    CM_L    
+#define KC_CM_U    CM_U    
+#define KC_CM_Y    CM_Y    
+#define KC_CM_SCLN CM_SCLN 
+
+#define KC_CM_A    CM_A    
+#define KC_CM_R    CM_R    
+#define KC_CM_S    CM_S    
+#define KC_CM_T    CM_T    
+#define KC_CM_D    CM_D    
+#define KC_CM_H    CM_H    
+#define KC_CM_N    CM_N    
+#define KC_CM_E    CM_E    
+#define KC_CM_I    CM_I    
+#define KC_CM_O    CM_O    
+
+#define KC_CM_Z    CM_Z    
+#define KC_CM_X    CM_X    
+#define KC_CM_C    CM_C    
+#define KC_CM_V    CM_V    
+#define KC_CM_B    CM_B    
+#define KC_CM_K    CM_K    
+#define KC_CM_M    CM_M    
+#define KC_CM_COMM CM_COMM 
+#define KC_CM_DOT  CM_DOT  
+#define KC_CM_SLSH CM_SLSH 
+
+#define M(kc) kc | 0x3000
+
+#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
 
 #endif
index ef1eae49f71d6e9a4fc0539c70f43a1629536644..416ae83450bbd932f944db6cfd33c2954ecb9d15 100644 (file)
@@ -5,7 +5,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   {KC_TAB,  CM_Q,    CM_W,    CM_F,    CM_P,    CM_G,    CM_J,    CM_L,    CM_U,    CM_Y,    CM_SCLN, KC_BSPC},
   {KC_ESC,  CM_A,    CM_R,    CM_S,    CM_T,    CM_D,    CM_H,    CM_N,    CM_E,    CM_I,    CM_O,     KC_QUOT},
   {KC_LSFT, CM_Z,    CM_X,    CM_C,    CM_V,    CM_B,    CM_K,    CM_M,    CM_COMM, CM_DOT,  CM_SLSH, KC_ENT},
-  {KC_RSFT, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2),    KC_SPC,   KC_NO,    FUNC(1),   KC_LEFT, KC_DOWN, KC_UP,  KC_RGHT}
+  {M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2),    KC_SPC,   KC_NO,    FUNC(1),   KC_LEFT, KC_DOWN, KC_UP,  KC_RGHT}
 },
 [1] = { /* Jack hard-coded colemak */
   {KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC},
@@ -35,4 +35,15 @@ const uint16_t PROGMEM fn_actions[] = {
     [3] = ACTION_DEFAULT_LAYER_SET(0),
     [4] = ACTION_DEFAULT_LAYER_SET(1),
 
-};
\ No newline at end of file
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) 
+{
+  // MACRODOWN only works in this function
+    switch(id) {
+      case 0:
+        return MACRODOWN(T(CM_T), END);
+      break;
+    } 
+    return MACRO_NONE;
+};