keymap.c (12856B)
1 /* Copyright 2020 Takeshi Nishio 2 * 3 * This program is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published by 5 * the Free Software Foundation, either version 2 of the License, or 6 * (at your option) any later version. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 15 */ 16 #include QMK_KEYBOARD_H 17 #include "keymap_japanese.h" 18 19 // Defines names for use in layer keycodes and the keymap 20 enum layer_number { 21 _MAC = 0, 22 _WIN, 23 _NUM, 24 _LOWER, 25 _RAISE, 26 _NUM_RAISE, 27 _ADJUST 28 }; 29 30 // Tap Dance 31 enum tap_dances{ 32 TD_LSFT_CAPS = 0, 33 TD_ESC_NUM, 34 }; 35 36 // Tap Dance state 37 enum { 38 SINGLE_TAP = 1, 39 DOUBLE_TAP, 40 TRIPLE_TAP, 41 TAP_HOLD, 42 }; 43 44 // Declare the functions to be used with your tap dance key(s) 45 // Function associated with all tap dances 46 uint8_t cur_dance(tap_dance_state_t *state); 47 // Functions associated with individual tap dances 48 void ql_finished(tap_dance_state_t *state, void *user_data); 49 void ql_reset(tap_dance_state_t *state, void *user_data); 50 51 // Tap Dance definitions 52 tap_dance_action_t tap_dance_actions[] = { 53 [TD_LSFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), 54 [TD_ESC_NUM] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ql_finished, ql_reset), 55 }; 56 57 uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { 58 switch (keycode) { 59 case TD(TD_ESC_NUM): 60 return 275; 61 default: 62 return TAPPING_TERM; 63 } 64 } 65 66 // Key Macro 67 #define ESC_NUM TD(TD_ESC_NUM) 68 #define S_CAP TD(TD_LSFT_CAPS) 69 #define SP_RAI LT(_RAISE, KC_SPC) 70 #define SP_NRAI LT(_NUM_RAISE, KC_SPC) 71 #define SP_SFT MT(MOD_LSFT, KC_SPC) 72 #define S_BSLS RSFT_T(JP_BSLS) 73 #define C_SLSH RCTL_T(JP_SLSH) 74 #define CT_E LCTL(KC_E) 75 #define CT_A LCTL(KC_A) 76 #define ALT_GRV LALT(KC_GRV) 77 #define LOWER MO(_LOWER) 78 #define NUM TG(_NUM) 79 #define MAC PDF(_MAC) 80 #define WIN PDF(_WIN) 81 82 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 83 [_MAC] = LAYOUT_jp( 84 ESC_NUM,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, JP_MINS,KC_BSPC,JP_CIRC,JP_YEN, 85 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, JP_LBRC, 86 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_SCLN, KC_ENT, JP_COLN,JP_RBRC, 87 S_CAP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM,JP_DOT, C_SLSH, S_BSLS, KC_UP, LOWER, 88 KC_MUTE,KC_LALT,KC_LGUI,KC_LNG2, SP_SFT, SP_RAI, KC_LNG1,KC_RGUI,KC_RALT,KC_LEFT,KC_DOWN,KC_RGHT 89 ), 90 [_WIN] = LAYOUT_jp( 91 _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, 92 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, 93 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, 94 _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, 95 _______,KC_LGUI,KC_LALT,JP_MHEN, _______, _______, JP_HENK,JP_KANA,KC_APP, _______,_______,_______ 96 ), 97 [_NUM] = LAYOUT_jp( 98 _______,_______,_______,_______,_______,_______,_______,XXXXXXX,KC_PSLS,KC_PSLS,KC_PAST,_______,_______,_______,_______, 99 _______, _______,_______,_______,_______,_______,_______,KC_P7, KC_P8, KC_P9, KC_PPLS, _______,_______, 100 _______, _______,_______,_______,_______,_______,_______,KC_P4, KC_P5, KC_P6, XXXXXXX,_______, _______,_______, 101 _______, _______,_______,_______,_______,_______,_______,KC_P1, KC_P2, KC_P3, KC_PENT,_______,_______,_______, 102 _______,_______,_______,_______, _______, SP_NRAI, KC_P0, KC_PDOT,_______,_______,_______,_______ 103 ), 104 [_LOWER] = LAYOUT_jp( 105 KC_PAUS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, 106 KC_PSCR, _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_HOME, KC_END, KC_VOLU, 107 _______, _______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_LEFT,KC_RGHT, _______,KC_VOLD, 108 _______, _______,_______,_______,_______,_______,_______,_______,_______,KC_PGDN,KC_DOWN,_______,KC_PGUP,_______, 109 _______,_______,_______,_______, _______, _______, _______,_______,_______,KC_HOME,KC_PGDN,KC_END 110 ), 111 [_RAISE] = LAYOUT_jp( 112 KC_PAUS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, 113 KC_PSCR, _______,_______,CT_E, _______,_______,_______,_______,_______,_______,KC_PGUP, _______,_______, 114 _______, CT_A, _______,KC_DEL, KC_RGHT,KC_ESC, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,_______,_______, _______,_______, 115 _______, _______,_______,_______,_______,KC_LEFT,KC_PGDN,KC_ENT, _______,KC_MRWD,KC_MFFD,_______,KC_PGUP,_______, 116 _______,_______,_______,_______, _______, _______, _______,_______,_______,KC_HOME,KC_PGDN,KC_END 117 ), 118 [_NUM_RAISE] = LAYOUT_jp( 119 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, JP_MINS,KC_BSPC,JP_CIRC,JP_YEN, 120 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, JP_LBRC, 121 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_SCLN, KC_ENT, JP_COLN,JP_RBRC, 122 S_CAP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, JP_COMM,JP_DOT, C_SLSH, S_BSLS, KC_UP, _______, 123 _______,_______,_______,_______, _______, _______, _______,_______,_______,_______,_______,_______ 124 ), 125 [_ADJUST] = LAYOUT_jp( 126 _______,UG_HUEU,UG_SATU,UG_VALU,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, 127 _______, _______,WIN, _______,QK_BOOT,_______,UG_HUEU,UG_SATU,UG_VALU,_______,UG_PREV, _______,_______, 128 _______, _______,_______,_______,_______,_______,UG_HUED,UG_SATD,UG_VALD,UG_TOGG,UG_NEXT,_______, _______,_______, 129 _______, _______,_______,_______,_______,_______,NUM, MAC, _______,_______,_______,_______,_______,_______, 130 _______,_______,_______,_______, _______, _______, _______,_______,_______,_______,_______,_______ 131 ) 132 }; 133 134 #if defined(AUDIO_ENABLE) && defined(MUSIC_MAP) 135 const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = LAYOUT_jp( 136 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 137 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 138 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 139 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 140 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 141 ); 142 #endif 143 144 //------------------------------------------------------------------------------ 145 // RGB Light settings 146 #ifdef RGBLIGHT_LAYERS 147 148 // for Default layer (= Base layer) 149 const rgblight_segment_t PROGMEM my_mac_layer[] = RGBLIGHT_LAYER_SEGMENTS( 150 {0, 1, HSV_WHITE} 151 ); 152 const rgblight_segment_t PROGMEM my_win_layer[] = RGBLIGHT_LAYER_SEGMENTS( 153 {0, 1, HSV_BLUE} 154 ); 155 const rgblight_segment_t PROGMEM my_num_layer[] = RGBLIGHT_LAYER_SEGMENTS( 156 {0, 1, HSV_YELLOW} 157 ); 158 159 // for temporal layer 160 const rgblight_segment_t PROGMEM my_caps_layer[] = RGBLIGHT_LAYER_SEGMENTS( 161 {1, 1, HSV_MAGENTA} 162 ); 163 164 const rgblight_segment_t PROGMEM my_lower_layer[] = RGBLIGHT_LAYER_SEGMENTS( 165 {1, 1, HSV_GREEN} 166 ); 167 168 const rgblight_segment_t PROGMEM my_raise_layer[] = RGBLIGHT_LAYER_SEGMENTS( 169 {1, 1, HSV_CYAN} 170 ); 171 172 const rgblight_segment_t PROGMEM my_num_raise_layer[] = RGBLIGHT_LAYER_SEGMENTS( 173 {1, 1, HSV_GOLD} 174 ); 175 176 const rgblight_segment_t PROGMEM my_adjust_layer[] = RGBLIGHT_LAYER_SEGMENTS( 177 {1, 1, HSV_RED} 178 ); 179 180 // Define the array of layers. Later layers take precedence 181 const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( 182 my_mac_layer, 183 my_win_layer, 184 my_num_layer, 185 my_caps_layer, 186 my_lower_layer, 187 my_raise_layer, 188 my_num_raise_layer, 189 my_adjust_layer 190 ); 191 192 void keyboard_post_init_user(void) { 193 // Enable the LED layers 194 rgblight_layers = my_rgb_layers; 195 } 196 197 // Enabling and disabling lighting layers 198 layer_state_t layer_state_set_user(layer_state_t state) { 199 state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); 200 201 rgblight_set_layer_state(2, layer_state_cmp(state, _NUM)); 202 rgblight_set_layer_state(4, layer_state_cmp(state, _LOWER)); 203 rgblight_set_layer_state(5, layer_state_cmp(state, _RAISE)); 204 rgblight_set_layer_state(6, layer_state_cmp(state, _NUM_RAISE)); 205 rgblight_set_layer_state(7, layer_state_cmp(state, _ADJUST)); 206 207 return state; 208 } 209 210 // Enabling and disabling lighting layers for default layer 211 layer_state_t default_layer_state_set_user(layer_state_t state) { 212 rgblight_set_layer_state(0, layer_state_cmp(state, _MAC)); 213 rgblight_set_layer_state(1, layer_state_cmp(state, _WIN)); 214 rgblight_set_layer_state(2, layer_state_cmp(state, _NUM)); 215 216 return state; 217 } 218 219 bool led_update_user(led_t led_state) { 220 rgblight_set_layer_state(3, led_state.caps_lock); 221 return true; 222 } 223 #endif 224 225 226 //------------------------------------------------------------------------------ 227 // Rotary Encoder 228 bool encoder_update_user(uint8_t index, bool clockwise) { 229 if (index == 0) { /* First encoder, Right side */ 230 if (clockwise) { 231 tap_code(KC_VOLD); 232 } else { 233 tap_code(KC_VOLU); 234 } 235 } 236 if (index == 1) { /* Second encoder, Left side */ 237 if (clockwise) { 238 tap_code(KC_VOLD); 239 } else { 240 tap_code(KC_VOLU); 241 } 242 } 243 return true; 244 } 245 246 247 //------------------------------------------------------------------------------ 248 // Tap Dance function 249 250 251 typedef struct { 252 bool is_press_action; 253 uint8_t state; 254 } tap; 255 256 // Determine the current tap dance state 257 uint8_t cur_dance(tap_dance_state_t *state) { 258 if (state->count == 1) { 259 if (!state->pressed) { 260 return SINGLE_TAP; 261 } else { 262 return TAP_HOLD; 263 } 264 } else if (state->count == 2) { 265 if (!state->pressed) { 266 return DOUBLE_TAP; 267 } else { 268 return TAP_HOLD; 269 } 270 } else if (state->count == 3) { 271 if (!state->pressed) { 272 return TRIPLE_TAP; 273 } else { 274 return TAP_HOLD; 275 } 276 } else { 277 return 8; // Magic number. At some point this method will expand to work for more presses 278 } 279 } 280 281 // Initialize tap structure associated with example tap dance key 282 static tap ql_tap_state = { 283 .is_press_action = true, 284 .state = 0 285 }; 286 287 // Functions that control what our tap dance key does 288 void ql_finished(tap_dance_state_t *state, void *user_data) { 289 ql_tap_state.state = cur_dance(state); 290 switch(TAP_DANCE_KEYCODE(state)) { 291 case TD(TD_ESC_NUM): // ESC key action 292 switch (ql_tap_state.state) { 293 case SINGLE_TAP: 294 case DOUBLE_TAP: 295 // ESC 296 tap_code(KC_ESC); 297 break; 298 case TAP_HOLD: 299 // temporal layer change 300 layer_on(_NUM); 301 break; 302 case TRIPLE_TAP: 303 // toggle layer 304 // Check to see if the layer is already set 305 if (layer_state_is(_NUM)) { 306 // If already set, then switch it off 307 layer_off(_NUM); 308 } else { 309 // If not already set, then switch the layer on 310 layer_on(_NUM); 311 } 312 break; 313 } 314 break; 315 } 316 } 317 318 void ql_reset(tap_dance_state_t *state, void *user_data) { 319 switch(TAP_DANCE_KEYCODE(state)) { 320 case TD(TD_ESC_NUM): 321 // If the key was held down and now is released then switch off the layer 322 if (ql_tap_state.state == TAP_HOLD) { 323 layer_off(_NUM); 324 } 325 ql_tap_state.state = 0; 326 break; 327 } 328 }