aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboard/hhkb/keymap_spacefn.c45
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 */
71enum function_id {
72 CTRL_SPACE_I, // Ctrl + Up(SpaceFN) -> PgUp
73};
74
75void 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