aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/atreus/Makefile8
-rw-r--r--keyboards/atreus/keymaps/xyverz/keymap.c8
-rw-r--r--keyboards/ergodox/keymaps/algernon/Makefile7
-rw-r--r--keyboards/ergodox/keymaps/algernon/images/adore-layer.pngbin95615 -> 93748 bytes
-rw-r--r--keyboards/ergodox/keymaps/algernon/images/base-layer.pngbin95654 -> 95222 bytes
-rw-r--r--keyboards/ergodox/keymaps/algernon/images/one-handed-layer.pngbin91140 -> 0 bytes
-rw-r--r--keyboards/ergodox/keymaps/algernon/keymap.c2422
-rw-r--r--keyboards/ergodox/keymaps/algernon/readme.md52
-rw-r--r--keyboards/ergodox/keymaps/xyverz/keymap.c311
-rw-r--r--keyboards/phantom/keymaps/xyverz/keymap.c104
-rw-r--r--keyboards/tv44/Makefile75
-rw-r--r--keyboards/tv44/config.h162
-rw-r--r--keyboards/tv44/keymaps/default/Makefile21
-rw-r--r--keyboards/tv44/keymaps/default/config.h8
-rw-r--r--keyboards/tv44/keymaps/default/keymap.c97
-rw-r--r--keyboards/tv44/keymaps/default/readme.md1
-rw-r--r--keyboards/tv44/keymaps/xyverz/Makefile21
-rw-r--r--keyboards/tv44/keymaps/xyverz/config.h8
-rw-r--r--keyboards/tv44/keymaps/xyverz/keymap.c92
-rw-r--r--keyboards/tv44/keymaps/xyverz/readme.md1
-rw-r--r--keyboards/tv44/readme.md28
-rw-r--r--keyboards/tv44/tv44.c28
-rw-r--r--keyboards/tv44/tv44.h22
-rw-r--r--readme.md4
24 files changed, 2233 insertions, 1247 deletions
diff --git a/keyboards/atreus/Makefile b/keyboards/atreus/Makefile
index 95ee1d4d7..5894d231f 100644
--- a/keyboards/atreus/Makefile
+++ b/keyboards/atreus/Makefile
@@ -2,11 +2,11 @@
2 2
3ifdef TEENSY2 3ifdef TEENSY2
4 OPT_DEFS += -DATREUS_TEENSY2 4 OPT_DEFS += -DATREUS_TEENSY2
5 ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex 5 ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
6else 6else
7 OPT_DEFS += -DATREUS_ASTAR 7 OPT_DEFS += -DATREUS_ASTAR
8 OPT_DEFS += -DCATERINA_BOOTLOADER 8 OPT_DEFS += -DCATERINA_BOOTLOADER
9 ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ 9 ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
10 avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) 10 avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
11endif 11endif
12 12
@@ -84,5 +84,5 @@ endif
84USB ?= /dev/cu.usbmodem1411 84USB ?= /dev/cu.usbmodem1411
85 85
86upload: build 86upload: build
87 $(ATRUES_UPLOAD_COMMAND) 87 $(ATREUS_UPLOAD_COMMAND)
88 \ No newline at end of file 88
diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c
index 447fbcf10..b418cc9b5 100644
--- a/keyboards/atreus/keymaps/xyverz/keymap.c
+++ b/keyboards/atreus/keymaps/xyverz/keymap.c
@@ -46,14 +46,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
46 [_L1] = { /* LAYER 1 */ 46 [_L1] = { /* LAYER 1 */
47 {KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0 }, 47 {KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0 },
48 {KC_TAB, KC_INS, KC_UP, KC_DEL, KC_HOME, KC_NO, KC_PGUP, KC_MUTE, KC_VOLD, KC_VOLU, KC_EQL }, 48 {KC_TAB, KC_INS, KC_UP, KC_DEL, KC_HOME, KC_NO, KC_PGUP, KC_MUTE, KC_VOLD, KC_VOLU, KC_EQL },
49 {KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS}, 49 {KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS},
50 {KC_TRNS, KC_GRV, KC_LGUI, KC_TRNS, KC_DEL, KC_LALT, KC_SPC, KC_TRNS, KC_LBRC, KC_RBRC, KC_ENT } 50 {KC_TRNS, KC_GRV, KC_LGUI, KC_TRNS, KC_DEL, KC_LALT, KC_SPC, KC_TRNS, KC_LBRC, KC_RBRC, KC_ENT }
51 }, 51 },
52 [_L2] = { /* LAYER 2 */ 52 [_L2] = { /* LAYER 2 */
53 {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, 53 {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN},
54 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 }, 54 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_PLUS},
55 {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12 }, 55 {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12 },
56 {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, RESET } 56 {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, LSFT(KC_LBRC), LSFT(KC_RBRC), RESET}
57 } 57 }
58}; 58};
59 59
diff --git a/keyboards/ergodox/keymaps/algernon/Makefile b/keyboards/ergodox/keymaps/algernon/Makefile
index 6bf3976b9..00194857a 100644
--- a/keyboards/ergodox/keymaps/algernon/Makefile
+++ b/keyboards/ergodox/keymaps/algernon/Makefile
@@ -8,10 +8,17 @@ CONSOLE_ENABLE = no
8TAP_DANCE_ENABLE = yes 8TAP_DANCE_ENABLE = yes
9KEYLOGGER_ENABLE ?= yes 9KEYLOGGER_ENABLE ?= yes
10 10
11ADORE_AUTOLOG ?= no
12
11ifeq (${FORCE_NKRO},yes) 13ifeq (${FORCE_NKRO},yes)
12OPT_DEFS += -DFORCE_NKRO 14OPT_DEFS += -DFORCE_NKRO
13endif 15endif
14 16
17ifeq (${ADORE_AUTOLOG},yes)
18KEYLOGGER_ENABLE = yes
19OPT_DEFS += -DADORE_AUTOLOG
20endif
21
15ifeq (${KEYLOGGER_ENABLE},yes) 22ifeq (${KEYLOGGER_ENABLE},yes)
16OPT_DEFS += -DKEYLOGGER_ENABLE 23OPT_DEFS += -DKEYLOGGER_ENABLE
17CONSOLE_ENABLE = yes 24CONSOLE_ENABLE = yes
diff --git a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png
index 3df68ea53..44ad8a1eb 100644
--- a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png
+++ b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/algernon/images/base-layer.png b/keyboards/ergodox/keymaps/algernon/images/base-layer.png
index 7b25a05b3..da159fbe2 100644
--- a/keyboards/ergodox/keymaps/algernon/images/base-layer.png
+++ b/keyboards/ergodox/keymaps/algernon/images/base-layer.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/algernon/images/one-handed-layer.png b/keyboards/ergodox/keymaps/algernon/images/one-handed-layer.png
deleted file mode 100644
index 698d11e5f..000000000
--- a/keyboards/ergodox/keymaps/algernon/images/one-handed-layer.png
+++ /dev/null
Binary files differ
diff --git a/keyboards/ergodox/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c
index c4de53da2..244bfb51f 100644
--- a/keyboards/ergodox/keymaps/algernon/keymap.c
+++ b/keyboards/ergodox/keymaps/algernon/keymap.c
@@ -1,1218 +1,1206 @@
1/* 1/*
2 * algernon's ErgoDox EZ layout, please see the readme.md file! 2 * algernon's ErgoDox EZ layout, please see the readme.md file!
3 */ 3 */
4 4
5#include "ergodox.h" 5#include "ergodox.h"
6#include "led.h" 6#include "led.h"
7#include "debug.h" 7#include "debug.h"
8#include "action_layer.h" 8#include "action_layer.h"
9#include "action_util.h" 9#include "action_util.h"
10#include "mousekey.h" 10#include "mousekey.h"
11#include "timer.h" 11#include "timer.h"
12#include "keymap_plover.h" 12#include "keymap_plover.h"
13#include "eeconfig.h" 13#include "eeconfig.h"
14#include "wait.h" 14#include "wait.h"
15#include "version.h" 15#include "version.h"
16 16
17/* Layers */ 17/* Layers */
18 18
19enum { 19enum {
20 BASE = 0, 20 BASE = 0,
21 ADORE, 21 ADORE,
22 ARRW, 22 ARRW,
23 APPSEL, 23 APPSEL,
24 HUN, 24 HUN,
25 NMDIA, 25 NMDIA,
26 OHLFT, 26 PLVR,
27 OHRGT, 27};
28 PLVR, 28
29}; 29/* Macros */
30 30
31/* Macros */ 31enum {
32 32 NONE = 0,
33enum { 33 // Buttons that do extra stuff
34 NONE = 0, 34 A_GUI,
35 // Buttons that do extra stuff 35 A_PLVR,
36 A_GUI, 36 A_ESC,
37 A_PLVR, 37 A_MPN,
38 A_ESC, 38
39 A_MPN, 39 // Function / number keys
40 40 KF_1, // 1, F1
41 // Function / number keys 41 KF_2, // 2, F2
42 KF_1, // 1, F1 42 KF_3, // ...
43 KF_2, // 2, F2 43 KF_4,
44 KF_3, // ... 44 KF_5,
45 KF_4, 45 KF_6,
46 KF_5, 46 KF_7,
47 KF_6, 47 KF_8,
48 KF_7, 48 KF_9,
49 KF_8, 49 KF_10,
50 KF_9, 50 KF_11, // =, F11
51 KF_10, 51
52 KF_11, // =, F11 52 // Application select keys
53 53 APP_SLK, // Slack
54 // Application select keys 54 APP_EMCS, // Emacs
55 APP_SLK, // Slack 55 APP_TERM, // Terminal
56 APP_EMCS, // Emacs 56 APP_CHRM, // Chrome
57 APP_TERM, // Terminal 57 APP_MSIC, // Music
58 APP_CHRM, // Chrome 58
59 APP_MSIC, // Music 59 // Diagonal mouse movement
60 60 A_MUL,
61 // Diagonal mouse movement 61 A_MUR,
62 A_MUL, 62 A_MDL,
63 A_MUR, 63 A_MDR,
64 A_MDL, 64
65 A_MDR, 65 // Hungarian layer keys
66 66 HU_AA, // Á
67 // Hungarian layer keys 67 HU_OO, // Ó
68 HU_AA, // Á 68 HU_EE, // É
69 HU_OO, // Ó 69 HU_UU, // Ú
70 HU_EE, // É 70 HU_II, // Í
71 HU_UU, // Ú 71 HU_OE, // Ö
72 HU_II, // Í 72 HU_UE, // Ü
73 HU_OE, // Ö 73 HU_OEE, // Ő
74 HU_UE, // Ü 74 HU_UEE, // Ű
75 HU_OEE, // Ő 75};
76 HU_UEE, // Ű 76
77 77/* Fn keys */
78 // One-handed layout specials 78
79 OH_BSSPC, 79enum {
80 OH_ENTSFT, 80 F_BSE = 0,
81 OH_BASE, 81 F_HUN,
82 OH_LEFT, 82 F_GUI,
83 OH_RIGHT, 83 F_SFT,
84}; 84 F_ALT,
85 85 F_CTRL
86/* Fn keys */ 86};
87 87
88enum { 88/* Custom keycodes */
89 F_BSE = 0, 89
90 F_HUN, 90enum {
91 F_GUI, 91 CT_CLN = 0,
92 F_SFT, 92 CT_MNS,
93 F_ALT, 93 CT_TA,
94 F_CTRL 94 CT_LBP,
95}; 95 CT_RBP
96 96};
97/* Custom keycodes */ 97
98 98/* States & timers */
99enum { 99
100 CT_CLN = 0, 100uint16_t gui_timer = 0;
101 CT_MNS, 101
102 CT_TA, 102uint16_t kf_timers[12];
103}; 103
104 104#if KEYLOGGER_ENABLE
105/* States & timers */ 105bool log_enable = false;
106 106#endif
107uint16_t gui_timer = 0; 107
108 108bool time_travel = false;
109uint16_t kf_timers[12]; 109
110 110/* The Keymap */
111uint16_t oh_base_timer = 0; 111
112uint16_t oh_bsspc_timer = 0; 112const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
113uint16_t oh_entsft_timer = 0; 113
114 114/* Keymap 0: Base Layer
115#define OH_BLINK_INTERVAL 500 115 *
116 116 * ,-----------------------------------------------------. ,-----------------------------------------------------.
117uint8_t oh_left_blink = 0; 117 * | Next/Prev | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
118uint16_t oh_left_blink_timer = 0; 118 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
119uint8_t oh_right_blink = 0; 119 * | ~ | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ |
120uint16_t oh_right_blink_timer = 0; 120 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
121 121 * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow |
122#if KEYLOGGER_ENABLE 122 * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
123bool log_enable = false; 123 * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop |
124#endif 124 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
125 125 * | | | | | : | | - | | | | |
126bool time_travel = false; 126 * `-----------------------------------' `-----------------------------------'
127 127 * ,-------------. ,-------------.
128/* The Keymap */ 128 * | LAlt | GUI | | MDIA | Del |
129 129 * ,------|------|------| |------+------+------.
130const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 130 * | | | Ctrl | | LEAD | | |
131 131 * |Backsp|LShift|------| |------| Enter| Space|
132/* Keymap 0: Base Layer 132 * | | | ESC | | HUN | | |
133 * 133 * `--------------------' `--------------------'
134 * ,-----------------------------------------------------. ,-----------------------------------------------------. 134 */
135 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | 135[BASE] = KEYMAP(
136 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| 136// left hand
137 * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ | 137 M(A_MPN) ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
138 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| 138,KC_GRV ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
139 * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow | 139,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
140 * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| 140,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
141 * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop | 141,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
142 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' 142
143 * | | | | | : | | - | | | | | 143 ,F(F_ALT),F(F_GUI)
144 * `-----------------------------------' `-----------------------------------' 144 ,F(F_CTRL)
145 * ,-------------. ,-------------. 145 ,KC_BSPC,F(F_SFT),M(A_ESC)
146 * | LAlt | GUI | | MDIA | 1HND | 146
147 * ,------|------|------| |------+------+------. 147 // right hand
148 * | | | Ctrl | | LEAD | | | 148 ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
149 * |Backsp|LShift|------| |------| Enter| Space| 149 ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
150 * | | | ESC | | HUN | | | 150 ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL
151 * `--------------------' `--------------------' 151 ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP
152 */ 152 ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO
153[BASE] = KEYMAP( 153
154// left hand 154 ,OSL(NMDIA),KC_DEL
155 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) 155 ,KC_LEAD
156,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC 156 ,F(F_HUN) ,KC_ENT ,KC_SPC
157,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I 157 ),
158,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN 158
159,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) 159/* Keymap 1: Adore layer
160 160 *
161 ,F(F_ALT),F(F_GUI) 161 * ,-----------------------------------------------------. ,-----------------------------------------------------.
162 ,F(F_CTRL) 162 * | Play/Pause| 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
163 ,KC_BSPC,F(F_SFT),M(A_ESC) 163 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
164 164 * | `~ | X | W | K | L | M | ( | | ) | F | H | C | P | Y | \ |
165 // right hand 165 * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------|
166 ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 166 * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = |
167 ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS 167 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
168 ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL 168 * | | Z | Q | ' | , | . | : | | - | B | G | V | J | / | |
169 ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP 169 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
170 ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO 170 * | | | | | | | | | | | |
171 171 * `-----------------------------------' `-----------------------------------'
172 ,OSL(NMDIA),M(OH_LEFT) 172 * ,-------------. ,-------------.
173 ,KC_LEAD 173 * | LAlt | GUI | | MDIA | Del |
174 ,F(F_HUN) ,KC_ENT ,KC_SPC 174 * ,------|------|------| |------+------+------.
175 ), 175 * | | | Ctrl | | HUN | | |
176 176 * |Backsp|LShift|------| |------| Enter| Space|
177/* Keymap 1: Adore layer 177 * | | | ESC | | LEAD | | |
178 * 178 * `--------------------' `--------------------'
179 * ,-----------------------------------------------------. ,-----------------------------------------------------. 179 */
180 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 | 180[ADORE] = KEYMAP(
181 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| 181// left hand
182 * | Next/Prev | , | . | L | W | M | [ | | ] | F | H | C | P | Y | \ | 182 KC_MPLY ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
183 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| 183,KC_GRV ,KC_X ,KC_W ,KC_K ,KC_L ,KC_M ,TD(CT_LBP)
184 * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = / Arrow | 184,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U
185 * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------| 185,KC_NO ,KC_Z ,KC_Q ,KC_QUOT,KC_COMM,KC_DOT ,TD(CT_CLN)
186 * | Play/Pause| / | Z | ' | K | X | | | | B | G | V | J | Q | Stop | 186,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
187 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' 187
188 * | | | | | : | | - | | | | | 188 ,F(F_ALT),F(F_GUI)
189 * `-----------------------------------' `-----------------------------------' 189 ,F(F_CTRL)
190 * ,-------------. ,-------------. 190 ,KC_BSPC,F(F_SFT),M(A_ESC)
191 * | LAlt | GUI | | MDIA | 1HND | 191
192 * ,------|------|------| |------+------+------. 192 // right hand
193 * | | | Ctrl | | LEAD | | | 193 ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
194 * |Backsp|LShift|------| |------| Enter| Space| 194 ,TD(CT_RBP),KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS
195 * | | | ESC | | HUN | | | 195 ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL
196 * `--------------------' `--------------------' 196 ,TD(CT_MNS),KC_B ,KC_G ,KC_V ,KC_J ,KC_SLSH ,KC_NO
197 */ 197 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
198[ADORE] = KEYMAP( 198
199// left hand 199 ,OSL(NMDIA),KC_DEL
200 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR) 200 ,F(F_HUN)
201,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC 201 ,KC_LEAD ,KC_ENT ,KC_SPC
202,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U 202 ),
203,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN 203
204,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN) 204/* Keymap 2: Arrow layer
205 205 *
206 ,F(F_ALT),F(F_GUI) 206 * ,-----------------------------------------------------. ,-----------------------------------------------------.
207 ,F(F_CTRL) 207 * | | | | | | | | | | | | | | | |
208 ,KC_BSPC,F(F_SFT),M(A_ESC) 208 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
209 209 * | | | | | | | | | | | Home | Up | End | | |
210 // right hand 210 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
211 ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11 211 * | | | | | | |------| |------| | Left | Down | Rght | | |
212 ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS 212 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
213 ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL 213 * | | | | | | | | | | | | | | | |
214 ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP 214 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
215 ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO 215 * | | | | | | | | | | | |
216 216 * `----------------------------------' `----------------------------------'
217 ,OSL(NMDIA),M(OH_LEFT) 217 * ,-------------. ,-------------.
218 ,KC_LEAD 218 * | | | | | |
219 ,F(F_HUN) ,KC_ENT ,KC_SPC 219 * ,------|------|------| |------+------+------.
220 ), 220 * | | | | | | | |
221 221 * | Enter| |------| |------| PgUp | PgDn |
222/* Keymap 2: Arrow layer 222 * | | | | | | | |
223 * 223 * `--------------------' `--------------------'
224 * ,-----------------------------------------------------. ,-----------------------------------------------------. 224 */
225 * | | | | | | | | | | | | | | | | 225
226 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| 226[ARRW] = KEYMAP(
227 * | | | | | | | | | | | Home | Up | End | | | 227// left hand
228 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| 228 KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
229 * | | | | | | |------| |------| | Left | Down | Rght | | | 229,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
230 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| 230,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
231 * | | | | | | | | | | | | | | | | 231,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
232 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' 232,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
233 * | | | | | | | | | | | | 233
234 * `----------------------------------' `----------------------------------' 234 ,KC_TRNS ,KC_TRNS
235 * ,-------------. ,-------------. 235 ,KC_TRNS
236 * | | | | | | 236 ,KC_ENT ,KC_TRNS ,KC_TRNS
237 * ,------|------|------| |------+------+------. 237
238 * | | | | | | | | 238 // right hand
239 * | | |------| |------| PgUp | PgDn | 239 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
240 * | | | | | | | | 240 ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS
241 * `--------------------' `--------------------' 241 ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS
242 */ 242 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
243 243 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
244[ARRW] = KEYMAP( 244
245// left hand 245 ,KC_TRNS ,KC_TRNS
246 KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 246 ,KC_TRNS
247,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 247 ,KC_TRNS ,KC_PGUP ,KC_PGDN
248,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 248 ),
249,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 249
250,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 250/* Keymap 3: Application select layer
251 251 *
252 ,KC_TRNS ,KC_TRNS 252 * ,-----------------------------------------------------. ,-----------------------------------------------------.
253 ,KC_TRNS 253 * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | |
254 ,KC_TRNS ,KC_TRNS ,KC_TRNS 254 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
255 255 * | | | | | | | | | | | | | | | |
256 // right hand 256 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
257 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 257 * | | | | | | |------| |------| | | | | | |
258 ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS 258 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
259 ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS 259 * | | | | | | | | | | | | | | | |
260 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 260 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
261 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 261 * | | | | | | | | | | | |
262 262 * `----------------------------------' `----------------------------------'
263 ,KC_TRNS ,KC_TRNS 263 * ,-------------. ,-------------.
264 ,KC_TRNS 264 * | | | | | |
265 ,KC_TRNS ,KC_PGUP ,KC_PGDN 265 * ,------|------|------| |------+------+------.
266 ), 266 * | | | | | | | |
267 267 * | | |------| |------| | |
268/* Keymap 3: Application select layer 268 * | | | | | | | |
269 * 269 * `--------------------' `--------------------'
270 * ,-----------------------------------------------------. ,-----------------------------------------------------. 270 */
271 * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | | 271
272 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| 272[APPSEL] = KEYMAP(
273 * | | | | | | | | | | | | | | | | 273// left hand
274 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| 274 KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS
275 * | | | | | | |------| |------| | | | | | | 275,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
276 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| 276,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
277 * | | | | | | | | | | | | | | | | 277,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
278 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' 278,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
279 * | | | | | | | | | | | | 279
280 * `----------------------------------' `----------------------------------' 280 ,KC_TRNS ,KC_TRNS
281 * ,-------------. ,-------------. 281 ,KC_TRNS
282 * | | | | | | 282 ,KC_TRNS ,KC_TRNS ,KC_TRNS
283 * ,------|------|------| |------+------+------. 283
284 * | | | | | | | | 284 // right hand
285 * | | |------| |------| | | 285 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS
286 * | | | | | | | | 286 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
287 * `--------------------' `--------------------' 287 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
288 */ 288 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
289 289 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
290[APPSEL] = KEYMAP( 290
291// left hand 291 ,KC_TRNS ,KC_TRNS
292 KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS 292 ,KC_TRNS
293,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 293 ,KC_TRNS ,KC_TRNS ,KC_TRNS
294,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 294 ),
295,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 295
296,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 296
297 297/* Keymap 4: Hungarian Layer
298 ,KC_TRNS ,KC_TRNS 298 *
299 ,KC_TRNS 299 * ,-----------------------------------------------------. ,-----------------------------------------------------.
300 ,KC_TRNS ,KC_TRNS ,KC_TRNS 300 * | | | | | | | | | | | | | | | |
301 301 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
302 // right hand 302 * | | | Ő | | Ű | | | | | | | | | | |
303 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS 303 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
304 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 304 * | | Á | Ó | É | Ú | Í |------| |------| | | | | | |
305 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 305 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
306 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 306 * | | | Ö | | Ü | | | | | | | | | | |
307 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS 307 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
308 308 * | | | | | | | | | | | |
309 ,KC_TRNS ,KC_TRNS 309 * `----------------------------------' `----------------------------------'
310 ,KC_TRNS 310 * ,-------------. ,-------------.
311 ,KC_TRNS ,KC_TRNS ,KC_TRNS 311 * | | | | | |
312 ), 312 * ,------|------|------| |------+------+------.
313 313 * | | | | | | | |
314 314 * | | |------| |------| | |
315/* Keymap 4: Hungarian Layer 315 * | | | | | BASE | | |
316 * 316 * `--------------------' `--------------------'
317 * ,-----------------------------------------------------. ,-----------------------------------------------------. 317 */
318 * | | | | | | | | | | | | | | | | 318
319 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| 319[HUN] = KEYMAP(
320 * | | | Ő | | Ű | | | | | | | | | | | 320// left hand
321 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| 321 KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
322 * | | Á | Ó | É | Ú | Í |------| |------| | | | | | | 322,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO
323 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| 323,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II)
324 * | | | Ö | | Ü | | | | | | | | | | | 324,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,KC_NO ,KC_NO
325 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' 325,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
326 * | | | | | | | | | | | | 326
327 * `----------------------------------' `----------------------------------' 327 ,KC_NO ,KC_NO
328 * ,-------------. ,-------------. 328 ,KC_NO
329 * | | | | | | 329 ,KC_NO ,KC_TRNS ,KC_TRNS
330 * ,------|------|------| |------+------+------. 330
331 * | | | | | | | | 331 // right hand
332 * | | |------| |------| | | 332 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
333 * | | | | | BASE | | | 333 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
334 * `--------------------' `--------------------' 334 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
335 */ 335 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
336 336 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
337[HUN] = KEYMAP( 337
338// left hand 338 ,KC_NO ,KC_NO
339 KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 339 ,KC_NO
340,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO 340 ,F(F_BSE),KC_TRNS ,KC_TRNS
341,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II) 341 ),
342,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,KC_NO ,KC_NO 342
343,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 343/* Keymap 5: Navigation & Media layer
344 344 *
345 ,KC_NO ,KC_NO 345 * ,-----------------------------------------------------. ,-----------------------------------------------------.
346 ,KC_NO 346 * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | |
347 ,KC_NO ,KC_TRNS ,KC_TRNS 347 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
348 348 * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen|
349 // right hand 349 * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------|
350 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 350 * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | |
351 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 351 * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------|
352 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 352 * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop |
353 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 353 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
354 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 354 * | | | | | | | | | | | |
355 355 * `----------------------------------' `----------------------------------'
356 ,KC_NO ,KC_NO 356 * ,-------------. ,-------------.
357 ,KC_NO 357 * | Mute | VlUp | | BASE | MClk |
358 ,F(F_BSE),KC_TRNS ,KC_TRNS 358 * ,------|------|------| |------+------+------.
359 ), 359 * | | | VlDn | | Prev |Left |Right |
360 360 * | SPC | Enter|------| |------| Click| Click|
361/* Keymap 5: Navigation & Media layer 361 * | | | ESC | | Next | | |
362 * 362 * `--------------------' `--------------------'
363 * ,-----------------------------------------------------. ,-----------------------------------------------------. 363 */
364 * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | | 364[NMDIA] = KEYMAP(
365 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| 365// left hand
366 * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen| 366 KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L)
367 * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------| 367,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO
368 * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | | 368,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO
369 * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------| 369,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO
370 * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop | 370,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
371 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' 371 ,KC_MUTE ,KC_VOLU
372 * | | | | | | | | | | | | 372 ,KC_VOLD
373 * `----------------------------------' `----------------------------------' 373 ,KC_SPC,KC_ENTER,M(A_ESC)
374 * ,-------------. ,-------------. 374
375 * | Mute | VlUp | | BASE | MClk | 375 // right hand
376 * ,------|------|------| |------+------+------. 376 ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
377 * | | | VlDn | | Prev |Left |Right | 377 ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR
378 * | SPC | Enter|------| |------| Click| Click| 378 ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO
379 * | | | ESC | | Next | | | 379 ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP
380 * `--------------------' `--------------------' 380 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
381 */ 381
382[NMDIA] = KEYMAP( 382 ,KC_TRNS ,KC_MS_BTN3
383// left hand 383 ,KC_MPRV
384 KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L) 384 ,KC_MNXT ,KC_BTN1 ,KC_BTN2
385,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO 385 ),
386,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO 386
387,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO 387/* Keymap 6: Steno for Plover
388,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 388 *
389 ,KC_MUTE ,KC_VOLU 389 * ,--------------------------------------------------. ,--------------------------------------------------.
390 ,KC_VOLD 390 * | | | | | | | BASE | | | | | | | | |
391 ,KC_SPC,KC_ENTER,M(A_ESC) 391 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
392 392 * | | # | # | # | # | # | # | | # | # | # | # | # | # | # |
393 // right hand 393 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
394 ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 394 * | | | T | P | H | |------| |------| | F | P | L | T | D |
395 ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR 395 * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------|
396 ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO 396 * | | | K | W | R | | | | | | R | B | G | S | Z |
397 ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP 397 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
398 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 398 * | | | | | | | | | | | |
399 399 * `----------------------------------' `----------------------------------'
400 ,KC_TRNS ,KC_MS_BTN3 400 * ,-------------. ,-------------.
401 ,KC_MPRV 401 * | | | | | |
402 ,KC_MNXT ,KC_BTN1 ,KC_BTN2 402 * ,------|------|------| |------+------+------.
403 ), 403 * | | | | | | | |
404 404 * | A | O |------| |------| E | U |
405/* Keymap 6: One-handed, left side 405 * | | | | | | | |
406 * 406 * `--------------------' `--------------------'
407 * ,-----------------------------------------------------. 407 */
408 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE| 408
409 * |-----------+------+------+------+------+-------------| 409[PLVR] = KEYMAP(
410 * | Tab | ' | , | . | P | Y | [ | 410// left hand
411 * |-----------+------+------+------+------+------| | 411KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR),
412 * | - | A | O | E | U | I |------| 412KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
413 * |-----------+------+------+------+------+------| ( | 413KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
414 * | Play/Pause| ; | Q | J | K | X | | 414KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
415 * `-----------+------+------+------+------+-------------' 415KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
416 * | Home | End | Down | Up | ESC | 416 KC_NO, KC_NO,
417 * `-----------------------------------' 417 KC_NO,
418 * ,-------------. 418 PV_A, PV_O, KC_NO,
419 * | LAlt | GUI | 419
420 * ,------|------|------| 420 // right hand
421 * |BackSp|LShift| Ctrl | 421 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
422 * | | |------| 422 PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
423 * |Space |Enter |OTHER | 423 PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
424 * `--------------------' 424 PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
425 */ 425 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
426[OHLFT] = KEYMAP( 426 KC_NO, KC_NO,
427// left hand 427 KC_NO,
428 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,M(OH_BASE) 428 KC_NO,PV_E, PV_U
429,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC 429 ),
430,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I 430
431,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN 431};
432,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_ESC) 432
433 433const uint16_t PROGMEM fn_actions[] = {
434 ,KC_TRNS ,KC_TRNS 434 [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS)
435 ,KC_TRNS 435 ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS)
436 ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT) 436 ,[F_GUI] = ACTION_MACRO_TAP(A_GUI)
437 437 ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT)
438 // right hand 438 ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT)
439 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 439 ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
440 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 440};
441 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 441
442 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 442void toggle_steno(int pressed)
443 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 443{
444 444 uint8_t layer = biton32(layer_state);
445 ,KC_NO ,KC_NO 445
446 ,KC_NO 446 if (pressed) {
447 ,KC_NO ,KC_NO ,KC_NO 447 if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR);
448 ), 448
449 449 register_code(PV_LP);
450/* Keymap 7: One-handed, right side 450 register_code(PV_LH);
451 * 451 register_code(PV_LR);
452 * ,-----------------------------------------------------. 452 register_code(PV_O);
453 * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE| 453 register_code(PV_RL);
454 * |-----------+------+------+------+------+-------------| 454 register_code(PV_RG);
455 * | / | L | R | C | G | F | ] | 455 } else {
456 * |-----------+------+------+------+------+------| | 456 unregister_code(PV_LP);
457 * | \ | S | N | T | H | D |------| 457 unregister_code(PV_LH);
458 * |-----------+------+------+------+------+------| ) | 458 unregister_code(PV_LR);
459 * | Stop | Z | V | W | M | B | | 459 unregister_code(PV_O);
460 * `-----------+------+------+------+------+-------------' 460 unregister_code(PV_RL);
461 * | PgDn | PgUp | Right| Left | ESC | 461 unregister_code(PV_RG);
462 * `-----------------------------------' 462 }
463 * ,-------------. 463}
464 * | LAlt | GUI | 464
465 * ,------|------|------| 465macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
466 * |BackSp|LShift| Ctrl | 466{
467 * | | |------| 467 uint8_t need_shift = 0;
468 * |Space |Enter |OTHER | 468 uint8_t hold_shift = 0;
469 * `--------------------' 469
470 */ 470 if (!record->event.pressed)
471[OHRGT] = KEYMAP( 471 return MACRO_NONE;
472// left hand 472
473 M(KF_11) ,M(KF_10) ,M(KF_9) ,M(KF_8) ,M(KF_7) ,M(KF_6) ,M(OH_BASE) 473 layer_off (HUN);
474,KC_SLSH ,KC_L ,KC_R ,KC_C ,KC_G ,KC_F ,KC_RBRC 474
475,KC_BSLS ,KC_S ,KC_N ,KC_T ,KC_H ,KC_D 475 if (keyboard_report->mods & MOD_BIT (KC_LSFT)) {
476,KC_MSTP ,KC_Z ,KC_V ,KC_W ,KC_M ,KC_B ,KC_RPRN 476 hold_shift = 1;
477,KC_PGDN ,KC_PGUP ,KC_RGHT ,KC_LEFT ,M(A_ESC) 477 need_shift = 1;
478 478 unregister_code (KC_LSFT);
479 ,KC_TRNS ,KC_TRNS 479 }
480 ,KC_TRNS 480 if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) {
481 ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT) 481 need_shift = 1;
482 482 hold_shift = 0;
483 // right hand 483 unregister_code (KC_LSFT);
484 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 484 }
485 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 485
486 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 486 clear_oneshot_mods ();
487 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 487
488 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO 488 register_code (KC_RALT);
489 489 unregister_code (KC_RALT);
490 ,KC_NO ,KC_NO 490 if (accent == (KC_DQT)) {
491 ,KC_NO 491 register_code (KC_RSFT);
492 ,KC_NO ,KC_NO ,KC_NO 492 }
493 ), 493 register_code (accent);
494 494 unregister_code (accent);
495/* Keymap 8: Steno for Plover 495 if (need_shift && accent != (KC_DQT)) {
496 * 496 register_code (KC_RSFT);
497 * ,--------------------------------------------------. ,--------------------------------------------------. 497 } else if (accent == (KC_DQT) && !need_shift) {
498 * | | | | | | | BASE | | | | | | | | | 498 unregister_code (KC_RSFT);
499 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| 499 }
500 * | | # | # | # | # | # | # | | # | # | # | # | # | # | # | 500 register_code (hun_char);
501 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 501 unregister_code (hun_char);
502 * | | | T | P | H | |------| |------| | F | P | L | T | D | 502 if (need_shift || accent == (KC_DQT))
503 * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------| 503 unregister_code (KC_RSFT);
504 * | | | K | W | R | | | | | | R | B | G | S | Z | 504 if (hold_shift)
505 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 505 register_code (KC_LSFT);
506 * | | | | | | | | | | | | 506
507 * `----------------------------------' `----------------------------------' 507 return MACRO_NONE;
508 * ,-------------. ,-------------. 508}
509 * | | | | | | 509
510 * ,------|------|------| |------+------+------. 510void ang_handle_kf (keyrecord_t *record, uint8_t id)
511 * | | | | | | | | 511{
512 * | A | O |------| |------| E | U | 512 uint8_t code = id - KF_1;
513 * | | | | | | | | 513
514 * `--------------------' `--------------------' 514 if (record->event.pressed) {
515 */ 515 kf_timers[code] = timer_read ();
516 516 } else {
517[PLVR] = KEYMAP( 517 uint8_t kc;
518// left hand 518
519KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR), 519 if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) {
520KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, 520 // Long press
521KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, 521 kc = KC_F1 + code;
522KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, 522 } else {
523KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 523 if (id == KF_11)
524 KC_NO, KC_NO, 524 kc = KC_EQL;
525 KC_NO, 525 else
526 PV_A, PV_O, KC_NO, 526 kc = KC_1 + code;
527 527 }
528 // right hand 528
529 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 529 register_code (kc);
530 PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, 530 unregister_code (kc);
531 PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD, 531 }
532 PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ, 532}
533 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 533
534 KC_NO, KC_NO, 534const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
535 KC_NO, 535{
536 KC_NO,PV_E, PV_U 536 switch(id) {
537 ), 537 case A_ESC:
538 538 if (record->event.pressed) {
539}; 539 if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) {
540 540 clear_oneshot_mods ();
541const uint16_t PROGMEM fn_actions[] = { 541 } else {
542 [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS) 542 register_code (KC_ESC);
543 ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS) 543 }
544 ,[F_GUI] = ACTION_MACRO_TAP(A_GUI) 544 layer_off (HUN);
545 ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT) 545 } else {
546 ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT) 546 unregister_code (KC_ESC);
547 ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL) 547 }
548}; 548 break;
549 549
550void toggle_steno(int pressed) 550 case A_MPN:
551{ 551 if (record->event.pressed) {
552 uint8_t layer = biton32(layer_state); 552 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
553 553 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
554 if (pressed) { 554 int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out());
555 if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR); 555
556 556 if (oneshot)
557 register_code(PV_LP); 557 clear_oneshot_mods ();
558 register_code(PV_LH); 558 unregister_code (KC_LSFT);
559 register_code(PV_LR); 559
560 register_code(PV_O); 560 register_code (KC_MPRV);
561 register_code(PV_RL); 561 unregister_code (KC_MPRV);
562 register_code(PV_RG); 562
563 } else { 563 if (!oneshot)
564 unregister_code(PV_LP); 564 register_code (KC_LSFT);
565 unregister_code(PV_LH); 565 } else {
566 unregister_code(PV_LR); 566 return MACRO (T(MNXT), END);
567 unregister_code(PV_O); 567 }
568 unregister_code(PV_RL); 568 }
569 unregister_code(PV_RG); 569 break;
570 } 570
571} 571 /* Hungarian layer */
572 572 case HU_AA:
573macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char) 573 return ang_do_hun (record, KC_QUOT, KC_A);
574{ 574 case HU_OO:
575 uint8_t need_shift = 0; 575 return ang_do_hun (record, KC_QUOT, KC_O);
576 uint8_t hold_shift = 0; 576 case HU_EE:
577 577 return ang_do_hun (record, KC_QUOT, KC_E);
578 if (!record->event.pressed) 578 case HU_UU:
579 return MACRO_NONE; 579 return ang_do_hun (record, KC_QUOT, KC_U);
580 580 case HU_II:
581 layer_off (HUN); 581 return ang_do_hun (record, KC_QUOT, KC_I);
582 582 case HU_OE:
583 if (keyboard_report->mods & MOD_BIT (KC_LSFT)) { 583 return ang_do_hun (record, KC_DQT, KC_O);
584 hold_shift = 1; 584 case HU_UE:
585 need_shift = 1; 585 return ang_do_hun (record, KC_DQT, KC_U);
586 unregister_code (KC_LSFT); 586 case HU_OEE:
587 } 587 return ang_do_hun (record, KC_EQL, KC_O);
588 if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) { 588 case HU_UEE:
589 need_shift = 1; 589 return ang_do_hun (record, KC_EQL, KC_U);
590 hold_shift = 0; 590
591 unregister_code (KC_LSFT); 591 /* Mouse movement */
592 } 592 case A_MUL:
593 593 if (record->event.pressed) {
594 clear_oneshot_mods (); 594 mousekey_on(KC_MS_UP);
595 595 mousekey_on(KC_MS_LEFT);
596 register_code (KC_RALT); 596 } else {
597 unregister_code (KC_RALT); 597 mousekey_off(KC_MS_UP);
598 if (accent == (KC_DQT)) { 598 mousekey_off(KC_MS_LEFT);
599 register_code (KC_RSFT); 599 }
600 } 600 mousekey_send();
601 register_code (accent); 601 break;
602 unregister_code (accent); 602
603 if (need_shift && accent != (KC_DQT)) { 603 case A_MUR:
604 register_code (KC_RSFT); 604 if (record->event.pressed) {
605 } else if (accent == (KC_DQT) && !need_shift) { 605 mousekey_on(KC_MS_UP);
606 unregister_code (KC_RSFT); 606 mousekey_on(KC_MS_RIGHT);
607 } 607 } else {
608 register_code (hun_char); 608 mousekey_off(KC_MS_UP);
609 unregister_code (hun_char); 609 mousekey_off(KC_MS_RIGHT);
610 if (need_shift || accent == (KC_DQT)) 610 }
611 unregister_code (KC_RSFT); 611 mousekey_send();
612 if (hold_shift) 612 break;
613 register_code (KC_LSFT); 613
614 614 case A_MDL:
615 return MACRO_NONE; 615 if (record->event.pressed) {
616} 616 mousekey_on(KC_MS_DOWN);
617 617 mousekey_on(KC_MS_LEFT);
618void ang_handle_kf (keyrecord_t *record, uint8_t id) 618 } else {
619{ 619 mousekey_off(KC_MS_DOWN);
620 uint8_t code = id - KF_1; 620 mousekey_off(KC_MS_LEFT);
621 621 }
622 if (record->event.pressed) { 622 mousekey_send();
623 kf_timers[code] = timer_read (); 623 break;
624 } else { 624
625 uint8_t kc; 625 case A_MDR:
626 626 if (record->event.pressed) {
627 if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) { 627 mousekey_on(KC_MS_DOWN);
628 // Long press 628 mousekey_on(KC_MS_RIGHT);
629 kc = KC_F1 + code; 629 } else {
630 } else { 630 mousekey_off(KC_MS_DOWN);
631 if (id == KF_11) 631 mousekey_off(KC_MS_RIGHT);
632 kc = KC_EQL; 632 }
633 else 633 mousekey_send();
634 kc = KC_1 + code; 634 break;
635 } 635
636 636 /* Plover base */
637 register_code (kc); 637 case A_PLVR:
638 unregister_code (kc); 638 toggle_steno(record->event.pressed);
639 } 639 break;
640} 640
641 641 /* GUI & AppSel */
642const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) 642 case A_GUI:
643{ 643 if (record->event.pressed) {
644 switch(id) { 644 register_code (KC_LGUI);
645 case A_ESC: 645 if (record->tap.count && !record->tap.interrupted) {
646 if (record->event.pressed) { 646 if (record->tap.count >= 2) {
647 if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) { 647 register_code (KC_W);
648 clear_oneshot_mods (); 648 layer_on (APPSEL);
649 } else { 649 set_oneshot_layer (APPSEL, ONESHOT_START);
650 register_code (KC_ESC); 650 }
651 } 651 } else {
652 layer_off (HUN); 652 record->tap.count = 0;
653 } else { 653 }
654 unregister_code (KC_ESC); 654 gui_timer = 0;
655 } 655 } else {
656 break; 656 if (record->tap.count >= 2)
657 657 {
658 case A_MPN: 658 unregister_code (KC_W);
659 if (record->event.pressed) { 659 clear_oneshot_layer_state (ONESHOT_PRESSED);
660 if (keyboard_report->mods & MOD_BIT(KC_LSFT) || 660 }
661 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { 661 gui_timer = timer_read ();
662 int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out()); 662 }
663 663 break;
664 if (oneshot) 664
665 clear_oneshot_mods (); 665 case APP_SLK:
666 unregister_code (KC_LSFT); 666 return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END);
667 667
668 register_code (KC_MPRV); 668 case APP_EMCS:
669 unregister_code (KC_MPRV); 669 return MACRODOWN(T(G), T(N), T(U), T(SPC), T(E), T(M), T(A), T(C), T(S), T(SPC), T(2), T(4), T(ENT), END);
670 670
671 if (!oneshot) 671 case APP_TERM:
672 register_code (KC_LSFT); 672 return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END);
673 } else { 673
674 return MACRO (T(MNXT), END); 674 case APP_CHRM:
675 } 675 return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END);
676 } 676
677 break; 677 case APP_MSIC:
678 678 return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END);
679 /* Hungarian layer */ 679
680 case HU_AA: 680 /* Function keys */
681 return ang_do_hun (record, KC_QUOT, KC_A); 681 case KF_1 ... KF_11:
682 case HU_OO: 682 ang_handle_kf (record, id);
683 return ang_do_hun (record, KC_QUOT, KC_O); 683 break;
684 case HU_EE: 684 }
685 return ang_do_hun (record, KC_QUOT, KC_E); 685
686 case HU_UU: 686 return MACRO_NONE;
687 return ang_do_hun (record, KC_QUOT, KC_U); 687};
688 case HU_II: 688
689 return ang_do_hun (record, KC_QUOT, KC_I); 689uint8_t is_adore = 0;
690 case HU_OE: 690
691 return ang_do_hun (record, KC_DQT, KC_O); 691// Runs just one time when the keyboard initializes.
692 case HU_UE: 692void matrix_init_user(void) {
693 return ang_do_hun (record, KC_DQT, KC_U); 693 uint8_t dl;
694 case HU_OEE: 694
695 return ang_do_hun (record, KC_EQL, KC_O); 695 ergodox_led_all_on();
696 case HU_UEE: 696 for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
697 return ang_do_hun (record, KC_EQL, KC_U); 697 ergodox_led_all_set (i);
698 698 wait_ms (5);
699 /* Mouse movement */ 699 }
700 case A_MUL: 700 wait_ms(1000);
701 if (record->event.pressed) { 701 for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
702 mousekey_on(KC_MS_UP); 702 ergodox_led_all_set (i);
703 mousekey_on(KC_MS_LEFT); 703 wait_ms (10);
704 } else { 704 }
705 mousekey_off(KC_MS_UP); 705 ergodox_led_all_off();
706 mousekey_off(KC_MS_LEFT); 706
707 } 707 if (!eeconfig_is_enabled())
708 mousekey_send(); 708 eeconfig_init();
709 break; 709 dl = eeconfig_read_default_layer ();
710 710 if (dl == (1UL << ADORE)) {
711 case A_MUR: 711 is_adore = 1;
712 if (record->event.pressed) { 712#if ADORE_AUTOLOG
713 mousekey_on(KC_MS_UP); 713 log_enable = true;
714 mousekey_on(KC_MS_RIGHT); 714#endif
715 } else { 715 }
716 mousekey_off(KC_MS_UP); 716};
717 mousekey_off(KC_MS_RIGHT); 717
718 } 718LEADER_EXTERNS();
719 mousekey_send(); 719
720 break; 720void ang_do_unicode (void) {
721 721 register_code (KC_RCTL);
722 case A_MDL: 722 register_code (KC_RSFT);
723 if (record->event.pressed) { 723 register_code (KC_U);
724 mousekey_on(KC_MS_DOWN); 724 unregister_code (KC_U);
725 mousekey_on(KC_MS_LEFT); 725 unregister_code (KC_RSFT);
726 } else { 726 unregister_code (KC_RCTL);
727 mousekey_off(KC_MS_DOWN); 727 wait_ms (100);
728 mousekey_off(KC_MS_LEFT); 728}
729 } 729
730 mousekey_send(); 730void ang_tap (uint16_t codes[]) {
731 break; 731 for (int i = 0; codes[i] != 0; i++) {
732 732 register_code (codes[i]);
733 case A_MDR: 733 unregister_code (codes[i]);
734 if (record->event.pressed) { 734 wait_ms (50);
735 mousekey_on(KC_MS_DOWN); 735 }
736 mousekey_on(KC_MS_RIGHT); 736}
737 } else { 737
738 mousekey_off(KC_MS_DOWN); 738#define TAP_ONCE(code) \
739 mousekey_off(KC_MS_RIGHT); 739 register_code (code); \
740 } 740 unregister_code (code)
741 mousekey_send(); 741
742 break; 742void ang_tap_dance_bp_finished (qk_tap_dance_state_t *state, void *user_data) {
743 743 bool left, parens;
744 /* Plover base */ 744
745 case A_PLVR: 745 if (state->count > 2) {
746 toggle_steno(record->event.pressed); 746 state->count = 0;
747 break; 747 return;
748 748 }
749 /* GUI & AppSel */ 749
750 case A_GUI: 750 if (state->keycode == TD(CT_LBP))
751 if (record->event.pressed) { 751 left = true;
752 register_code (KC_LGUI); 752 else
753 if (record->tap.count && !record->tap.interrupted) { 753 left = false;
754 if (record->tap.count >= 2) { 754
755 register_code (KC_W); 755 if (state->count == 1)
756 layer_on (APPSEL); 756 parens = false;
757 set_oneshot_layer (APPSEL, ONESHOT_START); 757 else
758 } 758 parens = true;
759 } else { 759
760 record->tap.count = 0; 760 if (parens) {
761 } 761 register_code (KC_RSFT);
762 gui_timer = 0; 762 if (left) {
763 } else { 763 TAP_ONCE(KC_9);
764 if (record->tap.count >= 2) 764 } else {
765 { 765 TAP_ONCE(KC_0);
766 unregister_code (KC_W); 766 }
767 clear_oneshot_layer_state (ONESHOT_PRESSED); 767 unregister_code (KC_RSFT);
768 } 768 } else {
769 gui_timer = timer_read (); 769 if (left) {
770 } 770 TAP_ONCE (KC_LBRC);
771 break; 771 } else {
772 772 TAP_ONCE (KC_RBRC);
773 case APP_SLK: 773 }
774 return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END); 774 }
775 775}
776 case APP_EMCS: 776
777 return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END); 777void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) {
778 778 if (state->count == 1) {
779 case APP_TERM: 779 register_code (KC_RSFT);
780 return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END); 780 register_code (KC_SCLN);
781 781 } else if (state->count == 2) {
782 case APP_CHRM: 782 register_code (KC_SCLN);
783 return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END); 783 }
784 784}
785 case APP_MSIC: 785
786 return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END); 786void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) {
787 787 if (state->count == 1) {
788 /* Function keys */ 788 unregister_code (KC_SCLN);
789 case KF_1 ... KF_11: 789 unregister_code (KC_RSFT);
790 ang_handle_kf (record, id); 790 } else if (state->count == 2) {
791 break; 791 unregister_code (KC_SCLN);
792 792 }
793 /* 1HAND layout */ 793}
794 case OH_BASE: 794
795 if (record->event.pressed) { 795void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) {
796 oh_base_timer = timer_read (); 796 if (state->count == 1) {
797 } else { 797 register_code (KC_MINS);
798 if (timer_elapsed (oh_base_timer) > TAPPING_TERM) { 798 } else if (state->count == 2) {
799 layer_clear (); 799 register_code (KC_RSFT);
800 } else { 800 register_code (KC_MINS);
801 return MACRO (T(APP), END); 801 }
802 } 802}
803 } 803
804 break; 804void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) {
805 805 if (state->count == 1) {
806 case OH_BSSPC: 806 unregister_code (KC_MINS);
807 if (record->event.pressed) { 807 } else if (state->count == 2) {
808 oh_bsspc_timer = timer_read (); 808 unregister_code (KC_RSFT);
809 } else { 809 unregister_code (KC_MINS);
810 if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) { 810 }
811 return MACRO (T(BSPC), END); 811}
812 } else { 812
813 return MACRO (T(SPC), END); 813typedef struct {
814 } 814 bool layer_toggle;
815 } 815 bool sticky;
816 break; 816 bool finished_once;
817 817} td_ta_state_t;
818 case OH_ENTSFT: 818
819 if (record->event.pressed) { 819void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) {
820 oh_entsft_timer = timer_read (); 820 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
821 } else { 821
822 if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) { 822 if (td_ta->finished_once) {
823 if (keyboard_report->mods & MOD_BIT(KC_LSFT)) 823 return;
824 unregister_code (KC_LSFT); 824 }
825 else 825
826 register_code (KC_LSFT); 826 if (td_ta->sticky) {
827 } else { 827 td_ta->sticky = false;
828 return MACRO (T(ENT), END); 828 td_ta->layer_toggle = false;
829 } 829 layer_off (ARRW);
830 } 830 return;
831 break; 831 }
832 832
833 case OH_LEFT: 833 td_ta->finished_once = true;
834 if (record->event.pressed) { 834 if (state->count == 1 && !state->pressed) {
835 layer_move (OHLFT); 835 register_code (KC_TAB);
836 oh_left_blink = 1; 836 td_ta->sticky = false;
837 oh_left_blink_timer = timer_read (); 837 td_ta->layer_toggle = false;
838 ergodox_right_led_1_on (); 838 } else {
839 } 839 td_ta->layer_toggle = true;
840 break; 840 layer_on (ARRW);
841 841 td_ta->sticky = (state->count == 2);
842 case OH_RIGHT: 842 }
843 if (record->event.pressed) { 843}
844 layer_move (OHRGT); 844
845 oh_right_blink = 1; 845void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) {
846 oh_right_blink_timer = timer_read (); 846 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
847 ergodox_right_led_3_on (); 847
848 } 848 if (!td_ta->layer_toggle)
849 break; 849 unregister_code (KC_TAB);
850 } 850 if (!td_ta->sticky)
851 return MACRO_NONE; 851 layer_off (ARRW);
852}; 852
853 853 td_ta->finished_once = false;
854uint8_t is_adore = 0; 854}
855 855
856// Runs just one time when the keyboard initializes. 856const qk_tap_dance_action_t tap_dance_actions[] = {
857void matrix_init_user(void) { 857 [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset)
858 uint8_t dl; 858 ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset)
859 859 ,[CT_TA] = {
860 ergodox_led_all_on(); 860 .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset },
861 for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) { 861 .user_data = (void *)&((td_ta_state_t) { false, false, false })
862 ergodox_led_all_set (i); 862 }
863 wait_ms (5); 863 ,[CT_LBP] = ACTION_TAP_DANCE_FN (ang_tap_dance_bp_finished)
864 } 864 ,[CT_RBP] = ACTION_TAP_DANCE_FN (ang_tap_dance_bp_finished)
865 wait_ms(1000); 865};
866 for (int i = LED_BRIGHTNESS_LO; i > 0; i--) { 866
867 ergodox_led_all_set (i); 867static uint16_t uni[32];
868 wait_ms (10); 868static uint8_t unicnt;
869 } 869static bool unimagic = false;
870 ergodox_led_all_off(); 870
871 871// Runs constantly in the background, in a loop.
872 if (!eeconfig_is_enabled()) 872void matrix_scan_user(void) {
873 eeconfig_init(); 873 uint8_t layer = biton32(layer_state);
874 dl = eeconfig_read_default_layer (); 874
875 if (dl == (1UL << ADORE)) 875 if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM)
876 is_adore = 1; 876 unregister_code (KC_LGUI);
877}; 877
878 878 if (layer == HUN) {
879LEADER_EXTERNS(); 879 ergodox_right_led_2_on();
880 880 ergodox_right_led_3_on();
881void ang_do_unicode (void) { 881 } else if (layer == NMDIA) {
882 register_code (KC_RCTL); 882 ergodox_right_led_1_on();
883 register_code (KC_RSFT); 883 ergodox_right_led_2_on();
884 register_code (KC_U); 884 } else if (layer == PLVR) {
885 unregister_code (KC_U); 885 ergodox_right_led_1_on ();
886 unregister_code (KC_RSFT); 886 ergodox_right_led_2_on ();
887 unregister_code (KC_RCTL); 887 ergodox_right_led_3_on ();
888 wait_ms (100); 888 } else if (layer == ADORE) {
889} 889 ergodox_right_led_1_on ();
890 890 ergodox_right_led_2_on ();
891void ang_tap (uint16_t codes[]) { 891 ergodox_right_led_3_on ();
892 for (int i = 0; codes[i] != 0; i++) { 892
893 register_code (codes[i]); 893 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
894 unregister_code (codes[i]); 894 }
895 wait_ms (50); 895
896 } 896 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
897} 897 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
898 898 ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
899#define TAP_ONCE(code) \ 899 ergodox_right_led_1_on ();
900 register_code (code); \ 900 } else {
901 unregister_code (code) 901 ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
902 902 if (layer != NMDIA && layer != PLVR && layer != ADORE)
903void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) { 903 ergodox_right_led_1_off ();
904 if (state->count == 1) { 904 }
905 register_code (KC_RSFT); 905
906 register_code (KC_SCLN); 906 if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
907 } else if (state->count == 2) { 907 ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) {
908 register_code (KC_SCLN); 908 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
909 } 909 ergodox_right_led_2_on ();
910} 910 } else {
911 911 ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
912void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) { 912 if (layer != HUN && layer != NMDIA && layer != PLVR && layer != ADORE)
913 if (state->count == 1) { 913 ergodox_right_led_2_off ();
914 unregister_code (KC_SCLN); 914 }
915 unregister_code (KC_RSFT); 915
916 } else if (state->count == 2) { 916 if (keyboard_report->mods & MOD_BIT(KC_LCTRL) ||
917 unregister_code (KC_SCLN); 917 ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) {
918 } 918 ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
919} 919 ergodox_right_led_3_on ();
920 920 } else {
921void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) { 921 ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
922 if (state->count == 1) { 922 if (layer != HUN && layer != PLVR && layer != ADORE)
923 register_code (KC_MINS); 923 ergodox_right_led_3_off ();
924 } else if (state->count == 2) { 924 }
925 register_code (KC_RSFT); 925
926 register_code (KC_MINS); 926 LEADER_DICTIONARY() {
927 } 927 leading = false;
928} 928 leader_end ();
929 929
930void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) { 930#if KEYLOGGER_ENABLE
931 if (state->count == 1) { 931 SEQ_ONE_KEY (KC_D) {
932 unregister_code (KC_MINS); 932 ergodox_led_all_on();
933 } else if (state->count == 2) { 933 wait_ms(100);
934 unregister_code (KC_RSFT); 934 ergodox_led_all_off();
935 unregister_code (KC_MINS); 935 log_enable = !log_enable;
936 } 936 }
937} 937#endif
938 938
939typedef struct { 939 SEQ_ONE_KEY (KC_T) {
940 bool layer_toggle; 940 time_travel = !time_travel;
941 bool sticky; 941 }
942 bool finished_once; 942
943} td_ta_state_t; 943 SEQ_ONE_KEY (KC_U) {
944 944 ang_do_unicode ();
945void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) { 945 }
946 td_ta_state_t *td_ta = (td_ta_state_t *) user_data; 946
947 947 SEQ_TWO_KEYS (KC_LEAD, KC_U) {
948 if (td_ta->finished_once) { 948 unicnt = 0;
949 return; 949 unimagic = true;
950 } 950 register_code(KC_RSFT);
951 951 TAP_ONCE(KC_U);
952 if (td_ta->sticky) { 952 unregister_code(KC_RSFT);
953 td_ta->sticky = false; 953 }
954 td_ta->layer_toggle = false; 954
955 layer_off (ARRW); 955 SEQ_ONE_KEY (KC_V) {
956 return; 956 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")");
957 } 957 }
958 958
959 td_ta->finished_once = true; 959 SEQ_ONE_KEY (KC_L) {
960 if (state->count == 1 && !state->pressed) { 960 /* λ */
961 register_code (KC_TAB); 961 ang_do_unicode ();
962 td_ta->sticky = false; 962
963 td_ta->layer_toggle = false; 963 uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0};
964 } else { 964 ang_tap (codes);
965 td_ta->layer_toggle = true; 965 }
966 layer_on (ARRW); 966
967 td_ta->sticky = (state->count == 2); 967 SEQ_ONE_KEY (KC_Y) {
968 } 968 uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0};
969} 969 ang_tap (codes);
970 970 }
971void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) { 971
972 td_ta_state_t *td_ta = (td_ta_state_t *) user_data; 972 SEQ_ONE_KEY (KC_S) {
973 973 ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
974 if (!td_ta->layer_toggle) 974 TAP_ONCE (KC_BSLS);
975 unregister_code (KC_TAB); 975 register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
976 if (!td_ta->sticky) 976 ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC);
977 layer_off (ARRW); 977 register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
978 978 TAP_ONCE (KC_SLSH);
979 td_ta->finished_once = false; 979 ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
980} 980 }
981 981
982const qk_tap_dance_action_t tap_dance_actions[] = { 982 SEQ_TWO_KEYS (KC_W, KC_M) {
983 [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset) 983 register_code (KC_LALT);
984 ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset) 984 register_code (KC_F2);
985 ,[CT_TA] = { 985 unregister_code (KC_F2);
986 .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset }, 986 unregister_code (KC_LALT);
987 .user_data = (void *)&((td_ta_state_t) { false, false, false }) 987
988 } 988 wait_ms (1000);
989}; 989
990 990 uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0};
991// Runs constantly in the background, in a loop. 991 ang_tap (codes);
992void matrix_scan_user(void) { 992 register_code (KC_LGUI);
993 uint8_t layer = biton32(layer_state); 993 register_code (KC_UP);
994 994 unregister_code (KC_UP);
995 if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM) 995 unregister_code (KC_LGUI);
996 unregister_code (KC_LGUI); 996 }
997 997
998 if (layer != OHLFT) 998 SEQ_ONE_KEY (KC_A) {
999 oh_left_blink = 0; 999 if (is_adore == 0) {
1000 if (layer != OHRGT) 1000 default_layer_and (0);
1001 oh_right_blink = 0; 1001 default_layer_or ((1UL << ADORE));
1002 1002 eeconfig_update_default_layer ((1UL << ADORE));
1003 if (layer == HUN) { 1003 is_adore = 1;
1004 ergodox_right_led_2_on(); 1004
1005 ergodox_right_led_3_on(); 1005 ergodox_led_all_off ();
1006 } else if (layer == NMDIA) { 1006 ergodox_right_led_3_on ();
1007 ergodox_right_led_1_on(); 1007 wait_ms (100);
1008 ergodox_right_led_2_on(); 1008 ergodox_right_led_2_on ();
1009 } else if (layer == PLVR) { 1009 wait_ms (100);
1010 ergodox_right_led_1_on (); 1010 ergodox_right_led_3_off ();
1011 ergodox_right_led_2_on (); 1011 ergodox_right_led_1_on ();
1012 ergodox_right_led_3_on (); 1012 wait_ms (100);
1013 } else if (layer == ADORE) { 1013 ergodox_right_led_2_off ();
1014 ergodox_right_led_1_on (); 1014 wait_ms (100);
1015 ergodox_right_led_2_on (); 1015 ergodox_right_led_1_off ();
1016 ergodox_right_led_3_on (); 1016#if ADORE_AUTOLOG
1017 1017 log_enable = true;
1018 ergodox_right_led_2_set (LED_BRIGHTNESS_HI); 1018#endif
1019 } 1019 } else {
1020 1020#if ADORE_AUTOLOG
1021 if (layer == OHLFT || layer == OHRGT) { 1021 log_enable = false;
1022 ergodox_right_led_2_on(); 1022#endif
1023 1023 is_adore = 0;
1024 if (oh_left_blink) { 1024 default_layer_and (0);
1025 if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) { 1025 default_layer_or (1UL << BASE);
1026 if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0) 1026 eeconfig_update_default_layer ((1UL << BASE));
1027 ergodox_right_led_1_off (); 1027
1028 } 1028 ergodox_led_all_off ();
1029 if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) { 1029 ergodox_right_led_1_on ();
1030 ergodox_right_led_1_on (); 1030 wait_ms (100);
1031 oh_left_blink_timer = timer_read (); 1031 ergodox_right_led_2_on ();
1032 } 1032 wait_ms (100);
1033 } 1033 ergodox_right_led_1_off ();
1034 1034 ergodox_right_led_3_on ();
1035 if (oh_right_blink) { 1035 wait_ms (100);
1036 if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) { 1036 ergodox_right_led_2_off ();
1037 if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0) 1037 wait_ms (100);
1038 ergodox_right_led_3_off (); 1038 ergodox_right_led_3_off ();
1039 } 1039 }
1040 if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) { 1040 }
1041 ergodox_right_led_3_on (); 1041 }
1042 oh_right_blink_timer = timer_read (); 1042}
1043 } 1043
1044 } 1044static uint16_t last4[4];
1045 } 1045
1046 1046bool is_uni_seq(char *seq) {
1047 if (keyboard_report->mods & MOD_BIT(KC_LSFT) || 1047 uint8_t i;
1048 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) { 1048
1049 ergodox_right_led_1_set (LED_BRIGHTNESS_HI); 1049 for (i = 0; seq[i]; i++) {
1050 ergodox_right_led_1_on (); 1050 uint16_t code;
1051 } else { 1051 if (('1' <= seq[i]) && (seq[i] <= '9'))
1052 ergodox_right_led_1_set (LED_BRIGHTNESS_LO); 1052 code = seq[i] - '1' + KC_1;
1053 if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) 1053 else if (seq[i] == '0')
1054 ergodox_right_led_1_off (); 1054 code = KC_0;
1055 } 1055 else
1056 1056 code = seq[i] - 'a' + KC_A;
1057 if (keyboard_report->mods & MOD_BIT(KC_LALT) || 1057
1058 ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) { 1058 if (i > unicnt)
1059 ergodox_right_led_2_set (LED_BRIGHTNESS_HI); 1059 return false;
1060 ergodox_right_led_2_on (); 1060 if (uni[i] != code)
1061 } else { 1061 return false;
1062 ergodox_right_led_2_set (LED_BRIGHTNESS_LO); 1062 }
1063 if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE) 1063
1064 ergodox_right_led_2_off (); 1064 if (uni[i] == KC_ENT || uni[i] == KC_SPC)
1065 } 1065 return true;
1066 1066
1067 if (keyboard_report->mods & MOD_BIT(KC_LCTRL) || 1067 return false;
1068 ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) { 1068}
1069 ergodox_right_led_3_set (LED_BRIGHTNESS_HI); 1069
1070 ergodox_right_led_3_on (); 1070uint16_t hex_to_keycode(uint8_t hex)
1071 } else { 1071{
1072 ergodox_right_led_3_set (LED_BRIGHTNESS_LO); 1072 if (hex == 0x0) {
1073 if (layer != OHRGT && layer != HUN && layer != PLVR && layer != ADORE) 1073 return KC_0;
1074 ergodox_right_led_3_off (); 1074 } else if (hex < 0xA) {
1075 } 1075 return KC_1 + (hex - 0x1);
1076 1076 } else {
1077 LEADER_DICTIONARY() { 1077 return KC_A + (hex - 0xA);
1078 leading = false; 1078 }
1079 leader_end (); 1079}
1080 1080
1081#if KEYLOGGER_ENABLE 1081void register_hex(uint16_t hex) {
1082 SEQ_ONE_KEY (KC_D) { 1082 bool leading_zeros = true;
1083 ergodox_led_all_on(); 1083
1084 wait_ms(100); 1084 for(int i = 3; i >= 0; i--) {
1085 ergodox_led_all_off(); 1085 uint8_t digit = ((hex >> (i*4)) & 0xF);
1086 log_enable = !log_enable; 1086 if (digit != 0)
1087 } 1087 leading_zeros = false;
1088#endif 1088 else if (leading_zeros)
1089 1089 continue;
1090 SEQ_ONE_KEY (KC_T) { 1090 register_code(hex_to_keycode(digit));
1091 time_travel = !time_travel; 1091 unregister_code(hex_to_keycode(digit));
1092 } 1092 wait_ms(10);
1093 1093 }
1094 SEQ_ONE_KEY (KC_U) { 1094}
1095 ang_do_unicode (); 1095
1096 } 1096typedef struct {
1097 1097 char *symbol;
1098 SEQ_ONE_KEY (KC_V) { 1098 uint16_t codes[4];
1099 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")"); 1099} qk_ucis_symbol_t;
1100 } 1100
1101 1101static qk_ucis_symbol_t ucis_symbol_table[] = {
1102 SEQ_ONE_KEY (KC_L) { 1102 {"poop", {0x1, 0xf4a9, 0}},
1103 /* λ */ 1103 {"rofl", {0x1, 0xf923, 0}},
1104 ang_do_unicode (); 1104 {"kiss", {0x1, 0xf619, 0}},
1105 1105 {"snowman", {0x2603, 0}},
1106 uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0}; 1106 {NULL, {}}
1107 ang_tap (codes); 1107};
1108 } 1108
1109 1109bool process_record_ucis (uint16_t keycode, keyrecord_t *record) {
1110 SEQ_ONE_KEY (KC_Y) { 1110 uint8_t i;
1111 uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0}; 1111
1112 ang_tap (codes); 1112 if (!unimagic)
1113 } 1113 return true;
1114 1114
1115 SEQ_ONE_KEY (KC_S) { 1115 if (!record->event.pressed)
1116 ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); 1116 return true;
1117 TAP_ONCE (KC_BSLS); 1117
1118 register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT); 1118 uni[unicnt] = keycode;
1119 ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC); 1119 unicnt++;
1120 register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT); 1120
1121 TAP_ONCE (KC_SLSH); 1121 if (keycode == KC_BSPC) {
1122 ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC); 1122 if (unicnt >= 2) {
1123 } 1123 unicnt-= 2;
1124 1124 return true;
1125 SEQ_TWO_KEYS (KC_W, KC_M) { 1125 } else {
1126 register_code (KC_LALT); 1126 unicnt--;
1127 register_code (KC_F2); 1127 return false;
1128 unregister_code (KC_F2); 1128 }
1129 unregister_code (KC_LALT); 1129 }
1130 1130
1131 wait_ms (1000); 1131 if (keycode == KC_ENT || keycode == KC_SPC) {
1132 1132 bool symbol_found = false;
1133 uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0}; 1133
1134 ang_tap (codes); 1134 for (i = unicnt; i > 0; i--) {
1135 register_code (KC_LGUI); 1135 register_code (KC_BSPC);
1136 register_code (KC_UP); 1136 unregister_code (KC_BSPC);
1137 unregister_code (KC_UP); 1137 wait_ms(10);
1138 unregister_code (KC_LGUI); 1138 }
1139 } 1139
1140 1140 ang_do_unicode();
1141 SEQ_ONE_KEY (KC_A) { 1141 wait_ms(10);
1142 if (is_adore == 0) { 1142 for (i = 0; ucis_symbol_table[i].symbol; i++) {
1143 default_layer_and (0); 1143 if (is_uni_seq (ucis_symbol_table[i].symbol)) {
1144 default_layer_or ((1UL << ADORE)); 1144 symbol_found = true;
1145 eeconfig_update_default_layer ((1UL << ADORE)); 1145 for (uint8_t j = 0; ucis_symbol_table[i].codes[j]; j++) {
1146 is_adore = 1; 1146 register_hex(ucis_symbol_table[i].codes[j]);
1147 1147 }
1148 ergodox_led_all_off (); 1148 break;
1149 ergodox_right_led_3_on (); 1149 }
1150 wait_ms (100); 1150 }
1151 ergodox_right_led_2_on (); 1151 if (!symbol_found) {
1152 wait_ms (100); 1152 for (i = 0; i < unicnt - 1; i++) {
1153 ergodox_right_led_3_off (); 1153 uint8_t code;
1154 ergodox_right_led_1_on (); 1154
1155 wait_ms (100); 1155 if (uni[i] > KF_1)
1156 ergodox_right_led_2_off (); 1156 code = uni[i] - KF_1 + KC_1;
1157 wait_ms (100); 1157 else
1158 ergodox_right_led_1_off (); 1158 code = uni[i];
1159 } else { 1159 TAP_ONCE(code);
1160 is_adore = 0; 1160 wait_ms (10);
1161 default_layer_and (0); 1161 }
1162 default_layer_or (1UL << BASE); 1162 }
1163 eeconfig_update_default_layer ((1UL << BASE)); 1163
1164 1164 unimagic = false;
1165 ergodox_led_all_off (); 1165 return true;
1166 ergodox_right_led_1_on (); 1166 }
1167 wait_ms (100); 1167 return true;
1168 ergodox_right_led_2_on (); 1168}
1169 wait_ms (100); 1169
1170 ergodox_right_led_1_off (); 1170bool process_record_user (uint16_t keycode, keyrecord_t *record) {
1171 ergodox_right_led_3_on (); 1171#if KEYLOGGER_ENABLE
1172 wait_ms (100); 1172 if (log_enable) {
1173 ergodox_right_led_2_off (); 1173 xprintf ("KL: col=%d, row=%d\n", record->event.key.col,
1174 wait_ms (100); 1174 record->event.key.row);
1175 ergodox_right_led_3_off (); 1175 }
1176 } 1176#endif
1177 } 1177
1178 } 1178 if (!process_record_ucis (keycode, record))
1179} 1179 return false;
1180 1180
1181static uint16_t last4[4]; 1181 if (time_travel && !record->event.pressed) {
1182 1182 uint8_t p;
1183bool process_record_user (uint16_t keycode, keyrecord_t *record) { 1183
1184#if KEYLOGGER_ENABLE 1184 // shift cache one to the left
1185 uint8_t layer = biton32(layer_state); 1185 for (p = 0; p < 3; p++) {
1186 1186 last4[p] = last4[p + 1];
1187 if (log_enable && layer == BASE) { 1187 }
1188 xprintf ("KL: col=%d, row=%d\n", record->event.key.col, 1188 last4[3] = keycode;
1189 record->event.key.row); 1189
1190 } 1190 if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) {
1191#endif 1191 uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0};
1192 1192 ang_tap (codes);
1193 if (time_travel && !record->event.pressed) { 1193 register_code (KC_RSFT);
1194 uint8_t p; 1194 register_code (KC_EQL);
1195 1195 unregister_code (KC_EQL);
1196 // shift cache one to the left 1196 unregister_code (KC_RSFT);
1197 for (p = 0; p < 3; p++) { 1197
1198 last4[p] = last4[p + 1]; 1198 uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0};
1199 } 1199 ang_tap (codes2);
1200 last4[3] = keycode; 1200
1201 1201 return false;
1202 if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) { 1202 }
1203 uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0}; 1203 }
1204 ang_tap (codes); 1204
1205 register_code (KC_RSFT); 1205 return true;
1206 register_code (KC_EQL); 1206}
1207 unregister_code (KC_EQL);
1208 unregister_code (KC_RSFT);
1209
1210 uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0};
1211 ang_tap (codes2);
1212
1213 return false;
1214 }
1215 }
1216
1217 return true;
1218}
diff --git a/keyboards/ergodox/keymaps/algernon/readme.md b/keyboards/ergodox/keymaps/algernon/readme.md
index 6fe177511..26dfddbe6 100644
--- a/keyboards/ergodox/keymaps/algernon/readme.md
+++ b/keyboards/ergodox/keymaps/algernon/readme.md
@@ -16,11 +16,12 @@ Some of the things in the layout only work when one uses Spacemacs and GNOME und
16 - [ADORE layer](#adore-layer) 16 - [ADORE layer](#adore-layer)
17 - [Hungarian layer](#hungarian-layer) 17 - [Hungarian layer](#hungarian-layer)
18 - [Navigation and media layer](#navigation-and-media-layer) 18 - [Navigation and media layer](#navigation-and-media-layer)
19 - [One-handed layer](#one-handed-layer)
20 - [Steno layer](#steno-layer) 19 - [Steno layer](#steno-layer)
21 - [LED states](#led-states) 20 - [LED states](#led-states)
22* [Tools](#tools) 21* [Tools](#tools)
23 - [Heatmap](#heatmap) 22 - [Heatmap](#heatmap)
23* [Special features](#special-features)
24 - [Unicode Symbol Input](#unicode-symbol-input)
24* [Building](#building) 25* [Building](#building)
25 - [Using on Windows](#using-on-windows) 26 - [Using on Windows](#using-on-windows)
26* [Changelog](#changelog) 27* [Changelog](#changelog)
@@ -38,7 +39,7 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest
38* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap. 39* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap.
39* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout. 40* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout.
40* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode. 41* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode.
41* The **Media** and **Hun** layer keys are one-shot, the **1Hand** and **STENO** keys are toggles. 42* The **Media** and **Hun** layer keys are one-shot, the **STENO** key is a toggle.
42* When holding any of the **Arrow** layer keys, the arrow layer activates while the layer key is held. Tapping the key produces the normal key. 43* When holding any of the **Arrow** layer keys, the arrow layer activates while the layer key is held. Tapping the key produces the normal key.
43* Tapping the `:` key once yields `:`, tapping it twice yields `;`. 44* Tapping the `:` key once yields `:`, tapping it twice yields `;`.
44* The **Lead** key allows me to type in a sequence of keys, and trigger some actions: 45* The **Lead** key allows me to type in a sequence of keys, and trigger some actions:
@@ -51,6 +52,7 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest
51 - `LEAD v` prints the firmware version, the keyboard and the keymap. 52 - `LEAD v` prints the firmware version, the keyboard and the keymap.
52 - `LEAD d` toggles logging keypress positions to the HID console. 53 - `LEAD d` toggles logging keypress positions to the HID console.
53 - `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader. 54 - `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader.
55 - `LEAD LEAD u` enters the [Unicode symbol input][#unicode-symbol-input] mode.
54 56
55## ADORE layer 57## ADORE layer
56 58
@@ -74,20 +76,6 @@ On this layer, the accented characters are at the same position as their base va
74 76
75This layer is primarily for navigating with the cursor or the mouse, and some media things. 77This layer is primarily for navigating with the cursor or the mouse, and some media things.
76 78
77## One-handed layer
78
79[![One-handed layer](images/one-handed-layer.png)](http://www.keyboard-layout-editor.com/#/gists/edff2495135955b8963198dace7f7ece)
80
81The one-handed layer is used in situations where the right hand is occupied, by mousing around, for example. Tapping the `OTHER` key switches which side is active. For the most part, keys remain in their usual position. When the right half is active, keys are mirrored to the left half.
82
83The differences are as follows:
84
85* The `ESC` key has been moved to the bottom row, so the `OTHER` key is easier to tap.
86* Most keys on the thumb cluster now have dual uses, and these do not change when switching sides:
87 - The `Space`/`Backspace` key sends `Space` on tap, `Backspace` when held for longer than a normal tap.
88 - The `Enter`/`Shift` key sends `Enter` on short-tap, `Shift` on long-tap.
89* The `Apps`/`BASE` key can be used to go back to the base layer, by long-tapping it. A short-tap will send the `App` key, as usual.
90
91## Steno layer 79## Steno layer
92 80
93[![Steno layer for Plover](images/steno-layer.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667) 81[![Steno layer for Plover](images/steno-layer.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667)
@@ -103,11 +91,25 @@ For the layers, the following rules apply:
103* When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active. 91* When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active.
104* When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue* LEDs are on. 92* When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue* LEDs are on.
105* When the [Navigation and media layer](#navigation-and-media-layer) is active, the *red* and *green* ones are on. 93* When the [Navigation and media layer](#navigation-and-media-layer) is active, the *red* and *green* ones are on.
106* When the [One-handed layer](#one-handed-layer) is active, the *green* LED is on and bright, and either the *red* or the *blue* one is going to slowly blink, depending on the currently active side.
107* For the [Steno layer](#steno-layer), all LEDs will be turned on. 94* For the [Steno layer](#steno-layer), all LEDs will be turned on.
108 95
109Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers use a stronger one, and modifiers override any layer preferences. For example, when on the one-handed layer, with the left side active (*red* light blinking), if `Shift` is on, the *red* light will be constantly on. 96Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers use a stronger one, and modifiers override any layer preferences. For example, when on the one-handed layer, with the left side active (*red* light blinking), if `Shift` is on, the *red* light will be constantly on.
110 97
98# Special features
99
100## Unicode Symbol Input
101
102Once in the Unicode Symbol Input mode, one is able to type in symbol names, press `Enter` or `Space`, and get the Unicode symbol itself back. When in the mode, a capital `U` is printed first. Once the sequence is finished, all of it is erased by sending enough `Backspace` taps, and the firmware starts the OS-specific unicode input sequence. Then, it looks up the symbol name, and enters the associated code. If it is not found, it will just replay the pressed keycodes.
103
104The currently supported symbols are:
105
106- `snowman`: ☃
107- `kiss`: 😙
108- `rofl`: 🤣
109- `poop`: 💩
110
111This is an experimental feature, and may or may not work reliably.
112
111# Tools 113# Tools
112 114
113## Heatmap 115## Heatmap
@@ -133,14 +135,14 @@ To make my workflow easier, this layout is maintained in [its own repository][al
133$ git clone https://github.com/jackhumbert/qmk_firmware.git 135$ git clone https://github.com/jackhumbert/qmk_firmware.git
134$ cd qmk_firmware 136$ cd qmk_firmware
135$ git clone https://github.com/algernon/ergodox-layout.git \ 137$ git clone https://github.com/algernon/ergodox-layout.git \
136 keyboards/ergodox_ez/keymaps/algernon-master 138 keyboards/ergodox/keymaps/algernon-master
137$ make KEYBOARD=ergodox_ez KEYMAP=algernon-master 139$ make keyboard=ergodox keymap=algernon-master
138``` 140```
139 141
140From time to time, updates may be submitted back to the QMK repository. If you are reading it there, you can build the firmware like any other firmware included with it (assuming you are in the root directory of the firmware): 142From time to time, updates may be submitted back to the QMK repository. If you are reading it there, you can build the firmware like any other firmware included with it (assuming you are in the root directory of the firmware):
141 143
142``` 144```
143$ make KEYBOARD=ergodox_ez KEYMAP=algernon 145$ make keyboard=ergodox keymap=algernon
144``` 146```
145 147
146## Using on Windows 148## Using on Windows
@@ -149,6 +151,16 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the
149 151
150# Changelog 152# Changelog
151 153
154## v1.5 - 2016-08-12
155
156* The **1HAND** layer has been removed.
157* A `Delete` key is now available on the right thumb cluster.
158* The [ADORE](#adore-layer) layer received a major update, see the layout image above.
159* It is now possible to enable automatic logging for the [ADORE](#adore-layer) layer, by setting the `ADORE_AUTOLOG` makefile variable to `yes` when compiling the keymap. It is off by default.
160* The `~` key and the `Media Next/Prev` key have been swapped on the [base layer](#base-layer).
161* On the **ARROW** layer, `Backspace` has been replaced by `Enter`.
162* There is some experimental support for entering Unicode symbols.
163
152## v1.4 - 2016-07-29 164## v1.4 - 2016-07-29
153 165
154* When toggling the key logging on or off, the LEDs will do a little dance. 166* When toggling the key logging on or off, the LEDs will do a little dance.
diff --git a/keyboards/ergodox/keymaps/xyverz/keymap.c b/keyboards/ergodox/keymaps/xyverz/keymap.c
new file mode 100644
index 000000000..c5ce99dd2
--- /dev/null
+++ b/keyboards/ergodox/keymaps/xyverz/keymap.c
@@ -0,0 +1,311 @@
1/*
2 * The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak
3 * software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner
4 * keys. I've decided to continue using this layout with my ErgoDox.
5 *
6 * The QWERTY layout shown here is based entirely on the Kinesis Advantage layout, with the additional
7 * keys as shown in the diagrams. The Colemak layout is merely an adaptation of that.
8 *
9 * I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck
10 * layouts.
11 *
12 * For a better explanation of the layout matrices shown below, take a look at ../../ez/ez.h where the
13 * keymap is defined, beginning on line 81.
14 *
15 */
16
17#include "ergodox.h"
18#include "debug.h"
19#include "action_layer.h"
20#include "eeconfig.h"
21
22extern keymap_config_t keymap_config;
23
24#define _DV 0 // Dvorak layer
25#define _QW 1 // Qwerty layer
26#define _CM 2 // Colemak layer
27#define _MD 3 // Media Layer
28#define _KP 4 // Keypad Layer
29
30// Macro name shortcuts
31#define DVORAK M(_DV)
32#define QWERTY M(_QW)
33#define COLEMAK M(_CM)
34
35const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
36/* Keymap 0: Dvorak layer
37 *
38 * ,--------------------------------------------------. ,--------------------------------------------------.
39 * | ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ |
40 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
41 * | Tab | ' | , | . | Y | Y | | | | F | G | C | R | L | \ |
42 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
43 * | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - |
44 * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------|
45 * | LShift | Z | X | C | V | X | | | | B | M | W | V | Z | RShift |
46 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
47 * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI |
48 * `----------------------------------' `----------------------------------'
49 * ,-------------. ,-------------.
50 * | LCtr | LAlt | | Ralt | RCtr |
51 * ,------|------|------| |------+------+------.
52 * | | | Home | | PgUp | | |
53 * | BkSp | Del |------| |------| Enter| Space|
54 * | | | End | | PgDn | | |
55 * `--------------------' `--------------------'
56 *
57 */
58// If it accepts an argument (i.e, is a function), it doesn't need KC_.
59// Otherwise, it needs KC_*
60[_DV] = { // layer 0 : Dvorak
61 // left hand
62 {KC_RBRC, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, KC_NO },
63 {KC_1, KC_QUOT, KC_A, KC_SCLN, KC_GRV, KC_END },
64 {KC_2, KC_COMM, KC_O, KC_Q, KC_INS, KC_DEL },
65 {KC_3, KC_DOT, KC_E, KC_J, KC_LEFT, KC_BSPC},
66 {KC_4, KC_P, KC_U, KC_K, KC_RGHT, KC_HOME},
67 {KC_5, KC_Y, KC_I, KC_X, KC_NO, KC_LCTL},
68 {KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT},
69
70 // right hand
71 {KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT},
72 {KC_6, KC_F, KC_D, KC_B, KC_NO, KC_RCTL},
73 {KC_7, KC_G, KC_H, KC_M, KC_UP, KC_PGUP},
74 {KC_8, KC_C, KC_T, KC_W, KC_DOWN, KC_SPC },
75 {KC_9, KC_R, KC_N, KC_V, KC_SLSH, KC_ENT },
76 {KC_0, KC_L, KC_S, KC_Z, KC_EQL, KC_PGDN},
77 {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI, KC_NO }
78},
79
80/* Keymap 1: QWERTY layer
81 *
82 * ,--------------------------------------------------. ,--------------------------------------------------.
83 * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - |
84 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
85 * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ |
86 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
87 * | CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
88 * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------|
89 * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
90 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
91 * | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI |
92 * `----------------------------------' `----------------------------------'
93 * ,-------------. ,-------------.
94 * | LCtr | LAlt | | Ralt | RCtr |
95 * ,------|------|------| |------+------+------.
96 * | | | Home | | PgUp | | |
97 * | BkSp | Del |------| |------| Enter| Space|
98 * | | | End | | PgDn | | |
99 * `--------------------' `--------------------'
100 */
101// If it accepts an argument (i.e, is a function), it doesn't need KC_.
102// Otherwise, it needs KC_*
103[_QW] = { // layer 1 : QWERTY
104 // left hand
105 {KC_EQL, KC_TAB, KC_CAPS, KC_LSFT, KC_LGUI, KC_NO },
106 {KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END },
107 {KC_2, KC_W, KC_S, KC_X, KC_INS, KC_DEL },
108 {KC_3, KC_E, KC_D, KC_C, KC_LEFT, KC_BSPC},
109 {KC_4, KC_R, KC_F, KC_V, KC_RGHT, KC_HOME},
110 {KC_5, KC_T, KC_G, KC_B, KC_NO, KC_LCTL},
111 {KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT},
112
113 // right hand
114 {KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT},
115 {KC_6, KC_Y, KC_H, KC_N, KC_NO, KC_RCTL},
116 {KC_7, KC_U, KC_J, KC_M, KC_UP, KC_PGUP},
117 {KC_8, KC_I, KC_K, KC_COMM, KC_DOWN, KC_SPC },
118 {KC_9, KC_O, KC_L, KC_DOT, KC_LBRC, KC_ENT },
119 {KC_0, KC_P, KC_SCLN, KC_SLSH, KC_RBRC, KC_PGDN},
120 {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO }
121 },
122
123/* Keymap 2: Colemak layer
124 *
125 * ,--------------------------------------------------. ,--------------------------------------------------.
126 * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - |
127 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
128 * | Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | \ |
129 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
130 * | BkSpc | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
131 * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------|
132 * | LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift |
133 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
134 * | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI |
135 * `----------------------------------' `----------------------------------'
136 * ,-------------. ,-------------.
137 * | LCtr | LAlt | | Ralt | RCtr |
138 * ,------|------|------| |------+------+------.
139 * | | | Home | | PgUp | | |
140 * | BkSp | Del |------| |------| Enter| Space|
141 * | | | End | | PgDn | | |
142 * `--------------------' `--------------------'
143 */
144// If it accepts an argument (i.e, is a function), it doesn't need KC_.
145// Otherwise, it needs KC_*
146[_CM] = { // layer 2 : Colemak
147 // left hand
148 {KC_EQL, KC_TAB, KC_BSPC, KC_LSFT, KC_LGUI, KC_NO },
149 {KC_1, KC_Q, KC_A, KC_Z, KC_GRV, KC_END },
150 {KC_2, KC_W, KC_R, KC_X, KC_INS, KC_DEL },
151 {KC_3, KC_F, KC_S, KC_C, KC_LEFT, KC_BSPC},
152 {KC_4, KC_P, KC_T, KC_V, KC_RGHT, KC_HOME},
153 {KC_5, KC_G, KC_D, KC_B, KC_NO, KC_LCTL},
154 {KC_ESC, KC_NO, KC_NO, MO(_MD), KC_NO, KC_LALT},
155
156 // right hand
157 {KC_ESC, KC_NO, KC_NO, MO(_KP), KC_NO, KC_RALT},
158 {KC_6, KC_J, KC_H, KC_K, KC_NO, KC_RCTL},
159 {KC_7, KC_L, KC_N, KC_M, KC_UP, KC_PGUP},
160 {KC_8, KC_U, KC_E, KC_COMM, KC_DOWN, KC_SPC },
161 {KC_9, KC_Y, KC_I, KC_DOT, KC_LBRC, KC_ENT },
162 {KC_0, KC_SCLN, KC_O, KC_SLSH, KC_RBRC, KC_PGDN},
163 {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO }
164 },
165
166/* Keymap 3: Symbol Layer
167 *
168 * ,--------------------------------------------------. ,--------------------------------------------------.
169 * | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | |
170 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
171 * | | | PrSc | ScLk | Paus | | FN4 | | FN5 | | Mute | Vol- | Vol+ | | |
172 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
173 * | | | | | | |------| |------| Stop | Prev | Play | Next | Sel | |
174 * |--------+------+------+------+------+------| FN4 | | FN5 |------+------+------+------+------+--------|
175 * | | |Dvorak|Qwerty|Colemk| | | | | | | | | | |
176 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
177 * | | | | | | | | | | | |
178 * `----------------------------------' `----------------------------------'
179 * ,-------------. ,-------------.
180 * | | | | | |
181 * ,------|------|------| |------+------+------.
182 * | | | | | | | |
183 * | | |------| |------| | |
184 * | | | | | | | |
185 * `--------------------' `--------------------'
186 */
187// Media Layer
188[_MD] = { // layer 3 : Media layer
189 // left hand
190 {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO },
191 {KC_F1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
192 {KC_F2, KC_PSCR, KC_TRNS, DVORAK, KC_TRNS, KC_TRNS},
193 {KC_F3, KC_SLCK, KC_TRNS, QWERTY, KC_TRNS, KC_TRNS},
194 {KC_F4, KC_PAUS, KC_TRNS, COLEMAK, KC_TRNS, KC_TRNS},
195 {KC_F5, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS},
196 {KC_F11, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS},
197
198 // right hand
199 {KC_F12, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS},
200 {KC_F6, KC_TRNS, KC_MSTP, KC_TRNS, KC_NO, KC_TRNS},
201 {KC_F7, KC_MUTE, KC_MPRV, KC_TRNS, KC_TRNS, KC_TRNS},
202 {KC_F8, KC_VOLD, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS},
203 {KC_F9, KC_VOLU, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS},
204 {KC_F10, KC_TRNS, KC_MSEL, KC_TRNS, KC_TRNS, KC_TRNS},
205 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO }
206 },
207
208/* Keymap 4: Keypad layer
209 *
210 * ,--------------------------------------------------. ,--------------------------------------------------.
211 * | Power | | | | | | | | | | NmLk | KP / | KP * | KP - | |
212 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
213 * | Sleep | | | | | | FN5 | | FN4 | | KP 7 | KP 8 | KP 9 | KP + | |
214 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
215 * | Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | |
216 * |--------+------+------+------+------+------| FN5 | | FN4 |------+------+------+------+------+--------|
217 * | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| |
218 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
219 * | | | | | | | KP 0 | | KP . |KP Ent| |
220 * `----------------------------------' `----------------------------------'
221 * ,-------------. ,-------------.
222 * | | | | | |
223 * ,------|------|------| |------+------+------.
224 * | | | | | | | |
225 * | | |------| |------| | |
226 * | | | | | | | |
227 * `--------------------' `--------------------'
228 */
229// Keypad Layer
230[_KP] = { // layer 4 : Keypad layer
231 // left hand
232 {KC_PWR, KC_SLEP, KC_WAKE, KC_TRNS, KC_TRNS, KC_NO },
233 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
234 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
235 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
236 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
237 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS},
238 {KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS},
239
240 // right hand
241 {KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS},
242 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS},
243 {KC_NLCK, KC_P7, KC_P4, KC_P1, KC_P0, KC_TRNS},
244 {KC_PSLS, KC_P8, KC_P5, KC_P2, KC_NO, KC_TRNS},
245 {KC_PAST, KC_P9, KC_P6, KC_P3, KC_PDOT, KC_TRNS},
246 {KC_PMNS, KC_PPLS, KC_PPLS, KC_PENT, KC_PENT, KC_TRNS},
247 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO }
248 },
249
250};
251
252const uint16_t PROGMEM fn_actions[] = {
253
254};
255
256void persistant_default_layer_set(uint16_t default_layer) {
257 eeconfig_update_default_layer(default_layer);
258 default_layer_set(default_layer);
259}
260
261
262const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
263{
264 switch(id) {
265 case _DV:
266 if (record->event.pressed) {
267 persistant_default_layer_set(1UL<<_DV);
268 }
269 break;
270 case _QW:
271 if (record->event.pressed) {
272 persistant_default_layer_set(1UL<<_QW);
273 }
274 break;
275 case _CM:
276 if (record->event.pressed) {
277 persistant_default_layer_set(1UL<<_CM);
278 }
279 break;
280 }
281 return MACRO_NONE;
282};
283
284// Runs just one time when the keyboard initializes.
285void matrix_init_user(void) {
286
287};
288
289// Runs constantly in the background, in a loop.
290void matrix_scan_user(void) {
291
292 uint8_t layer = biton32(layer_state);
293
294 ergodox_board_led_off();
295 ergodox_right_led_1_off();
296 ergodox_right_led_2_off();
297 ergodox_right_led_3_off();
298 switch (layer) {
299 // TODO: Make this relevant to the ErgoDox EZ.
300 case 1:
301 ergodox_right_led_1_on();
302 break;
303 case 2:
304 ergodox_right_led_2_on();
305 break;
306 default:
307 // none
308 break;
309 }
310
311};
diff --git a/keyboards/phantom/keymaps/xyverz/keymap.c b/keyboards/phantom/keymaps/xyverz/keymap.c
new file mode 100644
index 000000000..aa6af18b1
--- /dev/null
+++ b/keyboards/phantom/keymaps/xyverz/keymap.c
@@ -0,0 +1,104 @@
1#include "phantom.h"
2#include "action_layer.h"
3#include "eeconfig.h"
4
5extern keymap_config_t keymap_config;
6
7
8// Used for SHIFT_ESC
9#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
10
11// Each layer gets a name for readability, which is then used in the keymap matrix below.
12// The underscores don't mean anything - you can have a layer called STUFF or any other name.
13// Layer names don't all need to be of the same length, obviously, and you can also skip them
14// entirely and just use numbers.
15#define _QW 0
16#define _DV 1
17#define _CM 2
18#define _FL 3
19
20// Macro name shortcuts
21#define QWERTY M(_QW)
22#define DVORAK M(_DV)
23#define COLEMAK M(_CM)
24
25// Fillers to make layering more clear
26#define _______ KC_TRNS
27#define XXXXXXX KC_NO
28
29const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
30
31[_QW] = { /* Layer 0: Qwerty */
32 {KC_ESC, KC_GRV, 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_PSCR, KC_SLCK, KC_PAUS},
33 {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP},
34 {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_DEL, KC_END, KC_PGDN},
35 {KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX},
36 {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX},
37 {KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT}
38 },
39
40[_DV] = { /* Layer 1: Dvorak */
41 {KC_ESC, KC_GRV, 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_PSCR, KC_SLCK, KC_PAUS},
42 {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP},
43 {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL, KC_END, KC_PGDN},
44 {KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX},
45 {KC_LSFT, XXXXXXX, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX},
46 {KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT}
47 },
48
49[_CM] = { /* Layer 2: Colemak */
50 {KC_ESC, KC_GRV, 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_PSCR, KC_SLCK, KC_PAUS},
51 {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP},
52 {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN},
53 {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX},
54 {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX},
55 {KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT}
56 },
57
58[_FL] = { /* Layer 3: Functions */
59 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
60 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, RESET, KC_MPRV, KC_MPLY, KC_MNXT},
61 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU},
62 {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX},
63 {_______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX},
64 {QWERTY, DVORAK, COLEMAK, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, _______},
65 },
66
67
68};
69
70enum function_id {
71 SHIFT_ESC,
72};
73
74
75const uint16_t PROGMEM fn_actions[] = {
76
77};
78
79void persistant_default_layer_set(uint16_t default_layer) {
80 eeconfig_update_default_layer(default_layer);
81 default_layer_set(default_layer);
82}
83
84const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
85{
86 switch(id) {
87 case _DV:
88 if (record->event.pressed) {
89 persistant_default_layer_set(1UL<<_DV);
90 }
91 break;
92 case _QW:
93 if (record->event.pressed) {
94 persistant_default_layer_set(1UL<<_QW);
95 }
96 break;
97 case _CM:
98 if (record->event.pressed) {
99 persistant_default_layer_set(1UL<<_CM);
100 }
101 break;
102 }
103 return MACRO_NONE;
104};
diff --git a/keyboards/tv44/Makefile b/keyboards/tv44/Makefile
new file mode 100644
index 000000000..45ca12780
--- /dev/null
+++ b/keyboards/tv44/Makefile
@@ -0,0 +1,75 @@
1
2
3# MCU name
4#MCU = at90usb1287
5MCU = atmega32u4
6
7# Processor frequency.
8# This will define a symbol, F_CPU, in all source code files equal to the
9# processor frequency in Hz. You can then use this symbol in your source code to
10# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
11# automatically to create a 32-bit value in your source code.
12#
13# This will be an integer division of F_USB below, as it is sourced by
14# F_USB after it has run through any CPU prescalers. Note that this value
15# does not *change* the processor frequency - it should merely be updated to
16# reflect the processor speed set externally so that the code can use accurate
17# software delays.
18F_CPU = 16000000
19
20
21#
22# LUFA specific
23#
24# Target architecture (see library "Board Types" documentation).
25ARCH = AVR8
26
27# Input clock frequency.
28# This will define a symbol, F_USB, in all source code files equal to the
29# input clock frequency (before any prescaling is performed) in Hz. This value may
30# differ from F_CPU if prescaling is used on the latter, and is required as the
31# raw input clock is fed directly to the PLL sections of the AVR for high speed
32# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
33# at the end, this will be done automatically to create a 32-bit value in your
34# source code.
35#
36# If no clock division is performed on the input clock inside the AVR (via the
37# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
38F_USB = $(F_CPU)
39
40# Interrupt driven control endpoint task(+60)
41OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
42
43
44# Boot Section Size in *bytes*
45# Teensy halfKay 512
46# Teensy++ halfKay 1024
47# Atmel DFU loader 4096
48# LUFA bootloader 4096
49# USBaspLoader 2048
50OPT_DEFS += -DBOOTLOADER_SIZE=4096
51
52
53# Build Options
54# change yes to no to disable
55#
56BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
57MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
58EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
59CONSOLE_ENABLE ?= yes # Console for debug(+400)
60COMMAND_ENABLE ?= yes # Commands for debug and configuration
61# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
62SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
63# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
64NKRO_ENABLE ?= yes # USB Nkey Rollover
65BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
66MIDI_ENABLE ?= no # MIDI controls
67UNICODE_ENABLE ?= no # Unicode
68BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
69AUDIO_ENABLE ?= no # Audio output on port C6
70
71ifndef QUANTUM_DIR
72 include ../../Makefile
73endif
74
75
diff --git a/keyboards/tv44/config.h b/keyboards/tv44/config.h
new file mode 100644
index 000000000..0ae93c095
--- /dev/null
+++ b/keyboards/tv44/config.h
@@ -0,0 +1,162 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef CONFIG_H
19#define CONFIG_H
20
21#include "config_common.h"
22
23/* USB Device descriptor parameter */
24#define VENDOR_ID 0xFEAE
25#define PRODUCT_ID 0x8844
26#define DEVICE_VER 0x0002
27#define MANUFACTURER Evan Sailer
28#define PRODUCT TheVan 44
29#define DESCRIPTION keyboard firmware for TV44
30
31/* key matrix size */
32#define MATRIX_ROWS 4
33#define MATRIX_COLS 12
34
35/*
36 * Keyboard Matrix Assignments
37 *
38 * Change this to how you wired your keyboard
39 * COLS: AVR pins used for columns, left to right
40 * ROWS: AVR pins used for rows, top to bottom
41 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
42 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
43 *
44*/
45#define MATRIX_ROW_PINS { D7, B5, F7, D4 }
46#define MATRIX_COL_PINS { D2, D3, D5, D6, B4, B6, F6, F5, F4, F1, F0, B3 }
47#define UNUSED_PINS
48
49/* COL2ROW or ROW2COL */
50#define DIODE_DIRECTION COL2ROW
51
52// #define BACKLIGHT_PIN B7
53// #define BACKLIGHT_BREATHING
54// #define BACKLIGHT_LEVELS 3
55
56
57/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
58#define DEBOUNCING_DELAY 5
59
60/* define if matrix has ghost (lacks anti-ghosting diodes) */
61//#define MATRIX_HAS_GHOST
62
63/* number of backlight levels */
64
65/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
66#define LOCKING_SUPPORT_ENABLE
67/* Locking resynchronize hack */
68#define LOCKING_RESYNC_ENABLE
69
70/*
71 * Force NKRO
72 *
73 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
74 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
75 * makefile for this to work.)
76 *
77 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
78 * until the next keyboard reset.
79 *
80 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
81 * fully operational during normal computer usage.
82 *
83 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
84 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
85 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
86 * power-up.
87 *
88 */
89//#define FORCE_NKRO
90
91/*
92 * Magic Key Options
93 *
94 * Magic keys are hotkey commands that allow control over firmware functions of
95 * the keyboard. They are best used in combination with the HID Listen program,
96 * found here: https://www.pjrc.com/teensy/hid_listen.html
97 *
98 * The options below allow the magic key functionality to be changed. This is
99 * useful if your keyboard/keypad is missing keys and you want magic key support.
100 *
101 */
102
103/* key combination for magic key command */
104#define IS_COMMAND() ( \
105 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
106)
107
108/* control how magic key switches layers */
109//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
110//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
111//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
112
113/* override magic key keymap */
114//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
115//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
116//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
117//#define MAGIC_KEY_HELP1 H
118//#define MAGIC_KEY_HELP2 SLASH
119//#define MAGIC_KEY_DEBUG D
120//#define MAGIC_KEY_DEBUG_MATRIX X
121//#define MAGIC_KEY_DEBUG_KBD K
122//#define MAGIC_KEY_DEBUG_MOUSE M
123//#define MAGIC_KEY_VERSION V
124//#define MAGIC_KEY_STATUS S
125//#define MAGIC_KEY_CONSOLE C
126//#define MAGIC_KEY_LAYER0_ALT1 ESC
127//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
128//#define MAGIC_KEY_LAYER0 0
129//#define MAGIC_KEY_LAYER1 1
130//#define MAGIC_KEY_LAYER2 2
131//#define MAGIC_KEY_LAYER3 3
132//#define MAGIC_KEY_LAYER4 4
133//#define MAGIC_KEY_LAYER5 5
134//#define MAGIC_KEY_LAYER6 6
135//#define MAGIC_KEY_LAYER7 7
136//#define MAGIC_KEY_LAYER8 8
137//#define MAGIC_KEY_LAYER9 9
138//#define MAGIC_KEY_BOOTLOADER PAUSE
139//#define MAGIC_KEY_LOCK CAPS
140//#define MAGIC_KEY_EEPROM E
141//#define MAGIC_KEY_NKRO N
142//#define MAGIC_KEY_SLEEP_LED Z
143
144/*
145 * Feature disable options
146 * These options are also useful to firmware size reduction.
147 */
148
149/* disable debug print */
150//#define NO_DEBUG
151
152/* disable print */
153//#define NO_PRINT
154
155/* disable action features */
156//#define NO_ACTION_LAYER
157//#define NO_ACTION_TAPPING
158//#define NO_ACTION_ONESHOT
159//#define NO_ACTION_MACRO
160//#define NO_ACTION_FUNCTION
161
162#endif
diff --git a/keyboards/tv44/keymaps/default/Makefile b/keyboards/tv44/keymaps/default/Makefile
new file mode 100644
index 000000000..f4671a9d1
--- /dev/null
+++ b/keyboards/tv44/keymaps/default/Makefile
@@ -0,0 +1,21 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18
19ifndef QUANTUM_DIR
20 include ../../../../Makefile
21endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/default/config.h b/keyboards/tv44/keymaps/default/config.h
new file mode 100644
index 000000000..df06a2620
--- /dev/null
+++ b/keyboards/tv44/keymaps/default/config.h
@@ -0,0 +1,8 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6// place overrides here
7
8#endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/default/keymap.c b/keyboards/tv44/keymaps/default/keymap.c
new file mode 100644
index 000000000..6a4fef3da
--- /dev/null
+++ b/keyboards/tv44/keymaps/default/keymap.c
@@ -0,0 +1,97 @@
1#include "tv44.h"
2#include "action_layer.h"
3#include "eeconfig.h"
4
5extern keymap_config_t keymap_config;
6
7// Each layer gets a name for readability, which is then used in the keymap matrix below.
8// The underscores don't mean anything - you can have a layer called STUFF or any other name.
9// Layer names don't all need to be of the same length, obviously, and you can also skip them
10// entirely and just use numbers.
11
12#define _QW 0
13#define _DV 1
14#define _CM 2
15#define _L1 3
16#define _L2 4
17#define _L3 5
18
19// Macro name shortcuts
20#define QWERTY M(_QW)
21#define DVORAK M(_DV)
22#define COLEMAK M(_CM)
23
24// Fillers to make layering more clear
25#define _______ KC_TRNS
26#define XXXXXXX KC_NO
27
28
29const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
30 [_QW] = { /* Qwerty */
31 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
32 {MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1) },
33 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_F, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) },
34 {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) }
35 },
36 [_DV] = { /* Dvorak */
37 {KC_TAB, KC_COMM, KC_DOT, KC_SLSH, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_Q, KC_BSPC },
38 {MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1) },
39 {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2) },
40 {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) }
41 },
42 [_CM] = { /* Colemak */
43 {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC },
44 {MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, MO(_L1) },
45 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) },
46 {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) }
47 },
48 [_L1] = { /* LAYER 1 */
49 {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL },
50 {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ },
51 {_______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT },
52 {_______, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ }
53 },
54 [_L2] = { /* LAYER 2 */
55 {_______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______ },
56 {KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_ENT },
57 {_______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______ },
58 {_______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ }
59 },
60 [_L3] = { /* LAYER 3 */
61 {_______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______ },
62 {KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______ },
63 {KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_F12, _______ },
64 {_______, KC_LSFT, KC_B, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_C, _______, _______, XXXXXXX, _______ }
65 }
66};
67
68const uint16_t PROGMEM fn_actions[] = {
69
70};
71
72void persistant_default_layer_set(uint16_t default_layer) {
73 eeconfig_update_default_layer(default_layer);
74 default_layer_set(default_layer);
75}
76
77const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
78{
79 switch(id) {
80 case _DV:
81 if (record->event.pressed) {
82 persistant_default_layer_set(1UL<<_DV);
83 }
84 break;
85 case _QW:
86 if (record->event.pressed) {
87 persistant_default_layer_set(1UL<<_QW);
88 }
89 break;
90 case _CM:
91 if (record->event.pressed) {
92 persistant_default_layer_set(1UL<<_CM);
93 }
94 break;
95 }
96 return MACRO_NONE;
97};
diff --git a/keyboards/tv44/keymaps/default/readme.md b/keyboards/tv44/keymaps/default/readme.md
new file mode 100644
index 000000000..ac84c08cf
--- /dev/null
+++ b/keyboards/tv44/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for tv44 \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/xyverz/Makefile b/keyboards/tv44/keymaps/xyverz/Makefile
new file mode 100644
index 000000000..f4671a9d1
--- /dev/null
+++ b/keyboards/tv44/keymaps/xyverz/Makefile
@@ -0,0 +1,21 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18
19ifndef QUANTUM_DIR
20 include ../../../../Makefile
21endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/xyverz/config.h b/keyboards/tv44/keymaps/xyverz/config.h
new file mode 100644
index 000000000..df06a2620
--- /dev/null
+++ b/keyboards/tv44/keymaps/xyverz/config.h
@@ -0,0 +1,8 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5
6// place overrides here
7
8#endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/xyverz/keymap.c b/keyboards/tv44/keymaps/xyverz/keymap.c
new file mode 100644
index 000000000..8cbcf8d35
--- /dev/null
+++ b/keyboards/tv44/keymaps/xyverz/keymap.c
@@ -0,0 +1,92 @@
1#include "tv44.h"
2#include "action_layer.h"
3#include "eeconfig.h"
4
5extern keymap_config_t keymap_config;
6
7#define _DV 0
8#define _QW 1
9#define _CM 2
10#define _L1 3
11#define _L2 4
12
13// Macro name shortcuts
14#define DVORAK M(_DV)
15#define QWERTY M(_QW)
16#define COLEMAK M(_CM)
17
18// Fillers to make layering more clear
19#define _______ KC_TRNS
20#define XXXXXXX KC_NO
21
22
23const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
24 [_DV] = { /* 0: Dvorak */
25 {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC },
26 {MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT },
27 {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT },
28 {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) }
29 },
30
31 [_QW] = { /* 1: Qwerty */
32 {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
33 {MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT },
34 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT },
35 {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) }
36 },
37
38 [_CM] = { /* 2: Colemak */
39 {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC },
40 {MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT },
41 {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT },
42 {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) }
43 },
44
45 [_L1] = {/* 1: FN 1 */
46 {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL },
47 {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ },
48 {_______, _______, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT },
49 {KC_ESC, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_SLSH, _______, _______ }
50 },
51
52 [_L2] = { /* 2: FN 2 */
53 {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_ESC },
54 {_______, KC_F11, KC_F12, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_VOLU, KC_ENT },
55 {_______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_VOLD, _______ },
56 {QWERTY, DVORAK, COLEMAK, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ }
57 }
58
59};
60
61const uint16_t PROGMEM fn_actions[] = {
62
63};
64
65void persistant_default_layer_set(uint16_t default_layer) {
66 eeconfig_update_default_layer(default_layer);
67 default_layer_set(default_layer);
68}
69
70const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
71{
72 switch(id) {
73 case _DV:
74 if (record->event.pressed) {
75 persistant_default_layer_set(1UL<<_DV);
76 }
77 break;
78 case _QW:
79 if (record->event.pressed) {
80 persistant_default_layer_set(1UL<<_QW);
81 }
82 break;
83 case _CM:
84 if (record->event.pressed) {
85 persistant_default_layer_set(1UL<<_CM);
86 }
87 break;
88 }
89 return MACRO_NONE;
90};
91
92
diff --git a/keyboards/tv44/keymaps/xyverz/readme.md b/keyboards/tv44/keymaps/xyverz/readme.md
new file mode 100644
index 000000000..ac84c08cf
--- /dev/null
+++ b/keyboards/tv44/keymaps/xyverz/readme.md
@@ -0,0 +1 @@
# The default keymap for tv44 \ No newline at end of file
diff --git a/keyboards/tv44/readme.md b/keyboards/tv44/readme.md
new file mode 100644
index 000000000..e3b557fe2
--- /dev/null
+++ b/keyboards/tv44/readme.md
@@ -0,0 +1,28 @@
1tv44 keyboard firmware
2======================
3
4## Quantum MK Firmware
5
6For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
7
8## Building
9
10Download or clone the whole firmware and navigate to the keyboards/tv44 folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
11
12Depending on which keymap you would like to use, you will have to compile slightly differently.
13
14### Default
15
16To build with the default keymap, simply run `make`.
17
18### Other Keymaps
19
20Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
21
22To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
23
24```
25$ make keymap=[default|jack|<name>]
26```
27
28Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file
diff --git a/keyboards/tv44/tv44.c b/keyboards/tv44/tv44.c
new file mode 100644
index 000000000..6dc0efd28
--- /dev/null
+++ b/keyboards/tv44/tv44.c
@@ -0,0 +1,28 @@
1#include "tv44.h"
2
3void matrix_init_kb(void) {
4 // put your keyboard start-up code here
5 // runs once when the firmware starts up
6
7 matrix_init_user();
8}
9
10void matrix_scan_kb(void) {
11 // put your looping keyboard code here
12 // runs every cycle (a lot)
13
14 matrix_scan_user();
15}
16
17bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
18 // put your per-action keyboard code here
19 // runs for every action, just before processing by the firmware
20
21 return process_record_user(keycode, record);
22}
23
24void led_set_kb(uint8_t usb_led) {
25 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
26
27 led_set_user(usb_led);
28}
diff --git a/keyboards/tv44/tv44.h b/keyboards/tv44/tv44.h
new file mode 100644
index 000000000..4c30174ac
--- /dev/null
+++ b/keyboards/tv44/tv44.h
@@ -0,0 +1,22 @@
1#ifndef TV44_H
2#define TV44_H
3
4#include "quantum.h"
5
6// This a shortcut to help you visually see your layout.
7// The following is an example using the Planck MIT layout
8// The first section contains all of the arguements
9// The second converts the arguments into a two-dimensional array
10#define KEYMAP( \
11 K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
12 K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
13 K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
14 K30, K31, K32, K33, K37, K38, K39, K3B \
15) \
16{ \
17 { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
18 { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
19 { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
20 { K30, K31, K32, K33, KC_NO, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \
21
22#endif
diff --git a/readme.md b/readme.md
index 57629f8be..e2221e749 100644
--- a/readme.md
+++ b/readme.md
@@ -13,7 +13,7 @@ For an easy-to-read version of this document and the repository, check out [http
13* [Planck](/keyboards/planck/) 13* [Planck](/keyboards/planck/)
14* [Preonic](/keyboards/preonic/) 14* [Preonic](/keyboards/preonic/)
15* [Atomic](/keyboards/atomic/) 15* [Atomic](/keyboards/atomic/)
16* [ErgoDox EZ](/keyboards/ergodox_ez/) 16* [ErgoDox EZ](/keyboards/ergodox/ez/)
17* [Clueboard](/keyboards/clueboard/) 17* [Clueboard](/keyboards/clueboard/)
18* [Cluepad](/keyboards/cluepad/) 18* [Cluepad](/keyboards/cluepad/)
19 19
@@ -31,7 +31,7 @@ The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/j
31 31
32This is not a tiny project. While this is the main readme, there are many other files you might want to consult. Here are some points of interest: 32This is not a tiny project. While this is the main readme, there are many other files you might want to consult. Here are some points of interest:
33 33
34* The readme for your own keyboard: This is found under `keyboards/<your keyboards's name>/`. So for the ErgoDox EZ, it's [here](keyboards/ergodox_ez/); for the Planck, it's [here](keyboards/planck/) and so on. 34* The readme for your own keyboard: This is found under `keyboards/<your keyboards's name>/`. So for the ErgoDox EZ, it's [here](keyboards/ergodox/ez/); for the Planck, it's [here](keyboards/planck/) and so on.
35* The list of possible keycodes you can use in your keymap is actually spread out in a few different places: 35* The list of possible keycodes you can use in your keymap is actually spread out in a few different places:
36 * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes. 36 * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes.
37 * [quantum/keymap.h](quantum/keymap.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `keymap.h` is where they're actually defined. 37 * [quantum/keymap.h](quantum/keymap.h) - this is where the QMK-specific aliases are all set up. Things like the Hyper and Meh key, the Leader key, and all of the other QMK innovations. These are also explained and documented below, but `keymap.h` is where they're actually defined.