1 /* Copyright 2019 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/>.
16 #include "process_magic.h"
20 # define AG_NORM_SONG SONG(AG_NORM_SOUND)
23 # define AG_SWAP_SONG SONG(AG_SWAP_SOUND)
26 # define CG_NORM_SONG SONG(AG_NORM_SOUND)
29 # define CG_SWAP_SONG SONG(AG_SWAP_SOUND)
31 float ag_norm_song[][2] = AG_NORM_SONG;
32 float ag_swap_song[][2] = AG_SWAP_SONG;
33 float cg_norm_song[][2] = CG_NORM_SONG;
34 float cg_swap_song[][2] = CG_SWAP_SONG;
38 * MAGIC actions (BOOTMAGIC without the boot)
40 bool process_magic(uint16_t keycode, keyrecord_t *record) {
41 // skip anything that isn't a keyup
42 if (!record->event.pressed) {
47 keymap_config.raw = eeconfig_read_keymap();
49 case MAGIC_SWAP_CONTROL_CAPSLOCK:
50 keymap_config.swap_control_capslock = true;
52 case MAGIC_CAPSLOCK_TO_CONTROL:
53 keymap_config.capslock_to_control = true;
55 case MAGIC_SWAP_LALT_LGUI:
56 keymap_config.swap_lalt_lgui = true;
58 case MAGIC_SWAP_RALT_RGUI:
59 keymap_config.swap_ralt_rgui = true;
61 case MAGIC_SWAP_LCTL_LGUI:
62 keymap_config.swap_lctl_lgui = true;
64 case MAGIC_SWAP_RCTL_RGUI:
65 keymap_config.swap_rctl_rgui = true;
68 keymap_config.no_gui = true;
70 case MAGIC_SWAP_GRAVE_ESC:
71 keymap_config.swap_grave_esc = true;
73 case MAGIC_SWAP_BACKSLASH_BACKSPACE:
74 keymap_config.swap_backslash_backspace = true;
77 clear_keyboard(); // clear first buffer to prevent stuck keys
78 keymap_config.nkro = true;
80 case MAGIC_SWAP_ALT_GUI:
81 keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = true;
83 PLAY_SONG(ag_swap_song);
86 case MAGIC_SWAP_CTL_GUI:
87 keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = true;
89 PLAY_SONG(cg_swap_song);
92 case MAGIC_UNSWAP_CONTROL_CAPSLOCK:
93 keymap_config.swap_control_capslock = false;
95 case MAGIC_UNCAPSLOCK_TO_CONTROL:
96 keymap_config.capslock_to_control = false;
98 case MAGIC_UNSWAP_LALT_LGUI:
99 keymap_config.swap_lalt_lgui = false;
101 case MAGIC_UNSWAP_RALT_RGUI:
102 keymap_config.swap_ralt_rgui = false;
104 case MAGIC_UNSWAP_LCTL_LGUI:
105 keymap_config.swap_lctl_lgui = false;
107 case MAGIC_UNSWAP_RCTL_RGUI:
108 keymap_config.swap_rctl_rgui = false;
111 keymap_config.no_gui = false;
113 case MAGIC_UNSWAP_GRAVE_ESC:
114 keymap_config.swap_grave_esc = false;
116 case MAGIC_UNSWAP_BACKSLASH_BACKSPACE:
117 keymap_config.swap_backslash_backspace = false;
119 case MAGIC_UNHOST_NKRO:
120 clear_keyboard(); // clear first buffer to prevent stuck keys
121 keymap_config.nkro = false;
123 case MAGIC_UNSWAP_ALT_GUI:
124 keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = false;
126 PLAY_SONG(ag_norm_song);
129 case MAGIC_UNSWAP_CTL_GUI:
130 keymap_config.swap_lctl_lgui = keymap_config.swap_rctl_rgui = false;
132 PLAY_SONG(cg_norm_song);
135 case MAGIC_TOGGLE_ALT_GUI:
136 keymap_config.swap_lalt_lgui = !keymap_config.swap_lalt_lgui;
137 keymap_config.swap_ralt_rgui = keymap_config.swap_lalt_lgui;
139 if (keymap_config.swap_ralt_rgui) {
140 PLAY_SONG(ag_swap_song);
142 PLAY_SONG(ag_norm_song);
146 case MAGIC_TOGGLE_CTL_GUI:
147 keymap_config.swap_lctl_lgui = !keymap_config.swap_lctl_lgui;
148 keymap_config.swap_rctl_rgui = keymap_config.swap_lctl_lgui;
150 if (keymap_config.swap_rctl_rgui) {
151 PLAY_SONG(cg_swap_song);
153 PLAY_SONG(cg_norm_song);
157 case MAGIC_TOGGLE_NKRO:
158 clear_keyboard(); // clear first buffer to prevent stuck keys
159 keymap_config.nkro = !keymap_config.nkro;
161 case MAGIC_EE_HANDS_LEFT:
162 eeconfig_update_handedness(true);
164 case MAGIC_EE_HANDS_RIGHT:
165 eeconfig_update_handedness(false);
168 // Not a magic keycode so continue processing
172 eeconfig_update_keymap(keymap_config.raw);
173 clear_keyboard(); // clear to prevent stuck keys