From 84065e1d7458ad6b0a04a82fed4dfc69a4ded2b2 Mon Sep 17 00:00:00 2001 From: Tim Schumacher Date: Thu, 21 Nov 2019 06:07:33 -0500 Subject: [PATCH] [Keymap] Add DZ60, Levinson keymaps, twschum user files (#7358) * Adds layout for DZ60rev2 plate B, options 4 and 10 * Use KC_TRANS for layer keys * Format layer0 with visual key size layout * Add RGB controls; add start description; add KC_LOCK * Update comments on rules.mk for DZ60 * Gets keymap compiling * Fix wiring for shift on row 3 * Hold a with other key to send Ctrl-A before other key * Adds compile-time defined mac-compatability media keycodes * Adds logic in place for capturing taps (w/ timeout) * Add send_keys(...) which can send up to 64 nested keycodes * Implement send_keys callable with n repeats * Tweaks some of the keymap * Add reset keycode; add disable to custom shortcuts * Adds a special "off" layer where bonus mod goes to layer 0, every other key KC_NO * Adjust timeout; mousekey settings * Changes layout of Home,End,PgUp/Dn on the dedicated arrow keys L1/L2 * PoC on rgb lighted layer indication * Refactors color table defines * Adds logic for controlling layer lights * Only change state on one side of the event lol * Switch back to Tapping Toggle for layer 4 * Add custom config file for keyboard; TT and mousekey settings * Code cleanup; starting to refactor special ctrl tapping keys functions * Move defines and reak out functions * Remove debugging light * Adjust keymaps; add enter * Adds a couple custom macros * Add simplified version of keymap to help debug issues * Adds basi numpad configuration for levinson keyboard half * Use ANSI ctrl key as layer 1 for better one hand (`) * Adapt to new 8bit hue from #5547; layer enum use everywhere * Move custom code out to users/ space * Flip col pins, move key assignments to "left hand" * Update readme * Implement placeholder macros * Notes * Reduce tapping time for SFT_T(/) * Adds vim features; refactors things * Adds fork of the vim features written by xton * Use correct backspace keycode * Add VIM_ESC * Add "OFF" to the RGB/HSV definitions * Clean up rules, use new "OFF" definition * Add windows KC_CALCULATOR key to numpad * Reformat layers with better guide; change layer names * Add sleep key * Change timeout delay * Add a "code paste" which surrounds a ^V with ``` * Try removing shift tap on rshift / * Update macros * Update the "code paste" macro * Update keymap with reset, calc, equals * Update keyboards/dz60/keymaps/twschum_b_4_10_simple/keymap.c Co-Authored-By: Drashna Jaelre * Update keyboards/dz60/keymaps/twschum_b_4_10/keymap.c Co-Authored-By: Drashna Jaelre * Update users/twschum/twschum.c Co-Authored-By: Drashna Jaelre * Update users/twschum/twschum.c Co-Authored-By: Drashna Jaelre * Revert quantum/rgblight_list.h * Better name for split space layout; rename KEYMAP->LAYOUT * Rename KEYMAP->LAYOUT * Use simpler :flash command * Clean up layout files * Use qmk's MOD_MASK_CTRL * Sync lufa submodule * Cleanup from noroadsleft's PR comments * Modernize vim layer code --- .../dz60/keymaps/split_space_arrows/keymap.c | 67 + .../dz60/keymaps/split_space_arrows/rules.mk | 7 + .../dz60/keymaps/twschum_b_4_10/config.h | 24 + .../dz60/keymaps/twschum_b_4_10/keymap.c | 123 + .../dz60/keymaps/twschum_b_4_10/layout.json | 4877 +++++++++++++++++ .../dz60/keymaps/twschum_b_4_10/rules.mk | 15 + keyboards/dz60/rules.mk | 6 +- .../keebio/levinson/keymaps/numpad/config.h | 34 + .../keebio/levinson/keymaps/numpad/keymap.c | 123 + .../keebio/levinson/keymaps/numpad/readme.md | 4 + .../keebio/levinson/keymaps/numpad/rules.mk | 3 + users/twschum/config.h | 0 users/twschum/readme.md | 14 + users/twschum/rules.mk | 5 + users/twschum/twschum.c | 257 + users/twschum/twschum.h | 131 + users/twschum/xtonhasvim.c | 593 ++ users/twschum/xtonhasvim.h | 62 + 18 files changed, 6342 insertions(+), 3 deletions(-) create mode 100644 keyboards/dz60/keymaps/split_space_arrows/keymap.c create mode 100644 keyboards/dz60/keymaps/split_space_arrows/rules.mk create mode 100644 keyboards/dz60/keymaps/twschum_b_4_10/config.h create mode 100644 keyboards/dz60/keymaps/twschum_b_4_10/keymap.c create mode 100644 keyboards/dz60/keymaps/twschum_b_4_10/layout.json create mode 100644 keyboards/dz60/keymaps/twschum_b_4_10/rules.mk create mode 100644 keyboards/keebio/levinson/keymaps/numpad/config.h create mode 100644 keyboards/keebio/levinson/keymaps/numpad/keymap.c create mode 100644 keyboards/keebio/levinson/keymaps/numpad/readme.md create mode 100644 keyboards/keebio/levinson/keymaps/numpad/rules.mk create mode 100644 users/twschum/config.h create mode 100644 users/twschum/readme.md create mode 100644 users/twschum/rules.mk create mode 100644 users/twschum/twschum.c create mode 100644 users/twschum/twschum.h create mode 100644 users/twschum/xtonhasvim.c create mode 100644 users/twschum/xtonhasvim.h diff --git a/keyboards/dz60/keymaps/split_space_arrows/keymap.c b/keyboards/dz60/keymaps/split_space_arrows/keymap.c new file mode 100644 index 0000000000..6dbfaa9375 --- /dev/null +++ b/keyboards/dz60/keymaps/split_space_arrows/keymap.c @@ -0,0 +1,67 @@ +#include QMK_KEYBOARD_H + +/* DZ60 layout using following options (from layouts diagram on KBDfans): + * - plate B (2.25u lshift) + * - opt 4 (1.75, 1, 1 on rshift) + * - opt 10 (2.75, 1.25, 2.25 on space, 5x1u bottom right keys) + * http://www.keyboard-layout-editor.com/#/gists/225f0f4dcf6671405f744fabe314627c + */ + +#define LAYOUT_b_4_10( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \ + K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ + K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K312, K313, K314, \ + K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \ + ) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \ + { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ + { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ + { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, KC_NO, K312, K313, K314 }, \ + { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \ +} + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Layer 0: basic qwerty */ + LAYOUT_b_4_10( + // |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------||------2.0-------| + 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, + // |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------||----------------| + // + // |----1.5-----||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|----1.5-----| + 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, + // |------------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------------| + // + // |----1.75------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------2.25--------|| + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + // |--------------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------------------|| + // + // |------2.25--------|--------|--------|--------|--------|--------|--------|--------|--------|--------||----1.75------|--------|--------|| + KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH), KC_UP, KC_HYPR, + // |------------------|--------|--------|--------|--------|--------|--------|--------|--------|--------||--------------|--------|--------|| + // + // |---1.25---|---1.25---||---1.25---||--------2.75----------||---1.25---|------2.25--------||--------|--------|--------|--------|--------| + KC_MEH, KC_LALT, KC_LGUI, KC_SPC, TT(1), MO(1), TG(1), TT(2), KC_LEFT, KC_DOWN, KC_RGHT + // |----------|----------||----------||----------------------||----------|------------------||--------|--------|--------|--------|--------| + ), + + /* Layer 1: primary fn layer */ + LAYOUT_b_4_10( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + KC_TAB, KC_NO, KC_HOME, KC_UP, KC_END, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_NO, KC_NO, KC_NO, KC_NO, + KC_CAPS, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_NO, KC_NO, KC_ENT, + KC_LSFT, KC_MPRV, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_LOCK, KC_PGUP, KC_INS, + KC_MEH, KC_LALT, KC_LGUI, KC_MEDIA_PLAY_PAUSE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END + ), + + /* Layer 2: mouse navigation */ + /* Layer 3: numpad */ + /* Layer 4: RGB lighting controls and keyboard config, reset */ + LAYOUT_b_4_10( + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(5), + KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUD, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_MODE_PLAIN, RGB_MODE_FORWARD, KC_RSHIFT, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_TOG, RGB_VAI, RGB_HUI, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, RGB_SAD, RGB_VAD, RGB_SAI + ), +}; diff --git a/keyboards/dz60/keymaps/split_space_arrows/rules.mk b/keyboards/dz60/keymaps/split_space_arrows/rules.mk new file mode 100644 index 0000000000..5d38b9d367 --- /dev/null +++ b/keyboards/dz60/keymaps/split_space_arrows/rules.mk @@ -0,0 +1,7 @@ +# Build Options +# override the options specified in dz60/rules.mk +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +KEY_LOCK_ENABLE = yes # Enables use of KC_LOCK diff --git a/keyboards/dz60/keymaps/twschum_b_4_10/config.h b/keyboards/dz60/keymaps/twschum_b_4_10/config.h new file mode 100644 index 0000000000..15cabda364 --- /dev/null +++ b/keyboards/dz60/keymaps/twschum_b_4_10/config.h @@ -0,0 +1,24 @@ +#pragma once + +// number of taps for TT Tap-Toggle keys to toggle +#ifdef TAPPING_TOGGLE +#undef TAPPING_TOGGLE +#endif +#define TAPPING_TOGGLE 2 + +// time in ms that counts as a "tap" for various features +#ifdef TAPPING_TERM +#undef TAPPING_TERM +#endif +#define TAPPING_TERM 100 + +// https://docs.qmk.fm/features/mouse-keys#configuring-the-behavior-of-mousekeys +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_MAX_SPEED 10 +#define MOUSEKEY_TIME_TO_MAX 15 +#define MOUSEKEY_WHEEL_MAX_SPEED 1 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 255 + +// flags from user/twschum/ +#define TWSCHUM_TAPPING_CTRL_PREFIX 1 diff --git a/keyboards/dz60/keymaps/twschum_b_4_10/keymap.c b/keyboards/dz60/keymaps/twschum_b_4_10/keymap.c new file mode 100644 index 0000000000..6efb567133 --- /dev/null +++ b/keyboards/dz60/keymaps/twschum_b_4_10/keymap.c @@ -0,0 +1,123 @@ +#include QMK_KEYBOARD_H +#include "twschum.h" + +/* DZ60 layout using following options (from layouts diagram on KBDfans): + * - plate B (2.25u lshift) + * - opt 4 (1.75, 1, 1 on rshift) + * - opt 10 (2.75, 1.25, 2.25 on space, 5x1u bottom right keys) + * http://www.keyboard-layout-editor.com/#/gists/225f0f4dcf6671405f744fabe314627c + */ + + +#define LAYOUT_b_4_10( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \ + K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ + K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K312, K313, K314, \ + K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \ + ) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, XXXXXXX, K014 }, \ + { K100, XXXXXXX, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ + { K200, XXXXXXX, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, XXXXXXX }, \ + { K300, XXXXXXX, K302, K303, K304, K305, K306, K307, K308, K309, K310, XXXXXXX, K312, K313, K314 }, \ + { K400, K401, XXXXXXX, K403, K404, XXXXXXX, K406, XXXXXXX, K408, XXXXXXX, K410, K411, K412, K413, K414 } \ +} + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* base 60% qwerty */ + LAYOUT_b_4_10( + // |--------|----1---|----2---|----3---|---4----|---5----|---6----|---7----|---8----|---9----|---0----|-- - ---|-- = ---||------2.0-------| + 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, + // |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------||----------------| + // + // |----1.5-----||---Q----|---W----|---E----|---R----|---T----|---Y----|---U----|---I----|---O----|---P----|---[----|---]----|----1.5-----| + 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, + // |------------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------------| + // + // |----1.75------||---A----|---S----|---D----|---F----|---G----|---H----|---J----|---K----|---L----|---;----|---'----|------2.25--------|| + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + // |--------------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------------------|| + // + // |------2.25--------|---Z----|---X----|---C----|---V----|---B----|---N----|---M----|---,----|---.----||----1.75------|--------|--------|| + KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, /*SFT_T*/KC_SLSH, KC_UP, VIM_START, + // |------------------|--------|--------|--------|--------|--------|--------|--------|--------|--------||--------------|--------|--------|| + // + // |---1.25---|---1.25---||---1.25---||--------2.75----------||---1.25---|------2.25--------||--------|--------|--------|--------|--------| + MO(_Fn), KC_LALT, KC_LGUI, KC_SPC, TT(_Nav), MO(_Fn), TG(_Num), TT(_Cfg), KC_LEFT, KC_DOWN, KC_RGHT + // |----------|----------||----------||----------------------||----------|------------------||--------|--------|--------|--------|--------| + ), + + /* vim mode */ + LAYOUT_b_4_10( + VIM_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, VIM_W, VIM_E, KC_R, _______, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, _______, _______, _______, + _______, VIM_A, VIM_S, VIM_D, _______, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, _______, _______, _______, + VIM_SHIFT, _______, VIM_X, VIM_C, VIM_V, VIM_B, _______, _______, VIM_COMMA, VIM_PERIOD, _______, _______, VIM_ESC, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + /* primary fn layer */ + LAYOUT_b_4_10( + // |--------|----1---|----2---|----3---|---4----|---5----|---6----|---7----|---8----|---9----|---0----|-- - ---|-- = ---||------2.0-------| + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, + // |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------||----------------| + // + // |----1.5-----||---Q----|---W----|---E----|---R----|---T----|---Y----|---U----|---I----|---O----|---P----|---[----|---]----|----1.5-----| + KC_TAB, CODE_PASTE, KC_HOME, KC_UP, KC_END, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, LESS_PD, XXXXXXX, XXXXXXX, CODE_PASTE, + // |------------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------------| + // + // |----1.75------||---A----|---S----|---D----|---F----|---G----|---H----|---J----|---K----|---L----|---;----|---'----|------2.25--------|| + KC_CAPS, SALT_CMD, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, KC_ENT, + // |--------------||--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|------------------|| + // + // |------2.25--------|---Z----|---X----|---C----|---V----|---B----|---N----|---M----|---,----|---.----||----1.75------|--------|--------|| + KC_LSHIFT, KC_MPRV, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______, XXXXXXX, XXXXXXX, KC_LOCK, KC_PGUP, KC_INS, + // |------------------|--------|--------|--------|--------|--------|--------|--------|--------|--------||--------------|--------|--------|| + // + // |---1.25---|---1.25---||---1.25---||--------2.75----------||---1.25---|------2.25--------||--------|--------|--------|--------|--------| + KC_MEH, KC_LALT, KC_LGUI, KC_MEDIA_PLAY_PAUSE, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END + // |----------|----------||----------||----------------------||----------|------------------||--------|--------|--------|--------|--------| + ), + + /* mouse navigation */ + LAYOUT_b_4_10( + TO(_Base), KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, XXXXXXX, XXXXXXX, KC_SLEP, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_LCTL, KC_MS_BTN3, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, XXXXXXX, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, XXXXXXX, XXXXXXX, XXXXXXX, + KC_LSHIFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_BTN1, _______, _______, _______, _______, _______, _______, _______ + ), + + /* numpad layer */ + LAYOUT_b_4_10( + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_MINUS, KC_KP_PLUS, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_SLASH, KC_KP_ASTERISK, XXXXXXX, KC_ENT, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_DOT, KC_KP_ENTER, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_0, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX + ), + + + /* RGB lighting controls and keyboard config, reset */ + LAYOUT_b_4_10( + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG_L0_RGB, XXXXXXX, XXXXXXX, TO(_None), + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUD, + EN_CTRL_SHORTCUTS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG_LAYER_RGB, RGB_MODE_PLAIN, RGB_MODE_FORWARD, KC_RSHIFT, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MAKE, XXXXXXX, XXXXXXX, RGB_TOG, RGB_VAI, RGB_HUI, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_SAD, RGB_VAD, RGB_SAI + ), + + /* soft "off" state where none of the keystroke register */ + LAYOUT_b_4_10( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TO(_Base), + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX + ), +}; + +uint8_t vim_cmd_layer(void) { + return _Vim; +} diff --git a/keyboards/dz60/keymaps/twschum_b_4_10/layout.json b/keyboards/dz60/keymaps/twschum_b_4_10/layout.json new file mode 100644 index 0000000000..cd484f9d89 --- /dev/null +++ b/keyboards/dz60/keymaps/twschum_b_4_10/layout.json @@ -0,0 +1,4877 @@ +{ + "configKeymap":{ + "keys":[ + "K00", + "K01", + "K02", + "K03", + "K04", + "K05", + "K06", + "K07", + "K08", + "K09", + "K0A", + "K0B", + "K0C", + "K0D", + "K2D", + "K10", + "K11", + "K12", + "K13", + "K14", + "K15", + "K16", + "K17", + "K18", + "K19", + "K1A", + "K1B", + "K1C", + "K1D", + "K20", + "K21", + "K22", + "K23", + "K24", + "K25", + "K26", + "K27", + "K28", + "K29", + "K2A", + "K2B", + "K2C", + "K30", + "K31", + "K32", + "K33", + "K34", + "K35", + "K36", + "K37", + "K38", + "K39", + "K3A", + "K3B", + "K3C", + "K3D", + "K40", + "K41", + "K42", + "K44", + "K45", + "K46", + "K48", + "K49", + "K4A", + "K4B", + "K4C" + ], + "positions":[ + [ + "K00", + "K01", + "K02", + "K03", + "K04", + "K05", + "K06", + "K07", + "K08", + "K09", + "K0A", + "K0B", + "K0C", + "K0D" + ], + [ + "K10", + "K11", + "K12", + "K13", + "K14", + "K15", + "K16", + "K17", + "K18", + "K19", + "K1A", + "K1B", + "K1C", + "K1D" + ], + [ + "K20", + "K21", + "K22", + "K23", + "K24", + "K25", + "K26", + "K27", + "K28", + "K29", + "K2A", + "K2B", + "K2C", + "K2D" + ], + [ + "K30", + "K31", + "K32", + "K33", + "K34", + "K35", + "K36", + "K37", + "K38", + "K39", + "K3A", + "K3B", + "K3C", + "K3D" + ], + [ + "K40", + "K41", + "K42", + "KC_NO", + "K44", + "K45", + "K46", + "KC_NO", + "K48", + "K49", + "K4A", + "K4B", + "K4C", + "KC_NO" + ] + ] + }, + "keySections":[ + { + "row1":[ + { + "id":"k00", + "value":"ESC", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k01", + "value":"1", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k02", + "value":"2", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k03", + "value":"3", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k04", + "value":"4", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k05", + "value":"5", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k06", + "value":"6", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k07", + "value":"7", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k08", + "value":"8", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k09", + "value":"9", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0A", + "value":"0", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0B", + "value":"MINS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0C", + "value":"EQL", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "backspace":[ + [ + { + "id":"k0D", + "value":"BSPC", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k200", + "zone":"Backspace" + }, + { + "id":"k2D", + "value":"NO", + "type":"nodisplay", + "showMenu":false + } + ], + [ + { + "id":"k0D", + "value":"PSCR", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Backspace" + }, + { + "id":"k2D", + "value":"PAUS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Backspace" + } + ] + ], + "row2":[ + { + "id":"k10", + "value":"TAB", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k11", + "value":"Q", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k12", + "value":"W", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k13", + "value":"E", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k14", + "value":"R", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k15", + "value":"T", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k16", + "value":"Y", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k17", + "value":"U", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k18", + "value":"I", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k19", + "value":"O", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1A", + "value":"P", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1B", + "value":"LBRC", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1C", + "value":"RBRC", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "row2pipe":[ + [ + { + "id":"k1D", + "value":"BSLS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150", + "zone":"Enter" + } + ], + [ + { + "id":"k1D", + "value":"ENT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"kISO", + "zone":"Enter" + } + ] + ], + "caps":[ + [ + { + "id":"k20", + "value":"LCTL", + "type":"normal", + "secondary":"LCTL", + "showMenu":false, + "shape":"k175", + "zone":"Caps Lock" + } + ], + [ + { + "id":"k20", + "value":"CAPS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k175stepped", + "zone":"Caps Lock" + } + ] + ], + "row3":[ + { + "id":"k21", + "value":"A", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k22", + "value":"S", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k23", + "value":"D", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k24", + "value":"F", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k25", + "value":"G", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k26", + "value":"H", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k27", + "value":"J", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k28", + "value":"K", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k29", + "value":"L", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2A", + "value":"SCLN", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2B", + "value":"QUOT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "enter":[ + [ + { + "id":"k2C", + "value":"ENT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225", + "zone":"Enter" + } + ], + [ + { + "id":"k2C", + "value":"NUHS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Enter" + } + ] + ], + "leftShift":[ + [ + { + "id":"k30", + "value":"LSFT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225", + "zone":"Left Shift" + }, + { + "id":"k31", + "value":"NO", + "type":"nodisplay", + "showMenu":false + } + ], + [ + { + "id":"k30", + "value":"LSFT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125", + "zone":"Left Shift" + }, + { + "id":"k31", + "value":"NUBS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Left Shift" + } + ] + ], + "row4":[ + { + "id":"k32", + "value":"Z", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k33", + "value":"X", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k34", + "value":"C", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k35", + "value":"V", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k36", + "value":"B", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k37", + "value":"N", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k38", + "value":"M", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k39", + "value":"COMM", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3A", + "value":"DOT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "rightShift":[ + [ + { + "id":"k3B", + "value":"SLSH", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Right Shift" + }, + { + "id":"k3C", + "value":"RSFT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275", + "zone":"Right Shift" + }, + { + "id":"k3D", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k3B", + "value":"SLSH", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Right Shift" + }, + { + "id":"k3C", + "value":"RSFT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k175", + "zone":"Right Shift" + }, + { + "id":"k3D", + "value":"L1", + "type":"momentary", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Right Shift" + } + ], + [ + { + "id":"k3B", + "value":"SLSH", + "type":"tapkey", + "secondary":"RSFT", + "showMenu":false, + "shape":"k175", + "zone":"Right Shift" + }, + { + "id":"k3C", + "value":"UP", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Right Shift" + }, + { + "id":"k3D", + "value":"HYPR", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Right Shift" + } + ] + ], + "row5":[ + [ + { + "id":"k40", + "value":"MEH", + "type":"normal", + "secondary":"MEH", + "showMenu":false, + "shape":"k125", + "zone":"Bottom Row" + }, + { + "id":"k41", + "value":"LALT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125", + "zone":"Bottom Row" + }, + { + "id":"k42", + "value":"LGUI", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125", + "zone":"Bottom Row" + } + ], + [ + { + "id":"k40", + "value":"LCTL", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150", + "zone":"Bottom Row" + }, + { + "id":"k41", + "value":"LGUI", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Bottom Row" + }, + { + "id":"k42", + "value":"LALT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150", + "zone":"Bottom Row" + } + ] + ], + "space":[ + [ + [ + { + "id":"k44", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k45", + "value":"SPC", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k625", + "zone":"Space" + }, + { + "id":"k46", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k44", + "value":"SPC", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275", + "zone":"Space" + }, + { + "id":"k45", + "value":"L2", + "type":"taptoggle", + "secondary":null, + "showMenu":false, + "shape":"k125", + "zone":"Space" + }, + { + "id":"k46", + "value":"L1", + "type":"momentary", + "secondary":null, + "showMenu":false, + "shape":"k225", + "zone":"Space" + } + ], + [ + { + "id":"k44", + "value":"ENT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225", + "zone":"Space" + }, + { + "id":"k45", + "value":"BL_STEP", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125", + "zone":"Space" + }, + { + "id":"k46", + "value":"SPC", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275", + "zone":"Space" + } + ] + ], + [ + [ + { + "id":"k44", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k45", + "value":"SPC", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k700", + "zone":"Space" + }, + { + "id":"k46", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k44", + "value":"ENT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275", + "zone":"Space" + }, + { + "id":"k45", + "value":"BL_STEP", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150", + "zone":"Space" + }, + { + "id":"k46", + "value":"SPC", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275", + "zone":"Space" + } + ] + ] + ], + "bottomRight":[ + [ + [ + { + "id":"k48", + "value":"RGUI", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125", + "zone":"Bottom Right" + }, + { + "id":"k49", + "value":"RALT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125", + "zone":"Bottom Right" + }, + { + "id":"k4A", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k4B", + "value":"APP", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125", + "zone":"Bottom Right" + }, + { + "id":"k4C", + "value":"RCTL", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125", + "zone":"Bottom Right" + } + ], + [ + { + "id":"k48", + "value":"L3", + "type":"taptoggle", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Bottom Right" + }, + { + "id":"k49", + "value":"L4", + "type":"direct", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Bottom Right" + }, + { + "id":"k4A", + "value":"LEFT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Bottom Right" + }, + { + "id":"k4B", + "value":"DOWN", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Bottom Right" + }, + { + "id":"k4C", + "value":"RIGHT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Bottom Right" + } + ] + ], + [ + [ + { + "id":"k48", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k49", + "value":"RALT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150", + "zone":"Bottom Right" + }, + { + "id":"k4A", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k4B", + "value":"APP", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Bottom Right" + }, + { + "id":"k4C", + "value":"RCTL", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150", + "zone":"Bottom Right" + } + ], + [ + { + "id":"k48", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k49", + "value":"RALT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Bottom Right" + }, + { + "id":"k4A", + "value":"LEFT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Bottom Right" + }, + { + "id":"k4B", + "value":"DOWN", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Bottom Right" + }, + { + "id":"k4C", + "value":"RIGHT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100", + "zone":"Bottom Right" + } + ] + ] + ] + }, + { + "row1":[ + { + "id":"k00", + "value":"GRV", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k01", + "value":"F1", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k02", + "value":"F2", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k03", + "value":"F3", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k04", + "value":"F4", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k05", + "value":"F5", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k06", + "value":"F6", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k07", + "value":"F7", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k08", + "value":"F8", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k09", + "value":"F9", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0A", + "value":"F10", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0B", + "value":"F11", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0C", + "value":"F12", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "backspace":[ + [ + { + "id":"k0D", + "value":"DEL", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k200" + }, + { + "id":"k2D", + "value":"NO", + "type":"nodisplay", + "showMenu":false + } + ], + [ + { + "id":"k0D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "row2":[ + { + "id":"k10", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k11", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k12", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k13", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k14", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k15", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k16", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k17", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k18", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k19", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "row2pipe":[ + [ + { + "id":"k1D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + } + ], + [ + { + "id":"k1D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"kISO" + } + ] + ], + "caps":[ + [ + { + "id":"k20", + "value":"CAPS", + "type":"normal", + "secondary":"LCTL", + "showMenu":false, + "shape":"k175" + } + ], + [ + { + "id":"k20", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k175stepped" + } + ] + ], + "row3":[ + { + "id":"k21", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k22", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k23", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k24", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k25", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k26", + "value":"LEFT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k27", + "value":"DOWN", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k28", + "value":"UP", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k29", + "value":"RIGHT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "enter":[ + [ + { + "id":"k2C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + } + ], + [ + { + "id":"k2C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "leftShift":[ + [ + { + "id":"k30", + "value":"LSFT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + }, + { + "id":"k31", + "value":"NO", + "type":"nodisplay", + "showMenu":false + } + ], + [ + { + "id":"k30", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k31", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "row4":[ + { + "id":"k32", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k33", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k34", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k35", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k36", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k37", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k38", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k39", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "rightShift":[ + [ + { + "id":"k3B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + }, + { + "id":"k3D", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k3B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k175" + }, + { + "id":"k3D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + [ + { + "id":"k3B", + "value":"TRNS", + "type":"normal", + "secondary":"RSFT", + "showMenu":false, + "shape":"k175" + }, + { + "id":"k3C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "row5":[ + [ + { + "id":"k40", + "value":"TRNS", + "type":"normal", + "secondary":"MEH", + "showMenu":false, + "shape":"k125" + }, + { + "id":"k41", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k42", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + } + ], + [ + { + "id":"k40", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k41", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k42", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + } + ] + ], + "space":[ + [ + [ + { + "id":"k44", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k625" + }, + { + "id":"k46", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k44", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k46", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + } + ], + [ + { + "id":"k44", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k46", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + } + ] + ], + [ + [ + { + "id":"k44", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k700" + }, + { + "id":"k46", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k44", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k46", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + } + ] + ] + ], + "bottomRight":[ + [ + [ + { + "id":"k48", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k4A", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + } + ], + [ + { + "id":"k48", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + [ + [ + { + "id":"k48", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k4A", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + } + ], + [ + { + "id":"k48", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ] + ] + }, + { + "row1":[ + { + "id":"k00", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k01", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k02", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k03", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k04", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k05", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k06", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k07", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k08", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k09", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "backspace":[ + [ + { + "id":"k0D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k200" + }, + { + "id":"k2D", + "value":"NO", + "type":"nodisplay", + "showMenu":false + } + ], + [ + { + "id":"k0D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "row2":[ + { + "id":"k10", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k11", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k12", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k13", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k14", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k15", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k16", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k17", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k18", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k19", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "row2pipe":[ + [ + { + "id":"k1D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + } + ], + [ + { + "id":"k1D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"kISO" + } + ] + ], + "caps":[ + [ + { + "id":"k20", + "value":"TRNS", + "type":"normal", + "secondary":"LCTL", + "showMenu":false, + "shape":"k175" + } + ], + [ + { + "id":"k20", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k175stepped" + } + ] + ], + "row3":[ + { + "id":"k21", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k22", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k23", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k24", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k25", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k26", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k27", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k28", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k29", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "enter":[ + [ + { + "id":"k2C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + } + ], + [ + { + "id":"k2C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "leftShift":[ + [ + { + "id":"k30", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + }, + { + "id":"k31", + "value":"NO", + "type":"nodisplay", + "showMenu":false + } + ], + [ + { + "id":"k30", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k31", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "row4":[ + { + "id":"k32", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k33", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k34", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k35", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k36", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k37", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k38", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k39", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "rightShift":[ + [ + { + "id":"k3B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + }, + { + "id":"k3D", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k3B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k175" + }, + { + "id":"k3D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + [ + { + "id":"k3B", + "value":"TRNS", + "type":"normal", + "secondary":"RSFT", + "showMenu":false, + "shape":"k175" + }, + { + "id":"k3C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "row5":[ + [ + { + "id":"k40", + "value":"TRNS", + "type":"normal", + "secondary":"MEH", + "showMenu":false, + "shape":"k125" + }, + { + "id":"k41", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k42", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + } + ], + [ + { + "id":"k40", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k41", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k42", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + } + ] + ], + "space":[ + [ + [ + { + "id":"k44", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k625" + }, + { + "id":"k46", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k44", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k46", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + } + ], + [ + { + "id":"k44", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k46", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + } + ] + ], + [ + [ + { + "id":"k44", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k700" + }, + { + "id":"k46", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k44", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k46", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + } + ] + ] + ], + "bottomRight":[ + [ + [ + { + "id":"k48", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k4A", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + } + ], + [ + { + "id":"k48", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + [ + [ + { + "id":"k48", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k4A", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + } + ], + [ + { + "id":"k48", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ] + ] + }, + { + "row1":[ + { + "id":"k00", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k01", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k02", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k03", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k04", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k05", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k06", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k07", + "value":"PSLS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k08", + "value":"PAST", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k09", + "value":"PEQL", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "backspace":[ + [ + { + "id":"k0D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k200" + }, + { + "id":"k2D", + "value":"NO", + "type":"nodisplay", + "showMenu":false + } + ], + [ + { + "id":"k0D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "row2":[ + { + "id":"k10", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k11", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k12", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k13", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k14", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k15", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k16", + "value":"P7", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k17", + "value":"P8", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k18", + "value":"P8", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k19", + "value":"PMNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "row2pipe":[ + [ + { + "id":"k1D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + } + ], + [ + { + "id":"k1D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"kISO" + } + ] + ], + "caps":[ + [ + { + "id":"k20", + "value":"TRNS", + "type":"normal", + "secondary":"LCTL", + "showMenu":false, + "shape":"k175" + } + ], + [ + { + "id":"k20", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k175stepped" + } + ] + ], + "row3":[ + { + "id":"k21", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k22", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k23", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k24", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k25", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k26", + "value":"P4", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k27", + "value":"P5", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k28", + "value":"P6", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k29", + "value":"PPLS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "enter":[ + [ + { + "id":"k2C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + } + ], + [ + { + "id":"k2C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "leftShift":[ + [ + { + "id":"k30", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + }, + { + "id":"k31", + "value":"NO", + "type":"nodisplay", + "showMenu":false + } + ], + [ + { + "id":"k30", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k31", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "row4":[ + { + "id":"k32", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k33", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k34", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k35", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k36", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k37", + "value":"P1", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k38", + "value":"P2", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k39", + "value":"P3", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3A", + "value":"PDOT", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "rightShift":[ + [ + { + "id":"k3B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + }, + { + "id":"k3D", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k3B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k175" + }, + { + "id":"k3D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + [ + { + "id":"k3B", + "value":"PENT", + "type":"normal", + "secondary":"RSFT", + "showMenu":false, + "shape":"k175" + }, + { + "id":"k3C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "row5":[ + [ + { + "id":"k40", + "value":"TRNS", + "type":"normal", + "secondary":"MEH", + "showMenu":false, + "shape":"k125" + }, + { + "id":"k41", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k42", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + } + ], + [ + { + "id":"k40", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k41", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k42", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + } + ] + ], + "space":[ + [ + [ + { + "id":"k44", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k625" + }, + { + "id":"k46", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k44", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k46", + "value":"P0", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + } + ], + [ + { + "id":"k44", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k46", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + } + ] + ], + [ + [ + { + "id":"k44", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k700" + }, + { + "id":"k46", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k44", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k46", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + } + ] + ] + ], + "bottomRight":[ + [ + [ + { + "id":"k48", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k4A", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + } + ], + [ + { + "id":"k48", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + [ + [ + { + "id":"k48", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k4A", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + } + ], + [ + { + "id":"k48", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ] + ] + }, + { + "row1":[ + { + "id":"k00", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k01", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k02", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k03", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k04", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k05", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k06", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k07", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k08", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k09", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k0C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "backspace":[ + [ + { + "id":"k0D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k200" + }, + { + "id":"k2D", + "value":"NO", + "type":"nodisplay", + "showMenu":false + } + ], + [ + { + "id":"k0D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "row2":[ + { + "id":"k10", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k11", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k12", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k13", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k14", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k15", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k16", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k17", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k18", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k19", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k1C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "row2pipe":[ + [ + { + "id":"k1D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + } + ], + [ + { + "id":"k1D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"kISO" + } + ] + ], + "caps":[ + [ + { + "id":"k20", + "value":"TRNS", + "type":"normal", + "secondary":"LCTL", + "showMenu":false, + "shape":"k175" + } + ], + [ + { + "id":"k20", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k175stepped" + } + ] + ], + "row3":[ + { + "id":"k21", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k22", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k23", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k24", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k25", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k26", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k27", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k28", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k29", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k2B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "enter":[ + [ + { + "id":"k2C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + } + ], + [ + { + "id":"k2C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "leftShift":[ + [ + { + "id":"k30", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + }, + { + "id":"k31", + "value":"NO", + "type":"nodisplay", + "showMenu":false + } + ], + [ + { + "id":"k30", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k31", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "row4":[ + { + "id":"k32", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k33", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k34", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k35", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k36", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k37", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k38", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k39", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + "rightShift":[ + [ + { + "id":"k3B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + }, + { + "id":"k3D", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k3B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k175" + }, + { + "id":"k3D", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ], + [ + { + "id":"k3B", + "value":"TRNS", + "type":"normal", + "secondary":"RSFT", + "showMenu":false, + "shape":"k175" + }, + { + "id":"k3C", + "value":"HOME", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k3D", + "value":"PGUP", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + "row5":[ + [ + { + "id":"k40", + "value":"TRNS", + "type":"normal", + "secondary":"MEH", + "showMenu":false, + "shape":"k125" + }, + { + "id":"k41", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k42", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + } + ], + [ + { + "id":"k40", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k41", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k42", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + } + ] + ], + "space":[ + [ + [ + { + "id":"k44", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k625" + }, + { + "id":"k46", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k44", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k46", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + } + ], + [ + { + "id":"k44", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k225" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k46", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + } + ] + ], + [ + [ + { + "id":"k44", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k700" + }, + { + "id":"k46", + "value":"NO", + "type":"nodisplay" + } + ], + [ + { + "id":"k44", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + }, + { + "id":"k45", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k46", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k275" + } + ] + ] + ], + "bottomRight":[ + [ + [ + { + "id":"k48", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k4A", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k125" + } + ], + [ + { + "id":"k48", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4A", + "value":"DEL", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4B", + "value":"HOME", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4C", + "value":"PGDN", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ], + [ + [ + { + "id":"k48", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + }, + { + "id":"k4A", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k150" + } + ], + [ + { + "id":"k48", + "value":"NO", + "type":"nodisplay" + }, + { + "id":"k49", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4A", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4B", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + }, + { + "id":"k4C", + "value":"TRNS", + "type":"normal", + "secondary":null, + "showMenu":false, + "shape":"k100" + } + ] + ] + ] + } + ], + "layoutName":"twschum_DZ60_b_4_10_v1.2", + "timestamp":1525116588644 +} diff --git a/keyboards/dz60/keymaps/twschum_b_4_10/rules.mk b/keyboards/dz60/keymaps/twschum_b_4_10/rules.mk new file mode 100644 index 0000000000..1610eace74 --- /dev/null +++ b/keyboards/dz60/keymaps/twschum_b_4_10/rules.mk @@ -0,0 +1,15 @@ +# Build Options +# override the options specified in dz60/rules.mk +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +KEY_LOCK_ENABLE = yes # Enables use of KC_LOCK + +# Enables including users/twschum/twschum.h +USER_NAME := twschum diff --git a/keyboards/dz60/rules.mk b/keyboards/dz60/rules.mk index 556d9e55c7..7ed2571da0 100644 --- a/keyboards/dz60/rules.mk +++ b/keyboards/dz60/rules.mk @@ -21,8 +21,8 @@ CONSOLE_ENABLE = no # Console for debug(+400) COMMAND_ENABLE = no # Commands for debug and configuration SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend NKRO_ENABLE = yes # USB 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 -AUDIO_ENABLE = no -RGBLIGHT_ENABLE = yes +BACKLIGHT_ENABLE = yes # Enable per-key backlight LEDs +AUDIO_ENABLE = no # There is no speaker on this PCB +RGBLIGHT_ENABLE = yes # Enable the RGB underglow LEDs LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_hhkb 60_iso 60_abnt2 diff --git a/keyboards/keebio/levinson/keymaps/numpad/config.h b/keyboards/keebio/levinson/keymaps/numpad/config.h new file mode 100644 index 0000000000..7e10bc445c --- /dev/null +++ b/keyboards/keebio/levinson/keymaps/numpad/config.h @@ -0,0 +1,34 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert +Copyright 2018 Danny Nguyen + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +// #define USE_I2C +// Need to flip the rows +#undef MATRIX_COL_PINS +#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6 } + +/* Select hand configuration */ +// #define MASTER_RIGHT +// #define EE_HANDS + +/* Time in ms until oneshot layer times out */ +#define ONESHOT_TIMEOUT 3000 diff --git a/keyboards/keebio/levinson/keymaps/numpad/keymap.c b/keyboards/keebio/levinson/keymaps/numpad/keymap.c new file mode 100644 index 0000000000..32a1113c5d --- /dev/null +++ b/keyboards/keebio/levinson/keymaps/numpad/keymap.c @@ -0,0 +1,123 @@ +#include QMK_KEYBOARD_H + +/* Add the stings you want to send as macros, see + * https://docs.qmk.fm/#/feature_macros for what all can be used + */ +#define MACRO_0 "zero" +#define MACRO_1 "one" +#define MACRO_2 "two" +#define MACRO_3 "three" +#define MACRO_4 "four" +#define MACRO_5 "five" +#define MACRO_6 "six" +#define MACRO_7 "seven" +#define MACRO_8 "eight" +#define MACRO_9 "nine" + +enum macro_keycodes { + M0 = SAFE_RANGE, + M1, + M2, + M3, + M4, + M5, + M6, + M7, + M8, + M9 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Numpad + * ,-----------------------------------------------------------------------------------. + * | 0 | 1 | 4 | 7 | BkSp |OSL(1)| | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | , | 2 | 5 | 8 | / | Down | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | . | 3 | 6 | 9 | * | Up | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Enter | + | - | = | MO(1)| | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[0] = LAYOUT_ortho_4x12( \ + KC_KP_0, KC_KP_1, KC_KP_4, KC_KP_7, KC_BSPACE, OSL(1), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_COMMA, KC_KP_2, KC_KP_5, KC_KP_8, KC_KP_SLASH, KC_DOWN, KC_NO, KC_A, KC_B, KC_C, KC_D, KC_NO, \ + KC_KP_DOT, KC_KP_3, KC_KP_6, KC_KP_9, KC_KP_ASTERISK, KC_UP, KC_NO, KC_E, KC_F, KC_G, KC_H, KC_NO, \ + KC_KP_ENTER, KC_NO, KC_KP_PLUS, KC_KP_MINUS, KC_KP_EQUAL, MO(1), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \ +), +/* Macro layer - the number keys are macros, + * other functions on remaining keys + * ,-----------------------------------------. + * | M(0) | M(1) | M(4) | M(7) | | Esc | + * |------+------+------+------+------+------| + * | Left | M(2) | M(5) | M(8) | | | + * |------+------+------+------+------+------| + * | Right| M(3) | M(6) | M(9) | | | + * |------+------+------+------+------+------| + * | NumLock | RESET| | | Calc | + * `-----------------------------------------' + */ +[1] = LAYOUT_ortho_4x12( \ + M0, M1, M4, M7, KC_NO, KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_LEFT, M2, M5, M8, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_RIGHT, M3, M6, M8, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \ + KC_NUMLOCK, RESET, KC_NO, KC_NO, KC_CALC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \ +) +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case M0: + if (record->event.pressed) { + SEND_STRING(MACRO_0); + } + break; + case M1: + if (record->event.pressed) { + SEND_STRING(MACRO_1); + } + break; + case M2: + if (record->event.pressed) { + SEND_STRING(MACRO_2); + } + break; + case M3: + if (record->event.pressed) { + SEND_STRING(MACRO_3); + } + break; + case M4: + if (record->event.pressed) { + SEND_STRING(MACRO_4); + } + break; + case M5: + if (record->event.pressed) { + SEND_STRING(MACRO_5); + } + break; + case M6: + if (record->event.pressed) { + SEND_STRING(MACRO_6); + } + break; + case M7: + if (record->event.pressed) { + SEND_STRING(MACRO_7); + } + break; + case M8: + if (record->event.pressed) { + SEND_STRING(MACRO_8); + } + break; + case M9: + if (record->event.pressed) { + SEND_STRING(MACRO_9); + } + break; + } + return true; +}; diff --git a/keyboards/keebio/levinson/keymaps/numpad/readme.md b/keyboards/keebio/levinson/keymaps/numpad/readme.md new file mode 100644 index 0000000000..0c15ac54d3 --- /dev/null +++ b/keyboards/keebio/levinson/keymaps/numpad/readme.md @@ -0,0 +1,4 @@ +# Numpad Layout +[Layout Example](http://www.keyboard-layout-editor.com/##@@_c=%23ffd100&a:7%3B&=&_c=%23909596&f:5%3B&=&=&=%3B&@_c=%23c4c8c5&st=MX1A-L1xx&f:6%3B&=Esc&=%2F%2F&=*&=%3F%3B&@=7&=8&=9&=%E2%80%93%3B&@=4&_n:true%3B&=5&=6&=+%3B&@=1&=2&=3&_c=%23ffd100&h:2%3B&=%3B&@_c=%23c4c8c5%3B&=0&_a:5%3B&=%3C%0A,&=%3E%0A.) + +Uses a single half of the Levinson a vertical 4x6 numpad/macropad. diff --git a/keyboards/keebio/levinson/keymaps/numpad/rules.mk b/keyboards/keebio/levinson/keymaps/numpad/rules.mk new file mode 100644 index 0000000000..639c76834c --- /dev/null +++ b/keyboards/keebio/levinson/keymaps/numpad/rules.mk @@ -0,0 +1,3 @@ +# Build Options +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow diff --git a/users/twschum/config.h b/users/twschum/config.h new file mode 100644 index 0000000000..e69de29bb2 diff --git a/users/twschum/readme.md b/users/twschum/readme.md new file mode 100644 index 0000000000..b354e4b79c --- /dev/null +++ b/users/twschum/readme.md @@ -0,0 +1,14 @@ +Copyright 2019 Tim Schumacher @twschum + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . diff --git a/users/twschum/rules.mk b/users/twschum/rules.mk new file mode 100644 index 0000000000..9878e6f690 --- /dev/null +++ b/users/twschum/rules.mk @@ -0,0 +1,5 @@ +SRC += twschum.c +SRC += xtonhasvim.c +ifeq ($(strip $(FLASH_BOOTLOADER)), yes) + OPT_DEFS += -DFLASH_BOOTLOADER +endif diff --git a/users/twschum/twschum.c b/users/twschum/twschum.c new file mode 100644 index 0000000000..2d34f95718 --- /dev/null +++ b/users/twschum/twschum.c @@ -0,0 +1,257 @@ +#include "twschum.h" + +#ifdef TWSCHUM_TAPPING_CTRL_PREFIX +// state for the great state machine of custom actions! +#define TIMEOUT_DELAY 200 // ms +static uint16_t idle_timer; +static bool timeout_is_active = false; + +static bool ctrl_shortcuts_enabled_g = false; +//static bool B_down = 0; // TODO just use top bit from count +//static int8_t B_count = 0; + +#define N_TAPPING_CTRL_KEYS 2 +static struct Tapping_ctrl_key_t special_keys_g[N_TAPPING_CTRL_KEYS] = { + {false, 0, KC_B}, {false, 0, KC_A} +}; + +static inline void start_idle_timer(void) { + idle_timer = timer_read(); + timeout_is_active = true; +} +static inline void clear_state_after_idle_timeout(void) { + idle_timer = 0; + timeout_is_active = false; + + // send timed out plain keys from tapping ctrl mod + for (int i = 0; i < N_TAPPING_CTRL_KEYS; ++i) { + struct Tapping_ctrl_key_t* key = special_keys_g + i; + repeat_send_keys(key->count, key->keycode); + key->count = 0; + } +} + +inline void matrix_scan_user(void) { + if (timeout_is_active && timer_elapsed(idle_timer) > TIMEOUT_DELAY) { + clear_state_after_idle_timeout(); + } +} + +static inline bool tap_ctrl_event(struct Tapping_ctrl_key_t* key, keyrecord_t* record) { + if (!ctrl_shortcuts_enabled_g) { + // normal operation, just send the plain keycode + if (record->event.pressed) { + register_code(key->keycode); + } + else { + unregister_code(key->keycode); + } + return false; + } + key->down = record->event.pressed; + // increment count and reset timer when key pressed + // start the timeout when released + if (key->down) { + ++(key->count); + timeout_is_active = false; + idle_timer = 0; + } + else { + if (key->count) { + start_idle_timer(); + } + } + return false; +} + +static inline bool tap_ctrl_other_pressed(void) { + for (int i = 0; i < N_TAPPING_CTRL_KEYS; ++i) { + struct Tapping_ctrl_key_t* key = special_keys_g + i; + if (key->count) { + if (key->down) { + // another key has been pressed while the leader key is down, + // so send number of ctrl-KEY combos before the other key + repeat_send_keys(key->count, KC_LCTL, key->keycode); + key->count = 0; + } + else { + // another key pressed after leader key released, + // need to send the plain keycode plus potential mods + if (get_mods() & MOD_MASK_CTRL) { + // make sure to send a shift if prssed + repeat_send_keys(key->count, KC_RSHIFT, key->keycode); + } + else { + repeat_send_keys(key->count, key->keycode); + } + key->count = 0; + } + return true; // will send the other keycode + } + } + return true; // safe default +} +#endif /* TWSCHUM_TAPPING_CTRL_PREFIX */ + + +/* Use RGB underglow to indicate layer + * https://docs.qmk.fm/reference/customizing-functionality + */ +// add to quantum/rgblight_list.h +#ifdef RGBLIGHT_ENABLE +static bool rgb_layers_enabled = true; +static bool rgb_L0_enabled = false; + +layer_state_t layer_state_set_user(layer_state_t state) { + if (!rgb_layers_enabled) { + return state; + } + switch (get_highest_layer(state)) { + case _Base: + if (rgb_L0_enabled) { + rgblight_sethsv_noeeprom(_Base_HSV_ON); + } + else { + rgblight_sethsv_noeeprom(_Base_HSV_OFF); + } + break; + case _Vim: + rgblight_sethsv_noeeprom(_Vim_HSV); + break; + case _Fn: + rgblight_sethsv_noeeprom(_Fn_HSV); + break; + case _Nav: + rgblight_sethsv_noeeprom(_Nav_HSV); + break; + case _Num: + rgblight_sethsv_noeeprom(_Num_HSV); + break; + case _Cfg: + rgblight_sethsv_noeeprom(_Cfg_HSV); + break; + case _None: + rgblight_sethsv_noeeprom(_None_HSV); + break; + } + return state; +} +#endif /* RGBLIGHT_ENABLE */ + +/* process_record_vimlayer: handles the VIM_ keycodes from xtonhasvim's vim + * emulation layer + * add process_record_keymap to allow specific keymap to still add keys + * Makes the callstack look like: + * process_record_ + * _quantum + * _kb + * _user + * _keymap + * _vimlayer + */ +__attribute__ ((weak)) +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + return true; +} + +/* Return True to continue processing keycode, false to stop further processing + * process_record_keymap to be call by process_record_user in the vim addon */ +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + + /* keymap gets first whack, then vimlayer */ + if(!process_record_keymap(keycode, record)) return false; + if(!process_record_vimlayer(keycode, record)) return false; + + switch (keycode) { + /* KC_MAKE is a keycode to be used with any keymap + * Outputs `make :` + * Holding shift will add the appropriate flashing command (:dfu, + * :teensy, :avrdude, :dfu-util) for a majority of keyboards. + * Holding control will add some commands that will speed up compiling + * time by processing multiple files at once + * For the boards that lack a shift key, or that you want to always + * attempt the flashing part, you can add FLASH_BOOTLOADER = yes to the + * rules.mk of that keymap. + */ + case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader + if (!record->event.pressed) { + uint8_t temp_mod = get_mods(); + uint8_t temp_osm = get_oneshot_mods(); + clear_mods(); clear_oneshot_mods(); + SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP); + #ifndef FLASH_BOOTLOADER + if ( (temp_mod | temp_osm) & MOD_MASK_SHIFT ) { + SEND_STRING(":flash"); + } + #endif + if ( (temp_mod | temp_osm) & MOD_MASK_CTRL) { + SEND_STRING(" -j8 --output-sync"); + } + SEND_STRING(SS_TAP(X_ENTER)); + set_mods(temp_mod); + } + break; + + #ifdef RGBLIGHT_ENABLE + case TG_LAYER_RGB: + if (record->event.pressed) { + rgb_layers_enabled = !rgb_layers_enabled; + } + return false; + case TG_L0_RGB: + if (record->event.pressed) { + rgb_L0_enabled = !rgb_L0_enabled; + } + return false; + #endif + + case SALT_CMD: + if (!record->event.pressed) { + SEND_STRING(SALT_CMD_MACRO); + } + return false; + case LESS_PD: + if (!record->event.pressed) { + SEND_STRING(LESS_PD_MACRO); + } + return false; + case CODE_PASTE: + if (!record->event.pressed) { + SEND_STRING(CODE_PASTE_MACRO); + } + return false; + + #ifdef TWSCHUM_TAPPING_CTRL_PREFIX + case EN_CTRL_SHORTCUTS: + if (record->event.pressed) { + ctrl_shortcuts_enabled_g = !ctrl_shortcuts_enabled_g; + start_idle_timer(); // need to clear out state in some cases + } + return false; + case CTRL_A: + return tap_ctrl_event(&special_keys_g[1], record); + case CTRL_B: + return tap_ctrl_event(&special_keys_g[0], record); + default: + if (record->event.pressed) { + return tap_ctrl_other_pressed(); + } + #endif + } + return true; +} + +#ifdef RGBLIGHT_ENABLE +void matrix_init_user(void) { + // called once on board init + rgblight_enable(); +} +#endif + +void suspend_power_down_user(void) { + // TODO shut off backlighting +} + +void suspend_wakeup_init_user(void) { + // TODO turn on backlighting +} diff --git a/users/twschum/twschum.h b/users/twschum/twschum.h new file mode 100644 index 0000000000..e8c9aeffcd --- /dev/null +++ b/users/twschum/twschum.h @@ -0,0 +1,131 @@ +#pragma once +#include +#include "quantum.h" +#include "xtonhasvim.h" + +/************************** + * QMK Features Used + ************************** + * RGBLIGHT_ENABLE + * - Adds layer indication via RGB underglow + * - see the `layer_definitions` enum and following _*_HSV #defines + * + * + * + ************************** + * Custom Feature Flags + ************************** + * + * TWSCHUM_TAPPING_CTRL_PREFIX + * - Adds feature that makes sending nested sequences of C-a, C-b[, C-b, ...] + * as simple as C-a b [b ...] + * - Not necessarily super useful outside specialized nested tmux sessions, + * but it was a fun state-machine to build + * + * TWSCHUM_VIM_LAYER + * - Fork of xtonhasvim, adding vim-emulation + * + * TWSCHUM_IS_MAC + * - Flag for handling media keys and other settings between OSX and Win/Unix + * without having to include bootmagic + * + ************************** + * Features Wishlist + ************************** + * use VIM_Q as macro recorder! + * Dynamic macros + * Leader functions + * Uniicode leader commands??? (symbolic unicode) + * Mac mode vs not: -probably bootmagic or use default with dynamic swap out here + * KC_MFFD(KC_MEDIA_FAST_FORWARD) and KC_MRWD(KC_MEDIA_REWIND) instead of KC_MNXT and KC_MPRV + */ + +/* Each layer gets a color, overwritable per keyboard */ +enum layers_definitions { + _Base, + _Vim, + _Fn, + _Nav, + _Num, + _Cfg, + _None, +}; +#ifdef RGBLIGHT_ENABLE +#define _Base_HSV_ON HSV_WHITE +#define _Base_HSV_OFF 0, 0, 0 +#define _Vim_HSV HSV_ORANGE +#define _Fn_HSV HSV_GREEN +#define _Nav_HSV HSV_AZURE +#define _Num_HSV HSV_GOLD +#define _Cfg_HSV HSV_RED +#define _None_HSV HSV_WHITE +#endif + +enum extra_keycodes { + TWSCHUM_START = VIM_SAFE_RANGE, + KC_MAKE, // types the make command for this keyboard +#ifdef TWSCHUM_TAPPING_CTRL_PREFIX + CTRL_A, + CTRL_B, + EN_CTRL_SHORTCUTS, +#endif +#ifdef RGBLIGHT_ENABLE + TG_LAYER_RGB, // Toggle between standard RGB underglow, and RGB underglow to do layer indication + TG_L0_RGB, // Toggle color on or off of layer0 +#endif + SALT_CMD, // macro + LESS_PD, // macro + CODE_PASTE, // macro + KEYMAP_SAFE_RANGE, // range to start for the keymap +}; +#define SALT_CMD_MACRO "sudo salt \\* cmd.run ''"SS_TAP(X_LEFT) +#define LESS_PD_MACRO "sudo less /pipedream/cache/" +// TODO mac vs linux +#define CODE_PASTE_MACRO SS_LSFT("\n")"```"SS_LSFT("\n")SS_LALT("v")SS_LSFT("\n")"```" + + +/* PP_NARG macro returns the number of arguments passed to it. + * https://groups.google.com/forum/#!topic/comp.std.c/d-6Mj5Lko_s + */ +#define PP_NARG(...) PP_NARG_(__VA_ARGS__,PP_RSEQ_N()) +#define PP_NARG_(...) PP_ARG_N(__VA_ARGS__) +#define PP_MAX_ARGS 64 +#define PP_ARG_N( \ + _1, _2, _3, _4, _5, _6, _7, _8, _9,_10, \ + _11,_12,_13,_14,_15,_16,_17,_18,_19,_20, \ + _21,_22,_23,_24,_25,_26,_27,_28,_29,_30, \ + _31,_32,_33,_34,_35,_36,_37,_38,_39,_40, \ + _41,_42,_43,_44,_45,_46,_47,_48,_49,_50, \ + _51,_52,_53,_54,_55,_56,_57,_58,_59,_60, \ + _61,_62,_63,N,...) N +#define PP_RSEQ_N() 63,62,61,60, \ + 59,58,57,56,55,54,53,52,51,50, \ + 49,48,47,46,45,44,43,42,41,40, \ + 39,38,37,36,35,34,33,32,31,30, \ + 29,28,27,26,25,24,23,22,21,20, \ + 19,18,17,16,15,14,13,12,11,10, \ + 9,8,7,6,5,4,3,2,1,0 + +#define send_keys(...) send_n_keys(PP_NARG(__VA_ARGS__), __VA_ARGS__) +static inline void send_n_keys(int n, ...) { + uint8_t i = 0; + uint16_t keycodes[PP_MAX_ARGS]; + va_list keys; + va_start(keys, n); + for (; i < n; ++i) { + keycodes[i] = (uint16_t)va_arg(keys, int); // cast suppresses warning + register_code(keycodes[i]); + } + for (; n > 0; --n) { + unregister_code(keycodes[n-1]); + } + va_end(keys); +} +#define repeat_send_keys(n, ...) {for (int i=0; i < n; ++i) {send_keys(__VA_ARGS__);}} + +/* State functions for nested c-a & c-b leader keystrokes */ +struct Tapping_ctrl_key_t { + bool down; + int8_t count; + const uint16_t keycode; +}; diff --git a/users/twschum/xtonhasvim.c b/users/twschum/xtonhasvim.c new file mode 100644 index 0000000000..a1adf39f04 --- /dev/null +++ b/users/twschum/xtonhasvim.c @@ -0,0 +1,593 @@ + /* Copyright 2015-2017 Christon DeWan * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "xtonhasvim.h" + + +uint16_t vstate = VIM_START; +static bool yank_was_lines = false; +static bool SHIFTED = false; +static uint32_t mod_override_layer_state = 0; +static uint16_t mod_override_triggering_key = 0; + +static void edit(void) { vstate = VIM_START; layer_clear(); } +#define EDIT edit() + + +static void simple_movement(uint16_t keycode) { + switch(keycode) { + case VIM_B: + register_code(KC_LALT); + tap_code16(LSFT(KC_LEFT)); // select to start of this word + unregister_code(KC_LALT); + break; + case VIM_E: + register_code(KC_LALT); + tap_code16(LSFT(KC_RIGHT)); // select to end of this word + unregister_code(KC_LALT); + break; + case VIM_H: + tap_code16(LSFT(KC_LEFT)); + break; + case VIM_J: + tap_code16(LGUI(KC_LEFT)); + tap_code16(LSFT(KC_DOWN)); + tap_code16(LSFT(KC_DOWN)); + break; + case VIM_K: + tap_code16(LGUI(KC_LEFT)); + tap_code(KC_DOWN); + tap_code16(LSFT(KC_UP)); + tap_code16(LSFT(KC_UP)); + break; + case VIM_L: + tap_code16(LSFT(KC_RIGHT)); + break; + case VIM_W: + register_code(KC_LALT); + tap_code16(LSFT(KC_RIGHT)); // select to end of this word + tap_code16(LSFT(KC_RIGHT)); // select to end of next word + tap_code16(LSFT(KC_LEFT)); // select to start of next word + unregister_code(KC_LALT); + break; + } +} + +static void comma_period(uint16_t keycode) { + switch (keycode) { + case VIM_COMMA: + if (SHIFTED) { + // indent + tap_code16(LGUI(KC_LBRACKET)); + } else { + // toggle comment + tap_code16(LGUI(KC_SLASH)); + } + break; + case VIM_PERIOD: + if (SHIFTED) { + // outdent + tap_code16(LGUI(KC_RBRACKET)); + } + break; + } +} + + +bool process_record_vimlayer(uint16_t keycode, keyrecord_t *record) { + + /****** mod passthru *****/ + if(record->event.pressed && layer_state_is(vim_cmd_layer()) && (IS_MOD(keycode) || keycode == LSFT(KC_LALT))) { + mod_override_layer_state = layer_state; + mod_override_triggering_key = keycode; + // TODO: change this to track key location instead + layer_clear(); + return true; // let the event fall through... + } + if(mod_override_layer_state && !record->event.pressed && keycode == mod_override_triggering_key) { + layer_state_set(mod_override_layer_state); + mod_override_layer_state = 0; + mod_override_triggering_key = 0; + return true; + } + + if (VIM_START <= keycode && keycode <= VIM_ESC) { + if(keycode == VIM_SHIFT) { + SHIFTED = record->event.pressed; + return false; + } + + if (record->event.pressed) { + if(keycode == VIM_START) { + // entry from anywhere + layer_on(vim_cmd_layer()); + vstate = VIM_START; + + // reset state + yank_was_lines = false; + SHIFTED = false; + mod_override_layer_state = 0; + mod_override_triggering_key = 0; + + return false; + } + switch(vstate) { + case VIM_START: + switch(keycode){ + /***************************** + * ground state + *****************************/ + case VIM_A: + if(SHIFTED) { + // tap_code16(LGUI(KC_RIGHT)); + tap_code16(LCTL(KC_E)); + } else { + tap_code(KC_RIGHT); + } + EDIT; + break; + case VIM_B: + register_code(KC_LALT); + register_code(KC_LEFT); + break; + case VIM_C: + if(SHIFTED) { + register_code(KC_LSHIFT); + tap_code16(LGUI(KC_RIGHT)); + unregister_code(KC_LSHIFT); + tap_code16(LGUI(KC_X)); + yank_was_lines = false; + EDIT; + } else { + vstate = VIM_C; + } + break; + case VIM_D: + if(SHIFTED) { + tap_code16(LCTL(KC_K)); + } else { + vstate = VIM_D; + } + break; + case VIM_E: + register_code(KC_LALT); + register_code(KC_RIGHT); + break; + case VIM_G: + if(SHIFTED) { + tap_code(KC_END); + } else { + vstate = VIM_G; + } + break; + case VIM_H: + register_code(KC_LEFT); + break; + case VIM_I: + if(SHIFTED){ + tap_code16(LCTL(KC_A)); + } + EDIT; + break; + case VIM_J: + if(SHIFTED) { + tap_code16(LGUI(KC_RIGHT)); + tap_code(KC_DEL); + } else { + register_code(KC_DOWN); + } + break; + case VIM_K: + register_code(KC_UP); + break; + case VIM_L: + register_code(KC_RIGHT); + break; + case VIM_O: + if(SHIFTED) { + tap_code16(LGUI(KC_LEFT)); + tap_code(KC_ENTER); + tap_code(KC_UP); + EDIT; + } else { + tap_code16(LGUI(KC_RIGHT)); + tap_code(KC_ENTER); + EDIT; + } + break; + case VIM_P: + if(SHIFTED) { + tap_code16(LGUI(KC_LEFT)); + tap_code16(LGUI(KC_V)); + } else { + if(yank_was_lines) { + tap_code16(LGUI(KC_RIGHT)); + tap_code(KC_RIGHT); + tap_code16(LGUI(KC_V)); + } else { + tap_code16(LGUI(KC_V)); + } + } + break; + case VIM_S: + // s for substitute? + if(SHIFTED) { + tap_code16(LGUI(KC_LEFT)); + register_code(KC_LSHIFT); + tap_code16(LGUI(KC_RIGHT)); + unregister_code(KC_LSHIFT); + tap_code16(LGUI(KC_X)); + yank_was_lines = false; + EDIT; + } else { + tap_code16(LSFT(KC_RIGHT)); + tap_code16(LGUI(KC_X)); + yank_was_lines = false; + EDIT; + } + break; + case VIM_U: + if(SHIFTED) { + register_code(KC_LSFT); + tap_code16(LGUI(KC_Z)); + unregister_code(KC_LSHIFT); + } else { + tap_code16(LGUI(KC_Z)); + } + break; + case VIM_V: + if(SHIFTED) { + tap_code16(LGUI(KC_LEFT)); + tap_code16(LSFT(KC_DOWN)); + vstate = VIM_VS; + } else { + vstate = VIM_V; + } + break; + case VIM_W: + register_code(KC_LALT); + tap_code(KC_RIGHT); + tap_code(KC_RIGHT); + tap_code(KC_LEFT); + unregister_code(KC_LALT); + break; + case VIM_X: + // tap_code16(LSFT(KC_RIGHT)); + // tap_code16(LGUI(KC_X)); + register_code(KC_DEL); + break; + case VIM_Y: + if(SHIFTED) { + tap_code16(LGUI(KC_LEFT)); + tap_code16(LSFT(KC_DOWN)); + tap_code16(LGUI(KC_C)); + tap_code(KC_RIGHT); + yank_was_lines = true; + } else { + vstate = VIM_Y; + } + break; + case VIM_COMMA: + case VIM_PERIOD: + comma_period(keycode); + break; + } + break; + case VIM_C: + /***************************** + * c- ...for change. I never use this... + *****************************/ + switch(keycode) { + case VIM_B: + case VIM_E: + case VIM_H: + case VIM_J: + case VIM_K: + case VIM_L: + case VIM_W: + simple_movement(keycode); + tap_code16(LGUI(KC_X)); + yank_was_lines = false; + EDIT; + break; + + case VIM_C: + tap_code16(LGUI(KC_LEFT)); + register_code(KC_LSHIFT); + tap_code16(LGUI(KC_RIGHT)); + unregister_code(KC_LSHIFT); + tap_code16(LGUI(KC_X)); + yank_was_lines = false; + EDIT; + break; + case VIM_I: + vstate = VIM_CI; + break; + default: + vstate = VIM_START; + break; + } + break; + case VIM_CI: + /***************************** + * ci- ...change inner word + *****************************/ + switch(keycode) { + case VIM_W: + tap_code16(LALT(KC_LEFT)); + register_code(KC_LSHIFT); + tap_code16(LALT(KC_RIGHT)); + unregister_code(KC_LSHIFT); + tap_code16(LGUI(KC_X)); + yank_was_lines = false; + EDIT; + default: + vstate = VIM_START; + break; + } + break; + case VIM_D: + /***************************** + * d- ...delete stuff + *****************************/ + switch(keycode) { + case VIM_B: + case VIM_E: + case VIM_H: + case VIM_J: + case VIM_K: + case VIM_L: + case VIM_W: + simple_movement(keycode); + tap_code16(LGUI(KC_X)); + yank_was_lines = false; + vstate = VIM_START; + break; + case VIM_D: + tap_code16(LGUI(KC_LEFT)); + tap_code16(LSFT(KC_DOWN)); + tap_code16(LGUI(KC_X)); + yank_was_lines = true; + vstate = VIM_START; + break; + case VIM_I: + vstate = VIM_DI; + break; + default: + vstate = VIM_START; + break; + } + break; + case VIM_DI: + /***************************** + * ci- ...delete a word... FROM THE INSIDE! + *****************************/ + switch(keycode) { + case VIM_W: + tap_code16(LALT(KC_LEFT)); + register_code(KC_LSHIFT); + tap_code16(LALT(KC_RIGHT)); + unregister_code(KC_LSHIFT); + tap_code16(LGUI(KC_X)); + yank_was_lines = false; + vstate = VIM_START; + default: + vstate = VIM_START; + break; + } + break; + case VIM_V: + /***************************** + * visual! + *****************************/ + switch(keycode) { + case VIM_D: + case VIM_X: + tap_code16(LGUI(KC_X)); + yank_was_lines = false; + vstate = VIM_START; + break; + case VIM_B: + register_code(KC_LALT); + register_code(KC_LSHIFT); + register_code(KC_LEFT); + // leave open for key repeat + break; + case VIM_E: + register_code(KC_LALT); + register_code(KC_LSHIFT); + register_code(KC_RIGHT); + // leave open for key repeat + break; + case VIM_H: + register_code(KC_LSHIFT); + register_code(KC_LEFT); + break; + case VIM_I: + vstate = VIM_VI; + break; + case VIM_J: + register_code(KC_LSHIFT); + register_code(KC_DOWN); + break; + case VIM_K: + register_code(KC_LSHIFT); + register_code(KC_UP); + break; + case VIM_L: + register_code(KC_LSHIFT); + register_code(KC_RIGHT); + break; + case VIM_W: + register_code(KC_LALT); + tap_code16(LSFT(KC_RIGHT)); // select to end of this word + tap_code16(LSFT(KC_RIGHT)); // select to end of next word + tap_code16(LSFT(KC_LEFT)); // select to start of next word + unregister_code(KC_LALT); + break; + case VIM_P: + tap_code16(LGUI(KC_V)); + vstate = VIM_START; + break; + case VIM_Y: + tap_code16(LGUI(KC_C)); + tap_code(KC_RIGHT); + yank_was_lines = false; + vstate = VIM_START; + break; + case VIM_V: + case VIM_ESC: + tap_code(KC_RIGHT); + vstate = VIM_START; + break; + case VIM_COMMA: + case VIM_PERIOD: + comma_period(keycode); + break; + default: + // do nothing + break; + } + break; + case VIM_VI: + /***************************** + * vi- ...select a word... FROM THE INSIDE! + *****************************/ + switch(keycode) { + case VIM_W: + tap_code16(LALT(KC_LEFT)); + register_code(KC_LSHIFT); + tap_code16(LALT(KC_RIGHT)); + unregister_code(KC_LSHIFT); + vstate = VIM_V; + default: + // ignore + vstate = VIM_V; + break; + } + break; + case VIM_VS: + /***************************** + * visual line + *****************************/ + switch(keycode) { + case VIM_D: + case VIM_X: + tap_code16(LGUI(KC_X)); + yank_was_lines = true; + vstate = VIM_START; + break; + case VIM_J: + register_code(KC_LSHIFT); + register_code(KC_DOWN); + break; + case VIM_K: + register_code(KC_LSHIFT); + register_code(KC_UP); + break; + case VIM_Y: + tap_code16(LGUI(KC_C)); + yank_was_lines = true; + tap_code(KC_RIGHT); + vstate = VIM_START; + break; + case VIM_P: + tap_code16(LGUI(KC_V)); + vstate = VIM_START; + break; + case VIM_V: + case VIM_ESC: + tap_code(KC_RIGHT); + vstate = VIM_START; + break; + case VIM_COMMA: + case VIM_PERIOD: + comma_period(keycode); + break; + default: + // do nothing + break; + } + break; + case VIM_G: + /***************************** + * gg, and a grab-bag of other macros i find useful + *****************************/ + switch(keycode) { + case VIM_G: + tap_code(KC_HOME); + break; + // codes b + case VIM_H: + tap_code16(LCTL(KC_A)); + break; + case VIM_J: + register_code(KC_PGDN); + break; + case VIM_K: + register_code(KC_PGUP); + break; + case VIM_L: + tap_code16(LCTL(KC_E)); + break; + default: + // do nothing + break; + } + vstate = VIM_START; + break; + case VIM_Y: + /***************************** + * yoink! + *****************************/ + switch(keycode) { + case VIM_B: + case VIM_E: + case VIM_H: + case VIM_J: + case VIM_K: + case VIM_L: + case VIM_W: + simple_movement(keycode); + tap_code16(LGUI(KC_C)); + tap_code(KC_RIGHT); + yank_was_lines = false; + break; + case VIM_Y: + tap_code16(LGUI(KC_LEFT)); + tap_code16(LSFT(KC_DOWN)); + tap_code16(LGUI(KC_C)); + tap_code(KC_RIGHT); + yank_was_lines = true; + break; + default: + // NOTHING + break; + } + vstate = VIM_START; + break; + } + } else { + /************************ + * key unregister_code events + ************************/ + clear_keyboard(); + } + return false; + } else { + return true; + } +} + diff --git a/users/twschum/xtonhasvim.h b/users/twschum/xtonhasvim.h new file mode 100644 index 0000000000..fd9ebd4f03 --- /dev/null +++ b/users/twschum/xtonhasvim.h @@ -0,0 +1,62 @@ + /* Copyright 2015-2017 Christon DeWan + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef USERSPACE +#define USERSPACE + +#include QMK_KEYBOARD_H + +enum xtonhasvim_keycodes { + VIM_START = SAFE_RANGE, // bookend for vim states + VIM_A, + VIM_B, + VIM_C, + VIM_CI, + VIM_D, + VIM_DI, + VIM_E, + VIM_H, + VIM_G, + VIM_I, + VIM_J, + VIM_K, + VIM_L, + VIM_O, + VIM_P, + VIM_S, + VIM_U, + VIM_V, + VIM_VS, // visual-line + VIM_VI, + VIM_W, + VIM_X, + VIM_Y, + VIM_PERIOD, // to support indent/outdent + VIM_COMMA, // and toggle comments + VIM_SHIFT, // avoid side-effect of supporting real shift. + VIM_ESC, // bookend + VIM_SAFE_RANGE // start other keycodes here. +}; + +bool process_record_vimlayer(uint16_t keycode, keyrecord_t *record); + +// NOTE: Define this in keymap.c to return vim layer +extern uint8_t vim_cmd_layer(void); + +extern uint16_t vstate; + + +#endif