|
|
- /* Copyright 2020 Simon Paul Jackson, BEng.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
- #include QMK_KEYBOARD_H
-
- /* UPDATE:
- New build process requires: qmk compile
-
- THIS METHOD IS NOW DEFUNCT.
- make linux bootloader install via: (or use via if it's firmwared) => CHOICE
- cd qmk_firmware
- sudo make dz60:jacko_keys:dfu
- ^C
- // or the following if you want to program upto 4 layers only yourself.
- sudo make dz60:via:dfu
- */
-
- //Macro production rule for upper and lowers.
- //Limit of only first 128 indirect entries may form part of a shifted pair.
- //The **uint32_t** have all been allocated so no size change on edit code points.
-
- #define Z(x) XP(x##_L, x##_U)
-
- enum unicode_names {
- //ANSI/NAV Fn shift (14)
- INT_L, INT_U,
- DIF_L, DIF_U,
- ROOT_L, ROOT_U,
- DEG_L, DEG_U,
- PND_L, PND_U,
- OM_L, OM_U,
- MIC_L, MIC_U,
- //BQN 1 (26 + 14 = 40)
- GR_L, GR_U,
- N1_L, N1_U, N2_L, N2_U, N3_L, N3_U, N4_L, N4_U, N5_L, N5_U,
- N6_L, N6_U, N7_L, N7_U, N8_L, N8_U, N9_L, N9_U, N0_L, N0_U,
- MIN_L, MIN_U, EQ_L, EQ_U,
- //BQN 2 (24 + 40 = 64)
- Q_L, Q_U, W_L, W_U, E_L, E_U, R_L, R_U, T_L, T_U, Y_L, Y_U,
- U_L, U_U, I_L, I_U, O_L, O_U, P_L, P_U, LBR_L, LBR_U, RBR_L, RBR_U,
- //BQN 3 (22 + 64 = 86)
- A_L, A_U, S_L, S_U, D_L, D_U, F_L, F_U, G_L, G_U, H_L, H_U,
- J_L, J_U, K_L, K_U, L_L, L_U, SEMI_L, SEMI_U, QUOT_L, QUOT_U,
- //BQN 4 (22 + 86 = 108) - X is special so XX was needed to avoid errors.
- Z_L, Z_U, XX_L, XX_U, C_L, C_U, V_L, V_U, B_L, B_U, N_L, N_U,
- M_L, M_U, LESS_L, LESS_U, GRET_L, GRET_U, DIV_L, DIV_U,
- SPC_L, SPC_U,
- //Special control
- C1_L, C1_U, C3_L, C3_U, C4_L, C4_U, C5_L, C5_U,
- C7_L, C7_U, C8_L, C8_U, C9_L, C9_U, C0_L, C0_U,
- CEQ_L, CEQ_U, CES_L, CES_U,
- //End of shiftables
- //Control literals
- TAB, CR, LBS,
- //Control iconographs
- IAT, IA, IB, IC, ID, IE, IF, IG, IH, II, IJ, IK,
- IL, IM, IN, IO, IP, IQ, IR, IS, IT, IU, IV, IW,
- IX, IY, IZ, ILBR, IBSL, IRBR, ICAR, IUND,
- //Alt aplha
- A1, A2, A3, A4, A5, A6, A7, A8, A9, A0, AMIN, AEQ,
- AGR, ACOM, ADOT, ALBR, ARBR, ASEM, AAPO,
- AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK,
- AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW,
- AX, AY, AZ, ABSL,
- };
-
- // PLACE BQN layer and Unicode character code points here.
- // _L is lower case
- // _U is upper (shifted) case
- const uint32_t PROGMEM unicode_map[] = {
- //ANSI/NAV FN shift
- [INT_L] = U'∫', [INT_U] = U'Σ',
- [DIF_L] = U'∂', [DIF_U] = U'∇',
- [ROOT_L] = U'√', [ROOT_U] = U'∛',
- [DEG_L] = U'°', [DEG_U] = U'⦵', //Plimsoil STP
- [PND_L] = U'£', [PND_U] = U'€',
- [OM_L] = U'ω', [OM_U] = U'Ω',
- [MIC_L] = U'µ', [MIC_U] = U'ℎ',
- //BQN 1
- [GR_L] = U'˜', [GR_U] = U'¬',
- [N1_L] = U'˘', [N1_U] = U'⎉', [N2_L] = U'¨', [N2_U] = U'⚇',
- [N3_L] = U'⁼', [N3_U] = U'⍟', [N4_L] = U'⌜', [N4_U] = U'◶',
- [N5_L] = U'´', [N5_U] = U'⊘', [N6_L] = U'˝', [N6_U] = U'⎊',
- [N7_L] = U' ', [N7_U] = U' ', [N8_L] = U'∞', [N8_U] = U' ',
- [N9_L] = U'¯', [N9_U] = U'⟨', [N0_L] = U'•', [N0_U] = U'⟩',
- [MIN_L] = U'÷', [MIN_U] = U'√', [EQ_L] = U'×', [EQ_U] = U'⋆',
- //BQN 2
- [Q_L] = U'⌽', [Q_U] = U' ', [W_L] = U'𝕨', [W_U] = U'𝕎',
- [E_L] = U'∊', [E_U] = U'⍷', [R_L] = U'↑', [R_U] = U'𝕣',
- [T_L] = U'∧', [T_U] = U'⍋', [Y_L] = U' ', [Y_U] = U' ',
- [U_L] = U'⊔', [U_U] = U' ', [I_L] = U'⊏', [I_U] = U'⊑',
- [O_L] = U'⊐', [O_U] = U'⊒', [P_L] = U'π', [P_U] = U'⍳',
- [LBR_L] = U'←', [LBR_U] = U'⊣', [RBR_L] = U'→', [RBR_U] = U'⊢',
- //BQN 3
- [A_L] = U'⍉', [A_U] = U' ', [S_L] = U'𝕤', [S_U] = U'𝕊',
- [D_L] = U'↕', [D_U] = U' ', [F_L] = U'𝕗', [F_U] = U'𝔽',
- [G_L] = U'𝕘', [G_U] = U'𝔾', [H_L] = U'⊸', [H_U] = U'«',
- [J_L] = U'∘', [J_U] = U' ', [K_L] = U'○', [K_U] = U'⌾',
- [L_L] = U'⟜', [L_U] = U'»', [SEMI_L] = U'⋄', [SEMI_U] = U'·',
- [QUOT_L] = U'↩', [QUOT_U] = U'˙',
- //BQN 4
- [Z_L] = U'⥊', [Z_U] = U'⋈', [XX_L] = U'𝕩', [XX_U] = U'𝕏',
- [C_L] = U'↓', [C_U] = U' ', [V_L] = U'∨', [V_U] = U'⍒',
- [B_L] = U'⌊', [B_U] = U'⌈', [N_L] = U' ', [N_U] = U' ',
- [M_L] = U'≡', [M_U] = U'≢', [LESS_L] = U'∾', [LESS_U] = U'≤',
- [GRET_L] = U'≍', [GRET_U] = U'≥', [DIV_L] = U'≠', [DIV_U] = U'⇐',
- [SPC_L] = U'‿', [SPC_U] = U' ',
- //ANSI Extended Shift
- //Special control (OSI and emojicons)
- [C1_L] = U'♥', [C1_U] = U'🕫', [C3_L] = U'👪', [C3_U] = U'🖃',
- [C4_L] = U'🏠', [C4_U] = U'🖅', [C5_L] = U'⛤', [C5_U] = U'🖆',
- [C7_L] = U'😈', [C7_U] = U'🗏', [C8_L] = U'📐', [C8_U] = U'🕮',
- [C9_L] = U'😇', [C9_U] = U'📚', [C0_L] = U'☠', [C0_U] = U'🏫',
- [CEQ_L] = U'⚖', [CEQ_U] = U'🖩', [CES_L] = U'🏃', [CES_U] = U'💁',
- //Control literals - (next commit rollback)
- [TAB] = U'⎘', [CR] = U'⎆', [LBS] = U'⛔',
- //Control iconographs (ANSI 32 lowest codes)
- [IAT] = U'⚠', [IA] = U'⟁', [IB] = U'🗚', [IC] = U'🗐',
- [ID] = U'🔖', [IE] = U'🔎', [IF] = U'👍', [IG] = U'🔔',
- [IH] = U'⌫', [II] = U'⭾', [IJ] = U'⏎', [IK] = U'⭿',
- [IL] = U'📇', [IM] = U'✓', [IN] = U'🗋', [IO] = U'🗁',
- [IP] = U'🐧', [IQ] = U'📤', [IR] = U'📥', [IS] = U'💾',
- [IT] = U'🌱', [IU] = U'👎', [IV] = U'📋', [IW] = U'🔑',
- [IX] = U'🗙', [IY] = U'🗜', [IZ] = U'⎌', [ILBR] = U'⎋',
- [IBSL] = U'🌍', [IRBR] = U'☣', [ICAR] = U'⌬', [IUND] = U'☢',
- //BQN Fn Shift
- //Unicode layer
- //============================================================================
- // FILL IN AS REQUIRED
- //============================================================================
- [A1] = U'𝟙', [A2] = U'𝟚', [A3] = U'𝟛', [A4] = U'𝟜',
- [A5] = U'𝟝', [A6] = U'𝟞', [A7] = U'𝟟', [A8] = U'𝟠',
- [A9] = U'𝟡', [A0] = U'𝟘', [AMIN] = 0x2224, [AEQ] = U'∣',//incongruence
- [ACOM] = U',', [ADOT] = U'.', [ALBR] = U'“',
- [ARBR] = U'”', [ASEM] = U';', [AAPO] = U'\'',
- [AA] = U'A', [AB] = U'Ạ', [AC] = U'Ṅ', [AD] = U'Ṫ',
- [AE] = U'E', [AF] = U'Ṡ', [AG] = U'Ẹ', [AH] = U'H',
- [AI] = U'I', [AJ] = U'Ṣ', [AK] = U'Ṇ', [AL] = U'Ȧ',
- [AM] = U'Ȯ', [AN] = U'N', [AO] = U'O', [AP] = U'Ṭ',
- [AQ] = U'Ọ', [AR] = U'Ė', [AS] = U'S', [AT] = U'T',
- [AU] = U'İ', [AV] = U'Ị', [AW] = U'Ḣ',
- [AX] = U'Ḥ', [AY] = U'˙', [AZ] = U'·',
- [ABSL] = U'\\'
- //4060 bytes free - as space is allocated "quite literally" as ASCII 32 in a 32-bit field.
- //2021-11-28
- };
-
- //Some say the above should be converted to allow more in device shift states,
- //but that would be less compact (needing 4 NUL per key) so kind of works for free.
-
- //The Navigation CYAN mode macro key system
- //keycode name definitions
-
- enum custom_keycodes {
- QMKLAST = SAFE_RANGE - 1,//ready for define
- KM_1, KM_2, KM_3, KM_4, KM_5,
- KM_6, KM_7, KM_8, KM_9, KM_0,
- KM_Q, KM_W, KM_E, KM_R, KM_T,
- KM_Y, KM_U, KM_I, KM_O, KM_P,
- KM_A, KM_S, KM_D, KM_F, KM_G,
- KM_H, KM_J, KM_K, KM_L,
- KM_Z, KM_X, KM_C, KM_V,
- KM_B, KM_N, KM_M,
- };
-
- //The Navigation CYAN mode macro key system for UTF-8 emission.
- //fill in the four sections of each string KEEPING the NUL byte spacers.
- //Backslash is reserved as an escape and so needs a "\\" literal.
- //Unless the backslash is in the final print until string end.
- //An estimate of 35 characters per key action set 2021-11-24
- //A quirk in C does allow less space used by concatenation of This
- //data structure if control key acceptably indexes the "next letter" OK.
- const char* const PROGMEM macro_unicode[] = {
- //============================================================================
- // FILL IN AS REQUIRED
- //============================================================================
- // in (x, sx, cx, csx) modifier format with NUL terminal characters
- // can add (wx, wsx, wcx, wcsx) extra on end with \0 inbetween each
- // for more use of WIN modifier. ALT being used to hold layer.
- "ℤₚ\0F₄(q)\0\0",// KM_1
- "Aₙ\0G₂(p)\0\0",// KM_2
- "Aₙ(q)\0²Aₙ(q²)\0\0",// KM_3
- "Bₙ(q)\0²Dₙ(q²)\0\0",// KM_4
- "Cₙ(q)\0²E₆(q²)\0\0",// KM_5
- "Dₙ(q)\0³D₄(q³)\0\0",// KM_6
- "E₆(q)\0²B₂(2²ⁿ⁺¹)\0\0",// KM_7
- "E₇(q)\0²F₄(2²ⁿ⁺¹)\0\0",// KM_8
- "E₈(q)\0²G₂(3²ⁿ⁺¹)\0\0",// KM_9
- "∅\0²F₄(2)′\0\0",// KM_0
- "\0Fi₂₂\0\0",// KM_Q
- "\0J₄\0\0",// KM_W
- "\0J₂\0\0",// KM_E
- "\0HN\0\0",// KM_R
- "\0Th\0\0",// KM_T
- "\0B\0\0",// KM_Y
- "\0Fi₂₃\0\0",// KM_U
- "\0M₂₄\0\0",// KM_I
- "\0Co₃\0\0",// KM_O
- "\0Co₂\0\0",// KM_P
- "\0M₁₁\0\0",// KM_A
- "\0Ly\0\0",// KM_S
- "\0M₂₂\0\0",// KM_D
- "\0M₂₃\0\0",// KM_F
- "\0HS\0\0",// KM_G
- "\0J₃\0\0",// KM_H
- "\0McL\0\0",// KM_J
- "\0He\0\0",// KM_K
- "\0Ru\0\0",// KM_L
- "\0M\0\0",// KM_Z
- "\0Fi₂₄\0\0",// KM_X
- "\0J₁\0\0",// KM_C
- "\0Co₁\0\0",// KM_V
- "\0M₁₂\0\0",// KM_B
- "\0O'N\0\0",// KM_N
- "\0Suz\0\0",// KM_M
- };
-
- const uint16_t PROGMEM macro_keycode[] = {
- //index at A
- //only use alpha A-Z (26) escape sequences "\\A" etc. in macro strings
- KC_LEFT,//\\A
- };
-
- const char* const PROGMEM macro_subs[] = {
- //index at a
- //only use alpha a-z (26) escape sequences "\\a" etc. in macro strings
- "",//\\a
- };
-
- const char* modify_step(const char* ip) {
- while(*(ip++) != 0);
- return ip;
- }
-
- const char* modify_step2(const char* ip) {
- return modify_step(modify_step(ip));
- }
-
- bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if(keycode < KM_1 || keycode > KM_M) return true;//protection better
- if (record->event.pressed) {
- //press
- const char* ip = macro_unicode[keycode - KM_1];
- if(get_mods() & MOD_MASK_SHIFT) ip = modify_step(ip);
- if(get_mods() & MOD_MASK_CTRL) {//jump 2
- ip = modify_step2(ip);
- }
- if(get_mods() & MOD_MASK_GUI) {//jump 4 -- currently next macro key
- ip = modify_step2(modify_step2(ip));
- }
- while(*ip == '\\') {
- //process backslash macro effect, otherwise literal until end of string
- ip++;
- uint8_t idx = *ip - 'A';
- if(idx < 26) {//only use alphas
- tap_code16(macro_keycode[idx]);//16 for allow full moded codes
- ip++;
- continue;
- }
- idx = idx + 'A' - '0';//numbers
- if(idx < 10) {
- const char* ip_save = ip++;
- for(uint8_t i = 0; i < idx + 1; i++) {
- //so one step by default and numbers higher than 0 leave that may gaps in the skip.
- ip = modify_step(ip);//skip number of codes
- }
- send_unicode_string(ip);//should UTF-8
- ip = ip_save;//restore (only one level deep!!!!)
- continue;
- }
- idx = idx + '0' - 'a';//lower case subroutines
- if(idx < 26) {//only use alphas
- send_unicode_string(macro_subs[idx]);
- ip++;
- continue;
- }
- switch(*(ip++)) {
- //other cases of macro effects
- //======================================================================
- // FILL IN AS REQUIRED
- //======================================================================
-
- case('\\'):
- SEND_STRING("\\");//literal emit
- continue;
- default:
- break;//uknown escape
- }
- break;//bad escape sequence so ignore and literal
- }
- send_unicode_string(ip);//should UTF-8
- } else {
- //release
- }
- return true;
- };
-
- #define F_CTRL KC_OUT
- #define F_SHFT KC_OPER
- #define F_ALT KC_CLEAR_AGAIN
- #define F_GUI KC_CRSEL
- #define F_BOOM KC_EXSEL
- //a great C4 joke about adding 32 to the modifiers
-
- const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- //=========================================================
- // PRIMARY UNSHIFTED MODES
- //=========================================================
-
- //ANSI lock mode 0 =================================================================================== ANSI lock mode 0
- // Standard ANSI 60 layout for worldwide ASCII compatibility,
- // This is the standard conformance layer and as such remain static.
- // MO(4) enters the function shift state.
- LAYOUT_60_ansi(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, MO(4)),//zero index start
-
- //Navigation lock mode 1 ======================================================================== Navigation lock mode 1
- // Removed ASCII 47 (/) and right ctrl/win/alt for cursor.
- // Backslash enters BQN entry mode
- // VirtualBox host key needs an Fn.
- // A basic easy cursor mode with easier BQN entry via \.
- LAYOUT_60_ansi(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, OSL(3),//BQN shift
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSFT,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LEFT, KC_DOWN, KC_RIGHT,MO(5)),
-
- //Macro lock mode 3 ================================================================================== Macro lock mode 2
- // A single finger macro launching board producing many modifier and function keys.
- // Lots of macros and shifts with an Fn
- LAYOUT_60_ansi(
- OSM(MOD_LCTL|MOD_LSFT), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,OSM(MOD_LSFT|MOD_LCTL|MOD_LALT),
- OSM(MOD_LSFT|MOD_LALT), KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, ALGR(KC_F24),
- OSM(MOD_LCTL|MOD_LALT), ALGR(KC_F1), ALGR(KC_F2), ALGR(KC_F3), ALGR(KC_F4), ALGR(KC_F5), ALGR(KC_F6), ALGR(KC_F7), ALGR(KC_F8), ALGR(KC_F9), ALGR(KC_F10), ALGR(KC_F11), ALGR(KC_F12),
- OSM(MOD_LSFT), ALGR(KC_F13), ALGR(KC_F14), ALGR(KC_F15), ALGR(KC_F16), ALGR(KC_F17), ALGR(KC_F18), ALGR(KC_F19), ALGR(KC_F20), ALGR(KC_F21), ALGR(KC_F22), ALGR(KC_F23),
- OSM(MOD_LCTL),OSM(MOD_LGUI),OSM(MOD_LALT), KC_SPC, LSA(KC_TAB),OSM(MOD_RGUI), LALT(KC_TAB),MO(6)),
-
- //BQN lock mode 4 ====================================================================================== BQN lock mode 3
- // BQN Unicode
- LAYOUT_60_ansi(
- Z(GR), Z(N1), Z(N2), Z(N3), Z(N4), Z(N5), Z(N6), Z(N7), Z(N8), Z(N9), Z(N0), Z(MIN), Z(EQ), TO(1),//escape
- KC_TAB, Z(Q), Z(W), Z(E), Z(R), Z(T), Z(Y), Z(U), Z(I), Z(O), Z(P), Z(LBR), Z(RBR), KC_BSLS,
- KC_CAPS, Z(A), Z(S), Z(D), Z(F), Z(G), Z(H), Z(J), Z(K), Z(L), Z(SEMI), Z(QUOT), KC_ENT,
- KC_LSFT, Z(Z), Z(XX), Z(C), Z(V), Z(B), Z(N), Z(M), Z(LESS), Z(GRET), Z(DIV), KC_RSFT,
- F_CTRL, F_GUI, F_ALT, Z(SPC), F_ALT, F_GUI, F_CTRL, TO(7)),//shift sticky
-
- //=========================================================
- // SECONDARY Fn SHIFTED MODES
- //=========================================================
-
- //ANSI shift mode 4 ================================================================================== ANSI shift mode 4
- // ISO characters such as £ and control of RGB/backlight and cursor.
- // Fn + P is power switch for shutdown.
- // This shift layer is standard for the kind of keyboard plus a few extensions.
- LAYOUT_60_ansi(
- KC_ESC, 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_DEL,
- LCA(KC_DEL), RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_WHOM, KC_PWR, KC_HOME, KC_END, KC_INS,
- KC_SLCK, KC_WSCH, Z(INT), Z(DIF), KC_WFAV, Z(ROOT), KC_VOLD, KC_VOLU, Z(DEG), Z(PND), KC_PAUS, KC_PSCR, KC_APP,
- KC_TRNS, Z(OM), KC_MUTE, BL_DEC, BL_TOGG, BL_INC, BL_STEP, Z(MIC), KC_PGUP, KC_PGDN, KC_UP, KC_TRNS,
- MO(8), DF(2), DF(1), KC_SPC, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS),
-
- //Navigation shift mode 5 ====================================================================== Navigation shift mode 5
- // All function keys, so Home and End were sacrificed.
- // Also media player launch and control.
- // No APP menu as / is on the key, as / is ? key.
- LAYOUT_60_ansi(
- KC_ESC, 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_DEL,
- LCA(KC_DEL), KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_INS,
- KC_SLCK, KC_WSCH, Z(INT), Z(DIF), KC_WFAV, Z(ROOT), KC_VOLD, KC_VOLU, Z(DEG), Z(PND), KC_PAUS, KC_PSCR, KC_APP,
- KC_TRNS, Z(OM), KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSEL, Z(MIC), KC_PGUP, KC_PGDN, KC_QUES, KC_TRNS,
- DF(0), DF(2), MO(9), KC_SPC, KC_RALT, MT(MOD_RGUI,KC_SLSH),KC_RCTL, KC_TRNS),
-
- //Macro shift mode 6 ================================================================================ Macro shift mode 6
- // Same macro layer but different modifier grouping for more hot key combinations.
- LAYOUT_60_ansi(
- KC_ESC, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_HAEN, KC_HANJ, KC_DEL,
- KC_TAB, KC_RO, KC_KANA, KC_JYEN, KC_HENK, KC_MHEN, KC_INT6, KC_INT7, KC_INT8, KC_INT9, KC_PWR, KC_HOME, KC_END, KC_INS,
- KC_NLCK, KC_WSCH, Z(INT), Z(DIF), KC_WFAV, Z(ROOT), KC_VOLD, KC_VOLU, Z(DEG), Z(PND), KC_PAUS, KC_PSCR, KC_ENT,
- OSM(MOD_LGUI|MOD_RGUI),KC_LANG3,KC_LANG4,KC_LANG5,KC_LANG6,KC_LANG7,KC_LANG8,KC_LANG9,KC_ACL0, KC_ACL1, KC_ACL2, OSM(MOD_RSFT),
- DF(0),OSM(MOD_LSFT|MOD_LGUI),DF(1), ALGR(KC_SPC), KC_TRNS, OSM(MOD_LSFT|MOD_RGUI),KC_TRNS, KC_TRNS),
-
- //BQN shift mode 7 ==================================================================================== BQN shift mode 7
- LAYOUT_60_ansi(
- KC_ESC, X(A1), X(A2), X(A3), X(A4), X(A5), X(A6), X(A7), X(A8), X(A9), X(A0), X(AMIN), X(AEQ), KC_BSPC,//allow backspace
- KC_TAB, X(AQ), X(AW), X(AE), X(AR), X(AT), X(AY), X(AU), X(AI), X(AO), X(AP), X(ALBR), X(ARBR), X(ABSL),
- KC_SLCK, X(AA), X(AS), X(AD), X(AF), X(AG), X(AH), X(AJ), X(AK), X(AL), X(ASEM), X(AAPO), KC_ENT,
- F_SHFT, X(AZ), X(AX), X(AC), X(AV), X(AB), X(AN), X(AM), X(ACOM), X(ADOT), KC_UP, F_SHFT,
- F_CTRL, F_GUI, F_ALT, KC_SPC, KC_LEFT, KC_DOWN, KC_RIGHT,TO(5)),//latching escape
-
- //=========================================================
- // EXTENDED Fn, MOD, Release Fn SHIFTED MODES
- //=========================================================
-
- //Control shift mode 8 ============================================================================ Control shift mode 8
- LAYOUT_60_ansi(
- Z(CES), Z(C1), X(IAT), Z(C3), Z(C4), Z(C5), X(ICAR), Z(C7), Z(C8), Z(C9), Z(C0), X(IUND), Z(CEQ), X(LBS),
- X(TAB), X(IQ), X(IW), X(IE), X(IR), X(IT), X(IY), X(IU), X(II), X(IO), X(IP), X(ILBR), X(IRBR), X(IBSL),
- KC_TRNS, X(IA), X(IS), X(ID), X(IF), X(IG), X(IH), X(IJ), X(IK), X(IL), LCTL(KC_PAUS),LCTL(KC_PSCR),X(CR),
- KC_LSFT, X(IZ), X(IX), X(IC), X(IV), X(IB), X(IN), X(IM), LCTL(KC_PGUP),LCTL(KC_PGDN),LCTL(KC_UP), KC_TRNS,
- KC_TRNS, LCTL(KC_LGUI), LCTL(KC_LALT), X(IAT), LCTL(KC_LEFT), LCTL(KC_DOWN),LCTL(KC_RIGHT),KC_TRNS),
-
- //Mouse shift mode 9 ================================================================================ Mouse shift mode 9
- // A utility layer for things like the mouse.
- LAYOUT_60_ansi(
- RESET, KM_1, KM_2, KM_3, KM_4, KM_5, KM_6, KM_7, KM_8, KM_9, KM_0, KC_BTN4, KC_BTN5, KC_DEL,
- KC_TAB, KM_Q, KM_W, KM_E, KM_R, KM_T, KM_Y, KM_U, KM_I, KM_O, KM_P, KC_HOME, KC_END, KC_SYSREQ,
- KC_LALT, KM_A, KM_S, KM_D, KM_F, KM_G, KM_H, KM_J, KM_K, KM_L, KC_BTN3, KC_BTN2, KC_ENT,
- KC_LSFT, KM_Z, KM_X, KM_C, KM_V, KM_B, KM_N, KM_M, KC_WH_U, KC_WH_D, KC_MS_U, KC_RSFT,
- KC_LCTL, KC_LGUI, KC_TRNS, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS),
-
- //============================================================================
- // FILL IN AS REQUIRED (FOR EXTRA LAYAERS IF NEEDED)
- //============================================================================
- };
-
- const rgblight_segment_t PROGMEM my_ansi[] = RGBLIGHT_LAYER_SEGMENTS(
- {11, 2, HSV_RED}
- );
-
- const rgblight_segment_t PROGMEM my_nav[] = RGBLIGHT_LAYER_SEGMENTS(
- {11, 2, HSV_GREEN}
- );
-
- const rgblight_segment_t PROGMEM my_macro[] = RGBLIGHT_LAYER_SEGMENTS(
- {11, 2, HSV_YELLOW}
- );
-
- const rgblight_segment_t PROGMEM my_bqn[] = RGBLIGHT_LAYER_SEGMENTS(
- {11, 2, HSV_BLUE}
- );
-
- const rgblight_segment_t PROGMEM my_losh[] = RGBLIGHT_LAYER_SEGMENTS(
- {11, 2, HSV_MAGENTA}
- );
-
- const rgblight_segment_t PROGMEM my_hish[] = RGBLIGHT_LAYER_SEGMENTS(
- {11, 2, HSV_CYAN}
- );
-
- const rgblight_segment_t PROGMEM my_caps[] = RGBLIGHT_LAYER_SEGMENTS(
- {8, 1, HSV_WHITE}
- );
-
- const rgblight_segment_t PROGMEM my_num[] = RGBLIGHT_LAYER_SEGMENTS(
- {15, 1, HSV_WHITE}
- );
-
- //MAX 8 LAYERS ====== NO MORE SAPCE. USE A NO COLOR MODE
- const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
- my_ansi,
- my_nav,
- my_macro,
- my_bqn,// Extended mode
- my_losh,
- my_hish,
- my_caps, // Overrides caps lock layer
- my_num
- );
-
- void keyboard_post_init_user(void) {
- // Enable the LED layers
- rgblight_layers = my_rgb_layers;
- }
-
- layer_state_t layer_state_set_user(layer_state_t state) {
- // Layers will light up if kb layers are active
- for(uint8_t i = 0; i < 4; i++)
- rgblight_set_layer_state(i, layer_state_cmp(state, i));//ANSI
- //rgblight_set_layer_state(2, layer_state_cmp(state, 1));//NAV
- //rgblight_set_layer_state(3, layer_state_cmp(state, 2));//Macro
- //rgblight_set_layer_state(4, layer_state_cmp(state, 3));//BQN
- rgblight_set_layer_state(4, layer_state_cmp(state, 4) || layer_state_cmp(state, 5) ||
- layer_state_cmp(state, 6) || layer_state_cmp(state, 7));//LO Shift
- rgblight_set_layer_state(5, layer_state_cmp(state, 8) ||
- layer_state_cmp(state, 9));//HI Shift
- return state;
- }
-
- bool led_update_user(led_t led_state) {
- // Caps lock etc
- rgblight_set_layer_state(6, led_state.caps_lock);
- // MULTI LOCK WITH INVERTED NUMLOCK
- rgblight_set_layer_state(7, led_state.scroll_lock || !led_state.num_lock ||
- led_state.compose || led_state.kana);
- return true;
- }
|