ergodox_ez: Upgrade my keymap to v1.4
* When toggling the key logging on or off, the LEDs will do a little dance. * The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it. * The `TAB`/`ARRW` key was turned into a tap-dance key, allowing one to toggle the **ARROW** layer on by double-tapping, and as such, avoid the need to hold the key. * The `-`/`_` key was turned into a tap-dance key too. * There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`. Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>master
parent
7559edc6e6
commit
f82437f08e
|
@ -4,13 +4,19 @@ SLEEP_LED_ENABLE=no
|
||||||
UNICODE_ENABLE=no
|
UNICODE_ENABLE=no
|
||||||
FORCE_NKRO ?= yes
|
FORCE_NKRO ?= yes
|
||||||
DEBUG_ENABLE = no
|
DEBUG_ENABLE = no
|
||||||
CONSOLE_ENABLE = yes
|
CONSOLE_ENABLE = no
|
||||||
TAP_DANCE_ENABLE = yes
|
TAP_DANCE_ENABLE = yes
|
||||||
|
KEYLOGGER_ENABLE ?= yes
|
||||||
|
|
||||||
ifeq (${FORCE_NKRO},yes)
|
ifeq (${FORCE_NKRO},yes)
|
||||||
OPT_DEFS += -DFORCE_NKRO
|
OPT_DEFS += -DFORCE_NKRO
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq (${KEYLOGGER_ENABLE},yes)
|
||||||
|
OPT_DEFS += -DKEYLOGGER_ENABLE
|
||||||
|
CONSOLE_ENABLE = yes
|
||||||
|
endif
|
||||||
|
|
||||||
KEYMAP_VERSION = $(shell \
|
KEYMAP_VERSION = $(shell \
|
||||||
if [ -d "${KEYMAP_PATH}/.git" ]; then \
|
if [ -d "${KEYMAP_PATH}/.git" ]; then \
|
||||||
cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \
|
cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \
|
||||||
|
|
|
@ -95,7 +95,9 @@ enum {
|
||||||
/* Custom keycodes */
|
/* Custom keycodes */
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
CT_CLN = 0
|
CT_CLN = 0,
|
||||||
|
CT_MNS,
|
||||||
|
CT_TA,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* States & timers */
|
/* States & timers */
|
||||||
|
@ -115,7 +117,11 @@ uint16_t oh_left_blink_timer = 0;
|
||||||
uint8_t oh_right_blink = 0;
|
uint8_t oh_right_blink = 0;
|
||||||
uint16_t oh_right_blink_timer = 0;
|
uint16_t oh_right_blink_timer = 0;
|
||||||
|
|
||||||
|
#if KEYLOGGER_ENABLE
|
||||||
bool log_enable = false;
|
bool log_enable = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
bool time_travel = false;
|
||||||
|
|
||||||
/* The Keymap */
|
/* The Keymap */
|
||||||
|
|
||||||
|
@ -146,7 +152,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// left hand
|
// left hand
|
||||||
KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
|
KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
|
||||||
,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
|
,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
|
||||||
,LT(ARRW,KC_TAB) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
|
,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
|
||||||
,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
|
,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
|
||||||
,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
|
,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
|
||||||
|
|
||||||
|
@ -157,9 +163,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// right hand
|
// right hand
|
||||||
,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
|
,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
|
||||||
,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
|
,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
|
||||||
,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,LT(ARRW, KC_EQL)
|
,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL
|
||||||
,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP
|
,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP
|
||||||
,KC_MINS,KC_NO ,KC_NO ,KC_NO ,KC_NO
|
,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO
|
||||||
|
|
||||||
,OSL(NMDIA),M(OH_LEFT)
|
,OSL(NMDIA),M(OH_LEFT)
|
||||||
,KC_LEAD
|
,KC_LEAD
|
||||||
|
@ -191,7 +197,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// left hand
|
// left hand
|
||||||
KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
|
KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
|
||||||
,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC
|
,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC
|
||||||
,LT(ARRW, KC_TAB) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U
|
,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U
|
||||||
,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN
|
,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN
|
||||||
,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
|
,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
|
||||||
|
|
||||||
|
@ -202,9 +208,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
// right hand
|
// right hand
|
||||||
,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
|
,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
|
||||||
,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS
|
,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS
|
||||||
,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,LT(ARRW, KC_EQL)
|
,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL
|
||||||
,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP
|
,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP
|
||||||
,KC_MINS,KC_NO ,KC_NO ,KC_NO ,KC_NO
|
,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO
|
||||||
|
|
||||||
,OSL(NMDIA),M(OH_LEFT)
|
,OSL(NMDIA),M(OH_LEFT)
|
||||||
,KC_LEAD
|
,KC_LEAD
|
||||||
|
@ -892,24 +898,92 @@ void ang_tap (uint16_t codes[]) {
|
||||||
register_code (code); \
|
register_code (code); \
|
||||||
unregister_code (code)
|
unregister_code (code)
|
||||||
|
|
||||||
void ang_tap_dance (qk_tap_dance_state_t *state) {
|
void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
switch (state->keycode) {
|
|
||||||
case TD(CT_CLN):
|
|
||||||
if (state->count == 1) {
|
if (state->count == 1) {
|
||||||
register_code (KC_RSFT);
|
register_code (KC_RSFT);
|
||||||
register_code (KC_SCLN);
|
register_code (KC_SCLN);
|
||||||
unregister_code (KC_SCLN);
|
|
||||||
unregister_code (KC_RSFT);
|
|
||||||
} else if (state->count == 2) {
|
} else if (state->count == 2) {
|
||||||
register_code (KC_SCLN);
|
register_code (KC_SCLN);
|
||||||
unregister_code (KC_SCLN);
|
|
||||||
reset_tap_dance (state);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
if (state->count == 1) {
|
||||||
|
unregister_code (KC_SCLN);
|
||||||
|
unregister_code (KC_RSFT);
|
||||||
|
} else if (state->count == 2) {
|
||||||
|
unregister_code (KC_SCLN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
if (state->count == 1) {
|
||||||
|
register_code (KC_MINS);
|
||||||
|
} else if (state->count == 2) {
|
||||||
|
register_code (KC_RSFT);
|
||||||
|
register_code (KC_MINS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
if (state->count == 1) {
|
||||||
|
unregister_code (KC_MINS);
|
||||||
|
} else if (state->count == 2) {
|
||||||
|
unregister_code (KC_RSFT);
|
||||||
|
unregister_code (KC_MINS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
bool layer_toggle;
|
||||||
|
bool sticky;
|
||||||
|
bool finished_once;
|
||||||
|
} td_ta_state_t;
|
||||||
|
|
||||||
|
void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
|
||||||
|
|
||||||
|
if (td_ta->finished_once) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (td_ta->sticky) {
|
||||||
|
td_ta->sticky = false;
|
||||||
|
td_ta->layer_toggle = false;
|
||||||
|
layer_off (ARRW);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
td_ta->finished_once = true;
|
||||||
|
if (state->count == 1 && !state->pressed) {
|
||||||
|
register_code (KC_TAB);
|
||||||
|
td_ta->sticky = false;
|
||||||
|
td_ta->layer_toggle = false;
|
||||||
|
} else {
|
||||||
|
td_ta->layer_toggle = true;
|
||||||
|
layer_on (ARRW);
|
||||||
|
td_ta->sticky = (state->count == 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) {
|
||||||
|
td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
|
||||||
|
|
||||||
|
if (!td_ta->layer_toggle)
|
||||||
|
unregister_code (KC_TAB);
|
||||||
|
if (!td_ta->sticky)
|
||||||
|
layer_off (ARRW);
|
||||||
|
|
||||||
|
td_ta->finished_once = false;
|
||||||
|
}
|
||||||
|
|
||||||
const qk_tap_dance_action_t tap_dance_actions[] = {
|
const qk_tap_dance_action_t tap_dance_actions[] = {
|
||||||
[CT_CLN] = ACTION_TAP_DANCE_FN (ang_tap_dance)
|
[CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset)
|
||||||
|
,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset)
|
||||||
|
,[CT_TA] = {
|
||||||
|
.fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset },
|
||||||
|
.user_data = (void *)&((td_ta_state_t) { false, false, false })
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Runs constantly in the background, in a loop.
|
// Runs constantly in the background, in a loop.
|
||||||
|
@ -1002,9 +1076,18 @@ void matrix_scan_user(void) {
|
||||||
leading = false;
|
leading = false;
|
||||||
leader_end ();
|
leader_end ();
|
||||||
|
|
||||||
|
#if KEYLOGGER_ENABLE
|
||||||
SEQ_ONE_KEY (KC_D) {
|
SEQ_ONE_KEY (KC_D) {
|
||||||
|
ergodox_led_all_on();
|
||||||
|
_delay_ms(100);
|
||||||
|
ergodox_led_all_off();
|
||||||
log_enable = !log_enable;
|
log_enable = !log_enable;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
SEQ_ONE_KEY (KC_T) {
|
||||||
|
time_travel = !time_travel;
|
||||||
|
}
|
||||||
|
|
||||||
SEQ_ONE_KEY (KC_U) {
|
SEQ_ONE_KEY (KC_U) {
|
||||||
ang_do_unicode ();
|
ang_do_unicode ();
|
||||||
|
@ -1093,13 +1176,41 @@ void matrix_scan_user(void) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint16_t last4[4];
|
||||||
|
|
||||||
bool process_record_user (uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user (uint16_t keycode, keyrecord_t *record) {
|
||||||
|
#if KEYLOGGER_ENABLE
|
||||||
uint8_t layer = biton32(layer_state);
|
uint8_t layer = biton32(layer_state);
|
||||||
|
|
||||||
if (log_enable && layer == BASE) {
|
if (log_enable && layer == BASE) {
|
||||||
xprintf ("KL: col=%d, row=%d\n", record->event.key.col,
|
xprintf ("KL: col=%d, row=%d\n", record->event.key.col,
|
||||||
record->event.key.row);
|
record->event.key.row);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (time_travel && !record->event.pressed) {
|
||||||
|
uint8_t p;
|
||||||
|
|
||||||
|
// shift cache one to the left
|
||||||
|
for (p = 0; p < 3; p++) {
|
||||||
|
last4[p] = last4[p + 1];
|
||||||
|
}
|
||||||
|
last4[3] = keycode;
|
||||||
|
|
||||||
|
if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) {
|
||||||
|
uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0};
|
||||||
|
ang_tap (codes);
|
||||||
|
register_code (KC_RSFT);
|
||||||
|
register_code (KC_EQL);
|
||||||
|
unregister_code (KC_EQL);
|
||||||
|
unregister_code (KC_RSFT);
|
||||||
|
|
||||||
|
uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0};
|
||||||
|
ang_tap (codes2);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ At its core, this is a Dvorak layout, with some minor changes. The more interest
|
||||||
- `LEAD a` makes the [ADORE layer](#adore-layer) the default.
|
- `LEAD a` makes the [ADORE layer](#adore-layer) the default.
|
||||||
- `LEAD v` prints the firmware version, the keyboard and the keymap.
|
- `LEAD v` prints the firmware version, the keyboard and the keymap.
|
||||||
- `LEAD d` toggles logging keypress positions to the HID console.
|
- `LEAD d` toggles logging keypress positions to the HID console.
|
||||||
|
- `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader.
|
||||||
|
|
||||||
## ADORE layer
|
## ADORE layer
|
||||||
|
|
||||||
|
@ -148,6 +149,14 @@ The keymap default to forcing NKRO, which seems to upset Windows, and except the
|
||||||
|
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v1.4 - 2016-07-29
|
||||||
|
|
||||||
|
* When toggling the key logging on or off, the LEDs will do a little dance.
|
||||||
|
* The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it.
|
||||||
|
* The `TAB`/`ARRW` key was turned into a tap-dance key, allowing one to toggle the **ARROW** layer on by double-tapping, and as such, avoid the need to hold the key.
|
||||||
|
* The `-`/`_` key was turned into a tap-dance key too.
|
||||||
|
* There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`.
|
||||||
|
|
||||||
## v1.3 - 2016-07-06
|
## v1.3 - 2016-07-06
|
||||||
|
|
||||||
* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs.
|
* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a [heatmap](#heatmap) out of the logs.
|
||||||
|
|
|
@ -0,0 +1,533 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"backcolor": "#ffffff",
|
||||||
|
"name": "ErgoDox - algernon's layout: Heatmap",
|
||||||
|
"author": "Gergely Nagy <kbd@gergo.csillger.hu>",
|
||||||
|
"notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.",
|
||||||
|
"switchMount": "cherry",
|
||||||
|
"switchBrand": "gateron",
|
||||||
|
"switchType": "KS-3-Tea",
|
||||||
|
"pcb": true,
|
||||||
|
"css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }"
|
||||||
|
},
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"x": 3.5,
|
||||||
|
"c": "#a7d0db",
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"#\n3\nF3",
|
||||||
|
{
|
||||||
|
"x": 10.5,
|
||||||
|
"c": "#a7d0db",
|
||||||
|
"t": "#000000",
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"*\n8\nF8"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 2.5,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"@\n2\nF2",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000"
|
||||||
|
},
|
||||||
|
"$\n4\nF4",
|
||||||
|
{
|
||||||
|
"x": 8.5
|
||||||
|
},
|
||||||
|
"&\n7\nF7",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"(\n9\nF9"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 5.5,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000"
|
||||||
|
},
|
||||||
|
"%\n5\nF5",
|
||||||
|
{
|
||||||
|
"c": "#f9cd31",
|
||||||
|
"a": 7,
|
||||||
|
"f": 2
|
||||||
|
},
|
||||||
|
"STENO",
|
||||||
|
{
|
||||||
|
"x": 4.5,
|
||||||
|
"f": 6
|
||||||
|
},
|
||||||
|
"<i class='mss mss-Unicode-Option-3'></i>",
|
||||||
|
{
|
||||||
|
"c": "#7adabd",
|
||||||
|
"a": 4,
|
||||||
|
"f": 3,
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"^\n6\nF6"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"c": "#ffb2d2",
|
||||||
|
"f": 3,
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"\n\n~\n`",
|
||||||
|
{
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"!\n1\nF1",
|
||||||
|
{
|
||||||
|
"x": 14.5
|
||||||
|
},
|
||||||
|
")\n0\nF10",
|
||||||
|
{
|
||||||
|
"a": 7,
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"F11"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.375,
|
||||||
|
"x": 3.5,
|
||||||
|
"c": "#a7d0db",
|
||||||
|
"t": "#000000",
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"L",
|
||||||
|
{
|
||||||
|
"x": 10.5
|
||||||
|
},
|
||||||
|
"C"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 2.5,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b",
|
||||||
|
"a": 4
|
||||||
|
},
|
||||||
|
">\n.",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000",
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"W",
|
||||||
|
{
|
||||||
|
"x": 8.5
|
||||||
|
},
|
||||||
|
"H",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"P"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 5.5,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000"
|
||||||
|
},
|
||||||
|
"M",
|
||||||
|
{
|
||||||
|
"c": "#93c9b7",
|
||||||
|
"a": 4,
|
||||||
|
"h": 1.5
|
||||||
|
},
|
||||||
|
"{\n[",
|
||||||
|
{
|
||||||
|
"x": 4.5,
|
||||||
|
"h": 1.5
|
||||||
|
},
|
||||||
|
"}\n]",
|
||||||
|
{
|
||||||
|
"c": "#7adabd",
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"F"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"c": "#ffb07b",
|
||||||
|
"t": "#0d0d0b",
|
||||||
|
"f": 6,
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"<i class='fa fa-fast-backward'></i>\n\n<i class='fa fa-fast-forward'></i>",
|
||||||
|
{
|
||||||
|
"c": "#ffb2d2",
|
||||||
|
"a": 4,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"<\n,",
|
||||||
|
{
|
||||||
|
"x": 14.5,
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"Y",
|
||||||
|
{
|
||||||
|
"a": 4,
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"|\n\\"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.375,
|
||||||
|
"x": 3.5,
|
||||||
|
"c": "#a7d0db",
|
||||||
|
"t": "#000000",
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"E",
|
||||||
|
{
|
||||||
|
"x": 10.5
|
||||||
|
},
|
||||||
|
"T"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 2.5,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"O",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000",
|
||||||
|
"n": true
|
||||||
|
},
|
||||||
|
"I",
|
||||||
|
{
|
||||||
|
"x": 8.5,
|
||||||
|
"n": true
|
||||||
|
},
|
||||||
|
"R",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"N"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 5.5,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000"
|
||||||
|
},
|
||||||
|
"U",
|
||||||
|
{
|
||||||
|
"x": 6.5
|
||||||
|
},
|
||||||
|
"D"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"c": "#ffb2d2",
|
||||||
|
"t": "#0d0d0b",
|
||||||
|
"fa": [
|
||||||
|
6
|
||||||
|
],
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"<i class='fa fa-arrows'></i>\n\nTab",
|
||||||
|
{
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"A",
|
||||||
|
{
|
||||||
|
"x": 14.5,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"S",
|
||||||
|
{
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
6
|
||||||
|
],
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"+\n="
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.625,
|
||||||
|
"x": 6.5,
|
||||||
|
"c": "#93c9b7",
|
||||||
|
"t": "#000000",
|
||||||
|
"a": 7,
|
||||||
|
"h": 1.5
|
||||||
|
},
|
||||||
|
"(",
|
||||||
|
{
|
||||||
|
"x": 4.5,
|
||||||
|
"h": 1.5
|
||||||
|
},
|
||||||
|
")"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.75,
|
||||||
|
"x": 3.5,
|
||||||
|
"c": "#a7d0db",
|
||||||
|
"a": 4,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"\"\n'",
|
||||||
|
{
|
||||||
|
"x": 10.5
|
||||||
|
},
|
||||||
|
"V"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 2.5,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"Z",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000"
|
||||||
|
},
|
||||||
|
"K",
|
||||||
|
{
|
||||||
|
"x": 8.5
|
||||||
|
},
|
||||||
|
"G",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#bfbad1",
|
||||||
|
"t": "#0d0d0b"
|
||||||
|
},
|
||||||
|
"J"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 5.5,
|
||||||
|
"c": "#7adabd",
|
||||||
|
"t": "#000000"
|
||||||
|
},
|
||||||
|
"X",
|
||||||
|
{
|
||||||
|
"x": 6.5
|
||||||
|
},
|
||||||
|
"B"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"c": "#ffb07b",
|
||||||
|
"f": 9,
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"\n\n<i class='kb kb-Multimedia-Play-Pause'></i>",
|
||||||
|
{
|
||||||
|
"c": "#ffb2d2",
|
||||||
|
"t": "#0d0d0b",
|
||||||
|
"a": 4,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"?\n/",
|
||||||
|
{
|
||||||
|
"x": 14.5,
|
||||||
|
"a": 6
|
||||||
|
},
|
||||||
|
"Q",
|
||||||
|
{
|
||||||
|
"c": "#ffb07b",
|
||||||
|
"t": "#000000",
|
||||||
|
"f": 9,
|
||||||
|
"w": 1.5
|
||||||
|
},
|
||||||
|
"<i class='kb kb-Multimedia-Stop'></i>"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.375,
|
||||||
|
"x": 3.5,
|
||||||
|
"c": "#d9dae0",
|
||||||
|
"g": true,
|
||||||
|
"a": 7,
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"",
|
||||||
|
{
|
||||||
|
"x": 10.5
|
||||||
|
},
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.875,
|
||||||
|
"x": 2.5
|
||||||
|
},
|
||||||
|
"",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#d4872a",
|
||||||
|
"g": false,
|
||||||
|
"a": 5
|
||||||
|
},
|
||||||
|
";\n:",
|
||||||
|
{
|
||||||
|
"x": 8.5
|
||||||
|
},
|
||||||
|
"_\n-",
|
||||||
|
{
|
||||||
|
"x": 1,
|
||||||
|
"c": "#d9dae0",
|
||||||
|
"g": true,
|
||||||
|
"a": 7
|
||||||
|
},
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"y": -0.75,
|
||||||
|
"x": 0.5
|
||||||
|
},
|
||||||
|
"",
|
||||||
|
{},
|
||||||
|
"",
|
||||||
|
{
|
||||||
|
"x": 14.5
|
||||||
|
},
|
||||||
|
"",
|
||||||
|
{},
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"r": 30,
|
||||||
|
"rx": 6.5,
|
||||||
|
"ry": 4.25,
|
||||||
|
"y": -1,
|
||||||
|
"x": 1,
|
||||||
|
"c": "#f9cd31",
|
||||||
|
"g": false
|
||||||
|
},
|
||||||
|
"Alt",
|
||||||
|
{
|
||||||
|
"a": 4,
|
||||||
|
"fa": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
9
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"\n\n\n<i class='kb kb-logo-linux-debian fa-large'></i>"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"c": "#d4872a",
|
||||||
|
"a": 7,
|
||||||
|
"f": 9,
|
||||||
|
"h": 2
|
||||||
|
},
|
||||||
|
"<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>",
|
||||||
|
{
|
||||||
|
"h": 2
|
||||||
|
},
|
||||||
|
"<i class='fa fa-angle-double-up'></i>",
|
||||||
|
{
|
||||||
|
"c": "#f9cd31",
|
||||||
|
"f": 3
|
||||||
|
},
|
||||||
|
"Ctrl"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"x": 2,
|
||||||
|
"c": "#e26757"
|
||||||
|
},
|
||||||
|
"ESC"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"r": -30,
|
||||||
|
"rx": 13,
|
||||||
|
"y": -1,
|
||||||
|
"x": -3,
|
||||||
|
"c": "#f9cd31",
|
||||||
|
"f": 2
|
||||||
|
},
|
||||||
|
"MEDIA",
|
||||||
|
{},
|
||||||
|
"1HAND"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"x": -3
|
||||||
|
},
|
||||||
|
"LEAD",
|
||||||
|
{
|
||||||
|
"c": "#d4872a",
|
||||||
|
"f": 9,
|
||||||
|
"h": 2
|
||||||
|
},
|
||||||
|
"<i class='kb kb-Return-2'></i>",
|
||||||
|
{
|
||||||
|
"f": 3,
|
||||||
|
"h": 2
|
||||||
|
},
|
||||||
|
"SPC"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"x": -3,
|
||||||
|
"c": "#f9cd31",
|
||||||
|
"f": 2
|
||||||
|
},
|
||||||
|
"HUN"
|
||||||
|
]
|
||||||
|
]
|
Loading…
Reference in New Issue