Compare commits

...

3 Commits

Author SHA1 Message Date
Jack Humbert
a2bc294e2c adds flashing docs 2017-10-29 18:43:13 -04:00
Campbell Barton
91683d56fa ergodox qwerty_code_friendly: add macro keys (#1918)
Also add more configurable keys.
2017-10-29 15:34:02 -07:00
Pentti Laitinen
9ee207acac Added Iso(ish) layout for tada68. (#1924)
- Basic layout with one function layer.
- Added correct mapping for ISO layout into tada68.h.
- Readme for the keymap.
2017-10-29 15:22:07 -07:00
8 changed files with 256 additions and 43 deletions

View File

@@ -3,6 +3,7 @@
* [Install Build Tools](getting_started_build_tools.md)
* Alternative: [Vagrant Guide](getting_started_vagrant_guide.md)
* [Build/Compile instructions](getting_started_make_guide.md)
* [Flashing instructions](flashing.md)
* [Contributing to QMK](contributing.md)
* [How to Use Github](getting_started_github.md)

74
docs/flashing.md Normal file
View File

@@ -0,0 +1,74 @@
# Flashing Intrustructions
There are quite a few different types of bootloaders that keyboards use, and just about all of the use a different flashing method. Luckily, projects like the [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) aim to be compatible with all the different types without having to think about it much, but this article will describe the different types of bootloaders, and available methods for flashing them.
## DFU
Atmel's DFU bootloader comes on all atmega32u4 chips by default, and is used by many keyboards that have their own ICs on their PCBs (Older OLKB boards, Clueboards). Some keyboards may also use LUFA's DFU bootloader (or QMK's fork) (Newer OLKB boards) that adds in additional features specific to that hardware.
These bootloaders are usually 4096 bytes for the atmega32u4 chip.
Compatible flashers:
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
* [dfu-programmer](https://github.com/dfu-programmer/dfu-programmer) / `:dfu` in QMK (recommended commandline)
* [Atmel's Flip](http://www.atmel.com/tools/flip.aspx) (not recommended)
Flashing sequence:
1. Press the `RESET` keycode, or tap the RESET button (or short RST to GND).
2. Wait for the OS to detect the device
3. Erase the memory (may be done automatically)
4. Flash a .hex file
5. Reset the device into application mode (may be done automatically)
or:
make <keyboard>:<keymap>:dfu
## Caterina
Arduino boards and their clones use the [Caterina bootloader](https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/bootloaders/caterina) (any keyboard built with a Pro Micro, or clone), and uses the avr109 protocol to communicate through virtual serial. Bootloaders like [A-Star](https://www.pololu.com/docs/0J61/9) are based on Caterina.
This block of code allows for Caterina compatibility in QMK:
#define CATERINA_BOOTLOADER
These bootloaders are usually 4096 bytes for the atmega32u4 chip.
Compatible flashers:
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
* [avrdude](http://www.nongnu.org/avrdude/) with avr109 / `:avrdude` (recommended commandline)
* [AVRDUDESS](https://github.com/zkemble/AVRDUDESS)
Flashing sequence:
1. Press the `RESET` keycode, or short RST to GND quickly (you only have 7 seconds to flash once it enters)
2. Wait for the OS to detect the device
4. Flash a .hex file
5. Wait for the device to reset automatically
or
make <keyboard>:<keymap>:avrdude
## Halfkay
Halfkay is a super-slim protocol developed by PJRC that uses HID, and come on all Teensys (namely the 2.0).
This bootloader is 512 bytes.
Compatible flashers:
* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI)
* [Teensy Loader](https://www.pjrc.com/teensy/loader.html)
* [Teensy Loader Command Line](https://www.pjrc.com/teensy/loader_cli.html) (recommended commandline)
Flashing sequence:
1. Press the `RESET` keycode, or short RST to GND quickly (you only have 7 seconds to flash once it enters)
2. Wait for the OS to detect the device
4. Flash a .hex file
5. Reset the device into application mode (may be done automatically)

View File

@@ -0,0 +1,48 @@
#include "tada68.h"
#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| [| ]| \ |Del |
* |----------------------------------------------------------------|
* |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
* |----------------------------------------------------------------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /| <> | Up|PgDn|
* |----------------------------------------------------------------|
* |Ctrl|Win |Alt | Space |Alt| FN| APP|Lef|Dow|Rig |
* `----------------------------------------------------------------'
*/
[_BL] = KEYMAP_ISO(
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_BSPC,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_BSLS,KC_DEL, \
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_BSLS, KC_ENT,KC_PGUP, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_NONUS_BSLASH,KC_UP,KC_PGDN, \
KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(_FL),KC_APPLICATION, KC_LEFT,KC_DOWN,KC_RGHT),
/* Keymap _FL1: Function Layer 1
* ,----------------------------------------------------------------.
* | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| RESET|PSCR|
* |----------------------------------------------------------------|
* | | | | | | | | | | | |BL-|BL+|BL | INS|
* |----------------------------------------------------------------|
* | | | | | | | | | | PP|PLA| PN| |HOME|
* |----------------------------------------------------------------|
* | | | | | | | | | V-| MV| V+| | | END|
* |----------------------------------------------------------------|
* | | | | | | | | | | |
* `----------------------------------------------------------------'
*/
[_FL] = KEYMAP_ISO(
_______, 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_PSCR, \
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,KC_INS, \
_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,_______,KC_HOME, \
_______,_______,_______,_______,_______,_______,_______,_______,KC_VOLD,KC_MUTE,KC_VOLU,_______,_______,KC_END, \
_______,_______,_______, _______, _______,_______,_______,_______,_______, _______),
};

View File

@@ -0,0 +1,3 @@
# ISO(ish) - Basic ISO format layout for TADA68 #
Basic layout with some edits to work better with ISO (nordic) layout. Due to the wide left shift it isn't quite Nordic iso though.

View File

@@ -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

View File

@@ -37,7 +37,38 @@
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d, k4e} \
}
/* TADA68 ISO layout
* ,----------------------------------------------------------------.
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | 0e |
* |----------------------------------------------------------------|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | 1e |
* |----------------------------------------------------------------|
* | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c| 2d| 2e |
* |----------------------------------------------------------------|
* | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c| 3d| 3e |
* |----------------------------------------------------------------|
* | 40 | 41 | 42 | 45 | 49| 4a| 4b| 4c| 4d| 4e |
* `----------------------------------------------------------------'
*/
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define KEYMAP_ISO( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
k40, k41, k42, k45, k49, k4a, k4b, k4c, k4d, k4e \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e}, \
{k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d, k4e} \
}
void matrix_init_user(void);
void matrix_scan_user(void);
#endif
#endif

View File

@@ -11,11 +11,20 @@
// #define CFQ_USE_MOMENTARY_LAYER_KEYS
// #define CFQ_USE_EXPEREMENTAL_LAYER
// keep enabled for now
#define CFQ_USE_DYNAMIC_MACRO
#if !defined(CFQ_USER_KEY1)
#define CFQ_USER_KEY1 KC_F13
#define CFQ_USER_KEY1 KC_SPC
#endif
#if !defined(CFQ_USER_KEY2)
#define CFQ_USER_KEY2 KC_APP
#define CFQ_USER_KEY2 KC_ENT
#endif
#if !defined(CFQ_USER_KEY3)
#define CFQ_USER_KEY3 CFQ_KC_FN3
#endif
#if !defined(CFQ_USER_KEY4)
#define CFQ_USER_KEY4 KC_APP
#endif
#define BASE 0 // default layer
@@ -29,9 +38,16 @@ enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE, // can always be here
EPRM,
VRSN,
RGB_SLD
RGB_SLD,
#ifdef CFQ_USE_DYNAMIC_MACRO
DYNAMIC_MACRO_RANGE,
#endif
};
#ifdef CFQ_USE_DYNAMIC_MACRO
#include "dynamic_macro.h"
#endif
// macros
#ifdef CFQ_USE_EXPEREMENTAL_LAYER
#define M_SPACES_1 2
@@ -77,13 +93,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | LCtl |Super | Alt | USR2 |Space | | Left | Down | Up |Right | Del |
* | LCtl |Super | Alt | USR4 |Space | | Left | Down | Up |Right | Del |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Ins | ~L3 | | Home | End |
* | Ins | USR3 | | Home | End |
* ,------|------|------| |------+------+------.
* | | | ~L2 | | PgUp | | |
* |Space | USR1 |------| |------|Enter |Space |
* | USR1 | USR2 |------| |------|Enter |Space |
* | | | ~L1 | | PgDn | | |
* `--------------------' `--------------------'
*/
@@ -95,10 +111,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LPRN,
KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC,
KC_LCTL, KC_LGUI, KC_LALT, CFQ_USER_KEY2, KC_SPC,
KC_INS, CFQ_KC_FN3,
KC_LCTL, KC_LGUI, KC_LALT, CFQ_USER_KEY4, KC_SPC,
KC_INS, CFQ_USER_KEY3,
CFQ_KC_FN2,
KC_SPC, CFQ_USER_KEY1, CFQ_KC_FN1,
CFQ_USER_KEY1, CFQ_USER_KEY2, CFQ_KC_FN1,
// right hand
KC_RCBR, KC_CIRC, KC_AMPR, KC_ASTR,KC_MINS, KC_EQL, KC_BSPC,
KC_RPRN, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
@@ -127,10 +143,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | 0 | | . | + | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,---------------.
* | | | | | |
* |Start1|Start2| | | |
* ,------|------|------| |------+--------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | Stop | | | | |
* |Play1 |Play2 |------| |------| | |
* | | | | | | | |
* `--------------------' `----------------------'
*/
@@ -142,9 +158,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(M_ARROW_RMINUS),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(M_BRACKET_IN_ANG), M(M_BRACKET_IN_BRC),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
#ifdef CFQ_USE_DYNAMIC_MACRO
DYN_REC_START1, DYN_REC_START2,
DYN_REC_STOP,
DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_TRNS,
#else
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
#endif
// right hand
M(M_BRACKET_OUT_CBR), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
M(M_BRACKET_OUT_PRN), M(M_ARROW_LEQL), KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_SLASH, KC_F11,
@@ -201,13 +223,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 3: My own testing keys!
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | Spc1 | Spc2 | Spc3 | Spc4 | Spc5 | | | | Spc6 | Spc7 | Spc8 | | | |
* | | | | { | } | | } | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* | | | | ( | ) | | ) | | | Spc7 | Spc8 | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | |------| |------| | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | |
* | | | | [ | ] | |------| |------| Spc4 | Spc5 | Spc6 | | | |
* |--------+------+------+------+------+------| ] | | |------+------+------+------+------+--------|
* | | | | < | > | | | | | Spc1 | Spc2 | Spc3 | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
@@ -220,23 +242,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------' `--------------------'
*/
// EXPEREMENT
// EXPERIMENT
[EXPR] = LAYOUT_ergodox(
// left hand
KC_TRNS, M(M_SPACES_1), M(M_SPACES_2), M(M_SPACES_3), M(M_SPACES_4), M(M_SPACES_5), 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_LCBR, KC_RCBR, KC_TRNS, KC_RCBR,
KC_TRNS, KC_TRNS, KC_TRNS, KC_LPRN, KC_RPRN, KC_TRNS, KC_RPRN,
KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, S(KC_COMM), S(KC_DOT), KC_TRNS, KC_RBRC,
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, M(M_SPACES_6), M(M_SPACES_7), M(M_SPACES_8), 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, M(M_SPACES_7), M(M_SPACES_8), KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(M_SPACES_4), M(M_SPACES_5), M(M_SPACES_6), KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, M(M_SPACES_1), M(M_SPACES_2), M(M_SPACES_3), 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
@@ -314,6 +336,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef CFQ_USE_DYNAMIC_MACRO
if (!process_record_dynamic_macro(keycode, record)) {
return false;
}
#endif
switch (keycode) {
// dynamically generate these.
case EPRM:

View File

@@ -27,7 +27,7 @@
Some optional behavior is configurable without editing the code
using `CFQ_` prefixed defines which can be set by passing `EXTRAFLAGS` to make.
- `CFQ_USER_KEY1`, `CFQ_USER_KEY2` are used for custom-keys
- `CFQ_USER_KEY1` (1..4) are used for custom-keys
- `CFQ_USE_MOMENTARY_LAYER_KEYS` is used to prevent layer keys from toggling when tapped.
- `CFQ_USE_SWAP_RIGHT_SPACE_ENTER` swap Enter and Space on the right hand thumb cluster.
While asymmetric, it makes Enter more easily accessible.
@@ -40,8 +40,10 @@ using `CFQ_` prefixed defines which can be set by passing `EXTRAFLAGS` to make.
When undefined:
- `USR1` defaults to `F13`, otherwise use `CFQ_USER_KEY1`.
- `USR2` defaults to `APP`, otherwise use `CFQ_USER_KEY2`.
- `USR1` defaults to `KC_SPC`, otherwise use `CFQ_USER_KEY1`.
- `USR2` defaults to `KC_ENT`, otherwise use `CFQ_USER_KEY2`.
- `USR3` defaults to `KC_FN3`, otherwise use `CFQ_USER_KEY3`.
- `USR4` defaults to `APP`, otherwise use `CFQ_USER_KEY4`.
```
,--------------------------------------------------. ,--------------------------------------------------.
@@ -53,21 +55,23 @@ When undefined:
|--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------|
| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
| LCtl |Super | Alt | USR2 |Space | | Left | Down | Up |Right | Del |
| LCtl |Super | Alt | USR4 |Space | | Left | Down | Up |Right | Del |
`----------------------------------' `----------------------------------'
,-------------. ,-------------.
| Ins | ~L3 | | Home | End |
| Ins | USR3 | | Home | End |
,------|------|------| |------+------+------.
| | | ~L2 | | PgUp | | |
|Space | USR1 |------| |------|Enter |Space |
| USR1 | USR2 |------| |------|Enter |Space |
| | | ~L1 | | PgDn | | |
`--------------------' `--------------------'
```
## Keymap 1: Symbol layer
Note the double bracket keys on this layer press left to position the cursor between them.
Notes:
- The double bracket keys on this layer press left to position the cursor between them.
- The left thumb cluster is used for macro record/replay.
```
,--------------------------------------------------. ,--------------------------------------------------.
@@ -82,10 +86,10 @@ Note the double bracket keys on this layer press left to position the cursor bet
| | | | | | | 0 | | . | + | |
`----------------------------------' `----------------------------------'
,-------------. ,---------------.
| | | | | |
|Start1|Start2| | | |
,------|------|------| |------+--------+------.
| | | | | | | |
| | |------| |------| | |
| | | Stop | | | | |
|Play1 |Play2 |------| |------| | |
| | | | | | | |
`--------------------' `----------------------'
```
@@ -115,6 +119,10 @@ Note the double bracket keys on this layer press left to position the cursor bet
## Changelog
- 2017/10/28
Make more keys user defined on the left thumb cluster.
Add macro record/replay keys.
- 2017/10/4
Move Insert key to the left thumb cluster (away from the modifier keys).
Replace with `USR2` which defaults to `APP`.