1 /* Copyright 2015-2017 Jack Humbert
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.
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.
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/>.
17 /* modified by Gun Pinyo */
19 #include QMK_KEYBOARD_H
21 extern keymap_config_t keymap_config
;
24 LY_0000
, LY_0001
, LY_0010
, LY_0011
,
25 LY_0100
, LY_0101
, LY_0110
, LY_0111
,
26 LY_1000
, LY_1001
, LY_1010
, LY_1011
,
27 LY_1100
, LY_1101
, LY_1110
, LY_1111
,
30 enum planck_keycodes
{
38 #include "dynamic_macro.h"
40 #define MFN_R1 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
41 #define MFN_R2 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
42 #define MFN_R3 XXXXXXX, FN_A, FN_B, FN_C, XXXXXXX, XXXXXXX
43 #define MFN_R4 XXXXXXX, KC_LCTL, KC_LSFT, KC_LALT, FN_D, XXXXXXX
44 #define UNUSED_LAYER {\
45 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MFN_R1},\
46 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MFN_R2},\
47 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MFN_R3},\
48 {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MFN_R4}},
49 #define MC(kc) LCTL(kc)
50 #define MA(kc) LALT(kc)
51 #define MG(kc) LGUI(kc) // ModGui, for i3 shortcuts
52 #define MSC(kc) LSFT(LCTL(kc))
53 #define MSA(kc) LSFT(LALT(kc))
54 #define MCA(kc) LCTL(LALT(kc))
57 const uint16_t PROGMEM keymaps
[][MATRIX_ROWS
][MATRIX_COLS
] = {
58 [LY_0000
] = LAYOUT_planck_grid(
59 KC_DEL
, KC_Q
, KC_W
, KC_F
, KC_P
, KC_G
, KC_J
, KC_L
, KC_U
, KC_Y
, KC_K
, KC_TAB
,
60 KC_BSPC
, KC_A
, KC_R
, KC_S
, KC_T
, KC_D
, KC_H
, KC_N
, KC_E
, KC_I
, KC_O
, KC_ENT
,
61 KC_LSFT
, KC_Z
, KC_X
, KC_C
, KC_V
, KC_B
, KC_M
, FN_A
, FN_B
, FN_C
, XX
, KC_LSFT
,
62 XX
,KC_F21
,KC_F22
,KC_ESC
,KC_SPC
,KC_F23
,KC_F24
,KC_LCTL
,KC_LSFT
,KC_LALT
,FN_D
,XX
64 [LY_1000
] = LAYOUT_planck_grid(
65 UC(L
'∃'), KC_SLSH
, KC_RCBR
, KC_RPRN
, KC_RBRC
, KC_GT
, MFN_R1
,
66 UC(L
'∀'), KC_BSLS
, KC_LCBR
, KC_LPRN
, KC_LBRC
, KC_LT
, MFN_R2
,
67 KC_AMPR
, KC_PIPE
, KC_AT
, KC_TILD
, KC_DLR
, KC_CIRC
, MFN_R3
,
68 KC_F1
, KC_F2
, KC_F3
, KC_F4
, KC_F5
, KC_F6
, MFN_R4
,
70 [LY_0010
] = LAYOUT_planck_grid(
71 UC(L
'×'), KC_ASTR
, KC_QUES
, KC_EXLM
, KC_GRV
, KC_HASH
, MFN_R1
,
72 UC(L
'→'), KC_MINS
, KC_COMM
, KC_DOT
, KC_QUOT
, KC_EQL
, MFN_R2
,
73 UC(L
'∘'), KC_PLUS
, KC_SCLN
, KC_COLN
, KC_DQUO
, KC_UNDS
, MFN_R3
,
74 KC_F7
, KC_F8
, KC_F9
, KC_F10
, KC_F11
, KC_F12
, MFN_R4
,
76 [LY_1010
] = LAYOUT_planck_grid(
77 UC(L
'⊗'), UC(L
'⊕'), KC_7
, KC_8
, KC_9
, UC(L
'┻'), MFN_R1
,
78 UC(L
'⊚'), KC_0
, KC_1
, KC_2
, KC_3
, UC(L
'┃'), MFN_R2
,
79 UC(L
'┏'), UC(L
'┓'), KC_4
, KC_5
, KC_6
, UC(L
'┳'), MFN_R3
,
80 UC(L
'┗'), UC(L
'┛'), UC(L
'┫'), UC(L
'━'), UC(L
'┣'), UC(L
'╋'), MFN_R4
82 [LY_0100
] = LAYOUT_planck_grid(
83 KC_F13
, KC_WSCH
, KC_HOME
, KC_UP
, KC_END
, KC_PGUP
, MFN_R1
,
84 KC_F14
, XXXXXXX
, KC_LEFT
, KC_DOWN
, KC_RGHT
, KC_PGDN
, MFN_R2
,
85 KC_F15
, KC_WBAK
, KC_WFWD
, MC(KC_A
), MC(KC_Z
), MSC(KC_Z
), MFN_R3
,
86 KC_F16
, MA(KC_LEFT
), MC(KC_LEFT
), MC(KC_F
), MC(KC_RGHT
),MA(KC_RGHT
), MFN_R4
,
88 [LY_1100
] = LAYOUT_planck_grid(
89 KC_F17
, MC(KC_WSCH
), S(KC_HOME
), S(KC_UP
), S(KC_END
), MC(KC_PGUP
), MFN_R1
,
90 KC_F18
, XXXXXXX
, S(KC_LEFT
), S(KC_DOWN
),S(KC_RGHT
), MC(KC_PGDN
), MFN_R2
,
91 KC_F19
, MC(KC_S
), MC(KC_X
), MC(KC_C
), MC(KC_V
), MC(KC_L
), MFN_R3
,
92 KC_F20
, MCA(KC_LEFT
),MSC(KC_LEFT
),MCA(KC_F
),MSC(KC_RGHT
),MCA(KC_RGHT
),MFN_R4
,
94 [LY_0110
] = LAYOUT_planck_grid(
95 MC(KC_F1
) ,MC(KC_F2
) ,MC(KC_F3
) ,MC(KC_F4
) ,MC(KC_F5
) ,MC(KC_F6
) , MFN_R1
,
96 MC(KC_F7
) ,MC(KC_F8
) ,MC(KC_F9
) ,MC(KC_F10
),MC(KC_F11
),MC(KC_F12
), MFN_R2
,
97 MC(KC_F13
),MC(KC_F14
),MC(KC_F15
),MC(KC_F16
),MC(KC_F17
),MC(KC_F18
), MFN_R3
,
98 MC(KC_F19
),MC(KC_F20
),MC(KC_F21
),MC(KC_F22
),MC(KC_F23
),MC(KC_F24
), MFN_R4
100 [LY_1110
] = LAYOUT_planck_grid(
101 MG(KC_F1
) ,MG(KC_F2
) ,MG(KC_F3
) ,MG(KC_F4
) ,MG(KC_F5
) ,MG(KC_F6
) , MFN_R1
,
102 MG(KC_F7
) ,MG(KC_F8
) ,MG(KC_F9
) ,MG(KC_F10
),MG(KC_F11
),MG(KC_F12
), MFN_R2
,
103 MG(KC_F13
),MG(KC_F14
),MG(KC_F15
),MG(KC_F16
),MG(KC_F17
),MG(KC_F18
), MFN_R3
,
104 MG(KC_F19
),MG(KC_F20
),MG(KC_F21
),MG(KC_F22
),MG(KC_F23
),MG(KC_F24
), MFN_R4
106 [LY_1111
] = LAYOUT_planck_grid(
107 KC_MPRV
, DYN_REC_STOP
, KC_WH_L
, KC_MS_U
, KC_WH_R
, KC_WH_U
, MFN_R1
,
108 KC_CAPS
, XXXXXXX
, KC_MS_L
, KC_MS_D
, KC_MS_R
, KC_WH_D
, MFN_R2
,
109 KC_MNXT
, DYN_MACRO_PLAY2
, DYN_MACRO_PLAY1
, KC_MPLY
, KC_MRWD
, KC_MFFD
, MFN_R3
,
110 KC_MSTP
, DYN_REC_START2
, DYN_REC_START1
, KC_BTN2
, KC_BTN1
, KC_BTN3
, MFN_R4
,
112 [LY_1101
] = LAYOUT_planck_grid(
113 XXXXXXX
, MU_ON
, MU_OFF
, PRINT_ON
, PRINT_OFF
, DEBUG
, MFN_R1
,
114 XXXXXXX
, KC_APP
, KC_VOLD
, KC_MUTE
, KC_VOLU
, XXXXXXX
, MFN_R2
,
115 XXXXXXX
, KC_MAIL
, S(KC_VOLD
), KC_INS
, S(KC_VOLU
), KC_PSCR
, MFN_R3
,
116 XXXXXXX
, MUV_DE
, MUV_IN
, AU_ON
, AU_OFF
, RESET
, MFN_R4
,
118 [LY_0011
] = LAYOUT_planck_grid(
119 UC(L
'็'), UC(L
'์'), UC(L
'่'), UC(L
'้'), UC(L
'๊'), UC(L
'๋'), MFN_R1
,
120 UC(L
'โ'), UC(L
'แ'), UC(L
'เ'), UC(L
'า'), UC(L
'ั'), UC(L
'ะ'), MFN_R2
,
121 UC(L
'ไ'), UC(L
'ใ'), UC(L
'ิ'), UC(L
'ี'), UC(L
'ึ'), UC(L
'ื'), MFN_R3
,
122 UC(L
'ๅ'), UC(L
'ฺ'), UC(L
'ํ'), UC(L
'ุ'), UC(L
'ู'), UC(L
'ำ'), MFN_R4
,
124 [LY_1011
] = LAYOUT_planck_grid(
125 UC(L
'ฐ'), UC(L
'ฎ'), UC(L
'ฏ'), UC(L
'ฮ'), UC(L
'ข'), UC(L
'ฃ'), MFN_R1
,
126 UC(L
'ถ'), UC(L
'ด'), UC(L
'ต'), UC(L
'อ'), UC(L
'ก'), UC(L
'จ'), MFN_R2
,
127 UC(L
'ภ'), UC(L
'บ'), UC(L
'ป'), UC(L
'ส'), UC(L
'ห'), UC(L
'ฉ'), MFN_R3
,
128 UC(L
'ฯ'), UC(L
'ผ'), UC(L
'ฝ'), UC(L
'ศ'), UC(L
'ษ'), UC(L
'ๆ'), MFN_R4
,
130 [LY_0111
] = LAYOUT_planck_grid(
131 UC(L
'ฒ'), UC(L
'ฤ'), UC(L
'ฦ'), UC(L
'ม'), UC(L
'ค'), UC(L
'ฅ'), MFN_R1
,
132 UC(L
'ณ'), UC(L
'ร'), UC(L
'ล'), UC(L
'น'), UC(L
'ว'), UC(L
'ง'), MFN_R2
,
133 UC(L
'ญ'), UC(L
'ช'), UC(L
'ซ'), UC(L
'ย'), UC(L
'ท'), UC(L
'ฑ'), MFN_R3
,
134 UC(L
'ฌ'), UC(L
'ฬ'), UC(L
'ฟ'), UC(L
'พ'), UC(L
'ธ'), UC(L
'ฆ'), MFN_R4
,
136 [LY_0001
] = UNUSED_LAYER
137 [LY_0101
] = UNUSED_LAYER
138 [LY_1001
] = UNUSED_LAYER
142 float plover_song
[][2] = SONG(PLOVER_SOUND
);
143 float plover_gb_song
[][2] = SONG(PLOVER_GOODBYE_SOUND
);
146 uint16_t cur_layer_code
= 0;
150 float tone_startup
[][2] = SONG(STARTUP_SOUND
);
151 float tone_qwerty
[][2] = SONG(QWERTY_SOUND
);
152 float tone_dvorak
[][2] = SONG(DVORAK_SOUND
);
153 float tone_colemak
[][2] = SONG(COLEMAK_SOUND
);
154 float tone_plover
[][2] = SONG(PLOVER_SOUND
);
155 float tone_plover_gb
[][2] = SONG(PLOVER_GOODBYE_SOUND
);
156 float music_scale
[][2] = SONG(MUSIC_SCALE_SOUND
);
157 float tone_goodbye
[][2] = SONG(GOODBYE_SOUND
);
160 void startup_user() {
161 _delay_ms(20); // gets rid of tick
162 set_unicode_input_mode(UC_LNX
);
164 PLAY_SONG(tone_startup
);
168 void shutdown_user() {
170 PLAY_SONG(tone_goodbye
);
176 bool process_record_user(uint16_t keycode
, keyrecord_t
*record
) {
177 uint16_t mask
= 1 << (3 - (keycode
- FN_A
));
178 if (!process_record_dynamic_macro(keycode
, record
))
180 if(FN_A
<= keycode
&& keycode
<= FN_D
) {
181 if(!(cur_layer_code
& mask
) == record
->event
.pressed
) {
182 layer_off(cur_layer_code
+ LY_0000
);
183 cur_layer_code
^= mask
;
184 layer_on(cur_layer_code
+ LY_0000
);