aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2017-01-15 01:12:04 -0500
committerGitHub <noreply@github.com>2017-01-15 01:12:04 -0500
commitb2dcac96555ab42d549e84c4789c99b49458c62a (patch)
treee6b1efeb9685e770f6c384ec6d33b91e581b73ed
parentff76ee837749157e05426b613e43d07e794b21e6 (diff)
parent236a0b0b6012d311a3ec048498dacdb1851327a0 (diff)
downloadqmk_firmware-b2dcac96555ab42d549e84c4789c99b49458c62a.tar.gz
qmk_firmware-b2dcac96555ab42d549e84c4789c99b49458c62a.zip
Merge pull request #1003 from mneme/master
Layout "Mneme" for Atreus62
-rw-r--r--keyboards/atreus62/keymaps/mneme/Makefile5
-rw-r--r--keyboards/atreus62/keymaps/mneme/README.md56
-rw-r--r--keyboards/atreus62/keymaps/mneme/config.h7
-rw-r--r--keyboards/atreus62/keymaps/mneme/img/base.pngbin0 -> 458762 bytes
-rw-r--r--keyboards/atreus62/keymaps/mneme/img/fun.pngbin0 -> 430634 bytes
-rw-r--r--keyboards/atreus62/keymaps/mneme/img/sym.pngbin0 -> 433342 bytes
-rw-r--r--keyboards/atreus62/keymaps/mneme/keymap.c337
-rw-r--r--keyboards/atreus62/keymaps/mneme/unicode114
8 files changed, 519 insertions, 0 deletions
diff --git a/keyboards/atreus62/keymaps/mneme/Makefile b/keyboards/atreus62/keymaps/mneme/Makefile
new file mode 100644
index 000000000..046aec273
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/Makefile
@@ -0,0 +1,5 @@
1TAP_DANCE_ENABLE = yes
2NKRO_ENABLE = true
3MOUSEKEY_ENABLE = no
4EXTRAKEY_ENABLE = yes
5CONSOLE_ENABLE = no
diff --git a/keyboards/atreus62/keymaps/mneme/README.md b/keyboards/atreus62/keymaps/mneme/README.md
new file mode 100644
index 000000000..04ab070be
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/README.md
@@ -0,0 +1,56 @@
1<!-- -*- mode: markdown; fill-column: 8192 -*- -->
2
3Mnemes Swedish Bonaza
4=======================
5
6My Layout in process, most of the code is shamelessly stolen from [algernons][algernon] excellent layout
7
8 [algernon]: https://github.com/algernon/ergodox-layout
9
10It's for Windows (current work forces me to) and Swedish (matter of birth) so ymmw.
11
12## Table of Contents
13
14* [Layouts](#layouts)
15 - [Base layer](#base-layer)
16 - [Nav layer](#nav-layer)
17 - [Sym layer](#sym-layer)
18 - [LED states](#led-states)
19
20# Layouts
21
22## Base layer
23
24![Base layer](img/base.png)
25
26
27* The number row doubles as a function row. Short presses produces numbers, long presses produces Fxx
28* The `Shift`, `Alt`, and `Control` modifiers are one-shot.
29* `Backspace` and `Enter` doubles as switches to the `sym` layer when held
30* The `ESC` key also doubles as a one-shot cancel key.
31* The **Lead** key is followed by a sequence of keys.
32 - `LEAD l` : `lgui+l`.
33 - `LEAD s l` : `λ`.
34 - `LEAD s s` : `¯\_(ツ)_/¯`
35 - `LEAD s f` : `凸(ツ)凸`
36 - `LEAD a *` : Application switching based on position in start menu. Very specific to my computer.
37
38
39## Nav layer
40
41![Nav layer](img/fun.png)
42
43Basic navigation on the right hand and modifiers close
44by for the left. The latter because I tend to use `ctrl+arrows` quite a lot.
45
46## Sym layer
47
48![Sym layer](img/sym.png)
49
50* Easy access to most symbols I use on a daily basis. Most common are on the home row, the rest are grouped as best as I could.
51
52- `eq` : Tapdance, produces `===` and `!==`
53- `fun`: Tapdance, produces `=>` and `() => {\n`
54
55# License
56 GPL-3+
diff --git a/keyboards/atreus62/keymaps/mneme/config.h b/keyboards/atreus62/keymaps/mneme/config.h
new file mode 100644
index 000000000..2c2a08c05
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/config.h
@@ -0,0 +1,7 @@
1#define ONESHOT_TIMEOUT 3000
2#define TAPPING_TERM 200
3#define PREVENT_STUCK_MODIFIERS
4
5#define LEADER_TIMEOUT 1000
6
7#include "../../config.h"
diff --git a/keyboards/atreus62/keymaps/mneme/img/base.png b/keyboards/atreus62/keymaps/mneme/img/base.png
new file mode 100644
index 000000000..86907d544
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/img/base.png
Binary files differ
diff --git a/keyboards/atreus62/keymaps/mneme/img/fun.png b/keyboards/atreus62/keymaps/mneme/img/fun.png
new file mode 100644
index 000000000..ec5a478c6
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/img/fun.png
Binary files differ
diff --git a/keyboards/atreus62/keymaps/mneme/img/sym.png b/keyboards/atreus62/keymaps/mneme/img/sym.png
new file mode 100644
index 000000000..11b5bd4b0
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/img/sym.png
Binary files differ
diff --git a/keyboards/atreus62/keymaps/mneme/keymap.c b/keyboards/atreus62/keymaps/mneme/keymap.c
new file mode 100644
index 000000000..7c1879982
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/keymap.c
@@ -0,0 +1,337 @@
1#include <stdarg.h>
2#include "atreus62.h"
3#include "led.h"
4#include "action_layer.h"
5#include "action_util.h"
6
7/*
8 *WINDOWS SWEDISH
9 */
10#define KN_HALF KC_GRV // 1/2
11#define KN_PLUS KC_MINS // +
12#define KN_ACUT KC_EQL // ´
13#define KN_AO KC_LBRC // Å
14#define KN_UMLA KC_RBRC // ¨
15#define KN_OE KC_SCLN // Ö
16#define KN_AE KC_QUOT // Ä
17#define KN_QUOT KC_NUHS // '
18#define KN_LABK KC_NUBS // <
19#define KN_MINS KC_SLSH // -
20#define KN_EXLM LSFT(KC_1) // !
21#define KN_DQT LSFT(KC_2) // "
22#define KN_AT RALT(KC_2) // @
23#define KN_HASH LSFT(KC_3) // #
24#define KN_DLR RALT(KC_4) // $
25#define KN_PERC LSFT(KC_5) // %
26#define KN_AMPR LSFT(KC_6) // &
27#define KN_SLSH LSFT(KC_7) // /
28#define KN_LPRN LSFT(KC_8) // (
29#define KN_RPRN LSFT(KC_9) // )
30#define KN_EQL LSFT(KC_0) // =
31#define KN_UNDS LSFT(KN_MINS) // _
32#define KN_QUES LSFT(KN_PLUS) // ?
33#define KN_GRAV LSFT(KN_ACUT) // `
34#define KN_LCBR RALT(KC_7) // {
35#define KN_RCBR RALT(KC_0) // }
36#define KN_LBRC RALT(KC_8) // [
37#define KN_RBRC RALT(KC_9) // ]
38#define KN_RABK LSFT(KN_LABK) // <
39#define KN_COLN LSFT(KC_DOT) // :
40#define KN_SCLN LSFT(KC_COMM) // :
41#define KN_PIPE RALT(KN_LABK) // |
42#define KN_QUES LSFT(KN_PLUS) // ?
43#define KN_CIRC LSFT(KN_UMLA) // ^
44#define KN_ASTR LSFT(KN_QUOT) // *
45#define KN_TILD RALT(KN_UMLA) // ~
46#define KN_BSLS RALT(KN_PLUS) //
47
48#define OSM_LCTL OSM(MOD_LCTL)
49#define OSM_LALT OSM(MOD_LALT)
50#define OSM_LSFT OSM(MOD_LSFT)
51
52#define KC_HYP LSFT(LALT(LCTL(KC_LGUI)))
53
54#define KC_COPY LCTL(KC_C)
55#define KC_PASTE LCTL(KC_V)
56#define KC_UNDO LCTL(KC_Z)
57#define KC_REDO LCTL(LSFT(KC_Z))
58
59// Layers
60enum {
61 BASE = 0,
62 NAV,
63 SYM
64};
65
66//Macros
67enum {
68 KF_1 = 0, // 1, F1
69 KF_2, // ...
70 KF_3,
71 KF_4,
72 KF_5,
73 KF_6,
74 KF_7,
75 KF_8,
76 KF_9,
77 KF_10,
78 KF_11,
79 KF_12
80};
81
82// Tapdance
83enum {
84 TD_FUN = 0,
85 TD_EQ
86};
87
88//Custom keycodes
89enum {
90 PLACEHOLDER = SAFE_RANGE
91};
92
93//State and timers
94uint16_t kf_timers[12];
95
96
97
98const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
99
100 [BASE] = {
101
102 { M(KF_11) ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,KC_NO ,M(KF_6) ,M(KF_7) ,M(KF_8) ,M(KF_9) ,M(KF_10) ,M(KF_12) },
103 { KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_NO ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KN_AO },
104 { OSM_LCTL ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_NO ,KC_H ,KC_J ,KC_K ,KC_L ,KN_OE ,KN_AE },
105 { OSM_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_DELT ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KN_MINS ,OSM_LSFT },
106 { MO(NAV) ,OSM_LCTL ,OSM_LALT ,KC_LGUI ,KC_SPC ,LT(SYM,KC_BSPC) ,KC_HYP ,LT(SYM,KC_ENT) ,KC_SPC ,KC_LEAD ,KC_LALT ,KC_LCTRL ,MO(NAV) }
107
108 },
109 [NAV] = {
110
111 { KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
112 { KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_NO ,KC_PGUP ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS },
113 { KC_TRNS ,KC_LSFT ,KC_LCTL ,KC_LALT ,KC_L ,KC_TRNS ,KC_NO ,KC_PGDN ,KC_LEFT ,KC_DOWN ,KC_RIGHT ,KC_TRNS ,KC_TRNS },
114 { KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
115 { KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_VOLD ,KC_VOLU }
116
117 },
118 [SYM] = {
119
120 { KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,TD(TD_EQ) ,KC_NO ,TD(TD_FUN) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS },
121 { KC_TRNS ,KN_LABK ,KN_RABK ,KN_LCBR ,KN_RCBR ,KN_PLUS ,KC_NO ,KN_AT ,KN_DQT ,KN_QUOT ,KN_GRAV ,KN_SLSH ,KC_TRNS },
122 { KC_TRNS ,KN_EXLM ,KN_EQL ,KN_LPRN ,KN_RPRN ,KN_MINS ,KC_NO ,KN_UNDS ,KN_SCLN ,KN_COLN ,KN_AMPR ,KN_PIPE ,KC_TRNS },
123 { KC_TRNS ,KN_DLR ,KN_PERC ,KN_LBRC ,KN_RBRC ,KN_ASTR ,KC_TRNS ,KN_HASH ,KC_COMM ,KC_DOT ,KN_QUES ,KN_BSLS ,KC_TRNS },
124 { KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS }
125
126 }
127};
128
129#define TAP_ONCE(code) \
130 register_code (code); \
131 unregister_code (code)
132
133static void m_tapn (uint8_t code, ...) {
134 uint8_t kc = code;
135 va_list ap;
136
137 va_start(ap, code);
138 do {
139 register_code(kc);
140 unregister_code(kc);
141 wait_ms(50);
142 kc = va_arg(ap, int);
143 } while (kc != 0);
144 va_end(ap);
145}
146
147static void m_handle_kf (keyrecord_t *record, uint8_t id) {
148 uint8_t code = id - KF_1;
149
150 if (record->event.pressed) {
151 kf_timers[code] = timer_read ();
152 } else {
153 uint8_t kc_base;
154 uint8_t long_press = (kf_timers[code] && timer_elapsed (kf_timers[code]) > TAPPING_TERM);
155
156 kf_timers[code] = 0;
157
158 switch(id){
159 case KF_1 ... KF_10:
160 if (long_press) {
161 // Long press
162 kc_base = KC_F1;
163 } else {
164 kc_base = KC_1;
165 }
166 code += kc_base;
167 break;
168 case KF_11:
169 code = long_press ? KC_F11 : KC_ESC;
170 break;
171 case KF_12:
172 code = long_press ? KC_F12 : KN_PLUS;
173 break;
174 }
175 register_code (code);
176 unregister_code (code);
177 }
178}
179
180const uint16_t PROGMEM fn_actions[] = {
181};
182
183const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
184{
185 switch (id) {
186 case KF_1 ... KF_12:
187 m_handle_kf(record, id);
188 break;
189 }
190 return MACRO_NONE;
191};
192
193// Custom keycodes
194bool process_record_user(uint16_t keycode, keyrecord_t *record) {
195 bool queue = true;
196
197 //Cancle one-shot mods.
198 switch (keycode) {
199 case KC_ESC:
200 if (record->event.pressed && get_oneshot_mods() && !has_oneshot_mods_timed_out()) {
201 clear_oneshot_mods();
202 queue = false;
203 }
204 break;
205 }
206 return queue;
207}
208
209// TAP DANCE SETTINGS
210void dance_eq (qk_tap_dance_state_t *state, void *user_data) {
211 switch (state->count) {
212 case 1: // ===
213 register_code(KC_LSHIFT);
214 m_tapn(KC_0, KC_0, KC_0, 0);
215 unregister_code(KC_LSHIFT);
216 break;
217 case 2:
218 register_code(KC_LSHIFT);
219 m_tapn(KC_1, KC_0, KC_0, 0);
220 unregister_code(KC_LSHIFT);
221 break;
222 default:
223 reset_tap_dance(state);
224 }
225}
226
227void dance_fun (qk_tap_dance_state_t *state, void *user_data) {
228 switch (state->count) {
229 case 1: // =>
230 register_code(KC_LSHIFT);
231 m_tapn(KC_0, KN_LABK, 0);
232 unregister_code(KC_LSHIFT);
233 break;
234 case 2: // () => {}
235 register_code(KC_LSHIFT);
236 m_tapn(KC_8, KC_9, KC_SPC, KC_0, KN_LABK, KC_SPC, 0);
237 unregister_code(KC_LSHIFT);
238 register_code(KC_RALT);
239 m_tapn(KC_7, 0);
240 unregister_code(KC_RALT);
241 TAP_ONCE(KC_ENT);
242 break;
243 default:
244 reset_tap_dance(state);
245 }
246}
247
248qk_tap_dance_action_t tap_dance_actions[] = {
249 [TD_FUN] = ACTION_TAP_DANCE_FN (dance_fun)
250 ,[TD_EQ] = ACTION_TAP_DANCE_FN (dance_eq)
251};
252
253// Runs just one time when the keyboard initializes.
254void matrix_init_user(void) {
255 set_unicode_input_mode(UC_WINC);
256};
257
258LEADER_EXTERNS();
259// Runs constantly in the background, in a loop.
260void matrix_scan_user(void) {
261 LEADER_DICTIONARY() {
262 leading = false;
263 leader_end();
264 SEQ_ONE_KEY(KC_L){
265 register_code(KC_RGUI);
266 TAP_ONCE(KC_L);
267 unregister_code(KC_RGUI);
268 };
269
270
271 SEQ_TWO_KEYS (KC_A, KC_W) {
272 //Web - chrome
273 register_code (KC_LGUI); TAP_ONCE (KC_1); unregister_code (KC_LGUI);
274 }
275 SEQ_TWO_KEYS (KC_A, KC_P) {
276 //sPotify
277 register_code (KC_LGUI); TAP_ONCE (KC_2); unregister_code (KC_LGUI);
278
279 }
280 SEQ_TWO_KEYS (KC_A, KC_T) {
281 //Total Commander
282 register_code (KC_LGUI); TAP_ONCE (KC_3); unregister_code (KC_LGUI);
283
284 }
285 SEQ_TWO_KEYS (KC_A, KC_A) {
286 //Atom
287 register_code (KC_LGUI); TAP_ONCE (KC_4); unregister_code (KC_LGUI);
288
289 }
290 SEQ_TWO_KEYS (KC_A, KC_E) {
291 //Emacs
292 register_code (KC_LGUI); TAP_ONCE (KC_5); unregister_code (KC_LGUI);
293
294 }
295 SEQ_TWO_KEYS (KC_A, KC_C) {
296 //Cmdr
297 register_code (KC_LGUI); TAP_ONCE (KC_6); unregister_code (KC_LGUI);
298
299 }
300 SEQ_TWO_KEYS (KC_A, KC_S) {
301 //Slack
302 register_code (KC_LGUI); TAP_ONCE (KC_7); unregister_code (KC_LGUI);
303 }
304
305
306 SEQ_TWO_KEYS (KC_S, KC_S) {
307 // ¯\_(ツ)_/¯
308 unicode_input_start(); register_hex(0xaf); unicode_input_finish();
309 register_code (KC_LALT);
310 register_code (KC_LCTL);
311 TAP_ONCE (KN_PLUS);
312 unregister_code (KC_LCTL);
313 unregister_code (KC_LALT);
314
315 register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
316 unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
317 register_code (KC_RSFT); TAP_ONCE (KC_9); TAP_ONCE(KC_7); unregister_code (KC_RSFT);
318 unicode_input_start (); register_hex(0xaf); unicode_input_finish();
319 }
320
321 SEQ_TWO_KEYS (KC_S, KC_F) {
322 // 凸(ツ)凸
323 unicode_input_start(); register_hex(0x51F8); unicode_input_finish();
324 register_code (KC_RSFT); TAP_ONCE (KC_8); unregister_code (KC_RSFT);
325 unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
326 register_code (KC_RSFT); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
327 unicode_input_start (); register_hex(0x51F8); unicode_input_finish();
328 }
329
330 SEQ_TWO_KEYS (KC_S, KC_L) {
331 // λ
332 unicode_input_start();
333 register_hex(0x03bb);
334 unicode_input_finish();
335 }
336 };
337};
diff --git a/keyboards/atreus62/keymaps/mneme/unicode b/keyboards/atreus62/keymaps/mneme/unicode
new file mode 100644
index 000000000..b3f62b6d3
--- /dev/null
+++ b/keyboards/atreus62/keymaps/mneme/unicode
@@ -0,0 +1,114 @@
1Todo
2☐ 2610 Todo
3☑ 2611 Done
4☒ 2612 Failed
5
6Operator
7× 00D7 Multiplication
8÷ 00F7 Division
9≤ 2264 LessEqual
10≥ 2265 MoreEqual
11± 00B1 Plusminus
12
13Math
14∏ 220F Product
15∑ 2211 Sum
16≈ 2248 Almost
17≡ 2261 Equivalent
18∞ 221E Infinity
19‰ 2030 Mille
20
21Set
22⊂ 2282 Subset
23⊃ 2283 sUperset
24∩ 2229 Intersextion
25∪ 222A Union
26∈ 2208 Element
27∉ 2209 Notelement
28∍ 220D Contains
29∌ 220C doesNotcontain
30
31Logic
32¬ 00AC Not
33∧ 2227 And
34∨ 2228 Or
35∃ 2203 Exists
36∄ 2204 Notexists
37
38Greek
39µ 00B5 Micro
40λ 03BB Lamda
41Ω 2126 Omega
42α 03B1 Alpha
43β 03B2 Beta
44γ 03B3 Gamma
45π 03C0 Pi
46δ 03B4 Delta
47
48Other
49☁ 2601 Cloud
50☼ 263C Sun
51☂ 2602 Rain
52☠ 2620 Skull
53♺ 267A Recycle
54👍1F44D thumbsUp
55👎1F44E thumbsDown
56💩 1F4A9 Poo
57
58
59//Todo
60SEQ_THREE_KEYS(KC_U, KC_G, KC_T){m_unicode(0x2610);}; // Todo
61SEQ_THREE_KEYS(KC_U, KC_G, KC_D){m_unicode(0x2611);}; // Done
62SEQ_THREE_KEYS(KC_U, KC_G, KC_F){m_unicode(0x2612);}; // Failed
63
64//Operator
65SEQ_THREE_KEYS(KC_U, KC_O, KC_M){m_unicode(0x00D7);}; // Multiplication
66SEQ_THREE_KEYS(KC_U, KC_O, KC_D){m_unicode(0x00F7);}; // Division
67SEQ_THREE_KEYS(KC_U, KC_O, KC_L){m_unicode(0x2264);}; // LessEqual
68SEQ_THREE_KEYS(KC_U, KC_O, KC_M){m_unicode(0x2265);}; // MoreEqual
69SEQ_THREE_KEYS(KC_U, KC_O, KC_P){m_unicode(0x00B1);}; // Plusminus
70
71//Math
72SEQ_THREE_KEYS(KC_U, KC_M, KC_P){m_unicode(0x220F);}; // Product
73SEQ_THREE_KEYS(KC_U, KC_M, KC_S){m_unicode(0x2211);}; // Sum
74SEQ_THREE_KEYS(KC_U, KC_M, KC_A){m_unicode(0x2248);}; // Almost
75SEQ_THREE_KEYS(KC_U, KC_M, KC_E){m_unicode(0x2261);}; // Equivalent
76SEQ_THREE_KEYS(KC_U, KC_M, KC_I){m_unicode(0x221E);}; // Infinity
77SEQ_THREE_KEYS(KC_U, KC_M, KC_M){m_unicode(0x2030);}; // Mille
78
79//Set
80SEQ_THREE_KEYS(KC_U, KC_S, KC_S){m_unicode(0x2282);}; Subset
81SEQ_THREE_KEYS(KC_U, KC_S, KC_P){m_unicode(0x2283);}; suPerset
82SEQ_THREE_KEYS(KC_U, KC_S, KC_I){m_unicode(0x2229);}; Intersection
83SEQ_THREE_KEYS(KC_U, KC_S, KC_U){m_unicode(0x222A);}; Union
84SEQ_THREE_KEYS(KC_U, KC_S, KC_E){m_unicode(0x2208);}; Element
85SEQ_THREE_KEYS(KC_U, KC_S, KC_N){m_unicode(0x2209);}; Notelement
86SEQ_THREE_KEYS(KC_U, KC_S, KC_C){m_unicode(0x220D);}; Contains
87SEQ_THREE_KEYS(KC_U, KC_S, KC_D){m_unicode(0x220C);}; doesNotcontain
88
89//Logic
90SEQ_THREE_KEYS(KC_U, KC_L, KC_N){m_unicode(0x00AC);}; // Not
91SEQ_THREE_KEYS(KC_U, KC_L, KC_A){m_unicode(0x2227);}; // And
92SEQ_THREE_KEYS(KC_U, KC_L, KC_O){m_unicode(0x2228);}; // Or
93SEQ_THREE_KEYS(KC_U, KC_L, KC_E){m_unicode(0x2203);}; // Exists
94SEQ_THREE_KEYS(KC_U, KC_L, KC_N){m_unicode(0x2204);}; // Notexists
95
96//Greek
97SEQ_THREE_KEYS(KC_U, KC_G, KC_M){m_unicode(0x00B5);}; // Micro
98SEQ_THREE_KEYS(KC_U, KC_G, KC_L){m_unicode(0x03BB);}; // Lamda
99SEQ_THREE_KEYS(KC_U, KC_G, KC_O){m_unicode(0x2126);}; // Omega
100SEQ_THREE_KEYS(KC_U, KC_G, KC_A){m_unicode(0x03B1);}; // Alpha
101SEQ_THREE_KEYS(KC_U, KC_G, KC_B){m_unicode(0x03B2);}; // Beta
102SEQ_THREE_KEYS(KC_U, KC_G, KC_G){m_unicode(0x03B3);}; // Gamma
103SEQ_THREE_KEYS(KC_U, KC_G, KC_P){m_unicode(0x03C0);}; // Pi
104SEQ_THREE_KEYS(KC_U, KC_G, KC_D){m_unicode(0x03B4);}; // Delta
105
106//Zother
107SEQ_THREE_KEYS(KC_U, KC_Z, KC_C){m_unicode(0x2601);}; // Cloud
108SEQ_THREE_KEYS(KC_U, KC_Z, KC_S){m_unicode(0x263C);}; // Sun
109SEQ_THREE_KEYS(KC_U, KC_Z, KC_R){m_unicode(0x2602);}; // Rain
110SEQ_THREE_KEYS(KC_U, KC_Z, KC_K){m_unicode(0x2620);}; // sKull
111SEQ_THREE_KEYS(KC_U, KC_Z, KC_R){m_unicode(0x267A);}; // rEcycle
112SEQ_THREE_KEYS(KC_U, KC_Z, KC_U){m_unicode(0x1F44D);}; // thumbsUp
113SEQ_THREE_KEYS(KC_U, KC_Z, KC_D){m_unicode(0x1F44E);}; // thumbsDown
114SEQ_THREE_KEYS(KC_U, KC_Z, KC_P){m_unicode(0x1F4A9);}; // Poo