aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/atreus/config.h4
-rw-r--r--keyboards/atreus/keymaps/classic/keymap.c48
-rw-r--r--keyboards/atreus/keymaps/default/keymap.c22
-rw-r--r--keyboards/atreus/rules.mk6
-rw-r--r--keyboards/ergodox/keymaps/absenth/absenth_highres.pngbin0 -> 1429453 bytes
-rw-r--r--keyboards/ergodox/keymaps/absenth/keymap.c183
-rw-r--r--keyboards/ergodox/keymaps/absenth/readme.md8
-rw-r--r--keyboards/ergodox/keymaps/bepo_csa/keymap.c527
-rw-r--r--keyboards/ergodox/keymaps/bepo_csa/readme.md162
-rw-r--r--keyboards/ergodox/keymaps/zweihander-osx/Makefile (renamed from keyboards/ergodox/keymaps/zweihander-osx/makefile.mk)0
-rw-r--r--keyboards/ergodox/keymaps/zweihander-osx/keymap.c14
-rw-r--r--keyboards/ergodox/keymaps/zweihander-osx/readme.markdown8
-rw-r--r--keyboards/hhkb/keymaps/jp/Makefile2
-rw-r--r--keyboards/hhkb/keymaps/rdg_jp/Makefile2
-rw-r--r--keyboards/hhkb/rules.mk24
-rw-r--r--quantum/keymap_extras/keymap_canadian_multilingual.h255
-rw-r--r--tmk_core/readme.md2
-rwxr-xr-xutil/new_project.sh1
18 files changed, 1233 insertions, 35 deletions
diff --git a/keyboards/atreus/config.h b/keyboards/atreus/config.h
index 624d90188..51162cde3 100644
--- a/keyboards/atreus/config.h
+++ b/keyboards/atreus/config.h
@@ -37,7 +37,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
37// COLS: Left to right, ROWS: Top to bottom 37// COLS: Left to right, ROWS: Top to bottom
38#if defined(ATREUS_ASTAR) 38#if defined(ATREUS_ASTAR)
39# define MATRIX_ROW_PINS { D0, D1, D3, D2 } 39# define MATRIX_ROW_PINS { D0, D1, D3, D2 }
40#if defined(PCBDOWN)
41# define MATRIX_COL_PINS { B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 }
42#else
40# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 } 43# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
44#endif
41# define UNUSED_PINS 45# define UNUSED_PINS
42#elif defined(ATREUS_TEENSY2) 46#elif defined(ATREUS_TEENSY2)
43# define MATRIX_ROW_PINS { D0, D1, D2, D3 } 47# define MATRIX_ROW_PINS { D0, D1, D2, D3 }
diff --git a/keyboards/atreus/keymaps/classic/keymap.c b/keyboards/atreus/keymaps/classic/keymap.c
new file mode 100644
index 000000000..6ca0b2077
--- /dev/null
+++ b/keyboards/atreus/keymaps/classic/keymap.c
@@ -0,0 +1,48 @@
1#include "atreus.h"
2
3// Each layer gets a name for readability, which is then used in the keymap matrix below.
4// The underscores don't mean anything - you can have a layer called STUFF or any other name.
5// Layer names don't all need to be of the same length, obviously, and you can also skip them
6// entirely and just use numbers.
7#define _QW 0
8#define _RS 1
9#define _LW 2
10
11const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
12[_QW] = { /* Qwerty */
13 {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P },
14 {KC_A, KC_S, KC_D, KC_F, KC_G, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN },
15 {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH },
16 {KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT }
17},
18[_RS] = { /* [> RAISE <] */
19 {KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR},
20 {KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS},
21 {KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_LALT, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS},
22 {TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL}
23},
24[_LW] = { /* [> LOWER <] */
25 {KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10},
26 {KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11},
27 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12},
28 {KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, RESET}
29}};
30
31const uint16_t PROGMEM fn_actions[] = {
32
33};
34
35const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
36{
37 // MACRODOWN only works in this function
38 switch(id) {
39 case 0:
40 if (record->event.pressed) {
41 register_code(KC_RSFT);
42 } else {
43 unregister_code(KC_RSFT);
44 }
45 break;
46 }
47 return MACRO_NONE;
48};
diff --git a/keyboards/atreus/keymaps/default/keymap.c b/keyboards/atreus/keymaps/default/keymap.c
index 1c4280ff5..04ad66fed 100644
--- a/keyboards/atreus/keymaps/default/keymap.c
+++ b/keyboards/atreus/keymaps/default/keymap.c
@@ -18,17 +18,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
18 {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH }, 18 {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH },
19 {KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT } 19 {KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT }
20}, 20},
21/*
22 * ! @ up { } || pgup 7 8 9 *
23 * # left down right $ || pgdn 4 5 6 +
24 * [ ] ( ) & || ` 1 2 3 \
25 * lower insert super shift bksp ctrl || alt space fn . 0 =
26 */
21[_RS] = { /* [> RAISE <] */ 27[_RS] = { /* [> RAISE <] */
22 {KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR}, 28 {KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR},
23 {KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS}, 29 {KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS},
24 {KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_LALT, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS}, 30 {KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_LALT, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS},
25 {TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL} 31 {TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL}
26}, 32},
33/*
34 * insert home up end pgup || up F7 F8 F9 F10
35 * del left down right pgdn || down F4 F5 F6 F11
36 * volup reset || F1 F2 F3 F12
37 * voldn super shift bksp ctrl || alt space L0 prtsc scroll pause
38 */
27[_LW] = { /* [> LOWER <] */ 39[_LW] = { /* [> LOWER <] */
28 {KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10}, 40 {KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10},
29 {KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11}, 41 {KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11},
30 {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12}, 42 {KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, RESET, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12},
31 {KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, RESET} 43 {KC_TRNS, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_PSCR, KC_SLCK, KC_PAUS}
32}}; 44}};
33 45
34const uint16_t PROGMEM fn_actions[] = { 46const uint16_t PROGMEM fn_actions[] = {
diff --git a/keyboards/atreus/rules.mk b/keyboards/atreus/rules.mk
index d71f50bb2..3a00993bd 100644
--- a/keyboards/atreus/rules.mk
+++ b/keyboards/atreus/rules.mk
@@ -2,11 +2,11 @@
2 2
3ifdef TEENSY2 3ifdef TEENSY2
4 OPT_DEFS += -DATREUS_TEENSY2 4 OPT_DEFS += -DATREUS_TEENSY2
5 ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex 5 ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
6else 6else
7 OPT_DEFS += -DATREUS_ASTAR 7 OPT_DEFS += -DATREUS_ASTAR
8 OPT_DEFS += -DCATERINA_BOOTLOADER 8 OPT_DEFS += -DCATERINA_BOOTLOADER
9 ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ 9 ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
10 avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) 10 avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
11endif 11endif
12 12
@@ -79,4 +79,4 @@ UNICODE_ENABLE ?= YES # Unicode
79USB ?= /dev/cu.usbmodem1411 79USB ?= /dev/cu.usbmodem1411
80 80
81upload: build 81upload: build
82 $(ATRUES_UPLOAD_COMMAND) \ No newline at end of file 82 $(ATREUS_UPLOAD_COMMAND)
diff --git a/keyboards/ergodox/keymaps/absenth/absenth_highres.png b/keyboards/ergodox/keymaps/absenth/absenth_highres.png
new file mode 100644
index 000000000..a0596b281
--- /dev/null
+++ b/keyboards/ergodox/keymaps/absenth/absenth_highres.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/absenth/keymap.c b/keyboards/ergodox/keymaps/absenth/keymap.c
new file mode 100644
index 000000000..30f747419
--- /dev/null
+++ b/keyboards/ergodox/keymaps/absenth/keymap.c
@@ -0,0 +1,183 @@
1#include "ergodox.h"
2#include "debug.h"
3#include "action_layer.h"
4#include "version.h"
5
6#define BASE 0 // default layer
7#define SYMB 1 // symbols
8#define MDIA 2 // media keys
9
10const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
11/* Keymap 0: Basic layer
12 *
13 * ,--------------------------------------------------. ,--------------------------------------------------.
14 * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
15 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
16 * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
17 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
18 * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
19 * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
20 * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
21 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
22 * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
23 * `----------------------------------' `----------------------------------'
24 * ,-------------. ,-------------.
25 * | App | LGui | | Alt |Ctrl/Esc|
26 * ,------|------|------| |------+--------+------.
27 * | | | Home | | PgUp | | |
28 * | Space|Backsp|------| |------| Tab |Enter |
29 * | |ace | End | | PgDn | | |
30 * `--------------------' `----------------------'
31 */
32// If it accepts an argument (i.e, is a function), it doesn't need KC_.
33// Otherwise, it needs KC_*
34[BASE] = KEYMAP( // layer 0 : default
35 // left hand
36 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
37 KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
38 KC_BSPC, LT(MDIA, KC_A), KC_S, KC_D, KC_F, KC_G,
39 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
40 LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
41 ALT_T(KC_APP), KC_LGUI,
42 KC_HOME,
43 KC_SPC,KC_BSPC,KC_END,
44 // right hand
45 KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
46 TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
47 KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
48 MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
49 KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
50 KC_LALT, CTL_T(KC_ESC),
51 KC_PGUP,
52 KC_PGDN,KC_TAB, KC_ENT
53 ),
54/* Keymap 1: Symbol Layer
55 *
56 * ,--------------------------------------------------. ,--------------------------------------------------.
57 * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
58 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
59 * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
60 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
61 * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
62 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
63 * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
64 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
65 * | | | | | | | | . | 0 | = | |
66 * `----------------------------------' `----------------------------------'
67 * ,-------------. ,-------------.
68 * | | | | | |
69 * ,------|------|------| |------+------+------.
70 * | | | | | | | |
71 * | | |------| |------| | |
72 * | | | | | | | |
73 * `--------------------' `--------------------'
74 */
75// SYMBOLS
76[SYMB] = KEYMAP(
77 // left hand
78 M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
79 KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
80 KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
81 KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
82 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
83 KC_TRNS,KC_TRNS,
84 KC_TRNS,
85 KC_TRNS,KC_TRNS,KC_TRNS,
86 // right hand
87 KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
88 KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
89 KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
90 KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
91 KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
92 KC_TRNS, KC_TRNS,
93 KC_TRNS,
94 KC_TRNS, KC_TRNS, KC_TRNS
95),
96/* Keymap 2: Media and mouse keys
97 *
98 * ,--------------------------------------------------. ,--------------------------------------------------.
99 * | | | | | | | | | | | | | | | |
100 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
101 * | | | | MsUp | | | | | | | | | | | |
102 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
103 * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
104 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
105 * | | | | | | | | | | | | Prev | Next | | |
106 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
107 * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
108 * `----------------------------------' `----------------------------------'
109 * ,-------------. ,-------------.
110 * | | | | | |
111 * ,------|------|------| |------+------+------.
112 * | | | | | | |Brwser|
113 * | | |------| |------| |Back |
114 * | | | | | | | |
115 * `--------------------' `--------------------'
116 */
117// MEDIA AND MOUSE
118[MDIA] = KEYMAP(
119 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
120 KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
121 KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
122 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
123 KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
124 KC_TRNS, KC_TRNS,
125 KC_TRNS,
126 KC_BTN1, KC_BTN2, KC_TRNS,
127 // right hand
128 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
129 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
130 KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_TRNS, KC_MPLY,
131 KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
132 KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
133 KC_TRNS, KC_TRNS,
134 KC_TRNS,
135 KC_TRNS, KC_TRNS, KC_WBAK
136),
137};
138
139const uint16_t PROGMEM fn_actions[] = {
140 [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
141};
142
143const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
144{
145 // MACRODOWN only works in this function
146 switch(id) {
147 case 0:
148 if (record->event.pressed) {
149 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
150 }
151 break;
152 }
153 return MACRO_NONE;
154};
155
156// Runs just one time when the keyboard initializes.
157void matrix_init_user(void) {
158
159};
160
161// Runs constantly in the background, in a loop.
162void matrix_scan_user(void) {
163
164 uint8_t layer = biton32(layer_state);
165
166 ergodox_board_led_off();
167 ergodox_right_led_1_off();
168 ergodox_right_led_2_off();
169 ergodox_right_led_3_off();
170 switch (layer) {
171 // TODO: Make this relevant to the ErgoDox EZ.
172 case 1:
173 ergodox_right_led_1_on();
174 break;
175 case 2:
176 ergodox_right_led_2_on();
177 break;
178 default:
179 // none
180 break;
181 }
182
183};
diff --git a/keyboards/ergodox/keymaps/absenth/readme.md b/keyboards/ergodox/keymaps/absenth/readme.md
new file mode 100644
index 000000000..35d0aad46
--- /dev/null
+++ b/keyboards/ergodox/keymaps/absenth/readme.md
@@ -0,0 +1,8 @@
1# ErgoDox EZ Absenth Configuration
2
3## Changelog
4
5* Sept. 8, 2016 (V0.1):
6 * Made A key double as MEDIA Layer change when you hold it. Added mouse buttons to the large thumb buttons on the left side on the Media Layer. Added vi/vim style arrow keys on HJKL on media layer.
7
8![Absenth](absenth_highres.png)
diff --git a/keyboards/ergodox/keymaps/bepo_csa/keymap.c b/keyboards/ergodox/keymaps/bepo_csa/keymap.c
new file mode 100644
index 000000000..495242adb
--- /dev/null
+++ b/keyboards/ergodox/keymaps/bepo_csa/keymap.c
@@ -0,0 +1,527 @@
1/* TypeMatrix-2030-like keymap */
2#include "ergodox.h"
3#include "debug.h"
4#include "action_layer.h"
5#include "action_util.h"
6#include "led.h"
7#include "keymap_extras/keymap_bepo.h"
8#include "keymap_extras/keymap_canadian_multilingual.h"
9
10enum layers {
11 LR_BASE, // default layer
12 LR_CSA, // BÉPO over Canadian Multilingual (CSA)
13 LR_CSA_SFT, // shifted BÉPO over CSA
14 LR_CSA_AGR, // altgr-ed BÉPO over CSA
15 LR_CSA_AGR_SFT, // altgr-shifted BÉPO over CSA
16 LR_NUMR, // numeric layer
17 LR_FN, // fn layer
18};
19
20#define IS_CA_MULT_ENABLED() (layer_state & (1 << LR_CSA))
21
22enum macros {
23 // Characters that do not exist in CSA and must be implemented based on unicode support
24 // Note: these are intentionally declared first to be used as indexes in spec_chars below
25 UC_NDSH, // –
26 UC_MDSH, // —
27 UC_ELPS, // …
28 END_UC, // indicates the last unicode character macro
29 // other macros
30 M_CSA_SFT, // toggle shift on CSA
31 M_CSA_AGR_SFT, // toggle shift on LR_CSA_AGR (goes to LR_CSA_AGR_SFT)
32 M_CSA_SFT_AGR, // toggle AltGr on LR_CSA_SFT (goes to LR_CSA_AGR_SFT)
33 // macros for characters that need to be un-shifted in LR_CA_MULT_SHIFT
34 M_1,
35 M_2,
36 M_3,
37 M_4,
38 M_5,
39 M_6,
40 M_7,
41 M_8,
42 M_9,
43 M_0,
44 M_DEGR,
45 M_SCLN,
46 M_GRV,
47 M_NBSP,
48 // macros for characters that don't have a simple key combination in LR_CA_MULT_ALTGR
49 M_CRC,
50 // other layer macros
51 M_DBL0, // double 0
52 M_FNLR, // fn layer
53 M_NMAL, // num+alt
54};
55
56#define CSA(name) M(M_CSA_##name) // calls a CSA macro
57
58const uint16_t unicode_chars[] = {
59 [UC_NDSH] = L'–',
60 [UC_MDSH] = L'—',
61 [UC_ELPS] = L'…',
62};
63
64/* shortcut for unicode character macros */
65#define MUC(name) M(UC_##name) // calls a unicode macro
66
67const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
68/* Basic layer
69 *
70 * ,--------------------------------------------------. ,--------------------------------------------------.
71 * | $ | " | « | » | ( | ) | Del | | Del | @ | + | - | / | * | W |
72 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
73 * | Tab | B | É | P | O | È |Backsp| |Backsp| ^ | V | D | L | J | Z |
74 * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------|
75 * | = | A | U | I | E | , |------| |------| C | T | S | R | N | M |
76 * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------|
77 * | LShift | À | Y | X | . | K | | | | ' | Q | G | H | F | RShift |
78 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
79 * |LCtrl | fn | LGui |numAlt| LAlt | |Alt Gr| % | App | Ç | RCtrl|
80 * `----------------------------------' `----------------------------------'
81 * ,--------------. ,-------------.
82 * | Esc | num | | Left |Right |
83 * ,------+-------+------| |------+------+------.
84 * | | | PgUp | | Up | | |
85 * |Space | Home |------| |------| End |Space |
86 * | | | PgDn | | Down | | |
87 * `---------------------' `--------------------'
88 */
89// If it accepts an argument (i.e, is a function), it doesn't need KC_.
90// Otherwise, it needs KC_*
91[LR_BASE] = KEYMAP( // layer 0 : default
92 // left hand
93 BP_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT,
94 KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC,
95 BP_EQL, BP_A, BP_U, BP_I, BP_E, BP_COMM,
96 KC_LSFT, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT,
97 KC_LCTL, M(M_FNLR), KC_LGUI, M(M_NMAL), KC_LALT,
98
99 KC_ESC, TG(LR_NUMR),
100 KC_PGUP,
101 KC_SPC, KC_HOME, KC_PGDN,
102
103 // right hand
104 KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, BP_W,
105 KC_BSPC, BP_DCRC, BP_V, BP_D, BP_L, BP_J, BP_Z,
106 BP_C, BP_T, BP_S, BP_R, BP_N, BP_M,
107 KC_ENT, BP_APOS, BP_Q, BP_G, BP_H, BP_F, KC_RSFT,
108 BP_ALGR, BP_PERC, KC_APP, BP_CCED, KC_RCTL,
109
110 KC_LEFT, KC_RGHT,
111 KC_UP,
112 KC_DOWN, KC_END, KC_SPC
113 ),
114/**
115 * Same as default but for use with Canadian Multilingual on OS side
116 */
117[LR_CSA] = KEYMAP(
118 // left hand
119 KC_DLR, CSA_DQOT, CSA_LGIL, CSA_RGIL, KC_LPRN, KC_RPRN, KC_TRNS,
120 KC_TRNS, KC_B, CSA_ECUT, KC_P, KC_O, CSA_EGRV, KC_TRNS,
121 KC_EQL, KC_A, KC_U, KC_I, KC_E, KC_COMM,
122 CSA(SFT), CSA_AGRV, KC_Y, KC_X, KC_DOT, KC_K, KC_TRNS,
123 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
124
125 KC_TRNS, KC_TRNS,
126 KC_TRNS,
127 KC_TRNS, KC_TRNS, KC_TRNS,
128
129 // right hand
130 KC_TRNS, KC_AT, KC_PLUS, KC_MINS, CSA_SLSH, KC_ASTR, KC_W,
131 KC_TRNS, CSA_DCRC, KC_V, KC_D, KC_L, KC_J, KC_Z,
132 KC_C, KC_T, KC_S, KC_R, KC_N, KC_M,
133 KC_TRNS, CSA_APOS, KC_Q, KC_G, KC_H, KC_F, CSA(SFT),
134 MO(LR_CSA_AGR), KC_PERC, KC_TRNS, CSA_CCED, KC_LCTL, // RCTL has a special behaviour in CSA so use LCTL
135
136 KC_TRNS, KC_TRNS,
137 KC_TRNS,
138 KC_TRNS, KC_TRNS, KC_TRNS
139 ),
140/* Shifted BÉPO over Canadian Multilingual
141 *
142 * ,--------------------------------------------------. ,--------------------------------------------------.
143 * | # | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
144 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
145 * | | | | | | | | | | ! | | | | | |
146 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
147 * | ° | | | | | ; |------| |------| | | | | | |
148 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
149 * | | | | | : | | | | | ? | | | | | |
150 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
151 * | | | | | | | | ` | | | |
152 * `----------------------------------' `-----------------------------------'
153 * ,-------------. ,-------------.
154 * | | | | | |
155 * ,------|------|------| |------+------+------.
156 * | | | | | | | |
157 * | | |------| |------| | |
158 * | | | | | | | |
159 * `--------------------' `--------------------'
160 */
161[LR_CSA_SFT] = KEYMAP(
162 // left hand
163 KC_HASH, M(M_1), M(M_2), M(M_3), M(M_4), M(M_5), KC_TRNS,
164 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
165 M(M_DEGR),KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(M_SCLN),
166 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_COLN, KC_TRNS, KC_TRNS,
167 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
168
169 KC_TRNS, KC_TRNS,
170 KC_TRNS,
171 M(M_NBSP), KC_TRNS, KC_TRNS,
172
173 // right hand
174 KC_TRNS, M(M_6), M(M_7), M(M_8), M(M_9), M(M_0), KC_TRNS,
175 KC_TRNS, KC_EXLM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
176 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
177 KC_TRNS, CSA_QEST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
178 CSA(SFT_AGR), M(M_GRV), KC_TRNS, KC_TRNS, KC_TRNS,
179
180 KC_TRNS, KC_TRNS,
181 KC_TRNS,
182 KC_TRNS, KC_TRNS, M(M_NBSP)
183 ),
184/* AltGr-ed BÉPO over Canadian Multilingual
185 * "////" indicates that the key is disabled (unsupported bépo character)
186 *
187 * ,--------------------------------------------------. ,--------------------------------------------------.
188 * | – | — | < | > | [ | ] | | | | ^ | ± | //// | ÷ | × | dead ˘ |
189 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
190 * | | | |dead '| & | œ |dead `| | | | ¡ |dead ˇ| ð | //// | ij | ////// |
191 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
192 * | ////// | æ | ù |dead "| € | ̛’ |------| |------| © | þ | ß | ® |dead ~| dead ¯ |
193 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
194 * | | \ | { | } | … | ~ | | | | ¿ |dead °| μ | //// |dead ˛| |
195 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
196 * | | | | | | | | //// | |dead ¸| |
197 * `----------------------------------' `-----------------------------------'
198 * ,-------------. ,-------------.
199 * | | | | | |
200 * ,------|------|------| |------+------+------.
201 * | | | | | | | |
202 * | _ | |------| |------| | _ |
203 * | | | | | | | |
204 * `--------------------' `--------------------'
205 */
206[LR_CSA_AGR] = KEYMAP(
207 // left hand
208 MUC(NDSH), MUC(MDSH), CSA_LESS, CSA_GRTR, CSA_LBRC, CSA_RBRC, KC_TRNS,
209 KC_TRNS, CSA_PIPE, CSA_DACT, KC_AMPR, CSA_OE, CSA_DGRV, KC_TRNS,
210 KC_NO, CSA_AE, CSA_UGRV, CSA_DTRM, CSA_EURO, CSA_RQOT,
211 CSA(AGR_SFT), CSA_BSLS, CSA_LCBR, CSA_RCBR, MUC(ELPS), CSA_TILD, KC_TRNS,
212 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
213
214 KC_TRNS, KC_TRNS,
215 KC_TRNS,
216 KC_UNDS, CSA(AGR_SFT), KC_TRNS,
217
218 // right hand
219 KC_TRNS, M(M_CRC), CSA_PSMS, KC_NO, CSA_DVSN, CSA_TIMS, CSA_DBRV,
220 KC_TRNS, CSA_IXLM, CSA_DCAR, CSA_ETH, KC_NO, CSA_IJ, KC_NO,
221 CSA_CPRT, CSA_THRN, CSA_SRPS, CSA_RTM, CSA_DTLD, CSA_DMCR,
222 KC_TRNS, CSA_IQST, CSA_DRNG, CSA_MU, KC_NO, CSA_DOGO, CSA(AGR_SFT),
223 KC_TRNS, KC_NO, KC_TRNS, CSA_DCED, KC_TRNS,
224
225 KC_TRNS, KC_TRNS,
226 KC_TRNS,
227 KC_TRNS, CSA(AGR_SFT), KC_UNDS
228 ),
229/* AltGr-shifted BÉPO over Canadian Multilingual
230 * "////" indicates that the key is disabled (unsupported bépo character or unused in bépo)
231 *
232 * ,--------------------------------------------------. ,--------------------------------------------------.
233 * | ¶ | //// | “ | ” | //// | //// | | | | //// | ¬ | ¼ | ½ | ¾ | ////// |
234 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
235 * | | ¦ | ˝ | § | Œ | ` | | | | //// | //// | Ð | //// | IJ | ////// |
236 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
237 * | ////// | Æ | Ù |dead-˙| //// | //// |------| |------| //// | Þ | ẞ | ™ | //// | º |
238 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
239 * | | //// | ‘ | ’ | //// | //// | | | | //// | //// | //// | //// | ª | |
240 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
241 * | | | | | | | | | | | |
242 * `----------------------------------' `----------------------------------'
243 * ,-------------. ,-------------.
244 * | | | | | |
245 * ,------|------|------| |------+------+------.
246 * | | | | | | | |
247 * | | |------| |------| | |
248 * | | | | | | | |
249 * `--------------------' `--------------------'
250 */
251[LR_CSA_AGR_SFT] = KEYMAP(
252 // left hand
253 CSA_PARG, KC_NO, CSA_LDQT, CSA_RDQT, KC_NO, KC_NO, KC_TRNS,
254 KC_TRNS, CSA_BPIP, CSA_DDCT, CSA_SECT, S(CSA_OE), M(M_GRV), KC_TRNS,
255 KC_NO, S(CSA_AE), S(CSA_UGRV), CSA_DDTA, KC_NO, KC_NO,
256 CSA(AGR_SFT), KC_NO, CSA_LQOT, CSA_RQOT, KC_NO, KC_NO, KC_TRNS,
257 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
258
259 KC_TRNS, KC_TRNS,
260 KC_TRNS,
261 KC_TRNS, CSA(AGR_SFT), KC_TRNS,
262
263 // right hand
264 KC_TRNS, KC_NO, CSA_NEGT, CSA_1QRT, CSA_1HLF, CSA_3QRT, KC_NO,
265 KC_TRNS, KC_NO, KC_NO, S(CSA_ETH), KC_NO, S(CSA_IJ), KC_NO,
266 KC_NO, S(CSA_THRN), S(CSA_SRPS), CSA_TM, KC_NO, CSA_ORDO,
267 KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, CSA_ORDA, CSA(AGR_SFT),
268 CSA(SFT_AGR), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
269
270 KC_TRNS, KC_TRNS,
271 KC_TRNS,
272 KC_TRNS, CSA(AGR_SFT), KC_TRNS
273 ),
274/* Numeric Layer
275 *
276 * ,--------------------------------------------------. ,--------------------------------------------------.
277 * | | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - |
278 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
279 * | | F6 | F7 | F8 | F9 | F10 | | | | | Home | 7 | 8 | 9 | + |
280 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
281 * | | F11 | F12 | | | |------| |------| Up | End | 4 | 5 | 6 | + |
282 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
283 * | | | | | | | | | Left | Down | Right| 1 | 2 | 3 |KpEnter |
284 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
285 * | | | | | | | | 0 | 00 | . |Etr/Ctl|
286 * `----------------------------------' `-----------------------------------'
287 * ,-------------. ,-------------.
288 * | | | |n.lock|c.lock|
289 * ,------|------|------| |------+------+------.
290 * | | | | | | | |
291 * | | |------| |------| | |
292 * | | | | | | | |
293 * `--------------------' `--------------------'
294 */
295// SYMBOLS
296[LR_NUMR] = KEYMAP(
297 // left hand
298 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
299 KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
300 KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS,
301 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
302 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
303
304 KC_TRNS,KC_TRNS,
305 KC_TRNS,
306 KC_TRNS, KC_TRNS,KC_TRNS,
307
308 // right hand
309 KC_TRNS, KC_F6, KC_F7, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS,
310 KC_TRNS, KC_TRNS, KC_HOME, KC_P7, KC_P8, KC_P9, KC_PPLS,
311 KC_UP, KC_END, KC_P4, KC_P5, KC_P6, KC_PPLS,
312 KC_LEFT, KC_DOWN, KC_RGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
313 KC_TRNS, KC_P0, M(M_DBL0),KC_PDOT, CTL_T(KC_PENT),
314
315 KC_NLCK, KC_CAPS,
316 KC_TRNS,
317 KC_TRNS, KC_TRNS, KC_TRNS
318),
319/* fn layer
320 *
321 * ,--------------------------------------------------. ,--------------------------------------------------.
322 * |~CA-mult| | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
323 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
324 * | | | | | | |VolUp | | | | | | | | Pause |
325 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
326 * | RESET | | | Calc | Mail |Browsr|------| |------| | | | | | |
327 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
328 * | | App | cut | copy |paste | Mute |VolDn | | | | | | | | |
329 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
330 * | | | | | | | | | | | |
331 * `----------------------------------' `----------------------------------'
332 * ,-------------. ,-------------.
333 * | | | | | |
334 * ,------|------|------| |------+------+------.
335 * | | | Next | | | | |
336 * | Mute | play |------| |------| | |
337 * | | | Prev | | | | |
338 * `--------------------' `--------------------'
339 */
340// MEDIA AND MOUSE
341[LR_FN] = KEYMAP(
342 TG(LR_CSA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS,
343 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
344 RESET, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM,
345 KC_TRNS, KC_APP, S(KC_DELT), LCTL(KC_INS),S(KC_INS), KC_MUTE, KC_VOLD,
346 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
347
348 KC_TRNS, KC_TRNS,
349 KC_MPRV,
350 KC_MUTE, KC_MPLY, KC_MNXT,
351
352 // right hand
353 KC_INS, KC_EJCT, KC_PWR, KC_SLEP, KC_WAKE, KC_PSCR, KC_SLCK,
354 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS,
355 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
356 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
357 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
358
359 KC_TRNS, KC_TRNS,
360 KC_TRNS,
361 KC_TRNS, KC_TRNS, KC_TRNS
362),
363};
364
365const uint16_t PROGMEM fn_actions[] = {
366};
367
368void hold_shift(void) {
369 register_code(KC_LSHIFT);
370}
371
372void release_shift(void) {
373 unregister_code(KC_LSHIFT);
374}
375
376uint16_t hextokeycode(int hex) {
377 if (hex == 0x0) {
378 return KC_P0;
379 } else if (hex < 0xA) {
380 return KC_P1 + (hex - 0x1);
381 } else {
382 return KC_A + (hex - 0xA);
383 }
384}
385
386void send_unicode(uint16_t unicode)
387{
388 // For more info on how this works per OS, see here: https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input
389 // Implemented for Windows:
390 // Pressing ALT followed by + followed by the unicode code point in hex.
391 // Requires registry key HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad set to String 1
392 register_code(KC_LALT);
393 register_code(KC_PPLS);
394 unregister_code(KC_PPLS);
395
396 for (int i = 12; i >= 0; i -= 4) {
397 register_code(hextokeycode((unicode >> i) & 0xF));
398 unregister_code(hextokeycode((unicode >> i) & 0xF));
399 }
400
401 unregister_code(KC_LALT);
402}
403
404const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
405{
406 // MACRODOWN only works in this function
407 switch(id) {
408 case 0 ... END_UC:
409 if (record->event.pressed) {
410 send_unicode(unicode_chars[id]);
411 }
412 break;
413 case M_CSA_SFT:
414 // BÉPO over CSA: toggle shift layer
415 layer_invert(LR_CSA_SFT);
416 if (record->event.pressed) {
417 hold_shift();
418 } else {
419 release_shift();
420 }
421 break;
422 case M_CSA_SFT_AGR:
423 // BÉPO over CSA: from shift layer, momentary altgr+shift layer
424 layer_invert(LR_CSA_AGR);
425 layer_invert(LR_CSA_AGR_SFT);
426 if (record->event.pressed) {
427 // shift not needed for LR_CSA_AGR_SFT
428 release_shift();
429 } else {
430 // back to shift layer
431 hold_shift();
432 }
433 break;
434 case M_CSA_AGR_SFT:
435 // BÉPO over CSA: from altgr layer, momentary altgr+shift layer
436 layer_invert(LR_CSA_SFT);
437 layer_invert(LR_CSA_AGR_SFT);
438 break;
439 case M_1 ... M_0:
440 case M_DEGR:
441 case M_SCLN:
442 case M_GRV:
443 case M_NBSP:
444 // macros of the shift layer that require to release shift
445 if (record->event.pressed) {
446 release_shift();
447 switch (id) {
448 case M_1 ... M_0:
449 register_code(KC_1 + (id - M_1));
450 break;
451 case M_DEGR:
452 return MACRO(DOWN(CSA_ALTGR), D(SCLN), END);
453 case M_SCLN:
454 return MACRO(D(SCLN), END);
455 case M_GRV:
456 return MACRO(I(75), DOWN(CSA_ALTGR), TYPE(CSA_DCRC), UP(CSA_ALTGR), T(SPACE), END);
457 case M_NBSP:
458 // use weak mod such that pressing another key will not be affected
459 add_weak_mods(MOD_BIT(CSA_ALTGR));
460 return MACRO(D(SPACE), END);
461 }
462 } else {
463 hold_shift();
464 switch (id) {
465 case M_1 ... M_0:
466 unregister_code(KC_1 + (id - M_1));
467 break;
468 case M_DEGR:
469 return MACRO(UP(CSA_ALTGR), U(SCLN), END);
470 case M_SCLN:
471 return MACRO(U(SCLN), END);
472 case M_NBSP:
473 del_weak_mods(MOD_BIT(CSA_ALTGR));
474 return MACRO(U(SPACE), END);
475 }
476 }
477 break;
478 case M_CRC:
479 if (record->event.pressed) {
480 return MACRO(I(75), TYPE(CSA_DCRC), T(SPACE), END);
481 }
482 break;
483 case M_DBL0:
484 if (record->event.pressed) {
485 return MACRO( I(25), T(P0), T(P0), END );
486 }
487 break;
488 case M_FNLR:
489 layer_invert(LR_NUMR);
490 layer_invert(LR_FN);
491 break;
492 case M_NMAL:
493 layer_invert(LR_NUMR);
494 if (record->event.pressed) {
495 register_code(KC_LALT);
496 } else {
497 unregister_code(KC_LALT);
498 }
499 break;
500 }
501 return MACRO_NONE;
502};
503
504// Runs just one time when the keyboard initializes.
505void matrix_init_user(void) {
506};
507
508// Runs constantly in the background, in a loop.
509void matrix_scan_user(void) {
510
511 ergodox_board_led_off();
512 ergodox_right_led_1_off();
513 ergodox_right_led_2_off();
514 ergodox_right_led_3_off();
515 // led 1: numeric layer
516 if (layer_state & (1 << LR_NUMR)) {
517 ergodox_right_led_1_on();
518 }
519 // led 2: BÉPO over Canadian Multilingual
520 if (IS_CA_MULT_ENABLED()) {
521 ergodox_right_led_2_on();
522 }
523 // led 3: caps lock
524 if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
525 ergodox_right_led_3_on();
526 }
527};
diff --git a/keyboards/ergodox/keymaps/bepo_csa/readme.md b/keyboards/ergodox/keymaps/bepo_csa/readme.md
new file mode 100644
index 000000000..d4975b226
--- /dev/null
+++ b/keyboards/ergodox/keymaps/bepo_csa/readme.md
@@ -0,0 +1,162 @@
1# BÉPO Keymap with firmware-remapping for software CSA layout
2
3This is a keymap intended to be used with the [BÉPO layout](http://bepo.fr), a French ergonomic layout designed by following Dvorak's principles.
4
5The particularity of this keymap is that it supports using the [Canadian Multilingual Standard layout](https://en.wikipedia.org/wiki/QWERTY#Canadian_Multilingual_Standard) (also known as _ACNOR keyboard_ or _CSA keyboard_, see also the [French page](https://fr.wikipedia.org/wiki/QWERTY#Clavier_canadien_multilingue_standard) which contains more details) on the OS side, by enabling the _CSA_ layer. This is especially useful for operating systems that natively provide CSA, but not BÉPO, like Windows. The CSA layout was chosen because it is probably the standard layout that provides the best character set coverage.
6
7This keymap is based on the [tm2030](../tm2030/) keymap, whose goal was to have a [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) inspired layout for the ErgoDox EZ.
8
9As this keyboard is intended for French people, the rest of this page will be in French.
10
11# Keymap BÉPO avec support en firmware pour utilisation avec la disposition CSA en software
12
13Cette keymap a été conçue pour être utilisée avec la [disposition BÉPO](http://bepo.fr), la disposition francophone, ergonomique et libre basée sure les principes de Dvorak.
14
15La particularité de cette keymap est qu'elle supporte l'utilisation du [clavier canadien multilingue standard](https://fr.wikipedia.org/wiki/QWERTY#Clavier_canadien_multilingue_standard) (aussi appelé _clavier ACNOR_ ou _clavier CSA_) du côté du système d'exploitation, en activant la couche _CSA_. Ceci s'avère particulièrement utile pour les systèmes d'exploitations qui fournissent nativement le CSA, mais pas le BÉPO, comme Windows. Le clavier CSA a été choisi comme base car c'est probablement la disposition standard qui fournit la meilleure couverture en termes de caractères disponibles.
16
17Cette keymap est basée sur la keymap [tm2030](../tm2030/), dont le but est de fournir une disposition inspirée du [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) pour l'ErgoDox EZ.
18
19## Couche de base
20C'est la couche par défaut, proche du TypeMatrix, avec les différences suivantes:
21- La ligne du haut (les touches `F`) et la colonne de droite sont retirées, les touches correspondantes étant déplacées ailleurs.
22- Les touches situés en bas à gauche sont redisposées dans cet ordre: `Ctrl`, `fn`, `Gui`, `num+Alt`, `Alt`
23- Les touches `shuffle` (`Alt+Tab`) et `desktop` ne sont pas supportés
24- `W` est déplacé à la place de `=`
25- `=` est déplacé sous `Tab` (au lieu d'avoir un grand `Shift`)
26- `%` et `Ç` sont déplacés à la place de `Home` et `End` respectivement
27- Les flèches ainsi que `PgUp`/`PgDown`/`Home`/`End` sont déplacées sur les pouces
28
29À noter que pour `W` et `Ç`, le but a été de ne pas les déplacer trop par rapport à la disposition BÉPO _standard_, afin de pouvoir repasser facilement sur un TypeMatrix ou un clavier traditionnel.
30
31
32```
33,--------------------------------------------------. ,--------------------------------------------------.
34| $ | " | « | » | ( | ) | Del | | Del | @ | + | - | / | * | W |
35|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
36| Tab | B | É | P | O | È |Backsp| |Backsp| ^ | V | D | L | J | Z |
37|--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------|
38| = | A | U | I | E | , |------| |------| C | T | S | R | N | M |
39|--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------|
40| LShift | À | Y | X | . | K | | | | ' | Q | G | H | F | RShift |
41`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
42 |LCtrl | fn | LGui |numAlt| LAlt | |Alt Gr| % | App | Ç | RCtrl|
43 `----------------------------------' `----------------------------------'
44 ,--------------. ,-------------.
45 | Esc | num | | Left |Right |
46 ,------+-------+------| |------+------+------.
47 | | | PgUp | | Up | | |
48 |Space | Home |------| |------| End |Space |
49 | | | PgDn | | Down | | |
50 `---------------------' `--------------------'
51```
52
53### Changer de couche
54
55- Utilisez `num` pour activer/désactiver [la couche numérique](#couche-numérique)
56- Maintenez `fn` pour activer temporairement [les couches numériques et Fn](#couche-fn)
57- Maintenez `numAlt` pour activer temporairement la couche numérique combinée avec `Alt` (facilite l'utilisation des raccourcis tels que `Alt`+`F4`)
58
59### Diodes
60Les diodes de l'ErgoDox EZ (côté droit) sont utilisées de la façon suivante :
61
62- diode de gauche (rouge) : indique l'activation de [la couche numérique](#couche-numérique)
63- diode du milieu (verte) : indique l'activation du [mode CSA](#couche-csa)
64- diode de droite (bleue) : indique le verrouillage majuscules
65
66## Couche CSA
67La couche _CSA_ est la même que la couche de base, pour une utilisation avec un clavier Canadien Multilingue configuré dans le système d'exploitation.
68
69Pour l'activer, appuyez sur `fn`+`$`. La [diode](#diodes) verte indique que la couche CSA est activée.
70
71### Limitations
72Seuls les caractères présents dans le clavier CSA sont parfaitement supportés. De manière générale, il s'agit des caractères suivants :
73
74- toute la couche de base
75- tous les caractères accessibles en `Shift`
76- tous les caractères de la main gauche accessibles en `AltGr` à l'exception du `≠`
77- environ la moitié des caractères de la main droite accessibles en `AltGr` et la moitié des caractères accessibles en `AltGr`+`Shift` (consultez [le fichier source](keymap.c) pour voir les caractères supportés)
78
79En particulier, les caractères suivants sont émulés via le support Unicode (Windows seulement):
80
81- le tiret cadratin (tiret long) : —
82- le tiret demi-cadratin (demi tiret) : –
83- les points de suspension : …
84
85L'implémentation actuelle ne fonctionne pas dans toutes les applications, en particulier les applications MS Office.
86
87Il est probable que l'utilisation de la couche CSA ne fonctionne pas correctement dans certains jeux vidéos.
88
89Cette fonctionnalité a été conçue et testée essentiellment pour Windows (7).
90
91### Détails techniques
92Techniquement, la couche CSA est en réalité composée de 4 couches servant à émuler la couche de base, les appuis sur `Shift` ou `Alt` et la combinaison des deux.
93
94Le changement de couches se fait par des macros afin d'activer ou désactiver plusieurs couches et la touche `Shift` en même temps.
95
96Certains caractères sont également implémentés par des macros, notamment ceux de la couche `Shift` qui n'ont pas besoin de cette touche en CSA, comme les chiffres.
97
98Les caractères Unicode se basent sur une implémentation spécifique et non celle fournie dans QMK — il faudrait sans doute migrer le code. Notez la façon dont ces caractères sont déclarés tels quels dans [le code source](keymap.c) (tableau `unicode_char`).
99
100## Couche numérique
101Couche numérique proche du TM lorsqu'on active `num`, avec les différences suivantes :
102
103- Le clavier numérique est déplacés de 1 vers le haut et vers la droite.
104- Les flèches sont décalées de 1 vers la gauche.
105- Fournit l'accès aux touches `F1` à `F12`, `caps-lock` et `num-lock`.
106
107La couche numérique est indiquée par la [diode](#diodes) de gauche (rouge). Caps-lock est indiqué par la diode de droite (bleue).
108
109La touche `numAlt` de [la couche de base](#couche-de-base) permet d'activer la couche numérique et la touche `Alt` simultanément, afin de faciliter les raccourcis claviers comme `Alt`+`F4`.
110
111```
112,--------------------------------------------------. ,--------------------------------------------------.
113| | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - |
114|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
115| | F6 | F7 | F8 | F9 | F10 | | | | | Home | 7 | 8 | 9 | + |
116|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
117| | F11 | F12 | | | |------| |------| Up | End | 4 | 5 | 6 | + |
118|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
119| | | | | | | | | Left | Down | Right| 1 | 2 | 3 |KpEnter |
120`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
121 | | | | | | | | 0 | 00 | . |Etr/Ctl|
122 `----------------------------------' `-----------------------------------'
123 ,-------------. ,-------------.
124 | | | |n.lock|c.lock|
125 ,------|------|------| |------+------+------.
126 | | | | | | | |
127 | | |------| |------| | |
128 | | | | | | | |
129 `--------------------' `--------------------'
130```
131
132## Couche Fn
133Activée simultanément avec la couche numérique lorsque l'on maintient la touche `fn`. Comme sur le TM, elle fournit l'accès aux fonctionnalités suivantes :
134
135- `couper`, `copier` et `coller` — attention: ne pas utiliser dans l'explorateur de fichiers.
136- monter/baisser/couper le volume — seulement accessible en main gauche, contrairement au TM.
137- piste précédente/suivante
138- calculatrice, e-mail et page d'accueil du navigateur web
139- `insert`, `power`, `sleep`, `wake`, `print screen`, `scroll-lock` et `pause`
140- ~CSA: (dés)activation de [la couche CSA](#couche-csa) sur `$`
141- RESET: rechargement du firmware avec Teensy-Loader (pour les développeurs)
142
143```
144,--------------------------------------------------. ,--------------------------------------------------.
145| ~CSA | | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
146|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
147| | | | | | |VolUp | | | | | | | | Pause |
148|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
149| RESET | | | Calc | Mail |Browsr|------| |------| | | | | | |
150|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
151| | App | cut | copy |paste | Mute |VolDn | | | | | | | | |
152`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
153 | | | | | | | | | | | |
154 `----------------------------------' `----------------------------------'
155 ,-------------. ,-------------.
156 | | | | | |
157 ,------|------|------| |------+------+------.
158 | | | Next | | | | |
159 | Mute | play |------| |------| | |
160 | | | Prev | | | | |
161 `--------------------' `--------------------'
162``` \ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/makefile.mk b/keyboards/ergodox/keymaps/zweihander-osx/Makefile
index 6e3d088a4..6e3d088a4 100644
--- a/keyboards/ergodox/keymaps/zweihander-osx/makefile.mk
+++ b/keyboards/ergodox/keymaps/zweihander-osx/Makefile
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/keymap.c b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c
index d6d66fd55..725a73e34 100644
--- a/keyboards/ergodox/keymaps/zweihander-osx/keymap.c
+++ b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c
@@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
32 * ,------|------|------| |------+--------+------. 32 * ,------|------|------| |------+--------+------.
33 * | | | PgUp | | PgDn | | | 33 * | | | PgUp | | PgDn | | |
34 * | | ⇥ |------| |------| ⇥ |Enter | 34 * | | ⇥ |------| |------| ⇥ |Enter |
35 * | | | L⌥ | | L⌃ | | | 35 * | | | R⌥ | | R⌃ | | |
36 * `--------------------' `----------------------' 36 * `--------------------' `----------------------'
37 */ 37 */
38// If it accepts an argument (i.e, is a function), it doesn't need KC_. 38// If it accepts an argument (i.e, is a function), it doesn't need KC_.
@@ -46,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
46 KC_LCTL, KC_LALT, KC_LGUI,KC_LEFT,KC_RGHT, 46 KC_LCTL, KC_LALT, KC_LGUI,KC_LEFT,KC_RGHT,
47 KC_GRV, KC_QUOT, 47 KC_GRV, KC_QUOT,
48 KC_PGUP, 48 KC_PGUP,
49 KC_SPC,KC_TAB ,KC_LALT, 49 KC_SPC,KC_TAB ,KC_RALT,
50 // right hand 50 // right hand
51 TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, 51 TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
52 MO(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, 52 MO(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
@@ -55,7 +55,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
55 KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_SPC , 55 KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_SPC ,
56 KC_ESC, KC_BSPC, 56 KC_ESC, KC_BSPC,
57 KC_PGDN, 57 KC_PGDN,
58 KC_LCTL, KC_TAB, KC_ENT 58 KC_RCTL, KC_TAB, KC_ENT
59 ), 59 ),
60/* Keymap 1: Symbol Layer 60/* Keymap 1: Symbol Layer
61 * 61 *
@@ -102,13 +102,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
102/* Keymap 2: Media keys 102/* Keymap 2: Media keys
103 * 103 *
104 * ,--------------------------------------------------. ,--------------------------------------------------. 104 * ,--------------------------------------------------. ,--------------------------------------------------.
105 * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power | 105 * | | F14 | F15 |PrtScr|SclLck| Pause| | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power |
106 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| 106 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
107 * | | | | PgUp |⌘S⌘⇥⌘R| Term | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | | 107 * | | | | PgUp |⌘S⌘⇥⌘R| Term | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | |
108 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 108 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
109 * | | |Safari| PgDn | | |------| |------| ⌘[ | ← | ↓ | → | | ⏯ | 109 * | | |Safari| PgDn | | |------| |------| ⌘[ | ← | ↓ | → | | ⏯ |
110 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 110 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
111 * | | | | | |BBEdit| | | |L⇧+Spc| Spc | ⏮ | ⏭ | | | 111 * | | | | | |BBEdit| | | | | | ⏮ | ⏭ | | |
112 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 112 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
113 * | | | | | | |VolUp |VolDn | Mute | | | 113 * | | | | | | |VolUp |VolDn | Mute | | |
114 * `----------------------------------' `----------------------------------' 114 * `----------------------------------' `----------------------------------'
@@ -122,7 +122,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
122 */ 122 */
123// MEDIA AND MOUSE 123// MEDIA AND MOUSE
124[MDIA] = KEYMAP( 124[MDIA] = KEYMAP(
125 KC_TRNS, KC_F14 , KC_F15 , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, /* F14 dims screen, F15 brightens */ 125 KC_TRNS, KC_F14 , KC_F15 , KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, /* F14 dims screen, F15 brightens */
126 KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, M(SGWF), M(TMNL), KC_TRNS, 126 KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, M(SGWF), M(TMNL), KC_TRNS,
127 KC_TRNS, KC_TRNS, M(SAFA), KC_PGDN, KC_TRNS, KC_TRNS, 127 KC_TRNS, KC_TRNS, M(SAFA), KC_PGDN, KC_TRNS, KC_TRNS,
128 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(BBED), KC_TRNS, 128 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(BBED), KC_TRNS,
@@ -134,7 +134,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
134 LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR , 134 LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR ,
135 KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS, 135 KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS,
136 LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY, 136 LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY,
137 KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, 137 KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
138 KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, 138 KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
139 KC_TRNS, KC_TRNS, 139 KC_TRNS, KC_TRNS,
140 KC_END , 140 KC_END ,
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown b/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown
index 3b7f52941..5125a12ee 100644
--- a/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown
+++ b/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown
@@ -7,7 +7,7 @@ This layout is tuned for people who…
7 7
8## use OS X 8## use OS X
9 9
10This layout doesn’t make any concessions for Windows use. While it should work fine in Windows, I’m not about to devote precious keyboard space to Windows-specific shortcuts. 10While this layout should work fine in Windows, it’s not tuned for it. No sane person who primarily uses Windows would put this many Windows keys on a keyboard layout.
11 11
12 12
13## mouse left-handed while doing other things with the right hand 13## mouse left-handed while doing other things with the right hand
@@ -21,8 +21,6 @@ I tend to have my mouse in my left hand, but I like to use my other hand to make
21- Go Up and Close Just-Left Folder (⌥⌘↑) 21- Go Up and Close Just-Left Folder (⌥⌘↑)
22- Cycle through open windows in current application (⌘\` and ⌘⇧\`) 22- Cycle through open windows in current application (⌘\` and ⌘⇧\`)
23- Cycle through tabs in current window (⌥⇥ and ⌥⇧⇥) 23- Cycle through tabs in current window (⌥⇥ and ⌥⇧⇥)
24- Space (page down in browsers; Quick Look in the Finder)
25- Shift-Space (page up in web browsers)
26 24
27Because moving letter-by-letter is way slower than moving word-by-word, I added Option (⌥) to the bottommost button on the left side. This key can be held easily while holding ; (activate media layer) and pressing J and L to move left and right by word. 25Because moving letter-by-letter is way slower than moving word-by-word, I added Option (⌥) to the bottommost button on the left side. This key can be held easily while holding ; (activate media layer) and pressing J and L to move left and right by word.
28 26
@@ -34,11 +32,15 @@ I wanted to preserve the feel of a number of shortcuts that involve pressing lot
34- Empty Trash Without Asking for Confirmation (⇧⌥⌘⌫) 32- Empty Trash Without Asking for Confirmation (⇧⌥⌘⌫)
35- Shut Down Without Asking for Confirmation (⇧⌥⌘ power) 33- Shut Down Without Asking for Confirmation (⇧⌥⌘ power)
36 34
35⇧⌥⌘⌫, when you press the backspace on the right half of the keyboard, is much more satisfying than if you curl your left hand into a claw to press all the keys on the left. Try both; you’ll agree.
36
37 37
38## use Emacs-style shortcuts 38## use Emacs-style shortcuts
39 39
40I press C-a, C-e, and C-k all the time. It’s difficult to press these key combinations with the control key on the bottom left and I’m too quick on the draw for the control function on the / key to work reliably, so the bottommost thumb button on the right side is another control key. 40I press C-a, C-e, and C-k all the time. It’s difficult to press these key combinations with the control key on the bottom left and I’m too quick on the draw for the control function on the / key to work reliably, so the bottommost thumb button on the right side is another control key.
41 41
42Having trouble remembering which thumb key is alt and which is ctrl? It’s like on the lower right of a normal keyboard — leftmost is alt, rightmost is ctrl.
43
42 44
43## use spreadsheets 45## use spreadsheets
44 46
diff --git a/keyboards/hhkb/keymaps/jp/Makefile b/keyboards/hhkb/keymaps/jp/Makefile
index 92986292a..a7f700f01 100644
--- a/keyboards/hhkb/keymaps/jp/Makefile
+++ b/keyboards/hhkb/keymaps/jp/Makefile
@@ -1 +1 @@
HHKB_JP=yes OPT_DEFS += -DHHKB_JP
diff --git a/keyboards/hhkb/keymaps/rdg_jp/Makefile b/keyboards/hhkb/keymaps/rdg_jp/Makefile
index 92986292a..a7f700f01 100644
--- a/keyboards/hhkb/keymaps/rdg_jp/Makefile
+++ b/keyboards/hhkb/keymaps/rdg_jp/Makefile
@@ -1 +1 @@
HHKB_JP=yes OPT_DEFS += -DHHKB_JP
diff --git a/keyboards/hhkb/rules.mk b/keyboards/hhkb/rules.mk
index b43b5e23f..a46271f02 100644
--- a/keyboards/hhkb/rules.mk
+++ b/keyboards/hhkb/rules.mk
@@ -58,23 +58,19 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
58# Build Options 58# Build Options
59# comment out to disable the options. 59# comment out to disable the options.
60# 60#
61BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) 61BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
62MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) 62MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
63EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) 63EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
64CONSOLE_ENABLE ?= yes # Console for debug(+400) 64CONSOLE_ENABLE ?= yes # Console for debug(+400)
65COMMAND_ENABLE ?= yes # Commands for debug and configuration 65COMMAND_ENABLE ?= yes # Commands for debug and configuration
66CUSTOM_MATRIX ?= yes # Custom matrix file for the HHKB 66CUSTOM_MATRIX ?= yes # Custom matrix file for the HHKB
67# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE 67# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
68# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend 68# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
69# NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work 69# NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
70# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality 70# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
71# MIDI_ENABLE ?= YES # MIDI controls 71# MIDI_ENABLE ?= yes # MIDI controls
72# UNICODE_ENABLE ?= YES # Unicode 72# UNICODE_ENABLE ?= yes # Unicode
73# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID 73# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
74
75ifneq (, $(findstring yes, $(HHKB_JP)))
76 OPT_DEFS += -DHHKB_JP
77endif
78 74
79debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION 75debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
80debug-on: all 76debug-on: all
diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h
new file mode 100644
index 000000000..0bc20c7b9
--- /dev/null
+++ b/quantum/keymap_extras/keymap_canadian_multilingual.h
@@ -0,0 +1,255 @@
1#ifndef KEYMAP_CANADIAN_MULTILINGUAG_H
2#define KEYMAP_CANADIAN_MULTILINGUAG_H
3
4#include "keymap.h"
5
6// Alt gr
7#ifndef ALTGR
8#define ALTGR(kc) RALT(kc)
9#endif
10#ifndef ALGR
11#define ALGR(kc) ALTGR(kc)
12#endif
13
14#define CSA_ALTGR KC_RALT
15#define CSA_ALGR CSA_ALTGR
16
17#ifndef GR2A
18#define GR2A(kc) RCTL(kc)
19#endif
20
21// Normal characters
22// First row
23#define CSA_SLASH KC_GRV // /
24#define CSA_SLSH CSA_SLASH
25
26// Second row
27#define CSA_DEAD_CIRCUMFLEX KC_LBRACKET // dead ^
28#define CSA_DCRC CSA_DEAD_CIRCUMFLEX
29#define CSA_C_CEDILLA KC_RBRACKET // Ç
30#define CSA_CCED CSA_C_CEDILLA
31
32// Third row
33#define CSA_E_GRAVE KC_QUOT // è
34#define CSA_EGRV CSA_E_GRAVE
35#define CSA_A_GRAVE KC_BSLASH // à
36#define CSA_AGRV CSA_A_GRAVE
37
38// Fourth row
39#define CSA_U_GRAVE KC_NONUS_BSLASH // ù
40#define CSA_UGRV CSA_U_GRAVE
41#define CSA_E_ACUTE KC_SLSH // é
42#define CSA_ECUT CSA_E_ACUTE
43
44// Shifted characters
45// First row
46#define CSA_BACKSLASH LSFT(CSA_SLASH) /* \ */
47#define CSA_BSLS CSA_BACKSLASH
48#define CSA_QUESTION LSFT(KC_6) // ?
49#define CSA_QEST CSA_QUESTION
50
51// Second row
52#define CSA_DEAD_TREMA LSFT(CSA_DEAD_CIRCUMFLEX) // dead trema/umlaut/diaresis for ä ë ï ö ü
53#define CSA_DTRM CSA_DEAD_TREMA
54
55// Third row
56// all same as US-QWERTY, or capitalised character of the non-shifted key
57
58// Fourth row
59#define CSA_APOSTROPHE LSFT(KC_COMMA) // '
60#define CSA_APOS CSA_APOSTROPHE
61#define CSA_DOUBLE_QUOTE LSFT(KC_DOT) // "
62#define CSA_DQOT CSA_DOUBLE_QUOTE
63
64// Alt Gr-ed characters
65// First row
66#define CSA_PIPE ALTGR(CSA_SLASH) // |
67#define CSA_CURRENCY ALTGR(KC_4) // ¤
68#define CSA_CURR CSA_CURRENCY
69#define CSA_LEFT_CURLY_BRACE ALTGR(KC_7) // {
70#define CSA_LCBR CSA_LEFT_CURLY_BRACE
71#define CSA_RIGHT_CURLY_BRACE ALTGR(KC_8) // }
72#define CSA_RCBR CSA_RIGHT_CURLY_BRACE
73#define CSA_LBRACKET ALTGR(KC_9) // [
74#define CSA_LBRC CSA_LBRACKET
75#define CSA_RBRACKET ALTGR(KC_0) // ]
76#define CSA_RBRC CSA_RBRACKET
77#define CSA_NEGATION ALTGR(KC_EQUAL) // ¬
78#define CSA_NEGT CSA_NEGATION
79
80// Second row
81// euro symbol not available on Linux? (X.org)
82#define CSA_EURO ALTGR(KC_E) // €
83#define CSA_DEAD_GRAVE ALTGR(CSA_DEAD_CIRCUMFLEX)
84#define CSA_DGRV CSA_DEAD_GRAVE // dead `
85#define CSA_DEAD_TILDE ALTGR(CSA_C_CEDILLA) // ~
86#define CSA_DTLD CSA_DEAD_TILDE
87
88// Third row
89#define CSA_DEGREE ALTGR(KC_SCOLON) // °
90#define CSA_DEGR CSA_DEGREE
91
92// Fourth row
93#define CSA_LEFT_GUILLEMET ALTGR(KC_Z) // «
94#define CSA_LGIL CSA_LEFT_GUILLEMET
95#define CSA_RIGHT_GUILLEMET ALTGR(KC_X) // »
96#define CSA_RGIL CSA_RIGHT_GUILLEMET
97#define CSA_LESS ALTGR(KC_COMMA) // <
98#define CSA_GREATER ALTGR(KC_DOT) // >
99#define CSA_GRTR CSA_GREATER
100
101// Space bar
102#define CSA_NON_BREAKING_SPACE ALTGR(KC_SPACE)
103#define CSA_NBSP CSA_NON_BREAKING_SPACE
104
105// GR2A-ed characters
106// First row
107#define CSA_SUPERSCRIPT_ONE GR2A(KC_1) // ¹
108#define CSA_SUP1 CSA_SUPERSCRIPT_ONE
109#define CSA_SUPERSCRIPT_TWO GR2A(KC_2) // ²
110#define CSA_SUP2 CSA_SUPERSCRIPT_TWO
111#define CSA_SUPERSCRIPT_THREE GR2A(KC_3) // ³
112#define CSA_SUP3 CSA_SUPERSCRIPT_THREE
113#define CSA_ONE_QUARTER GR2A(KC_4) // ¼
114#define CSA_1QRT CSA_ONE_QUARTER
115#define CSA_ONE_HALF GR2A(KC_5) // ½
116#define CSA_1HLF CSA_ONE_HALF
117#define CSA_THREE_QUARTERS GR2A(KC_6) // ¾
118#define CSA_3QRT CSA_THREE_QUARTERS
119// nothing on 7-0 and -
120#define CSA_DEAD_CEDILLA GR2A(KC_EQUAL) // dead ¸
121#define CSA_DCED CSA_DEAD_CEDILLA
122
123// Second row
124#define CSA_OMEGA GR2A(KC_Q) // ω
125#define CSA_OMEG CSA_OMEGA
126#define CSA_L_STROKE GR2A(KC_W) // ł
127#define CSA_LSTK CSA_L_STROKE
128#define CSA_OE_LIGATURE GR2A(KC_E) // œ
129#define CSA_OE CSA_OE_LIGATURE
130#define CSA_PARAGRAPH GR2A(KC_R) // ¶
131#define CSA_PARG CSA_PARAGRAPH
132#define CSA_T_STROKE GR2A(KC_T) // ŧ
133#define CSA_LEFT_ARROW GR2A(KC_Y) // ←
134#define CSA_LARW CSA_LEFT_ARROW
135#define CSA_DOWN_ARROW GR2A(KC_U) // ↓
136#define CSA_DARW CSA_DOWN_ARROW
137#define CSA_RIGHT_ARROW GR2A(KC_I) // →
138#define CSA_RARW CSA_RIGHT_ARROW
139#define CSA_O_STROKE GR2A(KC_O) // ø
140#define CSA_OSTK CSA_O_STROKE
141#define CSA_THORN GR2A(KC_P) // þ
142#define CSA_THRN CSA_THORN
143// nothing on ^
144#define CSA_TILDE GR2A(CSA_C_CEDILLA) // dead ~
145#define CSA_TILD CSA_TILDE
146
147// Third row
148#define CSA_AE_LIGATURE GR2A(KC_A) // æ
149#define CSA_AE CSA_AE_LIGATURE
150#define CSA_SHARP_S GR2A(KC_S) // ß
151#define CSA_SRPS CSA_SHARP_S
152#define CSA_ETH GR2A(KC_D) // ð
153// nothing on F
154#define CSA_ENG GR2A(KC_G) // ŋ
155#define CSA_H_SRTOKE GR2A(KC_H) // ħ
156#define CSA_HSTK CSA_H_SRTOKE
157#define CSA_IJ_LIGATURE GR2A(KC_J) // ij
158#define CSA_IJ CSA_IJ_LIGATURE
159#define CSA_KRA GR2A(KC_K) // ĸ
160#define CSA_L_FLOWN_DOT GR2A(KC_L) // ŀ
161#define CSA_LFLD CSA_L_FLOWN_DOT
162#define CSA_DEAD_ACUTE GR2A(KC_SCLN) // dead acute accent
163#define CSA_DACT CSA_DEAD_ACUTE
164// nothing on È & À
165
166// Fourth row
167#define CSA_CENT GR2A(KC_C) // ¢
168#define CSA_LEFT_DOUBLE_QUOTE GR2A(KC_V) // “
169#define CSA_LDQT CSA_LEFT_DOUBLE_QUOTE
170#define CSA_RIGHT_DOUBLE_QUOTE GR2A(KC_B) // ”
171#define CSA_RDQT CSA_RIGHT_DOUBLE_QUOTE
172#define CSA_N_APOSTROPHE GR2A(KC_N) // ʼn (deprecated unicode codepoint)
173#define CSA_NAPO CSA_N_APOSTROPHE
174#define CSA_MU GR2A(KC_M) // μ
175#define CSA_HORIZONTAL_BAR GR2A(KC_COMMA) // ―
176#define CSA_HZBR CSA_HORIZONTAL_BAR
177#define CSA_DEAD_DOT_ABOVE GR2A(KC_DOT) // dead ˙
178#define CSA_DDTA CSA_DEAD_DOT_ABOVE
179
180// GR2A-shifted characters (different from capitalised GR2A-ed characters)
181// First row
182#define CSA_SOFT_HYPHEN GR2A(LSFT(CSA_SLASH)) // soft-hyphen, appears as a hyphen in wrapped word
183#define CSA_SHYP CSA_SOFT_HYPHEN
184#define CSA_INVERTED_EXCLAIM GR2A(KC_EXCLAIM) // ¡
185#define CSA_IXLM CSA_INVERTED_EXCLAIM
186// nothing on 2
187#define CSA_POUND GR2A(LSFT(KC_3)) // £
188#define CSA_GBP CSA_POUND_SIGN
189// already on ALTGR(KC_E)
190#define CSA_EURO_BIS GR2A(LSFT(KC_4)) // €
191#define CSA_EURB CSA_EURO_BIS
192#define CSA_THREE_EIGHTHS GR2A(LSFT(KC_5)) // ⅜
193#define CSA_3ON8 CSA_THREE_EIGHTHS
194#define CSA_FIVE_EIGHTHS GR2A(LSFT(KC_6)) // ⅝
195#define CSA_5ON8 CSA_FIVE_EIGHTHS
196#define CSA_SEVEN_EIGHTHS GR2A(LSFT(KC_7)) // ⅞
197#define CSA_7ON8 CSA_SEVEN_EIGHTHS
198#define CSA_TRADEMARK GR2A(LSFT(KC_8)) // ™
199#define CSA_TM CSA_TRADEMARK
200#define CSA_PLUS_MINUS GR2A(LSFT(KC_9)) // ±
201#define CSA_PSMS CSA_PLUS_MINUS
202// nothing on 0
203#define CSA_INVERTED_QUESTION GR2A(LSFT(KC_MINUS)) // ¿
204#define CSA_IQST CSA_INVERTED_QUESTION
205#define CSA_DEAD_OGONEK GR2A(LSFT(KC_EQUAL)) // dead ˛
206#define CSA_DOGO CSA_DEAD_OGONEK
207
208// Second row
209#define CSA_REGISTERED_TRADEMARK GR2A(LSFT(KC_R)) // ®
210#define CSA_RTM CSA_REGISTERED_TRADEMARK
211#define CSA_YEN GR2A(LSFT(KC_Y)) // ¥
212#define CSA_YUAN CSA_YEN
213#define CSA_UP_ARROW LSFT(CSA_DOWN_ARROW) // ↑
214#define CSA_DOTLESS_I GR2A(LSFT(KC_I)) // ı
215#define CSA_DLSI CSA_DOTLESS_I
216#define CSA_DEAD_RING GR2A(LSFT(CSA_DCRC)) // dead °
217#define CSA_DRNG CSA_DEAD_RING
218#define CSA_DEAD_MACRON GR2A(LSFT(CSA_C_CEDILLA)) // dead ¯
219#define CSA_DMCR CSA_DEAD_MACRON
220
221// Third row
222#define CSA_SECTION GR2A(LSFT(KC_S)) // §
223#define CSA_SECT CSA_SECTION
224#define CSA_ORDINAL_INDICATOR_A GR2A(LSFT(KC_F)) // ª
225#define CSA_ORDA CSA_ORDINAL_INDICATOR_A
226#define CSA_DEAD_DOUBLE_ACUTE LSFT(CSA_DEAD_ACUTE) // ˝
227#define CSA_DDCT CSA_DEAD_DOUBLE_ACUTE
228#define CSA_DEAD_CARON GR2A(LSFT(CSA_E_GRAVE)) // dead ˇ
229#define CSA_DCAR CSA_DEAD_CARON
230#define CSA_DEAD_BREVE GR2A(LSFT(CSA_A_GRAVE)) // dead ˘
231#define CSA_DBRV CSA_DEAD_BREVE
232
233// Fourth row
234#define CSA_BROKEN_PIPE GR2A(LSFT(CSA_U_GRAVE)) // ¦
235#define CSA_BPIP CSA_BROKEN_PIPE
236#define CSA_COPYRIGHT GR2A(LSFT(KC_C)) // ©
237#define CSA_CPRT CSA_COPYRIGHT
238#define CSA_LEFT_QUOTE GR2A(LSFT(KC_V)) // ‘
239#define CSA_LQOT CSA_LEFT_QUOTE
240#define CSA_RIGHT_QUOTE GR2A(LSFT(KC_B)) // ’
241#define CSA_RQOT CSA_RIGHT_QUOTE
242#define CSA_EIGHTH_NOTE GR2A(LSFT(KC_N)) // ♪
243#define CSA_8NOT CSA_EIGHTH_NOTE
244#define CSA_ORDINAL_INDICATOR_O GR2A(LSFT(KC_M)) // º
245#define CSA_ORDO CSA_ORDINAL_INDICATOR_O
246#define CSA_TIMES GR2A(LSFT(KC_COMMA)) // ×
247#define CSA_TIMS CSA_TIMES
248#define CSA_OBELUS GR2A(LSFT(KC_DOT)) // ÷
249#define CSA_OBEL CSA_OBELUS
250// more conventional name of the symbol
251#define CSA_DIVISION_SIGN CSA_OBELUS
252#define CSA_DVSN CSA_DIVISION_SIGN
253// TODO GR2A(LSFT(CSA_E_ACUTE))
254
255#endif
diff --git a/tmk_core/readme.md b/tmk_core/readme.md
index 324232851..5f135617c 100644
--- a/tmk_core/readme.md
+++ b/tmk_core/readme.md
@@ -23,7 +23,7 @@ These features can be used in your keyboard.
23* Mouse key - Mouse control with keyboard 23* Mouse key - Mouse control with keyboard
24* System Control Key - Power Down, Sleep, Wake Up and USB Remote Wake up 24* System Control Key - Power Down, Sleep, Wake Up and USB Remote Wake up
25* Media Control Key - Volume Down/Up, Mute, Next/Prev track, Play, Stop and etc 25* Media Control Key - Volume Down/Up, Mute, Next/Prev track, Play, Stop and etc
26* USB NKRO - 240 keys(+ 8 modifiers) simultaneously 26* USB NKRO - 248 keys(+ 8 modifiers) simultaneously
27* PS/2 mouse support - PS/2 mouse(TrackPoint) as composite device 27* PS/2 mouse support - PS/2 mouse(TrackPoint) as composite device
28* Keyboard protocols - PS/2, ADB, M0110, Sun and other old keyboard protocols 28* Keyboard protocols - PS/2, ADB, M0110, Sun and other old keyboard protocols
29* User Function - Customizable function of key with writing code 29* User Function - Customizable function of key with writing code
diff --git a/util/new_project.sh b/util/new_project.sh
index b3535f449..18d16e560 100755
--- a/util/new_project.sh
+++ b/util/new_project.sh
@@ -20,6 +20,7 @@ sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/template.c > keyboards/$KEYBO
20sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/config.h > keyboards/$KEYBOARD/config.h 20sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/config.h > keyboards/$KEYBOARD/config.h
21sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/readme.md > keyboards/$KEYBOARD/readme.md 21sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/readme.md > keyboards/$KEYBOARD/readme.md
22sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/Makefile > keyboards/$KEYBOARD/Makefile 22sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/Makefile > keyboards/$KEYBOARD/Makefile
23sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/rules.mk > keyboards/$KEYBOARD/rules.mk
23sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/config.h > keyboards/$KEYBOARD/keymaps/default/config.h 24sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/config.h > keyboards/$KEYBOARD/keymaps/default/config.h
24sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/keymap.c > keyboards/$KEYBOARD/keymaps/default/keymap.c 25sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/keymap.c > keyboards/$KEYBOARD/keymaps/default/keymap.c
25sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/Makefile > keyboards/$KEYBOARD/keymaps/default/Makefile 26sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/Makefile > keyboards/$KEYBOARD/keymaps/default/Makefile