keymap.c (14157B)
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 _______, AU_TOGG,CK_TOGG,MU_TOGG,MU_NEXT,_______,UG_HUED,UG_SATD,UG_VALD,UG_TOGG,UG_NEXT,_______, _______,_______, 129 _______, CK_RST, CK_DOWN,CK_UP ,_______,_______,NUM, MAC, _______,_______,_______,_______,_______,_______, 130 _______,_______,_______,_______, _______, _______, _______,_______,_______,_______,_______,_______ 131 ) 132 }; 133 134 //------------------------------------------------------------------------------ 135 // RGB Light settings 136 #ifdef RGBLIGHT_LAYERS 137 138 // Indicator LED settings 139 #define JONES_LED_INDICATOR_INDEX 12 // where to start indicator 140 #define JONES_LED_INDICATOR_COUNT 2 // how many leds for indicator 141 #define JONES_LED_INDICATOR_CHANGE_COUNT 1 // how meny leds to change color for temporally layer 142 #define JONES_LED_DIMMER_LEVEL 200 // brightness dimmer 143 144 // for Default layer (= Base layer) 145 const rgblight_segment_t PROGMEM my_mac_layer[] = RGBLIGHT_LAYER_SEGMENTS( 146 {JONES_LED_INDICATOR_INDEX , JONES_LED_INDICATOR_COUNT, HSV_WHITE - JONES_LED_DIMMER_LEVEL} 147 ); 148 const rgblight_segment_t PROGMEM my_win_layer[] = RGBLIGHT_LAYER_SEGMENTS( 149 {JONES_LED_INDICATOR_INDEX , JONES_LED_INDICATOR_COUNT, HSV_BLUE - JONES_LED_DIMMER_LEVEL} 150 ); 151 const rgblight_segment_t PROGMEM my_num_layer[] = RGBLIGHT_LAYER_SEGMENTS( 152 {JONES_LED_INDICATOR_INDEX , JONES_LED_INDICATOR_COUNT, HSV_YELLOW - JONES_LED_DIMMER_LEVEL} 153 ); 154 155 // for temporal layer 156 const rgblight_segment_t PROGMEM my_caps_layer[] = RGBLIGHT_LAYER_SEGMENTS( 157 {JONES_LED_INDICATOR_INDEX , JONES_LED_INDICATOR_CHANGE_COUNT, HSV_MAGENTA - JONES_LED_DIMMER_LEVEL} 158 ); 159 160 const rgblight_segment_t PROGMEM my_lower_layer[] = RGBLIGHT_LAYER_SEGMENTS( 161 {JONES_LED_INDICATOR_INDEX , JONES_LED_INDICATOR_CHANGE_COUNT, HSV_GREEN - JONES_LED_DIMMER_LEVEL} 162 ); 163 164 const rgblight_segment_t PROGMEM my_raise_layer[] = RGBLIGHT_LAYER_SEGMENTS( 165 {JONES_LED_INDICATOR_INDEX , JONES_LED_INDICATOR_CHANGE_COUNT, HSV_CYAN - JONES_LED_DIMMER_LEVEL} 166 ); 167 168 const rgblight_segment_t PROGMEM my_num_raise_layer[] = RGBLIGHT_LAYER_SEGMENTS( 169 {JONES_LED_INDICATOR_INDEX , JONES_LED_INDICATOR_CHANGE_COUNT, HSV_GOLD - JONES_LED_DIMMER_LEVEL} 170 ); 171 172 const rgblight_segment_t PROGMEM my_adjust_layer[] = RGBLIGHT_LAYER_SEGMENTS( 173 {JONES_LED_INDICATOR_INDEX , JONES_LED_INDICATOR_CHANGE_COUNT, HSV_RED - JONES_LED_DIMMER_LEVEL} 174 ); 175 176 // Define the array of layers. Later layers take precedence 177 const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( 178 my_mac_layer, 179 my_win_layer, 180 my_num_layer, 181 my_caps_layer, 182 my_lower_layer, 183 my_raise_layer, 184 my_num_raise_layer, 185 my_adjust_layer 186 ); 187 188 void keyboard_post_init_user(void) { 189 // Enable the LED layers 190 rgblight_layers = my_rgb_layers; 191 } 192 193 // Enabling and disabling lighting layers 194 layer_state_t layer_state_set_user(layer_state_t state) { 195 state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); 196 197 rgblight_set_layer_state(2, layer_state_cmp(state, _NUM)); 198 rgblight_set_layer_state(4, layer_state_cmp(state, _LOWER)); 199 rgblight_set_layer_state(5, layer_state_cmp(state, _RAISE)); 200 rgblight_set_layer_state(6, layer_state_cmp(state, _NUM_RAISE)); 201 rgblight_set_layer_state(7, layer_state_cmp(state, _ADJUST)); 202 203 return state; 204 } 205 206 // Enabling and disabling lighting layers for default layer 207 layer_state_t default_layer_state_set_user(layer_state_t state) { 208 rgblight_set_layer_state(0, layer_state_cmp(state, _MAC)); 209 rgblight_set_layer_state(1, layer_state_cmp(state, _WIN)); 210 rgblight_set_layer_state(2, layer_state_cmp(state, _NUM)); 211 212 return state; 213 } 214 215 bool led_update_user(led_t led_state) { 216 rgblight_set_layer_state(3, led_state.caps_lock); 217 return true; 218 } 219 #endif 220 221 222 //------------------------------------------------------------------------------ 223 // Rotary Encoder 224 bool encoder_update_user(uint8_t index, bool clockwise) { 225 if (index == 0) { /* First encoder, Right side */ 226 if (clockwise) { 227 tap_code(KC_VOLD); 228 } else { 229 tap_code(KC_VOLU); 230 } 231 } 232 if (index == 1) { /* Second encoder, Left side */ 233 switch(get_highest_layer(layer_state)) { 234 case _LOWER: 235 if (clockwise) { 236 rgblight_decrease_hue(); 237 } else { 238 rgblight_increase_hue(); 239 } 240 break; 241 case _RAISE: 242 if (clockwise) { 243 rgblight_decrease_val(); 244 } else { 245 rgblight_increase_val(); 246 } 247 break; 248 case _ADJUST: 249 if (clockwise) { 250 rgblight_step_reverse(); 251 } else { 252 rgblight_step(); 253 } 254 break; 255 default: 256 if (clockwise) { 257 tap_code(KC_VOLD); 258 } else { 259 tap_code(KC_VOLU); 260 } 261 break; 262 } 263 } 264 return true; 265 } 266 267 268 //------------------------------------------------------------------------------ 269 // Tap Dance function 270 271 272 typedef struct { 273 bool is_press_action; 274 uint8_t state; 275 } tap; 276 277 // Determine the current tap dance state 278 uint8_t cur_dance(tap_dance_state_t *state) { 279 if (state->count == 1) { 280 if (!state->pressed) { 281 return SINGLE_TAP; 282 } else { 283 return TAP_HOLD; 284 } 285 } else if (state->count == 2) { 286 if (!state->pressed) { 287 return DOUBLE_TAP; 288 } else { 289 return TAP_HOLD; 290 } 291 } else if (state->count == 3) { 292 if (!state->pressed) { 293 return TRIPLE_TAP; 294 } else { 295 return TAP_HOLD; 296 } 297 } else { 298 return 8; // Magic number. At some point this method will expand to work for more presses 299 } 300 } 301 302 // Initialize tap structure associated with example tap dance key 303 static tap ql_tap_state = { 304 .is_press_action = true, 305 .state = 0 306 }; 307 308 // Functions that control what our tap dance key does 309 void ql_finished(tap_dance_state_t *state, void *user_data) { 310 ql_tap_state.state = cur_dance(state); 311 switch(TAP_DANCE_KEYCODE(state)) { 312 case TD(TD_ESC_NUM): // ESC key action 313 switch (ql_tap_state.state) { 314 case SINGLE_TAP: 315 case DOUBLE_TAP: 316 // ESC 317 tap_code(KC_ESC); 318 break; 319 case TAP_HOLD: 320 // temporal layer change 321 layer_on(_NUM); 322 break; 323 case TRIPLE_TAP: 324 // toggle layer 325 // Check to see if the layer is already set 326 if (layer_state_is(_NUM)) { 327 // If already set, then switch it off 328 layer_off(_NUM); 329 } else { 330 // If not already set, then switch the layer on 331 layer_on(_NUM); 332 } 333 break; 334 } 335 break; 336 } 337 } 338 339 void ql_reset(tap_dance_state_t *state, void *user_data) { 340 switch(TAP_DANCE_KEYCODE(state)) { 341 case TD(TD_ESC_NUM): 342 // If the key was held down and now is released then switch off the layer 343 if (ql_tap_state.state == TAP_HOLD) { 344 layer_off(_NUM); 345 } 346 ql_tap_state.state = 0; 347 break; 348 } 349 }