From b0ade6dc9838d4112cbc3093ac3033aa81ef172d Mon Sep 17 00:00:00 2001 From: coderkun Date: Wed, 28 Dec 2016 20:08:45 +0100 Subject: [PATCH 01/86] =?UTF-8?q?Fix=20return=20value=20of=20hex=5Fto=5Fke?= =?UTF-8?q?ycode()=20function=20in=20keymap=20=E2=80=9Ccoderkun=5Fneo2?= =?UTF-8?q?=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index b62b14449f..9b33bbd6d0 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -294,11 +294,10 @@ void unicode_input_start (void) { // Override method to use NEO_A instead of KC_A uint16_t hex_to_keycode(uint8_t hex) { - if (hex == 0x0) { + if(hex == 0x0) { return KC_0; - } else if (hex < 0xA) { - return KC_1 + (hex - 0x1); - } else { + } + else if(hex >= 0xA) { switch(hex) { case 0xA: return NEO_A; @@ -314,4 +313,6 @@ uint16_t hex_to_keycode(uint8_t hex) return NEO_F; } } + + return KC_1 + (hex - 0x1); } From c74f47555cd77e5d26090e18e33fb4308ebc4ce5 Mon Sep 17 00:00:00 2001 From: coderkun Date: Sat, 1 Apr 2017 11:05:35 +0200 Subject: [PATCH 02/86] =?UTF-8?q?Add=20keymap=20diagrams=20to=20readme=20o?= =?UTF-8?q?f=20keymap=20=E2=80=9Ccoderkun=5Fneo2=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ergodox/keymaps/coderkun_neo2/readme.md | 123 ++++++++++++++++-- 1 file changed, 114 insertions(+), 9 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md index 2a4d3a535b..7eb504307c 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md +++ b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md @@ -7,15 +7,6 @@ The main goal of the default layer is to provide a complete symmetric layout wit It also features a layer for additional keys like F-keys (F1 – F12), some mouse keys and (hopefully in the near future) some useful Unicode symbols. -## Layers - -0. Default layer for Neo2 -1. Poor man’s QWERTZ -2. Poor man’s Neo -3. F-keys, mouse keys und Unicode symbols -4. Neo’s software layers 4 rebuilt in hardware - - ## Build 1. Enable Unicode in Makefile @@ -29,3 +20,117 @@ It also features a layer for additional keys like F-keys (F1 – F12), some mous make clean make KEYMAP=coderkun_neo2 ``` + + +## Keymap + +0. Default layer for Neo2 +1. Poor man’s QWERTZ +2. Poor man’s Neo +3. F-keys, mouse keys und Unicode symbols +4. Neo’s software layers 4 rebuilt in hardware + + +### Layer 0: Default layer for Neo2 + + ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │ + ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + │ Y │ X │ V │ L │ C │ W │ HOM │ │ END │ K │ H │ G │ F │ Q │ ß │ + ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + │ Mod3 │ U │ I │ A │ E │ O ├─────┤ ├─────┤ S │ N │ R │ T │ D │ Mod3 │ + ├───────┼─────┼─────┼─────╄─────╃─────┤ TL2 │ │ TL3 ├─────╄─────╃─────┼─────┼─────┼───────┤ + │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │ + └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + │ CTL │ ALT │ MO1 │ Win │ Mod4│ │ Mod4│ Win │ MO1 │ Alt │ CTL │ + └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + │ ← │ ↑ │ │ ↓ │ → │ + ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + │ │ │ ─ │ │ ─ │ │ │ + │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │ + │ │ │ HYP │ │ MEH │ │ │ + └─────┴─────┴─────┘ └─────┴─────┴─────┘ + + +### Layer 1: Poor man’s QWERTZ + + ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │ + ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + │ C │ P │ T │ F │ K │ L │ HOM │ │ END │ B │ A │ S │ G │ V │ Y │ + ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + │ Mod3 │ D │ H │ Ö │ O │ I ├─────┤ ├─────┤ U │ - │ Z │ E │ X │ Mod3 │ + ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ + │ LSHFT │ Ä │ Q │ R │ W │ N │ │ │ │ J │ M │ , │ . │ ẞ │ Shift │ + └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ Alt │ CTL │ + └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + │ ← │ ↑ │ │ ↓ │ → │ + ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + │ │ │ ─ │ │ ─ │ │ │ + │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │ + │ │ │ HYP │ │ MEH │ │ │ + └─────┴─────┴─────┘ └─────┴─────┴─────┘ + + +### Layer 2: Poor man’s Neo + + ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + │ TAB │ 1 │ 2 │ 3 │ 4 │ 5 │ ` │ │ ´ │ 6 │ 7 │ 8 │ 9 │ 0 │ BKSPC │ + ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + │ Y │ X │ V │ L │ C │ W │ HOM │ │ END │ K │ H │ G │ F │ Q │ ß │ + ├───────┼─────┼─────┼─────╆─────╅─────┤ E │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + │ Mod3 │ U │ I │ A │ E │ O ├─────┤ ├─────┤ S │ N │ R │ T │ D │ Mod3 │ + ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ + │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │ + └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ Alt │ CTL │ + └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + │ ← │ ↑ │ │ ↓ │ → │ + ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + │ │ │ ─ │ │ ─ │ │ │ + │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │ + │ │ │ HYP │ │ MEH │ │ │ + └─────┴─────┴─────┘ └─────┴─────┴─────┘ + + +### Layer 3: F-keys, mouse keys und Unicode symbols + + ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + │ │ ┌ │ ┬ │ ┐ │ ─ │ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │ + ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + │ │ ├ │ ┼ │ ┤ │ ✓ │ ✕ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │ + ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ + │ │ └ │ ┴ │ ┘ │ ↔ │ ⇔ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ + └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ + └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + │ Ms← │ Ms↑ │ │ Ms↓ │ Ms→ │ + ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + │ │ │ MLC │ │ MRC │ │ │ + │ │ ├─────┤ ├─────┤ │ │ + │ │ │ │ │ │ │ │ + └─────┴─────┴─────┘ └─────┴─────┴─────┘ + + +### Layer 4: Neo’s software layers 4 rebuilt in hardware + + ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ + │ │ PgUp│ BSpc│ ↑ │ Del │ PgDn│ │ │ │ │ 7 │ 8 │ 9 │ + │ − │ + ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ + │ │ Home│ ← │ ↓ │ → │ End ├─────┤ ├─────┤ │ 4 │ 5 │ 6 │ , │ . │ + ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ + │ │ Esc │ Tab │ Ins │ Ret │ Undo│ │ │ │ │ 1 │ 2 │ 3 │ │ │ + └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ + │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ + └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ + │ │ │ │ │ │ + ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ + │ │ │ │ │ │ │ │ + │ │ ├─────┤ ├─────┤ │ │ + │ │ │ │ │ │ │ │ + └─────┴─────┴─────┘ └─────┴─────┴─────┘ From 021edb6ec614ad65127859161cffc1b17fb376d6 Mon Sep 17 00:00:00 2001 From: coderkun Date: Sat, 1 Apr 2017 12:00:39 +0200 Subject: [PATCH 03/86] =?UTF-8?q?Add=20several=20Unicode=20symbols=20to=20?= =?UTF-8?q?keymap=20=E2=80=9Ccoderkun=5Fneo2=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ergodox/keymaps/coderkun_neo2/keymap.c | 32 +++++++++---------- .../ergodox/keymaps/coderkun_neo2/readme.md | 8 ++--- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index ff6d38f301..31905d3987 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -135,13 +135,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Layer 3: F-keys, Mouse and Unicode * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ - * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + * │ │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │ * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ - * │ │ ┌ │ ┬ │ ┐ │ ─ │ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │ + * │ │ ┌ │ ┬ │ ┐ │ ─ │ │ │ │ │ │ ↔ │ ← │ → │ ↑ │ ↓ │ │ * ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ - * │ │ ├ │ ┼ │ ┤ │ ✓ │ ✕ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │ + * │ │ ├ │ ┼ │ ┤ │ 〈 │ 〉 ├─────┤ ├─────┤ │ ✓ │ ✕ │ • │ ∶ │ │ * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ - * │ │ └ │ ┴ │ ┘ │ ↔ │ ⇔ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ + * │ │ └ │ ┴ │ ┘ │ │ │ │ │ │ ⇔ │ ⇐ │ ⇒ │ ⇑ │ ⇓ │ │ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ * │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ @@ -154,23 +154,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [FMU] = KEYMAP( // left hand - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, UC(0x250C),UC(0x252C),UC(0x2510),UC(0x2500),UC(0x2502),KC_TRNS, - KC_TRNS, UC(0x251C),UC(0x253C),UC(0x2524),UC(0x2713),UC(0x2715), - KC_TRNS, UC(0x2514),UC(0x2534),UC(0x2518),UC(0x2194),UC(0x21D4),KC_TRNS, - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_MS_L, KC_MS_U, + KC_TRNS, UC(0x251C),UC(0x253C),UC(0x2524),UC(0x3008),UC(0x3009), + KC_TRNS, UC(0x2514),UC(0x2534),UC(0x2518),KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_MS_L, KC_MS_U, KC_BTN1, - KC_TRNS,KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, // right hand - KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, - KC_TRNS, KC_TRNS,KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, - KC_TRNS,KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS, - KC_TRNS, KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS, - KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_TRNS, UC(0x2194),UC(0x2190),UC(0x2192),UC(0x2191),UC(0x2193),KC_TRNS, + KC_TRNS, UC(0x2713),UC(0x2715),UC(0x2022),UC(0x2236),KC_TRNS, + KC_TRNS, UC(0x21D4),UC(0x21D0),UC(0x21D2),UC(0x21D1),UC(0x21D3),KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_D, KC_MS_R, KC_BTN2, - KC_TRNS, KC_TRNS,KC_TRNS + KC_TRNS, KC_TRNS, KC_TRNS ), /* Layer 4: Neo’s software layer 4 rebuilt in Hardware diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md index 7eb504307c..27ec805adc 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md +++ b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md @@ -97,13 +97,13 @@ It also features a layer for additional keys like F-keys (F1 – F12), some mous ### Layer 3: F-keys, mouse keys und Unicode symbols ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐ - │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + │ │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ │ ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤ - │ │ ┌ │ ┬ │ ┐ │ ─ │ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │ + │ │ ┌ │ ┬ │ ┐ │ ─ │ │ │ │ │ │ ↔ │ ← │ → │ ↑ │ ↓ │ │ ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤ - │ │ ├ │ ┼ │ ┤ │ ✓ │ ✕ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │ + │ │ ├ │ ┼ │ ┤ │ 〈 │ 〉 ├─────┤ ├─────┤ │ ✓ │ ✕ │ • │ ∶ │ │ ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ - │ │ └ │ ┴ │ ┘ │ ↔ │ ⇔ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │ + │ │ └ │ ┴ │ ┘ │ │ │ │ │ │ ⇔ │ ⇐ │ ⇒ │ ⇑ │ ⇓ │ │ └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │ └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ From 049f906b5e4175b4392518f2dbee34f973a53a3e Mon Sep 17 00:00:00 2001 From: coderkun Date: Sat, 1 Apr 2017 12:17:41 +0200 Subject: [PATCH 04/86] =?UTF-8?q?Fix=20keymap=20=E2=80=9Ccoderkun=5Fneo?= =?UTF-8?q?=E2=80=9D=20to=20use=20LALT=20instead=20of=20RALT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index 31905d3987..3b82b7ce06 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ├───────┼─────┼─────┼─────╄─────╃─────┤ TL2 │ │ TL3 ├─────╄─────╃─────┼─────┼─────┼───────┤ * │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ - * │ CTL │ ALT │ MO1 │ Win │ Mod4│ │ Mod4│ Win │ MO1 │ Alt │ CTL │ + * │ CTL │ ALT │ MO1 │ Win │ Mod4│ │ Mod4│ Win │ MO1 │ ALT │ CTL │ * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ * │ ← │ ↑ │ │ ↓ │ → │ * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ @@ -46,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_END, NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS, NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_L1_R, TG(PMN), NEO_B, NEO_M, KC_COMM,KC_DOT, NEO_J, KC_RSFT, - NEO_L2_R,KC_RGUI,MO(FMU),KC_RALT,KC_RCTL, + NEO_L2_R,KC_RGUI,MO(FMU),KC_LALT,KC_RCTL, KC_DOWN, KC_RGHT, KC_MINS, MEH_T(KC_NO),KC_ENT,KC_SPC @@ -63,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ * │ LSHFT │ Ä │ Q │ R │ W │ N │ │ │ │ J │ M │ , │ . │ ẞ │ Shift │ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ - * │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ Alt │ CTL │ + * │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ ALT │ CTL │ * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ * │ ← │ ↑ │ │ ↓ │ → │ * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ @@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_END, DE_B, DE_A, DE_S, DE_G, DE_V, DE_Y, DE_U, DE_MINS,DE_Z, DE_E, DE_X, NEO_L1_R, KC_TRNS, DE_J, DE_M, DE_COMM,DE_DOT, DE_SS, KC_RSFT, - MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL, + MO(NHL),KC_RGUI,MO(FMU),KC_LALT,KC_RCTL, KC_DOWN, KC_RGHT, KC_MINS, MEH_T(KC_NO),KC_ENT,KC_SPC @@ -104,7 +104,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤ * │ LSHFT │ Ü │ Ö │ Ä │ P │ Z │ │ │ │ B │ M │ , │ . │ J │ Shift │ * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘ - * │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ Alt │ CTL │ + * │ CTL │ ALT │ MO1 │ Win │ MO4 │ │ M04 │ Win │ MO1 │ ALT │ CTL │ * └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘ * │ ← │ ↑ │ │ ↓ │ → │ * ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐ @@ -127,7 +127,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_END, DE_K, DE_H, DE_G, DE_F, DE_Q, DE_SS, DE_S, DE_N, DE_R, DE_T, DE_D, KC_NO, KC_TRNS, DE_B, DE_M, KC_COMM,KC_DOT, DE_J, KC_RSFT, - MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL, + MO(NHL),KC_RGUI,MO(FMU),KC_LALT,KC_RCTL, KC_DOWN, KC_RGHT, KC_MINS, MEH_T(KC_NO),KC_ENT,KC_SPC From 91b11bb4dd9a0c94fbc0feb6915acc4717357205 Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Wed, 12 Apr 2017 01:12:10 -0700 Subject: [PATCH 05/86] Update default layout This is a 2U Spacebar layout. Spacebar is between V and B. Issue: - RGB MOD does not seem to do anything --- keyboards/miuni32/keymaps/default/keymap.c | 68 ++++++++++++++++------ keyboards/miuni32/miuni32.h | 4 +- 2 files changed, 53 insertions(+), 19 deletions(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index 15e2fa45c0..5994dda40f 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -1,19 +1,26 @@ #include "miuni32.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] ={ - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_RSFT, KC_ENT}, - {KC_Z, KC_X, KC_C, KC_V, KC_V, KC_SPC, KC_B, KC_N, KC_M , MO(1), KC_RCTL} - }, -[1] ={ - {KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL}, - {KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_TRNS}, - {RGB_TOG, RGB_HUI, RGB_HUD, RGB_SAI, KC_TRNS, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, RGB_MOD}, - } -}; -const uint16_t PROGMEM fn_actions[] = { - + [0] ={ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(1, KC_DQUO), KC_ENT}, + {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, LT(2, KC_DOT), KC_RSFT} + }, + [1] ={ + {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_TRNS, KC_PGUP}, + {KC_TRNS, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_PGDN} + }, + [2] ={ + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_QUES}, + {KC_LPRN, KC_LCBR, KC_LBRC, KC_LABK, KC_NO, KC_TRNS, KC_SCLN, KC_COLN, KC_GRV, KC_TRNS, KC_SLSH} + }, + [3] ={ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {RGB_TOG, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS} + } }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) @@ -31,19 +38,46 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; - void matrix_init_user(void) { - } void matrix_scan_user(void) { - } bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; + return true; } void led_set_user(uint8_t usb_led) { + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + } diff --git a/keyboards/miuni32/miuni32.h b/keyboards/miuni32/miuni32.h index eecb17f81f..8e1b4a38c2 100644 --- a/keyboards/miuni32/miuni32.h +++ b/keyboards/miuni32/miuni32.h @@ -6,10 +6,10 @@ #define KEYMAP( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A ) { \ + K20, K21, K22, K23, K25, K26, K27, K28, K29, K2A ) { \ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A }, \ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A }, \ - { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A } \ + { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_NO, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A } \ } #endif From 592ff53e41afc93c5a5bc8e4b7fc3e6c89f76caa Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Wed, 12 Apr 2017 21:19:00 -0700 Subject: [PATCH 06/86] Enable RGB Animation --- keyboards/miuni32/config.h | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/miuni32/config.h b/keyboards/miuni32/config.h index 4f9b685518..9f26b2291e 100644 --- a/keyboards/miuni32/config.h +++ b/keyboards/miuni32/config.h @@ -163,6 +163,7 @@ along with this program. If not, see . #define RGB_DI_PIN D0 // The pin your RGB strip is wired to #define RGBLIGHT_TIMER // Require for fancier stuff (not compatible with audio) #define RGBLED_NUM 7 // Number of LEDs +#define RGBLIGHT_ANIMATIONS #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 #define RGBLIGHT_VAL_STEP 17 From dddbcc2af30d720542f1ae9bdcb03409df0cf1e7 Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Wed, 12 Apr 2017 22:11:08 -0700 Subject: [PATCH 07/86] Replace double quote with comma --- keyboards/miuni32/keymaps/default/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index 5994dda40f..6d345feff7 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -3,22 +3,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] ={ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(1, KC_DQUO), KC_ENT}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(1, KC_COMMA), KC_ENT}, {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, LT(2, KC_DOT), KC_RSFT} }, [1] ={ {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_TRNS, KC_PGUP}, + {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_TRNS, KC_PGUP}, {KC_TRNS, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_PGDN} }, [2] ={ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, - {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_QUES}, + {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_QUES}, {KC_LPRN, KC_LCBR, KC_LBRC, KC_LABK, KC_NO, KC_TRNS, KC_SCLN, KC_COLN, KC_GRV, KC_TRNS, KC_SLSH} }, [3] ={ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {RGB_TOG, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, {KC_TRNS, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS} } }; From f90321bdcbcbd196ee642cdd8cc31aa0f6ac121e Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Thu, 13 Apr 2017 09:25:05 -0700 Subject: [PATCH 08/86] Update keymap - hopefully more usable --- keyboards/miuni32/keymaps/default/keymap.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index 6d345feff7..acc0c6f3d3 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -3,23 +3,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] ={ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(1, KC_COMMA), KC_ENT}, - {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, LT(2, KC_DOT), KC_RSFT} + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA)}, + {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, LT(2, KC_DOT)} }, [1] ={ {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_BSPC}, - {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_TRNS, KC_PGUP}, - {KC_TRNS, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_PGDN} + {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_PGUP, KC_TRNS}, + {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RALT} }, [2] ={ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, - {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_QUES}, - {KC_LPRN, KC_LCBR, KC_LBRC, KC_LABK, KC_NO, KC_TRNS, KC_SCLN, KC_COLN, KC_GRV, KC_TRNS, KC_SLSH} + {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} }, [3] ={ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS} + {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} } }; From 4810a4a81220dc2a6e9c7dff0b41e1777f1d221d Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Thu, 13 Apr 2017 23:47:50 -0700 Subject: [PATCH 09/86] Add LCTL + L on Layer 2 --- keyboards/miuni32/keymaps/default/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index acc0c6f3d3..8275913642 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [2] ={ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, - {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_LCTL, KC_L, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} }, [3] ={ {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, From f076f16e1303a46632cad671a76216c97fdaef33 Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Thu, 13 Apr 2017 23:50:57 -0700 Subject: [PATCH 10/86] Add KC_T on Layer 2 --- keyboards/miuni32/keymaps/default/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index 8275913642..b058c360e2 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [2] ={ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, - {KC_TRNS, KC_LCTL, KC_L, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} + {KC_TRNS, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} }, [3] ={ {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, From a9f45960626297d467a6a137681ac2cb8a88949c Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Fri, 14 Apr 2017 00:02:25 -0700 Subject: [PATCH 11/86] Add TAB, N, LSFT on Layer 2 --- keyboards/miuni32/keymaps/default/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index b058c360e2..152bef7358 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [2] ={ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, - {KC_TRNS, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} + {KC_LSFT, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TAB, KC_N, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} }, [3] ={ {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, From ccabf70aeb6209bcb2bfdf6a4c166c1ab78c47e4 Mon Sep 17 00:00:00 2001 From: htang156 Date: Sun, 16 Apr 2017 13:40:03 -0700 Subject: [PATCH 12/86] Added keymap commets to default layout. --- keyboards/miuni32/keymaps/default/keymap.c | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index 152bef7358..21e728cc98 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -1,21 +1,57 @@ #include "miuni32.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Level 0: Default Layer + * ,---------------------------------------------------------------------------------------. + * | Q | W | E | R | T | Y | U | I | O | P | BSP | + * |---------------------------------------------------------------------------------------| + * | A | S | D | F | G | H | J | K | L | ENT |LT(1|,)| + * |---------------------------------------------------------------------------------------| + * |LT(3|Z)| X | C | V | NO | SPC | B | N | M | RSFT |LT(2|.)| + * |---------------------------------------------------------------------------------------| + */ [0] ={ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA)}, {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, LT(2, KC_DOT)} }, + /* Level 1: Numbers Layer + * ,---------------------------------------------------------------------------------------. + * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | BSP | + * |---------------------------------------------------------------------------------------| + * | TAB | 4 | 5 | 6 | - | + | = | UP | HOME | PGUP | TRNS | + * |---------------------------------------------------------------------------------------| + * | LATL | 1 | 2 | 3 | 0 | NO | LEFT | DOWN | RGHT | PGDN | RALT | + * |---------------------------------------------------------------------------------------| + */ [1] ={ {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_BSPC}, {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_PGUP, KC_TRNS}, {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RALT} }, + /* Level 2: Symbols Layer + * ,---------------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | ^ | & | * | - | + | = | + * |---------------------------------------------------------------------------------------| + * | { | } | [ | ] | TRNS | TRNS | \ | ; | : | ` | ? | + * |---------------------------------------------------------------------------------------| + * | LSFT | LCTL | L | T | TRNS | TAB | N | TRNS | TRNS | RCTL | TRNS | + * |---------------------------------------------------------------------------------------| + */ [2] ={ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, {KC_LSFT, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TAB, KC_N, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} }, + /* Level 3: RGB Layer + * ,---------------------------------------------------------------------------------------. + * | RESET | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | + * |---------------------------------------------------------------------------------------| + * |RGB_TOG|RGB_MOD|RGB_HUI|RGB_HUD| NO |RGB_SAI|RGB_SAD|RGB_VAI|RGB_VAD| TRNS | TRNS | + * |---------------------------------------------------------------------------------------| + * | TRNS | TRNS | TRNS | TRNS | NO | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | + * |---------------------------------------------------------------------------------------| + */ [3] ={ {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, {RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS}, From 1bab72383c803b8c48e3eef7224f6e79f409a014 Mon Sep 17 00:00:00 2001 From: htang156 Date: Sun, 16 Apr 2017 14:10:29 -0700 Subject: [PATCH 13/86] Added DEL and F1 to F12 keys --- keyboards/miuni32/keymaps/default/keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index 21e728cc98..e8055dcca5 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -17,7 +17,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* Level 1: Numbers Layer * ,---------------------------------------------------------------------------------------. - * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | BSP | + * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | DEL | * |---------------------------------------------------------------------------------------| * | TAB | 4 | 5 | 6 | - | + | = | UP | HOME | PGUP | TRNS | * |---------------------------------------------------------------------------------------| @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------------------------------| */ [1] ={ - {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL}, {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_PGUP, KC_TRNS}, {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RALT} }, @@ -45,17 +45,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* Level 3: RGB Layer * ,---------------------------------------------------------------------------------------. - * | RESET | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | + * | RESET | TRNS | TRNS | TRNS | TRNS | F1 | F2 | F3 | F4 | F5 | F6 | * |---------------------------------------------------------------------------------------| * |RGB_TOG|RGB_MOD|RGB_HUI|RGB_HUD| NO |RGB_SAI|RGB_SAD|RGB_VAI|RGB_VAD| TRNS | TRNS | * |---------------------------------------------------------------------------------------| - * | TRNS | TRNS | TRNS | TRNS | NO | TRNS | TRNS | TRNS | TRNS | TRNS | TRNS | + * | TRNS | TRNS | TRNS | TRNS | NO | F7 | F8 | F9 | F10 | F11 | F12 | * |---------------------------------------------------------------------------------------| */ [3] ={ - {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6}, {RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12} } }; From 3bfe4cdb4feeee9c9282839ee8a1fe497dac24b5 Mon Sep 17 00:00:00 2001 From: htang156 Date: Sun, 16 Apr 2017 14:19:51 -0700 Subject: [PATCH 14/86] Added END and other keymap file formatting. --- keyboards/miuni32/keymaps/default/keymap.c | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index e8055dcca5..ec87bfe73e 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -11,23 +11,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------------------------------| */ [0] ={ - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA)}, - {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, LT(2, KC_DOT)} + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA)}, + {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, LT(2, KC_DOT)} }, /* Level 1: Numbers Layer * ,---------------------------------------------------------------------------------------. * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | DEL | * |---------------------------------------------------------------------------------------| - * | TAB | 4 | 5 | 6 | - | + | = | UP | HOME | PGUP | TRNS | + * | TAB | 4 | 5 | 6 | - | + | HOME | UP | END | PGUP | TRNS | * |---------------------------------------------------------------------------------------| * | LATL | 1 | 2 | 3 | 0 | NO | LEFT | DOWN | RGHT | PGDN | RALT | * |---------------------------------------------------------------------------------------| */ [1] ={ - {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL}, - {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_EQL, KC_UP, KC_HOME, KC_PGUP, KC_TRNS}, - {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RALT} + {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS}, + {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RALT} }, /* Level 2: Symbols Layer * ,---------------------------------------------------------------------------------------. @@ -39,9 +39,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------------------------------| */ [2] ={ - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, - {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, - {KC_LSFT, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TAB, KC_N, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, + {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, + {KC_LSFT, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TAB, KC_N, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} }, /* Level 3: RGB Layer * ,---------------------------------------------------------------------------------------. @@ -53,9 +53,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------------------------------| */ [3] ={ - {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6}, - {RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12} + {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6}, + {RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12} } }; From 22afddb8e8b92873b0adcb0feb09061077e7b709 Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Sun, 16 Apr 2017 14:50:25 -0700 Subject: [PATCH 15/86] Replace RALT with RSFT --- keyboards/miuni32/keymaps/default/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/miuni32/keymaps/default/keymap.c b/keyboards/miuni32/keymaps/default/keymap.c index ec87bfe73e..f799b89291 100644 --- a/keyboards/miuni32/keymaps/default/keymap.c +++ b/keyboards/miuni32/keymaps/default/keymap.c @@ -21,13 +21,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------------------------------| * | TAB | 4 | 5 | 6 | - | + | HOME | UP | END | PGUP | TRNS | * |---------------------------------------------------------------------------------------| - * | LATL | 1 | 2 | 3 | 0 | NO | LEFT | DOWN | RGHT | PGDN | RALT | + * | LATL | 1 | 2 | 3 | 0 | NO | LEFT | DOWN | RGHT | PGDN | RSHFT | * |---------------------------------------------------------------------------------------| */ [1] ={ {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL}, {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS}, - {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RALT} + {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RSFT} }, /* Level 2: Symbols Layer * ,---------------------------------------------------------------------------------------. From 7e930626eb5f69d6a4de0594c6f5930334d801f8 Mon Sep 17 00:00:00 2001 From: Adam YH Lee Date: Sun, 16 Apr 2017 15:02:11 -0700 Subject: [PATCH 16/86] Add a personal layout for adam Collectively we should keep on working on the "default" layout. I am adding my own layout to freely explore adjustments and new features. --- keyboards/miuni32/keymaps/adam-lee/Makefile | 21 ++++ keyboards/miuni32/keymaps/adam-lee/config.h | 8 ++ keyboards/miuni32/keymaps/adam-lee/keymap.c | 119 ++++++++++++++++++ .../miuni32/keymaps/adam-lee/keymap.c.backup | 42 +++++++ keyboards/miuni32/keymaps/adam-lee/readme.md | 1 + 5 files changed, 191 insertions(+) create mode 100644 keyboards/miuni32/keymaps/adam-lee/Makefile create mode 100644 keyboards/miuni32/keymaps/adam-lee/config.h create mode 100644 keyboards/miuni32/keymaps/adam-lee/keymap.c create mode 100644 keyboards/miuni32/keymaps/adam-lee/keymap.c.backup create mode 100644 keyboards/miuni32/keymaps/adam-lee/readme.md diff --git a/keyboards/miuni32/keymaps/adam-lee/Makefile b/keyboards/miuni32/keymaps/adam-lee/Makefile new file mode 100644 index 0000000000..88a3aea741 --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/miuni32/keymaps/adam-lee/config.h b/keyboards/miuni32/keymaps/adam-lee/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/miuni32/keymaps/adam-lee/keymap.c b/keyboards/miuni32/keymaps/adam-lee/keymap.c new file mode 100644 index 0000000000..f799b89291 --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/keymap.c @@ -0,0 +1,119 @@ +#include "miuni32.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Level 0: Default Layer + * ,---------------------------------------------------------------------------------------. + * | Q | W | E | R | T | Y | U | I | O | P | BSP | + * |---------------------------------------------------------------------------------------| + * | A | S | D | F | G | H | J | K | L | ENT |LT(1|,)| + * |---------------------------------------------------------------------------------------| + * |LT(3|Z)| X | C | V | NO | SPC | B | N | M | RSFT |LT(2|.)| + * |---------------------------------------------------------------------------------------| + */ + [0] ={ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, LT(1, KC_COMMA)}, + {LT(3, KC_Z), KC_X, KC_C, KC_V, KC_NO, KC_SPC, KC_B, KC_N, KC_M, KC_RSFT, LT(2, KC_DOT)} + }, + /* Level 1: Numbers Layer + * ,---------------------------------------------------------------------------------------. + * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | DEL | + * |---------------------------------------------------------------------------------------| + * | TAB | 4 | 5 | 6 | - | + | HOME | UP | END | PGUP | TRNS | + * |---------------------------------------------------------------------------------------| + * | LATL | 1 | 2 | 3 | 0 | NO | LEFT | DOWN | RGHT | PGDN | RSHFT | + * |---------------------------------------------------------------------------------------| + */ + [1] ={ + {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS}, + {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_RSFT} + }, + /* Level 2: Symbols Layer + * ,---------------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | ^ | & | * | - | + | = | + * |---------------------------------------------------------------------------------------| + * | { | } | [ | ] | TRNS | TRNS | \ | ; | : | ` | ? | + * |---------------------------------------------------------------------------------------| + * | LSFT | LCTL | L | T | TRNS | TAB | N | TRNS | TRNS | RCTL | TRNS | + * |---------------------------------------------------------------------------------------| + */ + [2] ={ + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL}, + {KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_BSLS, KC_SCLN, KC_COLN, KC_GRV, KC_QUES}, + {KC_LSFT, KC_LCTL, KC_L, KC_T, KC_TRNS, KC_TAB, KC_N, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS} + }, + /* Level 3: RGB Layer + * ,---------------------------------------------------------------------------------------. + * | RESET | TRNS | TRNS | TRNS | TRNS | F1 | F2 | F3 | F4 | F5 | F6 | + * |---------------------------------------------------------------------------------------| + * |RGB_TOG|RGB_MOD|RGB_HUI|RGB_HUD| NO |RGB_SAI|RGB_SAD|RGB_VAI|RGB_VAD| TRNS | TRNS | + * |---------------------------------------------------------------------------------------| + * | TRNS | TRNS | TRNS | TRNS | NO | F7 | F8 | F9 | F10 | F11 | F12 | + * |---------------------------------------------------------------------------------------| + */ + [3] ={ + {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6}, + {RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12} + } +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + +} diff --git a/keyboards/miuni32/keymaps/adam-lee/keymap.c.backup b/keyboards/miuni32/keymaps/adam-lee/keymap.c.backup new file mode 100644 index 0000000000..2f634fffbd --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/keymap.c.backup @@ -0,0 +1,42 @@ +#include "miuni32.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] ={ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_RSFT, KC_ENT}, + {KC_Z, KC_X, KC_C, KC_V, KC_V, KC_SPC, KC_B, KC_N, KC_M , MO(1), KC_RCTL} + }, +[1] ={ + {KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL}, + {KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_TRNS}, + {RGB_TOG, RGB_HUI, RGB_HUD, RGB_SAI, KC_TRNS, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, RGB_MOD}, + } +}; +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + keyevent_t event = record->event; + + switch (id) { + + } + return MACRO_NONE; +} + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/miuni32/keymaps/adam-lee/readme.md b/keyboards/miuni32/keymaps/adam-lee/readme.md new file mode 100644 index 0000000000..4cff8ef5a3 --- /dev/null +++ b/keyboards/miuni32/keymaps/adam-lee/readme.md @@ -0,0 +1 @@ +# The default keymap for miuni32 \ No newline at end of file From f9aa75fe9522f06ac39cfe4097bf314f37108c0b Mon Sep 17 00:00:00 2001 From: htang156 Date: Sun, 16 Apr 2017 15:31:00 -0700 Subject: [PATCH 17/86] Added ht_156 keymap files --- keyboards/miuni32/keymaps/ht_156/Makefile | 21 ++++ keyboards/miuni32/keymaps/ht_156/config.h | 8 ++ keyboards/miuni32/keymaps/ht_156/keymap.c | 109 +++++++++++++++++++++ keyboards/miuni32/keymaps/ht_156/readme.md | 1 + 4 files changed, 139 insertions(+) create mode 100644 keyboards/miuni32/keymaps/ht_156/Makefile create mode 100644 keyboards/miuni32/keymaps/ht_156/config.h create mode 100644 keyboards/miuni32/keymaps/ht_156/keymap.c create mode 100644 keyboards/miuni32/keymaps/ht_156/readme.md diff --git a/keyboards/miuni32/keymaps/ht_156/Makefile b/keyboards/miuni32/keymaps/ht_156/Makefile new file mode 100644 index 0000000000..88a3aea741 --- /dev/null +++ b/keyboards/miuni32/keymaps/ht_156/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/miuni32/keymaps/ht_156/config.h b/keyboards/miuni32/keymaps/ht_156/config.h new file mode 100644 index 0000000000..df06a26206 --- /dev/null +++ b/keyboards/miuni32/keymaps/ht_156/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif \ No newline at end of file diff --git a/keyboards/miuni32/keymaps/ht_156/keymap.c b/keyboards/miuni32/keymaps/ht_156/keymap.c new file mode 100644 index 0000000000..50dc724a6b --- /dev/null +++ b/keyboards/miuni32/keymaps/ht_156/keymap.c @@ -0,0 +1,109 @@ +#include "miuni32.h" + +#define BASE 0 +#define NUMBERS 1 +#define SYMBOLS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Level 0: Default Layer + * ,---------------------------------------------------------------------------------------. + * | Q | W | E | R | T | Y | U | I | O | P | BSP | + * |---------------------------------------------------------------------------------------| + * | A | S | D | F | G | H | J | K | L | ENT | RSFT | + * |---------------------------------------------------------------------------------------| + * |LT(2|Z)| X | C | V | B | SPC | N | M | , |LT(1|.)| RCTL | + * |---------------------------------------------------------------------------------------| + */ + [BASE] ={ + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_RSFT}, + {LT(2, KC_Z), KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_COMMA, LT(1, KC_DOT), KC_RCTL} + }, + /* Level 1: Numbers Layer + * ,---------------------------------------------------------------------------------------. + * | ESC | 7 | 8 | 9 | / | * | . | , | ( | ) | DEL | + * |---------------------------------------------------------------------------------------| + * | TAB | 4 | 5 | 6 | - | + | HOME | UP | END | INS | PGUP | + * |---------------------------------------------------------------------------------------| + * | LATL | 1 | 2 | 3 | 0 | ENT | LEFT | DOWN | RGHT | !TRNS!| PGDN | + * |---------------------------------------------------------------------------------------| + */ + [NUMBERS] ={ + {KC_ESC, KC_7, KC_8, KC_9, KC_SLSH, KC_ASTR, KC_DOT, KC_COMM, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_TAB, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, KC_HOME, KC_UP, KC_END, KC_INSERT, KC_PGUP}, + {KC_LALT, KC_1, KC_2, KC_3, KC_0, KC_ENT, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_PGDN} + }, + /* Level 2: Symbols Layer + * ,---------------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | ^ | & | * | _ | = | ? | + * |---------------------------------------------------------------------------------------| + * | RESET | LSFT | ~ | { | } | \ | | | ; | : | ` | " | + * |---------------------------------------------------------------------------------------| + * | !TRNS!| LCTL | TRNS | [ | ] | TAB | < | > | TRNS | RCTL | TRNS | + * |---------------------------------------------------------------------------------------| + */ + [SYMBOLS] ={ + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_UNDS, KC_EQL, KC_QUES}, + {RESET, KC_LSFT, KC_TILD, KC_LCBR, KC_RCBR, KC_BSLS, KC_PIPE, KC_SCLN, KC_COLN, KC_GRV, KC_DQUO}, + {KC_TRNS, KC_LCTL, KC_TRNS, KC_LBRC, KC_RBRC, KC_TAB, KC_LABK, KC_RABK, KC_TRNS, KC_RCTL, KC_TRNS} + } +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + } + return MACRO_NONE; +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + +} diff --git a/keyboards/miuni32/keymaps/ht_156/readme.md b/keyboards/miuni32/keymaps/ht_156/readme.md new file mode 100644 index 0000000000..e46cc6d539 --- /dev/null +++ b/keyboards/miuni32/keymaps/ht_156/readme.md @@ -0,0 +1 @@ +# ht_156's keymap for miuni32, using 33 keys From c4f93e237e81995bdff5e84acd440d2859836c66 Mon Sep 17 00:00:00 2001 From: htang156 Date: Sun, 16 Apr 2017 16:08:31 -0700 Subject: [PATCH 18/86] Added media layer for ht_156 --- keyboards/miuni32/keymaps/ht_156/keymap.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/keyboards/miuni32/keymaps/ht_156/keymap.c b/keyboards/miuni32/keymaps/ht_156/keymap.c index 50dc724a6b..3d9803984c 100644 --- a/keyboards/miuni32/keymaps/ht_156/keymap.c +++ b/keyboards/miuni32/keymaps/ht_156/keymap.c @@ -3,6 +3,7 @@ #define BASE 0 #define NUMBERS 1 #define SYMBOLS 2 +#define MEDIA 3 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Level 0: Default Layer @@ -11,13 +12,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------------------------------------------------------------------------------------| * | A | S | D | F | G | H | J | K | L | ENT | RSFT | * |---------------------------------------------------------------------------------------| - * |LT(2|Z)| X | C | V | B | SPC | N | M | , |LT(1|.)| RCTL | + * |LT(2|Z)|LT(3|X)| C | V | B | SPC | N | M | , |LT(1|.)| RCTL | * |---------------------------------------------------------------------------------------| */ [BASE] ={ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_RSFT}, - {LT(2, KC_Z), KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_COMMA, LT(1, KC_DOT), KC_RCTL} + {LT(2, KC_Z), LT(3, KC_X), KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_COMMA, LT(1, KC_DOT), KC_RCTL} }, /* Level 1: Numbers Layer * ,---------------------------------------------------------------------------------------. @@ -46,7 +47,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_UNDS, KC_EQL, KC_QUES}, {RESET, KC_LSFT, KC_TILD, KC_LCBR, KC_RCBR, KC_BSLS, KC_PIPE, KC_SCLN, KC_COLN, KC_GRV, KC_DQUO}, {KC_TRNS, KC_LCTL, KC_TRNS, KC_LBRC, KC_RBRC, KC_TAB, KC_LABK, KC_RABK, KC_TRNS, KC_RCTL, KC_TRNS} - } + }, + /* Level 3: Media Layer + * ,---------------------------------------------------------------------------------------. + * | TRNS | TRNS | TRNS | TRNS | TRNS | CALC | WREF | WFAV | MUTE | VOLD | VOLU | + * |---------------------------------------------------------------------------------------| + * | TRNS | TRNS | TRNS | TRNS | TRNS | WHOM | WBAK | WFWD | TRNS | STOP | PLAY | + * |---------------------------------------------------------------------------------------| + * | TRNS | !TRNS!| TRNS | TRNS | TRNS | MYCM | WSTP | WSCH | MSEL | MPRV | MNXT | + * |---------------------------------------------------------------------------------------| + */ + [MEDIA] ={ + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_WREF, KC_WFAV, KC_MUTE, KC_VOLD, KC_VOLU}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WHOM, KC_WBAK, KC_WFWD, KC_TRNS, KC_MSTP, KC_MPLY}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_WSTP, KC_WSCH, KC_MSEL, KC_MPRV, KC_MNXT} + } }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) From 4634e3802c14185850e14012c1a3e252b9cc53c3 Mon Sep 17 00:00:00 2001 From: htang156 Date: Sun, 16 Apr 2017 17:39:04 -0700 Subject: [PATCH 19/86] Added simple macros to test. --- keyboards/miuni32/keymaps/ht_156/keymap.c | 71 ++++++++++++++++++++--- 1 file changed, 62 insertions(+), 9 deletions(-) diff --git a/keyboards/miuni32/keymaps/ht_156/keymap.c b/keyboards/miuni32/keymaps/ht_156/keymap.c index 3d9803984c..a1e3841578 100644 --- a/keyboards/miuni32/keymaps/ht_156/keymap.c +++ b/keyboards/miuni32/keymaps/ht_156/keymap.c @@ -1,10 +1,17 @@ #include "miuni32.h" +// Keyboard layer definitions #define BASE 0 #define NUMBERS 1 #define SYMBOLS 2 #define MEDIA 3 +// Keyboard macro defintions +#define GIT_ST M(0) +#define GIT_PU M(1) +#define GIT_CM M(2) +#define HM_DIR M(3) + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Level 0: Default Layer * ,---------------------------------------------------------------------------------------. @@ -50,31 +57,77 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* Level 3: Media Layer * ,---------------------------------------------------------------------------------------. - * | TRNS | TRNS | TRNS | TRNS | TRNS | CALC | WREF | WFAV | MUTE | VOLD | VOLU | + * | TRNS | TRNS | GIT_ST| GIT_PU| GIT_CM| CALC | WREF | WFAV | MUTE | VOLD | VOLU | * |---------------------------------------------------------------------------------------| - * | TRNS | TRNS | TRNS | TRNS | TRNS | WHOM | WBAK | WFWD | TRNS | STOP | PLAY | + * | TRNS | TRNS | HM_DIR| TRNS | TRNS | WHOM | WBAK | WFWD | TRNS | STOP | PLAY | * |---------------------------------------------------------------------------------------| * | TRNS | !TRNS!| TRNS | TRNS | TRNS | MYCM | WSTP | WSCH | MSEL | MPRV | MNXT | * |---------------------------------------------------------------------------------------| */ [MEDIA] ={ - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_WREF, KC_WFAV, KC_MUTE, KC_VOLD, KC_VOLU}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WHOM, KC_WBAK, KC_WFWD, KC_TRNS, KC_MSTP, KC_MPLY}, + {KC_TRNS, KC_TRNS, GIT_ST, GIT_PU, GIT_CM, KC_CALC, KC_WREF, KC_WFAV, KC_MUTE, KC_VOLD, KC_VOLU}, + {KC_TRNS, KC_TRNS, HM_DIR, KC_TRNS, KC_TRNS, KC_WHOM, KC_WBAK, KC_WFWD, KC_TRNS, KC_MSTP, KC_MPLY}, {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_WSTP, KC_WSCH, KC_MSEL, KC_MPRV, KC_MNXT} } }; +void press_and_release_key(uint8_t code) +{ + register_code(code); + unregister_code(code); +} + +void press_and_release_mod_key(uint8_t mod, uint8_t code) +{ + register_code(mod); + register_code(code); + unregister_code(code); + unregister_code(mod); +} + const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { + switch(id) + { case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); + if (record->event.pressed) + { + return MACRO(T(G), T(I), T(T), T(SPC), + T(S), T(T), T(A), T(T), T(U), T(S), END); } break; + case 1: + if (record->event.pressed) + { + return MACRO(T(G), T(I), T(T), T(SPC), + T(P), T(U), T(L), T(L), END); + } + break; + case 2: + if (record->event.pressed) + { + return MACRO(T(G), T(I), T(T), T(SPC), + T(C), T(O), T(M), T(M), T(I), T(T), END); + } + break; + case 3: + if (record->event.pressed) + { + press_and_release_key(KC_C); + press_and_release_key(KC_D); + press_and_release_key(KC_SPC); + press_and_release_mod_key(KC_LSFT, KC_GRV); + press_and_release_key(KC_SLSH); + press_and_release_key(KC_Q); + press_and_release_key(KC_M); + press_and_release_key(KC_K); + press_and_release_mod_key(KC_LSFT, KC_MINS); + return MACRO(T(F), T(I), T(R), T(M), T(W), T(A), T(R), T(E), T(SLSH), + T(K), T(E), T(Y), T(B), T(O), T(A), T(R), T(D), T(S), T(SLSH), + T(M), T(I), T(U), T(N), T(I), T(3), T(2), T(SLSH), + T(K), T(E), T(Y), T(M), T(A), T(P), T(S), END); + } } return MACRO_NONE; }; From ce0efa6b9a92387af395fded796e8ccb8927b52d Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Wed, 19 Apr 2017 12:03:48 +0700 Subject: [PATCH 20/86] Fix LED sequence; bug fixes --- keyboards/handwired/promethium/config.h | 12 ++++++------ .../promethium/keymaps/priyadi/keymap.c | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h index a13406b0dd..04f7caa55c 100644 --- a/keyboards/handwired/promethium/config.h +++ b/keyboards/handwired/promethium/config.h @@ -205,7 +205,7 @@ enum led_sequence { LED_RSFT, LED_RCTL, - LED_RGUI, + LED_RALT, LED_SLSH, LED_SCLN, LED_P, @@ -213,9 +213,9 @@ enum led_sequence { LED_O, LED_L, LED_DOT, - LED_RALT, + LED_RGUI, - LED_EMOJI, + LED_GREEK, LED_COMM, LED_K, LED_I, @@ -244,7 +244,7 @@ enum led_sequence { LED_V, LED_NUM, - LED_PUNC, + LED_EMPTY, LED_C, LED_D, LED_E, @@ -252,9 +252,9 @@ enum led_sequence { LED_W, LED_S, LED_X, - LED_LALT, - LED_LGUI, + + LED_LALT, LED_Z, LED_A, LED_Q, diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index efa5d9756e..7a18b02fd4 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c @@ -434,10 +434,10 @@ const uint8_t PROGMEM LED_MODS[] = { }; const uint8_t PROGMEM LED_FN[] = { - LED_PUNC, + LED_EMPTY, LED_NUM, LED_FUN, - LED_EMOJI + LED_GREEK }; const uint8_t PROGMEM LED_INDICATORS[] = { @@ -632,6 +632,14 @@ void led_init(void) { // layer indicator led_set_layer_indicator(); led_set_default_layer_indicator(); + + // clicky + if (fauxclicky_enabled) { + rgbsps_set(LED_IND_AUDIO, 5, 11, 13); + } else { + rgbsps_set(LED_IND_AUDIO, 0, 0, 0); + } + rgbsps_send(); } @@ -1211,9 +1219,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case FC_TOG: #ifdef RGBSPS_ENABLE if (fauxclicky_enabled) { - rgbsps_set(LED_IND_AUDIO, 0, 0, 0); - } else { rgbsps_set(LED_IND_AUDIO, 5, 11, 13); + } else { + rgbsps_set(LED_IND_AUDIO, 0, 0, 0); } rgbsps_send(); #endif From f9d226ca50ba243133847d19893d2c3b844eec12 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Wed, 19 Apr 2017 12:35:05 +0700 Subject: [PATCH 21/86] tune clicks --- keyboards/handwired/promethium/promethium.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c index 8b1a0c71f2..544e94be59 100644 --- a/keyboards/handwired/promethium/promethium.c +++ b/keyboards/handwired/promethium/promethium.c @@ -4,9 +4,9 @@ #include "matrix.h" #include "musical_notes.h" -float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_F3, .03125); -float fauxclicky_released_note[2] = MUSICAL_NOTE(_C3, .03125); -float fauxclicky_beep_note[2] = MUSICAL_NOTE(_C3, .03125); +float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_C5, 0.25); +float fauxclicky_released_note[2] = MUSICAL_NOTE(_C4, 0.25); +float fauxclicky_beep_note[2] = MUSICAL_NOTE(_C6, 0.25); // cubic fit {3.3, 0}, {3.5, 2.9}, {3.6, 5}, {3.7, 8.6}, {3.8, 36}, {3.9, 62}, {4.0, 73}, {4.05, 83}, {4.1, 89}, {4.15, 94}, {4.2, 100} From cd30a60d0e4f108403b19ec4c1bc4270b54b8c27 Mon Sep 17 00:00:00 2001 From: Andrew Pritchard Date: Wed, 26 Apr 2017 15:29:39 -0700 Subject: [PATCH 22/86] Change to per-key eager debouncing for ErgoDox EZ. Empirically, waiting for N consecutive identical scans as a debouncing strategy doesn't work very well for the ErgoDox EZ where scans are very slow compared to most keyboards. Instead, debounce the signals by eagerly reporting a change as soon as one scan observes it, but then ignoring further changes from that key for the next N scans. This is implemented by keeping an extra matrix of uint8 countdowns, such that only keys whose countdown is currently zero are eligible to change. When we do observe a change, we bump that key's countdown to DEBOUNCE. During each scan, every nonzero countdown is decremented. With this approach to debouncing, much higher debounce constants are tolerable, because latency does not increase with the constant, and debounce countdowns on one key do not interfere with events on other keys. The only negative effect of increasing the constant is that the minimum duration of a keypress increases. Perhaps I'm just extremely unlucky w.r.t. key switch quality, but I saw occasional bounces even with DEBOUNCE=10; with 15, I've seen none so far. That's around 47ms, which seems like an absolutely insane amount of time for a key to be bouncy, but at least it works. --- keyboards/ergodox/ez/config.h | 2 +- keyboards/ergodox/ez/matrix.c | 62 +++++++++++++++++++++-------------- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/keyboards/ergodox/ez/config.h b/keyboards/ergodox/ez/config.h index a3347de45e..aa17c3e8d3 100644 --- a/keyboards/ergodox/ez/config.h +++ b/keyboards/ergodox/ez/config.h @@ -58,7 +58,7 @@ along with this program. If not, see . #define RGBW 1 /* Set 0 if debouncing isn't needed */ -#define DEBOUNCE 5 +#define DEBOUNCE 15 #define USB_MAX_POWER_CONSUMPTION 500 diff --git a/keyboards/ergodox/ez/matrix.c b/keyboards/ergodox/ez/matrix.c index 43f5152591..21b60a542e 100644 --- a/keyboards/ergodox/ez/matrix.c +++ b/keyboards/ergodox/ez/matrix.c @@ -53,11 +53,14 @@ along with this program. If not, see . #ifndef DEBOUNCE # define DEBOUNCE 5 #endif -static uint8_t debouncing = DEBOUNCE; /* matrix state(1:on, 0:off) */ static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +// Debouncing: store for each key the number of scans until it's eligible to +// change. When scanning the matrix, ignore any changes in keys that have +// already changed in the last DEBOUNCE scans. +static uint8_t debounce_matrix[MATRIX_ROWS * MATRIX_COLS]; static matrix_row_t read_cols(uint8_t row); static void init_cols(void); @@ -113,7 +116,9 @@ void matrix_init(void) // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { matrix[i] = 0; - matrix_debouncing[i] = 0; + for (uint8_t j=0; j < MATRIX_COLS; ++j) { + debounce_matrix[i * MATRIX_COLS + j] = 0; + } } #ifdef DEBUG_MATRIX_SCAN_RATE @@ -134,14 +139,36 @@ void matrix_power_up(void) { // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { matrix[i] = 0; - matrix_debouncing[i] = 0; } #ifdef DEBUG_MATRIX_SCAN_RATE matrix_timer = timer_read32(); matrix_scan_count = 0; #endif +} +// Returns a matrix_row_t whose bits are set if the corresponding key should be +// eligible to change in this scan. +matrix_row_t debounce_mask(uint8_t row) { + matrix_row_t result = 0; + for (uint8_t j=0; j < MATRIX_COLS; ++j) { + if (debounce_matrix[row * MATRIX_COLS + j]) { + --debounce_matrix[row * MATRIX_COLS + j]; + } else { + result |= (1 << j); + } + } + return result; +} + +// Report changed keys in the given row. Resets the debounce countdowns +// corresponding to each set bit in 'change' to DEBOUNCE. +void debounce_report(matrix_row_t change, uint8_t row) { + for (uint8_t i = 0; i < MATRIX_COLS; ++i) { + if (change & (1 << i)) { + debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE; + } + } } uint8_t matrix_scan(void) @@ -178,26 +205,12 @@ uint8_t matrix_scan(void) for (uint8_t i = 0; i < MATRIX_ROWS; i++) { select_row(i); wait_us(30); // without this wait read unstable value. - matrix_row_t cols = read_cols(i); - if (matrix_debouncing[i] != cols) { - matrix_debouncing[i] = cols; - if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); - } - debouncing = DEBOUNCE; - } - unselect_rows(); - } + matrix_row_t mask = debounce_mask(i); + matrix_row_t cols = (read_cols(i) & mask) | (matrix[i] & ~mask); + debounce_report(cols ^ matrix[i], i); + matrix[i] = cols; - if (debouncing) { - if (--debouncing) { - wait_us(1); - // this should be wait_ms(1) but has been left as-is at EZ's request - } else { - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - matrix[i] = matrix_debouncing[i]; - } - } + unselect_rows(); } matrix_scan_quantum(); @@ -205,9 +218,8 @@ uint8_t matrix_scan(void) return 1; } -bool matrix_is_modified(void) +bool matrix_is_modified(void) // deprecated and evidently not called. { - if (debouncing) return false; return true; } From 425e7348d8b6fa40dd7aa3f4c99dbbff6f5babd8 Mon Sep 17 00:00:00 2001 From: htang156 Date: Thu, 27 Apr 2017 23:12:43 -0700 Subject: [PATCH 23/86] Modified ht_156 keymap --- keyboards/miuni32/keymaps/ht_156/keymap.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/keyboards/miuni32/keymaps/ht_156/keymap.c b/keyboards/miuni32/keymaps/ht_156/keymap.c index a1e3841578..e40180d49e 100644 --- a/keyboards/miuni32/keymaps/ht_156/keymap.c +++ b/keyboards/miuni32/keymaps/ht_156/keymap.c @@ -57,17 +57,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }, /* Level 3: Media Layer * ,---------------------------------------------------------------------------------------. - * | TRNS | TRNS | GIT_ST| GIT_PU| GIT_CM| CALC | WREF | WFAV | MUTE | VOLD | VOLU | + * |RGB_TOG|RGB_HUI|RGB_SAI|RGB_VAI| GIT_CM| CALC | WREF | WFAV | MUTE | VOLD | VOLU | * |---------------------------------------------------------------------------------------| - * | TRNS | TRNS | HM_DIR| TRNS | TRNS | WHOM | WBAK | WFWD | TRNS | STOP | PLAY | + * |RGB_MOD|RGB_HUD|RGB_SAD|RGB_VAD| GIT_ST| WHOM | WBAK | WFWD | TRNS | STOP | PLAY | * |---------------------------------------------------------------------------------------| - * | TRNS | !TRNS!| TRNS | TRNS | TRNS | MYCM | WSTP | WSCH | MSEL | MPRV | MNXT | + * | TRNS | !TRNS!| TRNS | HM_DIR| GIT_PU| MYCM | WSTP | WSCH | MSEL | MPRV | MNXT | * |---------------------------------------------------------------------------------------| */ [MEDIA] ={ - {KC_TRNS, KC_TRNS, GIT_ST, GIT_PU, GIT_CM, KC_CALC, KC_WREF, KC_WFAV, KC_MUTE, KC_VOLD, KC_VOLU}, - {KC_TRNS, KC_TRNS, HM_DIR, KC_TRNS, KC_TRNS, KC_WHOM, KC_WBAK, KC_WFWD, KC_TRNS, KC_MSTP, KC_MPLY}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MYCM, KC_WSTP, KC_WSCH, KC_MSEL, KC_MPRV, KC_MNXT} + {RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, GIT_CM, KC_CALC, KC_WREF, KC_WFAV, KC_MUTE, KC_VOLD, KC_VOLU}, + {RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, GIT_ST, KC_WHOM, KC_WBAK, KC_WFWD, KC_TRNS, KC_MSTP, KC_MPLY}, + {KC_TRNS, KC_TRNS, KC_TRNS, HM_DIR, GIT_PU, KC_MYCM, KC_WSTP, KC_WSCH, KC_MSEL, KC_MPRV, KC_MNXT} } }; @@ -114,7 +114,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case 3: if (record->event.pressed) { - press_and_release_key(KC_C); + /*press_and_release_key(KC_C); press_and_release_key(KC_D); press_and_release_key(KC_SPC); press_and_release_mod_key(KC_LSFT, KC_GRV); @@ -122,8 +122,12 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) press_and_release_key(KC_Q); press_and_release_key(KC_M); press_and_release_key(KC_K); - press_and_release_mod_key(KC_LSFT, KC_MINS); - return MACRO(T(F), T(I), T(R), T(M), T(W), T(A), T(R), T(E), T(SLSH), + press_and_release_mod_key(KC_LSFT, KC_MINS);*/ + return MACRO(I(0), + T(C), T(D), T(SPC), + D(LSFT), T(GRV), U(LSFT), T(SLSH), + T(Q), T(M), T(K), D(LSFT), T(MINS), U(LSFT), + T(F), T(I), T(R), T(M), T(W), T(A), T(R), T(E), T(SLSH), T(K), T(E), T(Y), T(B), T(O), T(A), T(R), T(D), T(S), T(SLSH), T(M), T(I), T(U), T(N), T(I), T(3), T(2), T(SLSH), T(K), T(E), T(Y), T(M), T(A), T(P), T(S), END); From d8f1949029297b0bec395606bbaedf4f6d4c0760 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sat, 29 Apr 2017 13:21:27 +0700 Subject: [PATCH 24/86] Promethium update: demo LED, fix PS2 delay, fix LED ordering, change click frequency --- keyboards/handwired/promethium/config.h | 38 +++++++++---------- .../promethium/keymaps/priyadi/config.h | 1 + .../promethium/keymaps/priyadi/keymap.c | 34 ++++++++++++++++- keyboards/handwired/promethium/promethium.c | 4 +- 4 files changed, 55 insertions(+), 22 deletions(-) diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h index 04f7caa55c..efb9ebdd74 100644 --- a/keyboards/handwired/promethium/config.h +++ b/keyboards/handwired/promethium/config.h @@ -153,7 +153,7 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION -#define PS2_INIT_DELAY 3000 +#define PS2_MOUSE_INIT_DELAY 2000 #define BATTERY_PIN 9 #define BATTERY_POLL 30000 #define MAX_VOLTAGE 4.2 @@ -234,35 +234,35 @@ enum led_sequence { LED_TRACKPOINT2, LED_TRACKPOINT1, - LED_LSPC, - LED_B, - LED_G, LED_T, + LED_G, + LED_B, + LED_LSPC, - LED_R, - LED_F, - LED_V, LED_NUM, + LED_V, + LED_F, + LED_R, - LED_EMPTY, - LED_C, - LED_D, LED_E, + LED_D, + LED_C, + LED_EMPTY, - LED_W, - LED_S, - LED_X, LED_LGUI, + LED_X, + LED_S, + LED_W, - LED_LALT, - LED_Z, - LED_A, LED_Q, + LED_A, + LED_Z, + LED_LALT, - LED_TAB, - LED_ESC, - LED_LSFT, LED_LCTL, + LED_LSFT, + LED_ESC, + LED_TAB, LED_TOTAL }; diff --git a/keyboards/handwired/promethium/keymaps/priyadi/config.h b/keyboards/handwired/promethium/keymaps/priyadi/config.h index 3f5dd5817d..fa86e22479 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/config.h +++ b/keyboards/handwired/promethium/keymaps/priyadi/config.h @@ -14,6 +14,7 @@ #define PREVENT_STUCK_MODIFIERS #define RGBSPS_ENABLE +#define RGBSPS_DEMO_ENABLE #define UNICODE_TYPE_DELAY 0 diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index 7a18b02fd4..4cc3d6d60a 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c @@ -144,6 +144,7 @@ enum planck_keycodes { #ifndef MODULE_ADAFRUIT_BLE OUT_BT, #endif + RGBDEMO, KEYCODE_END }; @@ -478,6 +479,27 @@ void led_turnoff_keys(void) { } } +#ifdef RGBSPS_DEMO_ENABLE +void led_demo(void) { + rgbsps_set(LED_IND_LINUX, 15, 15, 15); + rgbsps_set(LED_IND_APPLE, 15, 15, 15); + rgbsps_set(LED_IND_WINDOWS, 15, 15, 15); + rgbsps_set(LED_IND_QWERTY, 15, 10, 0); + rgbsps_set(LED_IND_ALT, 15, 10, 0); + rgbsps_set(LED_IND_AUDIO, 5, 11, 13); + rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15); + rgbsps_set(LED_IND_USB, 15, 15, 15); + rgbsps_set(LED_IND_CAPSLOCK, 15, 0, 0); + rgbsps_set(LED_IND_GUI, 15, 0, 15); + rgbsps_set(LED_IND_FUN, 15, 0, 0); + rgbsps_set(LED_IND_NUM, 0, 0, 15); + rgbsps_set(LED_IND_PUNC, 0, 15, 0); + rgbsps_set(LED_IND_GREEK, 0, 15, 15); + rgbsps_set(LED_IND_EMOJI, 15, 15, 0); + rgbsps_send(); +} +#endif + void led_reset(void) { switch (glow_mode) { case GLOW_NONE: @@ -634,11 +656,14 @@ void led_init(void) { led_set_default_layer_indicator(); // clicky +#ifdef FAUXCLICKY_ENABLE if (fauxclicky_enabled) { rgbsps_set(LED_IND_AUDIO, 5, 11, 13); } else { rgbsps_set(LED_IND_AUDIO, 0, 0, 0); } +#endif + rgbsps_send(); } @@ -919,7 +944,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_SYS] = KEYMAP( - DEBUG, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + DEBUG, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, RGBDEMO, XXXXXXX, FC_TOG, XXXXXXX, DVORAK, XXXXXXX, GLOW, XXXXXXX, XXXXXXX, WORKMAN, LINUX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BT, NORMAN, OSX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, @@ -1228,6 +1253,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; break; #endif + +#ifdef RGBSPS_DEMO_ENABLE + case RGBDEMO: + led_demo(); + return false; + break; +#endif } return true; } diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c index 544e94be59..3cc0f5a8c8 100644 --- a/keyboards/handwired/promethium/promethium.c +++ b/keyboards/handwired/promethium/promethium.c @@ -4,8 +4,8 @@ #include "matrix.h" #include "musical_notes.h" -float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_C5, 0.25); -float fauxclicky_released_note[2] = MUSICAL_NOTE(_C4, 0.25); +float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_A4, 0.0625); +float fauxclicky_released_note[2] = MUSICAL_NOTE(_A4, 0.0625); float fauxclicky_beep_note[2] = MUSICAL_NOTE(_C6, 0.25); // cubic fit {3.3, 0}, {3.5, 2.9}, {3.6, 5}, {3.7, 8.6}, {3.8, 36}, {3.9, 62}, {4.0, 73}, {4.05, 83}, {4.1, 89}, {4.15, 94}, {4.2, 100} From 18b4d24cc304bdc8882deee99b4ff765a718a5c3 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 29 Apr 2017 23:45:27 +0300 Subject: [PATCH 25/86] Add possibility to override the command to execute when flashing --- tmk_core/avr.mk | 42 +++++++++++++++++++++++------------------- tmk_core/chibios.mk | 4 +++- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk index 5df539def5..ccecdb1929 100644 --- a/tmk_core/avr.mk +++ b/tmk_core/avr.mk @@ -89,9 +89,9 @@ DEBUG_HOST = localhost #============================================================================ # Autodecct teensy loader ifneq (, $(shell which teensy-loader-cli 2>/dev/null)) - TEENSY_LOADER_CLI = teensy-loader-cli + TEENSY_LOADER_CLI ?= teensy-loader-cli else - TEENSY_LOADER_CLI = teensy_loader_cli + TEENSY_LOADER_CLI ?= teensy_loader_cli endif # Program the device. @@ -100,43 +100,47 @@ program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep teensy: $(BUILD_DIR)/$(TARGET).hex $(TEENSY_LOADER_CLI) -mmcu=$(MCU) -w -v $(BUILD_DIR)/$(TARGET).hex + +BATCHISP ?= batchisp flip: $(BUILD_DIR)/$(TARGET).hex - batchisp -hardware usb -device $(MCU) -operation erase f - batchisp -hardware usb -device $(MCU) -operation loadbuffer $(BUILD_DIR)/$(TARGET).hex program - batchisp -hardware usb -device $(MCU) -operation start reset 0 + $(BATCHISP) -hardware usb -device $(MCU) -operation erase f + $(BATCHISP) -hardware usb -device $(MCU) -operation loadbuffer $(BUILD_DIR)/$(TARGET).hex program + $(BATCHISP) -hardware usb -device $(MCU) -operation start reset 0 + +DFU_PROGRAMMER ?= dfu-programmer dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter - until dfu-programmer $(MCU) get bootloader-version; do\ + until $(DFU_PROGRAMMER) $(MCU) get bootloader-version; do\ echo "Error: Bootloader not found. Trying again in 5s." ;\ sleep 5 ;\ done -ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) - dfu-programmer $(MCU) erase --force +ifneq (, $(findstring 0.7, $(shell $(DFU_PROGRAMMER) --version 2>&1))) + $(DFU_PROGRAMMER) $(MCU) erase --force else - dfu-programmer $(MCU) erase + $(DFU_PROGRAMMER) $(MCU) erase endif - dfu-programmer $(MCU) flash $(BUILD_DIR)/$(TARGET).hex - dfu-programmer $(MCU) reset + $(DFU_PROGRAMMER) $(MCU) flash $(BUILD_DIR)/$(TARGET).hex + $(DFU_PROGRAMMER) $(MCU) reset dfu-start: - dfu-programmer $(MCU) reset - dfu-programmer $(MCU) start + $(DFU_PROGRAMMER) $(MCU) reset + $(DFU_PROGRAMMER) $(MCU) start flip-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep $(COPY) $(BUILD_DIR)/$(TARGET).eep $(BUILD_DIR)/$(TARGET)eep.hex - batchisp -hardware usb -device $(MCU) -operation memory EEPROM erase - batchisp -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(BUILD_DIR)/$(TARGET)eep.hex program - batchisp -hardware usb -device $(MCU) -operation start reset 0 + $(BATCHISP) -hardware usb -device $(MCU) -operation memory EEPROM erase + $(BATCHISP) -hardware usb -device $(MCU) -operation memory EEPROM loadbuffer $(BUILD_DIR)/$(TARGET)eep.hex program + $(BATCHISP) -hardware usb -device $(MCU) -operation start reset 0 $(REMOVE) $(BUILD_DIR)/$(TARGET)eep.hex dfu-ee: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1))) - dfu-programmer $(MCU) flash --eeprom $(BUILD_DIR)/$(TARGET).eep + $(DFU_PROGRAMMER) $(MCU) flash --eeprom $(BUILD_DIR)/$(TARGET).eep else - dfu-programmer $(MCU) flash-eeprom $(BUILD_DIR)/$(TARGET).eep + $(DFU_PROGRAMMER) $(MCU) flash-eeprom $(BUILD_DIR)/$(TARGET).eep endif - dfu-programmer $(MCU) reset + $(DFU_PROGRAMMER) $(MCU) reset # Convert hex to bin. flashbin: $(BUILD_DIR)/$(TARGET).hex diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk index eb0c40138a..2a8d32fb99 100644 --- a/tmk_core/chibios.mk +++ b/tmk_core/chibios.mk @@ -151,5 +151,7 @@ endif # List any extra directories to look for libraries here. EXTRALIBDIRS = $(RULESPATH)/ld +DFU_UTIL ?= dfu-util + dfu-util: $(BUILD_DIR)/$(TARGET).bin sizeafter - dfu-util $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin + $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin From 9122b34a476908db49ddb5fcec0b0b05c67c75c2 Mon Sep 17 00:00:00 2001 From: Ryan MacLean Date: Sat, 29 Apr 2017 16:16:21 -0700 Subject: [PATCH 26/86] Adding Maximized Layout Both split shifts and HHKB split backspace. --- keyboards/amj60/amj60.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/keyboards/amj60/amj60.h b/keyboards/amj60/amj60.h index a0cb473310..c508e479ca 100644 --- a/keyboards/amj60/amj60.h +++ b/keyboards/amj60/amj60.h @@ -147,6 +147,21 @@ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ } +#define KEYMAP_MAX( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \ + k40, k41, k42, k45, k4a, k4b, k4c, k4d \ +) \ +{ \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \ + {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \ +} + void matrix_init_user(void); void matrix_scan_user(void); From ff512ea5b4934638d28244c8667e840549784f2b Mon Sep 17 00:00:00 2001 From: Ryan MacLean Date: Sat, 29 Apr 2017 16:18:26 -0700 Subject: [PATCH 27/86] Addind Sample Maxed Out Keymap Keeping hold space for fn1, adding three other user-mappable keys. --- keyboards/amj60/keymaps/maximized/keymap.c | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 keyboards/amj60/keymaps/maximized/keymap.c diff --git a/keyboards/amj60/keymaps/maximized/keymap.c b/keyboards/amj60/keymaps/maximized/keymap.c new file mode 100644 index 0000000000..d2a4be59f3 --- /dev/null +++ b/keyboards/amj60/keymaps/maximized/keymap.c @@ -0,0 +1,61 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. + +#include "amj60.h" + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _DEF 0 +#define _SPC 1 + +// dual-role shortcuts +#define SPACEDUAL LT(_SPC, KC_SPACE) + + +// increase readability +#define _______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _DEF: Default Layer + * ,-----------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ | ~ | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| bspc| + * |-----------------------------------------------------------| + * |Caps | A| S| D| F| G| H| J| K| L| ;| '| Return | + * |-----------------------------------------------------------| + * |Sft | Fn0| Z| X| C| V| B| N| M| ,| .| /| Sft |Fn2| + * |-----------------------------------------------------------| + * |Ctrl|Win |Alt | Space/Fn0 |Alt |Win |Menu|RCtl| + * `-----------------------------------------------------------' + */ + [_DEF] = KEYMAP_MAX( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + 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_BSPC, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ + KC_LSFT, F(0), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, F(1), \ + KC_LCTL, KC_LALT, KC_LGUI, SPACEDUAL, KC_RGUI, KC_RALT, KC_RCTL, F(2)), + + /* Keymap 1: F-and-vim Layer, modified with Space (by holding space) + * ,-----------------------------------------------------------. + * |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| | | + * |-----------------------------------------------------------| + * | |Paus| Up| [ | ] | | | | ( | ) | | | | Del | + * |-----------------------------------------------------------| + * | |Lft|Dwn|Rgt| | |Left|Down|Right|Up| | | PLAY | + * |-----------------------------------------------------------| + * | | | | | < | > | |M0 | | | | | Vol+ | | + * |-----------------------------------------------------------| + * | | | | |Alt |Prev|Vol-|Next| + * `-----------------------------------------------------------' + */ + [_SPC] = KEYMAP_MAX( + KC_PSCR, 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_PAUS, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, KC_MPLY, \ + _______, _______, _______, _______, _______, _______, KC_SPACE, M(0), _______, _______, _______, _______, KC_VOLU, _______, \ + _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT), + +}; From 4ff40a551a310e9b29a5838f87a9db58c0e5767e Mon Sep 17 00:00:00 2001 From: Weiyi Lou Date: Sat, 29 Apr 2017 22:02:01 +1000 Subject: [PATCH 28/86] Add `DYN_REC_STOP` to dynamic macros Dynamic macro functionality is modified to check for `DYN_REC_STOP`, so that macro recording can be stopped with a designated key combination (e.g. `qs` or anything) instead of mandating the use of a `_DYN` layer. `_DYN` layer stopping can still be done by passing `DYN_REC_STOP` within `process_record_user()`: bool process_record_user(uint16_t keycode, keyrecord_t *record) { uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode); if (!process_record_dynamic_macro(macro_kc, record)) { return false; } return true; } --- quantum/dynamic_macro.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 64093f293e..939816a597 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -40,6 +40,7 @@ enum dynamic_macro_keycodes { DYN_REC_START1 = DYNAMIC_MACRO_RANGE, DYN_REC_START2, + DYN_REC_STOP, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, }; @@ -209,9 +210,8 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) } else { /* A macro is being recorded right now. */ switch (keycode) { - case MO(_DYN): - /* Use the layer key used to access the macro recording as - * a stop button. */ + case DYN_REC_STOP: + /* Stop the macro recording. */ if (record->event.pressed) { /* Ignore the initial release * just after the recoding * starts. */ From 1201d4910fd7346ac27937e46071e09ec352f87f Mon Sep 17 00:00:00 2001 From: Weiyi Lou Date: Sat, 29 Apr 2017 22:05:31 +1000 Subject: [PATCH 29/86] Add cinaeco hhkb keymap --- keyboards/hhkb/keymaps/cinaeco/Makefile | 23 +++ keyboards/hhkb/keymaps/cinaeco/README.md | 23 +++ keyboards/hhkb/keymaps/cinaeco/config.h | 20 +++ keyboards/hhkb/keymaps/cinaeco/keymap.c | 186 +++++++++++++++++++++++ 4 files changed, 252 insertions(+) create mode 100644 keyboards/hhkb/keymaps/cinaeco/Makefile create mode 100644 keyboards/hhkb/keymaps/cinaeco/README.md create mode 100644 keyboards/hhkb/keymaps/cinaeco/config.h create mode 100644 keyboards/hhkb/keymaps/cinaeco/keymap.c diff --git a/keyboards/hhkb/keymaps/cinaeco/Makefile b/keyboards/hhkb/keymaps/cinaeco/Makefile new file mode 100644 index 0000000000..05b724051e --- /dev/null +++ b/keyboards/hhkb/keymaps/cinaeco/Makefile @@ -0,0 +1,23 @@ +# cinaeco's HHKB firmware + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/hhkb/keymaps/cinaeco/README.md b/keyboards/hhkb/keymaps/cinaeco/README.md new file mode 100644 index 0000000000..c1c48e6093 --- /dev/null +++ b/keyboards/hhkb/keymaps/cinaeco/README.md @@ -0,0 +1,23 @@ +# QMK Keyboard Firmware for HHKB + +## Modifications + +### HHKB Fn Layer + +Added some Media keys. + +### Utility Layer (SpaceFN) + +Hold `Space` for: + +- Vi-style direction keys. +- WASD-style mouse keys. +- Dynamic macro playback on `1` and `2`. +- Qwerty/Colemak/Dvorak layout selection on `-`, `=` and `\ ` + +### Dynamic Macros + +Hold `q` and press: + +- `1` or `2` to record macro 1 or 2. +- `s` to stop recording. diff --git a/keyboards/hhkb/keymaps/cinaeco/config.h b/keyboards/hhkb/keymaps/cinaeco/config.h new file mode 100644 index 0000000000..c7b4c784c0 --- /dev/null +++ b/keyboards/hhkb/keymaps/cinaeco/config.h @@ -0,0 +1,20 @@ +#ifndef CONFIG_CINAECO_H +#define CONFIG_CINAECO_H + +#include "../../config.h" + +#undef MANUFACTURER +#undef PRODUCT +#undef DESCRIPTION +#define MANUFACTURER QMK +#define PRODUCT HHKB QMK cinaeco +#define DESCRIPTION HHKB on QMK Firmware with cinaeco keymap + +// Increase "Tap" detection window. Avoid missing 'q' or 'z' when typing slowly. +#undef TAPPING_TERM +#define TAPPING_TERM 230 + +// Uncomment to enable NKRO by default. May cause issues with KVM switches. +//#define FORCE_NKRO + +#endif diff --git a/keyboards/hhkb/keymaps/cinaeco/keymap.c b/keyboards/hhkb/keymaps/cinaeco/keymap.c new file mode 100644 index 0000000000..0b204600d1 --- /dev/null +++ b/keyboards/hhkb/keymaps/cinaeco/keymap.c @@ -0,0 +1,186 @@ +/* -*- eval: (turn-on-orgtbl); -*- + * cinaeco's HHKB Layout + */ +#include "hhkb.h" + +// Layers. +#define QWER 0 +#define COLE 1 +#define DVOR 2 +#define HHKB 3 +#define UTIL 4 +#define MREC 5 + +// Easier-to-read Layer Arrays. +#define ____ KC_TRNS + +enum hhkb_keycodes { + DYNAMIC_MACRO_RANGE = SAFE_RANGE, +}; + +#include "dynamic_macro.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + + /* QWER Layer: Qwerty Default + * + * ,--------------------------------------------------------------. + * |Esc| 1 | 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| + * |--------------------------------------------------------------| + * |Tab |Q/MREC| W| E| R| T| Y| U| I| O| P| [| ]|Backs| + * |--------------------------------------------------------------| + * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Ent/Ctrl| + * |--------------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0| + * `--------------------------------------------------------------' + * |Alt|Gui | Space/UTIL |Gui |Alt| + * `-------------------------------------------' + * + */ + + [QWER] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, LT(MREC, 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_BSPC, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, CTL_T(KC_ENT), \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \ + KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT), + + + /* COLE Layer: Colemak + * + * ,--------------------------------------------------------------. + * |Esc| 1 | 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| + * |--------------------------------------------------------------| + * |Tab |Q/MREC| W| F| P| G| J| L| U| Y| ;| [| ]|Backs| + * |--------------------------------------------------------------| + * |Ctrl | A| R| S| T| D| H| N| E| I| O| '|Ent/Ctrl| + * |--------------------------------------------------------------| + * |Shift | Z| X| C| V| K| B| M| ,| .| /|Shift |Fn0| + * `--------------------------------------------------------------' + * |Alt|Gui | Space/UTIL |Gui |Alt| + * `-------------------------------------------' + * + */ + + [COLE] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ + KC_TAB, LT(MREC, 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_BSPC, \ + KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, CTL_T(KC_ENT), \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_K, KC_B, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \ + KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT), + + + /* DVOR Layer: Dvorak + * + * ,--------------------------------------------------------------. + * |Esc| 1 | 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| \| `| + * |--------------------------------------------------------------| + * |Tab |'/MREC| ,| .| P| Y| F| G| C| R| L| /| =|Backs| + * |--------------------------------------------------------------| + * |Ctrl | A| O| E| U| I| D| H| T| N| S| -|Ent/Ctrl| + * |--------------------------------------------------------------| + * |Shift | ;| Q| J| K| X| B| M| W| V| Z|Shift |Fn0| + * `--------------------------------------------------------------' + * |Alt|Gui | Space/UTIL |Gui |Alt| + * `-------------------------------------------' + * + */ + + [DVOR] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, \ + KC_TAB, LT(MREC, 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_BSPC, \ + KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, CTL_T(KC_ENT), \ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(HHKB), \ + KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT), + + + /* HHKB Layer: HHKB mode (HHKB Fn) + * + * ,-----------------------------------------------------------. + * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del| + * |-----------------------------------------------------------| + * |Caps |PLA|PRV|NXT| | | | |Psc|Slk|Pus|Up | |Backs| + * |-----------------------------------------------------------| + * | |VoD|VoU|Mut|Ejc| | *| /|Hom|PgU|Lef|Rig|Enter | + * |-----------------------------------------------------------| + * | | | | | | | +| -|End|PgD|Dow| | | + * `-----------------------------------------------------------' + * | | | |STOP | | + * `-------------------------------------------' + */ + + [HHKB] = KEYMAP( + KC_PWR, 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_INS, KC_DEL, \ + KC_CAPS, KC_MPLY, KC_MPRV, KC_MNXT, ____, ____, ____, ____, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ____, KC_BSPC, \ + ____, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, ____, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ + ____, ____, ____, ____, ____, ____, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ____, ____, \ + ____, ____, ____, KC_MSTP, ____), + + + /* UTIL Layer: Extra utilities + * + * ,-------------------------------------------------------------. + * |DFU|PLY1|PLY2| | | | | | | | |QWE|COL|DVO|DBG| + * |-------------------------------------------------------------| + * | |MLB |M-Up|MRB|MwU| |Hom|PgD|PgU|End| | | | | + * |-------------------------------------------------------------| + * | |M-Lt|M-Dn|M-R|MwD| |LEF|DOW|UP |RIG| | | | + * |-------------------------------------------------------------| + * | | | | | |SPC| | | | | | | | + * `-------------------------------------------------------------' + * | | | | | | + * `-------------------------------------------' + * + */ + + [UTIL] = KEYMAP( + RESET, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, ____, ____, ____, ____, ____, ____, ____, ____, DF(QWER), DF(COLE), DF(DVOR), DEBUG, \ + ____, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, ____, KC_HOME, KC_PGDN, KC_PGUP, KC_END, ____, ____, ____, ____, \ + ____, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, ____, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, ____, ____, ____, \ + ____, ____, ____, ____, ____, KC_SPC, ____, ____, ____, ____, ____, ____, ____, \ + ____, ____, ____, ____, ____), + + + /* MREC Layer: Record macros with `q` + * + * ,-------------------------------------------------------------. + * | |REC1|REC2| | | | | | | | | | | | | + * |-------------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |-------------------------------------------------------------| + * | | |RSTP| | | | | | | | | | | + * |-------------------------------------------------------------| + * | | | | | | | | | | | | | | + * `-------------------------------------------------------------' + * | | | | | | + * `-------------------------------------------' + * + */ + + [MREC] = KEYMAP( + ____, DYN_REC_START1, DYN_REC_START2, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ + ____, ____, DYN_REC_STOP, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ + ____, ____, ____, ____, ____) + +}; + + + +const uint16_t PROGMEM fn_actions[] = { + +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + return MACRO_NONE; +}; + +// For Dynamic Macros. +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (!process_record_dynamic_macro(keycode, record)) { + return false; + } + return true; +} From c8ac556e63c62078fe1edfc1a116c36ad34da8e3 Mon Sep 17 00:00:00 2001 From: Weiyi Lou Date: Sun, 30 Apr 2017 18:36:43 +1000 Subject: [PATCH 30/86] Update vifon keymap to use `DYN_REC_STOP` --- keyboards/planck/keymaps/vifon/keymap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/planck/keymaps/vifon/keymap.c b/keyboards/planck/keymaps/vifon/keymap.c index ee0c0ac366..ecd5c2cc44 100644 --- a/keyboards/planck/keymaps/vifon/keymap.c +++ b/keyboards/planck/keymaps/vifon/keymap.c @@ -107,7 +107,8 @@ const uint16_t PROGMEM fn_actions[] = { bool process_record_user(uint16_t keycode, keyrecord_t *record) { static uint16_t key_timer; - if (!process_record_dynamic_macro(keycode, record)) { + uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode); + if (!process_record_dynamic_macro(macro_kc, record)) { return false; } From 2f28652dcc22c74db4f3c60537fa07f6774451f9 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sun, 30 Apr 2017 18:03:03 +0700 Subject: [PATCH 31/86] Syntax fix --- keyboards/handwired/promethium/matrix.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/handwired/promethium/matrix.c b/keyboards/handwired/promethium/matrix.c index 2b7ce2bf5e..72dbe8d4d0 100644 --- a/keyboards/handwired/promethium/matrix.c +++ b/keyboards/handwired/promethium/matrix.c @@ -133,8 +133,8 @@ void matrix_init(void) { matrix_init_quantum(); } -uint8_t matrix_scan(void -){ +uint8_t matrix_scan(void) +{ // Set row, read cols for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { # if (DEBOUNCING_DELAY > 0) From 343f8d368e7ce51a3b34705147b890445a12e3ea Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Sun, 30 Apr 2017 18:04:58 +0700 Subject: [PATCH 32/86] Simple RGB backlight theming --- keyboards/handwired/promethium/color.h | 15 ++ .../promethium/keymaps/priyadi/keymap.c | 145 +++++++++--------- .../promethium/keymaps/priyadi/rgbtheme.h | 1 + .../keymaps/priyadi/rgbtheme_carbon.h | 36 +++++ .../keymaps/priyadi/rgbtheme_default.h | 36 +++++ 5 files changed, 161 insertions(+), 72 deletions(-) create mode 100644 keyboards/handwired/promethium/color.h create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/rgbtheme.h create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/rgbtheme_carbon.h create mode 100644 keyboards/handwired/promethium/keymaps/priyadi/rgbtheme_default.h diff --git a/keyboards/handwired/promethium/color.h b/keyboards/handwired/promethium/color.h new file mode 100644 index 0000000000..077242d5f1 --- /dev/null +++ b/keyboards/handwired/promethium/color.h @@ -0,0 +1,15 @@ +#define COLOR_BLANK 0, 0, 0 + +#define COLOR_BLACK 0, 0, 0 +#define COLOR_WHITE 15,15,15 +#define COLOR_GRAY 7, 7, 7 + +#define COLOR_RED 15, 0, 0 +#define COLOR_GREEN 0,15, 0 +#define COLOR_BLUE 0, 0,15 + +#define COLOR_YELLOW 15,15, 0 +#define COLOR_MAGENTA 15, 0,15 +#define COLOR_CYAN 0,15,15 + +#define COLOR_ORANGE 15, 5, 0 \ No newline at end of file diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index 4cc3d6d60a..d562c7bbf8 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c @@ -31,6 +31,7 @@ along with this program. If not, see . #include "quantum.h" #ifdef RGBSPS_ENABLE #include "rgbsps.h" +#include "rgbtheme.h" #endif #ifdef PS2_MOUSE_ENABLE #include "ps2_mouse.h" @@ -42,13 +43,13 @@ along with this program. If not, see . #undef FAUXCLICKY_OFF #define FAUXCLICKY_OFF do { \ fauxclicky_enabled = false; \ - rgbsps_set(LED_AUDIO, 0, 0, 0); \ + rgbsps_set(LED_AUDIO, COLOR_BLANK); \ fauxclicky_stop(); \ } while (0) #undef FAUXCLICKY_ON #define FAUXCLICKY_ON do { \ fauxclicky_enabled = true; \ - rgbsps_set(LED_AUDIO, 8, 0, 8); \ + rgbsps_set(LED_AUDIO, THEME_COLOR_AUDIO); \ } while (0) #endif #endif @@ -469,33 +470,33 @@ const uint8_t PROGMEM LED_TRACKPOINT[] = { void led_turnoff_keys(void) { for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) { - rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0); + rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), COLOR_BLACK); } for(uint8_t i = 0; i < COUNT(LED_MODS); i++) { - rgbsps_set(pgm_read_byte(&LED_MODS[i]), 0, 0, 0); + rgbsps_set(pgm_read_byte(&LED_MODS[i]), COLOR_BLACK); } for(uint8_t i = 0; i < COUNT(LED_FN); i++) { - rgbsps_set(pgm_read_byte(&LED_FN[i]), 0, 0, 0); + rgbsps_set(pgm_read_byte(&LED_FN[i]), COLOR_BLACK); } } #ifdef RGBSPS_DEMO_ENABLE void led_demo(void) { - rgbsps_set(LED_IND_LINUX, 15, 15, 15); - rgbsps_set(LED_IND_APPLE, 15, 15, 15); - rgbsps_set(LED_IND_WINDOWS, 15, 15, 15); - rgbsps_set(LED_IND_QWERTY, 15, 10, 0); - rgbsps_set(LED_IND_ALT, 15, 10, 0); - rgbsps_set(LED_IND_AUDIO, 5, 11, 13); - rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15); - rgbsps_set(LED_IND_USB, 15, 15, 15); - rgbsps_set(LED_IND_CAPSLOCK, 15, 0, 0); - rgbsps_set(LED_IND_GUI, 15, 0, 15); - rgbsps_set(LED_IND_FUN, 15, 0, 0); - rgbsps_set(LED_IND_NUM, 0, 0, 15); - rgbsps_set(LED_IND_PUNC, 0, 15, 0); - rgbsps_set(LED_IND_GREEK, 0, 15, 15); - rgbsps_set(LED_IND_EMOJI, 15, 15, 0); + rgbsps_set(LED_IND_LINUX, THEME_COLOR_LINUX); + rgbsps_set(LED_IND_APPLE, THEME_COLOR_APPLE); + rgbsps_set(LED_IND_WINDOWS, THEME_COLOR_WINDOWS); + rgbsps_set(LED_IND_QWERTY, THEME_COLOR_QWERTY); + rgbsps_set(LED_IND_ALT, THEME_COLOR_ALT); + rgbsps_set(LED_IND_AUDIO, THEME_COLOR_AUDIO); + rgbsps_set(LED_IND_BLUETOOTH, THEME_COLOR_BLUETOOTH); + rgbsps_set(LED_IND_USB, THEME_COLOR_USB); + rgbsps_set(LED_IND_CAPSLOCK, THEME_COLOR_CAPSLOCK); + rgbsps_set(LED_IND_GUI, THEME_COLOR_GUI); + rgbsps_set(LED_IND_FUN, THEME_COLOR_FUN); + rgbsps_set(LED_IND_NUM, THEME_COLOR_NUM); + rgbsps_set(LED_IND_PUNC, THEME_COLOR_PUNC); + rgbsps_set(LED_IND_GREEK, THEME_COLOR_GREEK); + rgbsps_set(LED_IND_EMOJI, THEME_COLOR_EMOJI); rgbsps_send(); } #endif @@ -508,26 +509,26 @@ void led_reset(void) { case GLOW_MIN: led_turnoff_keys(); for(uint8_t i = 0; i < COUNT(LED_HOMING); i++) { - rgbsps_set(pgm_read_byte(&LED_HOMING[i]), 8, 8, 8); + rgbsps_set(pgm_read_byte(&LED_HOMING[i]), THEME_COLOR_GLOW1_HOME); } - rgbsps_set(LED_F, 15, 0, 0); - rgbsps_set(LED_J, 15, 0, 0); + rgbsps_set(LED_F, THEME_COLOR_GLOW1_HOMING); + rgbsps_set(LED_J, THEME_COLOR_GLOW1_HOMING); break; case GLOW_FULL: for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) { - rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 8, 8, 8); + rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), THEME_COLOR_GLOW2_ALPHA); } for(uint8_t i = 0; i < COUNT(LED_MODS); i++) { - rgbsps_set(pgm_read_byte(&LED_MODS[i]), 0, 15, 0); + rgbsps_set(pgm_read_byte(&LED_MODS[i]), THEME_COLOR_GLOW2_MODS); } for(uint8_t i = 0; i < COUNT(LED_FN); i++) { - rgbsps_set(pgm_read_byte(&LED_FN[i]), 0, 0, 15); + rgbsps_set(pgm_read_byte(&LED_FN[i]), THEME_COLOR_GLOW2_FN); } for(uint8_t i = 0; i < COUNT(LED_HOMING); i++) { - rgbsps_set(pgm_read_byte(&LED_HOMING[i]), 15, 0, 0); + rgbsps_set(pgm_read_byte(&LED_HOMING[i]), THEME_COLOR_GLOW2_HOME); } - rgbsps_set(LED_F, 15, 15, 0); - rgbsps_set(LED_J, 15, 15, 0); + rgbsps_set(LED_F, THEME_COLOR_GLOW2_HOMING); + rgbsps_set(LED_J, THEME_COLOR_GLOW2_HOMING); break; } } @@ -535,11 +536,11 @@ void led_reset(void) { void led_set_default_layer_indicator(void) { uint8_t default_layer = biton32(default_layer_state); if (default_layer == _QWERTY) { - rgbsps_set(LED_IND_QWERTY, 15, 10, 0); - rgbsps_set(LED_IND_ALT, 0, 0, 0); + rgbsps_set(LED_IND_QWERTY, THEME_COLOR_QWERTY); + rgbsps_set(LED_IND_ALT, COLOR_BLANK); } else { - rgbsps_set(LED_IND_QWERTY, 0, 0, 0); - rgbsps_set(LED_IND_ALT, 15, 10, 0); + rgbsps_set(LED_IND_QWERTY, COLOR_BLANK); + rgbsps_set(LED_IND_ALT, THEME_COLOR_ALT); } rgbsps_send(); return; @@ -550,12 +551,12 @@ void led_set_layer_indicator(void) { led_reset(); - rgbsps_set(LED_IND_GUI, 0, 0, 0); - rgbsps_set(LED_IND_FUN, 0, 0, 0); - rgbsps_set(LED_IND_NUM, 0, 0, 0); - rgbsps_set(LED_IND_PUNC, 0, 0, 0); - rgbsps_set(LED_IND_GREEK, 0, 0, 0); - rgbsps_set(LED_IND_EMOJI, 0, 0, 0); + rgbsps_set(LED_IND_GUI, COLOR_BLANK); + rgbsps_set(LED_IND_FUN, COLOR_BLANK); + rgbsps_set(LED_IND_NUM, COLOR_BLANK); + rgbsps_set(LED_IND_PUNC, COLOR_BLANK); + rgbsps_set(LED_IND_GREEK, COLOR_BLANK); + rgbsps_set(LED_IND_EMOJI, COLOR_BLANK); uint8_t layer = biton32(layer_state); if (oldlayer == layer) { @@ -571,71 +572,71 @@ void led_set_layer_indicator(void) { switch(layer) { case _GUI: - rgbsps_set(LED_IND_GUI, 15, 0, 15); + rgbsps_set(LED_IND_GUI, THEME_COLOR_GUI); break; case _FUN: - rgbsps_set(LED_IND_FUN, 15, 0, 0); + rgbsps_set(LED_IND_FUN, THEME_COLOR_FUN); break; case _NUM: - rgbsps_set(LED_IND_NUM, 0, 0, 15); + rgbsps_set(LED_IND_NUM, THEME_COLOR_NUM); break; case _PUNC: - rgbsps_set(LED_IND_PUNC, 0, 15, 0); + rgbsps_set(LED_IND_PUNC, THEME_COLOR_PUNC); break; case _GREEKL: case _GREEKU: - rgbsps_set(LED_IND_GREEK, 0, 15, 15); + rgbsps_set(LED_IND_GREEK, THEME_COLOR_GREEK); break; case _EMOJI: - rgbsps_set(LED_IND_EMOJI, 15, 15, 0); + rgbsps_set(LED_IND_EMOJI, THEME_COLOR_EMOJI); break; default: - rgbsps_set(LED_IND_GUI, 3, 3, 3); - rgbsps_set(LED_IND_FUN, 3, 3, 3); - rgbsps_set(LED_IND_NUM, 3, 3, 3); - rgbsps_set(LED_IND_PUNC, 3, 3, 3); - rgbsps_set(LED_IND_GREEK, 3, 3, 3); - rgbsps_set(LED_IND_EMOJI, 3, 3, 3); + rgbsps_set(LED_IND_GUI, THEME_COLOR_OTHERLAYER); + rgbsps_set(LED_IND_FUN, THEME_COLOR_OTHERLAYER); + rgbsps_set(LED_IND_NUM, THEME_COLOR_OTHERLAYER); + rgbsps_set(LED_IND_PUNC, THEME_COLOR_OTHERLAYER); + rgbsps_set(LED_IND_GREEK, THEME_COLOR_OTHERLAYER); + rgbsps_set(LED_IND_EMOJI, THEME_COLOR_OTHERLAYER); } rgbsps_send(); } void led_set_unicode_input_mode(void) { - rgbsps_set(LED_IND_LINUX, 0, 0, 0); - rgbsps_set(LED_IND_APPLE, 0, 0, 0); - rgbsps_set(LED_IND_WINDOWS, 0, 0, 0); + rgbsps_set(LED_IND_LINUX, COLOR_BLANK); + rgbsps_set(LED_IND_APPLE, COLOR_BLANK); + rgbsps_set(LED_IND_WINDOWS, COLOR_BLANK); switch (get_unicode_input_mode()) { case UC_LNX: - rgbsps_set(LED_IND_LINUX, 15, 15, 15); + rgbsps_set(LED_IND_LINUX, THEME_COLOR_LINUX); break; case UC_OSX: - rgbsps_set(LED_IND_APPLE, 15, 15, 15); + rgbsps_set(LED_IND_APPLE, THEME_COLOR_APPLE); break; case UC_WIN: case UC_WINC: - rgbsps_set(LED_IND_WINDOWS, 15, 15, 15); + rgbsps_set(LED_IND_WINDOWS, THEME_COLOR_WINDOWS); break; } rgbsps_send(); } void led_set_output_ble(void) { - rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15); - rgbsps_set(LED_IND_USB, 0, 0, 0); + rgbsps_set(LED_IND_BLUETOOTH, THEME_COLOR_BLUETOOTH); + rgbsps_set(LED_IND_USB, COLOR_BLANK); rgbsps_send(); } void led_set_output_usb(void) { - rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 0); - rgbsps_set(LED_IND_USB, 15, 15, 15); + rgbsps_set(LED_IND_BLUETOOTH, COLOR_BLANK); + rgbsps_set(LED_IND_USB, THEME_COLOR_USB); rgbsps_send(); } void led_set_output_none(void) { - rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 0); - rgbsps_set(LED_IND_USB, 0, 0, 0); + rgbsps_set(LED_IND_BLUETOOTH, COLOR_BLANK); + rgbsps_set(LED_IND_USB, COLOR_BLANK); rgbsps_send(); } @@ -644,9 +645,9 @@ void led_init(void) { rgbsps_turnoff(); // set trackpoint color - rgbsps_set(LED_TRACKPOINT1, 15, 0, 0); - rgbsps_set(LED_TRACKPOINT2, 0, 0, 15); - rgbsps_set(LED_TRACKPOINT3, 15, 0, 0); + rgbsps_set(LED_TRACKPOINT1, THEME_COLOR_TP1); + rgbsps_set(LED_TRACKPOINT2, THEME_COLOR_TP2); + rgbsps_set(LED_TRACKPOINT3, THEME_COLOR_TP3); // unicode input mode led_set_unicode_input_mode(); @@ -658,9 +659,9 @@ void led_init(void) { // clicky #ifdef FAUXCLICKY_ENABLE if (fauxclicky_enabled) { - rgbsps_set(LED_IND_AUDIO, 5, 11, 13); + rgbsps_set(LED_IND_AUDIO, THEME_COLOR_AUDIO); } else { - rgbsps_set(LED_IND_AUDIO, 0, 0, 0); + rgbsps_set(LED_IND_AUDIO, COLOR_BLANK); } #endif @@ -1244,9 +1245,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { case FC_TOG: #ifdef RGBSPS_ENABLE if (fauxclicky_enabled) { - rgbsps_set(LED_IND_AUDIO, 5, 11, 13); + rgbsps_set(LED_IND_AUDIO, THEME_COLOR_AUDIO); } else { - rgbsps_set(LED_IND_AUDIO, 0, 0, 0); + rgbsps_set(LED_IND_AUDIO, COLOR_BLANK); } rgbsps_send(); #endif @@ -1320,9 +1321,9 @@ void turn_off_capslock() { bool new_capslock = usb_led & (1< Date: Sun, 30 Apr 2017 10:48:17 -0400 Subject: [PATCH 33/86] fixes s60_x keyboard --- keyboards/s60-x/s60-x.c | 1 - keyboards/s60-x/s60-x_precompiled.zip | Bin 276106 -> 0 bytes keyboards/{s60-x => s60_x}/Makefile | 0 keyboards/{s60-x => s60_x}/config.h | 13 +++++++++ keyboards/{s60-x => s60_x}/default/Makefile | 0 keyboards/{s60-x => s60_x}/default/config.h | 0 keyboards/{s60-x => s60_x}/default/default.c | 0 keyboards/{s60-x => s60_x}/default/default.h | 0 keyboards/{s60-x => s60_x}/default/rules.mk | 0 .../keymaps/ansi_qwertz/Makefile | 0 .../keymaps/ansi_qwertz/config.h | 0 .../docs/KB_US-International-Alternative.png | Bin .../docs/KB_US-International-Alternative.svg | 0 ...-Alternative.svg.2016_08_18_09_06_36.0.svg | 0 .../ansi_qwertz/docs/KB_US-International.png | Bin .../ansi_qwertz/docs/KB_US-International.svg | 0 .../keymaps/ansi_qwertz/docs/base_layer.PNG | Bin .../ansi_qwertz/docs/function_layer.PNG | Bin .../keymaps/ansi_qwertz/docs/gaming_layer.PNG | Bin .../keymaps/ansi_qwertz/keymap.c | 2 +- .../keymaps/ansi_qwertz/readme.md | 0 .../{s60-x => s60_x}/keymaps/custom/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/custom/readme.md | 0 .../{s60-x => s60_x}/keymaps/dbroqua/keymap.c | 25 +++++++++++++----- .../{s60-x => s60_x}/keymaps/default/keymap.c | 2 +- .../keymaps/default/readme.md | 0 .../{s60-x => s60_x}/keymaps/hasu/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/hasu/readme.md | 0 .../{s60-x => s60_x}/keymaps/hhkb/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/hhkb/readme.md | 0 .../{s60-x => s60_x}/keymaps/iso/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/iso/readme.md | 0 .../{s60-x => s60_x}/keymaps/jpec/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/jpec/readme.md | 0 .../{s60-x => s60_x}/keymaps/plain/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/plain/readme.md | 0 .../{s60-x => s60_x}/keymaps/poker/keymap.c | 2 +- .../{s60-x => s60_x}/keymaps/poker/readme.md | 0 .../keymaps/poker_bit/keymap.c | 2 +- .../keymaps/poker_bit/readme.md | 0 .../keymaps/poker_set/keymap.c | 2 +- .../keymaps/poker_set/readme.md | 0 .../{s60-x => s60_x}/keymaps/spacefn/keymap.c | 2 +- .../keymaps/spacefn/readme.md | 0 keyboards/{s60-x => s60_x}/readme.md | 5 ---- keyboards/{s60-x => s60_x}/rgb/Makefile | 0 keyboards/{s60-x => s60_x}/rgb/config.h | 6 ----- keyboards/{s60-x => s60_x}/rgb/rgb.c | 0 keyboards/{s60-x => s60_x}/rgb/rgb.h | 0 keyboards/{s60-x => s60_x}/rgb/rules.mk | 0 keyboards/{s60-x => s60_x}/rules.mk | 0 keyboards/s60_x/s60_x.c | 1 + keyboards/{s60-x/s60-x.h => s60_x/s60_x.h} | 0 53 files changed, 44 insertions(+), 31 deletions(-) delete mode 100644 keyboards/s60-x/s60-x.c delete mode 100644 keyboards/s60-x/s60-x_precompiled.zip rename keyboards/{s60-x => s60_x}/Makefile (100%) rename keyboards/{s60-x => s60_x}/config.h (85%) rename keyboards/{s60-x => s60_x}/default/Makefile (100%) rename keyboards/{s60-x => s60_x}/default/config.h (100%) rename keyboards/{s60-x => s60_x}/default/default.c (100%) rename keyboards/{s60-x => s60_x}/default/default.h (100%) rename keyboards/{s60-x => s60_x}/default/rules.mk (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/Makefile (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/config.h (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/KB_US-International.png (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/KB_US-International.svg (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/base_layer.PNG (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/function_layer.PNG (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/docs/gaming_layer.PNG (100%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/ansi_qwertz/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/custom/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/custom/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/dbroqua/keymap.c (95%) rename keyboards/{s60-x => s60_x}/keymaps/default/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/default/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/hasu/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/hasu/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/hhkb/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/hhkb/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/iso/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/iso/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/jpec/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/jpec/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/plain/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/plain/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/poker/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/poker/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/poker_bit/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/poker_bit/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/poker_set/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/poker_set/readme.md (100%) rename keyboards/{s60-x => s60_x}/keymaps/spacefn/keymap.c (99%) rename keyboards/{s60-x => s60_x}/keymaps/spacefn/readme.md (100%) rename keyboards/{s60-x => s60_x}/readme.md (99%) rename keyboards/{s60-x => s60_x}/rgb/Makefile (100%) rename keyboards/{s60-x => s60_x}/rgb/config.h (87%) rename keyboards/{s60-x => s60_x}/rgb/rgb.c (100%) rename keyboards/{s60-x => s60_x}/rgb/rgb.h (100%) rename keyboards/{s60-x => s60_x}/rgb/rules.mk (100%) rename keyboards/{s60-x => s60_x}/rules.mk (100%) create mode 100644 keyboards/s60_x/s60_x.c rename keyboards/{s60-x/s60-x.h => s60_x/s60_x.h} (100%) diff --git a/keyboards/s60-x/s60-x.c b/keyboards/s60-x/s60-x.c deleted file mode 100644 index f031dd770d..0000000000 --- a/keyboards/s60-x/s60-x.c +++ /dev/null @@ -1 +0,0 @@ -#include "s60-x.h" \ No newline at end of file diff --git a/keyboards/s60-x/s60-x_precompiled.zip b/keyboards/s60-x/s60-x_precompiled.zip deleted file mode 100644 index 00d99ca8a15040294f7a6e2c3dbe997c2d947c5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276106 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℘okN8xqmv@~{ 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
x0x&XRdq5ZpUrdBsZV}< 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 L!vtd%1_lNIG?Kg; diff --git a/keyboards/s60-x/Makefile b/keyboards/s60_x/Makefile similarity index 100% rename from keyboards/s60-x/Makefile rename to keyboards/s60_x/Makefile diff --git a/keyboards/s60-x/config.h b/keyboards/s60_x/config.h similarity index 85% rename from keyboards/s60-x/config.h rename to keyboards/s60_x/config.h index 8e7bc78be2..8b97b3c814 100644 --- a/keyboards/s60-x/config.h +++ b/keyboards/s60_x/config.h @@ -32,6 +32,12 @@ along with this program. If not, see . #define MATRIX_ROWS 5 #define MATRIX_COLS 15 +/* number of backlight levels */ +#define BACKLIGHT_PIN B7 +#ifdef BACKLIGHT_PIN +#define BACKLIGHT_LEVELS 3 +#endif + /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW @@ -43,4 +49,11 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) +#ifdef SUBPROJECT_default + #include "default/config.h" +#endif +#ifdef SUBPROJECT_rgb + #include "rgb/config.h" +#endif + #endif diff --git a/keyboards/s60-x/default/Makefile b/keyboards/s60_x/default/Makefile similarity index 100% rename from keyboards/s60-x/default/Makefile rename to keyboards/s60_x/default/Makefile diff --git a/keyboards/s60-x/default/config.h b/keyboards/s60_x/default/config.h similarity index 100% rename from keyboards/s60-x/default/config.h rename to keyboards/s60_x/default/config.h diff --git a/keyboards/s60-x/default/default.c b/keyboards/s60_x/default/default.c similarity index 100% rename from keyboards/s60-x/default/default.c rename to keyboards/s60_x/default/default.c diff --git a/keyboards/s60-x/default/default.h b/keyboards/s60_x/default/default.h similarity index 100% rename from keyboards/s60-x/default/default.h rename to keyboards/s60_x/default/default.h diff --git a/keyboards/s60-x/default/rules.mk b/keyboards/s60_x/default/rules.mk similarity index 100% rename from keyboards/s60-x/default/rules.mk rename to keyboards/s60_x/default/rules.mk diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/Makefile b/keyboards/s60_x/keymaps/ansi_qwertz/Makefile similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/Makefile rename to keyboards/s60_x/keymaps/ansi_qwertz/Makefile diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/config.h b/keyboards/s60_x/keymaps/ansi_qwertz/config.h similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/config.h rename to keyboards/s60_x/keymaps/ansi_qwertz/config.h diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png b/keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg b/keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg b/keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png b/keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International.png similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International.png diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg b/keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International.svg similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/KB_US-International.svg diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG b/keyboards/s60_x/keymaps/ansi_qwertz/docs/base_layer.PNG similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/base_layer.PNG diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG b/keyboards/s60_x/keymaps/ansi_qwertz/docs/function_layer.PNG similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/function_layer.PNG diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG b/keyboards/s60_x/keymaps/ansi_qwertz/docs/gaming_layer.PNG similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG rename to keyboards/s60_x/keymaps/ansi_qwertz/docs/gaming_layer.PNG diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c b/keyboards/s60_x/keymaps/ansi_qwertz/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/ansi_qwertz/keymap.c rename to keyboards/s60_x/keymaps/ansi_qwertz/keymap.c index 317a245bef..ebb3aece34 100644 --- a/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c +++ b/keyboards/s60_x/keymaps/ansi_qwertz/keymap.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "s60-x.h" +#include "s60_x.h" //make keymap a little easier to read #define _______ KC_TRNS diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md b/keyboards/s60_x/keymaps/ansi_qwertz/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/ansi_qwertz/readme.md rename to keyboards/s60_x/keymaps/ansi_qwertz/readme.md diff --git a/keyboards/s60-x/keymaps/custom/keymap.c b/keyboards/s60_x/keymaps/custom/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/custom/keymap.c rename to keyboards/s60_x/keymaps/custom/keymap.c index fb2a40b85e..66eac33356 100644 --- a/keyboards/s60-x/keymaps/custom/keymap.c +++ b/keyboards/s60_x/keymaps/custom/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* Main layer: Test layout, using all keys. diff --git a/keyboards/s60-x/keymaps/custom/readme.md b/keyboards/s60_x/keymaps/custom/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/custom/readme.md rename to keyboards/s60_x/keymaps/custom/readme.md diff --git a/keyboards/s60-x/keymaps/dbroqua/keymap.c b/keyboards/s60_x/keymaps/dbroqua/keymap.c similarity index 95% rename from keyboards/s60-x/keymaps/dbroqua/keymap.c rename to keyboards/s60_x/keymaps/dbroqua/keymap.c index 0a714445ce..8d1887e75a 100644 --- a/keyboards/s60-x/keymaps/dbroqua/keymap.c +++ b/keyboards/s60_x/keymaps/dbroqua/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" #define _DEFAULT 0 #define _FN 1 @@ -73,12 +73,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - keyevent_t event = record->event; - - switch (id) { - - } +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; } @@ -108,42 +103,58 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { switch (id) { case RGBLED_TOGGLE: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_toggle(); + #endif } break; case RGBLED_INCREASE_HUE: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_increase_hue(); + #endif } break; case RGBLED_DECREASE_HUE: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_decrease_hue(); + #endif } break; case RGBLED_INCREASE_SAT: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_increase_sat(); + #endif } break; case RGBLED_DECREASE_SAT: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_decrease_sat(); + #endif } break; case RGBLED_INCREASE_VAL: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_increase_val(); + #endif } break; case RGBLED_DECREASE_VAL: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_decrease_val(); + #endif } break; case RGBLED_STEP_MODE: if (record->event.pressed) { + #ifdef RGB_ENABLE rgblight_step(); + #endif } break; } diff --git a/keyboards/s60-x/keymaps/default/keymap.c b/keyboards/s60_x/keymaps/default/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/default/keymap.c rename to keyboards/s60_x/keymaps/default/keymap.c index eb0c6b056e..a616e79b34 100644 --- a/keyboards/s60-x/keymaps/default/keymap.c +++ b/keyboards/s60_x/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* 0: Main layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ diff --git a/keyboards/s60-x/keymaps/default/readme.md b/keyboards/s60_x/keymaps/default/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/default/readme.md rename to keyboards/s60_x/keymaps/default/readme.md diff --git a/keyboards/s60-x/keymaps/hasu/keymap.c b/keyboards/s60_x/keymaps/hasu/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/hasu/keymap.c rename to keyboards/s60_x/keymaps/hasu/keymap.c index cbeaae0281..ac90dc6b20 100644 --- a/keyboards/s60-x/keymaps/hasu/keymap.c +++ b/keyboards/s60_x/keymaps/hasu/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* * Hasu diff --git a/keyboards/s60-x/keymaps/hasu/readme.md b/keyboards/s60_x/keymaps/hasu/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/hasu/readme.md rename to keyboards/s60_x/keymaps/hasu/readme.md diff --git a/keyboards/s60-x/keymaps/hhkb/keymap.c b/keyboards/s60_x/keymaps/hhkb/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/hhkb/keymap.c rename to keyboards/s60_x/keymaps/hhkb/keymap.c index 9afd1247f8..dc1bfffc47 100644 --- a/keyboards/s60-x/keymaps/hhkb/keymap.c +++ b/keyboards/s60_x/keymaps/hhkb/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* * HHKB Layout diff --git a/keyboards/s60-x/keymaps/hhkb/readme.md b/keyboards/s60_x/keymaps/hhkb/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/hhkb/readme.md rename to keyboards/s60_x/keymaps/hhkb/readme.md diff --git a/keyboards/s60-x/keymaps/iso/keymap.c b/keyboards/s60_x/keymaps/iso/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/iso/keymap.c rename to keyboards/s60_x/keymaps/iso/keymap.c index 43a9c48b05..f6fc741728 100644 --- a/keyboards/s60-x/keymaps/iso/keymap.c +++ b/keyboards/s60_x/keymaps/iso/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* 0: Main layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ diff --git a/keyboards/s60-x/keymaps/iso/readme.md b/keyboards/s60_x/keymaps/iso/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/iso/readme.md rename to keyboards/s60_x/keymaps/iso/readme.md diff --git a/keyboards/s60-x/keymaps/jpec/keymap.c b/keyboards/s60_x/keymaps/jpec/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/jpec/keymap.c rename to keyboards/s60_x/keymaps/jpec/keymap.c index c8fc133288..21e77c10b2 100644 --- a/keyboards/s60-x/keymaps/jpec/keymap.c +++ b/keyboards/s60_x/keymaps/jpec/keymap.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "s60-x.h" +#include "s60_x.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Layout 0: Default Layer diff --git a/keyboards/s60-x/keymaps/jpec/readme.md b/keyboards/s60_x/keymaps/jpec/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/jpec/readme.md rename to keyboards/s60_x/keymaps/jpec/readme.md diff --git a/keyboards/s60-x/keymaps/plain/keymap.c b/keyboards/s60_x/keymaps/plain/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/plain/keymap.c rename to keyboards/s60_x/keymaps/plain/keymap.c index 790ac88e73..d5075a07b9 100644 --- a/keyboards/s60-x/keymaps/plain/keymap.c +++ b/keyboards/s60_x/keymaps/plain/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* Main layer: ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ diff --git a/keyboards/s60-x/keymaps/plain/readme.md b/keyboards/s60_x/keymaps/plain/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/plain/readme.md rename to keyboards/s60_x/keymaps/plain/readme.md diff --git a/keyboards/s60-x/keymaps/poker/keymap.c b/keyboards/s60_x/keymaps/poker/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/poker/keymap.c rename to keyboards/s60_x/keymaps/poker/keymap.c index 0a8691792a..5b917704e4 100644 --- a/keyboards/s60-x/keymaps/poker/keymap.c +++ b/keyboards/s60_x/keymaps/poker/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: qwerty diff --git a/keyboards/s60-x/keymaps/poker/readme.md b/keyboards/s60_x/keymaps/poker/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/poker/readme.md rename to keyboards/s60_x/keymaps/poker/readme.md diff --git a/keyboards/s60-x/keymaps/poker_bit/keymap.c b/keyboards/s60_x/keymaps/poker_bit/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/poker_bit/keymap.c rename to keyboards/s60_x/keymaps/poker_bit/keymap.c index 7626038f42..1f7b1b633d 100644 --- a/keyboards/s60-x/keymaps/poker_bit/keymap.c +++ b/keyboards/s60_x/keymaps/poker_bit/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" // Poker fix with toggle and bit operation // Fn + Esc = ` diff --git a/keyboards/s60-x/keymaps/poker_bit/readme.md b/keyboards/s60_x/keymaps/poker_bit/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/poker_bit/readme.md rename to keyboards/s60_x/keymaps/poker_bit/readme.md diff --git a/keyboards/s60-x/keymaps/poker_set/keymap.c b/keyboards/s60_x/keymaps/poker_set/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/poker_set/keymap.c rename to keyboards/s60_x/keymaps/poker_set/keymap.c index 09423e75b3..52eee53218 100644 --- a/keyboards/s60-x/keymaps/poker_set/keymap.c +++ b/keyboards/s60_x/keymaps/poker_set/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" // Poker fix with set(state transition) // Fn + Esc = ` diff --git a/keyboards/s60-x/keymaps/poker_set/readme.md b/keyboards/s60_x/keymaps/poker_set/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/poker_set/readme.md rename to keyboards/s60_x/keymaps/poker_set/readme.md diff --git a/keyboards/s60-x/keymaps/spacefn/keymap.c b/keyboards/s60_x/keymaps/spacefn/keymap.c similarity index 99% rename from keyboards/s60-x/keymaps/spacefn/keymap.c rename to keyboards/s60_x/keymaps/spacefn/keymap.c index b6dc7ca7eb..28369580ed 100644 --- a/keyboards/s60-x/keymaps/spacefn/keymap.c +++ b/keyboards/s60_x/keymaps/spacefn/keymap.c @@ -1,4 +1,4 @@ -#include "s60-x.h" +#include "s60_x.h" /* * SpaceFN diff --git a/keyboards/s60-x/keymaps/spacefn/readme.md b/keyboards/s60_x/keymaps/spacefn/readme.md similarity index 100% rename from keyboards/s60-x/keymaps/spacefn/readme.md rename to keyboards/s60_x/keymaps/spacefn/readme.md diff --git a/keyboards/s60-x/readme.md b/keyboards/s60_x/readme.md similarity index 99% rename from keyboards/s60-x/readme.md rename to keyboards/s60_x/readme.md index 408ad13ac2..e30b2f76ce 100644 --- a/keyboards/s60-x/readme.md +++ b/keyboards/s60_x/readme.md @@ -5,11 +5,6 @@ DIY compact keyboard designed by VinnyCordeiro for Sentraq. Most of the keymaps ## S60X Resources - [Massdrop page](https://www.massdrop.com/buy/sentraq-60-diy-keyboard-kit?mode=guest_open) -## Quickstart - -If you just want to test a few layouts, the archive [s60-x_precompiled.zip](s60-x_precompiled.zip) contains pre-compiled .hex-files for all available keymaps. Not all of them are tested. -You only need to flash them onto your keyboard, which is explained below, there's no need to setup a build environment. For a full list - ## Flashing your keyboard The recommended programs for flashing your keyboard are [Atmel FLIP](http://www.atmel.com/tools/FLIP.aspx) (Windows) and [dfu-programmer](http://dfu-programmer.sourceforge.net/) (Linux/Windows). diff --git a/keyboards/s60-x/rgb/Makefile b/keyboards/s60_x/rgb/Makefile similarity index 100% rename from keyboards/s60-x/rgb/Makefile rename to keyboards/s60_x/rgb/Makefile diff --git a/keyboards/s60-x/rgb/config.h b/keyboards/s60_x/rgb/config.h similarity index 87% rename from keyboards/s60-x/rgb/config.h rename to keyboards/s60_x/rgb/config.h index fbc143487e..81efc87d54 100644 --- a/keyboards/s60-x/rgb/config.h +++ b/keyboards/s60_x/rgb/config.h @@ -11,12 +11,6 @@ #define MATRIX_COL_PINS { D0, D1, D2, D3, D5, B6, C6, C7, F1, F0, E6, B3, B2, B1, B0 } #define UNUSED_PINS -/* number of backlight levels */ -#define BACKLIGHT_PIN B7 -#ifdef BACKLIGHT_PIN -#define BACKLIGHT_LEVELS 3 -#endif - /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboards/s60-x/rgb/rgb.c b/keyboards/s60_x/rgb/rgb.c similarity index 100% rename from keyboards/s60-x/rgb/rgb.c rename to keyboards/s60_x/rgb/rgb.c diff --git a/keyboards/s60-x/rgb/rgb.h b/keyboards/s60_x/rgb/rgb.h similarity index 100% rename from keyboards/s60-x/rgb/rgb.h rename to keyboards/s60_x/rgb/rgb.h diff --git a/keyboards/s60-x/rgb/rules.mk b/keyboards/s60_x/rgb/rules.mk similarity index 100% rename from keyboards/s60-x/rgb/rules.mk rename to keyboards/s60_x/rgb/rules.mk diff --git a/keyboards/s60-x/rules.mk b/keyboards/s60_x/rules.mk similarity index 100% rename from keyboards/s60-x/rules.mk rename to keyboards/s60_x/rules.mk diff --git a/keyboards/s60_x/s60_x.c b/keyboards/s60_x/s60_x.c new file mode 100644 index 0000000000..595418bfac --- /dev/null +++ b/keyboards/s60_x/s60_x.c @@ -0,0 +1 @@ +#include "s60_x.h" \ No newline at end of file diff --git a/keyboards/s60-x/s60-x.h b/keyboards/s60_x/s60_x.h similarity index 100% rename from keyboards/s60-x/s60-x.h rename to keyboards/s60_x/s60_x.h From 7ce94eb468ff34f904f8ef8fdeb3c5fe2d09d78c Mon Sep 17 00:00:00 2001 From: Ryan MacLean Date: Sun, 30 Apr 2017 15:04:00 -0700 Subject: [PATCH 34/86] Cleaning Up Dockerfile Layers Per Official Docs From the official docs: ``` Note: The official Debian and Ubuntu images automatically run apt-get clean, so explicit invocation is not required. ``` Also added ` && rm -rf /var/lib/apt/lists/*` as part of the install line which probably does what was intended (no need to make a new layer). Added apt-get update to the RUN payload, as it should be part of the same layer. Both are documented here: https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/ --- Dockerfile | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 744ded8579..88da06f02a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,7 @@ FROM debian:jessie MAINTAINER Erik Dasque -RUN apt-get update -RUN apt-get install --no-install-recommends -y build-essential \ +RUN apt-get update && apt-get install --no-install-recommends -y build-essential \ gcc \ unzip \ wget \ @@ -15,10 +14,8 @@ RUN apt-get install --no-install-recommends -y build-essential \ gcc-arm-none-eabi \ binutils-arm-none-eabi \ libnewlib-arm-none-eabi \ - git - -RUN apt-get clean -RUN rm -rf /var/lib/apt/lists/* + git \ + && rm -rf /var/lib/apt/lists/* ENV keyboard=ergodox ENV subproject=ez From 38b076d22d2363674585745cab4d476ad1386ef3 Mon Sep 17 00:00:00 2001 From: Thor77 Date: Wed, 3 May 2017 22:01:02 +0200 Subject: [PATCH 35/86] Add KEYMAP without KC_##-prefix and rename old variant to KEYMAP_KC --- keyboards/ps2avrGB/ps2avrGB.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/keyboards/ps2avrGB/ps2avrGB.h b/keyboards/ps2avrGB/ps2avrGB.h index 6432e3be9c..813f31f804 100644 --- a/keyboards/ps2avrGB/ps2avrGB.h +++ b/keyboards/ps2avrGB/ps2avrGB.h @@ -22,6 +22,24 @@ along with this program. If not, see . #include "action.h" #define KEYMAP( \ + K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, \ + K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, \ + K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, \ + K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KD2, KE0, \ + K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, \ + K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96 \ +){ \ + { K00, K10, K20, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB0, KC0, KD0, KE0 }, \ + { K01, K11, K21, K31, K41, K51, KC_NO, KC_NO, KC_NO, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \ + { K02, K12, K22, K32, K42, K52, KC_NO, KC_NO, KC_NO, KC_NO, KA2, KB2, KC_NO, KD2, KE2 }, \ + { K03, K13, K23, K33, K43, K53, KC_NO, KC_NO, KC_NO, KC_NO, KA3, KB3, KC3, KD3, KC_NO }, \ + { K04, K14, K24, K34, K44, K54, KC_NO, KC_NO, KC_NO, KC_NO, KA4, KB4, KC4, KC_NO, KE4 }, \ + { K05, KC_NO, K25, K35, K45, K55, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB5, KC5, KD5, KE5 }, \ + { K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \ + { K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \ +} + +#define KC_KEYMAP( \ K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, \ K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, \ K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, \ From 7f3b1232c49509a930dfbb87e17ad2847e753815 Mon Sep 17 00:00:00 2001 From: Thor77 Date: Wed, 3 May 2017 22:13:46 +0200 Subject: [PATCH 36/86] Use KC_KEYMAP for default-keymap and remove obsolete explicit line-separator "\" --- keyboards/ps2avrGB/keymaps/default/keymap.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/keyboards/ps2avrGB/keymaps/default/keymap.c b/keyboards/ps2avrGB/keymaps/default/keymap.c index 5c66cde596..3e4cebc81e 100644 --- a/keyboards/ps2avrGB/keymaps/default/keymap.c +++ b/keyboards/ps2avrGB/keymaps/default/keymap.c @@ -18,14 +18,14 @@ along with this program. If not, see . #include "ps2avrGB.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( \ - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,HOME,END, \ - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, DEL, \ - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, INS, \ - CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, PGUP,\ - LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT, UP, PGDN,\ - LCTL,LALT,LGUI, SPC, RGUI,RALT,RCTL,LEFT,DOWN,RGHT \ - ), + KC_KEYMAP( + ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,HOME,END, + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, DEL, + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, INS, + CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, PGUP, + LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT, UP, PGDN, + LCTL,LALT,LGUI, SPC, RGUI,RALT,RCTL,LEFT,DOWN,RGHT + ) }; const uint16_t PROGMEM fn_actions[] = { From 40fe30e4d6b521284fa3cb7ae217ebb6d013bcdf Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Wed, 3 May 2017 23:47:52 +0200 Subject: [PATCH 37/86] dynamic_macro.h: Ignore all the initial key releases Right after the user initiates the macro recording, they usually need to release some keys used to access the DYN_REC_START layers. It makes sense to ignore them. Note: The keys used to access the DYN_REC_STOP key are *not* ignored. --- quantum/dynamic_macro.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 939816a597..1a8ec40326 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -97,17 +97,24 @@ void dynamic_macro_play( /** * Record a single key in a dynamic macro. * + * @param macro_buffer[in] The start of the used macro buffer. * @param macro_pointer[in,out] The current buffer position. * @param macro_end2[in] The end of the other macro which shouldn't be overwritten. * @param direction[in] Either +1 or -1, which way to iterate the buffer. * @param record[in] The current keypress. */ void dynamic_macro_record_key( + keyrecord_t *macro_buffer, keyrecord_t **macro_pointer, keyrecord_t *macro_end2, int8_t direction, keyrecord_t *record) { + /* If we've just started recording, ignore all the key releases. */ + if (!record->event.pressed && *macro_pointer == macro_buffer) { + return; + } + if (*macro_pointer + direction != macro_end2) { **macro_pointer = *record; *macro_pointer += direction; @@ -230,10 +237,10 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) /* Store the key in the macro buffer and process it normally. */ switch (macro_id) { case 1: - dynamic_macro_record_key(¯o_pointer, r_macro_end, +1, record); + dynamic_macro_record_key(macro_buffer, ¯o_pointer, r_macro_end, +1, record); break; case 2: - dynamic_macro_record_key(¯o_pointer, macro_end, -1, record); + dynamic_macro_record_key(r_macro_buffer, ¯o_pointer, macro_end, -1, record); break; } return true; From 5e2a9992783e584f66dfeef16abf9d31c976311a Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 4 May 2017 00:58:01 +0200 Subject: [PATCH 38/86] dynamic_macro.h: Always toggle the backlight twice as a notification Apparently sometimes the backlight was toggled only once and it was left on. --- quantum/dynamic_macro.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 1a8ec40326..c9120897f8 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -119,9 +119,7 @@ void dynamic_macro_record_key( **macro_pointer = *record; *macro_pointer += direction; } else { - /* Notify about the end of buffer. The blinks are paired - * because they should happen on both down and up events. */ - backlight_toggle(); + dynamic_macro_led_blink(); } } From 436d661775178fb62b46afdc3d755fdb413dcb35 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 4 May 2017 01:19:05 +0200 Subject: [PATCH 39/86] dynamic_macro.h: Fix an off-by-two error We need to check whether we just passed the after-the-end point of the other macro. Instead we were checking whether we are going to reach it now. --- quantum/dynamic_macro.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index c9120897f8..9e7845c992 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -99,14 +99,14 @@ void dynamic_macro_play( * * @param macro_buffer[in] The start of the used macro buffer. * @param macro_pointer[in,out] The current buffer position. - * @param macro_end2[in] The end of the other macro which shouldn't be overwritten. + * @param macro2_end[in] The last buffer element it is safe to use before overwriting the other macro. * @param direction[in] Either +1 or -1, which way to iterate the buffer. * @param record[in] The current keypress. */ void dynamic_macro_record_key( keyrecord_t *macro_buffer, keyrecord_t **macro_pointer, - keyrecord_t *macro_end2, + keyrecord_t *macro2_end, int8_t direction, keyrecord_t *record) { @@ -115,7 +115,7 @@ void dynamic_macro_record_key( return; } - if (*macro_pointer + direction != macro_end2) { + if (*macro_pointer - direction != macro2_end) { **macro_pointer = *record; *macro_pointer += direction; } else { From 4b50ea15a954de2e6062aa7228bd1f9f76669ce7 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 4 May 2017 01:37:46 +0200 Subject: [PATCH 40/86] dynamic_macro.h: Do not save the keys being held when stopping the recording More specifically, we save them and then place the `macro_end` pointer before them so they are essentially ignored and the other macro may freely overwrite them. --- quantum/dynamic_macro.h | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 9e7845c992..c4017aec97 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -127,10 +127,22 @@ void dynamic_macro_record_key( * End recording of the dynamic macro. Essentially just update the * pointer to the end of the macro. */ -void dynamic_macro_record_end(keyrecord_t *macro_pointer, keyrecord_t **macro_end) +void dynamic_macro_record_end( + keyrecord_t *macro_buffer, + keyrecord_t *macro_pointer, + int8_t direction, + keyrecord_t **macro_end) { dynamic_macro_led_blink(); + /* Do not save the keys being held when stopping the recording, + * i.e. the keys used to access the layer DYN_REC_STOP is on. + */ + while (macro_pointer != macro_buffer && + (macro_pointer - direction)->event.pressed) { + macro_pointer -= direction; + } + *macro_end = macro_pointer; } @@ -222,10 +234,10 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) * starts. */ switch (macro_id) { case 1: - dynamic_macro_record_end(macro_pointer, ¯o_end); + dynamic_macro_record_end(macro_buffer, macro_pointer, +1, ¯o_end); break; case 2: - dynamic_macro_record_end(macro_pointer, &r_macro_end); + dynamic_macro_record_end(r_macro_buffer, macro_pointer, -1, &r_macro_end); break; } macro_id = 0; From 425f0a768b5b8389d88bd187d9029171f392b883 Mon Sep 17 00:00:00 2001 From: tengg Date: Thu, 4 May 2017 13:27:35 -0400 Subject: [PATCH 41/86] revise HHKB bootloader_size to 4096 such that sw reset works (#1274) --- keyboards/hhkb/rules.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/hhkb/rules.mk b/keyboards/hhkb/rules.mk index a46271f023..e4190039f7 100644 --- a/keyboards/hhkb/rules.mk +++ b/keyboards/hhkb/rules.mk @@ -53,7 +53,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT #OPT_DEFS += -DBOOTLOADER_SIZE=4096 # as per original hasu settings -OPT_DEFS += -DBOOTLOADER_SIZE=512 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Build Options # comment out to disable the options. From 8e94c9b4cba4cf3479154a11faacfa2bbad50098 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 4 May 2017 22:39:02 +0200 Subject: [PATCH 42/86] dynamic_macro.h: Make the documentation more clear --- quantum/dynamic_macro.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index c4017aec97..6aae7d2302 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -99,7 +99,7 @@ void dynamic_macro_play( * * @param macro_buffer[in] The start of the used macro buffer. * @param macro_pointer[in,out] The current buffer position. - * @param macro2_end[in] The last buffer element it is safe to use before overwriting the other macro. + * @param macro2_end[in] The end of the other macro. * @param direction[in] Either +1 or -1, which way to iterate the buffer. * @param record[in] The current keypress. */ @@ -115,6 +115,9 @@ void dynamic_macro_record_key( return; } + /* The other end of the other macro is the last buffer element it + * is safe to use before overwriting the other macro. + */ if (*macro_pointer - direction != macro2_end) { **macro_pointer = *record; *macro_pointer += direction; @@ -170,7 +173,7 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) * ¯o_buffer macro_end * v v * +------------------------------------------------------------+ - * |>>>>>> MACRO1 >>>>>>| |<<<<<<<<<<<<< MACRO2 <<<<<<<<<<<<<| + * |>>>>>> MACRO1 >>>>>> <<<<<<<<<<<<< MACRO2 <<<<<<<<<<<<<| * +------------------------------------------------------------+ * ^ ^ * r_macro_end r_macro_buffer From 10a7cd7e5ae1affe226423dd94c6443f8cf64e22 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Thu, 4 May 2017 22:55:35 +0200 Subject: [PATCH 43/86] dynamic_macro.h: Add debug logs --- quantum/dynamic_macro.h | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 6aae7d2302..7dca30f076 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -53,6 +53,15 @@ void dynamic_macro_led_blink(void) backlight_toggle(); } +/* Convenience macros used for retrieving the debug info. All of them + * need a `direction` variable accessible at the call site. + */ +#define DYNAMIC_MACRO_CURRENT_SLOT() (direction > 0 ? 1 : 2) +#define DYNAMIC_MACRO_CURRENT_LENGTH(BEGIN, POINTER) \ + ((int)(direction * ((POINTER) - (BEGIN)))) +#define DYNAMIC_MACRO_CURRENT_CAPACITY(BEGIN, END2) \ + ((int)(direction * ((END2) - (BEGIN)) + 1)) + /** * Start recording of the dynamic macro. * @@ -62,6 +71,8 @@ void dynamic_macro_led_blink(void) void dynamic_macro_record_start( keyrecord_t **macro_pointer, keyrecord_t *macro_buffer) { + dprintln("dynamic macro recording: started"); + dynamic_macro_led_blink(); clear_keyboard(); @@ -79,6 +90,8 @@ void dynamic_macro_record_start( void dynamic_macro_play( keyrecord_t *macro_buffer, keyrecord_t *macro_end, int8_t direction) { + dprintf("dynamic macro: slot %d playback\n", DYNAMIC_MACRO_CURRENT_SLOT()); + uint32_t saved_layer_state = layer_state; clear_keyboard(); @@ -112,6 +125,7 @@ void dynamic_macro_record_key( { /* If we've just started recording, ignore all the key releases. */ if (!record->event.pressed && *macro_pointer == macro_buffer) { + dprintln("dynamic macro: ignoring a leading key-up event"); return; } @@ -124,6 +138,12 @@ void dynamic_macro_record_key( } else { dynamic_macro_led_blink(); } + + dprintf( + "dynamic macro: slot %d length: %d/%d\n", + DYNAMIC_MACRO_CURRENT_SLOT(), + DYNAMIC_MACRO_CURRENT_LENGTH(macro_buffer, *macro_pointer), + DYNAMIC_MACRO_CURRENT_CAPACITY(macro_buffer, macro2_end)); } /** @@ -143,9 +163,15 @@ void dynamic_macro_record_end( */ while (macro_pointer != macro_buffer && (macro_pointer - direction)->event.pressed) { + dprintln("dynamic macro: trimming a trailing key-down event"); macro_pointer -= direction; } + dprintf( + "dynamic macro: slot %d saved, length: %d\n", + DYNAMIC_MACRO_CURRENT_SLOT(), + DYNAMIC_MACRO_CURRENT_LENGTH(macro_buffer, macro_pointer)); + *macro_end = macro_pointer; } @@ -264,4 +290,8 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record) return true; } +#undef DYNAMIC_MACRO_CURRENT_SLOT +#undef DYNAMIC_MACRO_CURRENT_LENGTH +#undef DYNAMIC_MACRO_CURRENT_CAPACITY + #endif From a1e156a3d20e10134ac01b4cc2eaf2c92c0d2f23 Mon Sep 17 00:00:00 2001 From: Wojciech Siewierski Date: Fri, 5 May 2017 00:11:24 +0200 Subject: [PATCH 44/86] dynamic_macro.h: Do not use backlight_toggle if backlight is disabled Fixes #1199. --- quantum/dynamic_macro.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h index 7dca30f076..f242405def 100644 --- a/quantum/dynamic_macro.h +++ b/quantum/dynamic_macro.h @@ -48,9 +48,11 @@ enum dynamic_macro_keycodes { /* Blink the LEDs to notify the user about some event. */ void dynamic_macro_led_blink(void) { +#ifdef BACKLIGHT_ENABLE backlight_toggle(); _delay_ms(100); backlight_toggle(); +#endif } /* Convenience macros used for retrieving the debug info. All of them From cb60fe393fd4e5dc43c0b11b22f76e6ece89d0f4 Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Fri, 5 May 2017 14:41:13 +0100 Subject: [PATCH 45/86] Add new keymap for dshields. --- keyboards/planck/keymaps/dshields/Makefile | 11 +++ keyboards/planck/keymaps/dshields/config.h | 23 +++++ keyboards/planck/keymaps/dshields/keymap.c | 98 ++++++++++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 keyboards/planck/keymaps/dshields/Makefile create mode 100644 keyboards/planck/keymaps/dshields/config.h create mode 100644 keyboards/planck/keymaps/dshields/keymap.c diff --git a/keyboards/planck/keymaps/dshields/Makefile b/keyboards/planck/keymaps/dshields/Makefile new file mode 100644 index 0000000000..5eaceda534 --- /dev/null +++ b/keyboards/planck/keymaps/dshields/Makefile @@ -0,0 +1,11 @@ +ifndef QUANTUM_DIR + include ../../../../Makefile +endif + +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +COMMAND_ENABLE = yes # Commands for debug and configuration +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +TAP_DANCE_ENABLE = no +AUDIO_ENABLE = no diff --git a/keyboards/planck/keymaps/dshields/config.h b/keyboards/planck/keymaps/dshields/config.h new file mode 100644 index 0000000000..35358af0b0 --- /dev/null +++ b/keyboards/planck/keymaps/dshields/config.h @@ -0,0 +1,23 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#ifndef NO_DEBUG +#define NO_DEBUG +#endif +#ifndef NO_PRINT +#define NO_PRINT +#endif + +#include "../../config.h" + +#define TAPPING_TOGGLE 2 +#define TAPPING_TERM 300 + +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 300 + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +#endif + diff --git a/keyboards/planck/keymaps/dshields/keymap.c b/keyboards/planck/keymaps/dshields/keymap.c new file mode 100644 index 0000000000..e96a67a53a --- /dev/null +++ b/keyboards/planck/keymaps/dshields/keymap.c @@ -0,0 +1,98 @@ +#include "planck.h" +#include "backlight.h" +#include "config.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +enum planck_layers { DEF, LWR, RSE, FUN }; +enum planck_keycodes { M1 = SAFE_RANGE, M2, M3, M4 }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Default + * ,-----------------------------------------------------------------------------------. + * | Q | W | E | R | T | Esc | Bksp | Y | U | I | O | P | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | A | S | D | F | G | Tab | Enter| H | J | K | L | ; | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Z | X | C | V | B | Shift| Play | N | M | , | . | / | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Ctrl | Super| Alt | Fun | Lower| Space | Raise| Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ + [DEF] = { + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, + {KC_Z, KC_X, KC_C, KC_V, KC_B, OSM(MOD_LSFT), XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH}, + {KC_LCTL, KC_LGUI, KC_LALT, TT(FUN), TT(LWR), KC_SPC, KC_SPC, TT(RSE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + }, + /* Lower + * ,-----------------------------------------------------------------------------------. + * | ! | @ | # | $ | % | | | ^ | & | * | ( | ) | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | | | | | | | _ | + | | { | } | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | " | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Home | PgDn | PgUp | End | + * `-----------------------------------------------------------------------------------' + */ + [LWR] = { + {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, + {S(KC_GRV), _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, _______, S(KC_LBRC), S(KC_RBRC)}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, S(KC_QUOT), S(KC_BSLS)}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END} + }, + /* Raise + * ,-----------------------------------------------------------------------------------. + * | 1 | 2 | 3 | 4 | 5 | | | 6 | 7 | 8 | 9 | 0 | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ` | | | | | | | - | = | | [ | ] | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Home | PgDn | PgUp | End | + * `-----------------------------------------------------------------------------------' + */ + [RSE] = { + {KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0}, + {KC_GRV, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, KC_LBRC, KC_RBRC}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_BSLS}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END} + }, + /* Function + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | Reset|Delete| F6 | F7 | F8 | F9 | F10 | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | F11 | F12 | F13 | F14 | F15 | | | F16 | F17 | F18 | F19 | F20 | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * |BlTggl|BlStep| | M1 | M2 | | | M3 | M4 |MsBtn1|MsBtn2|MsBtn3| + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | |MsLeft|MsDown| MsUp |MsRght| + * `-----------------------------------------------------------------------------------' + */ + [FUN] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, RESET, KC_DEL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10}, + {KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20}, + {BL_TOGG, BL_STEP, _______, M1, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R} + }, + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case M1: + if (record->event.pressed) { + SEND_STRING(" 2>&1 > "); + } + return false; + break; + } + return true; +} + +void matrix_init_user(void) { +} + From b2083e21a219dd0cf3d58f618f46b911987d2a5e Mon Sep 17 00:00:00 2001 From: Tobias O Date: Fri, 5 May 2017 23:55:06 +0200 Subject: [PATCH 46/86] lowercase .jpg I think i guess that fixes the image link - currently its broken --- keyboards/xd60/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/xd60/readme.md b/keyboards/xd60/readme.md index 224498caa9..dcc45ead29 100644 --- a/keyboards/xd60/readme.md +++ b/keyboards/xd60/readme.md @@ -1,6 +1,6 @@ # QMK Firmware for XIUDI's 60% XD60 PCB -![Top View of a pair of XD60 Keyboard](./xd60.JPG) +![Top View of a pair of XD60 Keyboard](./xd60.jpg) ## Quantum MK Firmware For the full Quantum feature list, see [the parent readme.md](/readme.md). From 9e7448ea89a1a88317f0acb805819af79d0a76e3 Mon Sep 17 00:00:00 2001 From: coderkun Date: Wed, 5 Apr 2017 15:53:58 +0200 Subject: [PATCH 47/86] Fix F-keys on right hand to start on first key --- keyboards/ergodox/keymaps/coderkun_neo2/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c index 3b82b7ce06..2d6f76856a 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c +++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c @@ -163,7 +163,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, // right hand - KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, UC(0x2194),UC(0x2190),UC(0x2192),UC(0x2191),UC(0x2193),KC_TRNS, KC_TRNS, UC(0x2713),UC(0x2715),UC(0x2022),UC(0x2236),KC_TRNS, KC_TRNS, UC(0x21D4),UC(0x21D0),UC(0x21D2),UC(0x21D1),UC(0x21D3),KC_TRNS, From d28d390ad6dae0c23424e1cfa51760d5ba314e8b Mon Sep 17 00:00:00 2001 From: coderkun Date: Sat, 6 May 2017 12:25:24 +0200 Subject: [PATCH 48/86] =?UTF-8?q?Update=20README=20for=20keymap=20?= =?UTF-8?q?=E2=80=9Ccoderkun=5Fneo2=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keyboards/ergodox/keymaps/coderkun_neo2/readme.md | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md index 27ec805adc..0c9290bf08 100644 --- a/keyboards/ergodox/keymaps/coderkun_neo2/readme.md +++ b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md @@ -4,21 +4,14 @@ The idea of this layout is to use it for [Neo2](http://www.neo-layout.org) but a The main goal of the default layer is to provide a complete symmetric layout with each modifier equally placed for both hands (mirror, of course). -It also features a layer for additional keys like F-keys (F1 – F12), some mouse keys and (hopefully in the near future) some useful Unicode symbols. +It also features a layer for additional keys like F-keys (F1 – F12), some mouse keys and some useful Unicode symbols. ## Build -1. Enable Unicode in Makefile - - ``` - UNICODE_ENABLE = yes - ``` -2. Build as usual - ``` make clean - make KEYMAP=coderkun_neo2 + make coderkun_neo2 ``` From 3381254c65375c7da451973c7d843bf257a0d4a7 Mon Sep 17 00:00:00 2001 From: TerryMathews Date: Sun, 7 May 2017 17:23:19 -0400 Subject: [PATCH 49/86] Establish support for Bathroom Epiphanies Tiger Lily controller Replacement controller for Filco Majestouch 2 104 key keyboard. BE advises code will also work with the Black Petal controller - I don't have one to test with. Tests working perfectly on my Filco. --- keyboards/tiger_lily/Makefile | 3 + keyboards/tiger_lily/config.h | 147 ++++++++++++++++++ keyboards/tiger_lily/keymaps/default/Makefile | 21 +++ keyboards/tiger_lily/keymaps/default/config.h | 8 + keyboards/tiger_lily/keymaps/default/keymap.c | 11 ++ .../tiger_lily/keymaps/default/readme.md | 1 + keyboards/tiger_lily/matrix.c | 135 ++++++++++++++++ keyboards/tiger_lily/readme.md | 32 ++++ keyboards/tiger_lily/rules.mk | 71 +++++++++ keyboards/tiger_lily/tiger_lily.c | 63 ++++++++ keyboards/tiger_lily/tiger_lily.h | 50 ++++++ 11 files changed, 542 insertions(+) create mode 100644 keyboards/tiger_lily/Makefile create mode 100644 keyboards/tiger_lily/config.h create mode 100644 keyboards/tiger_lily/keymaps/default/Makefile create mode 100644 keyboards/tiger_lily/keymaps/default/config.h create mode 100644 keyboards/tiger_lily/keymaps/default/keymap.c create mode 100644 keyboards/tiger_lily/keymaps/default/readme.md create mode 100644 keyboards/tiger_lily/matrix.c create mode 100644 keyboards/tiger_lily/readme.md create mode 100644 keyboards/tiger_lily/rules.mk create mode 100644 keyboards/tiger_lily/tiger_lily.c create mode 100644 keyboards/tiger_lily/tiger_lily.h diff --git a/keyboards/tiger_lily/Makefile b/keyboards/tiger_lily/Makefile new file mode 100644 index 0000000000..57b2ef62e5 --- /dev/null +++ b/keyboards/tiger_lily/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif diff --git a/keyboards/tiger_lily/config.h b/keyboards/tiger_lily/config.h new file mode 100644 index 0000000000..4908192906 --- /dev/null +++ b/keyboards/tiger_lily/config.h @@ -0,0 +1,147 @@ +/* +Copyright 2012 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Bathroom Epiphanies +#define PRODUCT tiger_lily +#define DESCRIPTION Tiger Lily controller for the Filco Majestouch 2 + +/* + * Frosty Flake Rev. 20140521 made by Bathroom Ephiphanies + * Ported from the Bathroom Epiphanies TMK Firmware: + * https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers + * + */ + +/* key matrix size */ +#define MATRIX_ROWS 8 // Row0 - Row7 in the schematic +#define MATRIX_COLS 18 // ColA - ColR in the schematic + +/* + * Keyboard Matrix Assignments + */ +#define UNUSED_PINS { B0, C4, D3 } + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/tiger_lily/keymaps/default/Makefile b/keyboards/tiger_lily/keymaps/default/Makefile new file mode 100644 index 0000000000..9d3df5964f --- /dev/null +++ b/keyboards/tiger_lily/keymaps/default/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/tiger_lily/keymaps/default/config.h b/keyboards/tiger_lily/keymaps/default/config.h new file mode 100644 index 0000000000..8893d122e0 --- /dev/null +++ b/keyboards/tiger_lily/keymaps/default/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif diff --git a/keyboards/tiger_lily/keymaps/default/keymap.c b/keyboards/tiger_lily/keymaps/default/keymap.c new file mode 100644 index 0000000000..f4526dc59b --- /dev/null +++ b/keyboards/tiger_lily/keymaps/default/keymap.c @@ -0,0 +1,11 @@ +#include "tiger_lily.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = KEYMAP(\ + KC_ESC, 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, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + 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, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ + KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT) +}; \ No newline at end of file diff --git a/keyboards/tiger_lily/keymaps/default/readme.md b/keyboards/tiger_lily/keymaps/default/readme.md new file mode 100644 index 0000000000..4626859df4 --- /dev/null +++ b/keyboards/tiger_lily/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for tiger_lily diff --git a/keyboards/tiger_lily/matrix.c b/keyboards/tiger_lily/matrix.c new file mode 100644 index 0000000000..57e352520a --- /dev/null +++ b/keyboards/tiger_lily/matrix.c @@ -0,0 +1,135 @@ +/* + Copyright 2017 Gabriel Young + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include +#include +#include +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" + +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 +#endif +static uint8_t debouncing = DEBOUNCING_DELAY; + +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static matrix_row_t scan_col(void) { + return ( + (PINC&(1<<2) ? 0 : ((matrix_row_t)1<<0)) | \ + (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<1)) | \ + (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) | \ + (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<3)) | \ + (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) | \ + (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<5)) | \ + (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<6)) | \ + (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<7)) + ); +} + +static void select_col(uint8_t col) { + switch (col) { + case 0: PORTD = (PORTD & ~0b01110111) | 0b01110110; break; \ + case 1: PORTD = (PORTD & ~0b01110111) | 0b01100001; break; \ + case 2: PORTD = (PORTD & ~0b01110111) | 0b01100101; break; \ + case 3: PORTD = (PORTD & ~0b01110111) | 0b00000011; break; \ + case 4: PORTD = (PORTD & ~0b01110111) | 0b00000111; break; \ + case 5: PORTD = (PORTD & ~0b01110111) | 0b00010011; break; \ + case 6: PORTD = (PORTD & ~0b01110111) | 0b00010111; break; \ + case 7: PORTD = (PORTD & ~0b01110111) | 0b00100011; break; \ + case 8: PORTD = (PORTD & ~0b01110111) | 0b00100111; break; \ + case 9: PORTD = (PORTD & ~0b01110111) | 0b00110011; break; \ + case 10: PORTD = (PORTD & ~0b01110111) | 0b01110010; break; \ + case 11: PORTD = (PORTD & ~0b01110111) | 0b01100110; break; \ + case 12: PORTD = (PORTD & ~0b01110111) | 0b01110000; break; \ + case 13: PORTD = (PORTD & ~0b01110111) | 0b01100100; break; \ + case 14: PORTD = (PORTD & ~0b01110111) | 0b01100000; break; \ + case 15: PORTD = (PORTD & ~0b01110111) | 0b01000111; break; \ + case 16: PORTD = (PORTD & ~0b01110111) | 0b01000011; break; \ + case 17: PORTD = (PORTD & ~0b01110111) | 0b00110111; break; + } +} + +void matrix_init(void) { + /* Column output pins */ \ + DDRD |= 0b01110111; \ + /* Row input pins */ \ + DDRC &= ~0b10000100; \ + DDRB &= ~0b01111110; \ + PORTC |= 0b10000100; \ + PORTB |= 0b01111110; + + for (uint8_t i=0; i < MATRIX_ROWS; i++) + matrix[i] = matrix_debouncing[i] = 0; + + matrix_init_quantum(); +} + +uint8_t matrix_scan(void) { + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + select_col(col); + _delay_us(3); + matrix_row_t col_scan = scan_col(); + for (uint8_t row = 0; row < MATRIX_ROWS; row++) { + bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<] +``` + +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboards/tiger_lily/rules.mk b/keyboards/tiger_lily/rules.mk new file mode 100644 index 0000000000..dd2f4b6eec --- /dev/null +++ b/keyboards/tiger_lily/rules.mk @@ -0,0 +1,71 @@ +# MCU name +#MCU = at90usb1287 +MCU = atmega32u2 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) +CONSOLE_ENABLE ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI controls +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 +FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches + +CUSTOM_MATRIX = yes +SRC += matrix.c \ No newline at end of file diff --git a/keyboards/tiger_lily/tiger_lily.c b/keyboards/tiger_lily/tiger_lily.c new file mode 100644 index 0000000000..d2e7ba7095 --- /dev/null +++ b/keyboards/tiger_lily/tiger_lily.c @@ -0,0 +1,63 @@ +#include "tiger_lily.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + + matrix_init_user(); +} + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + // put your per-action keyboard code here + // runs for every action, just before processing by the firmware + + return process_record_user(keycode, record); +} + +void led_set_kb(uint8_t usb_led) { + DDRB |= (1<<7); + DDRC |= (1<<5) | (1<<6); + + print_dec(usb_led); + + if (usb_led & (1< Date: Sun, 7 May 2017 14:42:21 -0700 Subject: [PATCH 50/86] [Miuni32] Rm accidentally committed file --- .../miuni32/keymaps/adam-lee/keymap.c.backup | 42 ------------------- 1 file changed, 42 deletions(-) delete mode 100644 keyboards/miuni32/keymaps/adam-lee/keymap.c.backup diff --git a/keyboards/miuni32/keymaps/adam-lee/keymap.c.backup b/keyboards/miuni32/keymaps/adam-lee/keymap.c.backup deleted file mode 100644 index 2f634fffbd..0000000000 --- a/keyboards/miuni32/keymaps/adam-lee/keymap.c.backup +++ /dev/null @@ -1,42 +0,0 @@ -#include "miuni32.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] ={ - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_RSFT, KC_ENT}, - {KC_Z, KC_X, KC_C, KC_V, KC_V, KC_SPC, KC_B, KC_N, KC_M , MO(1), KC_RCTL} - }, -[1] ={ - {KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL}, - {KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_TRNS}, - {RGB_TOG, RGB_HUI, RGB_HUD, RGB_SAI, KC_TRNS, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, RGB_MOD}, - } -}; -const uint16_t PROGMEM fn_actions[] = { - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - keyevent_t event = record->event; - - switch (id) { - - } - return MACRO_NONE; -} - -void matrix_init_user(void) { - -} - -void matrix_scan_user(void) { - -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - -void led_set_user(uint8_t usb_led) { - -} From 84a358845bbed754b5b0c061ff36773dae131cfd Mon Sep 17 00:00:00 2001 From: TerryMathews Date: Sun, 7 May 2017 18:00:06 -0400 Subject: [PATCH 51/86] Fix compile error --- keyboards/tiger_lily/matrix.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keyboards/tiger_lily/matrix.c b/keyboards/tiger_lily/matrix.c index 57e352520a..d3a0d7ebd1 100644 --- a/keyboards/tiger_lily/matrix.c +++ b/keyboards/tiger_lily/matrix.c @@ -115,6 +115,7 @@ inline matrix_row_t matrix_get_row(uint8_t row) { } void matrix_print(void) { + #ifndef NO_PRINT print("\nr\\c ABCDEFGHIJKLMNOPQR\n"); for (uint8_t row = 0; row < MATRIX_ROWS; row++) { matrix_row_t matrix_row = matrix_get_row(row); @@ -125,6 +126,7 @@ void matrix_print(void) { } print("\n"); } + #endif } uint8_t matrix_key_count(void) { From 9a8904a9c071730ef6712f8be93c38ac4b43fbdb Mon Sep 17 00:00:00 2001 From: Stephen Tudor Date: Mon, 8 May 2017 18:32:15 -0400 Subject: [PATCH 52/86] Add smt keymap for Clueboard (HHKB-style layout) (#1286) * Add keymap for smt Clueboard (HHKB layout) * Add readme for smt Clueboard (HHKB) keymap * Flesh out the keymap a bit more to support Colemak & Dvorak * Update README with layout image --- keyboards/clueboard/keymaps/smt/keymap.c | 181 +++++++++++++++++++++ keyboards/clueboard/keymaps/smt/layout.png | Bin 0 -> 130672 bytes keyboards/clueboard/keymaps/smt/readme.md | 30 ++++ 3 files changed, 211 insertions(+) create mode 100644 keyboards/clueboard/keymaps/smt/keymap.c create mode 100644 keyboards/clueboard/keymaps/smt/layout.png create mode 100644 keyboards/clueboard/keymaps/smt/readme.md diff --git a/keyboards/clueboard/keymaps/smt/keymap.c b/keyboards/clueboard/keymaps/smt/keymap.c new file mode 100644 index 0000000000..732086fb56 --- /dev/null +++ b/keyboards/clueboard/keymaps/smt/keymap.c @@ -0,0 +1,181 @@ +#include "clueboard.h" + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _FL 3 +#define _CL 4 + +enum planck_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK +}; + +// Helpful defines +#define _______ KC_TRNS +#define XXXXXXX KC_NO +#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT)) + +// Custom macros +#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl +#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt) +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _QWERTY: Base Layer (Default Layer) + * ,-----------------------------------------------------------. ,---. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| |PgU| + * |-----------------------------------------------------------| |---| + * |HpTab| Q| W| E| R| T| Y| U| I| O| P| [| ]| BS| |PgD| + * |-----------------------------------------------------------| `---' + * |CtlEsc| A| S| D| F| G| H| J| K| L| ;| '| | Ent| + * |--------------------------------------------------------------. + * |Shift| | Z| X| C| V| B| N| M| ,| .| /|Shift| Fn| Up| + * |------------------------------------------------------------------. + * |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt| + * `------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PGUP, \ + HPR_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_BSPC, KC_PGDN, \ + CTL_ESC, 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, \ + KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, MO(_FL), KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC,KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _COLEMAK: Base Layer + * ,-----------------------------------------------------------. ,---. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| |PgU| + * |-----------------------------------------------------------| |---| + * |HpTab| Q| W| F| P| G| J| L| U| Y| ;| [| ]| BS| |PgD| + * |-----------------------------------------------------------| `---' + * |CtlEsc| A| R| S| T| D| H| N| E| I| O| '| | Ent| + * |--------------------------------------------------------------. + * |Shift| | Z| X| C| V| B| K| M| ,| .| /|Shift| Fn| Up| + * |------------------------------------------------------------------. + * |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt| + * `------------------------------------------------------------------' + */ +[_COLEMAK] = KEYMAP( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PGUP, \ + HPR_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_BSPC, KC_PGDN, \ + CTL_ESC, 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, \ + KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, MO(_FL), KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC,KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _DVORAK: Base Layer + * ,-----------------------------------------------------------. ,---. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| \| `| |PgU| + * |-----------------------------------------------------------| |---| + * |HpTab| '| ,| .| P| Y| F| G| C| R| L| /| =| BS| |PgD| + * |-----------------------------------------------------------| `---' + * |CtlEsc| A| O| E| U| I| D| H| T| N| S| -| | Ent| + * |--------------------------------------------------------------. + * |Shift| | ;| Q| J| K| X| B| M| W| V| Z|Shift| Fn| Up| + * |------------------------------------------------------------------. + * |Ctrl|Gui|Alt | | Space| Space| |Alt |Gui |Ctrl|Left|Down|Rgt| + * `------------------------------------------------------------------' + */ +[_DVORAK] = KEYMAP( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, KC_PGUP, \ + HPR_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_BSPC, KC_PGDN, \ + CTL_ESC, 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, \ + KC_LSFT, XXXXXXX, KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, MO(_FL), KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC,KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + */ +[_FL] = KEYMAP( + 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, _______, _______, BL_STEP, \ + _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, KC_DEL, _______, \ + _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \ + _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), KC_PGUP, \ + _______, _______, _______, _______, _______,_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), + + /* Keymap _CL: Control layer + */ +[_CL] = KEYMAP( + _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \ + _______, _______, _______,_______,RESET, _______,_______,QWERTY, COLEMAK,DVORAK, _______, _______, _______, _______, RGB_VAD, \ + _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \ + MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI, \ + _______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI), +}; + +/* This is a list of user defined functions. F(N) corresponds to item N + of this list. + */ +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(0), // Calls action_function() +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t mods_pressed; + static bool mod_flag; + + switch (id) { + case 0: + /* Handle the combined Grave/Esc key + */ + mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed + + if (record->event.pressed) { + /* The key is being pressed. + */ + if (mods_pressed) { + mod_flag = true; + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + /* The key is being released. + */ + if (mod_flag) { + mod_flag = false; + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +} + +void persistant_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + persistant_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + } + return true; +} \ No newline at end of file diff --git a/keyboards/clueboard/keymaps/smt/layout.png b/keyboards/clueboard/keymaps/smt/layout.png new file mode 100644 index 0000000000000000000000000000000000000000..6c27277a9abb98c2e5d80c7aa30f44d424e33a6e GIT binary patch literal 130672 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 literal 0 HcmV?d00001 diff --git a/keyboards/clueboard/keymaps/smt/readme.md b/keyboards/clueboard/keymaps/smt/readme.md new file mode 100644 index 0000000000..6a8b3edb44 --- /dev/null +++ b/keyboards/clueboard/keymaps/smt/readme.md @@ -0,0 +1,30 @@ +``` + ___ _____ _ _ _ __ __ _ __ +|__ \ / ____| | | | | | / / / /(_) / / + ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / / + |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / / + |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _ + (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_) +``` + +# smt Clueboard Layout (HHKB variant) + +![Clueboard Layout Image](layout.png) + +This is smt's HHKB variant layout, based on the default layout that comes +flashed on every Clueboard. The primary differences from the default are: + +- The Backspace key is moved down into the traditional `\` position +- `\` and `` ` `` are assigned to the "split-backspace" positions +- The right Shift is split to allow for a Fn key to its right +- The modifiers on the right side now mirror the left side (`Alt`/`Super`/`Ctrl`) + +For the most part, it's a straightforward and easy to follow layout. There +are a few special keys: + +- The Esc key sends `Esc` when tapped, `` ` `` when `Alt`/`Super`/`Ctrl`/`Fn` is held, or `~` when `Shift` is held +- The Tab key sends `Tab` when tapped, or `Super+Ctrl+Alt+Shift` (a.k.a. [Hyper]) when held +- The key traditionally in the Caps-Lock position has been re-mapped to send `Esc` when tapped, or `Ctrl` when held +- The left Shift key sends `Enter` when tapped, or `Shift` when held + +[Hyper]: http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/ From bd2c0b9648b67db51a92f69bc862c0eb7bccf14c Mon Sep 17 00:00:00 2001 From: Nephiel Date: Wed, 10 May 2017 19:26:39 +0200 Subject: [PATCH 53/86] Call led_set for layer action events to update LEDs on layer changes --- tmk_core/common/action.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 4ba1cc251a..8640dfab35 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -537,6 +537,21 @@ void process_action(keyrecord_t *record, action_t action) break; } +#ifndef NO_ACTION_LAYER + // if this event is a layer action, update the leds + switch (action.kind.id) { + case ACT_LAYER: + #ifndef NO_ACTION_TAPPING + case ACT_LAYER_TAP: + case ACT_LAYER_TAP_EXT: + #endif + led_set(host_keyboard_leds()); + break; + default: + break; + } +#endif + #ifndef NO_ACTION_ONESHOT /* Because we switch layers after a oneshot event, we need to release the * key before we leave the layer or no key up event will be generated. From eb3f80b92415c3d33d3819deb45739997cfa8a9a Mon Sep 17 00:00:00 2001 From: Daniel Shields Date: Fri, 5 May 2017 15:49:35 +0100 Subject: [PATCH 54/86] Add new features to dshields keymap. - one shot layers, dynamic macros and tap dance keys - add a basic readme.md and layout image. --- keyboards/planck/keymaps/dshields/Makefile | 3 +- keyboards/planck/keymaps/dshields/config.h | 34 ++++++++++------ .../keymaps/dshields/keyboard-layout.jpg | Bin 0 -> 50615 bytes keyboards/planck/keymaps/dshields/keymap.c | 38 +++++++++--------- keyboards/planck/keymaps/dshields/readme.md | 12 ++++++ 5 files changed, 55 insertions(+), 32 deletions(-) create mode 100644 keyboards/planck/keymaps/dshields/keyboard-layout.jpg create mode 100644 keyboards/planck/keymaps/dshields/readme.md diff --git a/keyboards/planck/keymaps/dshields/Makefile b/keyboards/planck/keymaps/dshields/Makefile index 5eaceda534..9e18a3542e 100644 --- a/keyboards/planck/keymaps/dshields/Makefile +++ b/keyboards/planck/keymaps/dshields/Makefile @@ -7,5 +7,6 @@ COMMAND_ENABLE = yes # Commands for debug and configuration BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -TAP_DANCE_ENABLE = no +TAP_DANCE_ENABLE = yes AUDIO_ENABLE = no +API_SYSEX_ENABLE = no diff --git a/keyboards/planck/keymaps/dshields/config.h b/keyboards/planck/keymaps/dshields/config.h index 35358af0b0..4d5be0a268 100644 --- a/keyboards/planck/keymaps/dshields/config.h +++ b/keyboards/planck/keymaps/dshields/config.h @@ -1,23 +1,31 @@ #ifndef CONFIG_USER_H #define CONFIG_USER_H -#ifndef NO_DEBUG -#define NO_DEBUG -#endif -#ifndef NO_PRINT -#define NO_PRINT -#endif - #include "../../config.h" -#define TAPPING_TOGGLE 2 -#define TAPPING_TERM 300 - -#define ONESHOT_TAP_TOGGLE 2 -#define ONESHOT_TIMEOUT 300 - #define _______ KC_TRNS #define XXXXXXX KC_NO +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 500 + +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 60 +#define MOUSEKEY_MAX_SPEED 7 +#define MOUSEKEY_WHEEL_DELAY 0 + +#define DM_PLAY DYN_MACRO_PLAY1 +#define DM_STRT DYN_REC_START1 +#define DM_STOP DYN_REC_STOP + +#define OSL_RSE OSL(RSE) +#define OSL_LWR OSL(LWR) +#define OSL_FUN OSL(FUN) + +#define OSM_CTL OSM(MOD_LCTL) +#define OSM_ALT OSM(MOD_LALT) +#define OSM_SFT OSM(MOD_LSFT) + #endif diff --git a/keyboards/planck/keymaps/dshields/keyboard-layout.jpg b/keyboards/planck/keymaps/dshields/keyboard-layout.jpg new file mode 100644 index 0000000000000000000000000000000000000000..142f821308baa3c629301205537a097b3fa4a50a GIT binary patch literal 50615 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 B7PJ5W literal 0 HcmV?d00001 diff --git a/keyboards/planck/keymaps/dshields/keymap.c b/keyboards/planck/keymaps/dshields/keymap.c index e96a67a53a..ed7621c77b 100644 --- a/keyboards/planck/keymaps/dshields/keymap.c +++ b/keyboards/planck/keymaps/dshields/keymap.c @@ -7,7 +7,10 @@ extern keymap_config_t keymap_config; enum planck_layers { DEF, LWR, RSE, FUN }; -enum planck_keycodes { M1 = SAFE_RANGE, M2, M3, M4 }; +enum planck_keycodes { DYNAMIC_MACRO_RANGE = SAFE_RANGE }; +enum tap_dance_keys { TD_SCLN }; + +#include "dynamic_macro.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Default @@ -16,16 +19,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | A | S | D | F | G | Tab | Enter| H | J | K | L | ; | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Z | X | C | V | B | Shift| Play | N | M | , | . | / | + * | Z | X | C | V | B | Shift|DmPlay| N | M | , | . | / | * |------+------+------+------+------+------+------+------+------+------+------+------| * | Ctrl | Super| Alt | Fun | Lower| Space | Raise| Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ [DEF] = { - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, - {KC_Z, KC_X, KC_C, KC_V, KC_B, OSM(MOD_LSFT), XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH}, - {KC_LCTL, KC_LGUI, KC_LALT, TT(FUN), TT(LWR), KC_SPC, KC_SPC, TT(RSE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P}, + {KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_ENT, KC_H, KC_J, KC_K, KC_L, TD(TD_SCLN)}, + {KC_Z, KC_X, KC_C, KC_V, KC_B, OSM_SFT, DM_PLAY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH}, + {OSM_CTL, KC_LGUI, OSM_ALT, OSL_FUN, OSL_LWR, KC_SPC, KC_SPC, OSL_RSE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} }, /* Lower * ,-----------------------------------------------------------------------------------. @@ -50,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | ` | | | | | | | - | = | | [ | ] | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | | | | | | | | + * | | | | | | | | | | | ' | \ | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | Home | PgDn | PgUp | End | * `-----------------------------------------------------------------------------------' @@ -65,30 +68,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | F1 | F2 | F3 | F4 | F5 | Reset|Delete| F6 | F7 | F8 | F9 | F10 | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | F11 | F12 | F13 | F14 | F15 | | | F16 | F17 | F18 | F19 | F20 | + * | F11 | F12 | F13 | F14 | F15 | | | |MsWhLt|MsWhDn|MsWhUp|MsWhRt| * |------+------+------+------+------+------|------+------+------+------+------+------| - * |BlTggl|BlStep| | M1 | M2 | | | M3 | M4 |MsBtn1|MsBtn2|MsBtn3| + * |BlTggl|BlStep| | | |DmStrt|DmStop| | |MsBtn1|MsBtn2|MsBtn3| * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | |MsLeft|MsDown| MsUp |MsRght| * `-----------------------------------------------------------------------------------' */ [FUN] = { {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, RESET, KC_DEL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10}, - {KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20}, - {BL_TOGG, BL_STEP, _______, M1, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3}, + {KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R}, + {BL_TOGG, BL_STEP, _______, _______, _______, DM_STRT, DM_STOP, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R} }, }; +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_SCLN] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, S(KC_SCLN)) // once for semi-colon, twice for colon +}; + bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case M1: - if (record->event.pressed) { - SEND_STRING(" 2>&1 > "); - } - return false; - break; + if (!process_record_dynamic_macro(keycode, record)) { + return false; } return true; } diff --git a/keyboards/planck/keymaps/dshields/readme.md b/keyboards/planck/keymaps/dshields/readme.md new file mode 100644 index 0000000000..447eaae972 --- /dev/null +++ b/keyboards/planck/keymaps/dshields/readme.md @@ -0,0 +1,12 @@ + +About +------ + +A simple split qwerty Planck layout that makes use of one-shot modifiers, +one-shot layers, tap-dance keys and dynamic macros. + +Layout +------- + +![Layout](keyboard-layout.jpg "Keyboard Layout") + From 8ddbf7f59f8afa822031746bbf8019fbac0090c9 Mon Sep 17 00:00:00 2001 From: Nikolaus Wittenstein Date: Thu, 11 May 2017 15:32:35 -0400 Subject: [PATCH 55/86] Fix spelling of "persistent" Fixes #1201. --- keyboards/atomic/keymaps/pvc/keymap.c | 4 ++-- keyboards/atreus/keymaps/xyverz/keymap.c | 10 +++++----- keyboards/atreus62/keymaps/xyverz/keymap.c | 10 +++++----- keyboards/clueboard/keymaps/smt/keymap.c | 8 ++++---- .../ibm_terminal/keymaps/priyadi/keymap.c | 10 +++++----- keyboards/ergodox/keymaps/xyverz/keymap.c | 8 ++++---- keyboards/gh60/keymaps/xyverz/keymap.c | 8 ++++---- .../handwired/atreus50/keymaps/default/keymap.c | 8 ++++---- .../handwired/ortho5x13/keymaps/default/keymap.c | 8 ++++---- .../handwired/promethium/keymaps/priyadi/keymap.c | 12 ++++++------ keyboards/hhkb/keymaps/smt/keymap.c | 8 ++++---- keyboards/jd45/keymaps/jeebak/keymap.c | 2 +- keyboards/jd45/keymaps/jeebak/readme.md | 2 +- keyboards/kinesis/keymaps/xyverz/keymap.c | 8 ++++---- keyboards/lets_split/keymaps/OLED_sample/keymap.c | 8 ++++---- keyboards/lets_split/keymaps/hexwire/keymap.c | 8 ++++---- keyboards/lets_split/keymaps/i2c/keymap.c | 8 ++++---- keyboards/lets_split/keymaps/serial/keymap.c | 8 ++++---- keyboards/lets_split/keymaps/smt/keymap.c | 8 ++++---- keyboards/lets_split/keymaps/xyverz/keymap.c | 8 ++++---- keyboards/phantom/keymaps/xyverz/keymap.c | 8 ++++---- keyboards/planck/keymaps/ab/keymap.c | 4 ++-- keyboards/planck/keymaps/dbroqua/keymap.c | 4 ++-- keyboards/planck/keymaps/default/keymap.c | 8 ++++---- keyboards/planck/keymaps/espynn/keymap.c | 4 ++-- keyboards/planck/keymaps/experimental/keymap.c | 8 ++++---- keyboards/planck/keymaps/impossible/keymap.c | 8 ++++---- keyboards/planck/keymaps/jeebak/keymap.c | 2 +- keyboards/planck/keymaps/jeebak/readme.md | 2 +- keyboards/planck/keymaps/jhenahan/keymap.c | 6 +++--- keyboards/planck/keymaps/khord/keymap.c | 8 ++++---- keyboards/planck/keymaps/pete/keymap.c | 8 ++++---- keyboards/planck/keymaps/premek/keymap.c | 8 ++++---- keyboards/planck/keymaps/pvc/keymap.c | 4 ++-- keyboards/planck/keymaps/sgoodwin/keymap.c | 6 +++--- keyboards/planck/keymaps/smt/keymap.c | 8 ++++---- keyboards/planck/keymaps/thermal_printer/keymap.c | 8 ++++---- keyboards/planck/keymaps/unicode/keymap.c | 8 ++++---- keyboards/planck/keymaps/xyverz/keymap.c | 8 ++++---- .../planck/keymaps/zach/zach_common_functions.c | 6 +++--- keyboards/preonic/keymaps/0xdec/keymap.c | 6 +++--- keyboards/preonic/keymaps/CMD-Preonic/keymap.c | 14 +++++++------- keyboards/preonic/keymaps/default/keymap.c | 8 ++++---- keyboards/preonic/keymaps/jacwib/keymap.c | 6 +++--- keyboards/preonic/keymaps/kinesis/keymap.c | 2 +- keyboards/preonic/keymaps/smt/keymap.c | 8 ++++---- keyboards/preonic/keymaps/xyverz/keymap.c | 8 ++++---- .../preonic/keymaps/zach/zach_common_functions.c | 6 +++--- keyboards/roadkit/keymaps/default/keymap.c | 4 ++-- keyboards/roadkit/keymaps/singles/keymap.c | 6 +++--- keyboards/satan/keymaps/smt/keymap.c | 8 ++++---- keyboards/subatomic/keymaps/default/keymap.c | 8 ++++---- keyboards/tv44/keymaps/default/keymap.c | 8 ++++---- keyboards/tv44/keymaps/jeebak/keymap.c | 2 +- keyboards/tv44/keymaps/jeebak/readme.md | 2 +- keyboards/tv44/keymaps/smt/keymap.c | 8 ++++---- keyboards/tv44/keymaps/xyverz/keymap.c | 8 ++++---- keyboards/vision_division/keymaps/default/keymap.c | 4 ++-- 58 files changed, 198 insertions(+), 198 deletions(-) diff --git a/keyboards/atomic/keymaps/pvc/keymap.c b/keyboards/atomic/keymaps/pvc/keymap.c index d10bfe3bfc..c324078dd9 100644 --- a/keyboards/atomic/keymaps/pvc/keymap.c +++ b/keyboards/atomic/keymaps/pvc/keymap.c @@ -255,7 +255,7 @@ float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); #endif /* AUDIO_ENABLE */ -void persistant_default_layer_set(uint16_t default_layer) +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); @@ -366,7 +366,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case MACRO_QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; case DVORMAC: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORMAC); + persistent_default_layer_set(1UL<<_DVORMAC); } return false; break; diff --git a/keyboards/atreus62/keymaps/xyverz/keymap.c b/keyboards/atreus62/keymaps/xyverz/keymap.c index 7b7c69f57a..67e66584a6 100644 --- a/keyboards/atreus62/keymaps/xyverz/keymap.c +++ b/keyboards/atreus62/keymaps/xyverz/keymap.c @@ -119,7 +119,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -128,25 +128,25 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; case WOW: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_WOW); + persistent_default_layer_set(1UL<<_WOW); } return false; break; diff --git a/keyboards/clueboard/keymaps/smt/keymap.c b/keyboards/clueboard/keymaps/smt/keymap.c index 732086fb56..f097afaa8d 100644 --- a/keyboards/clueboard/keymaps/smt/keymap.c +++ b/keyboards/clueboard/keymaps/smt/keymap.c @@ -151,7 +151,7 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { } } -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -160,19 +160,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c b/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c index 592f7654ba..47a5181dde 100644 --- a/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c +++ b/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c @@ -256,7 +256,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -266,25 +266,25 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { /* layout switcher */ case LAY_QWE: if (record->event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<event.pressed) { - persistant_default_layer_set(1UL<<_DV); + persistent_default_layer_set(1UL<<_DV); } break; case _QW: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); + persistent_default_layer_set(1UL<<_QW); } break; case _CM: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); + persistent_default_layer_set(1UL<<_CM); } break; } diff --git a/keyboards/gh60/keymaps/xyverz/keymap.c b/keyboards/gh60/keymaps/xyverz/keymap.c index e83a7f5a32..6d1d8ab274 100644 --- a/keyboards/gh60/keymaps/xyverz/keymap.c +++ b/keyboards/gh60/keymaps/xyverz/keymap.c @@ -121,7 +121,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -131,17 +131,17 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { case _DV: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DV); + persistent_default_layer_set(1UL<<_DV); } break; case _QW: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); + persistent_default_layer_set(1UL<<_QW); } break; case _CM: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); + persistent_default_layer_set(1UL<<_CM); } break; } diff --git a/keyboards/handwired/atreus50/keymaps/default/keymap.c b/keyboards/handwired/atreus50/keymaps/default/keymap.c index 77cf942c3a..739fb26850 100644 --- a/keyboards/handwired/atreus50/keymaps/default/keymap.c +++ b/keyboards/handwired/atreus50/keymaps/default/keymap.c @@ -147,7 +147,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -159,7 +159,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -168,7 +168,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -177,7 +177,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/handwired/ortho5x13/keymaps/default/keymap.c b/keyboards/handwired/ortho5x13/keymaps/default/keymap.c index c1262a83d7..9710997472 100644 --- a/keyboards/handwired/ortho5x13/keymaps/default/keymap.c +++ b/keyboards/handwired/ortho5x13/keymaps/default/keymap.c @@ -186,7 +186,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -198,7 +198,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -207,7 +207,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -216,7 +216,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index d562c7bbf8..763fa5a27a 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c @@ -955,7 +955,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); #ifdef RGBSPS_ENABLE @@ -1134,14 +1134,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // layout switchers case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; #ifdef LAYOUT_DVORAK case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; @@ -1149,7 +1149,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef LAYOUT_COLEMAK case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -1157,7 +1157,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef LAYOUT_WORKMAN case WORKMAN: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_WORKMAN); + persistent_default_layer_set(1UL<<_WORKMAN); } return false; break; @@ -1165,7 +1165,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef LAYOUT_NORMAN case NORMAN: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_NORMAN); + persistent_default_layer_set(1UL<<_NORMAN); } return false; break; diff --git a/keyboards/hhkb/keymaps/smt/keymap.c b/keyboards/hhkb/keymaps/smt/keymap.c index a7ea54de80..484df851a5 100644 --- a/keyboards/hhkb/keymaps/smt/keymap.c +++ b/keyboards/hhkb/keymaps/smt/keymap.c @@ -146,7 +146,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO_NONE; }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -155,19 +155,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/jd45/keymaps/jeebak/keymap.c b/keyboards/jd45/keymaps/jeebak/keymap.c index 8d26cbde12..0da114a1ed 100644 --- a/keyboards/jd45/keymaps/jeebak/keymap.c +++ b/keyboards/jd45/keymaps/jeebak/keymap.c @@ -283,7 +283,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } diff --git a/keyboards/jd45/keymaps/jeebak/readme.md b/keyboards/jd45/keymaps/jeebak/readme.md index 2e45a46d9b..2165196148 100644 --- a/keyboards/jd45/keymaps/jeebak/readme.md +++ b/keyboards/jd45/keymaps/jeebak/readme.md @@ -8,7 +8,7 @@ needed, they will be mapped to home row keys. The `keymap.c` file will contain the exact changes. The diagrams in this README shows the highlights of the changes from the default mappings. -I also decided to change all calls to `persistant_default_layer_set()` to +I also decided to change all calls to `persistent_default_layer_set()` to `default_layer_set()` since this is my personal perference. ## Macros diff --git a/keyboards/kinesis/keymaps/xyverz/keymap.c b/keyboards/kinesis/keymaps/xyverz/keymap.c index 62f47773c7..fa181e0390 100644 --- a/keyboards/kinesis/keymaps/xyverz/keymap.c +++ b/keyboards/kinesis/keymaps/xyverz/keymap.c @@ -269,7 +269,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -279,17 +279,17 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { case _DV: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DV); + persistent_default_layer_set(1UL<<_DV); } break; case _QW: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); + persistent_default_layer_set(1UL<<_QW); } break; case _CM: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); + persistent_default_layer_set(1UL<<_CM); } break; } diff --git a/keyboards/lets_split/keymaps/OLED_sample/keymap.c b/keyboards/lets_split/keymaps/OLED_sample/keymap.c index 493ebcd3f2..274f917e21 100644 --- a/keyboards/lets_split/keymaps/OLED_sample/keymap.c +++ b/keyboards/lets_split/keymaps/OLED_sample/keymap.c @@ -186,7 +186,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); bool TOG_STATUS = false; int RGB_current_mode; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -208,7 +208,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -217,7 +217,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -226,7 +226,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/lets_split/keymaps/hexwire/keymap.c b/keyboards/lets_split/keymaps/hexwire/keymap.c index fcf3cde758..245834204d 100644 --- a/keyboards/lets_split/keymaps/hexwire/keymap.c +++ b/keyboards/lets_split/keymaps/hexwire/keymap.c @@ -138,7 +138,7 @@ float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -150,7 +150,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -159,7 +159,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -168,7 +168,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/lets_split/keymaps/i2c/keymap.c b/keyboards/lets_split/keymaps/i2c/keymap.c index 0d2d94b672..936312b2e0 100644 --- a/keyboards/lets_split/keymaps/i2c/keymap.c +++ b/keyboards/lets_split/keymaps/i2c/keymap.c @@ -147,7 +147,7 @@ float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -159,7 +159,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -168,7 +168,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -177,7 +177,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/lets_split/keymaps/serial/keymap.c b/keyboards/lets_split/keymaps/serial/keymap.c index 0d2d94b672..936312b2e0 100644 --- a/keyboards/lets_split/keymaps/serial/keymap.c +++ b/keyboards/lets_split/keymaps/serial/keymap.c @@ -147,7 +147,7 @@ float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -159,7 +159,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -168,7 +168,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -177,7 +177,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/lets_split/keymaps/smt/keymap.c b/keyboards/lets_split/keymaps/smt/keymap.c index c4bdb7ebc4..18d409f089 100644 --- a/keyboards/lets_split/keymaps/smt/keymap.c +++ b/keyboards/lets_split/keymaps/smt/keymap.c @@ -152,7 +152,7 @@ float tone_dvorak[][2] = SONG(DVORAK_SOUND); float tone_colemak[][2] = SONG(COLEMAK_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -164,7 +164,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -173,7 +173,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -182,7 +182,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/lets_split/keymaps/xyverz/keymap.c b/keyboards/lets_split/keymaps/xyverz/keymap.c index 216e946964..45edf78c87 100644 --- a/keyboards/lets_split/keymaps/xyverz/keymap.c +++ b/keyboards/lets_split/keymaps/xyverz/keymap.c @@ -141,7 +141,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -150,19 +150,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/phantom/keymaps/xyverz/keymap.c b/keyboards/phantom/keymaps/xyverz/keymap.c index 4a15226386..621271f9f6 100644 --- a/keyboards/phantom/keymaps/xyverz/keymap.c +++ b/keyboards/phantom/keymaps/xyverz/keymap.c @@ -76,7 +76,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -86,17 +86,17 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { case _DV: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DV); + persistent_default_layer_set(1UL<<_DV); } break; case _QW: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); + persistent_default_layer_set(1UL<<_QW); } break; case _CM: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); + persistent_default_layer_set(1UL<<_CM); } break; } diff --git a/keyboards/planck/keymaps/ab/keymap.c b/keyboards/planck/keymaps/ab/keymap.c index 8e1d28a65a..f3a9333e04 100644 --- a/keyboards/planck/keymaps/ab/keymap.c +++ b/keyboards/planck/keymaps/ab/keymap.c @@ -80,8 +80,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { } }; -// Set a layer persistantly. -void persistant_default_layer_set(uint16_t default_layer) { +// Set a layer persistently. +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } diff --git a/keyboards/planck/keymaps/dbroqua/keymap.c b/keyboards/planck/keymaps/dbroqua/keymap.c index 33929cb3af..975017161b 100644 --- a/keyboards/planck/keymaps/dbroqua/keymap.c +++ b/keyboards/planck/keymaps/dbroqua/keymap.c @@ -149,7 +149,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -161,7 +161,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c index d149019fed..61275cb26a 100644 --- a/keyboards/planck/keymaps/default/keymap.c +++ b/keyboards/planck/keymaps/default/keymap.c @@ -186,7 +186,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -198,7 +198,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -207,7 +207,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -216,7 +216,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/planck/keymaps/espynn/keymap.c b/keyboards/planck/keymaps/espynn/keymap.c index a24ad9d485..feb9623314 100644 --- a/keyboards/planck/keymaps/espynn/keymap.c +++ b/keyboards/planck/keymaps/espynn/keymap.c @@ -88,8 +88,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { } }; -// Set a layer persistantly. -void persistant_default_layer_set(uint16_t default_layer) { +// Set a layer persistently. +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } diff --git a/keyboards/planck/keymaps/experimental/keymap.c b/keyboards/planck/keymaps/experimental/keymap.c index 569dbcc8aa..17fad784e7 100644 --- a/keyboards/planck/keymaps/experimental/keymap.c +++ b/keyboards/planck/keymaps/experimental/keymap.c @@ -204,7 +204,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -217,7 +217,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } break; return false; @@ -226,7 +226,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } break; return false; @@ -235,7 +235,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } break; return false; diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c index 503976fa28..6a649f2c8e 100644 --- a/keyboards/planck/keymaps/impossible/keymap.c +++ b/keyboards/planck/keymaps/impossible/keymap.c @@ -164,7 +164,7 @@ float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -176,7 +176,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_workman, false, 0); #endif - persistant_default_layer_set(1UL<<_WORKMAN); + persistent_default_layer_set(1UL<<_WORKMAN); } return false; break; @@ -185,7 +185,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -200,7 +200,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { keymap_config.raw = eeconfig_read_keymap(); keymap_config.nkro = 1; eeconfig_update_keymap(keymap_config.raw); - persistant_default_layer_set(1UL<<_PLOVER); + persistent_default_layer_set(1UL<<_PLOVER); } return false; break; diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c index cb7ccb5884..7b9a68113c 100644 --- a/keyboards/planck/keymaps/jeebak/keymap.c +++ b/keyboards/planck/keymaps/jeebak/keymap.c @@ -270,7 +270,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md index e1dd1dca51..7c4bf908c6 100644 --- a/keyboards/planck/keymaps/jeebak/readme.md +++ b/keyboards/planck/keymaps/jeebak/readme.md @@ -6,7 +6,7 @@ needed, they will be mapped to home row keys. The `keymap.c` file will contain the exact changes. The diagrams in this README shows the highlights of the changes from the default mappings. -I also decided to change all calls to `persistant_default_layer_set()` to +I also decided to change all calls to `persistent_default_layer_set()` to `default_layer_set()` since this is my personal perference. ## Macros diff --git a/keyboards/planck/keymaps/jhenahan/keymap.c b/keyboards/planck/keymaps/jhenahan/keymap.c index 2bda4b6956..bf9735be8e 100644 --- a/keyboards/planck/keymaps/jhenahan/keymap.c +++ b/keyboards/planck/keymaps/jhenahan/keymap.c @@ -183,7 +183,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -195,7 +195,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_workman, false, 0); #endif - persistant_default_layer_set(1UL<<_WORKMAN); + persistent_default_layer_set(1UL<<_WORKMAN); } return false; break; @@ -212,7 +212,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; diff --git a/keyboards/planck/keymaps/khord/keymap.c b/keyboards/planck/keymaps/khord/keymap.c index e371e5b70b..f9fa7318a0 100644 --- a/keyboards/planck/keymaps/khord/keymap.c +++ b/keyboards/planck/keymaps/khord/keymap.c @@ -213,7 +213,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -251,7 +251,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -260,7 +260,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -269,7 +269,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/planck/keymaps/pete/keymap.c b/keyboards/planck/keymaps/pete/keymap.c index 38275b4030..d991bece13 100644 --- a/keyboards/planck/keymaps/pete/keymap.c +++ b/keyboards/planck/keymaps/pete/keymap.c @@ -143,7 +143,7 @@ float goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -156,7 +156,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } break; case _COLEMAK: @@ -164,7 +164,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } break; case _DVORAK: @@ -172,7 +172,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } break; case _LOWER: diff --git a/keyboards/planck/keymaps/premek/keymap.c b/keyboards/planck/keymaps/premek/keymap.c index 9b212ab259..0eb35a9f87 100644 --- a/keyboards/planck/keymaps/premek/keymap.c +++ b/keyboards/planck/keymaps/premek/keymap.c @@ -100,7 +100,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -112,7 +112,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -121,7 +121,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -130,7 +130,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/planck/keymaps/pvc/keymap.c b/keyboards/planck/keymaps/pvc/keymap.c index 6ad95832d2..741e8e6504 100644 --- a/keyboards/planck/keymaps/pvc/keymap.c +++ b/keyboards/planck/keymaps/pvc/keymap.c @@ -233,7 +233,7 @@ float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif /* AUDIO_ENABLE */ -void persistant_default_layer_set(uint16_t default_layer) +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); @@ -344,7 +344,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case MACRO_QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<event.pressed){ - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif @@ -209,7 +209,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; case SWCOLE: if(record->event.pressed){ - persistant_default_layer_set(1UL<<_SWCOLE); + persistent_default_layer_set(1UL<<_SWCOLE); #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_swcole, false, 0); #endif diff --git a/keyboards/preonic/keymaps/0xdec/keymap.c b/keyboards/preonic/keymaps/0xdec/keymap.c index 6c4b8a6fab..2f06c8c314 100644 --- a/keyboards/preonic/keymaps/0xdec/keymap.c +++ b/keyboards/preonic/keymaps/0xdec/keymap.c @@ -134,7 +134,7 @@ void matrix_init_user(void) { #endif } -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -146,7 +146,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } break; case GAME: @@ -154,7 +154,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_game, false, STACCATO); #endif - persistant_default_layer_set(1UL<<_GAME); + persistent_default_layer_set(1UL<<_GAME); } break; case RAISE: diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c index a500a36494..7b5be07344 100644 --- a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c +++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c @@ -225,7 +225,7 @@ float tone_colemak[][2] = SONG(COLEMAK_SOUND); float goodbye[][2] = SONG(GOODBYE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -238,7 +238,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } break; case _COLEMAK: @@ -246,7 +246,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } break; case _DVORAK: @@ -254,7 +254,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } break; case _GAME: @@ -262,7 +262,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_GAME); + persistent_default_layer_set(1UL<<_GAME); } break; case _NUMPAD: @@ -270,7 +270,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_NUMPAD); + persistent_default_layer_set(1UL<<_NUMPAD); } break; case _ARROW: @@ -278,7 +278,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_LOWER); + persistent_default_layer_set(1UL<<_LOWER); } break; case _LOWER: diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c index 3313af945a..2516a726bd 100644 --- a/keyboards/preonic/keymaps/default/keymap.c +++ b/keyboards/preonic/keymaps/default/keymap.c @@ -180,7 +180,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -192,7 +192,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -201,7 +201,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -210,7 +210,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c index 72ccc86cd2..09f465de1e 100644 --- a/keyboards/preonic/keymaps/jacwib/keymap.c +++ b/keyboards/preonic/keymaps/jacwib/keymap.c @@ -196,7 +196,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -205,7 +205,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -231,7 +231,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; case MQWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_MQWERTY); + persistent_default_layer_set(1UL<<_MQWERTY); } return false; break; diff --git a/keyboards/preonic/keymaps/kinesis/keymap.c b/keyboards/preonic/keymaps/kinesis/keymap.c index 9691be91d9..214f51a46f 100644 --- a/keyboards/preonic/keymaps/kinesis/keymap.c +++ b/keyboards/preonic/keymaps/kinesis/keymap.c @@ -82,7 +82,7 @@ float tone_startup[][2] = { float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } diff --git a/keyboards/preonic/keymaps/smt/keymap.c b/keyboards/preonic/keymaps/smt/keymap.c index a10deb7500..5972e918cf 100644 --- a/keyboards/preonic/keymaps/smt/keymap.c +++ b/keyboards/preonic/keymaps/smt/keymap.c @@ -183,7 +183,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -195,7 +195,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -204,7 +204,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -213,7 +213,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/preonic/keymaps/xyverz/keymap.c b/keyboards/preonic/keymaps/xyverz/keymap.c index c8457cda1f..1275aa18fc 100644 --- a/keyboards/preonic/keymaps/xyverz/keymap.c +++ b/keyboards/preonic/keymaps/xyverz/keymap.c @@ -177,7 +177,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -189,7 +189,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -198,7 +198,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -207,7 +207,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/preonic/keymaps/zach/zach_common_functions.c b/keyboards/preonic/keymaps/zach/zach_common_functions.c index 2c47b22896..0b1dd7619c 100644 --- a/keyboards/preonic/keymaps/zach/zach_common_functions.c +++ b/keyboards/preonic/keymaps/zach/zach_common_functions.c @@ -16,7 +16,7 @@ void tap(uint16_t keycode){ unregister_code(keycode); }; -void persistant_default_layer_set(uint16_t default_layer){ +void persistent_default_layer_set(uint16_t default_layer){ eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); }; @@ -200,7 +200,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case COLEMAK: if(record->event.pressed){ - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif @@ -209,7 +209,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; case SWCOLE: if(record->event.pressed){ - persistant_default_layer_set(1UL<<_SWCOLE); + persistent_default_layer_set(1UL<<_SWCOLE); #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_swcole, false, 0); #endif diff --git a/keyboards/roadkit/keymaps/default/keymap.c b/keyboards/roadkit/keymaps/default/keymap.c index 3fc18915a8..048e807481 100644 --- a/keyboards/roadkit/keymaps/default/keymap.c +++ b/keyboards/roadkit/keymaps/default/keymap.c @@ -31,7 +31,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -41,7 +41,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { case _NP: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_NP); + persistent_default_layer_set(1UL<<_NP); } break; } diff --git a/keyboards/roadkit/keymaps/singles/keymap.c b/keyboards/roadkit/keymaps/singles/keymap.c index 5ee7a752b8..1c6aa7883f 100644 --- a/keyboards/roadkit/keymaps/singles/keymap.c +++ b/keyboards/roadkit/keymaps/singles/keymap.c @@ -38,7 +38,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -48,12 +48,12 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { case _L1: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_L1); + persistent_default_layer_set(1UL<<_L1); } break; case _NP: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_NP); + persistent_default_layer_set(1UL<<_NP); } break; } diff --git a/keyboards/satan/keymaps/smt/keymap.c b/keyboards/satan/keymaps/smt/keymap.c index d90849914e..bf919da87c 100644 --- a/keyboards/satan/keymaps/smt/keymap.c +++ b/keyboards/satan/keymaps/smt/keymap.c @@ -111,7 +111,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ) }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -120,19 +120,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/subatomic/keymaps/default/keymap.c b/keyboards/subatomic/keymaps/default/keymap.c index 628ade9b61..f4aa50eba1 100644 --- a/keyboards/subatomic/keymaps/default/keymap.c +++ b/keyboards/subatomic/keymaps/default/keymap.c @@ -177,7 +177,7 @@ float tone_goodbye[][2] = SONG(GOODBYE_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -189,7 +189,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_qwerty, false, 0); #endif - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; @@ -198,7 +198,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_colemak, false, 0); #endif - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; @@ -207,7 +207,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef AUDIO_ENABLE PLAY_NOTE_ARRAY(tone_dvorak, false, 0); #endif - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/tv44/keymaps/default/keymap.c b/keyboards/tv44/keymaps/default/keymap.c index b9fe33a7ce..b4a32d6f6e 100644 --- a/keyboards/tv44/keymaps/default/keymap.c +++ b/keyboards/tv44/keymaps/default/keymap.c @@ -69,7 +69,7 @@ const uint16_t PROGMEM fn_actions[] = { }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -79,17 +79,17 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) switch(id) { case _DV: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DV); + persistent_default_layer_set(1UL<<_DV); } break; case _QW: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QW); + persistent_default_layer_set(1UL<<_QW); } break; case _CM: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_CM); + persistent_default_layer_set(1UL<<_CM); } break; } diff --git a/keyboards/tv44/keymaps/jeebak/keymap.c b/keyboards/tv44/keymaps/jeebak/keymap.c index 1bb1015c36..0d0c07164a 100644 --- a/keyboards/tv44/keymaps/jeebak/keymap.c +++ b/keyboards/tv44/keymaps/jeebak/keymap.c @@ -285,7 +285,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/ }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } diff --git a/keyboards/tv44/keymaps/jeebak/readme.md b/keyboards/tv44/keymaps/jeebak/readme.md index 43d20958a6..f781d55558 100644 --- a/keyboards/tv44/keymaps/jeebak/readme.md +++ b/keyboards/tv44/keymaps/jeebak/readme.md @@ -8,7 +8,7 @@ needed, they will be mapped to home row keys. The `keymap.c` file will contain the exact changes. The diagrams in this README shows the highlights of the changes from the default mappings. -I also decided to change all calls to `persistant_default_layer_set()` to +I also decided to change all calls to `persistent_default_layer_set()` to `default_layer_set()` since this is my personal perference. ## Macros diff --git a/keyboards/tv44/keymaps/smt/keymap.c b/keyboards/tv44/keymaps/smt/keymap.c index 532e74de08..dfd6244668 100644 --- a/keyboards/tv44/keymaps/smt/keymap.c +++ b/keyboards/tv44/keymaps/smt/keymap.c @@ -171,7 +171,7 @@ ALT_T(BACKLIT), _______ , _______ , KC_MPLY , KC_MNXT , _____ /*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/ }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -180,19 +180,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/tv44/keymaps/xyverz/keymap.c b/keyboards/tv44/keymaps/xyverz/keymap.c index 3ff16de35f..d710d80240 100644 --- a/keyboards/tv44/keymaps/xyverz/keymap.c +++ b/keyboards/tv44/keymaps/xyverz/keymap.c @@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { } }; -void persistant_default_layer_set(uint16_t default_layer) { +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); } @@ -80,19 +80,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_QWERTY); + persistent_default_layer_set(1UL<<_QWERTY); } return false; break; case COLEMAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_COLEMAK); + persistent_default_layer_set(1UL<<_COLEMAK); } return false; break; case DVORAK: if (record->event.pressed) { - persistant_default_layer_set(1UL<<_DVORAK); + persistent_default_layer_set(1UL<<_DVORAK); } return false; break; diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c index 3282761c0f..15ce688973 100644 --- a/keyboards/vision_division/keymaps/default/keymap.c +++ b/keyboards/vision_division/keymaps/default/keymap.c @@ -299,7 +299,7 @@ float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); #endif /* AUDIO_ENABLE */ -void persistant_default_layer_set(uint16_t default_layer) +void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); @@ -427,7 +427,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case MACRO_QWERTY: if (record->event.pressed) { - persistant_default_layer_set(1UL< Date: Fri, 12 May 2017 12:03:09 -0700 Subject: [PATCH 56/86] Colemak layout GH60 Satan --- keyboards/satan/keymaps/colemak/Makefile | 21 +++++ keyboards/satan/keymaps/colemak/keymap.c | 98 +++++++++++++++++++++++ keyboards/satan/keymaps/colemak/readme.md | 1 + 3 files changed, 120 insertions(+) create mode 100644 keyboards/satan/keymaps/colemak/Makefile create mode 100644 keyboards/satan/keymaps/colemak/keymap.c create mode 100644 keyboards/satan/keymaps/colemak/readme.md diff --git a/keyboards/satan/keymaps/colemak/Makefile b/keyboards/satan/keymaps/colemak/Makefile new file mode 100644 index 0000000000..2a7ff27793 --- /dev/null +++ b/keyboards/satan/keymaps/colemak/Makefile @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/satan/keymaps/colemak/keymap.c b/keyboards/satan/keymaps/colemak/keymap.c new file mode 100644 index 0000000000..ffb0d10c02 --- /dev/null +++ b/keyboards/satan/keymaps/colemak/keymap.c @@ -0,0 +1,98 @@ +#include "satan.h" + + +// Used for SHIFT_ESC +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 + +#define _______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * ,-----------------------------------------------------------. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | + * |-----------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl | + * `-----------------------------------------------------------' + */ +[_BL] = KEYMAP_ANSI( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + 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_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,KC_QUOT, KC_ENT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \ + KC_LCTL, MO(_FL), KC_LGUI, KC_SPC, KC_RALT,KC_RGUI, MO(_FL),KC_RCTL), + + /* Keymap _FL: Function Layer + * ,-----------------------------------------------------------. + * | | | | | | | | | | | | | | RESET| + * |-----------------------------------------------------------| + * | | | | | | | | | | | |BL-|BL+|BL | + * |--------------------------------------------ΩΩ---------------| + * | | | | | | | | | | | | | + * |-----------------------------------------------------------| + * | | F1|F2 | F3|F4 | F5| F6| F7| F8| | | | + * |-----------------------------------------------------------| + * | | | | | | | | | + * `-----------------------------------------------------------' + */ +[_FL] = KEYMAP_ANSI( + #ifdef RGBLIGHT_ENABLE + KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \ + _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______, _______), + #else + KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \ + _______,KC_MPRV,KC_MPLY,KC_MNXT,_______,_______,_______,KC_HOME,KC_PGDN,KC_PGUP, KC_END, BL_DEC, BL_INC,BL_TOGG, \ + KC_DEL, KC_VOLD,KC_MUTE,KC_VOLU,_______,_______,_______,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,_______,_______, \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \ + _______,_______,_______, _______, _______,_______,_______,_______), + #endif +}; + +enum function_id { + SHIFT_ESC, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +} diff --git a/keyboards/satan/keymaps/colemak/readme.md b/keyboards/satan/keymaps/colemak/readme.md new file mode 100644 index 0000000000..59bd4d1244 --- /dev/null +++ b/keyboards/satan/keymaps/colemak/readme.md @@ -0,0 +1 @@ +# Colemak layout for GH60 Satan From 849ed5a6a03b14defa94a50b66169abac89b9c08 Mon Sep 17 00:00:00 2001 From: Jeremiah Date: Sat, 13 May 2017 08:51:20 -0700 Subject: [PATCH 57/86] anti-ghost improvement for older keyboards with empty spots in matrix --- tmk_core/common/keyboard.c | 36 ++++++++++++++++++++++++++++++------ tmk_core/common/keyboard.h | 2 +- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index eac1f1dd81..93a066e574 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -64,20 +64,41 @@ along with this program. If not, see . #ifdef MATRIX_HAS_GHOST +static uint16_t matrix_ghost_check[MATRIX_ROWS]; static bool has_ghost_in_row(uint8_t row) { - matrix_row_t matrix_row = matrix_get_row(row); - // No ghost exists when less than 2 keys are down on the row - if (((matrix_row - 1) & matrix_row) == 0) + matrix_row_t matrix_row = (matrix_get_row(row) & matrix_ghost_check[row]); + /* No ghost exists when less than 2 keys are down on the row. + If there are "active" blanks in the matrix, the key can't be pressed by the user, + there is no doubt as to which keys are really being pressed. + The ghosts will be ignored, they are KC_NO. */ + if (((matrix_row - 1) & matrix_row) == 0){ return false; - - // Ghost occurs when the row shares column line with other row + } + // Ghost occurs when the row shares column line with other row, blanks in the matrix don't matter + // If there are more than two real keys pressed and they match another row's real keys, the row will be ignored. for (uint8_t i=0; i < MATRIX_ROWS; i++) { - if (i != row && (matrix_get_row(i) & matrix_row)) + if (i != row && __builtin_popcount((matrix_get_row(i) & matrix_ghost_check[i]) & matrix_row) > 1){ return true; + } } return false; + return false; } + +extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; +// bit map of true keys and empty spots in matrix, each row is reversed +void make_ghost_check_array(){ + for (int row = 0; row < MATRIX_ROWS; row++) { + for (int col = 0; col < MATRIX_COLS; col++) { + if (keymaps[0][row][col] & 0xFF) + matrix_ghost_check[row] |= 1< Date: Sat, 13 May 2017 18:25:08 +0000 Subject: [PATCH 58/86] Updates readme.md Auto commit by GitBook Editor --- readme.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index f7bf14b6ab..cb12a21177 100644 --- a/readme.md +++ b/readme.md @@ -2,9 +2,9 @@ [![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware) [![Gitter](https://badges.gitter.im/qmk/qmk_firmware.svg)](https://gitter.im/qmk/qmk_firmware?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -This is a keyboard firmware based on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). +This is a keyboard firmware based on the [tmk\_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). -## Official website (currently under construction with the move to the wiki) +## Official website \(currently under construction with the move to the wiki\) For an easy-to-read version of this document and the repository, check out [http://qmk.fm](http://qmk.fm). Nicely formatted keyboard and keymap listings are also available there, along with the ability to download .hex files instead of having to setup a build environment and compile them. @@ -21,7 +21,7 @@ The project also includes community support for [lots of other keyboards](/keybo ## Maintainers -QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, [Hasu](https://github.com/tmk). This repo used to be a fork of [TMK](https://github.com/tmk/tmk_keyboard), and we are incredibly grateful for his founding contributions to the firmware. We've had to break the fork due to purely technical reasons - it simply became too different over time, and we've had to start refactoring some of the basic bits and pieces. We are huge fans of TMK and Hasu :) +QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, [Hasu](https://github.com/tmk). This repo used to be a fork of [TMK](https://github.com/tmk/tmk_keyboard), and we are incredibly grateful for his founding contributions to the firmware. We've had to break the fork due to purely technical reasons - it simply became too different over time, and we've had to start refactoring some of the basic bits and pieces. We are huge fans of TMK and Hasu :\) This documentation is edited and maintained by Erez Zukerman of ErgoDox EZ. If you spot any typos or inaccuracies, please [open an issue](https://github.com/qmk/qmk_firmware/issues/new). @@ -31,9 +31,12 @@ The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/j This 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: -* [**The Wiki**](https://github.com/qmk/qmk_firmware/wiki) - the entirety of the readme has been moved here +* [**The Wiki**](https://github.com/qmk/qmk_firmware/wiki) - the entire readme has been moved here * The readme for your own keyboard: This is found under `keyboards//`. So for the ErgoDox, it's [here](keyboards/ergodox/); for the Planck, it's [here](keyboards/planck/) and so on. * The list of possible keycodes you can use in your keymap is actually spread out in a few different places: * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes. - * [quantum/quantum_keycodes.h](quantum/quantum_keycodes.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 `quantum_keycodes.h` is where they're actually defined. + * [quantum/quantum\_keycodes.h](quantum/quantum_keycodes.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 `quantum_keycodes.h` is where they're actually defined. * The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally. + + + From b9895771edb4cca2bb17f5872a0e6ee068c91500 Mon Sep 17 00:00:00 2001 From: Jeremiah Date: Sat, 13 May 2017 13:19:28 -0700 Subject: [PATCH 59/86] improvements --- tmk_core/common/keyboard.c | 39 ++++++++++++++++---------------------- tmk_core/common/keyboard.h | 1 - 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 93a066e574..116914e1ae 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -62,12 +62,21 @@ along with this program. If not, see . #endif - #ifdef MATRIX_HAS_GHOST -static uint16_t matrix_ghost_check[MATRIX_ROWS]; +extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; +// bit map of true keys and empty spots in matrix, each row is reversed +static uint16_t get_row_ghost_check(uint16_t row){ + for (int col = 0; col < MATRIX_COLS; col++) { + if (keymaps[0][row][col]) + row &= 1< 1){ + if (i != row && __builtin_popcount( + get_row_ghost_check(matrix_get_row(i)) & matrix_row + ) > 1){ return true; } } return false; - return false; } - -extern const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; -// bit map of true keys and empty spots in matrix, each row is reversed -void make_ghost_check_array(){ - for (int row = 0; row < MATRIX_ROWS; row++) { - for (int col = 0; col < MATRIX_COLS; col++) { - if (keymaps[0][row][col] & 0xFF) - matrix_ghost_check[row] |= 1< Date: Sat, 13 May 2017 16:57:23 -0700 Subject: [PATCH 60/86] a bit smaller --- tmk_core/common/keyboard.c | 59 ++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 21 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 116914e1ae..d1794c8878 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -63,40 +63,54 @@ along with this program. If not, see . #ifdef MATRIX_HAS_GHOST -extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; -// bit map of true keys and empty spots in matrix, each row is reversed -static uint16_t get_row_ghost_check(uint16_t row){ - for (int col = 0; col < MATRIX_COLS; col++) { - if (keymaps[0][row][col]) - row &= 1< 1){ + return true; + } + return false; +} +static inline bool has_ghost_in_row(uint8_t row, uint16_t rowdata) +{ + rowdata &= matrix_ghost_check[row]; + if (((rowdata - 1) & rowdata) == 0){ + return false; + } /* No ghost exists when less than 2 keys are down on the row. If there are "active" blanks in the matrix, the key can't be pressed by the user, there is no doubt as to which keys are really being pressed. The ghosts will be ignored, they are KC_NO. */ - if (((matrix_row - 1) & matrix_row) == 0){ - return false; - } // Ghost occurs when the row shares column line with other row, blanks in the matrix don't matter - // If there are two or more real keys pressed and they match another row's real keys, the row will be ignored. + // If there are more than two real keys pressed and they match another row's real keys, the row will be ignored. for (uint8_t i=0; i < MATRIX_ROWS; i++) { - if (i != row && __builtin_popcount( - get_row_ghost_check(matrix_get_row(i)) & matrix_row - ) > 1){ + if (i != row && countones((matrix_get_row(i) & matrix_ghost_check[i]) & rowdata)){ return true; } } return false; } + +extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; +// bit map of true keys and empty spots in matrix, each row is reversed +static inline void make_ghost_check_array(void){ + for (int row = 0; row < MATRIX_ROWS; row++) { + for (int col = 0; col < MATRIX_COLS; col++) { + if (pgm_read_byte(&keymaps[0][row][col]) != 0) + matrix_ghost_check[row] |= 1< Date: Sat, 13 May 2017 17:01:27 -0700 Subject: [PATCH 61/86] a bit smaller --- tmk_core/common/keyboard.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index d1794c8878..0116053fbe 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -161,7 +161,7 @@ void keyboard_task(void) { static matrix_row_t matrix_prev[MATRIX_ROWS]; #ifdef MATRIX_HAS_GHOST - static matrix_row_t matrix_ghost[MATRIX_ROWS]; + // static matrix_row_t matrix_ghost[MATRIX_ROWS]; #endif static uint8_t led_status = 0; matrix_row_t matrix_row = 0; @@ -178,13 +178,13 @@ void keyboard_task(void) * debugging. But don't update matrix_prev until un-ghosted, or * the last key would be lost. */ - if (debug_matrix && matrix_ghost[r] != matrix_row) { - matrix_print(); - } - matrix_ghost[r] = matrix_row; + //if (debug_matrix && matrix_ghost[r] != matrix_row) { + // matrix_print(); + //} + //matrix_ghost[r] = matrix_row; continue; } - matrix_ghost[r] = matrix_row; + //matrix_ghost[r] = matrix_row; #endif if (debug_matrix) matrix_print(); for (uint8_t c = 0; c < MATRIX_COLS; c++) { From 7b7e285a984a5bf1f7f38f1b5846811dfcb3a185 Mon Sep 17 00:00:00 2001 From: Jeremiah Date: Sat, 13 May 2017 17:22:38 -0700 Subject: [PATCH 62/86] should be using matrix_row_t --- tmk_core/common/keyboard.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 0116053fbe..24cc28892c 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -63,9 +63,9 @@ along with this program. If not, see . #ifdef MATRIX_HAS_GHOST -static uint16_t matrix_ghost_check[MATRIX_ROWS]; +static matrix_row_t matrix_ghost_check[MATRIX_ROWS]; -static inline bool countones(uint16_t data) +static inline bool countones(matrix_row_t data) { int count = 0; for (int col = 0; col < MATRIX_COLS; col++) { @@ -77,7 +77,7 @@ static inline bool countones(uint16_t data) } return false; } -static inline bool has_ghost_in_row(uint8_t row, uint16_t rowdata) +static inline bool has_ghost_in_row(uint8_t row, matrix_row_t rowdata) { rowdata &= matrix_ghost_check[row]; if (((rowdata - 1) & rowdata) == 0){ From 37f6f92765513cd66c92178f48785d492eb06b89 Mon Sep 17 00:00:00 2001 From: Jeremiah Date: Sat, 13 May 2017 18:24:43 -0700 Subject: [PATCH 63/86] faster and less bits --- tmk_core/common/keyboard.c | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 24cc28892c..d8b5dc4031 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -63,14 +63,25 @@ along with this program. If not, see . #ifdef MATRIX_HAS_GHOST -static matrix_row_t matrix_ghost_check[MATRIX_ROWS]; +extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; +static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata){ + matrix_row_t out = 0; + for (int col = 0; col < MATRIX_COLS; col++) { + if (pgm_read_byte(&keymaps[0][row][col]) && ((rowdata & (1< 1){ return true; @@ -79,7 +90,7 @@ static inline bool countones(matrix_row_t data) } static inline bool has_ghost_in_row(uint8_t row, matrix_row_t rowdata) { - rowdata &= matrix_ghost_check[row]; + rowdata = get_real_keys(row, rowdata); if (((rowdata - 1) & rowdata) == 0){ return false; } @@ -90,24 +101,13 @@ static inline bool has_ghost_in_row(uint8_t row, matrix_row_t rowdata) // Ghost occurs when the row shares column line with other row, blanks in the matrix don't matter // If there are more than two real keys pressed and they match another row's real keys, the row will be ignored. for (uint8_t i=0; i < MATRIX_ROWS; i++) { - if (i != row && countones((matrix_get_row(i) & matrix_ghost_check[i]) & rowdata)){ + if (i != row && countones(get_real_keys(i, matrix_get_row(i)) & rowdata)){ return true; } } return false; } -extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; -// bit map of true keys and empty spots in matrix, each row is reversed -static inline void make_ghost_check_array(void){ - for (int row = 0; row < MATRIX_ROWS; row++) { - for (int col = 0; col < MATRIX_COLS; col++) { - if (pgm_read_byte(&keymaps[0][row][col]) != 0) - matrix_ghost_check[row] |= 1< Date: Sat, 13 May 2017 19:07:05 -0700 Subject: [PATCH 64/86] faster and less bits... again --- tmk_core/common/keyboard.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index d8b5dc4031..fa17ffca25 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -74,20 +74,19 @@ static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata){ return out; } - -static inline bool countones(matrix_row_t data) +static inline bool countones(matrix_row_t row) { int count = 0; - for (int col = 0; col < MATRIX_COLS; col++) { - if (data & (1< 0){ + count += 1; + row &= row-1; } if (count > 1){ return true; } return false; } + static inline bool has_ghost_in_row(uint8_t row, matrix_row_t rowdata) { rowdata = get_real_keys(row, rowdata); From b9b2244b8275066d1226fba0fb75747a194f0553 Mon Sep 17 00:00:00 2001 From: Jeremiah Date: Sun, 14 May 2017 08:01:01 -0700 Subject: [PATCH 65/86] faster, less bits :) --- tmk_core/common/keyboard.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index fa17ffca25..20b867285e 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -76,15 +76,8 @@ static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata){ static inline bool countones(matrix_row_t row) { - int count = 0; - while (row > 0){ - count += 1; - row &= row-1; - } - if (count > 1){ - return true; - } - return false; + row &= row-1; + return row; } static inline bool has_ghost_in_row(uint8_t row, matrix_row_t rowdata) From 84395e8a0427bcb51c4ef4ff24c7901d1fbb0764 Mon Sep 17 00:00:00 2001 From: Jeremiah Date: Sun, 14 May 2017 09:36:50 -0700 Subject: [PATCH 66/86] whoops --- tmk_core/common/keyboard.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 20b867285e..a3fe559f35 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -67,7 +67,7 @@ extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata){ matrix_row_t out = 0; for (int col = 0; col < MATRIX_COLS; col++) { - if (pgm_read_byte(&keymaps[0][row][col]) && ((rowdata & (1< Date: Sun, 14 May 2017 15:36:44 -0700 Subject: [PATCH 67/86] added comments and made function name clearer --- tmk_core/common/keyboard.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index a3fe559f35..97a8f1cd8c 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c @@ -61,39 +61,45 @@ along with this program. If not, see . # include "visualizer/visualizer.h" #endif - #ifdef MATRIX_HAS_GHOST extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; static matrix_row_t get_real_keys(uint8_t row, matrix_row_t rowdata){ matrix_row_t out = 0; - for (int col = 0; col < MATRIX_COLS; col++) { + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + //read each key in the row data and check if the keymap defines it as a real key if (pgm_read_byte(&keymaps[0][row][col]) && (rowdata & (1< Date: Mon, 15 May 2017 00:10:25 -0400 Subject: [PATCH 68/86] nikchi flake --- .../frosty_flake/keymaps/nikchi/Makefile | 23 +++++ .../frosty_flake/keymaps/nikchi/config.h | 23 +++++ .../frosty_flake/keymaps/nikchi/keymap.c | 85 +++++++++++++++++++ .../frosty_flake/keymaps/nikchi/readme.md | 24 ++++++ 4 files changed, 155 insertions(+) create mode 100644 keyboards/frosty_flake/keymaps/nikchi/Makefile create mode 100644 keyboards/frosty_flake/keymaps/nikchi/config.h create mode 100644 keyboards/frosty_flake/keymaps/nikchi/keymap.c create mode 100644 keyboards/frosty_flake/keymaps/nikchi/readme.md diff --git a/keyboards/frosty_flake/keymaps/nikchi/Makefile b/keyboards/frosty_flake/keymaps/nikchi/Makefile new file mode 100644 index 0000000000..377a25c281 --- /dev/null +++ b/keyboards/frosty_flake/keymaps/nikchi/Makefile @@ -0,0 +1,23 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +UNICODEMAP_ENABLE = no # unicodemap +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +TAP_DANCE_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/frosty_flake/keymaps/nikchi/config.h b/keyboards/frosty_flake/keymaps/nikchi/config.h new file mode 100644 index 0000000000..45825781df --- /dev/null +++ b/keyboards/frosty_flake/keymaps/nikchi/config.h @@ -0,0 +1,23 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#define TAPPING_TERM 200 +#define LEADER_TIMEOUT 400 + +#define DISABLE_SPACE_CADET_ROLLOVER + +#define UNICODE_TYPE_DELAY 0 + +#define LSPO_KEY KC_9 +#define RSPC_KEY KC_0 + +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 60 +#define MOUSEKEY_MAX_SPEED 7 +#define MOUSEKEY_WHEEL_DELAY 0 +// place overrides here + +#endif diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c new file mode 100644 index 0000000000..955891eb21 --- /dev/null +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -0,0 +1,85 @@ +#include "frosty_flake.h" +#define _______ KC_TRNS + +//Tap Dance Declarations +enum { + TD_CTCPS = 0 +}; + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + //Tap once for CTRL, twice for Caps Lock + [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS) +// Other declarations would go here, separated by commas, if you have them +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. +{ + switch(id) { + case 0: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( I(1), D(LGUI), D(LCTL), D(D), U(LGUI), U(LCTL), U(D), END ); // NEW DESKTOP + } + break; + case 1: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( I(1), D(LGUI), D(LCTL), D(LEFT), U(LGUI), U(LCTL), U(LEFT), END ); // LEFT DESKTOP + } + break; + case 2: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( I(1), D(LGUI), D(LCTL), D(RGHT), U(LGUI), U(LCTL), U(RGHT), END ); // RIGHT DESKTOP + } + break; + case 3: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( I(1), D(LGUI), D(LCTL), D(F4), U(LGUI), U(LCTL), U(F4), END ); // CLOSE DESKTOP + } + break; + } + return MACRO_NONE; +}; + +LEADER_EXTERNS(); + +void matrix_scan_user(void) { + LEADER_DICTIONARY() { + leading = false; + leader_end(); + + SEQ_TWO_KEYS(KC_A, KC_A) { + register_code(KC_LCTL); + register_code(KC_A); + unregister_code(KC_A); + register_code(KC_C); + unregister_code(KC_C); + unregister_code(KC_LCTL); + } + + } +} + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = KEYMAP(\ + KC_ESC, 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, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + 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, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSPO,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ + TD(TD_CTCPS),KC_LGUI,KC_LALT, KC_SPC, KC_LEAD,KC_RGUI, KC_APP,MO(1) , KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), +[1] = KEYMAP(\ + KC_ESC, 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, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + KC_TAB, KC_Q, M(0), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_LCTL, M(1), M(3), M(2), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ + KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, TG(2),_______ , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), +[2] = KEYMAP(\ + KC_ESC, 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, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + 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_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_LCTL, KC_D, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ + KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, _______,_______ , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), +}; diff --git a/keyboards/frosty_flake/keymaps/nikchi/readme.md b/keyboards/frosty_flake/keymaps/nikchi/readme.md new file mode 100644 index 0000000000..b6a89e8dde --- /dev/null +++ b/keyboards/frosty_flake/keymaps/nikchi/readme.md @@ -0,0 +1,24 @@ +# The Nikchi's keymap for frosty_flake + +### FEATURING +-SPACE CADET +-Caps Lock is now LCTRL +-LCTRL is Tap(LCTRL, Caps Lock) + +### LEADER KEY - RALT +COMBOS +-a,s => Select All, Copy + + + +### FN REBINDS for Windows +``` + [W] [New Desktop] +[A][S][D] [Left Desk][Delete Desk][Right Desk] + +[Ins][Hom][PUp] [RW][PP][FF] +[Del][End][PDn] [MU][VD][VU] + +Arrows are Mouskeys, left three mods are clicks + +``` \ No newline at end of file From b2b72058e5a29dff3f28761c2d0bb5f035c2f710 Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Mon, 15 May 2017 00:12:04 -0400 Subject: [PATCH 69/86] change readme --- keyboards/frosty_flake/keymaps/nikchi/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/readme.md b/keyboards/frosty_flake/keymaps/nikchi/readme.md index b6a89e8dde..0b01f9dbf8 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/readme.md +++ b/keyboards/frosty_flake/keymaps/nikchi/readme.md @@ -7,7 +7,7 @@ ### LEADER KEY - RALT COMBOS --a,s => Select All, Copy +-a,a => Select All, Copy From eb660ef2184565c6bb69f1f67f7af8918d15688f Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Mon, 15 May 2017 01:52:45 -0400 Subject: [PATCH 70/86] emoji support but --- .../frosty_flake/keymaps/nikchi/Makefile | 2 +- .../frosty_flake/keymaps/nikchi/keymap.c | 101 +++++++++++++----- keyboards/frosty_flake/rules.mk | 5 +- quantum/process_keycode/process_unicodemap.c | 2 +- 4 files changed, 79 insertions(+), 31 deletions(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/Makefile b/keyboards/frosty_flake/keymaps/nikchi/Makefile index 377a25c281..ad86e82d20 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/Makefile +++ b/keyboards/frosty_flake/keymaps/nikchi/Makefile @@ -12,7 +12,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls AUDIO_ENABLE = no # Audio output on port C6 UNICODE_ENABLE = no # Unicode -UNICODEMAP_ENABLE = no # unicodemap +UNICODEMAP_ENABLE = yes # unicodemap BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index 955891eb21..58964d1e39 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -1,4 +1,9 @@ #include "frosty_flake.h" +#include "action_layer.h" +#include "eeconfig.h" +#include "process_unicode.h" +#include "quantum.h" + #define _______ KC_TRNS //Tap Dance Declarations @@ -13,25 +18,32 @@ qk_tap_dance_action_t tap_dance_actions[] = { // Other declarations would go here, separated by commas, if you have them }; +enum my_macros { + NEWDESK = 0, + LEFTDESK, + RIGHTDESK, + CLOSEDESK +}; + const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. { switch(id) { - case 0: // this would trigger when you hit a key mapped as M(0) + case NEWDESK: // this would trigger when you hit a key mapped as M(0) if (record->event.pressed) { return MACRO( I(1), D(LGUI), D(LCTL), D(D), U(LGUI), U(LCTL), U(D), END ); // NEW DESKTOP } break; - case 1: // this would trigger when you hit a key mapped as M(0) + case LEFTDESK: // this would trigger when you hit a key mapped as M(0) if (record->event.pressed) { return MACRO( I(1), D(LGUI), D(LCTL), D(LEFT), U(LGUI), U(LCTL), U(LEFT), END ); // LEFT DESKTOP } break; - case 2: // this would trigger when you hit a key mapped as M(0) + case RIGHTDESK: // this would trigger when you hit a key mapped as M(0) if (record->event.pressed) { return MACRO( I(1), D(LGUI), D(LCTL), D(RGHT), U(LGUI), U(LCTL), U(RGHT), END ); // RIGHT DESKTOP } break; - case 3: // this would trigger when you hit a key mapped as M(0) + case CLOSEDESK: // this would trigger when you hit a key mapped as M(0) if (record->event.pressed) { return MACRO( I(1), D(LGUI), D(LCTL), D(F4), U(LGUI), U(LCTL), U(F4), END ); // CLOSE DESKTOP } @@ -40,6 +52,61 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // return MACRO_NONE; }; + +enum unicode_name { + THINK, // thinking face 🤔 + GRIN, // grinning face 😊 + BBB, // dat B 🅱 + POO, // poop 💩 + HUNDR, // 100 💯 + SMRK, // smirk 😏 + WEARY, // good shit 😩 + EGGPL, // EGGPLANT 🍆 + WATER, // wet 💦 + LIT, // fire 🔥 + UNAMU, // unamused 😒 + SNEK // snke 🐍 +}; + +const uint32_t PROGMEM unicode_map[] = { + [THINK] = 0x1F914, + [GRIN] = 0x1F600, + [BBB] = 0x1F171, + [POO] = 0x1F4A9, + [HUNDR] = 0x1F4AF, + [SMRK] = 0x1F60F, + [WEARY] = 0x1F629, + [EGGPL] = 0x1F346, + [WATER] = 0x1F4A6, + [LIT] = 0x1F525, + [UNAMU] = 0x1F612, + [SNEK] = 0x1F40D + }; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = KEYMAP(\ + KC_ESC, 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, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + 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, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSPO,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ + TD(TD_CTCPS),KC_LGUI,KC_LALT, KC_SPC, KC_LEAD,KC_RGUI, KC_APP,MO(1) , KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), +[1] = KEYMAP(\ + KC_ESC, 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, \ + KC_GRV, X(GRIN),X(THINK),X(SMRK),X(WEARY),X(UNAMU), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + KC_TAB, KC_Q, M(0), KC_E, KC_R,X(EGGPL),X(WATER), KC_U, KC_I, KC_O, KC_P, KC_UP ,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_LCTL, M(1), M(3), M(2), KC_F, X(LIT), X(SNEK), KC_J, KC_K, KC_L,KC_LEFT,KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, X(HUNDR), X(BBB), X(POO), KC_M,KC_COMM, KC_DOT,KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ + KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, TG(2),_______ , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), +[2] = KEYMAP(\ + KC_ESC, 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, \ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + 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_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_LCTL, KC_D, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ + KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, _______, _______, KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), +}; + LEADER_EXTERNS(); void matrix_scan_user(void) { @@ -59,27 +126,7 @@ void matrix_scan_user(void) { } } - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = KEYMAP(\ - KC_ESC, 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, \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ - 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, KC_P7, KC_P8, KC_P9,KC_PPLS, \ - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ - KC_LSPO,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ - TD(TD_CTCPS),KC_LGUI,KC_LALT, KC_SPC, KC_LEAD,KC_RGUI, KC_APP,MO(1) , KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), -[1] = KEYMAP(\ - KC_ESC, 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, \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ - KC_TAB, KC_Q, M(0), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ - KC_LCTL, M(1), M(3), M(2), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ - KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ - KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, TG(2),_______ , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), -[2] = KEYMAP(\ - KC_ESC, 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, \ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ - 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_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ - KC_LCTL, KC_D, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ - KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ - KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, _______,_______ , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), +void matrix_init_user(void) { + _delay_ms(500); + set_unicode_input_mode(UC_WINC); }; diff --git a/keyboards/frosty_flake/rules.mk b/keyboards/frosty_flake/rules.mk index dd2f4b6eec..8c59241d42 100644 --- a/keyboards/frosty_flake/rules.mk +++ b/keyboards/frosty_flake/rules.mk @@ -54,8 +54,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000) MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) -CONSOLE_ENABLE ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= no # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work @@ -63,6 +63,7 @@ NKRO_ENABLE ?= no # USB Nkey Rollover BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default MIDI_ENABLE ?= no # MIDI controls UNICODE_ENABLE ?= no # Unicode +UNICODEMAP_ENABLE ?= yes BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE ?= no # Audio output on port C6 FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches diff --git a/quantum/process_keycode/process_unicodemap.c b/quantum/process_keycode/process_unicodemap.c index 0227fbdd7b..75f35112b1 100644 --- a/quantum/process_keycode/process_unicodemap.c +++ b/quantum/process_keycode/process_unicodemap.c @@ -49,7 +49,7 @@ bool process_unicode_map(uint16_t keycode, keyrecord_t *record) { if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) { const uint32_t* map = unicode_map; uint16_t index = keycode - QK_UNICODE_MAP; - uint32_t code = pgm_read_dword_far(&map[index]); + uint32_t code = pgm_read_dword(&map[index]); if (code > 0xFFFF && code <= 0x10ffff && input_mode == UC_OSX) { // Convert to UTF-16 surrogate pair code -= 0x10000; From 5d965a8d416cef48b17fc0acb6d35370d40ffbff Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Mon, 15 May 2017 02:19:50 -0400 Subject: [PATCH 71/86] emojis and reorg --- .../frosty_flake/keymaps/nikchi/keymap.c | 73 ++++++++++++------- 1 file changed, 45 insertions(+), 28 deletions(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index 58964d1e39..a764e7e9d6 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -6,16 +6,30 @@ #define _______ KC_TRNS +void tap(uint16_t keycode){ + register_code(keycode); + unregister_code(keycode); +}; + + //Tap Dance Declarations -enum { +enum taps{ TD_CTCPS = 0 }; -//Tap Dance Definitions -qk_tap_dance_action_t tap_dance_actions[] = { - //Tap once for CTRL, twice for Caps Lock - [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS) -// Other declarations would go here, separated by commas, if you have them +enum unicode_name { + THINK, // thinking face 🤔 + GRIN, // grinning face 😊 + BBB, // dat B 🅱 + POO, // poop 💩 + HUNDR, // 100 💯 + SMRK, // smirk 😏 + WEARY, // good shit 😩 + EGGPL, // EGGPLANT 🍆 + WATER, // wet 💦 + LIT, // fire 🔥 + UNAMU, // unamused 😒 + SNEK // snke 🐍 }; enum my_macros { @@ -25,8 +39,24 @@ enum my_macros { CLOSEDESK }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. -{ +enum quick { + DISFACE = 0, + TFLIP, + TPUT, + SHRUG, + FACE, + RANDIG +}; + +// Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for CTRL, twice for Caps Lock + [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS) +// Other declarations would go here, separated by commas, if you have them +}; + +// macros +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) { case NEWDESK: // this would trigger when you hit a key mapped as M(0) if (record->event.pressed) { @@ -52,22 +82,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // return MACRO_NONE; }; - -enum unicode_name { - THINK, // thinking face 🤔 - GRIN, // grinning face 😊 - BBB, // dat B 🅱 - POO, // poop 💩 - HUNDR, // 100 💯 - SMRK, // smirk 😏 - WEARY, // good shit 😩 - EGGPL, // EGGPLANT 🍆 - WATER, // wet 💦 - LIT, // fire 🔥 - UNAMU, // unamused 😒 - SNEK // snke 🐍 -}; - +// emojis in unicode const uint32_t PROGMEM unicode_map[] = { [THINK] = 0x1F914, [GRIN] = 0x1F600, @@ -83,6 +98,8 @@ const uint32_t PROGMEM unicode_map[] = { [SNEK] = 0x1F40D }; + +// Layouts const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = KEYMAP(\ KC_ESC, 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, \ @@ -116,10 +133,8 @@ void matrix_scan_user(void) { SEQ_TWO_KEYS(KC_A, KC_A) { register_code(KC_LCTL); - register_code(KC_A); - unregister_code(KC_A); - register_code(KC_C); - unregister_code(KC_C); + tap(KC_A); + tap(KC_C); unregister_code(KC_LCTL); } @@ -130,3 +145,5 @@ void matrix_init_user(void) { _delay_ms(500); set_unicode_input_mode(UC_WINC); }; + + From fcef83a5d0a7e3eaf8034142ed553d58facb465a Mon Sep 17 00:00:00 2001 From: Christian Westerlund Date: Tue, 16 May 2017 15:15:42 +0200 Subject: [PATCH 72/86] Created a dvorak keymap for Swedish developers using Visual Studio --- .../keymaps/dvorak_programmer_swe/keymap.c | 331 ++++++++++++++++++ .../keymaps/dvorak_programmer_swe/readme.md | 28 ++ 2 files changed, 359 insertions(+) create mode 100644 keyboards/ergodox/keymaps/dvorak_programmer_swe/keymap.c create mode 100644 keyboards/ergodox/keymaps/dvorak_programmer_swe/readme.md diff --git a/keyboards/ergodox/keymaps/dvorak_programmer_swe/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer_swe/keymap.c new file mode 100644 index 0000000000..8d65f7c7a5 --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_programmer_swe/keymap.c @@ -0,0 +1,331 @@ +#include "ergodox.h" +#include "debug.h" +#include "action_layer.h" +#include "version.h" +#include "keymap_nordic.h" +#include "keymap_norwegian.h" + +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // mouse keys +#define DEVL 3 // dev keys + +#define MACRO_PUBLIC 10 +#define MACRO_PRIVATE 11 +#define MACRO_PROT 12 + +#define MACRO_SHARED 13 +#define MACRO_CONST 14 +#define MACRO_DIM 15 +#define MACRO_STRING 16 +#define MACRO_INT 17 +#define MACRO_DEC 18 +#define MACRO_BOOL 19 + +#define MACRO_RETURN 20 +#define MACRO_NOTHING 21 +#define MACRO_TODO 22 + +#define MACRO_SAVE 24 +#define MACRO_BUILD 25 +#define MACRO_DEBUG 26 + + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | L3 | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | \ | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | - | , | . | P | Y | LT1 | | LT1 | F | G | C | R | L | Å | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | WIN | A | O | E | U | I |------| |------| D | H | T | N | S | Ä | + * |--------+------+------+------+------+------| LT2 | | LT2 |------+------+------+------+------+--------| + * | LShift | Ö | Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | CTRL | L1 |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | App | LGui | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| Tab |Enter | + * | |ace | End | | PgDn | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default + // left hand + MO(DEVL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, NO_MINS, KC_COMM, KC_DOT, KC_P, KC_Y, TG(SYMB), + KC_LGUI, KC_A, KC_O, KC_E, KC_U, KC_I, + KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, TG(MDIA), + CTL_T(KC_NO), MO(SYMB), LALT(KC_LSFT), KC_LEFT,KC_RGHT, + ALT_T(KC_APP), KC_LGUI, + KC_HOME, + KC_SPC,KC_BSPC,KC_END, + // right hand + KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLASH, + TG(1), KC_F, KC_G, KC_C, KC_R, KC_L, NO_AM, + KC_D, KC_H, KC_T, KC_N, KC_S, NO_AE, + TG(MDIA),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSFT, + KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1, + KC_LALT, CTL_T(KC_ESC), + KC_PGUP, + KC_PGDN,KC_TAB, KC_ENT + ), +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | @ | { | } | [ | ] | | | | < | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | # | ( | ) | \ | / |------| |------| > | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | UND | CUT | COP | PAS | | | | ? | 1 | 2 | 3 | % | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | . | 0 | = | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, NO_AT, ALGR(KC_7), ALGR(KC_0), NO_LBRC, NO_RBRC, KC_TRNS, + KC_TRNS, KC_HASH, NO_LPRN, NO_RPRN, ALGR(KC_MINS), NO_SLSH, + KC_TRNS, KC_TRNS, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, NO_LESS, KC_7, KC_8, KC_9, KC_KP_ASTERISK, KC_F12, + LSFT(NO_LESS), KC_4, KC_5, KC_6, KC_KP_PLUS, KC_TRNS, + KC_TRNS, NO_QUES, KC_1, KC_2, KC_3, LSFT(KC_5), KC_TRNS, + KC_DOT,KC_0, LSFT(KC_0), KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | | MsUp | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | | | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[MDIA] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + 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, 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, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 3: Developer keys in vb.net + * shortened in layout beneth, for example int-> integer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | Save |Build |Debug | | | | | | bool | int |string| dec | Todo | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | |------| |------| priv | publ |shared| prot | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | const| dim |return|nothin| | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +[DEVL] = KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(MACRO_SAVE), M(MACRO_BUILD), M(MACRO_DEBUG), 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, 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, KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(MACRO_BOOL), M(MACRO_INT), M(MACRO_STRING), M(MACRO_DEC), M(MACRO_TODO), KC_TRNS, + M(MACRO_PRIVATE), M(MACRO_PUBLIC), M(MACRO_SHARED), M(MACRO_PROT), KC_TRNS, KC_TRNS, + KC_TRNS, M(MACRO_CONST), M(MACRO_DIM), M(MACRO_RETURN), M(MACRO_NOTHING), 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 +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); + } + break; + case MACRO_PUBLIC: + if (record->event.pressed) { + return MACRO( T(P), T(U), T(B), T(L), T(I), T(C), T(SPACE),END); + } + break; + case MACRO_PRIVATE: + if (record->event.pressed) { + return MACRO( T(P), T(R), T(I), T(V), T(A), T(T), T(E), T(SPACE),END); + } + break; + case MACRO_PROT: + if (record->event.pressed) { + return MACRO( T(P), T(R), T(O), T(T), T(E), T(C), T(T), T(E), T(D), T(SPACE),END); + } + break; + case MACRO_SHARED: + if (record->event.pressed) { + return MACRO( T(S), T(H), T(A), T(R), T(E), T(D), T(SPACE), END); + } + break; + case MACRO_CONST: + if (record->event.pressed) { + return MACRO( T(C), T(O), T(N), T(S), T(T), T(SPACE), END); + } + break; + case MACRO_DIM: + if (record->event.pressed) { + return MACRO( T(D), T(I), T(M), T(SPACE), END); + } + break; + case MACRO_STRING: + if (record->event.pressed) { + return MACRO( T(S), T(T), T(R), T(I), T(N), T(G), T(SPACE), END); + } + break; + case MACRO_BOOL: + if (record->event.pressed) { + return MACRO( T(B), T(O), T(O), T(L), T(E), T(A), T(N), T(SPACE), END); + } + break; + case MACRO_INT: + if (record->event.pressed) { + return MACRO( T(I), T(N), T(T), T(SPACE), END); + } + break; + case MACRO_DEC: + if (record->event.pressed) { + return MACRO( T(D), T(E), T(C), T(I), T(M), T(A), T(L), T(SPACE), END); + } + break; + case MACRO_RETURN: + if (record->event.pressed) { + return MACRO( T(R), T(E), T(T), T(U),T(R),T(N), T(SPACE), END); + } + break; + case MACRO_NOTHING: + if (record->event.pressed) { + return MACRO( T(N), T(O), T(T), T(H), T(I), T(N), T(G), T(SPACE), END); + } + case MACRO_TODO: + if (record->event.pressed) { + return MACRO( KC_BSLASH, D(LSHIFT) ,T(T), T(O), T(D), T(O), KC_DOT, U(LSHIFT), T(SPACE),END); + } + break; + case MACRO_SAVE: + if (record->event.pressed) { + return MACRO( D(LCTL) ,T(S), U(LCTL),END); + } + break; + case MACRO_BUILD: + if (record->event.pressed) { + return MACRO( D(LCTL), D(LSHIFT) ,T(B), U(LSHIFT), U(LCTL),END); + } + break; + case MACRO_DEBUG: + if (record->event.pressed) { + return MACRO( KC_F5 ,END); + } + break; + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; diff --git a/keyboards/ergodox/keymaps/dvorak_programmer_swe/readme.md b/keyboards/ergodox/keymaps/dvorak_programmer_swe/readme.md new file mode 100644 index 0000000000..552fa0e3ab --- /dev/null +++ b/keyboards/ergodox/keymaps/dvorak_programmer_swe/readme.md @@ -0,0 +1,28 @@ +# ErgoDox EZ Dvorak Programmer SWEDISH + +Dvorak layout adjusted for a suitable programmer layout and swedish special characters added: + +* åäö characters added +* Layout for common vb.net keywords +* Common Visual Studio commands like Save, Build, Debug + +TODO: + +* (Layer 4 is qwerty (for easier gaming & less fortunate keyboard users)) Like this idea, will add it later on + +Known issues: + +* Keymap 2 modifier has not gotten its place yet.. +* Print screen, where? + + +## Changelog + +* 2017-05-16 + * Initial release + +# Author +Christian Westerlund +cwesterlund @ github + +Thanks to the author of keymap csharp_dev for inspiration! \ No newline at end of file From 3c5b9150789fdd20b4dafb91463440010a6b6759 Mon Sep 17 00:00:00 2001 From: skullY Date: Fri, 21 Apr 2017 22:05:22 -0700 Subject: [PATCH 73/86] Make KC_GRV accessible --- keyboards/clueboard/keymaps/shift_fn/keymap.c | 2 +- keyboards/clueboard/keymaps/skully/keymap.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/clueboard/keymaps/shift_fn/keymap.c b/keyboards/clueboard/keymaps/shift_fn/keymap.c index fdec37a540..83ae1d6154 100644 --- a/keyboards/clueboard/keymaps/shift_fn/keymap.c +++ b/keyboards/clueboard/keymaps/shift_fn/keymap.c @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _FL: Function Layer */ [_FL] = KEYMAP( - S(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, S(KC_GRV), KC_DEL, BL_STEP, \ + 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, S(KC_GRV), KC_DEL, BL_STEP, \ S(KC_TAB), S(KC_Q), S(KC_W),S(KC_E),S(KC_R),S(KC_T), S(KC_Y), S(KC_U),S(KC_I),S(KC_O), S(KC_P), S(KC_LBRC),S(KC_RBRC),S(KC_BSLS), S(KC_PGDN), \ S(KC_LCTL),S(KC_A), MO(_CL),S(KC_D),S(KC_F),S(KC_G), S(KC_H), S(KC_J),S(KC_K),S(KC_L), S(KC_SCLN),S(KC_QUOT),S(KC_NUHS),S(KC_ENT), \ MO(_FL), S(KC_NUBS),S(KC_Z),S(KC_X),S(KC_C),S(KC_V), S(KC_B), S(KC_N),S(KC_M),S(KC_COMM),S(KC_DOT), S(KC_SLSH),S(KC_RO), KC_RSFT, KC_PGUP, \ diff --git a/keyboards/clueboard/keymaps/skully/keymap.c b/keyboards/clueboard/keymaps/skully/keymap.c index df7757a922..47dee8e6d4 100644 --- a/keyboards/clueboard/keymaps/skully/keymap.c +++ b/keyboards/clueboard/keymaps/skully/keymap.c @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap _FL: Function Layer */ [_FL] = KEYMAP( - S(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, S(KC_GRV), KC_DEL, BL_STEP, \ + 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, S(KC_GRV), KC_DEL, BL_STEP, \ S(KC_TAB), S(KC_Q), S(KC_W),S(KC_E),S(KC_R),S(KC_T), S(KC_Y), S(KC_U),S(KC_I),S(KC_O), S(KC_P), S(KC_LBRC),S(KC_RBRC),S(KC_BSLS), S(KC_PGDN), \ S(KC_LCTL),S(KC_A), MO(_CL),S(KC_D),S(KC_F),S(KC_G), S(KC_H), S(KC_J),S(KC_K),S(KC_L), S(KC_SCLN),S(KC_QUOT),S(KC_NUHS),S(KC_ENT), \ MO(_FL), S(KC_NUBS),S(KC_Z),S(KC_X),S(KC_C),S(KC_V), S(KC_B), S(KC_N),S(KC_M),S(KC_COMM),S(KC_DOT), S(KC_SLSH),S(KC_RO), KC_RSFT, KC_PGUP, \ From a74e69e9fa889113ee31fbc8dc7e6848fdb07576 Mon Sep 17 00:00:00 2001 From: skullY Date: Tue, 16 May 2017 13:09:23 -0700 Subject: [PATCH 74/86] Increase TAPPING_TERM for the Clueboard --- keyboards/clueboard/config.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/keyboards/clueboard/config.h b/keyboards/clueboard/config.h index ad68323856..3817062777 100644 --- a/keyboards/clueboard/config.h +++ b/keyboards/clueboard/config.h @@ -42,6 +42,16 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) +/* How long a "key tap" is. Used in functions like LT() and macros to determine + * how long QMK "holds down" a tapped key. + * + * If you are macOS this should be at least 500ms to avoid macOS's accidental + * Caps Lock activation prevention measures, as noted by /u/JerryEn here: + * + * https://www.reddit.com/r/clueboard/comments/6bfc2m/lt_not_working_with_caps_lock/dhmbp88/ + */ +#define TAPPING_TERM 600 // ms + /* * Feature disable options * These options are also useful to firmware size reduction. From 8da442f411a7fe0d9a5521ac6e95e20c7923caf1 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 17 May 2017 20:27:07 -0400 Subject: [PATCH 75/86] update travis script --- util/ergodox_ez.html | 1 - util/travis_compiled_push.sh | 13 +++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) delete mode 100644 util/ergodox_ez.html diff --git a/util/ergodox_ez.html b/util/ergodox_ez.html deleted file mode 100644 index 8e92866070..0000000000 --- a/util/ergodox_ez.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/util/travis_compiled_push.sh b/util/travis_compiled_push.sh index 58334cb1f6..718daaa295 100644 --- a/util/travis_compiled_push.sh +++ b/util/travis_compiled_push.sh @@ -33,18 +33,19 @@ if [[ "$TRAVIS_COMMIT_MESSAGE" != *"[skip build]"* ]] ; then make ergodox-ez AUTOGEN=true - find . -name ".build" | xargs rm -rf cd .. git clone https://$GH_TOKEN@github.com/jackhumbert/qmk.fm.git cd qmk.fm - git submodule update --init --recursive + #git submodule update --init --recursive #rm -rf keyboard #rm -rf keyboards - yes | cp -rf ../qmk_firmware/keyboards . + #yes | cp -rf ../qmk_firmware/keyboards . #mkdir keyboards/ergodox_ez/ - cp ../qmk_firmware/util/ergodox_ez.html keyboards/ergodox_ez/index.html - cp ../qmk_firmware/readme.md qmk_readme.md - ./generate.sh + #cp ../qmk_firmware/util/ergodox_ez.html keyboards/ergodox_ez/index.html + #cp ../qmk_firmware/readme.md qmk_readme.md + #./generate.sh + rm -f _compiled/*.hex + for file in ../qmk_firmware/keyboards/*/keymaps/*/*.hex; do mv -v "$file" "_compiled/${file##*/}"; done git add -A git commit -m "generated from qmk/qmk_firmware@${rev}" From aaa01d0a4e633e26c58e5bc9c0bc557604088140 Mon Sep 17 00:00:00 2001 From: tengg Date: Wed, 17 May 2017 21:20:01 -0400 Subject: [PATCH 76/86] ESC/GRAVE/TILDE better handling (#1307) * revise HHKB bootloader_size to 4096 such that sw reset works * cleanup esr/grave/tilde handling function --- .../clueboard/keymaps/mac_optimized/keymap.c | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/keyboards/clueboard/keymaps/mac_optimized/keymap.c b/keyboards/clueboard/keymaps/mac_optimized/keymap.c index 7ea02d27e8..e72733092f 100644 --- a/keyboards/clueboard/keymaps/mac_optimized/keymap.c +++ b/keyboards/clueboard/keymaps/mac_optimized/keymap.c @@ -50,35 +50,28 @@ const uint16_t PROGMEM fn_actions[] = { void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { static uint8_t mods_pressed; - static bool mod_flag; switch (id) { case 0: /* Handle the combined Grave/Esc key */ - mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed - if (record->event.pressed) { /* The key is being pressed. */ + mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed if (mods_pressed) { - mod_flag = true; - add_key(KC_GRV); - send_keyboard_report(); + register_code(KC_GRV); } else { - add_key(KC_ESC); - send_keyboard_report(); + register_code(KC_ESC); } } else { /* The key is being released. */ - if (mod_flag) { - mod_flag = false; - del_key(KC_GRV); - send_keyboard_report(); + if (mods_pressed) { + mods_pressed = false; + unregister_code(KC_GRV); } else { - del_key(KC_ESC); - send_keyboard_report(); + unregister_code(KC_ESC); } } break; From 85df6873487000583454657fb20ac7cea7194f8d Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 18 May 2017 18:55:07 -0400 Subject: [PATCH 77/86] m10a lowercase --- keyboards/{M10A => m10a}/Makefile | 0 keyboards/{M10A => m10a}/config.h | 0 keyboards/{M10A => m10a}/keymaps/default/Makefile | 0 keyboards/{M10A => m10a}/keymaps/default/keymap.c | 2 +- keyboards/{M10A/M10A.c => m10a/m10a.c} | 2 +- keyboards/{M10A/M10A.h => m10a/m10a.h} | 0 keyboards/{M10A => m10a}/rules.mk | 0 7 files changed, 2 insertions(+), 2 deletions(-) rename keyboards/{M10A => m10a}/Makefile (100%) rename keyboards/{M10A => m10a}/config.h (100%) rename keyboards/{M10A => m10a}/keymaps/default/Makefile (100%) rename keyboards/{M10A => m10a}/keymaps/default/keymap.c (99%) rename keyboards/{M10A/M10A.c => m10a/m10a.c} (73%) rename keyboards/{M10A/M10A.h => m10a/m10a.h} (100%) rename keyboards/{M10A => m10a}/rules.mk (100%) diff --git a/keyboards/M10A/Makefile b/keyboards/m10a/Makefile similarity index 100% rename from keyboards/M10A/Makefile rename to keyboards/m10a/Makefile diff --git a/keyboards/M10A/config.h b/keyboards/m10a/config.h similarity index 100% rename from keyboards/M10A/config.h rename to keyboards/m10a/config.h diff --git a/keyboards/M10A/keymaps/default/Makefile b/keyboards/m10a/keymaps/default/Makefile similarity index 100% rename from keyboards/M10A/keymaps/default/Makefile rename to keyboards/m10a/keymaps/default/Makefile diff --git a/keyboards/M10A/keymaps/default/keymap.c b/keyboards/m10a/keymaps/default/keymap.c similarity index 99% rename from keyboards/M10A/keymaps/default/keymap.c rename to keyboards/m10a/keymaps/default/keymap.c index 75abeb5b75..97434a461d 100644 --- a/keyboards/M10A/keymaps/default/keymap.c +++ b/keyboards/m10a/keymaps/default/keymap.c @@ -1,7 +1,7 @@ // This is the canonical layout file for the Quantum project. If you want to add another keyboard, // this is the style you want to emulate. -#include "M10A.h" +#include "m10a.h" #include "action_layer.h" #include "eeconfig.h" diff --git a/keyboards/M10A/M10A.c b/keyboards/m10a/m10a.c similarity index 73% rename from keyboards/M10A/M10A.c rename to keyboards/m10a/m10a.c index 9a3bd15e1a..9cc7f069ae 100644 --- a/keyboards/M10A/M10A.c +++ b/keyboards/m10a/m10a.c @@ -1,4 +1,4 @@ -#include "M10A.h" +#include "m10a.h" void matrix_init_kb(void) { matrix_init_user(); diff --git a/keyboards/M10A/M10A.h b/keyboards/m10a/m10a.h similarity index 100% rename from keyboards/M10A/M10A.h rename to keyboards/m10a/m10a.h diff --git a/keyboards/M10A/rules.mk b/keyboards/m10a/rules.mk similarity index 100% rename from keyboards/M10A/rules.mk rename to keyboards/m10a/rules.mk From 9c284786e728a2e8834745d6bb7df0fda4099cf3 Mon Sep 17 00:00:00 2001 From: jerryen Date: Fri, 19 May 2017 17:24:47 -0700 Subject: [PATCH 78/86] Workaround for the macOS caps lock delay (#1308) * Add 80ms delay for KC_CAPS when used as a tap key Workaround for the macOS caps lock delay * Revert "Increase TAPPING_TERM for the Clueboard" This reverts commit a74e69e9fa889113ee31fbc8dc7e6848fdb07576. --- keyboards/clueboard/config.h | 10 ---------- tmk_core/common/action.c | 4 ++++ 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/keyboards/clueboard/config.h b/keyboards/clueboard/config.h index 3817062777..ad68323856 100644 --- a/keyboards/clueboard/config.h +++ b/keyboards/clueboard/config.h @@ -42,16 +42,6 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) -/* How long a "key tap" is. Used in functions like LT() and macros to determine - * how long QMK "holds down" a tapped key. - * - * If you are macOS this should be at least 500ms to avoid macOS's accidental - * Caps Lock activation prevention measures, as noted by /u/JerryEn here: - * - * https://www.reddit.com/r/clueboard/comments/6bfc2m/lt_not_working_with_caps_lock/dhmbp88/ - */ -#define TAPPING_TERM 600 // ms - /* * Feature disable options * These options are also useful to firmware size reduction. diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 8640dfab35..a534f818ec 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -26,6 +26,7 @@ along with this program. If not, see . #include "action_macro.h" #include "action_util.h" #include "action.h" +#include "wait.h" #ifdef DEBUG_ACTION #include "debug.h" @@ -438,6 +439,9 @@ void process_action(keyrecord_t *record, action_t action) } else { if (tap_count > 0) { dprint("KEYMAP_TAP_KEY: Tap: unregister_code\n"); + if (action.layer_tap.code == KC_CAPS) { + wait_ms(80); + } unregister_code(action.layer_tap.code); } else { dprint("KEYMAP_TAP_KEY: No tap: Off on release\n"); From d380ed1f7562995bc4260dfe3a16ddd9eb5a472f Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 20 May 2017 12:37:31 -0400 Subject: [PATCH 79/86] Update readme.md --- readme.md | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/readme.md b/readme.md index cb12a21177..4db9fc828a 100644 --- a/readme.md +++ b/readme.md @@ -1,18 +1,21 @@ # Quantum Mechanical Keyboard Firmware -[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware) [![Gitter](https://badges.gitter.im/qmk/qmk_firmware.svg)](https://gitter.im/qmk/qmk_firmware?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware) +[![Gitter](https://img.shields.io/gitter/room/qmk/qmk_firmware.js.svg)](https://gitter.im/qmk/qmk_firmware) +[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm) +[![GitHub contributors](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly) +[![GitHub forks](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/) -This is a keyboard firmware based on the [tmk\_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). +This is a keyboard firmware based on the [tmk\_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR and ARM controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). -## Official website \(currently under construction with the move to the wiki\) +## Official website -For an easy-to-read version of this document and the repository, check out [http://qmk.fm](http://qmk.fm). Nicely formatted keyboard and keymap listings are also available there, along with the ability to download .hex files instead of having to setup a build environment and compile them. +[http://qmk.fm](http://qmk.fm) is the official website of QMK, where you can find links to this page, the documentation, and the keyboards supported by QMK. -## Included Keyboards +## Supported Keyboards * [Planck](/keyboards/planck/) * [Preonic](/keyboards/preonic/) -* [Atomic](/keyboards/atomic/) * [ErgoDox EZ](/keyboards/ergodox/) * [Clueboard](/keyboards/clueboard/) * [Cluepad](/keyboards/cluepad/) @@ -21,22 +24,8 @@ The project also includes community support for [lots of other keyboards](/keybo ## Maintainers -QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, [Hasu](https://github.com/tmk). This repo used to be a fork of [TMK](https://github.com/tmk/tmk_keyboard), and we are incredibly grateful for his founding contributions to the firmware. We've had to break the fork due to purely technical reasons - it simply became too different over time, and we've had to start refactoring some of the basic bits and pieces. We are huge fans of TMK and Hasu :\) - -This documentation is edited and maintained by Erez Zukerman of ErgoDox EZ. If you spot any typos or inaccuracies, please [open an issue](https://github.com/qmk/qmk_firmware/issues/new). - -The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/jackhumbert), the Ergodox EZ by [Erez Zukerman](https://github.com/ezuk), and the Clueboard by [Zach White](https://github.com/skullydazed). - -## Documentation roadmap - -This 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: - -* [**The Wiki**](https://github.com/qmk/qmk_firmware/wiki) - the entire readme has been moved here -* The readme for your own keyboard: This is found under `keyboards//`. So for the ErgoDox, it's [here](keyboards/ergodox/); for the Planck, it's [here](keyboards/planck/) and so on. -* The list of possible keycodes you can use in your keymap is actually spread out in a few different places: - * [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes. - * [quantum/quantum\_keycodes.h](quantum/quantum_keycodes.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 `quantum_keycodes.h` is where they're actually defined. -* The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally. - +QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, [Hasu](https://github.com/tmk). The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/jackhumbert), the Ergodox EZ by [Erez Zukerman](https://github.com/ezuk), and the Clueboard by [Zach White](https://github.com/skullydazed). +## Documentation +[Documentation](https://docs.qmk.fm) is hosted on [Gitbook](https://www.gitbook.com/book/qmk/firmware/details) and [Github](https://github.com/qmk/qmk_firmware_docs/) (they are synced). You can request changes by making a fork and [pull request](https://github.com/qmk/qmk_firmware_docs/pulls), or by clicking the "suggest an edit" link on any page of docs.qmk.fm. From c7e9e643fa411266dfb9b08831967d29426b29bc Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 20 May 2017 12:38:30 -0400 Subject: [PATCH 80/86] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 4db9fc828a..6db2f8d9f5 100644 --- a/readme.md +++ b/readme.md @@ -28,4 +28,4 @@ QMK is developed and maintained by Jack Humbert of OLKB with contributions from ## Documentation -[Documentation](https://docs.qmk.fm) is hosted on [Gitbook](https://www.gitbook.com/book/qmk/firmware/details) and [Github](https://github.com/qmk/qmk_firmware_docs/) (they are synced). You can request changes by making a fork and [pull request](https://github.com/qmk/qmk_firmware_docs/pulls), or by clicking the "suggest an edit" link on any page of docs.qmk.fm. +[https://docs.qmk.fm](https://docs.qmk.fm) is hosted on [Gitbook](https://www.gitbook.com/book/qmk/firmware/details) and [Github](https://github.com/qmk/qmk_firmware_docs/) (they are synced). You can request changes by making a fork and [pull request](https://github.com/qmk/qmk_firmware_docs/pulls), or by clicking the "suggest an edit" link on any page of the Docs. From 3ed2147a888401ef31a008db02a4ef8bd25d4380 Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Tue, 23 May 2017 13:13:20 -0400 Subject: [PATCH 81/86] preonic map --- .../frosty_flake/keymaps/nikchi/keymap.c | 3 +- keyboards/preonic/keymaps/nikchi/Makefile | 3 + keyboards/preonic/keymaps/nikchi/config.h | 29 +++ keyboards/preonic/keymaps/nikchi/keymap.c | 221 ++++++++++++++++++ keyboards/preonic/keymaps/nikchi/readme.md | 1 + 5 files changed, 255 insertions(+), 2 deletions(-) create mode 100644 keyboards/preonic/keymaps/nikchi/Makefile create mode 100644 keyboards/preonic/keymaps/nikchi/config.h create mode 100644 keyboards/preonic/keymaps/nikchi/keymap.c create mode 100644 keyboards/preonic/keymaps/nikchi/readme.md diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index a764e7e9d6..babc7f15bd 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -10,8 +10,7 @@ void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); }; - - +s //Tap Dance Declarations enum taps{ TD_CTCPS = 0 diff --git a/keyboards/preonic/keymaps/nikchi/Makefile b/keyboards/preonic/keymaps/nikchi/Makefile new file mode 100644 index 0000000000..3d4659ceb9 --- /dev/null +++ b/keyboards/preonic/keymaps/nikchi/Makefile @@ -0,0 +1,3 @@ +ifndef QUANTUM_DIR + include ../../../../Makefile +endif \ No newline at end of file diff --git a/keyboards/preonic/keymaps/nikchi/config.h b/keyboards/preonic/keymaps/nikchi/config.h new file mode 100644 index 0000000000..4c61581993 --- /dev/null +++ b/keyboards/preonic/keymaps/nikchi/config.h @@ -0,0 +1,29 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif \ No newline at end of file diff --git a/keyboards/preonic/keymaps/nikchi/keymap.c b/keyboards/preonic/keymaps/nikchi/keymap.c new file mode 100644 index 0000000000..249dd1e64c --- /dev/null +++ b/keyboards/preonic/keymaps/nikchi/keymap.c @@ -0,0 +1,221 @@ +#include "preonic.h" +#include "action_layer.h" +#include "eeconfig.h" +#ifdef AUDIO_ENABLE + #include "audio.h" +#endif + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. + +enum preonic_layers { + _QWERTY, + _COLEMAK, + _DVORAK, + _LOWER, + _RAISE, + _ADJUST +}; + +enum preonic_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + BACKLIT +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | CTRL | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Lower| Z | X | C | V | B | N | M | , | . | / |Raise | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Brite| Ctrl | Alt | GUI |BKSP |SHIFT |ENTER |SPC | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL}, + {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {LOWER , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RAISE }, + {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, KC_LSFT, KC_ENT, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = { + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = { + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, + {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} +}, + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, + {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, + {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______}, + {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +} + + +}; + +#ifdef AUDIO_ENABLE +float tone_startup[][2] = { + {NOTE_B5, 20}, + {NOTE_B6, 8}, + {NOTE_DS6, 20}, + {NOTE_B6, 8} +}; + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +float tone_goodbye[][2] = SONG(GOODBYE_SOUND); + +float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); +#endif + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_qwerty, false, 0); + #endif + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case BACKLIT: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + return false; + break; + } + return true; +}; + +void matrix_init_user(void) { + #ifdef AUDIO_ENABLE + startup_user(); + #endif +} + +#ifdef AUDIO_ENABLE + +void startup_user() +{ + _delay_ms(20); // gets rid of tick + PLAY_NOTE_ARRAY(tone_startup, false, 0); +} + +void shutdown_user() +{ + PLAY_NOTE_ARRAY(tone_goodbye, false, 0); + _delay_ms(150); + stop_all_notes(); +} + +void music_on_user(void) +{ + music_scale_user(); +} + +void music_scale_user(void) +{ + PLAY_NOTE_ARRAY(music_scale, false, 0); +} + +#endif diff --git a/keyboards/preonic/keymaps/nikchi/readme.md b/keyboards/preonic/keymaps/nikchi/readme.md new file mode 100644 index 0000000000..e911968dd9 --- /dev/null +++ b/keyboards/preonic/keymaps/nikchi/readme.md @@ -0,0 +1 @@ +# The default Preonic layout - largely based on the Planck's \ No newline at end of file From b3eeb9d84a6af13c4fd35835f4cb2da093a7015e Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Tue, 23 May 2017 18:47:06 -0400 Subject: [PATCH 82/86] removed s --- keyboards/frosty_flake/keymaps/nikchi/keymap.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index babc7f15bd..908db3f801 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -10,7 +10,7 @@ void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); }; -s + //Tap Dance Declarations enum taps{ TD_CTCPS = 0 @@ -97,7 +97,6 @@ const uint32_t PROGMEM unicode_map[] = { [SNEK] = 0x1F40D }; - // Layouts const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = KEYMAP(\ From 6536b1ce2a136b7e1d0d4bbd94ff47e10765f644 Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Tue, 23 May 2017 23:52:48 -0400 Subject: [PATCH 83/86] =?UTF-8?q?Tap=20dancing=20emoji=20support=20?= =?UTF-8?q?=F0=9F=98=A9=F0=9F=98=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../frosty_flake/keymaps/nikchi/keymap.c | 75 ++++++++++++++++--- 1 file changed, 64 insertions(+), 11 deletions(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index 908db3f801..5bb553de00 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -2,10 +2,16 @@ #include "action_layer.h" #include "eeconfig.h" #include "process_unicode.h" +#include "process_unicodemap.h" #include "quantum.h" #define _______ KC_TRNS +void register_hex32(uint32_t hex); +void cycleEmojis(qk_tap_dance_state_t *state, void *user_data); +void cycleAnimals(qk_tap_dance_state_t *state, void *user_data); +void resetEmojis(qk_tap_dance_state_t *state, void *user_data); + void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); @@ -13,22 +19,32 @@ void tap(uint16_t keycode){ //Tap Dance Declarations enum taps{ - TD_CTCPS = 0 + TD_CTCPS = 0, + EMOJIS, + ANIMAL }; enum unicode_name { - THINK, // thinking face 🤔 + THINK = 1, // thinking face 🤔 GRIN, // grinning face 😊 + SMRK, // smirk 😏 + WEARY, // good shit 😩 + UNAMU, // unamused 😒 + + SNEK, // snke 🐍 + PENGUIN, // 🐧 + DRAGON, // 🐉 + MONKEY, // 🐒 + CHICK, // 🐥 + BBB, // dat B 🅱 POO, // poop 💩 HUNDR, // 100 💯 - SMRK, // smirk 😏 - WEARY, // good shit 😩 EGGPL, // EGGPLANT 🍆 WATER, // wet 💦 - LIT, // fire 🔥 - UNAMU, // unamused 😒 - SNEK // snke 🐍 + + LIT // fire 🔥 + }; enum my_macros { @@ -37,7 +53,6 @@ enum my_macros { RIGHTDESK, CLOSEDESK }; - enum quick { DISFACE = 0, TFLIP, @@ -50,7 +65,9 @@ enum quick { // Tap Dance Definitions qk_tap_dance_action_t tap_dance_actions[] = { // Tap once for CTRL, twice for Caps Lock - [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS) + [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS), + [EMOJIS] = ACTION_TAP_DANCE_FN_ADVANCED(cycleEmojis, NULL, resetEmojis), + [ANIMAL] = ACTION_TAP_DANCE_FN_ADVANCED(cycleAnimals, NULL, resetEmojis) // Other declarations would go here, separated by commas, if you have them }; @@ -94,7 +111,11 @@ const uint32_t PROGMEM unicode_map[] = { [WATER] = 0x1F4A6, [LIT] = 0x1F525, [UNAMU] = 0x1F612, - [SNEK] = 0x1F40D + [SNEK] = 0x1F40D, + [PENGUIN] = 0x1F427, + [MONKEY] = 0x1F412, + [CHICK] = 0x1F425, + [DRAGON] = 0x1F409 }; // Layouts @@ -108,7 +129,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TD(TD_CTCPS),KC_LGUI,KC_LALT, KC_SPC, KC_LEAD,KC_RGUI, KC_APP,MO(1) , KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), [1] = KEYMAP(\ KC_ESC, 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, \ - KC_GRV, X(GRIN),X(THINK),X(SMRK),X(WEARY),X(UNAMU), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + TD(EMOJIS),TD(ANIMAL),X(THINK),X(SMRK),X(WEARY),X(UNAMU), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ KC_TAB, KC_Q, M(0), KC_E, KC_R,X(EGGPL),X(WATER), KC_U, KC_I, KC_O, KC_P, KC_UP ,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ KC_LCTL, M(1), M(3), M(2), KC_F, X(LIT), X(SNEK), KC_J, KC_K, KC_L,KC_LEFT,KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, X(HUNDR), X(BBB), X(POO), KC_M,KC_COMM, KC_DOT,KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ @@ -145,3 +166,35 @@ void matrix_init_user(void) { }; +void cycleEmojis(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 1) { + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[state->count])); + unicode_input_finish(); + } + else if(state->count <= 5) { + tap(KC_BSPC); + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[state->count])); + unicode_input_finish(); + } +}; + +void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 1) { + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[state->count+5])); + unicode_input_finish(); + } + else if(state->count <= 5) { + tap(KC_BSPC); + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[state->count+5])); + unicode_input_finish(); + } +}; + +void resetEmojis(qk_tap_dance_state_t *state, void *user_data) { + +}; + From ef1714f443be67103ce9eb6adedef6c8875d17e5 Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Wed, 24 May 2017 00:35:04 -0400 Subject: [PATCH 84/86] more emoji function comments --- .../frosty_flake/keymaps/nikchi/config.h | 3 +- .../frosty_flake/keymaps/nikchi/keymap.c | 48 ++++++++++++++----- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/config.h b/keyboards/frosty_flake/keymaps/nikchi/config.h index 45825781df..e91d082c8a 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/config.h +++ b/keyboards/frosty_flake/keymaps/nikchi/config.h @@ -3,7 +3,7 @@ #include "../../config.h" -#define TAPPING_TERM 200 +#define TAPPING_TERM 300 #define LEADER_TIMEOUT 400 #define DISABLE_SPACE_CADET_ROLLOVER @@ -21,3 +21,4 @@ // place overrides here #endif + diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index 5bb553de00..c9e2207214 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -7,10 +7,12 @@ #define _______ KC_TRNS + +//declarations for tap dancing emojis void register_hex32(uint32_t hex); void cycleEmojis(qk_tap_dance_state_t *state, void *user_data); void cycleAnimals(qk_tap_dance_state_t *state, void *user_data); -void resetEmojis(qk_tap_dance_state_t *state, void *user_data); +void cycleHands(qk_tap_dance_state_t *state, void *user_data); void tap(uint16_t keycode){ register_code(keycode); @@ -21,10 +23,11 @@ void tap(uint16_t keycode){ enum taps{ TD_CTCPS = 0, EMOJIS, - ANIMAL + ANIMAL, + HAND }; -enum unicode_name { +enum unicode_name { // split every five emojis THINK = 1, // thinking face 🤔 GRIN, // grinning face 😊 SMRK, // smirk 😏 @@ -37,6 +40,12 @@ enum unicode_name { MONKEY, // 🐒 CHICK, // 🐥 + OKOK, // 👌 + EFFU, // 🖕 + INUP, // 👆 + THUP, // 👍 + THDN, // 👎 + BBB, // dat B 🅱 POO, // poop 💩 HUNDR, // 100 💯 @@ -66,8 +75,9 @@ enum quick { qk_tap_dance_action_t tap_dance_actions[] = { // Tap once for CTRL, twice for Caps Lock [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS), - [EMOJIS] = ACTION_TAP_DANCE_FN_ADVANCED(cycleEmojis, NULL, resetEmojis), - [ANIMAL] = ACTION_TAP_DANCE_FN_ADVANCED(cycleAnimals, NULL, resetEmojis) + [EMOJIS] = ACTION_TAP_DANCE_FN_ADVANCED(cycleEmojis, NULL, NULL), + [ANIMAL] = ACTION_TAP_DANCE_FN_ADVANCED(cycleAnimals, NULL, NULL), + [HAND] = ACTION_TAP_DANCE_FN_ADVANCED(cycleHands, NULL, NULL) // Other declarations would go here, separated by commas, if you have them }; @@ -115,9 +125,13 @@ const uint32_t PROGMEM unicode_map[] = { [PENGUIN] = 0x1F427, [MONKEY] = 0x1F412, [CHICK] = 0x1F425, - [DRAGON] = 0x1F409 + [DRAGON] = 0x1F409, + [OKOK] = 0x1F44C, + [EFFU] = 0x1F595, + [INUP] = 0x1F446, + [THDN] = 0x1F44E, + [THUP] = 0x1F44D }; - // Layouts const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = KEYMAP(\ @@ -129,7 +143,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TD(TD_CTCPS),KC_LGUI,KC_LALT, KC_SPC, KC_LEAD,KC_RGUI, KC_APP,MO(1) , KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), [1] = KEYMAP(\ KC_ESC, 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, \ - TD(EMOJIS),TD(ANIMAL),X(THINK),X(SMRK),X(WEARY),X(UNAMU), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + TD(EMOJIS),TD(ANIMAL),TD(HAND),X(SMRK),X(WEARY),X(UNAMU), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ KC_TAB, KC_Q, M(0), KC_E, KC_R,X(EGGPL),X(WATER), KC_U, KC_I, KC_O, KC_P, KC_UP ,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ KC_LCTL, M(1), M(3), M(2), KC_F, X(LIT), X(SNEK), KC_J, KC_K, KC_L,KC_LEFT,KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, X(HUNDR), X(BBB), X(POO), KC_M,KC_COMM, KC_DOT,KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ @@ -150,7 +164,7 @@ void matrix_scan_user(void) { leading = false; leader_end(); - SEQ_TWO_KEYS(KC_A, KC_A) { + SEQ_TWO_KEYS(KC_A, KC_A) { // select all and copy register_code(KC_LCTL); tap(KC_A); tap(KC_C); @@ -180,7 +194,7 @@ void cycleEmojis(qk_tap_dance_state_t *state, void *user_data) { } }; -void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) { +void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) { if(state->count == 1) { unicode_input_start(); register_hex32(pgm_read_dword(&unicode_map[state->count+5])); @@ -194,7 +208,17 @@ void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) { } }; -void resetEmojis(qk_tap_dance_state_t *state, void *user_data) { - +void cycleHands(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 1) { + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[state->count+10])); + unicode_input_finish(); + } + else if(state->count <= 5) { + tap(KC_BSPC); + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[state->count+10])); + unicode_input_finish(); + } }; From a965e5b7356b7ebaee7b7cd64db19330758ec6ee Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Wed, 24 May 2017 07:56:41 -0400 Subject: [PATCH 85/86] tweaks default mouse speed constants --- keyboards/ergodox/config.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox/config.h b/keyboards/ergodox/config.h index 994a8c6433..e870835d85 100644 --- a/keyboards/ergodox/config.h +++ b/keyboards/ergodox/config.h @@ -3,8 +3,8 @@ #define MOUSEKEY_INTERVAL 20 #define MOUSEKEY_DELAY 0 -#define MOUSEKEY_TIME_TO_MAX 5 -#define MOUSEKEY_MAX_SPEED 2 +#define MOUSEKEY_TIME_TO_MAX 40 +#define MOUSEKEY_MAX_SPEED 7 #define MOUSEKEY_WHEEL_DELAY 0 #define TAPPING_TOGGLE 1 From 006ba4bf36e026d6b6c91ef52a5d0e32c7eefe34 Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Wed, 24 May 2017 12:36:36 -0400 Subject: [PATCH 86/86] moved unicodemap rules to localer make --- keyboards/frosty_flake/rules.mk | 1 - 1 file changed, 1 deletion(-) diff --git a/keyboards/frosty_flake/rules.mk b/keyboards/frosty_flake/rules.mk index 8c59241d42..f878533fe9 100644 --- a/keyboards/frosty_flake/rules.mk +++ b/keyboards/frosty_flake/rules.mk @@ -63,7 +63,6 @@ NKRO_ENABLE ?= no # USB Nkey Rollover BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default MIDI_ENABLE ?= no # MIDI controls UNICODE_ENABLE ?= no # Unicode -UNICODEMAP_ENABLE ?= yes BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID AUDIO_ENABLE ?= no # Audio output on port C6 FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches