aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile8
-rw-r--r--docs/faq_keymap.md4
-rw-r--r--keyboards/bananasplit/keymaps/coloneljesus/config.h1
-rw-r--r--keyboards/lets_split/keymaps/piemod/README.md31
-rw-r--r--keyboards/lets_split/keymaps/piemod/config.h37
-rw-r--r--keyboards/lets_split/keymaps/piemod/keymap.c121
-rwxr-xr-xkeyboards/planck/keymaps/piemod/Makefile10
-rw-r--r--keyboards/planck/keymaps/piemod/README.md31
-rw-r--r--keyboards/planck/keymaps/piemod/keymap.c111
m---------lib/chibios0
-rw-r--r--quantum/quantum.c16
-rw-r--r--quantum/template/config.h5
12 files changed, 367 insertions, 8 deletions
diff --git a/Makefile b/Makefile
index 6364e0af8..ebad723be 100644
--- a/Makefile
+++ b/Makefile
@@ -19,6 +19,11 @@ endif
19# Otherwise the [OK], [ERROR] and [WARN] messages won't be displayed correctly 19# Otherwise the [OK], [ERROR] and [WARN] messages won't be displayed correctly
20override SILENT := false 20override SILENT := false
21 21
22QMK_VERSION := $(shell git describe --abbrev=0 --tags 2>/dev/null)
23ifneq ($(QMK_VERSION),)
24$(info QMK Firmware v$(QMK_VERSION))
25endif
26
22ON_ERROR := error_occurred=1 27ON_ERROR := error_occurred=1
23 28
24BREAK_ON_ERRORS = no 29BREAK_ON_ERRORS = no
@@ -390,7 +395,6 @@ endef
390define BUILD 395define BUILD
391 MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR) 396 MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR)
392 COMMANDS += $$(COMMAND) 397 COMMANDS += $$(COMMAND)
393 MAKE_MSG = QMK Firmware v$$(shell git describe --abbrev=0 --tags 2>/dev/null)\n\n$(MAKE_MSG)
394 COMMAND_true_$$(COMMAND) := \ 398 COMMAND_true_$$(COMMAND) := \
395 printf "$$(MAKE_MSG)" | \ 399 printf "$$(MAKE_MSG)" | \
396 $$(MAKE_MSG_FORMAT); \ 400 $$(MAKE_MSG_FORMAT); \
@@ -421,7 +425,7 @@ define BUILD_TEST
421 COMMAND := $1 425 COMMAND := $1
422 MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET) 426 MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
423 MAKE_VARS := TEST=$$(TEST_NAME) FULL_TESTS="$$(FULL_TESTS)" 427 MAKE_VARS := TEST=$$(TEST_NAME) FULL_TESTS="$$(FULL_TESTS)"
424 MAKE_MSG := QMK Firmware v$$(shell git describe --abbrev=0 --tags 2>/dev/null)\n\n$$(MSG_MAKE_TEST) 428 MAKE_MSG := $$(MSG_MAKE_TEST)
425 $$(eval $$(call BUILD)) 429 $$(eval $$(call BUILD))
426 ifneq ($$(MAKE_TARGET),clean) 430 ifneq ($$(MAKE_TARGET),clean)
427 TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf 431 TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf
diff --git a/docs/faq_keymap.md b/docs/faq_keymap.md
index d6442ac53..3c2795816 100644
--- a/docs/faq_keymap.md
+++ b/docs/faq_keymap.md
@@ -116,7 +116,9 @@ https://github.com/tekezo/Karabiner/issues/403
116 116
117## Esc and `~ on a key 117## Esc and `~ on a key
118 118
119Use `GRAVE_ESC` or `KC_GESC` in your keymap. 119Use `GRAVE_ESC` or `KC_GESC` in your keymap. `GUI`+`GRAVE_ESC` results in `\`` and `SHIFT`+`GRAVE_ESC` results in `~`.
120
121Note that this will break the CTRL+SHIFT+ESC shortcut to the Windows task manager. Use `#define GRAVE_ESC_CTRL_OVERRIDE` in your `config.h` to get the shortcut back. With this option, `ESC_GRAVE` results in `ESC` if `CTRL` is held, even if `SHIFT` or `GUI` are also held.
120 122
121## Arrow on Right Modifier keys with Dual-Role 123## Arrow on Right Modifier keys with Dual-Role
122This turns right modifer keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**. 124This turns right modifer keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**.
diff --git a/keyboards/bananasplit/keymaps/coloneljesus/config.h b/keyboards/bananasplit/keymaps/coloneljesus/config.h
index 060f5922f..af6cf8ef1 100644
--- a/keyboards/bananasplit/keymaps/coloneljesus/config.h
+++ b/keyboards/bananasplit/keymaps/coloneljesus/config.h
@@ -20,5 +20,6 @@
20#include "../../config.h" 20#include "../../config.h"
21 21
22// place overrides here 22// place overrides here
23#define GRAVE_ESC_CTRL_OVERRIDE
23 24
24#endif 25#endif
diff --git a/keyboards/lets_split/keymaps/piemod/README.md b/keyboards/lets_split/keymaps/piemod/README.md
new file mode 100644
index 000000000..f2a051da1
--- /dev/null
+++ b/keyboards/lets_split/keymaps/piemod/README.md
@@ -0,0 +1,31 @@
1PieMod
2======
3
4A keymap for users that need:
5
6- *P*: Programming symbols.
7
8- *I*: i3wm.
9
10- *E*: Emacs.
11
12- *M*: Macros.
13
14- *O*: Ortholinear.
15
16- *D*: Dvorak.
17
18Still a work-in-progress. Suggestions welcome @ https://github.com/dwrz/piemod.
19
20### Keymap
21
22![PieMod Keymap](./keymap.png)
23
24### TODO
25
26- [ ] Add Emacs layer.
27- [ ] Add Macro layer.
28- [ ] Add system control keys (rotation, brightness).
29- [ ] Switch " and ' quotes (or function to toggle default).
30- [ ] Add capslock.
31.
diff --git a/keyboards/lets_split/keymaps/piemod/config.h b/keyboards/lets_split/keymaps/piemod/config.h
new file mode 100644
index 000000000..7f33a4363
--- /dev/null
+++ b/keyboards/lets_split/keymaps/piemod/config.h
@@ -0,0 +1,37 @@
1/*
2This is the c configuration file for the keymap
3
4Copyright 2012 Jun Wako <wakojun@gmail.com>
5Copyright 2015 Jack Humbert
6
7This program is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation, either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program. If not, see <http://www.gnu.org/licenses/>.
19*/
20
21#ifndef CONFIG_USER_H
22#define CONFIG_USER_H
23
24#include "../../config.h"
25
26/* Use I2C or Serial, not both */
27
28#define USE_SERIAL
29// #define USE_I2C
30
31/* Select hand configuration */
32
33#define MASTER_LEFT
34// #define _MASTER_RIGHT
35// #define EE_HANDS
36
37#endif \ No newline at end of file
diff --git a/keyboards/lets_split/keymaps/piemod/keymap.c b/keyboards/lets_split/keymaps/piemod/keymap.c
new file mode 100644
index 000000000..558370fa8
--- /dev/null
+++ b/keyboards/lets_split/keymaps/piemod/keymap.c
@@ -0,0 +1,121 @@
1#include "lets_split.h"
2#include "action_layer.h"
3#include "eeconfig.h"
4
5extern keymap_config_t keymap_config;
6
7#define _DVORAK 0
8#define _ARROW 1 //F(1)
9#define _SYMBOL 2 // F(2)
10#define _NUMBER 3 // F(3)
11#define _FUNCTION 4 // F(4)
12#define _EMACS 5 // F(5)
13#define _MACROS 6 // F(6)
14#define _MOUSE 7 // F(7)
15
16enum custom_keycodes {
17 DVORAK = SAFE_RANGE,
18 ARROW,
19 SYMBOL,
20 NUMBER,
21 FUNCTION,
22 EMACS,
23 MACROS,
24 MOUSE,
25};
26
27const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
28
29[_DVORAK] = KEYMAP( \
30 KC_ESC, KC_QUOTE, F(7), KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DELETE, \
31 KC_TAB, F(1), F(2), F(3), F(4), KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENTER, \
32 KC_LSHIFT, KC_SCOLON, F(5), KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_MINUS, \
33 F(10), F(6), KC_MENU, KC_LALT, KC_LGUI, KC_BSPACE, KC_SPACE, KC_RCTRL, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \
34),
35
36[_ARROW] = KEYMAP( \
37 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_UP, KC_END, KC_PGUP, \
38 KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, \
39 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_NO, \
40 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \
41),
42
43[_SYMBOL] = KEYMAP( \
44 KC_TILD, KC_GRAVE, KC_NO, KC_EQUAL, KC_PLUS, KC_NO, KC_LBRACKET, KC_RBRACKET, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, \
45 KC_NO, KC_NO, KC_TRNS, KC_SCOLON, KC_COLN, KC_NO, KC_LCBR, KC_RCBR, KC_DLR, KC_PERC, KC_CIRC, F(21), \
46 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BSLASH, KC_SLASH, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, \
47 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ASTR, KC_SLASH, KC_MINUS, KC_PLUS, KC_EQUAL \
48),
49
50[_NUMBER] = KEYMAP( \
51 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_7, KC_8, KC_9, KC_NO, \
52 KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_4, KC_5, KC_6, KC_NO, \
53 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_0, KC_1, KC_2, KC_3, KC_NO, \
54 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ASTR, KC_SLASH, KC_MINUS, KC_PLUS, KC_EQUAL \
55),
56
57[_FUNCTION] = KEYMAP( \
58 KC_PSCREEN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, \
59 KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
60 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, \
61 RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DELETE, KC_INSERT, KC_HOME, KC_PGDN, KC_PGUP, KC_END \
62),
63
64[_EMACS] = KEYMAP( \
65 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
66 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
67 KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
68 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \
69),
70
71[_MACROS] = KEYMAP( \
72 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
73 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
74 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
75 KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \
76),
77
78[_MOUSE] = KEYMAP( \
79 KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, \
80 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, \
81 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
82 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, KC_NO, KC_NO, KC_NO \
83)
84};
85
86enum function_id {
87 TEENSY_KEY,
88 CUSTOM_KEY,
89 L_CTRL_ALT_ENT,
90 R_CTRL_ALT_ENT,
91};
92
93int CAPSLOCKED = 0;
94
95 const uint16_t PROGMEM fn_actions[] = {
96
97 // DVORAK 0
98 // ARROW 1, F(1)
99 // SYMBOL 2, F(2)
100 // NUMBER 3, F(3)
101 // FUNCTION 4, F(4)
102 // EMACS 5, F(5)
103 // MACROS 6, F(6)
104 // MOUSE 7, F(7)
105
106 // Layers
107 [1] = ACTION_LAYER_TAP_KEY(1, KC_A), // FN1 = Momentary Arrow layer on A.
108 [2] = ACTION_LAYER_TAP_KEY(2, KC_O), // FN2 = Momentary symbOl layer on O.
109 [3] = ACTION_LAYER_TAP_KEY(3, KC_E), // FN3 = Momentary numbEr layer on E.
110 [4] = ACTION_LAYER_TAP_KEY(4, KC_U), // FN4 = Momentary fUnction layer on U.
111 [5] = ACTION_LAYER_TAP_KEY(5, KC_Q), // FN5 = Momentary emaQs layer on Q.
112 [6] = ACTION_LAYER_TAP_KEY(6, KC_LCTRL), // FN6 = Momentary MACROS on ??? key.
113 [7] = ACTION_LAYER_TAP_KEY(7, KC_COMMA), // FN7 = Momentary MOUSE on , key.
114
115 // Special Keys
116 [10] = ACTION_MODS_KEY(KC_LCTRL, KC_LALT), // FN10 = Ctrl + Alt.
117
118 // Symbols
119 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_SLASH), // FN21 = Question mark.
120
121 };
diff --git a/keyboards/planck/keymaps/piemod/Makefile b/keyboards/planck/keymaps/piemod/Makefile
new file mode 100755
index 000000000..1e48872e3
--- /dev/null
+++ b/keyboards/planck/keymaps/piemod/Makefile
@@ -0,0 +1,10 @@
1SUBPROJECT_DEFAULT = rev4
2
3MOUSEKEY_ENABLE = yes
4BLUETOOTH_ENABLE = yes
5EXTRAKEY_ENABLE = yes
6AUDIO_ENABLE = yes
7
8ifndef QUANTUM_DIR
9 include ../../../../Makefile
10endif
diff --git a/keyboards/planck/keymaps/piemod/README.md b/keyboards/planck/keymaps/piemod/README.md
new file mode 100644
index 000000000..f2a051da1
--- /dev/null
+++ b/keyboards/planck/keymaps/piemod/README.md
@@ -0,0 +1,31 @@
1PieMod
2======
3
4A keymap for users that need:
5
6- *P*: Programming symbols.
7
8- *I*: i3wm.
9
10- *E*: Emacs.
11
12- *M*: Macros.
13
14- *O*: Ortholinear.
15
16- *D*: Dvorak.
17
18Still a work-in-progress. Suggestions welcome @ https://github.com/dwrz/piemod.
19
20### Keymap
21
22![PieMod Keymap](./keymap.png)
23
24### TODO
25
26- [ ] Add Emacs layer.
27- [ ] Add Macro layer.
28- [ ] Add system control keys (rotation, brightness).
29- [ ] Switch " and ' quotes (or function to toggle default).
30- [ ] Add capslock.
31.
diff --git a/keyboards/planck/keymaps/piemod/keymap.c b/keyboards/planck/keymaps/piemod/keymap.c
new file mode 100644
index 000000000..e6e7a8a5a
--- /dev/null
+++ b/keyboards/planck/keymaps/piemod/keymap.c
@@ -0,0 +1,111 @@
1#include "planck.h"
2#include "action_layer.h"
3#ifdef AUDIO_ENABLE
4 #include "audio.h"
5#endif
6#include "eeconfig.h"
7
8#define DVORAK 0
9#define ARROW 1 //F(1)
10#define SYMBOL 2 // F(2)
11#define NUMBER 3 // F(3)
12#define FUNCTION 4 // F(4)
13#define EMACS 5 // F(5)
14#define CUSTOM_MACROS 6 // F(6)
15#define MOUSE 7 // F(7)
16
17const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
18 [DVORAK] = {
19 {KC_ESC, KC_QUOTE, F(7), KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DELETE},
20 {KC_TAB, F(1), F(2), F(3), F(4), KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENTER},
21 {KC_LSHIFT, KC_SCOLON, F(5), KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_MINUS},
22 {F(10), F(6), KC_MENU, KC_LALT, KC_LGUI, KC_BSPACE, KC_SPACE, KC_RCTRL, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT},
23 },
24
25 [ARROW] = {
26 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_UP, KC_END, KC_PGUP},
27 {KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN},
28 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_NO},
29 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO}
30 },
31
32 [SYMBOL] = {
33 {KC_TILD, KC_GRAVE, KC_NO, KC_EQUAL, KC_PLUS, KC_NO, KC_LBRACKET, KC_RBRACKET, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN},
34 {KC_NO, KC_NO, KC_TRNS, KC_SCOLON, KC_COLN, KC_NO, KC_LCBR, KC_RCBR, KC_DLR, KC_PERC, KC_CIRC, F(21)},
35 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BSLASH, KC_SLASH, KC_EXLM, KC_AT, KC_HASH, KC_PIPE},
36 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ASTR, KC_SLASH, KC_MINUS, KC_PLUS, KC_EQUAL}
37 },
38
39 [NUMBER] = {
40 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_7, KC_8, KC_9, KC_NO},
41 {KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_4, KC_5, KC_6, KC_NO},
42 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_0, KC_1, KC_2, KC_3, KC_NO},
43 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ASTR, KC_SLASH, KC_MINUS, KC_PLUS, KC_EQUAL}
44 },
45
46 [FUNCTION] = {
47 {KC_PSCREEN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6},
48 {KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
49 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE},
50 {RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DELETE, KC_INSERT, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
51 },
52
53 [EMACS] = {
54 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO},
55 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO},
56 {KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO},
57 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO}
58 },
59
60 [CUSTOM_MACROS] = {
61 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO},
62 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO},
63 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO},
64 {KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO}
65 },
66
67 [MOUSE] = {
68 {KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO},
69 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO},
70 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO},
71 {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, KC_NO, KC_NO, KC_NO}
72 },
73
74 };
75
76 enum function_id {
77 TEENSY_KEY,
78 CUSTOM_KEY,
79 L_CTRL_ALT_ENT,
80 R_CTRL_ALT_ENT,
81 };
82
83 int CAPSLOCKED = 0;
84
85 const uint16_t PROGMEM fn_actions[] = {
86
87 // DVORAK 0
88 // ARROW 1, F(1)
89 // SYMBOL 2, F(2)
90 // NUMBER 3, F(3)
91 // FUNCTION 4, F(4)
92 // EMACS 5, F(5)
93 // MACROS 6, F(6)
94 // MOUSE 7, F(7)
95
96 // Layers
97 [1] = ACTION_LAYER_TAP_KEY(1, KC_A), // FN1 = Momentary Arrow layer on A.
98 [2] = ACTION_LAYER_TAP_KEY(2, KC_O), // FN2 = Momentary symbOl layer on O.
99 [3] = ACTION_LAYER_TAP_KEY(3, KC_E), // FN3 = Momentary numbEr layer on E.
100 [4] = ACTION_LAYER_TAP_KEY(4, KC_U), // FN4 = Momentary fUnction layer on U.
101 [5] = ACTION_LAYER_TAP_KEY(5, KC_Q), // FN5 = Momentary emaQs layer on Q.
102 [6] = ACTION_LAYER_TAP_KEY(6, KC_LCTRL), // FN6 = Momentary MACROS on ??? key.
103 [7] = ACTION_LAYER_TAP_KEY(7, KC_COMMA), // FN7 = Momentary MOUSE on , key.
104
105 // Special Keys
106 [10] = ACTION_MODS_KEY(KC_LCTRL, KC_LALT), // FN10 = Ctrl + Alt.
107
108 // Symbols
109 [21] = ACTION_MODS_KEY(MOD_LSFT, KC_SLASH), // FN21 = Question mark.
110
111 };
diff --git a/lib/chibios b/lib/chibios
Subproject 8fce03b3a75c743e5d5c40b9d59c1637c59d22a Subproject d34e8eb83101a95f98892bf68605fe545821f32
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 0243a7e01..aac1d07a9 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -40,13 +40,12 @@ extern backlight_config_t backlight_config;
40 #ifndef AG_SWAP_SONG 40 #ifndef AG_SWAP_SONG
41 #define AG_SWAP_SONG SONG(AG_SWAP_SOUND) 41 #define AG_SWAP_SONG SONG(AG_SWAP_SOUND)
42 #endif 42 #endif
43 #ifndef DEFAULT_LAYER_SONGS
44 #define DEFAULT_LAYER_SONGS { }
45 #endif
46 float goodbye_song[][2] = GOODBYE_SONG; 43 float goodbye_song[][2] = GOODBYE_SONG;
47 float ag_norm_song[][2] = AG_NORM_SONG; 44 float ag_norm_song[][2] = AG_NORM_SONG;
48 float ag_swap_song[][2] = AG_SWAP_SONG; 45 float ag_swap_song[][2] = AG_SWAP_SONG;
49 float default_layer_songs[][16][2] = DEFAULT_LAYER_SONGS; 46 #ifdef DEFAULT_LAYER_SONGS
47 float default_layer_songs[][16][2] = DEFAULT_LAYER_SONGS;
48 #endif
50#endif 49#endif
51 50
52static void do_code16 (uint16_t code, void (*f) (uint8_t)) { 51static void do_code16 (uint16_t code, void (*f) (uint8_t)) {
@@ -479,6 +478,13 @@ bool process_record_quantum(keyrecord_t *record) {
479 void (*method)(uint8_t) = (record->event.pressed) ? &add_key : &del_key; 478 void (*method)(uint8_t) = (record->event.pressed) ? &add_key : &del_key;
480 uint8_t shifted = get_mods() & ((MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT) 479 uint8_t shifted = get_mods() & ((MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)
481 |MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))); 480 |MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)));
481
482#ifdef GRAVE_ESC_CTRL_OVERRIDE
483 // if CTRL is pressed, ESC is always read as ESC, even if SHIFT or GUI is pressed.
484 // this is handy for the ctrl+shift+esc shortcut on windows, among other things.
485 if (get_mods() & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)))
486 shifted = 0;
487#endif
482 488
483 method(shifted ? KC_GRAVE : KC_ESCAPE); 489 method(shifted ? KC_GRAVE : KC_ESCAPE);
484 send_keyboard_report(); 490 send_keyboard_report();
@@ -560,7 +566,7 @@ void send_string_with_delay(const char *str, uint8_t interval) {
560} 566}
561 567
562void set_single_persistent_default_layer(uint8_t default_layer) { 568void set_single_persistent_default_layer(uint8_t default_layer) {
563 #ifdef AUDIO_ENABLE 569 #if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS)
564 PLAY_SONG(default_layer_songs[default_layer]); 570 PLAY_SONG(default_layer_songs[default_layer]);
565 #endif 571 #endif
566 eeconfig_update_default_layer(1U<<default_layer); 572 eeconfig_update_default_layer(1U<<default_layer);
diff --git a/quantum/template/config.h b/quantum/template/config.h
index dbca45765..700a56f52 100644
--- a/quantum/template/config.h
+++ b/quantum/template/config.h
@@ -67,6 +67,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
67/* Locking resynchronize hack */ 67/* Locking resynchronize hack */
68#define LOCKING_RESYNC_ENABLE 68#define LOCKING_RESYNC_ENABLE
69 69
70/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
71 * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
72 */
73// #define GRAVE_ESC_CTRL_OVERRIDE
74
70/* 75/*
71 * Force NKRO 76 * Force NKRO
72 * 77 *