diff options
| -rw-r--r-- | keyboard/hhkb/keymap_spacefn.c | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/keyboard/hhkb/keymap_spacefn.c b/keyboard/hhkb/keymap_spacefn.c index b77e9edb9..deff920ae 100644 --- a/keyboard/hhkb/keymap_spacefn.c +++ b/keyboard/hhkb/keymap_spacefn.c | |||
| @@ -58,12 +58,53 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 58 | * `-------------------------------------------' | 58 | * `-------------------------------------------' |
| 59 | */ | 59 | */ |
| 60 | KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,DEL, \ | 60 | KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,DEL, \ |
| 61 | TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS,INS, \ | 61 | TRNS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,FN3, END, PSCR,SLCK,PAUS,INS, \ |
| 62 | TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS, \ | 62 | TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS, \ |
| 63 | TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN2, TRNS,TRNS,TRNS,NO, \ | 63 | TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN2, TRNS,TRNS,TRNS,NO, \ |
| 64 | TRNS,TRNS, TRNS, TRNS,TRNS), | 64 | TRNS,TRNS, TRNS, TRNS,TRNS), |
| 65 | }; | 65 | }; |
| 66 | 66 | ||
| 67 | |||
| 68 | /* | ||
| 69 | * user defined action function | ||
| 70 | */ | ||
| 71 | enum function_id { | ||
| 72 | CTRL_SPACE_I, // Ctrl + Up(SpaceFN) -> PgUp | ||
| 73 | }; | ||
| 74 | |||
| 75 | void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) | ||
| 76 | { | ||
| 77 | # define MODS_CTRL_MASK (MOD_BIT(KC_LCTRL)|MOD_BIT(KC_RCTRL)) | ||
| 78 | static uint8_t ctrl_space_i_prev_ctrl; | ||
| 79 | |||
| 80 | switch (id) { | ||
| 81 | // Ctrl + Up(SpaceFN) -> PgUp | ||
| 82 | case CTRL_SPACE_I: | ||
| 83 | ctrl_space_i_prev_ctrl = get_mods()&MODS_CTRL_MASK; | ||
| 84 | if (record->event.pressed) { | ||
| 85 | if (ctrl_space_i_prev_ctrl) { | ||
| 86 | del_mods(ctrl_space_i_prev_ctrl); // remove Ctrl | ||
| 87 | add_key(KC_PGUP); | ||
| 88 | send_keyboard_report(); // send PgUp without Ctrl | ||
| 89 | add_mods(ctrl_space_i_prev_ctrl); // return Ctrl but not sent | ||
| 90 | } else { | ||
| 91 | add_key(KC_UP); | ||
| 92 | send_keyboard_report(); | ||
| 93 | } | ||
| 94 | } else { | ||
| 95 | if (ctrl_space_i_prev_ctrl) { | ||
| 96 | del_key(KC_PGUP); | ||
| 97 | send_keyboard_report(); | ||
| 98 | } else { | ||
| 99 | del_key(KC_UP); | ||
| 100 | send_keyboard_report(); | ||
| 101 | } | ||
| 102 | } | ||
| 103 | break; | ||
| 104 | } | ||
| 105 | } | ||
| 106 | |||
| 107 | |||
| 67 | /* | 108 | /* |
| 68 | * Fn action definition | 109 | * Fn action definition |
| 69 | */ | 110 | */ |
| @@ -71,5 +112,5 @@ const uint16_t PROGMEM fn_actions[] = { | |||
| 71 | [0] = ACTION_LAYER_MOMENTARY(1), | 112 | [0] = ACTION_LAYER_MOMENTARY(1), |
| 72 | [1] = ACTION_LAYER_TAP_KEY(2, KC_SPACE), | 113 | [1] = ACTION_LAYER_TAP_KEY(2, KC_SPACE), |
| 73 | [2] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde | 114 | [2] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde |
| 115 | [3] = ACTION_FUNCTION(CTRL_SPACE_I), // Ctrl + Up(SpaceFN) -> PgUp | ||
| 74 | }; | 116 | }; |
| 75 | |||
