aboutsummaryrefslogtreecommitdiff
path: root/keyboards/nack/keymaps/farfalleflickan/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/nack/keymaps/farfalleflickan/keymap.c')
-rw-r--r--keyboards/nack/keymaps/farfalleflickan/keymap.c203
1 files changed, 203 insertions, 0 deletions
diff --git a/keyboards/nack/keymaps/farfalleflickan/keymap.c b/keyboards/nack/keymaps/farfalleflickan/keymap.c
new file mode 100644
index 000000000..6e447bee1
--- /dev/null
+++ b/keyboards/nack/keymaps/farfalleflickan/keymap.c
@@ -0,0 +1,203 @@
1/* Copyright 2020 farfalleflickan <farfalleflickan@gmail.com>
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.h"
18
19#define ____ _______
20
21// Defines names for use in layer keycodes and the keymap
22enum layer_names {
23 BASE,
24 NOGUI,
25 NUM,
26 FN
27};
28
29// Defines the keycodes used by our macros in process_record_user
30enum custom_keycodes {
31 CK_LSFT = SAFE_RANGE, // Shift
32 CK_RALT, // AltGr
33 CK_BSPC_DEL, // Backspace or Del (if pressed with CK_LSFT or CK_RALT)
34 KK_RESET
35};
36
37const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
38 [BASE] = LAYOUT(
39/* __________________________________________________________________________________________________________________________________________________________________________
40 | \ \ \ \ \ \ \ \ \ \ \ \ \ \ */
41// | |----TAB-----|---Q--------|-----W------|-----E------|-----R------|----T-------|-----Y------|-----U------|----I-------|------O-----|----P-------|----Å-------|--( ¨^~ )---|
42 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,
43// | |----ESC-----|---A--------|---S--------|----D-------|-----F------|-----G------|-----H------|-----J------|-----K------|-----L------|-----Ö------|-----Ä------|--( '* )----|
44 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS,
45// | |---SHIFT----|---Z--------|---X--------|----C-------|-----V------|-----B------|-----N------|------M-----|---( ,; )---|---( .: )---|---( -_ )---|----UP------|-BACKSPACE--|
46 CK_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, CK_BSPC_DEL,
47// | |---CTRL-----|---ALT------|---META-----|----FN_1----|----------SPACE----------|----FN_2----|----AltGr---|--( <>| )---|---ENTER----|-LEFT-------|---DOWN-----|--RIGHT-----|
48 KC_LCTL, KC_LALT, KC_LGUI, MO(NUM), KC_SPC, KC_NO, MO(FN), CK_RALT, KC_NUBS, KC_ENT, KC_LEFT, KC_DOWN, KC_RIGHT
49// \|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|
50 ),
51 [NOGUI] = LAYOUT(
52/* __________________________________________________________________________________________________________________________________________________________________________
53 | \ \ \ \ \ \ \ \ \ \ \ \ \ \ */
54// | |----TAB-----|---Q--------|-----W------|-----E------|-----R------|----T-------|-----Y------|-----U------|----I-------|------O-----|----P-------|----Å-------|--( ¨^~ )---|
55 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,
56// | |----ESC-----|---A--------|---S--------|----D-------|-----F------|-----G------|-----H------|-----J------|-----K------|-----L------|-----Ö------|-----Ä------|--( '* )----|
57 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS,
58// | |---SHIFT----|---Z--------|---X--------|----C-------|-----V------|-----B------|-----N------|------M-----|---( ,; )---|---( .: )---|---( -_ )---|----UP------|-BACKSPACE--|
59 CK_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, CK_BSPC_DEL,
60// | |---CTRL-----|---ALT------|---META-----|----FN_1----|----------SPACE----------|----FN_2----|----AltGr---|--( <>| )---|---ENTER----|-LEFT-------|---DOWN-----|--RIGHT-----|
61 KC_LCTL, KC_LALT, KC_NO, MO(NUM), KC_SPC, KC_NO, TO(BASE), CK_RALT, KC_NUBS, KC_ENT, KC_LEFT, KC_DOWN, KC_RIGHT
62// \|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|
63 ),
64 [NUM] = LAYOUT(
65/* __________________________________________________________________________________________________________________________________________________________________________
66 | \ \ \ \ \ \ \ \ \ \ \ \ \ \ */
67// | |---TAB------|---( 1! )---|--( 2"@ )---|--( 3#£ )---|---( 4¤$ )--|--( 5%€ )---|---( 6& )---|--( 7/{ )---|--( 8([ )---|--( 9)] )---|--( 0=} )---|---( +?\ )--|---( ´` )---|
68 ____, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
69// | |----ESC-----|-----F1-----|-----F2-----|----F3------|----F4------|----F5------|-----F6-----|-----F7------|----F8-----|-----F9-----|-----F10----|----F11-----|----F12-----|
70 ____, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
71// | |---SHIFT----|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|
72 ____, KC_P0, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_PGUP, KC_NO,
73// | |---CTRL-----|---ALT------|---META-----|---FN_1-----|------------|------------|----FN_2----|--AltGr-----|---( §½ )---|------------|------------|------------|------------|
74 ____, ____, ____, TO(BASE), KC_NO, KC_NO, MO(FN), ____, KC_GRV, KC_PDOT, KC_HOME, KC_PGDOWN, KC_END
75// \|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|
76 ),
77 [FN] = LAYOUT(
78/* __________________________________________________________________________________________________________________________________________________________________________
79 | \ \ \ \ \ \ \ \ \ \ \ \ \ \ */
80// | |-RGB TOGGLE-|-CHANGE RGB-|-RGB HUE UP-|-RGB SAT UP-|------------|------------|------------|------------|------------|------------|------------|------------|-RESET KBD--|
81 RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KK_RESET,
82// | |------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|
83 MU_TOG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
84// | |------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|-RGB LIGHT +|------------|
85 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_VAI, KC_NO,
86// | |------------|------------|------------|---FN_1-----|------------|------------|----FN_2----|------------|------------|------------|------------|-RGB LIGHT -|------------|
87 KC_NO, KC_NO, KC_NO, TO(BASE), KC_NO, KC_NO, TO(BASE), TO(NOGUI), KC_NO, KC_NO, KC_NO, RGB_VAD, KC_NO
88// \|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|____________|
89 )
90};
91
92// Interrupt bools
93bool lshift = false, ralt = false;
94
95// Number of items that are saved in prev_kcs
96uint8_t prev_indx = 0;
97// Used to save the last 6 actual keycodes
98uint16_t prev_kcs[6] = {0, 0, 0, 0, 0, 0};
99
100/*
101Used to add a keycode to a prev_kcs to remember it.
102When full the last code gets discarded and replaced by
103the new one.
104*/
105void add_to_prev(uint16_t kc){
106 for (int i=0; i<prev_indx; i++){
107 if (kc == prev_kcs[i])
108 return;
109 }
110 if (prev_indx == 6){
111 for (int i=5; i>0; i--){
112 prev_kcs[i] = prev_kcs[i-1];
113 }
114 prev_kcs[0] = kc;
115 } else {
116 prev_kcs[prev_indx] = kc;
117 prev_indx++;
118 }
119}
120
121/*
122Unregisters all codes saved in prev_kcs and resets prev_indx.
123gets called on multiple occasions mainly when shift is released
124and when frankenkeycodes are pressed. Prevents output of
125wrong characters when really specific key combinations
126that would never occur during normal usage are pressed.
127*/
128void unreg_prev(void){
129 if (prev_indx == 0)
130 return;
131 for (int i=0; i<prev_indx; i++){
132 unregister_code(prev_kcs[i]);
133 }
134 prev_indx = 0;
135}
136
137bool process_record_user(uint16_t keycode, keyrecord_t *record) {
138 static uint32_t key_timer;
139 switch (keycode) {
140 case CK_LSFT:
141 if(record->event.pressed) {
142 unregister_code(KC_LSFT);
143 register_code(KC_LSFT);
144 lshift = true;
145 } else {
146 unreg_prev();
147 unregister_code(KC_LSFT);
148 lshift = false;
149 }
150 return false;
151 break;
152 case CK_RALT:
153 if(record->event.pressed) {
154 unregister_code(KC_RALT);
155 register_code(KC_RALT);
156 ralt = true;
157 } else {
158 unreg_prev();
159 unregister_code(KC_RALT);
160 ralt = false;
161 }
162 return false;
163 break;
164 case CK_BSPC_DEL:
165 if (ralt==true) {
166 RALT_NO(KC_BSPC,KC_DEL);
167 } else {
168 SHIFT_NO(KC_BSPC,KC_DEL);
169 }
170 break;
171 case KK_RESET: // Basically, turn off RGB before resetting
172 if (record->event.pressed) {
173 key_timer = timer_read32();
174 #ifdef RGB_MATRIX_ENABLE
175 rgb_matrix_disable_noeeprom();
176 #endif
177 } else {
178 if (timer_elapsed32(key_timer) >= 20) {
179 reset_keyboard();
180 }
181 }
182 break;
183 default:
184 if(record->event.pressed) {
185 timer_timeout_keymap();
186 if (lshift)
187 register_code(KC_LSFT);
188 else
189 unregister_code(KC_LSFT);
190
191 if (ralt)
192 register_code(KC_ALGR);
193 else
194 unregister_code(KC_ALGR);
195 }
196 break;
197 }
198 return true;
199}
200
201__attribute__((weak))
202void timer_timeout_keymap(void){
203}