From 9689944c16a5cda459801c9d77a34dc8a6be01b3 Mon Sep 17 00:00:00 2001 From: WillyPillow Date: Mon, 30 Apr 2018 23:40:34 +0800 Subject: [PATCH 01/34] Clean up v60_type_r keyboard (#2848) * Use *_kb instead of *_user in keyboard config * Place POLESTAR-only #includes in its #ifdef --- keyboards/v60_type_r/v60_type_r.c | 55 +++++-------------------------- keyboards/v60_type_r/v60_type_r.h | 4 +-- 2 files changed, 11 insertions(+), 48 deletions(-) diff --git a/keyboards/v60_type_r/v60_type_r.c b/keyboards/v60_type_r/v60_type_r.c index 016348db9f7..86d87e12da2 100644 --- a/keyboards/v60_type_r/v60_type_r.c +++ b/keyboards/v60_type_r/v60_type_r.c @@ -15,25 +15,28 @@ */ #include "v60_type_r.h" +#include "quantum.h" + +// if we've got an RGB underglow! +#ifdef V60_POLESTAR + #include "rgblight.h" #include #include "action_layer.h" -#include "quantum.h" -// if we've got an RGB underglow! -#ifdef V60_POLESTAR #define SOFTPWM_LED_TIMER_TOP F_CPU/(256*64) extern rgblight_config_t rgblight_config; static uint8_t softpwm_buff[3] = {0}; -void matrix_init_user(void) { +void matrix_init_kb(void) { rgb_init(); + matrix_init_user(); } -bool process_record_user(uint16_t keycode, keyrecord_t *record) { +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { uint8_t r = led[0].r, g = led[0].g, b = led[0].b; switch(keycode) { case RGB_RI: @@ -98,7 +101,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; } - return true; + return process_record_user(keycode, record); } @@ -188,44 +191,4 @@ ISR(TIMER1_COMPA_vect) softpwm_buff[2] = led[0].b; } } -#else - -void matrix_init_user(void) { -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - #endif // V60_POLESTAR - -// we need these functions for both versions -void led_set_kb(uint8_t usb_led) { - // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here - - led_set_user(usb_led); -} - -void matrix_scan_user(void) { -} - -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - - matrix_init_user(); -} - -void matrix_scan_kb(void) { - // put your looping keyboard code here - // runs every cycle (a lot) - - matrix_scan_user(); -} - -bool process_record_kb(uint16_t keycode, keyrecord_t *record) { - // put your per-action keyboard code here - // runs for every action, just before processing by the firmware - - return process_record_user(keycode, record); -} diff --git a/keyboards/v60_type_r/v60_type_r.h b/keyboards/v60_type_r/v60_type_r.h index d65df2b3fd1..3d7aef7eaf0 100644 --- a/keyboards/v60_type_r/v60_type_r.h +++ b/keyboards/v60_type_r/v60_type_r.h @@ -18,10 +18,10 @@ #include "quantum.h" -#include "rgblight.h" - #ifdef V60_POLESTAR +#include "rgblight.h" + void rgb_init(void); void set_rgb_color(uint8_t pin, uint8_t value, uint8_t timer_value); From f31a8f2738d45cc49ad7aba7b4255708a032882d Mon Sep 17 00:00:00 2001 From: Ben Date: Tue, 1 May 2018 17:29:43 +0200 Subject: [PATCH 02/34] Add DZ60 ANSI layout with arrows and F keys (#2839) * Add DZ60 ANSI layout with arrows and F keys I testet the keymap on my dz60 keyboard. * added new layout syntax and a readme * fix typo in readme --- .../keymaps/60_ansi_arrow_fkeys/README.md | 33 +++++++ .../dz60/keymaps/60_ansi_arrow_fkeys/keymap.c | 86 +++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 keyboards/dz60/keymaps/60_ansi_arrow_fkeys/README.md create mode 100644 keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c diff --git a/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/README.md b/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/README.md new file mode 100644 index 00000000000..3a4218a7c21 --- /dev/null +++ b/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/README.md @@ -0,0 +1,33 @@ +### 0 Qwerty +``` +,-----------------------------------------------------------------------------------------. +| ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc | +|-----------------------------------------------------------------------------------------+ +| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | +|-----------------------------------------------------------------------------------------+ +| Caps | A | S | D | F | G | H | J | K | L | ; | ' | Enter | +|-----------------------------------------------------------------------------------------+ +| Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | DEL | +|-----------------------------------------------------------------------------------------+ +| Ctrl | Cmd | Alt | Space | RAlt | FN | L | D | R | +`-----------------------------------------------------------------------------------------' +``` + +### 1 FN Layer +``` +FN Layer +,-----------------------------------------------------------------------------------------. +| Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | RESET | +|-----------------------------------------------------------------------------------------+ +| |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | | +|-----------------------------------------------------------------------------------------+ +| | BL T| BL M| BL+ | BL- | | | | | | | | | +|-----------------------------------------------------------------------------------------+ +| | | | | | | | | | | | | | | +|-----------------------------------------------------------------------------------------+ +| | | | | | | | | | +`-----------------------------------------------------------------------------------------' +``` + +`FN`+`ESC`=backtick +`Shift`+`ESC`=`˜` diff --git a/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c b/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c new file mode 100644 index 00000000000..76804670c87 --- /dev/null +++ b/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c @@ -0,0 +1,86 @@ +#include QMK_KEYBOARD_H + +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +#define ______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Qwerty + * ,-----------------------------------------------------------------------------------------. + * | ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc | + * |-----------------------------------------------------------------------------------------+ + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | + * |-----------------------------------------------------------------------------------------+ + * | Caps | A | S | D | F | G | H | J | K | L | ; | ' | Enter | + * |-----------------------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | DEL | + * |-----------------------------------------------------------------------------------------+ + * | Ctrl | Cmd | Alt | Space | RAlt | FN | L | D | R | + * `-----------------------------------------------------------------------------------------' + */ + + LAYOUT_2_shifts( + F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, + KC_LSFT, ______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT + ), + + /* FN Layer + * ,-----------------------------------------------------------------------------------------. + * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | RESET | + * |-----------------------------------------------------------------------------------------+ + * | |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | BL T| BL M| BL+ | BL- | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | | | | | | + * |-----------------------------------------------------------------------------------------+ + * | | | | | | | | | | + * `-----------------------------------------------------------------------------------------' + */ + + LAYOUT_directional( + 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_TRNS, RESET, + ______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, ______, ______, ______, ______, ______, + ______, BL_TOGG, BL_STEP, BL_INC, BL_DEC, ______, ______, ______, ______, ______, ______, ______, + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______ + ), +}; + +enum function_id { + SHIFT_ESC, +}; + +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(SHIFT_ESC), +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t shift_esc_shift_mask; + switch (id) { + case SHIFT_ESC: + shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; + if (record->event.pressed) { + if (shift_esc_shift_mask) { + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + if (shift_esc_shift_mask) { + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +} From 7a57446f5e0f6044b4e934138edf9fe19177d319 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Tue, 1 May 2018 08:31:41 -0700 Subject: [PATCH 03/34] new layout for iso and arrows (#2865) --- keyboards/dz60/dz60.h | 14 ++++++++++++++ keyboards/dz60/info.json | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/keyboards/dz60/dz60.h b/keyboards/dz60/dz60.h index 0ebf8d212e4..b86e5fb8da1 100644 --- a/keyboards/dz60/dz60.h +++ b/keyboards/dz60/dz60.h @@ -77,5 +77,19 @@ { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \ } +#define LAYOUT_all( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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, K214, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, 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, K013, 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, K214 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \ + { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \ +} + #endif diff --git a/keyboards/dz60/info.json b/keyboards/dz60/info.json index b39bdb000f1..c5c6182bfc6 100644 --- a/keyboards/dz60/info.json +++ b/keyboards/dz60/info.json @@ -23,6 +23,10 @@ "LAYOUT_directional": { "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}] + }, + + "LAYOUT_all": { + "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}] } } } From bde1c9d909ae7d226198c45bbf314569e82ca1ee Mon Sep 17 00:00:00 2001 From: Anthony Metcalf Date: Tue, 1 May 2018 16:34:06 +0100 Subject: [PATCH 04/34] Keymap file to match the TMK the board came flashed with (#2868) * Made the keymap file match the TMK the board UT47 was origonally flashed with using native QMK codes. * Add non-us layout --- keyboards/ut47/keymaps/default/keymap.c | 8 +- keyboards/ut47/keymaps/non-us/config.h | 24 +++++ keyboards/ut47/keymaps/non-us/keymap.c | 136 ++++++++++++++++++++++++ keyboards/ut47/keymaps/non-us/readme.md | 19 ++++ 4 files changed, 183 insertions(+), 4 deletions(-) create mode 100644 keyboards/ut47/keymaps/non-us/config.h create mode 100644 keyboards/ut47/keymaps/non-us/keymap.c create mode 100644 keyboards/ut47/keymaps/non-us/readme.md diff --git a/keyboards/ut47/keymaps/default/keymap.c b/keyboards/ut47/keymaps/default/keymap.c index 3f065b615f7..6b6bb025b19 100644 --- a/keyboards/ut47/keymaps/default/keymap.c +++ b/keyboards/ut47/keymaps/default/keymap.c @@ -69,9 +69,9 @@ LAYOUT( /* Right */ /* FN Layer 2 * ,-------------------------------------------------------------------------. - * | FN6 | FN7 | FN8 | FN9 | FN9 | FN10| FN11| FN12| FN13| FN14| FN15| Delete| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |Delete| * |-------------------------------------------------------------------------+ - * | | | | | | | | FN17| FN18| FN19| FN20| FN21| + * | | | | | | | | _ | + | { | } | | | * |-------------------------------------------------------------------------+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | | * |-------------------------------------------------------------------------+ @@ -80,8 +80,8 @@ LAYOUT( /* Right */ */ LAYOUT( /* Left */ - KC_FN6, KC_FN7, KC_FN8, KC_FN9, KC_FN10, KC_FN11, KC_FN12, KC_FN13, KC_FN14, KC_FN15, KC_FN16, KC_DELETE, - _______, _______, _______, _______, _______, _______, _______, KC_FN17, KC_FN18, KC_FN19, KC_FN20, KC_FN21, + KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_DELETE, + _______, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END ), diff --git a/keyboards/ut47/keymaps/non-us/config.h b/keyboards/ut47/keymaps/non-us/config.h new file mode 100644 index 00000000000..46098a22fb2 --- /dev/null +++ b/keyboards/ut47/keymaps/non-us/config.h @@ -0,0 +1,24 @@ +/* Copyright 2018 Carlos Filoteo + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "config_common.h" + +// place overrides here + +#endif diff --git a/keyboards/ut47/keymaps/non-us/keymap.c b/keyboards/ut47/keymaps/non-us/keymap.c new file mode 100644 index 00000000000..1cb537b7d00 --- /dev/null +++ b/keyboards/ut47/keymaps/non-us/keymap.c @@ -0,0 +1,136 @@ +/* Copyright 2018 Carlos Filoteo + * + * 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 QMK_KEYBOARD_H +#ifdef LED_ENABLE + #include "protocol/serial.h" +#endif + +#define _______ KC_TRNS +#define LT3_TAB LT(3, KC_TAB) +#define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT) + +enum custom_keycodes { + LED_TOG = SAFE_RANGE, + LED_CHG +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Base Layer + * ,-------------------------------------------------------------------------. + * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace | + * |-------------------------------------------------------------------------+ + * |Tab/L3| A | S | D | F | G | H | J | K | L | ; | ' | + * |-------------------------------------------------------------------------+ + * | Shift | Z | X | C | V | B | N | M | , | . | / |Sh/En| + * |-------------------------------------------------------------------------+ + * | Ctrl| Alt | Gui | App | L2 | Space | L1 | Left| Down| Up |Right| + * `-------------------------------------------------------------------------' + */ + +LAYOUT( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + LT3_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT_RSFT_ENT, + KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(2), KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +), + + /* FN Layer 1 + * ,-------------------------------------------------------------------------. + * | ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Delete| + * |-------------------------------------------------------------------------+ + * | | | | | | | # | - | = | [ | ] | \ | + * |-------------------------------------------------------------------------+ + * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | | + * |-------------------------------------------------------------------------+ + * | | | |Capsl| | | | Home| PgDn| PgUp| End | + * `-------------------------------------------------------------------------' + */ + +LAYOUT( /* Right */ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE, + _______, _______, _______, _______, _______, _______, KC_NUHS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_NUBS, + _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______, + _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END +), + + /* FN Layer 2 + * ,-------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |Delete| + * |-------------------------------------------------------------------------+ + * | | | | | | | | _ | + | { | } | | | + * |-------------------------------------------------------------------------+ + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | | + * |-------------------------------------------------------------------------+ + * | | | |Capsl| | | | Home| PgDn| PgUp| End | + * `-------------------------------------------------------------------------' + */ + +LAYOUT( /* Left */ + KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_DELETE, + _______, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE, + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, + _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END +), + + /* FN Layer 2 + * ,-------------------------------------------------------------------------. + * | Esc | Calc|Webhm| Mail| Comp| | | | | |PrtSc| | + * |-------------------------------------------------------------------------+ + * | | | | | | | | | | | | | + * |-------------------------------------------------------------------------+ + * | |LEDtg|LEDch| | | | | | | | | | + * |-------------------------------------------------------------------------+ + * | | | | | | | |MousL|MousD|MousU|MousR| + * `-------------------------------------------------------------------------' + */ + +LAYOUT( /* Tab */ + KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, LED_TOG, LED_CHG, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R +), +}; + +//LED keymap functions + #ifdef LED_ENABLE +void led_chmode(void) { + serial_send(101); +} + +void led_toggle(void) { + serial_send(100); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch(keycode) { + case LED_TOG: + #ifdef LED_ENABLE + led_toggle(); + #endif + return false; + case LED_CHG: + #ifdef LED_ENABLE + led_chmode(); + #endif + return false; + } + } + return true; +}; +#endif diff --git a/keyboards/ut47/keymaps/non-us/readme.md b/keyboards/ut47/keymaps/non-us/readme.md new file mode 100644 index 00000000000..e09dc73fab8 --- /dev/null +++ b/keyboards/ut47/keymaps/non-us/readme.md @@ -0,0 +1,19 @@ +# UT47 default keymap + +![UT47 layout image](https://i.imgur.com/Tsz5qsF.png) + +[KLE](http://www.keyboard-layout-editor.com/##@@_y:0%3B&=Esc&=Q&=W&=E&=R&=T&=Y&=U&=I&=O&=P&_w:1.5%3B&=Back%20Space&_x:0.25&a:4&f:4&w:4&h:4&d:true%3B&=%3Cb%3EGNAP!%3C%2F%2Fb%3E%3Cp%3E%3Cp%3EMinimum%20stagger%3Cp%3E47%20key%20layout%3B&@_a:7&f:3&w:1.25%3B&=Tab&=A&=S&=D&=F&=G&=H&=J&=K&=L&=%2F%3B&_w:1.25%3B&=%27%3B&@_w:1.5%3B&=Shift&=Z&=X&=C&=V&=B&=N&=M&=,&=.&=%2F%2F&=Return%3B&@=Ctrl&=Alt&=Super&=Menu&_w:1.25%3B&=%2F&dArr%2F%3B&_w:2%3B&=&_w:1.25%3B&=%2F&uArr%2F%3B&=%2F&larr%2F%3B&=%2F&darr%2F%3B&=%2F&uarr%2F%3B&=%2F&rarr%2F%3B%3B&=undefined) + +### LED Controls + +Use TAB+Z to cycle through brightness (8 steps) + +Use TAB+X to cycle through the following LED modes: + +- solid +- breathing +- random +- rain +- reactive +- poptang +- off From 861dc88bc2f3856acf20ccdf69fa641b365f3a6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Louren=C3=A7o=20Pinto=20Neto?= Date: Tue, 1 May 2018 12:42:21 -0300 Subject: [PATCH 05/34] New XD60 keymap (Standard/GH60 ANSI + custom Fn layer) (#2866) * XD60 standard 60% + custom Fn layer * Fixed README.MD --- keyboards/xd60/keymaps/edulpn/keymap.c | 46 +++++++++++++++++++++++++ keyboards/xd60/keymaps/edulpn/readme.md | 9 +++++ 2 files changed, 55 insertions(+) create mode 100644 keyboards/xd60/keymaps/edulpn/keymap.c create mode 100644 keyboards/xd60/keymaps/edulpn/readme.md diff --git a/keyboards/xd60/keymaps/edulpn/keymap.c b/keyboards/xd60/keymaps/edulpn/keymap.c new file mode 100644 index 00000000000..4e9b97da53c --- /dev/null +++ b/keyboards/xd60/keymaps/edulpn/keymap.c @@ -0,0 +1,46 @@ +#include "xd60.h" +#include "action_layer.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + // 0: Base Layer + LAYOUT_ALL( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \ + KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSHIFT, KC_NO, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, F(0), KC_NO, KC_RGUI, KC_RCTL), + + // 1: Function Layer + LAYOUT_ALL( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_NO, \ + KC_NO, KC_NO, KC_UP, KC_NO, KC_INSERT, KC_HOME, KC_PGUP, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_NO, KC_NO, KC_NO, \ + KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL, KC_END, KC_PGDN, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_ENT, \ + KC_LSFT, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT, KC_NO, KC_NO, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, F(0), KC_NO, KC_RGUI, KC_RCTL), + +}; + +// Custom Actions +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay +}; + +// Macros +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + + // MACRODOWN only works in this function + switch(id) { + case 0: + if (record->event.pressed) { register_code(KC_RSFT); } + else { unregister_code(KC_RSFT); } + break; + } + + return MACRO_NONE; +}; + +// Loop +void matrix_scan_user(void) { + // Empty +}; diff --git a/keyboards/xd60/keymaps/edulpn/readme.md b/keyboards/xd60/keymaps/edulpn/readme.md new file mode 100644 index 00000000000..14f7da063d1 --- /dev/null +++ b/keyboards/xd60/keymaps/edulpn/readme.md @@ -0,0 +1,9 @@ +# Edulpn Keymap for the XD60 PCB + +## Additional Notes +60% Keymap for XD60 with GH60 ANSI layout (based on Supercoffe's keymap) + customized Fn layer. + +![Edulpn Keymap for the XD60 PCB](https://i.imgur.com/PoL5qcr.png) + +## Build +To build the default keymap, simply run `make xd60:edulpn`. From f756b72167a573640d2427920603fa369c7949ae Mon Sep 17 00:00:00 2001 From: Anthony Metcalf Date: Tue, 1 May 2018 16:48:47 +0100 Subject: [PATCH 06/34] A default layout but with support for non-us keymaps (#2869) * Made the keymap file match the TMK the board UT47 was origonally flashed with using native QMK codes. * Add non-us layout From 5112af887ae59c9c54eabaec5c1ae2f5a53de180 Mon Sep 17 00:00:00 2001 From: M1K Date: Tue, 1 May 2018 18:39:46 +0100 Subject: [PATCH 07/34] Added command history to terminal with other bug fixes, added new song to song_list.h (#2855) * Implemented Terminal + added song to song_list.h * Added wait() in order to prevent misbehaviour of 'command not found' --- docs/feature_terminal.md | 31 ++++- quantum/audio/song_list.h | 6 + quantum/process_keycode/process_terminal.c | 125 ++++++++++++++++++--- 3 files changed, 146 insertions(+), 16 deletions(-) diff --git a/docs/feature_terminal.md b/docs/feature_terminal.md index 334a46c2d46..1863599f844 100644 --- a/docs/feature_terminal.md +++ b/docs/feature_terminal.md @@ -14,12 +14,14 @@ When enabled, a `> ` prompt will appear, where you'll be able to type, backspace `#define TERMINAL_HELP` enables some other output helpers that aren't really needed with this page. +Pressing "up" and "down" will allow you to cycle through the past 5 commands entered. + ## Future Ideas * Keyboard/user-extensible commands * Smaller footprint * Arrow key support -* Command history +* Command history - Done * SD card support * LCD support for buffer display * Keycode -> name string LUT @@ -43,14 +45,39 @@ QMK Firmware Built: 2017-08-29-20:24:44 ``` + +### `print-buffer` + +Outputs the last 5 commands entered + +``` +> print-buffer +0. print-buffer +1. help +2. about +3. keymap 0 +4. help +5. flush-buffer +``` + +### `flush-buffer` + +Clears command buffer +``` +> flush-buffer +Buffer cleared! +``` + + ### `help` + Prints out the available commands: ``` > help commands available: - about help keycode keymap exit + about help keycode keymap exit print-buffer flush-buffer ``` ### `keycode ` diff --git a/quantum/audio/song_list.h b/quantum/audio/song_list.h index a66c4d86445..1ddcfb345cd 100644 --- a/quantum/audio/song_list.h +++ b/quantum/audio/song_list.h @@ -20,6 +20,12 @@ #define NO_SOUND +#define LP_NUMB \ + H__NOTE(_CS5), H__NOTE(_E5), H__NOTE(_CS5), WD_NOTE(_FS5), \ + WD_NOTE(_A5), WD_NOTE(_GS5), WD_NOTE(_REST), H__NOTE(_CS5), H__NOTE(_E5), \ + H__NOTE(_CS5), WD_NOTE(_A5), WD_NOTE(_GS5), WD_NOTE(_E5), + + #define ODE_TO_JOY \ Q__NOTE(_E4), Q__NOTE(_E4), Q__NOTE(_F4), Q__NOTE(_G4), \ Q__NOTE(_G4), Q__NOTE(_F4), Q__NOTE(_E4), Q__NOTE(_D4), \ diff --git a/quantum/process_keycode/process_terminal.c b/quantum/process_keycode/process_terminal.c index deb1543e3da..bc365dddfa4 100644 --- a/quantum/process_keycode/process_terminal.c +++ b/quantum/process_keycode/process_terminal.c @@ -20,10 +20,20 @@ #include #include +#ifndef CMD_BUFF_SIZE + #define CMD_BUFF_SIZE 5 +#endif + + bool terminal_enabled = false; char buffer[80] = ""; +char cmd_buffer[CMD_BUFF_SIZE][80]; +bool cmd_buffer_enabled = true; //replace with ifdef? char newline[2] = "\n"; char arguments[6][20]; +bool firstTime = true; + +short int current_cmd_buffer_pos = 0; //used for up/down arrows - keeps track of where you are in the command buffer __attribute__ ((weak)) const char terminal_prompt[8] = "> "; @@ -34,36 +44,37 @@ const char terminal_prompt[8] = "> "; #endif float terminal_song[][2] = TERMINAL_SONG; #define TERMINAL_BELL() PLAY_SONG(terminal_song) -#else - #define TERMINAL_BELL() +#else + #define TERMINAL_BELL() #endif __attribute__ ((weak)) const char keycode_to_ascii_lut[58] = { 0, 0, 0, 0, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 0, 0, 0, '\t', ' ', '-', '=', '[', ']', '\\', 0, ';', '\'', '`', ',', '.', '/' -}; +}; __attribute__ ((weak)) const char shifted_keycode_to_ascii_lut[58] = { 0, 0, 0, 0, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', 0, 0, 0, '\t', ' ', '_', '+', '{', '}', '|', 0, ':', '\'', '~', '<', '>', '?' -}; +}; -struct stringcase { - char* string; - void (*func)(void); +struct stringcase { + char* string; + void (*func)(void); } typedef stringcase; void enable_terminal(void) { terminal_enabled = true; strcpy(buffer, ""); + memset(cmd_buffer,0,CMD_BUFF_SIZE * 80); for (int i = 0; i < 6; i++) strcpy(arguments[i], ""); // select all text to start over @@ -73,6 +84,29 @@ void enable_terminal(void) { void disable_terminal(void) { terminal_enabled = false; + SEND_STRING("\n"); +} + +void push_to_cmd_buffer(void) { +if (cmd_buffer_enabled) { + if (cmd_buffer == NULL) { + return; + } else { + if (firstTime) { + firstTime = false; + strcpy(cmd_buffer[0],buffer); + return; + } + + for (int i= CMD_BUFF_SIZE - 1;i > 0 ;--i) { + strncpy(cmd_buffer[i],cmd_buffer[i-1],80); + } + + strcpy(cmd_buffer[0],buffer); + + return; + } + } } void terminal_about(void) { @@ -136,11 +170,34 @@ void terminal_keymap(void) { } } -stringcase terminal_cases[] = { +void print_cmd_buff(void) { + /* without the below wait, a race condition can occur wherein the + buffer can be printed before it has been fully moved */ + wait_ms(250); + for(int i=0;istring, buffer ) ) { @@ -192,6 +250,16 @@ void process_terminal_command(void) { send_string(terminal_prompt); } } +void check_pos(void) { + if (current_cmd_buffer_pos >= CMD_BUFF_SIZE) { //if over the top, move it back down to the top of the buffer so you can climb back down... + current_cmd_buffer_pos = CMD_BUFF_SIZE - 1; + } else if (current_cmd_buffer_pos < 0) { //...and if you fall under the bottom of the buffer, reset back to 0 so you can climb back up + current_cmd_buffer_pos = 0; + } +} + + + bool process_terminal(uint16_t keycode, keyrecord_t *record) { @@ -210,6 +278,8 @@ bool process_terminal(uint16_t keycode, keyrecord_t *record) { char char_to_add; switch (keycode) { case KC_ENTER: + push_to_cmd_buffer(); + current_cmd_buffer_pos = 0; process_terminal_command(); return false; break; case KC_ESC: @@ -226,9 +296,36 @@ bool process_terminal(uint16_t keycode, keyrecord_t *record) { return false; } break; case KC_LEFT: + return false; break; case KC_RIGHT: - case KC_UP: + return false; break; + case KC_UP: // 0 = recent + check_pos(); //check our current buffer position is valid + if (current_cmd_buffer_pos <= CMD_BUFF_SIZE - 1) { //once we get to the top, dont do anything + str_len = strlen(buffer); + for(int i= 0;i < str_len ;++i) { + send_string(SS_TAP(X_BSPACE)); //clear w/e is on the line already + //process_terminal(KC_BSPC,record); + } + strncpy(buffer,cmd_buffer[current_cmd_buffer_pos],80); + + send_string(buffer); + ++current_cmd_buffer_pos; //get ready to access the above cmd if up/down is pressed again + } + return false; break; case KC_DOWN: + check_pos(); + if (current_cmd_buffer_pos >= 0) { //once we get to the bottom, dont do anything + str_len = strlen(buffer); + for(int i= 0;i < str_len ;++i) { + send_string(SS_TAP(X_BSPACE)); //clear w/e is on the line already + //process_terminal(KC_BSPC,record); + } + strncpy(buffer,cmd_buffer[current_cmd_buffer_pos],79); + + send_string(buffer); + --current_cmd_buffer_pos; //get ready to access the above cmd if down/up is pressed again + } return false; break; default: if (keycode <= 58) { @@ -240,7 +337,7 @@ bool process_terminal(uint16_t keycode, keyrecord_t *record) { } if (char_to_add != 0) { strncat(buffer, &char_to_add, 1); - } + } } break; } @@ -249,4 +346,4 @@ bool process_terminal(uint16_t keycode, keyrecord_t *record) { } } return true; -} \ No newline at end of file +} From ec7223d9f08799eac58fa6c02c7d54f24fd9b089 Mon Sep 17 00:00:00 2001 From: tdl-jturner Date: Tue, 1 May 2018 12:29:49 -0700 Subject: [PATCH 08/34] Added new layout to XD75. See Readme for details (#2871) * Clean commit of xd75 layout. See Readme for details * Corrected header * Switched to HSV and added init --- keyboards/xd75/keymaps/tdl-jturner/config.h | 38 +++ keyboards/xd75/keymaps/tdl-jturner/keymap.c | 312 +++++++++++++++++++ keyboards/xd75/keymaps/tdl-jturner/readme.md | 12 + keyboards/xd75/keymaps/tdl-jturner/rules.mk | 23 ++ 4 files changed, 385 insertions(+) create mode 100644 keyboards/xd75/keymaps/tdl-jturner/config.h create mode 100644 keyboards/xd75/keymaps/tdl-jturner/keymap.c create mode 100644 keyboards/xd75/keymaps/tdl-jturner/readme.md create mode 100644 keyboards/xd75/keymaps/tdl-jturner/rules.mk diff --git a/keyboards/xd75/keymaps/tdl-jturner/config.h b/keyboards/xd75/keymaps/tdl-jturner/config.h new file mode 100644 index 00000000000..561a48d7eb8 --- /dev/null +++ b/keyboards/xd75/keymaps/tdl-jturner/config.h @@ -0,0 +1,38 @@ +/* Copyright 2018 Josh Turner (/u/tdl-jturner) + * + * 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 . + */ + + // additional config optoinsa vailable at https://docs.qmk.fm/reference/config-options#the-config.h-file + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here +//#define TAPPING_TERM 200 +#define TAPPING_TOGGLE 2 +//#define PERMISSIVE_HOLD +//#define QMK_KEYS_PER_SCAN 4 +#define PREVENT_STUCK_MODIFIERS +#define FORCE_NKRO + +#define MOUSEKEY_INTERVAL 16 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 60 +#define MOUSEKEY_MAX_SPEED 7 +#define MOUSEKEY_WHEEL_DELAY 0 + +#endif diff --git a/keyboards/xd75/keymaps/tdl-jturner/keymap.c b/keyboards/xd75/keymaps/tdl-jturner/keymap.c new file mode 100644 index 00000000000..9789d9a8678 --- /dev/null +++ b/keyboards/xd75/keymaps/tdl-jturner/keymap.c @@ -0,0 +1,312 @@ +/* Copyright 2018 Josh Turner (/u/tdl-jturner) + * + * 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 "xd75.h" + +enum xd75_layers { + _QWERTY, + _COLEMAK, + _LYMD, + _LYFK, + _LYMED, + _LYNUM, + _LYNAV, + _LYMOS, + _LYSYS, + _LYLT +}; + +enum xd75_keycodes { + HELP = SAFE_RANGE, + KC_BSDEL, + KC_FBSLH, + KC_DOTQ, + KC_CPIPE, + COLEMAK, + QWERTY, + KC_LYDEF +}; + +//Tap Dance Declarations +enum { + TD_LOCK_SLEEP, + TD_ABK, + TD_BRC, + TD_CBR, +}; + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + //Tap once for Esc, twice for Caps Lock + [TD_LOCK_SLEEP] = ACTION_TAP_DANCE_DOUBLE(LGUI(KC_L), KC_SLEP), + [TD_ABK] = ACTION_TAP_DANCE_DOUBLE(KC_LABK,KC_RABK), + [TD_BRC] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC,KC_RBRC), + [TD_CBR] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR,KC_RCBR) +// Other declarations would go here, separated by commas, if you have them +}; + +//remaps for pretty layouts +#define ________ KC_TRNS +#define ___XX___ KC_NO + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + //QWERY - Base Layer + [_QWERTY] = { + {KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 ,________ ,________,________, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_MINUS}, + {KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T ,________ ,________,________, KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_BSDEL}, //Custom shift Codes. Backspace ^ Delete +{LT(_LYMD,KC_ESC), KC_A , KC_S , KC_D , KC_F , KC_G ,________ ,________,________, KC_H , KC_J , KC_K , KC_L ,KC_SCLN ,KC_QUOT }, + {KC_LSPO, KC_Z , KC_X , KC_C , KC_V , KC_B ,________ ,________,________, KC_N , KC_M ,KC_CPIPE,KC_DOTQ ,KC_FBSLH,KC_RSPC }, // Custom Shift Codes. ,^| .^? /^| + { KC_MEH ,KC_LCTL ,KC_LGUI ,KC_LALT ,MO(_LYNUM), KC_SPC ,________ ,________,________, KC_ENT ,MO(_LYNAV),TD(TD_CBR) ,TD(TD_BRC),TD(TD_ABK),TD(TD_LOCK_SLEEP)} + + }, + + //_COLEMAK - Colemak Layout - Identical to qwerty layer except for the layout changes + [_COLEMAK] = { + {KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 ,________ ,________,________, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_MINUS}, + {KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_G ,________ ,________,________, KC_J , KC_L , KC_U , KC_Y ,KC_SCLN ,KC_BSDEL}, //Custom shift Codes. Backspace ^ Delete +{LT(_LYMD,KC_ESC), KC_A , KC_R , KC_S , KC_T , KC_D ,________ ,________,________, KC_H , KC_N , KC_E , KC_I , KC_O ,KC_QUOT }, + {KC_LSPO, KC_Z , KC_X , KC_C , KC_V , KC_B ,________ ,________,________, KC_K , KC_M ,KC_CPIPE,KC_DOTQ ,KC_FBSLH,KC_RSPC }, // Custom Shift Codes. ,^| .^? /^| + { KC_MEH ,KC_LCTL ,KC_LGUI ,KC_LALT ,MO(_LYNUM), KC_SPC ,________ ,________,________, KC_ENT ,MO(_LYNAV),TD(TD_CBR) ,TD(TD_BRC),TD(TD_ABK),TD(TD_LOCK_SLEEP)} + + }, + + // Decision Layer + [_LYMD] = + { + {________,________ ,________ ,________ ,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___}, + {________,MO(_LYFK) ,MO(_LYMED),________ ,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,________}, + {________,MO(_LYNUM),MO(_LYNAV),________ ,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___}, + {________,MO(_LYMOS),MO(_LYSYS),MO(_LYLT) ,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___}, + {________,________ ,________ ,________ ,________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___} + }, + + //F Keys + [_LYFK] = + { + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___}, + {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_F7 ,KC_F8 ,KC_F9 ,KC_F12 ,________}, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_F4 ,KC_F5 ,KC_F6 ,KC_F11 ,___XX___}, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_F1 ,KC_F2 ,KC_F3 ,KC_F10 ,___XX___}, + {________,________,________,________,________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___} + }, +//Media Keys +[_LYMED] = + { + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___}, + {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,KC_VOLU ,___XX___,___XX___,________}, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_MPRV ,KC_MUTE ,KC_MNXT ,___XX___,___XX___}, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,KC_VOLD ,___XX___,KC_MSTP ,___XX___}, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_MPLY ,___XX___,___XX___,___XX___,___XX___} + }, +//Num Keys +[_LYNUM] = + { + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_PEQL ,KC_PSLS ,KC_PAST ,KC_PMNS ,___XX___}, + {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_7 ,KC_8 ,KC_9 ,KC_MINUS,________}, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_4 ,KC_5 ,KC_6 ,KC_PPLS ,KC_PSLS }, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_1 ,KC_2 ,KC_3 ,KC_PENT ,KC_PAST }, + {________,________,________,________,________,________,________,________,________,________,KC_0 ,KC_0 ,KC_PDOT ,KC_PEQL ,___XX___} + }, +//Navigation Keys +[_LYNAV] = + { + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___}, + {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_HOME ,KC_UP ,KC_PGUP ,KC_PSCR ,________}, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_LEFT ,KC_F5 ,KC_RIGHT,KC_SLCK ,___XX___}, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_END ,KC_DOWN ,KC_PGDN ,KC_PAUS ,___XX___}, + {________,________,________,________,________,________,________,________,________,________,________,KC_INS ,KC_DEL ,___XX___,___XX___} + }, + //Mouse Keys + [_LYMOS] = + { + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___}, + {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,KC_MS_U ,KC_WH_U ,KC_ACL2 ,________}, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,KC_MS_L ,KC_ACL0 ,KC_MS_R ,KC_ACL1 ,___XX___}, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,KC_MS_D ,KC_WH_D ,KC_BTN2 ,___XX___}, + {________,________,________,________,________,________,________,________,________,________,KC_BTN1 ,KC_BTN3 ,KC_BTN4 ,___XX___,___XX___} + }, + //Systen Keys + [_LYSYS] = + { + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___}, + {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,________}, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,QWERTY ,COLEMAK ,___XX___,RESET }, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___}, + {________,________,________,________,________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___} + }, + +// Light Control +[_LYLT] = + { + {________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___,___XX___}, + {KC_LYDEF,________,________,________,________,________,___XX___,___XX___,___XX___,RGB_HUD ,RGB_HUI ,RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI }, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,RGB_TOG ,RGB_RMOD,RGB_MOD ,___XX___,___XX___,___XX___}, + {________,________,________,________,________,________,___XX___,___XX___,___XX___,BL_TOGG ,BL_DEC ,BL_INC ,BL_BRTG ,___XX___,___XX___}, + {________,________,________,________,________,________,________,________,________,________,___XX___,___XX___,___XX___,___XX___,___XX___} + } +}; + +//Define layer colors +#define rgblight_setrgb_user_base() rgblight_sethsv(325,255,255) +#define rgblight_setrgb_user_LYFK() rgblight_sethsv_red() +#define rgblight_setrgb_user_LYMED() rgblight_sethsv_blue() +#define rgblight_setrgb_user_LYNUM() rgblight_sethsv_purple() +#define rgblight_setrgb_user_LYNAV() rgblight_sethsv_cyan() +#define rgblight_setrgb_user_LYMOS() rgblight_sethsv_orange() +#define rgblight_setrgb_user_LYSYS() rgblight_sethsv_green() +#define rgblight_setrgb_user_LYLT() rgblight_sethsv_yellow() +#define rgblight_setrgb_user_LYMD() rgblight_sethsv_white() + +//initialize rgb +void matrix_init_user(void) { + rgblight_enable(); + rgblight_mode(1); + rgblight_setrgb_user_base(); +} + +//Set a color based on the layer +uint32_t layer_state_set_user(uint32_t state) { + switch(biton32(state)) { + case _LYFK: + rgblight_setrgb_user_LYFK(); + break; + case _LYMED: + rgblight_setrgb_user_LYMED(); + break; + case _LYNUM: + rgblight_setrgb_user_LYNUM(); + break; + case _LYNAV: + rgblight_setrgb_user_LYNAV(); + break; + case _LYMOS: + rgblight_setrgb_user_LYMOS(); + break; + case _LYSYS: + rgblight_setrgb_user_LYSYS(); + break; + case _LYLT: + rgblight_setrgb_user_LYLT(); + break; + case _LYMD: + rgblight_setrgb_user_LYMD(); + break; + default: + rgblight_setrgb_user_base(); + break; + } + return state; +} + + +//Const for shift +const uint8_t shift = MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT); + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + + switch(keycode) { + case KC_LYDEF: + layer_clear(); + return false; + break; + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_COLEMAK); + } + return false; + break; + case KC_BSDEL: + if (record->event.pressed) { + if (keyboard_report->mods & shift) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT)) { + unregister_code(KC_LSHIFT); + } + else { + unregister_code(KC_RSHIFT); + } + register_code(KC_DEL); + } + else { + register_code(KC_BSPC); + } + } + else { + unregister_code(KC_DEL); + unregister_code (KC_BSPC); + } + return false; + break; + case KC_FBSLH: + if (record->event.pressed) { + if (keyboard_report->mods & shift) { + if (keyboard_report->mods & MOD_BIT(KC_LSFT)) { + unregister_code(KC_LSHIFT); + } + else { + unregister_code(KC_RSHIFT); + } + register_code(KC_BSLASH); + } + else { + register_code(KC_SLSH); + } + } + else { + unregister_code(KC_BSLASH); + unregister_code (KC_SLSH); + } + return false; + break; + case KC_DOTQ: + if (record->event.pressed) { + if (keyboard_report->mods & shift) { + register_code(KC_SLSH); // shifted slash = ? + } + else { + register_code(KC_DOT); + } + } + else { + unregister_code(KC_SLSH); // shifted slash = ? + unregister_code (KC_DOT); + } + return false; + break; + case KC_CPIPE: + if (record->event.pressed) { + if (keyboard_report->mods & shift) { + register_code(KC_BSLS); + } + else { + register_code(KC_COMM); + } + } + else { + unregister_code(KC_BSLS); + unregister_code (KC_COMM); + } + return false; + break; + } + return true; +}; diff --git a/keyboards/xd75/keymaps/tdl-jturner/readme.md b/keyboards/xd75/keymaps/tdl-jturner/readme.md new file mode 100644 index 00000000000..835ef09fb23 --- /dev/null +++ b/keyboards/xd75/keymaps/tdl-jturner/readme.md @@ -0,0 +1,12 @@ +/u/tdl-jturner - XD75 Layout +=== + +Keyboard Layout Editor: [Link](http://www.keyboard-layout-editor.com/#/gists/b2b23097ef70fd9170e266e4cbc06c02) + +Make Command: make xd75:tdl-jturner + +Notes: +* Based on Qwerty +* Tweaks for DBA & Programming including tap dance braces on lower right, custom shift codes, and F5 access on Nav layer +* Layers are all based on layer control on the left and the right is a 10 key pattern +* Layers include Functions, Media, Numpad, Navigation, Mouse, System, and Lighting diff --git a/keyboards/xd75/keymaps/tdl-jturner/rules.mk b/keyboards/xd75/keymaps/tdl-jturner/rules.mk new file mode 100644 index 00000000000..186b452fc63 --- /dev/null +++ b/keyboards/xd75/keymaps/tdl-jturner/rules.mk @@ -0,0 +1,23 @@ +# Copyright 2018 Josh Turner (/u/tdl-jturner) +# +# 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 QUANTUM_DIR + include ../../../../Makefile +endif + +TAP_DANCE_ENABLE = yes +MOUSEKEY_ENABLE = yes +BACKLIGHT_ENABLE = yes +RGBLIGHT_ENABLE = yes From b51ad39047aec2538063a3ca9d35e2fe77e80a45 Mon Sep 17 00:00:00 2001 From: zwnk Date: Wed, 2 May 2018 11:56:00 -0300 Subject: [PATCH 09/34] iris impstyle keymap, mouse layer added (#2875) * impstyle keymap added * impstyle keymap updated * mouse layer added to impstyle keymap * keymap updated * fixes * impsytle layout: mouse layer added * comments added * comments added * bugfix * typo fixed --- keyboards/iris/keymaps/impstyle/config.h | 42 +++++++ keyboards/iris/keymaps/impstyle/keymap.c | 138 ++++++++++------------- keyboards/iris/keymaps/impstyle/rules.mk | 8 ++ 3 files changed, 110 insertions(+), 78 deletions(-) create mode 100644 keyboards/iris/keymaps/impstyle/config.h create mode 100644 keyboards/iris/keymaps/impstyle/rules.mk diff --git a/keyboards/iris/keymaps/impstyle/config.h b/keyboards/iris/keymaps/impstyle/config.h new file mode 100644 index 00000000000..0e01f5d562f --- /dev/null +++ b/keyboards/iris/keymaps/impstyle/config.h @@ -0,0 +1,42 @@ +/* +Copyright 2017 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 . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "config_common.h" + +/* Use I2C or Serial, not both */ + +//#define USE_SERIAL +#define USE_I2C + +/* Select hand configuration */ +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#define MOUSEKEY_DELAY 300 +#define MOUSEKEY_INTERVAL 50 +#define MOUSEKEY_MAX_SPEED 10 +#define MOUSEKEY_TIME_TO_MAX 20 +#define MOUSEKEY_WHEEL_MAX_SPEED 8 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 + +#include "../../config.h" + +#endif diff --git a/keyboards/iris/keymaps/impstyle/keymap.c b/keyboards/iris/keymaps/impstyle/keymap.c index 84f89c9c09b..be5ee8c758c 100644 --- a/keyboards/iris/keymaps/impstyle/keymap.c +++ b/keyboards/iris/keymaps/impstyle/keymap.c @@ -1,3 +1,6 @@ +// iris qwerty layout with mouse layer. +// double tab to toggle is not working atm + #include QMK_KEYBOARD_H extern keymap_config_t keymap_config; @@ -5,43 +8,80 @@ extern keymap_config_t keymap_config; #define _QWERTY 0 #define _LOWER 1 #define _RAISE 2 -#define _ADJUST 16 +#define _MOUSE 3 +#define TAPPING_TOGGLE 2 // double tab enum custom_keycodes { QWERTY = SAFE_RANGE, LOWER, RAISE, - ADJUST, + MOUSE, }; #define KC_ KC_TRNS #define _______ KC_TRNS - -#define KC_LOWR LOWER -#define KC_RASE RAISE -#define KC_RST RESET -#define KC_BL_S BL_STEP -#define KC_TGLW TG(_LOWER) -#define KC_TGRS TG(_RAISE) +#define KC_LOWR MO(_LOWER) // Lower layer +#define KC_RASE MO(_RAISE) // Raise layer +#define KC_TGLW TG(_LOWER) // toggle lower +#define KC_TGRS TG(_RAISE) // toggle raise +#define KC_MOUS TT(_MOUSE) // double tab toggle mouse layer const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // QUERTY LAYER + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + // ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + // TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + // LSFT, A , S , D , F , G , H , J , K , L ,SCLN,QUOT, + //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| + // LCTL, Z , X , C , V , B ,PLUS , MOUS , N , M ,COMM,DOT ,SLSH,BSLASH, + //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' + // LGUI,RASE,SPC , ENT ,LOWR,LALT + // `----+----+----' `----+----+----' + [_QWERTY] = LAYOUT( KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_BSPC, KC_TAB , KC_Q , KC_W ,KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_MINS , KC_LSFT, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT, - KC_LCTL, KC_Z , KC_X , KC_C , KC_V , KC_B ,KC_TGRS, KC_TGLW , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_BSLASH, + KC_LCTL, KC_Z , KC_X , KC_C , KC_V , KC_B ,KC_PLUS, KC_MOUS , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_BSLASH, KC_LGUI,KC_RASE,KC_SPC , KC_ENT ,KC_LOWR,KC_LALT ), + + // LOWER Layer + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + // TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,BSPC, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + // , ,PGUP, , ,LBRC, RBRC, P7 , P8 , P9 ,PLUS, , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + // ,HOME,PGDN,END, ,LPRN, RPRN, P4 , P5 , P6 ,MINS,PIPE, + //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| + // , , , , , , , , , P1 , P2 , P3 ,EQL ,UNDS , + //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' + // , ,DEL , BSPC , , P0 + // `----+----+----' `----+----+----' [_LOWER] = LAYOUT( KC_TILD,KC_EXLM, KC_AT ,KC_HASH,KC_DLR ,KC_PERC, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_BSPC, _______,_______,KC_PGUP,_______,_______,KC_LBRC, KC_RBRC, KC_P7 , KC_P8 , KC_P9 ,KC_PLUS,_______, _______ ,KC_HOME,KC_PGDN,KC_END,_______,KC_LPRN, KC_RPRN, KC_P4 , KC_P5 , KC_P6 ,KC_MINS,KC_PIPE, _______,_______,_______,_______,_______,_______,_______, _______ ,_______, KC_P1 , KC_P2 , KC_P3 ,KC_EQL ,KC_UNDS , - _______ ,_______,KC_DEL , KC_BSPC ,_______, KC_P0 - + _______ ,_______,KC_PSCR , KC_DEL ,_______, KC_P0 ), + // RAISE LAYER + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + // F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + // , , UP , , ,LBRC, RBRC, ,NLCK,INS ,SLCK,MUTE, + //|----+----+----+----+----+----| |----+----+----+----+----+----| + // ,LEFT,DOWN,RGHT, ,LPRN, RPRN,MPRV,MPLY,MNXT, ,VOLU, + //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| + // , , , , , , , PLUS , , , , , ,VOLD, + //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' + // , , , EQL, , + // `----+----+----' `----+----+----' + [_RAISE] = LAYOUT( KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 , _______ ,_______, KC_UP ,_______,_______,KC_LBRC, KC_RBRC,_______,KC_NLCK,KC_INS ,KC_SLCK,KC_MUTE, @@ -50,70 +90,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______ ,_______,_______, KC_EQL,_______,_______ ), - [_ADJUST] = LAYOUT( - //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------. - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, - //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - RESET , DEBUG , RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, - //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------| - BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------' - _______, _______, _______, _______, _______, _______ - // `--------+--------+--------' `--------+--------+--------' - ) + [_MOUSE] = LAYOUT( + KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 , + _______ ,_______, KC_MS_UP ,_______,_______,_______, KC_MS_WH_UP,_______,_______,_______ ,_______,_______, + _______ ,KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT,_______,_______, KC_MS_WH_DOWN,KC_MS_BTN1,KC_MS_BTN2,KC_MS_BTN3,_______,_______, + _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2, + _______ ,_______,_______, _______,_______,_______ + ), -}; - -#ifdef AUDIO_ENABLE -float tone_qwerty[][2] = SONG(QWERTY_SOUND); -#endif - -void persistent_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - #ifdef AUDIO_ENABLE - PLAY_SONG(tone_qwerty); - #endif - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } else { - layer_off(_ADJUST); - } - return false; - break; - } - return true; -} +}; \ No newline at end of file diff --git a/keyboards/iris/keymaps/impstyle/rules.mk b/keyboards/iris/keymaps/impstyle/rules.mk new file mode 100644 index 00000000000..4db5ef00d26 --- /dev/null +++ b/keyboards/iris/keymaps/impstyle/rules.mk @@ -0,0 +1,8 @@ +RGBLIGHT_ENABLE = no +BACKLIGHT_ENABLE = no +TAP_DANCE_ENABLE = no +MOUSEKEY_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif From 0495bf44911032f027e2f7846892637dcd56c013 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Wed, 2 May 2018 08:02:35 -0700 Subject: [PATCH 10/34] QMK Configurator updates for Alpha 28-key, AMJ40 and AMJ Pad (#2873) * QMK Configurator update for Alpha 28-key * QMK Configurator update for AMJ40 * QMK Configurator update for AMJ Pad * QMK Configurator update for Atom47 * QMK Configurator update for OLKB Atomic --- keyboards/alpha/info.json | 13 +++++++++++++ keyboards/amj40/info.json | 13 +++++++++++++ keyboards/amjpad/info.json | 13 +++++++++++++ keyboards/atom47/info.json | 13 +++++++++++++ keyboards/atom47/readme.md | 2 +- keyboards/atom47/rev2/info.json | 13 +++++++++++++ keyboards/atom47/rev2/readme.md | 2 +- keyboards/atomic/info.json | 13 +++++++++++++ 8 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 keyboards/alpha/info.json create mode 100644 keyboards/amj40/info.json create mode 100644 keyboards/amjpad/info.json create mode 100644 keyboards/atom47/info.json create mode 100644 keyboards/atom47/rev2/info.json create mode 100644 keyboards/atomic/info.json diff --git a/keyboards/alpha/info.json b/keyboards/alpha/info.json new file mode 100644 index 00000000000..b08e6d9a419 --- /dev/null +++ b/keyboards/alpha/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "Alpha", + "url": "", + "maintainer": "qmk", + "bootloader": "", + "width": 10, + "height": 3, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":0.5, "y":2}, {"x":1.5, "y":2}, {"x":2.5, "y":2}, {"x":3.5, "y":2}, {"x":4.5, "y":2, "w":2}, {"x":6.5, "y":2}, {"x":7.5, "y":2}, {"x":8.5, "y":2}] + } + } +} diff --git a/keyboards/amj40/info.json b/keyboards/amj40/info.json new file mode 100644 index 00000000000..ddbd34a7c4f --- /dev/null +++ b/keyboards/amj40/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "AMJ40", + "url": "", + "maintainer": "qmk", + "bootloader": "", + "width": 12, + "height": 4, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1, "w":1.25}, {"x":1.25, "y":1}, {"x":2.25, "y":1}, {"x":3.25, "y":1}, {"x":4.25, "y":1}, {"x":5.25, "y":1}, {"x":6.25, "y":1}, {"x":7.25, "y":1}, {"x":8.25, "y":1}, {"x":9.25, "y":1}, {"x":10.25, "y":1, "w":1.75}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2, "w":1.25}, {"x":11, "y":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3, "w":1.25}, {"x":3.5, "y":3, "w":2.25}, {"x":5.75, "y":3, "w":2.75}, {"x":8.5, "y":3, "w":1.25}, {"x":9.75, "y":3}, {"x":10.75, "y":3, "w":1.25}] + } + } +} diff --git a/keyboards/amjpad/info.json b/keyboards/amjpad/info.json new file mode 100644 index 00000000000..3873d548f07 --- /dev/null +++ b/keyboards/amjpad/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "AMJ Pad", + "url": "", + "maintainer": "qmk", + "bootloader": "", + "width": 4, + "height": 6, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2, "h":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4, "h":2}, {"x":0, "y":5, "w":2}, {"x":2, "y":5}] + } + } +} diff --git a/keyboards/atom47/info.json b/keyboards/atom47/info.json new file mode 100644 index 00000000000..219e0f27189 --- /dev/null +++ b/keyboards/atom47/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "Atom47", + "url": "", + "maintainer": "qmk", + "bootloader": "", + "width": 13, + "height": 4, + "layouts": { + "LAYOUT_ansi": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":0, "y":1, "w":1.25}, {"x":1.25, "y":1}, {"x":2.25, "y":1}, {"x":3.25, "y":1}, {"x":4.25, "y":1}, {"x":5.25, "y":1}, {"x":6.25, "y":1}, {"x":7.25, "y":1}, {"x":8.25, "y":1}, {"x":9.25, "y":1}, {"x":10.25, "y":1}, {"x":11.25, "y":1, "w":1.75}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2, "w":1.25}, {"x":12, "y":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3, "w":1.75}, {"x":6, "y":3, "w":2.75}, {"x":8.75, "y":3}, {"x":9.75, "y":3}, {"x":10.75, "y":3}, {"x":11.75, "y":3, "w":1.25}] + } + } +} diff --git a/keyboards/atom47/readme.md b/keyboards/atom47/readme.md index f2ec08500e1..1e96d42e9d2 100644 --- a/keyboards/atom47/readme.md +++ b/keyboards/atom47/readme.md @@ -3,7 +3,7 @@ ![Atom47](https://i.imgur.com/Wwflqvt.png) ## Support -Keyboard Maintainer: [Maarten Dekkers(https://github.com/maartenwut) +Keyboard Maintainer: [Maarten Dekkers](https://github.com/maartenwut) Hardware Supported: Atom47 rev3 Hardware Availability: [GeekHack.com Group Buy](https://geekhack.org/index.php?topic=93447.msg2545221) diff --git a/keyboards/atom47/rev2/info.json b/keyboards/atom47/rev2/info.json new file mode 100644 index 00000000000..219e0f27189 --- /dev/null +++ b/keyboards/atom47/rev2/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "Atom47", + "url": "", + "maintainer": "qmk", + "bootloader": "", + "width": 13, + "height": 4, + "layouts": { + "LAYOUT_ansi": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":0, "y":1, "w":1.25}, {"x":1.25, "y":1}, {"x":2.25, "y":1}, {"x":3.25, "y":1}, {"x":4.25, "y":1}, {"x":5.25, "y":1}, {"x":6.25, "y":1}, {"x":7.25, "y":1}, {"x":8.25, "y":1}, {"x":9.25, "y":1}, {"x":10.25, "y":1}, {"x":11.25, "y":1, "w":1.75}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2, "w":1.25}, {"x":12, "y":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3, "w":1.75}, {"x":6, "y":3, "w":2.75}, {"x":8.75, "y":3}, {"x":9.75, "y":3}, {"x":10.75, "y":3}, {"x":11.75, "y":3, "w":1.25}] + } + } +} diff --git a/keyboards/atom47/rev2/readme.md b/keyboards/atom47/rev2/readme.md index 18ee85d54f3..30f44df1dc6 100644 --- a/keyboards/atom47/rev2/readme.md +++ b/keyboards/atom47/rev2/readme.md @@ -3,7 +3,7 @@ This is the keymap for rev2 of the Atom47. Only 9 of those have been sold for testing purposes. It had a slightly misaligned usb port and the pcb was too thick (should've been 1.2mm instead of 1.6mm). The pcb only supports the default hardware layout, although /u/ChrisSwires has [modified his](https://www.reddit.com/r/MechanicalKeyboards/comments/7n2dua/not_your_average_core_with_honeywell/) and put a big spacebar in it. ## Support -Keyboard Maintainer: [Matthew Kerfoot(https://github.com/mkerfoot) +Keyboard Maintainer: [Matthew Kerfoot](https://github.com/mkerfoot) Hardware Supported: Atom47 rev2 Hardware Availability: None diff --git a/keyboards/atomic/info.json b/keyboards/atomic/info.json new file mode 100644 index 00000000000..b07a070253a --- /dev/null +++ b/keyboards/atomic/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "Atomic", + "url": "", + "maintainer": "qmk", + "bootloader": "", + "width": 15, + "height": 5, + "layouts": { + "LAYOUT_semi_standard": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2, "w":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3, "w":2}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}] + } + } +} From 3d96359f71c634788a52b997585fd955c9a7039e Mon Sep 17 00:00:00 2001 From: krasmaralde Date: Wed, 2 May 2018 17:05:36 +0200 Subject: [PATCH 11/34] Addkeymap/satan fakb (#2833) * edited keymap and fitted for tada68 * edited rules to make mouse work * filled config.h to make mouse cursor move smooth * added descriptive readme * added layout with split backspace and steamlined naming * added layout with split shift, split backspace and split # * changed keymap to fit the new layout * removed duplicate layout KEYMAP_FAKB and pointed keymap.c to default on * further cleanup from layout duplicate --- keyboards/satan/keymaps/fakb/config.h | 92 ++++++++++++++++++++++++++ keyboards/satan/keymaps/fakb/keymap.c | 35 ++++++++++ keyboards/satan/keymaps/fakb/readme.md | 58 ++++++++++++++++ keyboards/satan/keymaps/fakb/rules.mk | 16 +++++ 4 files changed, 201 insertions(+) create mode 100644 keyboards/satan/keymaps/fakb/config.h create mode 100644 keyboards/satan/keymaps/fakb/keymap.c create mode 100644 keyboards/satan/keymaps/fakb/readme.md create mode 100644 keyboards/satan/keymaps/fakb/rules.mk diff --git a/keyboards/satan/keymaps/fakb/config.h b/keyboards/satan/keymaps/fakb/config.h new file mode 100644 index 00000000000..a8df7ecef93 --- /dev/null +++ b/keyboards/satan/keymaps/fakb/config.h @@ -0,0 +1,92 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0003 +#define MANUFACTURER SATAN +#define PRODUCT GH60 +#define DESCRIPTION QMK keyboard firmware for Satan GH60 with WS2812 support + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 14 + +// ROWS: Top to bottom, COLS: Left to right + +#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 } +#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3 } +#define UNUSED_PINS + +#define BACKLIGHT_PIN B6 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +//#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +//#define LOCKING_RESYNC_ENABLE +/* key combination for command +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) +*/ +/* Backlight configuration + */ +#define BACKLIGHT_LEVELS 8 + +/* Underlight configuration + */ + +#define RGB_DI_PIN E2 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 8 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +#define NO_ACTION_ONESHOT +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION + +#endif + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_INTERVAL 1 +#define MOUSEKEY_MAX_SPEED 4 +#define MOUSEKEY_TIME_TO_MAX 77 +#define MOUSEKEY_WHEEL_MAX_SPEED 1 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 255 + +// only change +#undef RGB_DI_PIN +#define RGB_DI_PIN B2 + +#endif diff --git a/keyboards/satan/keymaps/fakb/keymap.c b/keyboards/satan/keymaps/fakb/keymap.c new file mode 100644 index 00000000000..f6a9461957d --- /dev/null +++ b/keyboards/satan/keymaps/fakb/keymap.c @@ -0,0 +1,35 @@ +#include "satan.h" + +#define _______ KC_TRNS +#define XXXXXXX KC_NO +#define LCTL_MA LCTL_T(KC_UP) +#define LSFT_MA LSFT_T(KC_DOWN) +#define RSFT_MA SFT_T(KC_DOWN) +#define TABS_MA LT(1,KC_TAB) +#define SPCE_MA LT(2,KC_SPC) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[0] = KEYMAP( + KC_GESC,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS,KC_EQL, KC_BSLS,KC_NUBS,\ + TABS_MA,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_LBRC,KC_RBRC,KC_BSPC,\ + LCTL_MA,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT,XXXXXXX,KC_ENT ,\ + LSFT_MA,KC_NUBS,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,RSFT_MA,MO(1) ,\ + XXXXXXX,KC_LALT,KC_LGUI, SPCE_MA, KC_RGUI,KC_RALT,XXXXXXX,XXXXXXX), + +[1] = KEYMAP( + KC_PSCR,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_INS ,_______,\ + _______,_______,_______,KC_PGUP,KC_PGDN,KC_HOME,KC_END ,KC_PGDN,KC_PGUP,_______,_______,_______,_______,KC_DEL ,\ + KC_CAPS,KC_NUBS,KC_LEFT,KC_UP ,KC_DOWN,KC_RGHT,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,_______,_______,_______,_______,\ + _______,_______,BL_TOGG,BL_INC ,BL_DEC ,_______,_______,KC_VOLD,KC_VOLU,KC_MUTE,_______,_______,_______,_______,\ + _______,_______,_______, _______, _______,_______,_______,_______), + +[2] = KEYMAP( + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET ,\ + KC_BTN5,KC_BTN4,KC_BTN3,KC_BTN2,KC_BTN1,KC_HOME,KC_END ,_______,_______,_______,_______,_______,_______,_______,\ + _______,_______,KC_WH_L,KC_WH_U,KC_WH_D,KC_WH_R,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,_______,_______,_______,_______,\ + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\ + _______,_______,_______, _______, _______,_______,_______,_______), + + +}; diff --git a/keyboards/satan/keymaps/fakb/readme.md b/keyboards/satan/keymaps/fakb/readme.md new file mode 100644 index 00000000000..b02b41816c7 --- /dev/null +++ b/keyboards/satan/keymaps/fakb/readme.md @@ -0,0 +1,58 @@ +# FabulousAnomalyKeyBoard + +This layout features an efficient layout for people without +a mouse. + +## layers + +Layer Base: complete basic keyboard +Layer Fn-Tab: F1-F12, Arrow Keys, Home, End, Backlight, Media +Layer Fn-Space: mouse keys in a vim like manner + +For detailed info check out keymap.c + +## the CTRL key + +It is where you would suspect CAPSLOCK to be. +WHO NEEDS CAPSLOCK ANYWAYS? +For those rare cases you need to shout at somebody in a comment +section you can still do a capslock by using TABCTRL + +## the SUPER key + +There are two super keys. They are next to the space bar. +The intention is easing the use of tiling window mangers + +## emergency mouse + +Without a mouse you will find yourself in a situation where all +your tiling goodness will just not be able to click onto that +"close ads" button. +This keymap integrates a basic mouse pointer directly into the keyboard. +Mouse is accessible via holding SPACE and tapping keys: +``` +SPACE +h Move cursor left +j Move cursor down +k Move cursor up +l Move cursor right + +w Middle Mouse Click +r Right click +e Left click + +s Scroll wheel left +d Scroll wheel down +f Scroll wheel up +g Scroll wheel right +``` + +## shell focused + +Working in a shell the up and down arrow keys are often needed to +look at old commands or reuse some. +When held, the left ctrl and left shift will act as expected, +but when tapped they will become UP and DOWN arrow-keys. + +## krautfriend +The keys <|> are accessible even without a 102nd key diff --git a/keyboards/satan/keymaps/fakb/rules.mk b/keyboards/satan/keymaps/fakb/rules.mk new file mode 100644 index 00000000000..c2b5df6cdd9 --- /dev/null +++ b/keyboards/satan/keymaps/fakb/rules.mk @@ -0,0 +1,16 @@ +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE = no # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif From 9b8fc6f1c0129ee119965a2a4d025b0f5c9c613b Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Wed, 2 May 2018 08:07:08 -0700 Subject: [PATCH 12/34] QMK Configurator Support for NIU Mini (#2874) * QMK Configurator support for niu mini * Fix naming * looks like I messed up the include --- keyboards/niu_mini/info.json | 16 ++++++++++++++++ keyboards/niu_mini/keymaps/default/keymap.c | 2 +- keyboards/niu_mini/keymaps/mason/keymap.c | 2 +- keyboards/niu_mini/keymaps/planck/keymap.c | 2 +- keyboards/niu_mini/niu_mini.h | 8 ++++---- 5 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 keyboards/niu_mini/info.json diff --git a/keyboards/niu_mini/info.json b/keyboards/niu_mini/info.json new file mode 100644 index 00000000000..1ff16a91c83 --- /dev/null +++ b/keyboards/niu_mini/info.json @@ -0,0 +1,16 @@ +{ + "keyboard_name": "NIU Mini", + "url": "", + "maintainer": "qmk", + "width": 12, + "height": 4, + "layouts": { + "LAYOUT_ortho_4x12": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}] + }, + + "LAYOUT_mit": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3, "w":2}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}] + } + } +} \ No newline at end of file diff --git a/keyboards/niu_mini/keymaps/default/keymap.c b/keyboards/niu_mini/keymaps/default/keymap.c index a0bfef73f56..39aa01090a6 100644 --- a/keyboards/niu_mini/keymaps/default/keymap.c +++ b/keyboards/niu_mini/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "niu_mini.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { diff --git a/keyboards/niu_mini/keymaps/mason/keymap.c b/keyboards/niu_mini/keymaps/mason/keymap.c index 3d05bf7b023..c6185f7ec77 100644 --- a/keyboards/niu_mini/keymaps/mason/keymap.c +++ b/keyboards/niu_mini/keymaps/mason/keymap.c @@ -1,4 +1,4 @@ -#include "niu_mini.h" +#include QMK_KEYBOARD_H enum layers { _QWERTY, diff --git a/keyboards/niu_mini/keymaps/planck/keymap.c b/keyboards/niu_mini/keymaps/planck/keymap.c index a4ffad9c952..b4661bfd2d3 100644 --- a/keyboards/niu_mini/keymaps/planck/keymap.c +++ b/keyboards/niu_mini/keymaps/planck/keymap.c @@ -14,7 +14,7 @@ * along with this program. If not, see . */ -#include "niu_mini.h" +#include QMK_KEYBOARD_H #include "action_layer.h" extern keymap_config_t keymap_config; diff --git a/keyboards/niu_mini/niu_mini.h b/keyboards/niu_mini/niu_mini.h index 88c5af11b09..2dd707ede62 100644 --- a/keyboards/niu_mini/niu_mini.h +++ b/keyboards/niu_mini/niu_mini.h @@ -10,10 +10,10 @@ k30, k31, k32, k33, k34, k35, k37, k38, k39, k3a, k3b \ ) \ { \ - { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \ - { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \ - { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \ - { k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b } \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \ + { k30, k31, k32, k33, k34, k35, KC_NO, k37, k38, k39, k3a, k3b } \ } #define LAYOUT_grid( \ From e5540dd055b16eaebb28e25e0cb9b314e397e854 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Wed, 2 May 2018 08:39:46 -0700 Subject: [PATCH 13/34] Update to drashna keymaps and userspace (#2876) * Fix Unicode sample * Add irony mark * Remove unpretty keymaps * Add QMK DFU and Conditional Music Mode * Unicode fixes * Unicode fixes * Make layer indication more modular * Finish removing Faux Click * Cleanup of UserSpace and addition of 'update_tri_layer_state' function * Add modifier status indicators to Orthodox * Remove tri layer function * Minor tweaks * Remove the Orthodox's Indicator's reliance on layer_state_set * Add custom EEPROM settings * Make EEPROM config more efficient * Viterbi Config * Add Iris Keyboard layout and Userspace cleanup * Iris keyboard tweaks * Use Grave Escape on Iris * Update Readmes --- keyboards/iris/keymaps/drashna/config.h | 59 ++++ keyboards/iris/keymaps/drashna/keymap.c | 141 ++++++++ keyboards/iris/keymaps/drashna/rules.mk | 11 + keyboards/orthodox/keymaps/drashna/README.md | 4 +- keyboards/orthodox/keymaps/drashna/config.h | 9 +- keyboards/orthodox/keymaps/drashna/keymap.c | 71 +++- keyboards/viterbi/keymaps/drashna/keymap.c | 2 +- keyboards/viterbi/keymaps/drashna/rules.mk | 9 +- layouts/community/ergodox/drashna/keymap.c | 30 +- layouts/community/ergodox/drashna/rules.mk | 2 + quantum/process_keycode/process_clicky.c | 1 - users/drashna/config.h | 8 +- users/drashna/drashna.c | 320 ++++++++++--------- users/drashna/drashna.h | 125 +++----- users/drashna/drashna_unicode.h | 71 ++++ users/drashna/readme.md | 28 ++ 16 files changed, 623 insertions(+), 268 deletions(-) create mode 100644 keyboards/iris/keymaps/drashna/config.h create mode 100644 keyboards/iris/keymaps/drashna/keymap.c create mode 100644 keyboards/iris/keymaps/drashna/rules.mk create mode 100644 users/drashna/drashna_unicode.h diff --git a/keyboards/iris/keymaps/drashna/config.h b/keyboards/iris/keymaps/drashna/config.h new file mode 100644 index 00000000000..2a451e7c772 --- /dev/null +++ b/keyboards/iris/keymaps/drashna/config.h @@ -0,0 +1,59 @@ +/* +Copyright 2017 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 . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "config_common.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +#undef USE_I2C + +/* Select hand configuration */ + +// #define MASTER_LEFT +// #define MASTER_RIGHT +#define EE_HANDS + +#ifdef RGBLIGHT_ENABLE +#undef RGBLED_NUM +#define RGBLED_NUM 16 // Number of LEDs +#define RGBLIGHT_ANIMATIONS +#define RGBLIGHT_HUE_STEP 12 +#define RGBLIGHT_SAT_STEP 12 +#define RGBLIGHT_VAL_STEP 12 +#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 +#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 +#define RGBLIGHT_EFFECT_BREATHE_CENTER 1 +#endif // RGBLIGHT_ENABLE + +#ifdef AUDIO_ENABLE +#define C6_AUDIO +#ifdef RGBLIGHT_ENABLE +#define NO_MUSIC_MODE +#endif //RGBLIGHT_ENABLE +#endif //AUDIO_ENABLE + + +#undef PRODUCT +#ifdef KEYBOARD_iris_rev2 +#define PRODUCT Drashna Hacked Iris Rev.2 +#endif + +#endif diff --git a/keyboards/iris/keymaps/drashna/keymap.c b/keyboards/iris/keymaps/drashna/keymap.c new file mode 100644 index 00000000000..64d074fc9f1 --- /dev/null +++ b/keyboards/iris/keymaps/drashna/keymap.c @@ -0,0 +1,141 @@ + +#include QMK_KEYBOARD_H +#include "drashna.h" + + +#define KC_ALAP ALT_T(KC_APP) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = LAYOUT_wrapper( + KC_GESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, + KC_TAB , _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSLS, + KC_C1R3, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, + KC_MLSF, _________________QWERTY_L3_________________, KC_ALAP, KC_LGUI, _________________QWERTY_R3_________________, KC_MRSF, + LOWER, KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + ), + [_COLEMAK] = LAYOUT_wrapper( + KC_GESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, + KC_TAB , _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_BSLS, + KC_C1R3, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT, + KC_MLSF, _________________COLEMAK_L3________________, KC_ALAP, KC_LGUI, _________________COLEMAK_R3________________, KC_MRSF, + LOWER, KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + ), + [_DVORAK] = LAYOUT_wrapper( + KC_GESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, + KC_TAB , _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, KC_BSLS, + KC_C1R3, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_QUOT, + KC_MLSF, _________________DVORAK_L3_________________, KC_ALAP, KC_LGUI, _________________DVORAK_R3_________________, KC_MRSF, + LOWER, KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + ), + [_WORKMAN] = LAYOUT_wrapper( + KC_GESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, + KC_TAB , _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, KC_BSLS, + KC_C1R3, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT, + KC_MLSF, _________________WORKMAN_L3________________, KC_ALAP, KC_LGUI, _________________WORKMAN_R3________________, KC_MRSF, + LOWER, KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE + ), + + [_MODS] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), + + + [_LOWER] = LAYOUT( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_RBRC, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_LPRN, KC_RPRN, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, + _______, _______, KC_DEL, _______, _______, _______ + ), + + [_RAISE] = LAYOUT( + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_UNDS, KC_EQL , KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, _______, _______, _______, _______, _______, _______, _______, KC_PLUS, KC_END, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), + + [_ADJUST] = LAYOUT( + KC_MAKE, KC_RST, EPRM, _______, _______, _______, _______, _______, _______, _______, _______, _______, + RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, + RGB_SMOD,RGB_HUI, CK_TOGG, AU_ON, AU_OFF, AG_NORM, AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS), + KC_RGB_T,RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, + _______, _______, _______, _______, _______, _______ + ) + +}; + + + +#ifdef INDICATOR_LIGHT +uint32_t layer_state_set_keymap (uint32_t state) { + uint8_t modifiders = get_mods(); + uint8_t led_usb_state = host_keyboard_leds(); + uint8_t one_shot = get_oneshot_mods(); + + + if (modifiders & MODS_SHIFT_MASK || led_usb_state & (1<. #ifdef AUDIO_ENABLE #define C6_AUDIO +#ifdef RGBLIGHT_ENABLE #define NO_MUSIC_MODE -#endif +#endif //RGBLIGHT_ENABLE +#endif //AUDIO_ENABLE #undef PRODUCT #ifdef KEYBOARD_orthodox_rev1 @@ -69,4 +71,9 @@ along with this program. If not, see . #define PRODUCT Drashna Hacked Orthodox Rev.3 #endif +#define QMK_ESC_OUTPUT D7 // usually COL +#define QMK_ESC_INPUT D4 // usually ROW +#define QMK_LED B0 +#define QMK_SPEAKER C6 + #endif diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c index ed5f32b9871..fd10faa5ee4 100644 --- a/keyboards/orthodox/keymaps/drashna/keymap.c +++ b/keyboards/orthodox/keymaps/drashna/keymap.c @@ -32,7 +32,6 @@ along with this program. If not, see . #define _______ KC_TRNS #define XXXXXXX KC_NO -#define MG_NKRO MAGIC_TOGGLE_NKRO const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -67,21 +66,85 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_LOWER] = LAYOUT(\ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_PGUP, KC_PGDN, KC_HOME, KC_END, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, - KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, _______ + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, _______ ), [_RAISE] = LAYOUT(\ - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_GRV, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_BSPC, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, KC_HOME, KC_END, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, _______ ), [_ADJUST] = LAYOUT(\ KC_MAKE,KC_RESET, EPRM, _______, _______, _______, _______, _______, _______, _______, _______, _______, - RGB_SMOD,RGB_HUI, CK_TOGG, AUD_ON, AUD_OFF, AG_NORM, _______, _______, _______, _______, AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS), + RGB_SMOD,RGB_HUI, CK_TOGG, AU_ON, AU_OFF, AG_NORM, _______, _______, _______, _______, AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS), KC_RGB_T,RGB_HUD, MU_ON, MU_OFF, MU_TOG, MU_MOD, _______, _______, _______, _______, _______, _______, MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY ) }; +#ifdef RGBLIGHT_ENABLE +uint32_t layer_state_set_keymap (uint32_t state) { + uint8_t modifiders = get_mods(); + uint8_t led_usb_state = host_keyboard_leds(); + uint8_t one_shot = get_oneshot_mods(); + + + if (modifiders & MODS_SHIFT_MASK || led_usb_state & (1<. #include QMK_KEYBOARD_H #include "drashna.h" +#ifdef UNICODEMAP_ENABLE +#include "drashna_unicode.h" +#endif // UNICODEMAP_ENABLE + //enum more_custom_keycodes { // KC_P00 = NEW_SAFE_RANGE //}; - //define layer change stuff for underglow indicator bool skip_leds = false; -#ifdef KEYBOARD_ergodox_ez + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: QWERTY Layer * @@ -54,9 +57,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_QWERTY] = LAYOUT_ergodox_pretty_wrapper( // left hand // right hand - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_EQL, ________________NUMBER_LEFT________________, OSL(_MOUS), OSL(_MOUS), ________________NUMBER_RIGHT_______________, KC_MINS, KC_TAB, _________________QWERTY_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________QWERTY_R1_________________, KC_BSLS, - SH_TT, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, + KC_C1R3, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, KC_MLSF, _________________QWERTY_L3_________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________QWERTY_R3_________________, KC_MRSF, LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), __________________ERGODOX_THUMB_CLUSTER_____________________ @@ -88,7 +91,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // left hand // right hand KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_TAB, _________________COLEMAK_L1________________, TG(_DIABLO), TG(_DIABLO), _________________COLEMAK_R1________________, KC_BSLS, - SH_TT, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT, + KC_C1R3, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT, KC_MLSF, _________________COLEMAK_L3________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________COLEMAK_R3________________, KC_MRSF, LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), __________________ERGODOX_THUMB_CLUSTER_____________________ @@ -120,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // left hand // right hand KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, KC_TAB, _________________DVORAK_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________DVORAK_R1_________________, KC_SLSH, - SH_TT, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_MINS, + KC_C1R3, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_MINS, KC_MLSF, _________________DVORAK_L3_________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________DVORAK_R3_________________, KC_MRSF, LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), __________________ERGODOX_THUMB_CLUSTER_____________________ @@ -152,7 +155,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // left hand KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_TAB, _________________WORKMAN_L1________________, TG(_DIABLO), TG(_DIABLO), _________________WORKMAN_R1________________, KC_BSLS, - SH_TT, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT, + KC_C1R3, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT, KC_MLSF, _________________WORKMAN_L3________________, TG(_GAMEPAD), TG(_GAMEPAD), _________________WORKMAN_R3________________, KC_MRSF, LT(_SYMB,KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), __________________ERGODOX_THUMB_CLUSTER_____________________ @@ -299,19 +302,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), }; -#else // KEYBOARD_ergodox_ez -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = LAYOUT_ergodox_wrapper(KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), KC_TAB, _________________QWERTY_L1_________________, TG(_DIABLO), KC_BSPC, _________________QWERTY_L2_________________, KC_MLSF, _________________QWERTY_L3_________________, TG(_GAMEPAD), LT(_SYMB, KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ALT_T(KC_APP), KC_LGUI, KC_HOME, KC_SPACE, KC_BSPC, KC_END, OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(_DIABLO), _________________QWERTY_R1_________________, KC_BSLS, _________________QWERTY_R2_________________, GUI_T(KC_QUOT), TG(_GAMEPAD), _________________QWERTY_R3_________________, KC_MRSF, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), KC_RGUI, CTL_T(KC_ESCAPE), KC_PGUP, KC_PGDOWN, KC_DELETE, KC_ENTER), - [_COLEMAK] = LAYOUT_ergodox_wrapper(KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), KC_TAB, _________________COLEMAK_L1________________, TG(_DIABLO), KC_BSPC, _________________COLEMAK_L2________________, KC_MLSF, _________________COLEMAK_L3________________, TG(_GAMEPAD), LT(_SYMB, KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ALT_T(KC_APP), KC_LGUI, KC_HOME, KC_SPACE, KC_BSPC, KC_END, OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(_DIABLO), _________________COLEMAK_R1________________, KC_BSLS, _________________COLEMAK_R2________________, GUI_T(KC_QUOT), TG(_GAMEPAD), _________________COLEMAK_R3________________, KC_MRSF, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), KC_RGUI, CTL_T(KC_ESCAPE), KC_PGUP, KC_PGDOWN, KC_DELETE, KC_ENTER), - [_DVORAK] = LAYOUT_ergodox_wrapper(KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), KC_TAB, _________________DVORAK_L1_________________, TG(_DIABLO), KC_BSPC, _________________DVORAK_L2_________________, KC_MLSF, _________________DVORAK_L3_________________, TG(_GAMEPAD), LT(_SYMB, KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ALT_T(KC_APP), KC_LGUI, KC_HOME, KC_SPACE, KC_BSPC, KC_END, OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, TG(_DIABLO), _________________DVORAK_R1_________________, KC_SLSH, _________________DVORAK_R2_________________, GUI_T(KC_MINS), TG(_GAMEPAD), _________________DVORAK_R3_________________, KC_MRSF, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), KC_RGUI, CTL_T(KC_ESCAPE), KC_PGUP, KC_PGDOWN, KC_DELETE, KC_ENTER), - [_WORKMAN] = LAYOUT_ergodox_wrapper(KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, OSL(_MOUS), KC_TAB, _________________WORKMAN_L1________________, TG(_DIABLO), KC_BSPC, _________________WORKMAN_L2________________, KC_MLSF, _________________WORKMAN_L3________________, TG(_GAMEPAD), LT(_SYMB, KC_GRV), ___________ERGODOX_BOTTOM_LEFT_____________, ALT_T(KC_APP), KC_LGUI, KC_HOME, KC_SPACE, KC_BSPC, KC_END, OSL(_MOUS), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(_DIABLO), _________________WORKMAN_R1________________, KC_BSLS, _________________WORKMAN_R2________________, GUI_T(KC_QUOT), TG(_GAMEPAD), _________________WORKMAN_R3________________, KC_MRSF, ___________ERGODOX_BOTTOM_RIGHT____________, TT(_SYMB), KC_RGUI, CTL_T(KC_ESCAPE), KC_PGUP, KC_PGDOWN, KC_DELETE, KC_ENTER), - [_MODS] = LAYOUT_ergodox(KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - [_SYMB] = LAYOUT_ergodox(EPRM, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, TG(_MODS), KC_RESET, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_WORKMAN, KC_MAKE, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE, VRSN, KC_PERC, KC_CIRC, KC_LBRACKET, KC_RBRACKET, KC_TILD, KC_COLEMAK, KC_TRNS, KC_AMPR, KC_ASTR, KC_COLN, KC_SCOLON, RGB_SMOD, KC_RGB_T, RGB_HUI, RGB_M_R, RGB_M_SW, RGB_HUD, KC_QWERTY, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_DVORAK, KC_KP_PLUS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_ASTERISK, KC_F12, KC_KP_MINUS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_SLASH, KC_PSCREEN, KC_COLEMAK, KC_NUMLOCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_EQUAL, KC_PAUSE, KC_KP_0, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_DOT, KC_KP_0, KC_KP_ENTER), - [_GAMEPAD] = LAYOUT_ergodox(KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, HYPR(KC_D), HYPR(KC_Q), HYPR(KC_GRV), KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, KC_I, KC_O, KC_NO, KC_NO, KC_NO, KC_NO, KC_LCTL, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_TRNS, TG(_GAMEPAD), KC_N, KC_M, KC_NO, KC_NO, KC_NO, KC_NO, KC_GRV, KC_U, KC_I, KC_Y, KC_T, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_O, KC_P, KC_HYPR, MAGIC_TOGGLE_NKRO, KC_LGUI, KC_NO, KC_V, KC_SPC, KC_H, KC_PGDN, KC_DEL, KC_ENTER), - [_DIABLO] = LAYOUT_ergodox(KC_ESC, KC_V, KC_D, KC_LALT, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_TAB, KC_S, KC_I, KC_F, KC_M, KC_T, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_Q, KC_1, KC_2, KC_3, KC_4, KC_G, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LCTL, KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, KC_Z, KC_NO, KC_NO, KC_N, KC_M, 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, KC_NO, KC_L, KC_J, KC_NO, KC_NO, KC_F, KC_NO, SFT_T(KC_SPACE), ALT_T(KC_Q), KC_DIABLO_CLEAR, KC_PGDN, KC_DEL, KC_ENT), - [_MOUS] = LAYOUT_ergodox(KC_NO, KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_U, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_NO, KC_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_NO, KC_NO, KC_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, 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, KC_NO, KC_NO, KC_NO, KC_WH_U, KC_NO, KC_BTN1, KC_BTN2, KC_WH_D, KC_BTN3, KC_BTN4, KC_BTN5), -}; -#endif // KEYBOARD_ergodox_ez bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { diff --git a/layouts/community/ergodox/drashna/rules.mk b/layouts/community/ergodox/drashna/rules.mk index 536d5308af0..e5bf2d4b36a 100644 --- a/layouts/community/ergodox/drashna/rules.mk +++ b/layouts/community/ergodox/drashna/rules.mk @@ -7,3 +7,5 @@ endif CONSOLE_ENABLE = no BOOTMAGIC_ENABLE = yes +UNICODE_ENABLE = no +UNICDOEMAP_ENABLE = yes diff --git a/quantum/process_keycode/process_clicky.c b/quantum/process_keycode/process_clicky.c index f445751e0f1..1e950d11137 100644 --- a/quantum/process_keycode/process_clicky.c +++ b/quantum/process_keycode/process_clicky.c @@ -62,7 +62,6 @@ bool process_clicky(uint16_t keycode, keyrecord_t *record) { if ( clicky_enable ) { if (record->event.pressed) { - stop_all_notes(); clicky_play();; } } diff --git a/users/drashna/config.h b/users/drashna/config.h index e48f72355b2..0a59ad02610 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h @@ -58,10 +58,16 @@ // Disable action_get_macro and fn_actions, since we don't use these // and it saves on space in the firmware. +#ifndef NO_DEBUG +#define NO_DEBUG +#endif // !NO_DEBUG +#ifndef NO_PRINT +#define NO_PRINT +#endif // !NO_PRINT #define NO_ACTION_MACRO #define NO_ACTION_FUNCTION - +#define DISABLE_LEADER #endif // !USERSPACE_CONFIG_H diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index d9d412b086d..86c16b826d3 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -33,35 +33,52 @@ PROGMEM const char secret[][64] = { #endif -#ifdef FAUXCLICKY_ENABLE -float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_A6, 2); // (_D4, 0.25); -float fauxclicky_released_note[2] = MUSICAL_NOTE(_A6, 2); // (_C4, 0.125); -#else // FAUXCLICKY_ENABLE -float fauxclicky_pressed[][2] = SONG(S__NOTE(_A6)); // change to your tastes -float fauxclicky_released[][2] = SONG(S__NOTE(_A6)); // change to your tastes -#endif // FAUXCLICKY_ENABLE - float tone_copy[][2] = SONG(SCROLL_LOCK_ON_SOUND); float tone_paste[][2] = SONG(SCROLL_LOCK_OFF_SOUND); -bool faux_click_enabled = false; -bool is_overwatch = false; static uint16_t copy_paste_timer; #ifdef RGBLIGHT_ENABLE bool rgb_layer_change = true; #endif +userspace_config_t userspace_config; + +// Helper Functions +void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); }; + +#ifdef RGBLIGHT_ENABLE +void rgblight_sethsv_default_helper(uint8_t index) { + uint8_t default_layer = eeconfig_read_default_layer(); + if (default_layer & (1UL << _COLEMAK)) { + rgblight_sethsv_at(300, 255, 255, index); + rgblight_sethsv_at(300, 255, 255, index); + } + else if (default_layer & (1UL << _DVORAK)) { + rgblight_sethsv_at(120, 255, 255, index); + rgblight_sethsv_at(120, 255, 255, index); + } + else if (default_layer & (1UL << _WORKMAN)) { + rgblight_sethsv_at(43, 255, 255, index); + rgblight_sethsv_at(43, 255, 255, index); + } + else { + rgblight_sethsv_at(180, 255, 255, index); + rgblight_sethsv_at(180, 255, 255, index); + } +} +#endif // RGBLIGHT_ENABLE + + +// ========================================= TAP DANCE ========================================= #ifdef TAP_DANCE_ENABLE //define diablo macro timer variables static uint16_t diablo_timer[4]; static uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 }; static uint8_t diablo_key_time[4]; -bool check_dtimer(uint8_t dtimer) { - // has the correct number of seconds elapsed (as defined by diablo_times) - return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; -}; +// has the correct number of seconds elapsed (as defined by diablo_times) +bool check_dtimer(uint8_t dtimer) { return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; }; // Cycle through the times for the macro, starting at 0, for disabled. // Max of six values, so don't exceed @@ -69,25 +86,16 @@ void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_ if (state->count >= 7) { diablo_key_time[diablo_key] = diablo_times[0]; reset_tap_dance(state); - } - else { + } else { diablo_key_time[diablo_key] = diablo_times[state->count - 1]; } } // Would rather have one function for all of this, but no idea how to do that... -void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) { - diablo_tapdance_master(state, user_data, 0); -} -void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) { - diablo_tapdance_master(state, user_data, 1); -} -void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) { - diablo_tapdance_master(state, user_data, 2); -} -void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) { - diablo_tapdance_master(state, user_data, 3); -} +void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 0); } +void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 1); } +void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 2); } +void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 3); } //Tap Dance Definitions qk_tap_dance_action_t tap_dance_actions[] = { @@ -96,7 +104,6 @@ qk_tap_dance_action_t tap_dance_actions[] = { [TD_D3_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2), [TD_D3_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3), [TD_D3_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4), - }; // Sends the key press to system, but only if on the Diablo layer @@ -104,17 +111,13 @@ void send_diablo_keystroke(uint8_t diablo_key) { if (biton32(layer_state) == _DIABLO) { switch (diablo_key) { case 0: - SEND_STRING("1"); - break; + tap(KC_1); break; case 1: - SEND_STRING("2"); - break; + tap(KC_2); break; case 2: - SEND_STRING("3"); - break; + tap(KC_3); break; case 3: - SEND_STRING("4"); - break; + tap(KC_4); break; } } } @@ -123,7 +126,6 @@ void send_diablo_keystroke(uint8_t diablo_key) { // Runs the "send string" command if enough time has passed, and resets the timer. void run_diablo_macro_check(void) { uint8_t dtime; - for (dtime = 0; dtime < 4; dtime++) { if (check_dtimer(dtime) && diablo_key_time[dtime]) { diablo_timer[dtime] = timer_read(); @@ -131,7 +133,6 @@ void run_diablo_macro_check(void) { } } } - #endif // TAP_DANCE_ENABLE @@ -162,32 +163,33 @@ void led_set_keymap(uint8_t usb_led) {} // Call user matrix init, set default RGB colors and then // call the keymap's init function void matrix_init_user(void) { -#ifdef RGBLIGHT_ENABLE uint8_t default_layer = eeconfig_read_default_layer(); +#ifdef RGBLIGHT_ENABLE rgblight_enable(); - - if (true) { - if (default_layer & (1UL << _COLEMAK)) { - rgblight_sethsv_magenta(); - } - else if (default_layer & (1UL << _DVORAK)) { - rgblight_sethsv_green(); - } - else if (default_layer & (1UL << _WORKMAN)) { - rgblight_sethsv_goldenrod(); - } - else { - rgblight_sethsv_teal(); - } - } - else - { - rgblight_setrgb_red(); - rgblight_mode(5); - } #endif // RGBLIGHT_ENABLE + if (default_layer & (1UL << _COLEMAK)) { +#ifdef RGBLIGHT_ENABLE + rgblight_sethsv_magenta(); +#endif // RGBLIGHT_ENABLE + } else if (default_layer & (1UL << _DVORAK)) { +#ifdef RGBLIGHT_ENABLE + rgblight_sethsv_green(); +#endif // RGBLIGHT_ENABLE + } else if (default_layer & (1UL << _WORKMAN)) { +#ifdef RGBLIGHT_ENABLE + rgblight_sethsv_goldenrod(); +#endif // RGBLIGHT_ENABLE + } else { +#ifdef RGBLIGHT_ENABLE + rgblight_sethsv_teal(); +#endif // RGBLIGHT_ENABLE + } + + userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE); + clicky_enable = userspace_config.clicky_enable; + #if ( defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE) ) set_unicode_input_mode(UC_WINC); #endif //UNICODE_ENABLE @@ -197,23 +199,21 @@ void matrix_init_user(void) { // No global matrix scan code, so just run keymap's matrix // scan function void matrix_scan_user(void) { + #ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code. run_diablo_macro_check(); #endif // TAP_DANCE_ENABLE + matrix_scan_keymap(); } -void tap(uint16_t keycode){ - register_code(keycode); - unregister_code(keycode); -}; // This block is for all of the gaming macros, as they were all doing // the same thing, but with differring text sent. bool send_game_macro(const char *str, keyrecord_t *record, bool override) { if (!record->event.pressed || override) { clear_keyboard(); - tap(is_overwatch ? KC_BSPC : KC_ENTER); + tap(userspace_config.is_overwatch ? KC_BSPC : KC_ENTER); wait_ms(50); send_string(str); wait_ms(50); @@ -261,39 +261,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - else { - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - else { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case ADJUST: - if (record->event.pressed) { - layer_on(_ADJUST); - } - else { - layer_off(_ADJUST); - } - return false; - break; - - case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader if (!record->event.pressed) { SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP @@ -349,11 +316,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // These are a serious of gaming macros. // Only enables for the viterbi, basically, // to save on firmware space, since it's limited. -#if !(defined(KEYBOARD_orthodox_rev1) || defined(KEYBOARD_orthodox_rev3) || defined(KEYBOARD_ergodox_ez)) +#if !(defined(KEYBOARD_orthodox_rev1) || defined(KEYBOARD_orthodox_rev3) || defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_iris_rev2)) case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros - if (record->event.pressed) { is_overwatch = !is_overwatch; } + if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); } #ifdef RGBLIGHT_ENABLE - is_overwatch ? rgblight_mode(17) : rgblight_mode(18); + userspace_config.is_overwatch ? rgblight_mode(17) : rgblight_mode(18); #endif //RGBLIGHT_ENABLE return false; break; case KC_SALT: @@ -435,7 +402,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - + case CLICKY_TOGGLE: + userspace_config.clicky_enable = clicky_enable; + eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); + break; #ifdef UNICODE_ENABLE case UC_FLIP: // (╯°□°)╯ ︵ ┻━┻ if (record->event.pressed) { @@ -466,81 +436,135 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } + // Runs state check and changes underglow color and animation // on layer change, no matter where the change was initiated // Then runs keymap's layer change check uint32_t layer_state_set_user(uint32_t state) { -#ifdef RGBLIGHT_ENABLE uint8_t default_layer = eeconfig_read_default_layer(); + state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST); - if (rgb_layer_change) { - switch (biton32(state)) { - case _NAV: + switch (biton32(state)) { + case _NAV: +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_blue(); rgblight_mode(1); - break; - case _SYMB: + } +#endif // RGBLIGHT_ENABLE + break; + case _SYMB: +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_blue(); rgblight_mode(2); - break; - case _MOUS: + } +#endif // RGBLIGHT_ENABLE + break; + case _MOUS: +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_yellow(); rgblight_mode(1); - break; - case _MACROS: + } +#endif // RGBLIGHT_ENABLE + break; + case _MACROS: +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_orange(); - is_overwatch ? rgblight_mode(17) : rgblight_mode(18); - break; - case _MEDIA: + userspace_config.is_overwatch ? rgblight_mode(17) : rgblight_mode(18); + } +#endif // RGBLIGHT_ENABLE + break; + case _MEDIA: +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_chartreuse(); rgblight_mode(22); - break; - case _GAMEPAD: + } +#endif // RGBLIGHT_ENABLE + break; + case _GAMEPAD: +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_orange(); rgblight_mode(17); - break; - case _DIABLO: + } +#endif // RGBLIGHT_ENABLE + break; + case _DIABLO: +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_red(); rgblight_mode(5); - break; - case _RAISE: + } +#endif // RGBLIGHT_ENABLE + break; + case _RAISE: +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_yellow(); rgblight_mode(5); - break; - case _LOWER: + } +#endif // RGBLIGHT_ENABLE + break; + case _LOWER: +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_orange(); rgblight_mode(5); - break; - case _ADJUST: + } +#endif // RGBLIGHT_ENABLE + break; + case _ADJUST: +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_red(); rgblight_mode(23); - break; - case _COVECUBE: + } +#endif // RGBLIGHT_ENABLE + break; + case _COVECUBE: +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_green(); rgblight_mode(2); - break; - default: // for any other layers, or the default layer - if (default_layer & (1UL << _COLEMAK)) { - rgblight_sethsv_magenta(); - } - else if (default_layer & (1UL << _DVORAK)) { - rgblight_sethsv_green(); - } - else if (default_layer & (1UL << _WORKMAN)) { - rgblight_sethsv_goldenrod(); - } - else { - rgblight_sethsv_teal(); - } - if (biton32(state) == _MODS) { // If the non-OSM layer is enabled, then breathe - rgblight_mode(2); - } else { // otherwise, stay solid - rgblight_mode(1); - } - break; } - } #endif // RGBLIGHT_ENABLE + break; + default: // for any other layers, or the default layer + if (default_layer & (1UL << _COLEMAK)) { +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_magenta(); } +#endif // RGBLIGHT_ENABLE + } + else if (default_layer & (1UL << _DVORAK)) { +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_green(); } +#endif // RGBLIGHT_ENABLE + } + else if (default_layer & (1UL << _WORKMAN)) { +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_goldenrod(); } +#endif // RGBLIGHT_ENABLE + } + else { +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_sethsv_teal(); } +#endif // RGBLIGHT_ENABLE + } + if (biton32(state) == _MODS) { // If the non-OSM layer is enabled, then breathe +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_mode(2); } +#endif // RGBLIGHT_ENABLE + } else { // otherwise, stay solid +#ifdef RGBLIGHT_ENABLE + if (rgb_layer_change) { rgblight_mode(1); } +#endif // RGBLIGHT_ENABLE + } + break; + } return layer_state_set_keymap (state); } diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index 746c7e20a0c..5ef25333b13 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h @@ -49,8 +49,22 @@ enum userspace_layers { // RGB color codes are no longer located here anymore. Instead, you will want to // head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h -extern bool is_overwatch; extern bool rgb_layer_change; +extern bool clicky_enable; + +#ifdef RGBLIGHT_ENABLE +void rgblight_sethsv_default_helper(uint8_t index); +#endif // RGBLIGHT_ENABLE + +#define EECONFIG_USERSPACE (uint8_t *)20 + +typedef union { + uint32_t raw; + struct { + bool clicky_enable :1; + bool is_overwatch :1; + }; +} userspace_config_t; enum userspace_custom_keycodes { EPRM = SAFE_RANGE, // can always be here @@ -59,9 +73,6 @@ enum userspace_custom_keycodes { KC_COLEMAK, KC_DVORAK, KC_WORKMAN, - LOWER, - RAISE, - ADJUST, KC_DIABLO_CLEAR, KC_OVERWATCH, KC_SALT, @@ -90,6 +101,11 @@ enum userspace_custom_keycodes { NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes }; +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) +#define ADJUST MO(_ADJUST) + + #define KC_SEC1 KC_SECRET_1 #define KC_SEC2 KC_SECRET_2 #define KC_SEC3 KC_SECRET_3 @@ -102,6 +118,20 @@ enum userspace_custom_keycodes { #define WORKMAN KC_WORKMAN #define KC_RST KC_RESET + +#ifdef SWAP_HANDS_ENABLE +#define KC_C1R3 SH_TT +#else // SWAP_HANDS_ENABLE +#define KC_C1R3 KC_BSPC +#endif // SWAP_HANDS_ENABLE + +// OSM keycodes, to keep things clean and easy to change +#define KC_MLSF OSM(MOD_LSFT) +#define KC_MRSF OSM(MOD_RSFT) + +#define MG_NKRO MAGIC_TOGGLE_NKRO + + #ifdef TAP_DANCE_ENABLE enum { TD_D3_1 = 0, @@ -111,72 +141,6 @@ enum { }; #endif // TAP_DANCE_ENABLE -#ifdef UNICODEMAP_ENABLE - -/* use X(n) to call the */ - - -enum unicode_name { - THINK, // thinking face 🤔 - GRIN, // grinning face 😊 - SMRK, // smirk 😏 - WEARY, // good shit 😩 - UNAMU, // unamused 😒 - - SNEK, // snke 🐍 - PENGUIN, // 🐧 - DRAGON, // 🐉 - MONKEY, // 🐒 - CHICK, // 🐥 - - OKOK, // 👌 - EFFU, // 🖕 - INUP, // 👆 - THUP, // 👍 - THDN, // 👎 - - BBB, // dat B 🅱 - POO, // poop 💩 - HUNDR, // 100 💯 - EGGPL, // EGGPLANT 🍆 - WATER, // wet 💦 - TUMBLER, // 🥃 - - LIT, // fire 🔥 - IRONY, // ‽ - DEGREE, // ° -}; - - -const uint32_t PROGMEM unicode_map[] = { - [THINK] = 0x1F914, - [GRIN] = 0x1F600, - [BBB] = 0x1F171, - [POO] = 0x1F4A9, - [HUNDR] = 0x1F4AF, - [SMRK] = 0x1F60F, - [WEARY] = 0x1F629, - [EGGPL] = 0x1F346, - [WATER] = 0x1F4A6, - [LIT] = 0x1F525, - [UNAMU] = 0x1F612, - [SNEK] = 0x1F40D, - [PENGUIN] = 0x1F427, - [BOAR] = 0x1F417, - [MONKEY] = 0x1F412, - [CHICK] = 0x1F425, - [DRAGON] = 0x1F409, - [OKOK] = 0x1F44C, - [EFFU] = 0x1F595, - [INUP] = 0x1F446, - [THDN] = 0x1F44E, - [THUP] = 0x1F44D, - [TUMBLER] = 0x1F943, - [IRONY] = 0x0203D, - [DEGREE] = 0x000B0, - }; - -#endif //UNICODEMAP_ENABLE // Custom Keycodes for Diablo 3 layer // But since TD() doesn't work when tap dance is disabled @@ -193,22 +157,6 @@ const uint32_t PROGMEM unicode_map[] = { #define KC_D3_4 KC_4 #endif // TAP_DANCE_ENABLE -// OSM keycodes, to keep things clean and easy to change -#define KC_MLSF OSM(MOD_LSFT) -#define KC_MRSF OSM(MOD_RSFT) - - - -// If we're still using the official Faux Clicky feature, substitute codes -// so that we don't have any unused/blank keys. -#ifdef FAUXCLICKY_ENABLE -#define AUD_ON FC_ON -#define AUD_OFF FC_OFF -#else // FAUXCLICKY_ENABLE -#define AUD_ON AU_ON -#define AUD_OFF AU_OFF -#endif // FAUXCLICKY_ENABLE - // Since our quirky block definitions are basically a list of comma separated @@ -286,7 +234,8 @@ const uint32_t PROGMEM unicode_map[] = { #define _________________NORMAN_R2_________________ KC_J, KC_N, KC_I, KC_O, KC_U #define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH) - +#define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5 +#define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0 // Since we have 4 default layouts (QWERTY, DVORAK, COLEMAK and WORKMAN), // this allows us to quickly modify the bottom row for all of the layouts @@ -301,4 +250,4 @@ const uint32_t PROGMEM unicode_map[] = { KC_SPACE,KC_BSPC, KC_END, KC_PGDN, KC_DEL, KC_ENTER -#endif +#endif // !USERSPACE diff --git a/users/drashna/drashna_unicode.h b/users/drashna/drashna_unicode.h new file mode 100644 index 00000000000..3d1bc03f9b6 --- /dev/null +++ b/users/drashna/drashna_unicode.h @@ -0,0 +1,71 @@ +#ifndef UNICODE_USERSPACE_H +#define UNICODE_USERSPACE_H + + + +/* use X(n) to call the */ + +enum unicode_name { + THINK, // thinking face 🤔 + GRIN, // grinning face 😊 + SMRK, // smirk 😏 + WEARY, // good shit 😩 + UNAMU, // unamused 😒 + + SNEK, // snke 🐍 + PENGUIN, // 🐧 + DRAGON, // 🐉 + MONKEY, // 🐒 + CHICK, // 🐥 + BOAR, // 🐗 + + OKOK, // 👌 + EFFU, // 🖕 + INUP, // 👆 + THUP, // 👍 + THDN, // 👎 + + BBB, // dat B 🅱 + POO, // poop 💩 + HUNDR, // 100 💯 + EGGPL, // EGGPLANT 🍆 + WATER, // wet 💦 + TUMBLER, // 🥃 + + LIT, // fire 🔥 + BANG, // ‽ + IRONY, // ⸮ + DEGREE // ° +}; + + +const uint32_t PROGMEM unicode_map[] = { + [THINK] = 0x1F914, + [GRIN] = 0x1F600, + [BBB] = 0x1F171, + [POO] = 0x1F4A9, + [HUNDR] = 0x1F4AF, + [SMRK] = 0x1F60F, + [WEARY] = 0x1F629, + [EGGPL] = 0x1F346, + [WATER] = 0x1F4A6, + [LIT] = 0x1F525, + [UNAMU] = 0x1F612, + [SNEK] = 0x1F40D, + [PENGUIN] = 0x1F427, + [BOAR] = 0x1F417, + [MONKEY] = 0x1F412, + [CHICK] = 0x1F425, + [DRAGON] = 0x1F409, + [OKOK] = 0x1F44C, + [EFFU] = 0x1F595, + [INUP] = 0x1F446, + [THDN] = 0x1F44E, + [THUP] = 0x1F44D, + [TUMBLER] = 0x1F943, + [BANG] = 0x0203D, + [IRONY] = 0x02E2E, + [DEGREE] = 0x000B0 + }; + + #endif diff --git a/users/drashna/readme.md b/users/drashna/readme.md index c4e305e15bb..79758e7e569 100644 --- a/users/drashna/readme.md +++ b/users/drashna/readme.md @@ -146,3 +146,31 @@ endif ``` Then, if you run `make keyboard:name NO_SECRETS=yes`, it will default to the test strings in your `.c` file, rather than reading from your file. + + +Userspace EEPROM config +----------------------- + +This adds EEPROM support fo the userspace, so that certain values are configurable in such a way that persists when power is lost. Namely, just the clicky feature and the Overwatch macro option ("is_overwatch"). This is done by reading and saving the structure from EEPROM. + +To implement this, first you need to specify the location: + +```c +#define EECONFIG_USERSPACE (uint8_t *)20 +``` +This tells us where in the EEPROM that the data structure is located, and this specifies that it's a byte (8 bits). However, to maximize it's usage, we want to specify a data structure here, so that we can use multiple settings. To do that: + +```c +typedef union { + uint32_t raw; + struct { + bool clicky_enable :1; + bool is_overwatch :1; + }; +} userspace_config_t; +``` +Then, in your C file, you want to add: `userspace_config_t userspace_config;`, and in your `matrix_init_*` function, you want to add `userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE);` + +From there, you'd want to use the data structure (such as `userspace_config.is_overwatch`) when you want to check this value. + +And if you want to update it, update directly and then use `eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw);` to write the value back to the EEPROM. From ddb1c83695008bbf87d6bebc836b408ed70a8abb Mon Sep 17 00:00:00 2001 From: Florens Pauwels Date: Tue, 1 May 2018 17:08:48 +0200 Subject: [PATCH 14/34] Added archlinux support to linux_install.sh --- util/linux_install.sh | 9 +++++++++ 1 file changed, 9 insertions(+) mode change 100644 => 100755 util/linux_install.sh diff --git a/util/linux_install.sh b/util/linux_install.sh old mode 100644 new mode 100755 index ef9de5b19f5..e071b8ad30f --- a/util/linux_install.sh +++ b/util/linux_install.sh @@ -10,6 +10,15 @@ elif grep ID /etc/os-release | grep -q debian; then sudo apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc \ dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi \ libnewlib-arm-none-eabi +elif grep ID /etc/os-release | grep -q arch; then + sudo pacman -S gcc unzip wget zip avr-gcc avr-binutils avr-libc \ + dfu-util arm-none-eabi-gcc arm-none-eabi-binutils \ + arm-none-eabi-newlib + git clone https://aur.archlinux.org/dfu-programmer.git /tmp/dfu-programmer + cd /tmp/dfu-programmer + makepkg -sic + rm -rf /tmp/dfu-programmer/ + else echo "Sorry, we don't recognize your OS. Help us by contributing support!" echo From d1dfefc8971be50f85da4084a78de00a163c6482 Mon Sep 17 00:00:00 2001 From: christopherjanzen Date: Wed, 2 May 2018 12:57:33 -0500 Subject: [PATCH 15/34] Add cijanzen Pearl 40% keymap (#2878) * Add personal keymap for Pearl 40% * Updating readme and adding keymap image * Updated readme * Force make to use Python 3 * cleanup keymap * updated keymap image * update readme for new keymap image * reverting atmega32a_program * removed redundant sections of user config and rules * fixed user config file * fixed led indicators to properly show layer 4 --- keyboards/pearl/keymaps/cijanzen/README.md | 29 +++++++ keyboards/pearl/keymaps/cijanzen/config.h | 27 ++++++ keyboards/pearl/keymaps/cijanzen/keymap.c | 77 ++++++++++++++++++ .../cijanzen/pearl-cijanzen-keymap.jpg | Bin 0 -> 424673 bytes keyboards/pearl/keymaps/cijanzen/rules.mk | 11 +++ 5 files changed, 144 insertions(+) create mode 100644 keyboards/pearl/keymaps/cijanzen/README.md create mode 100644 keyboards/pearl/keymaps/cijanzen/config.h create mode 100644 keyboards/pearl/keymaps/cijanzen/keymap.c create mode 100644 keyboards/pearl/keymaps/cijanzen/pearl-cijanzen-keymap.jpg create mode 100644 keyboards/pearl/keymaps/cijanzen/rules.mk diff --git a/keyboards/pearl/keymaps/cijanzen/README.md b/keyboards/pearl/keymaps/cijanzen/README.md new file mode 100644 index 00000000000..745442955fa --- /dev/null +++ b/keyboards/pearl/keymaps/cijanzen/README.md @@ -0,0 +1,29 @@ +# cijanzen's Pearl 40% + +## Layout + +The firmware offers five layers: + +1. Base layer +2. Numbers and arrows (Fn1) +3. F-row and navigation (Fn2) +4. Media and RGB controls (Fn3) +5. Utils (Fn2+Fn3) + +A few specifics worth mentioning: +- Autoshift has been enabled to allow for easier access of shifted keys +- Tab will operate as tab key on tap and fn layer on hold +- Indicator LEDs indicate the current layer + + +![cijanzen's Pearl 40% layout](https://raw.githubusercontent.com/christopherjanzen/qmk_firmware/bab090ee24866e6c38892ffc5ffa53813aec3832/keyboards/pearl/keymaps/cijanzen/pearl-cijanzen-keymap.jpg) + +Base for this firmware copied from jetpacktuxedo's and rask's QMK firmware + +--- + +## Compiling and flashing + +To compile and flash the HEX follow the [Pearl 40% instructions](https://gist.github.com/clee/a43f198a70de0e6dae22d7638b41440a). + +You might need to check the comments at the bottom of the gist as well. diff --git a/keyboards/pearl/keymaps/cijanzen/config.h b/keyboards/pearl/keymaps/cijanzen/config.h new file mode 100644 index 00000000000..b34fdad90a0 --- /dev/null +++ b/keyboards/pearl/keymaps/cijanzen/config.h @@ -0,0 +1,27 @@ +/* +Copyright 2017 Luiz Ribeiro + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include QMK_KEYBOARD_CONFIG_H + +#undef BACKLIGHT_LEVELS +#define BACKLIGHT_LEVELS 3 + + +#endif diff --git a/keyboards/pearl/keymaps/cijanzen/keymap.c b/keyboards/pearl/keymaps/cijanzen/keymap.c new file mode 100644 index 00000000000..896e157fd63 --- /dev/null +++ b/keyboards/pearl/keymaps/cijanzen/keymap.c @@ -0,0 +1,77 @@ +#include QMK_KEYBOARD_H + +#define ____ KC_TRNS +// Tab on tap or Function layer 1 on hold +#define FN_TAB LT(1, KC_TAB) +#define KC_SLP KC_SYSTEM_SLEEP + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // BASE LAYER + [0] = LAYOUT_all( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, + FN_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(2), + KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, KC_BSPC, KC_SPC, MO(3), MO(1) + ), + // BASE LAYER TWO (Fn1) + [1] = LAYOUT_all( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_UP, KC_QUOT, KC_BSLS, + ____, ____, ____, ____, ____, ____, ____, ____, KC_LEFT, KC_DOWN, KC_RGHT, KC_RSFT, + ____, ____, ____, KC_DEL, KC_DEL, ____, KC_RGUI, ____ + ), + // FROW LAYER AND ARROWS (Fn2) + [2] = LAYOUT_all( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_PGUP, ____, ____, + ____, ____, ____, ____, ____, ____, ____, ____, KC_HOME, KC_PGDN, KC_END, ____, + MO(4), ____, ____, ____, ____, ____, ____, ____ + ), + // MEDIA AND RGB (Fn3) + [3] = LAYOUT_all( + ____, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL, + ____, ____, ____, RGB_HUI, RGB_SAI, RGB_VAI, ____, ____, ____, ____, ____, ____, + ____, RGB_MOD, RGB_TOG, RGB_HUD, RGB_SAD, RGB_VAD, BL_TOGG, BL_STEP, ____, ____, ____, ____, + ____, ____, ____, ____, ____, ____, ____, ____ + ), + // UTIL (Fn1+Fn3) + [4] = LAYOUT_all( + KC_SLP, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_PSCR, RESET, + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____, ____, ____, ____, ____ + ), +}; + +/** + * Status LED layer indicators courtesy of jetpacktuxedo's firmware + */ +uint32_t layer_state_set_kb(uint32_t state) +{ + if (state & (1<<1)) { // if we are on layer 1 + PORTD |= (1 << PD0); // light num lock led + } else if (state & (1<<2)) { // if we are on layer 2 + + if (state & (1<<4)) { + PORTD |= (1 << PD0); // light all indicator leds + PORTD |= (1 << PD1); + PORTD |= (1 << PD6); + } else { + PORTD &= ~(1 << PD0); + PORTD |= (1 << PD1); // light caps lock led + PORTD &= ~(1 << PD6); + } + } else if (state & (1<<3)) { // if we are on layer 3 + PORTD |= (1 << PD6); // light scroll lock led + } else if (state & (1<<4)) { // if we are stuck on layer 4 + PORTD |= (1 << PD0); // light all indicator leds + PORTD |= (1 << PD1); + PORTD |= (1 << PD6); + } else { + PORTD &= ~(1 << PD0); + PORTD &= ~(1 << PD1); + PORTD &= ~(1 << PD6); + } + + return state; +} diff --git a/keyboards/pearl/keymaps/cijanzen/pearl-cijanzen-keymap.jpg b/keyboards/pearl/keymaps/cijanzen/pearl-cijanzen-keymap.jpg new file mode 100644 index 0000000000000000000000000000000000000000..60e5c4746400bc6a51f8845ed8167086b804bd93 GIT binary patch literal 424673 zcmeFa2UHZ>wk}+Xpkxq{Oez7*wxbRkfMMVIpBFxL$*45tc zijBRav&RjNZ*Mv|t~lG>;4qfb6xH;)W$)yC=b?|i{zEMT+lQ{Ua&{bw3Rj>od6>JG zyS<Ht>dkFakdiYtxggksX|7Q!g z?R{;1oW1;w|6~G^C-5&gO z0PF3+KQ|!or~JX=z~!%U^>vUC|4Y>w3MBv_ULp|oz6a@f`b6(ay)_*w<5x73<-~a%- zB>+Ha3IKHP0f5Z>51E16er^YfW&yz95qPUc03bUD0C>RtsVxW#po~Bp{{LwC*~tG< z13wQYyai}4oWT+=5}lz1&eEPCqCG?C0U+SRL;OeEKRfYrIdhii95KoH3#4S^;0_Hm zz}YiIL}$+t5fh&~2W|}pw*%*Bi7#FiyGcT)Yki)>`;z$Y$y4wiBy4;_ zNy#oVFfuW7^YHRrQr2y#ujaGTgNmz+E7RB3K@V~J1K{+loEj2sGZbDo<%|G*szyfD3*5$la9z^Mk#mS z9tP>P1EF~*cD6|=ca=%)tfb04A?g%UnaDs^|l&{3bqRvi4Yux9Dp(V`S~1zxbwv)kwUG*?+5F>!GZtr&*z-1(I<<0x3ZN&eMnV zK7PWDsR8n6SA-s&dl?+aX88p zYCr&<3g!|3YFRk`wl+4p;y{o96ck7kfNt`81mIJ-A}R->u6T6G%M;JT2*K+?FoFgA z@b{NB2|!eyA_3rlU}%kZObNgZs5=1&zx;*(3>d(BB^A=(`+O_QxVxf?xEG4Qo=FkK zQT?F~{}8r704@jx5P%d==&?@0d<5XLZdWHZ>puMO4!oxpRz?7RGnK)!dl3L!G`vUI zs>Ttwk7>fwn0+Gv+`0td()%ND{k|v+juCxJ0Ct}cfEYWBKK^m7Ck~1v0EaXLAUd|w zX6$ft)f0E6VHvMpgunJ|zlZ=lQzan)DC^$|z}i&;aB%=ta&pFQ85@WIn*l3mL6H{j zP4+EgZ@PBk(p7Q#w>DJ?fKnnQ0q8*x5rDy4c<$6*?W3~;o#?$NP*}I{9Q-G7iW?;f zo#@b6_#uB1_GQ#W5GXX% z)qAJo)9LthYDb*f5vTUvsa<|*m!JAir~cEapL>c&oZ=CuxX~$Ybc*kt;;^SU>?vM; z%4?kR8u;6%c=;(_eu|f$;^n7!`6*t0ikF|_<)?W0|G)9_tu`>A=R8RW!jf}F$gf?a z=V&&vs5Sel1_7Xf$@CsD`#`hFHbO{bkBdhN&o@$= zH+glqW==XFW3@JDS+HliYhBLLF}(WsVNuyu@wJM`-W81Grj6+L%>gsN^2u=2k2|m{9W^Y+qxBuQzf$Ptd5svZQpN?$#wq`&PhG0 zh~-!Oq91(Bg&zP#*TL=7h_-}9E^9{iBMt(tjFRjFdo?)xBB& zM`a>XY}$Hl$;HjBt<7nf0Re9O@mx-q`I0$qD-(e7%BZUY%~m`^vH?*(!|a;LpFYSl zg&3!=?O%=RT6qm~;`ejXDbnQY6N{bRzBVxEn^tm7jQ~_&DM-i#x~zS6-jJ&j|K6or z64j0L+F#X5Ad_4jBJ)GCaHUw*2BhVty6=78X0!f{7`O!JoH_mY4~pQ-aVG&dCvZ{^ zbw;}$JQ)XHrsEU!Z5^yX#{RpSq`UOiR-jOu*s3O{>XcNSbUrylBDn~IbF2SST!q=~ z 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%0AEB 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ℑa*6jT`!)#{~EMahbY@rOIvrxA=Gp_FS?pceEwvARcfnL zl6G2Ya^iDXHMd}jc6&!I{G9VQF{-9W8-OD$tusXTRS&QLSplySo!hfqPX88Gz~pDq zsI#4CUvKwM`}q8I z%`D)5lzPy2i4|D0nV|x{H~)#TNoj?kuU8Zv_kiJGk-9jSd(DdkXs<#z2kwt((2si@ccx#Y-M0 zic0iQT4U+FOTJr4DjnjwD_?aO zdf}vo^agKF)WfSH{vJ$(7NIeZ+8nB6$iO-RcfCS1daIVtMxRfLw{O^>{@Y0mp+$+x zx_5$tiT0s6m;#d3xkjeg8dy2W?^eJ`WCgLFNpffxWfGs^mG?0)0o8xjhHF21m@N^X zIxN)X${lYg!;uXnkpKv`Z4?pZ)n>0VuQVXX(+MC*jcBE=Ah%~FU%>!r!!Lc6%VKyF zxphvYNF;tUNDGp_8iwR;>`Mpo_RR5iAv3W1AgVY({VveY0+jMK$_ttq7)OJcCJh|9 zfA#vseG>xzX9y>uVBloCo%Wk3{cIg2`k4HGB5m~B*x!w~ueHtS1FTJ|$MltF$j7r@ z_cCdJ1h*qOh)$!(&mG%uE?Aad1R7gq0JuT_>vaSJfScD}fY;G;cisn|0p3QfwezBr z0l?ch^<;SjIRq|3JOC3jzrU^|-;o&+0OU?qH0zVkgT_OP-?0-~K#*zATrfU@Y zo|)J81sIP0^lU~{=rYZT#1Lh;k*S@Jo7!2mG9HdUL`OAbCNO&lO1!-+7BQl5oS*?> zrT15yqh6KD@atO8wS_S`pT{#Q3?h>vebtks65L`H#6KHnaRyu=!o;O5&o(y^++zerJfDK2V} z$82tQt;d95kt@UNUvign8z+L3yk?dwkk-sZ&ND08M6MJ3f#N(FAsN78T&#vDM~>sw z>CK2C81o^y*O0*7MPxn zXdg>+Ha9Dd>KN~WC%C0mL1QPJ^wMGRWiaQ8nI5C2y4K1gVB_b0ki@1$wC7fZhXyN3 zx4x;isXp1I0XPFj5qg#0bTz+CAt)NAXbDOtS67F^Ui!dp$`lr~f3Y1d^Ef5LT~_cLEFX2NIQvCvf67e0)5>#gh~^!sCez-NsDRU`Nq>5Gi*mu-`K3?9 zHafATIBe+IPGWVWD(s-Kw_ncX%2H8%kz62uW+g_m%e)e6M!(Y3DZilODE|aH?)txz zH)ShL&HvH|Y-{W46IL2uy#n-s>s}}2LdWzK$7muqNeS$n0gudYpA}}DiW)Im8;%7+ z?IRDpsU9(%@LYs(fhJ!Y2i~Gs<-RF!vWp(e)9tM-JfqcT^v4hOW}a&baI^Wr-b@r< z;WouZ6W51)AO8n?(=bBL1b+P*GGFEX$D3|2QUr#-oT zk~RD25v*GOQmzvext?vv7MtcQaH3sLK0Y0Y?(%UmiBB~E41hj>@3uq-2I-bx?W&y| zw_-V!9i#|sKi1vyqQQ(hTlYL>z;ymiK%aNmX#IPM2>WR=o4DH!BU^$K?b(FiL=k(o zj7gwqHbjT=gdo`{THT)XN|Muqu5VWqL7qP<`=bfmuMiHZI#@;Yy!El)8YO2wAx7W< z*d{k846&5E6k6OBsKVmCC6|Kh-{#~DY~^2EihlUD@ZVV*our oJ}1o71tiNzhu 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 TAL>V+H2zgd`(HN_Kj;1jS25B1 literal 0 HcmV?d00001 diff --git a/keyboards/pearl/keymaps/cijanzen/rules.mk b/keyboards/pearl/keymaps/cijanzen/rules.mk new file mode 100644 index 00000000000..863b9419ad6 --- /dev/null +++ b/keyboards/pearl/keymaps/cijanzen/rules.mk @@ -0,0 +1,11 @@ +# build options +BOOTMAGIC_ENABLE = yes +MOUSEKEY_ENABLE = no +EXTRAKEY_ENABLE = yes +CONSOLE_ENABLE = no +COMMAND_ENABLE = yes +BACKLIGHT_ENABLE = yes +RGBLIGHT_ENABLE = yes +RGBLIGHT_CUSTOM_DRIVER = yes +# TAP_DANCE_ENABLE = yes +AUTO_SHIFT_ENABLE = yes From 9b9178919388fc8e10167794ae719be23901b2fc Mon Sep 17 00:00:00 2001 From: Charles Pletcher Date: Wed, 2 May 2018 21:35:16 -0400 Subject: [PATCH 16/34] Add dilly/pletcher layout (#2880) * Add pletcher keymap to dilly/keymaps For the moment, this keymap just removes unneeded RGB keycodes, since an iPad will cut the keyboard off if LEDs are turned on. * Drop support for A_RSFT, add media and autoshift * Lower USB_MAX_POWER_CONSUMPTION for dilly on iPad * Document USB_MAX_POWER_CONSUMPTION This config option is useful for limiting the requested power by, e.g., an iOS device. While the default value is 500, a much lower value--say, 50--can sufficiently power a small keyboard without LEDs. --- docs/config_options.md | 2 + keyboards/dilly/keymaps/pletcher/config.h | 11 +++ keyboards/dilly/keymaps/pletcher/keymap.c | 97 +++++++++++++++++++++++ keyboards/dilly/keymaps/pletcher/rules.mk | 2 + 4 files changed, 112 insertions(+) create mode 100644 keyboards/dilly/keymaps/pletcher/config.h create mode 100644 keyboards/dilly/keymaps/pletcher/keymap.c create mode 100644 keyboards/dilly/keymaps/pletcher/rules.mk diff --git a/docs/config_options.md b/docs/config_options.md index acc402665b7..8cdcc97e495 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -89,6 +89,8 @@ This is a C header file that is one of the first things included, and will persi * tries to keep switch state consistent with keyboard LED state * `#define IS_COMMAND() ( keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) )` * key combination that allows the use of magic commands (useful for debugging) +* `#define USB_MAX_POWER_CONSUMPTION` + * sets the maximum power (in mA) over USB for the device (default: 500) ## Features That Can Be Disabled diff --git a/keyboards/dilly/keymaps/pletcher/config.h b/keyboards/dilly/keymaps/pletcher/config.h new file mode 100644 index 00000000000..805bef41881 --- /dev/null +++ b/keyboards/dilly/keymaps/pletcher/config.h @@ -0,0 +1,11 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +#define AUTO_SHIFT_TIMEOUT 150 +#define NO_AUTO_SHIFT_SPECIAL +#define NO_AUTO_SHIFT_NUMERIC +#define USB_MAX_POWER_CONSUMPTION 50 + +#endif diff --git a/keyboards/dilly/keymaps/pletcher/keymap.c b/keyboards/dilly/keymaps/pletcher/keymap.c new file mode 100644 index 00000000000..f91dabee76a --- /dev/null +++ b/keyboards/dilly/keymaps/pletcher/keymap.c @@ -0,0 +1,97 @@ +#include "dilly.h" +#include "action_layer.h" + +extern keymap_config_t keymap_config; + +#define _BASE 0 +#define _FN1 1 +#define _FN2 2 +#define _FN3 3 +#define _FN4 4 +#define _FN5 5 + +#define KC_ KC_TRNS +#define _______ KC_TRNS + +// Tap-Hold keys +#define KC_F_L3 LT(_FN3, KC_F) +#define KC_ZCTL MT(MOD_LCTL, KC_Z) +#define KC_XALT MT(MOD_LALT, KC_X) +#define KC_CGUI MT(MOD_LGUI, KC_C) +#define KC_V_L4 LT(_FN4, KC_V) +#define KC_SPL2 LT(_FN2, KC_SPC) +#define KC_B_L1 LT(_FN1, KC_B) +#define KC_N_L5 LT(_FN5, KC_N) +#define KC_MALT MT(MOD_RALT, KC_M) +#define KC_BSCT MT(MOD_RCTL, KC_BSPC) +#define KC_ENTS MT(MOD_RSFT, KC_ENT) +#define KC_ESCS MT(MOD_RSFT, KC_ESC) + +#define KC_GUIC LGUI(KC_C) + +#define KC_RST RESET +#define KC_DBUG DEBUG + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = KC_KEYMAP( + //,----+----+----+----+----+----+----+----+----+----. + Q , W , E , R , T , Y , U , I , O , P , + //|----+----+----+----+----+----+----+----+----+----| + A , S , D ,F_L3, G , H , J , K , L ,ESCS, + //|----+----+----+----+----+----+----+----+----+----| + ZCTL,XALT,CGUI,V_L4,SPL2,B_L1,N_L5,MALT,BSCT,ENTS + //`----+----+----+----+----+----+----+----+----+----' + ), + + [_FN1] = KC_KEYMAP( + //,----+----+----+----+----+----+----+----+----+----. + 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , + //|----+----+----+----+----+----+----+----+----+----| + F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 , + //|----+----+----+----+----+----+----+----+----+----| + , , , ,BSPC, , , , , + //`----+----+----+----+----+----+----+----+----+----' + ), + + [_FN2] = KC_KEYMAP( + //,----+----+----+----+----+----+----+----+----+----. + EXLM, AT ,HASH,DLR ,PERC,CIRC,AMPR,ASTR,LPRN,RPRN, + //|----+----+----+----+----+----+----+----+----+----| + F11 ,F12 , , , , , , , ,GRV , + //|----+----+----+----+----+----+----+----+----+----| + , , , ,TAB , DEL, , , , + //`----+----+----+----+----+----+----+----+----+----' + ), + + [_FN3] = KC_KEYMAP( + //,----+----+----+----+----+----+----+----+----+----. + , , , , ,MINS,EQL ,LBRC,RBRC,BSLS, + //|----+----+----+----+----+----+----+----+----+----| + TAB , , , , ,COMM,DOT ,SLSH,SCLN,QUOT, + //|----+----+----+----+----+----+----+----+----+----| + , , , ,BSPC, ,LEFT,DOWN, UP ,RGHT + //`----+----+----+----+----+----+----+----+----+----' + ), + + [_FN4] = KC_KEYMAP( + //,----+----+----+----+----+----+----+----+----+----. + , , , , ,UNDS,PLUS,LCBR,RCBR,PIPE, + //|----+----+----+----+----+----+----+----+----+----| + TAB , , , , , LT , GT ,QUES,COLN,DQUO, + //|----+----+----+----+----+----+----+----+----+----| + , ,GUIC, ,BSPC, ,HOME,PGDN,PGUP,END + //`----+----+----+----+----+----+----+----+----+----' + ), + + [_FN5] = KC_KEYMAP( + //,----+----+----+----+----+----+----+----+----+----. + , , ,RST , , ,MSTP,VOLD,VOLU,MPLY, + //|----+----+----+----+----+----+----+----+----+----| + , ,DBUG, , , , ,ASDN,ASUP,ASRP, + //|----+----+----+----+----+----+----+----+----+----| + , ,GUIC, , , , , , ,ASTG + //`----+----+----+----+----+----+----+----+----+----' + ) + +}; diff --git a/keyboards/dilly/keymaps/pletcher/rules.mk b/keyboards/dilly/keymaps/pletcher/rules.mk new file mode 100644 index 00000000000..9b9dd8341b6 --- /dev/null +++ b/keyboards/dilly/keymaps/pletcher/rules.mk @@ -0,0 +1,2 @@ +AUTO_SHIFT_ENABLE = yes +RGBLIGHT_ENABLE = no From c52b3c6126228b571891d2ad6553913a6cc7ebf4 Mon Sep 17 00:00:00 2001 From: ajp10304 Date: Thu, 3 May 2018 02:36:15 +0100 Subject: [PATCH 17/34] AJP10304 Planck and JJ40 layouts. Added fn2 layer (#2879) --- keyboards/jj40/keymaps/ajp10304/keymap.c | 118 ++++++++++++++++---- keyboards/jj40/keymaps/ajp10304/readme.md | 54 +++++---- keyboards/planck/keymaps/ajp10304/keymap.c | 114 ++++++++++++++++--- keyboards/planck/keymaps/ajp10304/readme.md | 51 ++++++--- 4 files changed, 264 insertions(+), 73 deletions(-) diff --git a/keyboards/jj40/keymaps/ajp10304/keymap.c b/keyboards/jj40/keymaps/ajp10304/keymap.c index 1da57c444fd..b6d4d7b55e5 100644 --- a/keyboards/jj40/keymaps/ajp10304/keymap.c +++ b/keyboards/jj40/keymaps/ajp10304/keymap.c @@ -14,6 +14,8 @@ enum jj40_layers { _MRSE, _FUNC, _MFNC, + _FUNC2, + _MFNC2, _ADJUST, _MOUSE }; @@ -23,6 +25,8 @@ enum jj40_keycodes { MAC, FUNC, MFNC, + FUNC2, + MFNC2, LOWER, MLWR, RAISE, @@ -47,14 +51,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn | + * | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn2 | * `-----------------------------------------------------------------------------------' */ [_QWERTY] = KEYMAP(\ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,\ MT(MOD_LSFT, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT) ,\ KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT ,\ - MO(_FUNC), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LSHIFT, KC_BTN2, KC_RCTL, MO(_FUNC) \ + MO(_FUNC), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LSHIFT, KC_BTN2, KC_RCTL, MO(_FUNC2) \ ), /* Function @@ -117,15 +121,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | CAPS | | | | | PLAY1| PLAY2| Mute | Vol+ | Play | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | STOP | STOP | Prev | Vol- | Next | | | + * | PC/MC| | | | | STOP | STOP | Prev | Vol- | Next | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' */ [_ADJUST] = KEYMAP(\ - M(0), RESET, QWERTY, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, KC_DEL ,\ - KC_CAPS, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, _______, _______ ,\ - TG(_MAC), _______, _______, _______, _______, DYN_REC_STOP, DYN_REC_STOP, KC_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_MEDIA_NEXT_TRACK, _______, _______ ,\ + M(0), RESET, QWERTY, BL_ON, BL_OFF, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, KC_DEL ,\ + KC_CAPS, RGB_TOG, RGB_MOD, RGB_VAD, RGB_VAI, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, _______, _______ ,\ + TG(_MAC), RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, DYN_REC_STOP, DYN_REC_STOP, KC_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_MEDIA_NEXT_TRACK, _______, _______ ,\ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ ), @@ -147,32 +151,57 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______\ ), +/* Function 2 (Right hand side) + * ,-----------------------------------------------------------------------------------. + * | | |WRDSEL| | | | LNDEL| | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | LNSEL| DUP | | | | |LNJOIN| | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | UNDO | CUT | COPY | PASTE| | | | | | | MODE | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_FUNC2] = KEYMAP(\ + _______, _______, M(1), _______, _______, _______, M(5), _______, _______, _______, _______, _______,\ + _______, _______, M(3), M(7), _______, _______, _______, M(10), _______, _______, _______, _______,\ + _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, _______, _______, _______, _______, M(98), \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +), + [_MAC]= KEYMAP(\ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ - _______, _______, _______, _______, MLWR, _______, _______, MRSE, _______, _______, _______, _______\ + MFNC, _______, _______, _______, MLWR, _______, _______, MRSE, _______, _______, _______, MFNC2 \ ), [_MLWR] = KEYMAP(\ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ - _______, KC_GRAVE, KC_NONUS_BSLASH, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______\ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ ), [_MRSE] = KEYMAP(\ - _______, _______, M(2), _______, _______, _______, _______, _______, _______, _______, _______, _______ ,\ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_EQL) ,\ - _______, _______, _______, _______, _______, _______, LALT(KC_LEFT), _______, _______, _______, LALT(KC_RIGHT), LGUI(KC_MINS) ,\ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + _______, _______, M(2), _______, _______, _______, _______, _______, _______, _______, _______, _______ ,\ + _______, _______, _______, _______, _______, _______, _______, LCTL(KC_A), _______, LCTL(KC_E), _______, LGUI(KC_EQL) ,\ + _______, _______, _______, _______, _______, _______, LALT(KC_LEFT), _______, _______, _______, LALT(KC_RIGHT), LGUI(KC_MINS) ,\ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ ), [_MFNC]= KEYMAP(\ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,\ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_PENT) ,\ - _______, KC_GRAVE, KC_NONUS_BSLASH, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,\ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,\ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_PENT) ,\ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,\ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +), + +[_MFNC2] = KEYMAP(\ + _______, _______, M(2), _______, _______, _______, M(6), _______, _______, _______, _______, _______,\ + _______, _______, M(4), M(8), _______, _______, _______, M(10), _______, _______, _______, _______,\ + _______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), _______, _______, _______, _______, _______, _______, M(99), \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ ) }; @@ -243,6 +272,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_MFNC); } return false; + case MFNC2: + if (record->event.pressed) { + layer_on(_FUNC2); + layer_on(_MFNC2); + } else { + layer_off(_FUNC2); + layer_off(_MFNC2); + } + return false; } return true; } @@ -262,6 +300,48 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t keycode, uint8_t op case 2: // Word Select Mac SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_RIGHT) SS_DOWN(X_LSHIFT) SS_TAP(X_LEFT) SS_UP(X_LSHIFT) SS_UP(X_LALT)); return false; + + case 3: // Line Select + SEND_STRING(SS_TAP(X_HOME) SS_DOWN(X_LSHIFT) SS_TAP(X_END) SS_UP(X_LSHIFT)); + return false; + + case 4: // Line Select Mac + SEND_STRING(SS_LCTRL("a") SS_DOWN(X_LSHIFT) SS_LCTRL("e") SS_UP(X_LSHIFT)); + return false; + + case 5: // Line Delete + SEND_STRING(SS_TAP(X_HOME) SS_DOWN(X_LSHIFT) SS_TAP(X_END) SS_UP(X_LSHIFT)); + SEND_STRING(SS_TAP(X_BSPACE)); + return false; + + case 6: // Line Delete Mac + SEND_STRING(SS_LCTRL("a") SS_DOWN(X_LSHIFT) SS_LCTRL("e") SS_UP(X_LSHIFT)); + SEND_STRING(SS_TAP(X_BSPACE)); + return false; + + case 7: // Duplicate Selection + SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v")); + return false; + + case 8: // Duplicate Selection Mac + SEND_STRING(SS_LGUI("c") SS_TAP(X_RIGHT) SS_LGUI("v")); + return false; + + case 9: // Join line + SEND_STRING(SS_TAP(X_END) SS_TAP(X_DELETE)); + return false; + + case 10: // Join line Mac + SEND_STRING(SS_LCTRL("e") SS_TAP(X_DELETE)); + return false; + + case 98: // Print mode + SEND_STRING("PC"); + return false; + + case 99: // Print mode + SEND_STRING("OSX"); + return false; } } return MACRO_NONE; diff --git a/keyboards/jj40/keymaps/ajp10304/readme.md b/keyboards/jj40/keymaps/ajp10304/readme.md index eaaacd05b3e..7ed6adec743 100644 --- a/keyboards/jj40/keymaps/ajp10304/readme.md +++ b/keyboards/jj40/keymaps/ajp10304/readme.md @@ -17,7 +17,7 @@ the second is the output when shift is applied. | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | | Tab | A | S | D | F | G | H | J | K | L | ;: | Enter| | Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft | -| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn | +| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn2 | ##### Function Layer Activated when `fn` held in the above `qwerty` layer. @@ -27,7 +27,7 @@ Activated when `fn` held in the above `qwerty` layer. | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | ~ |INSERT| | Shift | \| | `¬ | #~ | * | -_ | =+ | \| | [{ | ]} | '@ |Shift | -| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Mouse | MENU | Alt | Ctrl | Fn | +| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Mouse | MENU | Alt | Ctrl | Fn2 | ##### Lower Layer Activated when `Lower` is held in the above `qwerty` layer. @@ -65,28 +65,44 @@ Activated when `Lower` and `Raise` are held together in the above `qwerty` layer * ????: Runs a macro for outputting a text string. Do not use this store passwords. * Reset: Enter bootloader for flashing firmware to the keyboard. * CAPS: Toggle caps lock. +* Macro functions: Allows recording of macros. To start recording the macro, press either REC1 or REC2. +To finish the recording, press STOP. To replay the macro, press either PLAY1 or PLAY2. * MAC: Toggle MAC OS extensions to layers. This allows MLWR to be enabled with LOWER, -MRSE with RAISE and MFNC with FUNC respectively. -* REC1, REC2: Start recording macro. -* PLAY1, PLAY2: Playback macro. -* STOP1, STOP2: Stop recording macro. +MRSE with RAISE, MFNC with FUNC and MFNC2 with FUNC2 respectively. | | | | | | | | | | | | | | :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| | ???? | Reset|Qwerty| | | REC1 | REC2 | | | | | Del | -| CAPS | | | | | PLAY1| PLAY | Mute | Vol+ | Play | | | -| MAC | | | | | STOP | STOP | Prev | Vol- | Next | | | -| | | | | | | | | | | | | - -##### Mouse -Activated when `fn` and `Raise` are held together. +| CAPS | | | | | PLAY1|PLAY2 | Mute | Vol+ | Play | | | +| MAC | | | | | STOP1|STOP2 | Prev | Vol- | Next | | | +| | | | | | | | | DYN | | | | -| | | | | | | | | | | | | -| :---: |:----:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:| -| | | | | | | | | | | | | -| ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | | -| ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN |RIGHT | | | -| | | | | | | | | | | | | +##### Function 2 Layer +Activated when `fn` held in the above `qwerty` layer. +* WRDSEL: Select the word where the cursor is. +* LNDEL: Delete the line where the cursor is. +* LNSEL: Select the line where the cursor is. +* DUP: Duplicate the selected text. +* LNJOIN: Join the line where the cursor is with the following line. +* MODE: Print either `PC` or `OSX` depending on what layer mode is active. + +| | | | | | | | | | | | | +| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| +| | |WRDSEL| | | | LNDEL| | | | | | +| | | LNSEL| DUP | | | | |LNJOIN| | | | +| | UNDO | CUT | COPY | PASTE| | | | | | | MODE | +| | | | | | | | | | | | | + +##### Mouse Layer +Activated when `fn` and `raise` held together. + +| | | | | | | | | | | | | +| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| +| ESC | | | | | | | | | | | | +| ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | | +| ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN | RIGHT| | | +| | | | | | | | | | | | | ####Manual Flashing of hex file -`bootloadHID -r .build/jj40_ajp10304.hex` +Use sleep to get a chance to get into boot mode. +`sleep 5; bootloadHID -r .build/jj40_ajp10304.hex` diff --git a/keyboards/planck/keymaps/ajp10304/keymap.c b/keyboards/planck/keymaps/ajp10304/keymap.c index 02ba8fff766..10c0307330a 100644 --- a/keyboards/planck/keymaps/ajp10304/keymap.c +++ b/keyboards/planck/keymaps/ajp10304/keymap.c @@ -14,6 +14,8 @@ enum planck_layers { _MRSE, _FUNC, _MFNC, + _FUNC2, + _MFNC2, _ADJUST, _MOUSE }; @@ -23,6 +25,8 @@ enum planck_keycodes { MAC, FUNC, MFNC, + FUNC2, + MFNC2, LOWER, MLWR, RAISE, @@ -47,14 +51,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn | + * | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn2 | * `-----------------------------------------------------------------------------------' */ [_QWERTY] = { {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC }, {MT(MOD_LSFT, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT) }, {KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT }, - {MO(_FUNC), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LSHIFT, KC_BTN2, KC_RCTL, MO(_FUNC) } + {MO(_FUNC), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LSHIFT, KC_BTN2, KC_RCTL, MO(_FUNC2) } }, /* Function @@ -117,7 +121,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+-------------+------+------+------+------+------| * | CAPS | | | | | PLAY1| PLAY2| Mute | Vol+ | Play | | | * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | | | | | STOP | STOP | Prev | Vol- | Next | | | + * | PC/MC| | | | | STOP | STOP | Prev | Vol- | Next | | | * |------+------+------+------+------+------+------+------+------+------+------+------| * | | | | | | | | | | | | * `-----------------------------------------------------------------------------------' @@ -147,32 +151,57 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } }, -[_MAC]= { +/* Function 2 (Right hand side) + * ,-----------------------------------------------------------------------------------. + * | | |WRDSEL| | | | LNDEL| | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | LNSEL| DUP | | | | |LNJOIN| | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | UNDO | CUT | COPY | PASTE| | | | | | | MODE | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_FUNC2] = { + {_______, _______, M(1), _______, _______, _______, M(5), _______, _______, _______, _______, _______}, + {_______, _______, M(3), M(7), _______, _______, _______, M(10), _______, _______, _______, _______}, + {_______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, _______, _______, _______, _______, M(98) }, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} +}, + +[_MAC] = { {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, MLWR, _______, _______, MRSE, _______, _______, _______, _______} + {MFNC, _______, _______, _______, MLWR, _______, _______, MRSE, _______, _______, _______, MFNC2 } }, [_MLWR] = { - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, KC_GRAVE, KC_NONUS_BSLASH, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} }, [_MRSE] = { - {_______, _______, M(2), _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_EQL) }, - {_______, _______, _______, _______, _______, _______, LALT(KC_LEFT), _______, _______, _______, LALT(KC_RIGHT), LGUI(KC_MINS) }, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } + {_______, _______, M(2), _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {_______, _______, _______, _______, _______, _______, _______, LCTL(KC_A), _______, LCTL(KC_E), _______, LGUI(KC_EQL) }, + {_______, _______, _______, _______, _______, _______, LALT(KC_LEFT), _______, _______, _______, LALT(KC_RIGHT), LGUI(KC_MINS) }, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } }, [_MFNC]= { - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_PENT) }, - {_______, KC_GRAVE, KC_NONUS_BSLASH, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_PENT) }, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ } +}, + +[_MFNC2] = { + {_______, _______, M(2), _______, _______, _______, M(6), _______, _______, _______, _______, _______}, + {_______, _______, M(4), M(8), _______, _______, _______, M(10), _______, _______, _______, _______}, + {_______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), _______, _______, _______, _______, _______, _______, M(99) }, + {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, }, }; @@ -243,6 +272,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { layer_off(_MFNC); } return false; + case MFNC2: + if (record->event.pressed) { + layer_on(_FUNC2); + layer_on(_MFNC2); + } else { + layer_off(_FUNC2); + layer_off(_MFNC2); + } + return false; } return true; } @@ -262,6 +300,48 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t keycode, uint8_t op case 2: // Word Select Mac SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_RIGHT) SS_DOWN(X_LSHIFT) SS_TAP(X_LEFT) SS_UP(X_LSHIFT) SS_UP(X_LALT)); return false; + + case 3: // Line Select + SEND_STRING(SS_TAP(X_HOME) SS_DOWN(X_LSHIFT) SS_TAP(X_END) SS_UP(X_LSHIFT)); + return false; + + case 4: // Line Select Mac + SEND_STRING(SS_LCTRL("a") SS_DOWN(X_LSHIFT) SS_LCTRL("e") SS_UP(X_LSHIFT)); + return false; + + case 5: // Line Delete + SEND_STRING(SS_TAP(X_HOME) SS_DOWN(X_LSHIFT) SS_TAP(X_END) SS_UP(X_LSHIFT)); + SEND_STRING(SS_TAP(X_BSPACE)); + return false; + + case 6: // Line Delete Mac + SEND_STRING(SS_LCTRL("a") SS_DOWN(X_LSHIFT) SS_LCTRL("e") SS_UP(X_LSHIFT)); + SEND_STRING(SS_TAP(X_BSPACE)); + return false; + + case 7: // Duplicate Selection + SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v")); + return false; + + case 8: // Duplicate Selection Mac + SEND_STRING(SS_LGUI("c") SS_TAP(X_RIGHT) SS_LGUI("v")); + return false; + + case 9: // Join line + SEND_STRING(SS_TAP(X_END) SS_TAP(X_DELETE)); + return false; + + case 10: // Join line Mac + SEND_STRING(SS_LCTRL("e") SS_TAP(X_DELETE)); + return false; + + case 98: // Print mode + SEND_STRING("PC"); + return false; + + case 99: // Print mode + SEND_STRING("OSX"); + return false; } } return MACRO_NONE; diff --git a/keyboards/planck/keymaps/ajp10304/readme.md b/keyboards/planck/keymaps/ajp10304/readme.md index 3f92d76383a..8bf49028585 100644 --- a/keyboards/planck/keymaps/ajp10304/readme.md +++ b/keyboards/planck/keymaps/ajp10304/readme.md @@ -17,7 +17,7 @@ the second is the output when shift is applied. | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | | Tab | A | S | D | F | G | H | J | K | L | ;: | Enter| | Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft | -| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn | +| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn2 | ##### Function Layer Activated when `fn` held in the above `qwerty` layer. @@ -27,7 +27,7 @@ Activated when `fn` held in the above `qwerty` layer. | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | ~ |INSERT| | Shift | \| | `¬ | #~ | * | -_ | =+ | \| | [{ | ]} | '@ |Shift | -| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Mouse | MENU | Alt | Ctrl | Fn | +| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Mouse | MENU | Alt | Ctrl | Fn2 | ##### Lower Layer Activated when `Lower` is held in the above `qwerty` layer. @@ -65,25 +65,40 @@ Activated when `Lower` and `Raise` are held together in the above `qwerty` layer * ????: Runs a macro for outputting a text string. Do not use this store passwords. * Reset: Enter bootloader for flashing firmware to the keyboard. * CAPS: Toggle caps lock. +* Macro functions: Allows recording of macros. To start recording the macro, press either REC1 or REC2. +To finish the recording, press STOP. To replay the macro, press either PLAY1 or PLAY2. * MAC: Toggle MAC OS extensions to layers. This allows MLWR to be enabled with LOWER, -MRSE with RAISE and MFNC with FUNC respectively. -* REC1, REC2: Start recording macro. -* PLAY1, PLAY2: Playback macro. -* STOP1, STOP2: Stop recording macro. +MRSE with RAISE, MFNC with FUNC and MFNC2 with FUNC2 respectively. | | | | | | | | | | | | | | :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| | ???? | Reset|Qwerty| | | REC1 | REC2 | | | | | Del | -| CAPS | | | | | PLAY1| PLAY | Mute | Vol+ | Play | | | -| MAC | | | | | STOP | STOP | Prev | Vol- | Next | | | -| | | | | | | | | | | | | - -##### Mouse -Activated when `fn` and `Raise` are held together. +| CAPS | | | | | PLAY1|PLAY2 | Mute | Vol+ | Play | | | +| MAC | | | | | STOP1|STOP2 | Prev | Vol- | Next | | | +| | | | | | | | | DYN | | | | -| | | | | | | | | | | | | -| :---: |:----:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:| -| | | | | | | | | | | | | -| ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | | -| ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN |RIGHT | | | -| | | | | | | | | | | | | +##### Function 2 Layer +Activated when `fn` held in the above `qwerty` layer. +* WRDSEL: Select the word where the cursor is. +* LNDEL: Delete the line where the cursor is. +* LNSEL: Select the line where the cursor is. +* DUP: Duplicate the selected text. +* LNJOIN: Join the line where the cursor is with the following line. +* MODE: Print either `PC` or `OSX` depending on what layer mode is active. + +| | | | | | | | | | | | | +| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| +| | |WRDSEL| | | | LNDEL| | | | | | +| | | LNSEL| DUP | | | | |LNJOIN| | | | +| | UNDO | CUT | COPY | PASTE| | | | | | | MODE | +| | | | | | | | | | | | | + +##### Mouse Layer +Activated when `fn` and `raise` held together. + +| | | | | | | | | | | | | +| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| +| ESC | | | | | | | | | | | | +| ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | | +| ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN | RIGHT| | | +| | | | | | | | | | | | | From 72b276bd8f94ac5fb2a91a01d2351d853a1e6ee3 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Thu, 3 May 2018 07:56:12 -0700 Subject: [PATCH 18/34] QMK Configurator updates: Atom47, Atomic and Atreus (#2883) * QMK Configurator update for Alpha 28-key * QMK Configurator update for AMJ40 * QMK Configurator update for AMJ Pad * QMK Configurator update for Atom47 * QMK Configurator update for OLKB Atomic * QMK Configurator updates: Atom47 and Atreus * QMK Configurator updates: Atom47 and Atreus * QMK Configurator update for OLKB Atomic and Atreus * QMK C10R: Attempting fixes for Atreus keymap errors * QMK C10R: Attempting fixes for Atreus keymap errors * QMK Configurator: Bug fixes for Atreus keymaps --- keyboards/atom47/keymaps/default/keymap.c | 10 +- keyboards/atom47/keymaps/maartenwut/keymap.c | 8 +- .../atom47/rev2/keymaps/LEdiodes/keymap.c | 10 +- .../atom47/rev2/keymaps/default/keymap.c | 10 +- keyboards/atomic/atomic.h | 6 +- keyboards/atomic/keymaps/abienz.c | 49 ++- keyboards/atomic/keymaps/default/keymap.c | 289 +++++++------- keyboards/atomic/keymaps/michelle.c | 345 +++++++++-------- keyboards/atomic/keymaps/pvc/keymap.c | 259 +++++++------ keyboards/atomic/keymaps/twolayer.c | 116 +++--- keyboards/atreus/atreus.h | 2 +- keyboards/atreus/info.json | 13 + keyboards/atreus/keymaps/alphadox/keymap.c | 15 +- keyboards/atreus/keymaps/classic/keymap.c | 35 +- keyboards/atreus/keymaps/default/keymap.c | 79 ++-- .../atreus/keymaps/dvorak_42_key/keymap.c | 95 +++-- keyboards/atreus/keymaps/erlandsona/keymap.c | 56 +-- keyboards/atreus/keymaps/gerb/keymap.c | 83 ++-- keyboards/atreus/keymaps/henxing/keymap.c | 136 ++++--- keyboards/atreus/keymaps/jeremy/keymap.c | 70 ++-- keyboards/atreus/keymaps/khitsule/keymap.c | 49 ++- .../atreus/keymaps/replicaJunction/keymap.c | 273 +++++++------- keyboards/atreus/keymaps/xk/keymap.c | 357 +++++++++--------- keyboards/atreus/keymaps/xyverz/keymap.c | 191 +++++----- 24 files changed, 1278 insertions(+), 1278 deletions(-) create mode 100644 keyboards/atreus/info.json diff --git a/keyboards/atom47/keymaps/default/keymap.c b/keyboards/atom47/keymaps/default/keymap.c index 233ff2b8b7f..945e66ab7b8 100644 --- a/keyboards/atom47/keymaps/default/keymap.c +++ b/keyboards/atom47/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "atom47.h" +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. @@ -13,25 +13,25 @@ #define _______ KC_TRNS const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_MA] = KEYMAP_ANSI( +[_MA] = LAYOUT_ansi( KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, \ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_FN1), \ KC_LCTL, KC_LGUI, KC_LALT, MO(_PN), KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTRL), \ -[_FN] = KEYMAP_ANSI( +[_FN] = LAYOUT_ansi( _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, \ KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, _______, \ _______, _______, _______, _______, _______, _______, _______, BL_TOGG, BL_DEC, BL_INC, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ -[_FN1] = KEYMAP_ANSI( +[_FN1] = LAYOUT_ansi( 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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \ _______, _______, _______, _______, _______, KC_QUOT, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_RSFT, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ -[_PN] = KEYMAP_ANSI( +[_PN] = LAYOUT_ansi( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, \ RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, \ diff --git a/keyboards/atom47/keymaps/maartenwut/keymap.c b/keyboards/atom47/keymaps/maartenwut/keymap.c index d526d836c35..abe63a41e8a 100644 --- a/keyboards/atom47/keymaps/maartenwut/keymap.c +++ b/keyboards/atom47/keymaps/maartenwut/keymap.c @@ -1,4 +1,4 @@ -#include "atom47.h" +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. @@ -19,19 +19,19 @@ enum custom_keycodes { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_MA] = KEYMAP_ANSI( +[_MA] = LAYOUT_ansi( KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, \ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \ KC_LCTL, KC_LGUI, KC_LALT, MO(_LO), KC_SPC, KC_SPC, MO(_RA), KC_RALT, KC_APP, KC_RCTRL), \ -[_LO] = KEYMAP_ANSI( +[_LO] = LAYOUT_ansi( 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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \ _______, CTRLZ, CTRLX, CTRLC, CTRLV, _______, _______, KC_QUOT, KC_LBRC, KC_RBRC, KC_BSLS, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET), \ -[_RA] = KEYMAP_ANSI( +[_RA] = LAYOUT_ansi( _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, _______, _______, _______, \ KC_CAPS, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY, KC_PSCR, \ diff --git a/keyboards/atom47/rev2/keymaps/LEdiodes/keymap.c b/keyboards/atom47/rev2/keymaps/LEdiodes/keymap.c index 75c8654ba64..b987c433fef 100644 --- a/keyboards/atom47/rev2/keymaps/LEdiodes/keymap.c +++ b/keyboards/atom47/rev2/keymaps/LEdiodes/keymap.c @@ -1,4 +1,4 @@ -#include "atom47.h" +#include QMK_KEYBOARD_H // These are all aliases for the function layers. #define _L0 0 @@ -9,25 +9,25 @@ #define _______ KC_TRNS const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_L0] = KEYMAP_ANSI( +[_L0] = LAYOUT_ansi( KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, \ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_L1), \ KC_LCTL, KC_LGUI, KC_LALT, TG(_L3), KC_SPC, KC_SPC, MO(_L2), KC_RALT, KC_APP, KC_RCTRL), \ -[_L2] = KEYMAP_ANSI( +[_L2] = LAYOUT_ansi( _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, \ KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, _______, \ _______, _______, _______, _______, _______, _______, _______, BL_TOGG, BL_DEC, BL_INC, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ -[_L1] = KEYMAP_ANSI( +[_L1] = LAYOUT_ansi( 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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \ _______, _______, _______, _______, _______, KC_QUOT, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_RSFT, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ -[_L3] = KEYMAP_ANSI( +[_L3] = LAYOUT_ansi( _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, _______, _______, _______, _______, \ diff --git a/keyboards/atom47/rev2/keymaps/default/keymap.c b/keyboards/atom47/rev2/keymaps/default/keymap.c index 1473863c4e0..5f74416ce06 100644 --- a/keyboards/atom47/rev2/keymaps/default/keymap.c +++ b/keyboards/atom47/rev2/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "atom47.h" +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. @@ -13,25 +13,25 @@ #define _______ KC_TRNS const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_MA] = KEYMAP_ANSI( +[_MA] = LAYOUT_ansi( KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_BSPC, \ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_FN1), \ KC_LCTL, KC_LGUI, KC_LALT, MO(_PN), KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_APP, KC_RCTRL), \ -[_FN] = KEYMAP_ANSI( +[_FN] = LAYOUT_ansi( _______, KC_VOLD, KC_VOLU, KC_MUTE, RESET, _______, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, \ KC_CAPS, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, _______, \ _______, _______, _______, _______, _______, _______, _______, BL_TOGG, BL_DEC, BL_INC, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ -[_FN1] = KEYMAP_ANSI( +[_FN1] = LAYOUT_ansi( 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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \ _______, _______, _______, _______, _______, KC_QUOT, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_RSFT, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ -[_PN] = KEYMAP_ANSI( +[_PN] = LAYOUT_ansi( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ diff --git a/keyboards/atomic/atomic.h b/keyboards/atomic/atomic.h index b7ceb68d07b..a22029f7695 100644 --- a/keyboards/atomic/atomic.h +++ b/keyboards/atomic/atomic.h @@ -10,7 +10,7 @@ // The following is an example using the Planck MIT layout // The first section contains all of the arguements // The second converts the arguments into a two-dimensional array -#define KEYMAP_SEMI_STANDARD( \ +#define LAYOUT_semi_standard( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \ @@ -24,7 +24,7 @@ { K40, K41, KC_NO, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E } \ } -#define KEYMAP_GRID( \ +#define LAYOUT_grid( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E,\ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E,\ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E,\ @@ -38,6 +38,6 @@ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E } \ } -#define LAYOUT_ortho_5x15 KEYMAP_GRID +#define LAYOUT_ortho_5x15 LAYOUT_grid #endif \ No newline at end of file diff --git a/keyboards/atomic/keymaps/abienz.c b/keyboards/atomic/keymaps/abienz.c index 589a64dc4e2..2e69165f24a 100644 --- a/keyboards/atomic/keymaps/abienz.c +++ b/keyboards/atomic/keymaps/abienz.c @@ -1,36 +1,33 @@ -#include "atomic.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = { /* Colemak */ - { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO }, - { KC_TAB, CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, - { KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT, KC_ENT, KC_NO, KC_PGUP }, - { KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, CM_COMM, CM_DOT, CM_SLSH, KC_RSFT, KC_NO, KC_UP, KC_PGDN }, - { KC_LCTL, KC_LGUI, KC_NO, KC_LALT, FUNC(1), KC_SPC, KC_NO, KC_RALT, FUNC(2), KC_RGUI, KC_NO, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }, - }, - [1] = { /* function */ - { 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_BSPC, KC_NO }, - { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }, - { KC_TRNS, KC_TRNS, KC_TRNS, KC_SLEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }, - { KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MPLY }, - { KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, FUNC(1), KC_TRNS, KC_NO, KC_TRNS, FUNC(2), KC_TRNS, KC_NO, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT }, - } + [0] = LAYOUT_grid( /* Colemak */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO , + KC_TAB, CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , + KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT, KC_ENT, KC_NO, KC_PGUP, + KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, CM_COMM, CM_DOT, CM_SLSH, KC_RSFT, KC_NO, KC_UP, KC_PGDN, + KC_LCTL, KC_LGUI, KC_NO, KC_LALT, FUNC(1), KC_SPC, KC_NO, KC_RALT, FUNC(2), KC_RGUI, KC_NO, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, + ), + [1] = LAYOUT_grid( /* function */ + 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_BSPC, KC_NO , + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_SLEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MPLY, + KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, FUNC(1), KC_TRNS, KC_NO, KC_TRNS, FUNC(2), KC_TRNS, KC_NO, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT, + ), }; const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(1), - [2] = ACTION_LAYER_MOMENTARY(1), - + [1] = ACTION_LAYER_MOMENTARY(1), + [2] = ACTION_LAYER_MOMENTARY(1), }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ +const macro_t * action_get_macro(keyrecord_t * record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { - case 0: - return MACRODOWN(TYPE(KC_T), END); + switch (id) { + case 0: + return MACRODOWN(TYPE(KC_T), END); break; - } - return MACRO_NONE; + } + return MACRO_NONE; }; - diff --git a/keyboards/atomic/keymaps/default/keymap.c b/keyboards/atomic/keymaps/default/keymap.c index 0ede363a1f3..ae1efb2b663 100644 --- a/keyboards/atomic/keymaps/default/keymap.c +++ b/keyboards/atomic/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "atomic.h" +#include QMK_KEYBOARD_H // Fillers to make layering more clear #define _______ KC_TRNS @@ -21,7 +21,7 @@ * | KEY . XXXXXX | * '-----------------' */ - + /* ROW 2 OPTIONS * .--------------------------------------------------------------------------------------------------------------------------------------. * | | | | | | | | | | | | | | | | @@ -30,7 +30,7 @@ * | KEY . XXXXXX | | KEY . XXXXXX | * '-----------------' '-----------------' */ - + /* ROW 3 OPTIONS * .--------------------------------------------------------------------------------------------------------------------------------------. * | | | | | | | | | | | | | | | | @@ -42,7 +42,7 @@ * | X | * '-----------------' */ - + /* ROW 4 OPTIONS * .--------------------------------------------------------------------------------------------------------------------------------------. * | | | | | | | | | | | | | | | | @@ -78,157 +78,156 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* QWERTY - MIT ENHANCED / GRID COMPATIBLE - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | ESC | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | BRITE | LCTRL | LALT | LGUI | RAISE | XXXXXX . SPACE | LOWER | RGUI | RALT | RCTRL | FN | LEFT | DOWN | RIGHT | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [_QW] = { /* QWERTY */ - { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, - { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, - { KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, - { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, - { M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT }, - }, + /* QWERTY - MIT ENHANCED / GRID COMPATIBLE + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | ESC | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | BRITE | LCTRL | LALT | LGUI | RAISE | XXXXXX . SPACE | LOWER | RGUI | RALT | RCTRL | FN | LEFT | DOWN | RIGHT | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ -/* COLEMAK - MIT ENHANCED / GRID COMPATIBLE - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | TAB | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | DEL | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | ESC | A | R | S | T | D | H | N | E | I | O | ' | XXXXXX . ENTER | PG UP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | BRITE | LCTRL | LALT | LGUI | RAISE | XXXXXX . SPACE | LOWER | RGUI | RALT | RCTRL | FN | LEFT | DOWN | RIGHT | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [_CM] = { /* COLEMAK */ - { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, - { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, - { KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, - { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, - { M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT }, - }, - -/* DVORAK - MIT ENHANCED / GRID COMPATIBLE - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | TAB | ' | , | . | P | Y | F | G | C | R | L | [ | ] | \ | DEL | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | ESC | A | O | E | U | I | D | H | T | N | S | / | XXXXXX . ENTER | PG UP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | BRITE | LCTRL | LALT | LGUI | RAISE | XXXXXX . SPACE | LOWER | RGUI | RALT | RCTRL | FN | LEFT | DOWN | RIGHT | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ + [_QW] = LAYOUT_grid( /* QWERTY */ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN, + M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT + ), - [_DV] = { /* DVORAK */ - { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, - { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, - { KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, KC_ENT, KC_ENT, KC_PGUP }, - { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, - { M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT }, - }, + /* COLEMAK - MIT ENHANCED / GRID COMPATIBLE + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | TAB | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | DEL | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | ESC | A | R | S | T | D | H | N | E | I | O | ' | XXXXXX . ENTER | PG UP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | BRITE | LCTRL | LALT | LGUI | RAISE | XXXXXX . SPACE | LOWER | RGUI | RALT | RCTRL | FN | LEFT | DOWN | RIGHT | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ -/* LOWERED - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | | ! | @ | # | $ | % | ^ | & | * | ( | ) | | | | INS | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | XXXXXX . | | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | XXXXXX . | | | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | | | | | | XXXXXX . | | | | | | | | | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [_LW] = { /* LOWERED */ - { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ___T___, ___T___ }, - { _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, _______, KC_INS }, - { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, ___T___, ___T___, _______ }, - { _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, ___T___, ___T___, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - }, + [_CM] = LAYOUT_grid( /* COLEMAK */ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , + KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN, + M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT + ), -/* RAISED - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | INS | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | XXXXXX . | | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | XXXXXX . | | | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | | | | | | XXXXXX . | | | | | | | | | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [_RS] = { /* RAISED */ - { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ___T___, ___T___ }, - { _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, KC_INS }, - { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, ___T___, ___T___, _______ }, - { _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, ___T___, ___T___, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - }, - -/* FUNCTION - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | NUM LK | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | SCR LK | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24 | PAUSE | PR SCR | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | CAP LK | MS BT5 | MS BT4 | MS BT3 | MS BT2 | SLOW M | FAST M | NEXT | VOL+ | VOL- | PLAY | | XXXXXX . | WHEEL+ | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | | | QWERTY | COLEMK | DVORAK | | | | | | | XXXXXX . | MOUS U | WHEEL- | - * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| - * | | | | | | XXXXXX . MS BT1 | | | | | | MOUS L | MOUS D | MOUS R | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [_FN] = { /* FUNCTION */ - { KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ___T___, ___T___ }, - { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_PAUS, KC_PSCR }, - { KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, ___T___, ___T___, KC_WH_U }, - { _______, _______, DF(_QW), DF(_CM), DF(_DV), _______, _______, _______, _______, _______, _______, ___T___, ___T___, KC_MS_U, KC_WH_D }, - { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }, - }, + /* DVORAK - MIT ENHANCED / GRID COMPATIBLE + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | TAB | ' | , | . | P | Y | F | G | C | R | L | [ | ] | \ | DEL | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | ESC | A | O | E | U | I | D | H | T | N | S | / | XXXXXX . ENTER | PG UP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | BRITE | LCTRL | LALT | LGUI | RAISE | XXXXXX . SPACE | LOWER | RGUI | RALT | RCTRL | FN | LEFT | DOWN | RIGHT | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_DV] = LAYOUT_grid( /* DVORAK */ + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , + KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, KC_ENT, KC_ENT, KC_PGUP, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN, + M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_RS), KC_SPC, KC_SPC, MO(_LW), KC_RGUI, KC_RALT, KC_RCTL, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT + ), + + /* LOWERED + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | | ! | @ | # | $ | % | ^ | & | * | ( | ) | | | | INS | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | XXXXXX . | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | XXXXXX . | | | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | | | | | | XXXXXX . | | | | | | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_LW] = LAYOUT_grid( /* LOWERED */ + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ___T___, ___T___, + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, _______, KC_INS , + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, ___T___, ___T___, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, ___T___, ___T___, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + /* RAISED + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | INS | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | XXXXXX . | | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | XXXXXX . | | | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | | | | | | XXXXXX . | | | | | | | | | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_RS] = LAYOUT_grid( /* RAISED */ + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ___T___, ___T___, + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, KC_INS , + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, ___T___, ___T___, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, ___T___, ___T___, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + /* FUNCTION + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | NUM LK | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | SCR LK | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24 | PAUSE | PR SCR | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | CAP LK | MS BT5 | MS BT4 | MS BT3 | MS BT2 | SLOW M | FAST M | NEXT | VOL+ | VOL- | PLAY | | XXXXXX . | WHEEL+ | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | | | QWERTY | COLEMK | DVORAK | | | | | | | XXXXXX . | MOUS U | WHEEL- | + * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------| + * | | | | | | XXXXXX . MS BT1 | | | | | | MOUS L | MOUS D | MOUS R | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + + [_FN] = LAYOUT_grid( /* FUNCTION */ + KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ___T___, ___T___, + KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_PAUS, KC_PSCR, + KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, ___T___, ___T___, KC_WH_U, + _______, _______, DF(_QW), DF(_CM), DF(_DV), _______, _______, _______, _______, _______, _______, ___T___, ___T___, KC_MS_U, KC_WH_D, + _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R + ), }; const uint16_t PROGMEM fn_actions[] = { }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - break; + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); } - return MACRO_NONE; + break; + } + return MACRO_NONE; }; diff --git a/keyboards/atomic/keymaps/michelle.c b/keyboards/atomic/keymaps/michelle.c index 2364c46a15d..9c22423d685 100644 --- a/keyboards/atomic/keymaps/michelle.c +++ b/keyboards/atomic/keymaps/michelle.c @@ -1,183 +1,182 @@ -#include "atomic.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = { /* Dvorak */ - { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_NO }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ - { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_INS, KC_DEL }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ -// │ X │ │ X │ -// └─────────────────┘ └─────────────────┘ - { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_NO, KC_PGUP }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ -// │ X │ │ X │ -// └─────────────────┘ └─────────────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ - { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_NO, KC_UP, KC_PGDN }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ -// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ -// │ X │ │ X │ -// └─────────────────┘ └─────────────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ - { KC_LCTL, MO(1), KC_NO, KC_LALT, KC_NO, KC_NO, KC_SPC, KC_NO, KC_NO, KC_NO, KC_LGUI, MO(2), KC_LEFT, KC_DOWN, KC_RGHT }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 1.25u ──┬ 1.25u ───┬─── 1.25u ┬─── 1.25u ─┬─ 2u ────────────┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬──── 1.25u ┐ -// │ X │ X │ X │ X │ X │ X │ X │ X │ X │ -// └──────────┴──────────┴──────────┴───────────┴─────────────────┴──────────┴──────────┴──────────┴───────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ -// ┌───────────────────── 6.25u ────────────────────────────┐ -// │ X │ -// └────────────────────────────────────────────────────────┘ -// ┌─────────────────────── 6.25u ──────────────────────────┬─ 1.25u ──┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬── 1.25u ──┐ -// │ X │ X │ X │ X │ X │ X │ -// └────────────────────────────────────────────────────────┴──────────┴──────────┴──────────┴──────────┴───────────┘ - }, - [1] = { /* Qwerty + F keys */ - { KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_NO }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ - { 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_INS, KC_DEL }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ -// │ X │ │ X │ -// └─────────────────┘ └─────────────────┘ - { KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_NO, KC_PGUP }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ -// │ X │ │ X │ -// └─────────────────┘ └─────────────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ - { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, KC_UP, KC_PGDN }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ -// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ -// │ X │ │ X │ -// └─────────────────┘ └─────────────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ - { KC_LCTL, KC_TRNS, KC_NO, KC_LALT, KC_NO, KC_NO, KC_SPC, KC_NO, KC_NO, KC_NO, KC_LGUI, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 1.25u ──┬ 1.25u ───┬─── 1.25u ┬─── 1.25u ─┬─ 2u ────────────┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬──── 1.25u ┐ -// │ X │ X │ X │ X │ X │ X │ X │ X │ X │ -// └──────────┴──────────┴──────────┴───────────┴─────────────────┴──────────┴──────────┴──────────┴───────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ -// ┌───────────────────── 6.25u ────────────────────────────┐ -// │ X │ -// └────────────────────────────────────────────────────────┘ -// ┌─────────────────────── 6.25u ──────────────────────────┬─ 1.25u ──┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬── 1.25u ──┐ -// │ X │ X │ X │ X │ X │ X │ -// └────────────────────────────────────────────────────────┴──────────┴──────────┴──────────┴──────────┴───────────┘ - }, - [2] = { /* Numpad + qwerty shortcut keys */ - { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_P7, KC_P8, KC_P9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_NO }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ - { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_P4, KC_P5, KC_P6, KC_L, KC_SLSH, KC_EQL, KC_INS, KC_DEL }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ -// │ X │ │ X │ -// └─────────────────┘ └─────────────────┘ - { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_P1, KC_P2, KC_P3, KC_S, KC_MINS, KC_ENT, KC_NO, KC_PGUP }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ -// │ X │ │ X │ -// └─────────────────┘ └─────────────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ - { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_X, KC_B, KC_P0, KC_P0, KC_PENT, KC_Z, KC_RSFT, KC_NO, KC_UP, KC_PGDN }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ -// ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ -// │ X │ │ X │ -// └─────────────────┘ └─────────────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ - { KC_LCTL, KC_TRNS, KC_NO, KC_LALT, KC_NO, KC_NO, KC_SPC, KC_NO, KC_NO, KC_NO, KC_LGUI, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT }, -// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ -// │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ -// └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ -// ┌─ 1.25u ──┬ 1.25u ───┬─── 1.25u ┬─── 1.25u ─┬─ 2u ────────────┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬──── 1.25u ┐ -// │ X │ X │ X │ X │ X │ X │ X │ X │ X │ -// └──────────┴──────────┴──────────┴───────────┴─────────────────┴──────────┴──────────┴──────────┴───────────┘ -// ┌─ 2u ────────────┐ -// │ X │ -// └─────────────────┘ -// ┌───────────────────── 6.25u ────────────────────────────┐ -// │ X │ -// └────────────────────────────────────────────────────────┘ -// ┌─────────────────────── 6.25u ──────────────────────────┬─ 1.25u ──┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬── 1.25u ──┐ -// │ X │ X │ X │ X │ X │ X │ -// └────────────────────────────────────────────────────────┴──────────┴──────────┴──────────┴──────────┴───────────┘ - }, + [0] = LAYOUT_grid( /* Dvorak */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_NO , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_INS, KC_DEL , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ + // │ X │ │ X │ + // └─────────────────┘ └─────────────────┘ + KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_NO, KC_PGUP , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ + // │ X │ │ X │ + // └─────────────────┘ └─────────────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_NO, KC_UP, KC_PGDN , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + // ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ + // │ X │ │ X │ + // └─────────────────┘ └─────────────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + KC_LCTL, MO(1), KC_NO, KC_LALT, KC_NO, KC_NO, KC_SPC, KC_NO, KC_NO, KC_NO, KC_LGUI, MO(2), KC_LEFT, KC_DOWN, KC_RGHT , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 1.25u ──┬ 1.25u ───┬─── 1.25u ┬─── 1.25u ─┬─ 2u ────────────┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬──── 1.25u ┐ + // │ X │ X │ X │ X │ X │ X │ X │ X │ X │ + // └──────────┴──────────┴──────────┴───────────┴─────────────────┴──────────┴──────────┴──────────┴───────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + // ┌───────────────────── 6.25u ────────────────────────────┐ + // │ X │ + // └────────────────────────────────────────────────────────┘ + // ┌─────────────────────── 6.25u ──────────────────────────┬─ 1.25u ──┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬── 1.25u ──┐ + // │ X │ X │ X │ X │ X │ X │ + // └────────────────────────────────────────────────────────┴──────────┴──────────┴──────────┴──────────┴───────────┘ + ), + [1] = LAYOUT_grid( /* Qwerty + F keys */ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_NO , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + 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_INS, KC_DEL , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ + // │ X │ │ X │ + // └─────────────────┘ └─────────────────┘ + KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_NO, KC_PGUP , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ + // │ X │ │ X │ + // └─────────────────┘ └─────────────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, KC_UP, KC_PGDN , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + // ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ + // │ X │ │ X │ + // └─────────────────┘ └─────────────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + KC_LCTL, KC_TRNS, KC_NO, KC_LALT, KC_NO, KC_NO, KC_SPC, KC_NO, KC_NO, KC_NO, KC_LGUI, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 1.25u ──┬ 1.25u ───┬─── 1.25u ┬─── 1.25u ─┬─ 2u ────────────┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬──── 1.25u ┐ + // │ X │ X │ X │ X │ X │ X │ X │ X │ X │ + // └──────────┴──────────┴──────────┴───────────┴─────────────────┴──────────┴──────────┴──────────┴───────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + // ┌───────────────────── 6.25u ────────────────────────────┐ + // │ X │ + // └────────────────────────────────────────────────────────┘ + // ┌─────────────────────── 6.25u ──────────────────────────┬─ 1.25u ──┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬── 1.25u ──┐ + // │ X │ X │ X │ X │ X │ X │ + // └────────────────────────────────────────────────────────┴──────────┴──────────┴──────────┴──────────┴───────────┘ + ), + [2] = LAYOUT_grid( /* Numpad + qwerty shortcut keys */ + { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_P7, KC_P8, KC_P9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_NO , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_P4, KC_P5, KC_P6, KC_L, KC_SLSH, KC_EQL, KC_INS, KC_DEL , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ + // │ X │ │ X │ + // └─────────────────┘ └─────────────────┘ + KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_P1, KC_P2, KC_P3, KC_S, KC_MINS, KC_ENT, KC_NO, KC_PGUP , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ + // │ X │ │ X │ + // └─────────────────┘ └─────────────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_X, KC_B, KC_P0, KC_P0, KC_PENT, KC_Z, KC_RSFT, KC_NO, KC_UP, KC_PGDN , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + // ┌─ 2u ────────────┐ ┌─ 2u ────────────┐ + // │ X │ │ X │ + // └─────────────────┘ └─────────────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + KC_LCTL, KC_TRNS, KC_NO, KC_LALT, KC_NO, KC_NO, KC_SPC, KC_NO, KC_NO, KC_NO, KC_LGUI, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT , + // ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┐ + // │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ + // └────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┴────────┘ + // ┌─ 1.25u ──┬ 1.25u ───┬─── 1.25u ┬─── 1.25u ─┬─ 2u ────────────┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬──── 1.25u ┐ + // │ X │ X │ X │ X │ X │ X │ X │ X │ X │ + // └──────────┴──────────┴──────────┴───────────┴─────────────────┴──────────┴──────────┴──────────┴───────────┘ + // ┌─ 2u ────────────┐ + // │ X │ + // └─────────────────┘ + // ┌───────────────────── 6.25u ────────────────────────────┐ + // │ X │ + // └────────────────────────────────────────────────────────┘ + // ┌─────────────────────── 6.25u ──────────────────────────┬─ 1.25u ──┬─ 1.25u ──┬─ 1.25u ──┬─── 1.25u ┬── 1.25u ──┐ + // │ X │ X │ X │ X │ X │ X │ + // └────────────────────────────────────────────────────────┴──────────┴──────────┴──────────┴──────────┴───────────┘ + ), }; const uint16_t PROGMEM fn_actions[] = { }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { - case 0: - return MACRODOWN(TYPE(KC_T), END); + switch(id) { + case 0: + return MACRODOWN(TYPE(KC_T), END); break; - } - return MACRO_NONE; + } + return MACRO_NONE; }; diff --git a/keyboards/atomic/keymaps/pvc/keymap.c b/keyboards/atomic/keymaps/pvc/keymap.c index 43ec0b23bf2..4ccac63f6cb 100644 --- a/keyboards/atomic/keymaps/pvc/keymap.c +++ b/keyboards/atomic/keymaps/pvc/keymap.c @@ -1,4 +1,4 @@ -#include "atomic.h" +#include QMK_KEYBOARD_H #include "action_layer.h" #include "eeconfig.h" #include "led.h" @@ -111,126 +111,126 @@ enum keyboard_macros { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* LAYER = LAYER_QWERTY - .--------------------------------------------------------------------------------------------------------------------------------------. - | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BACKSP . BACKSP | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | CAP LK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER . ENTER | PG UP | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT . RSHIFT | UP | PG DN | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | LCTRL | LWIN | FN | LALT | UPPER | SPACE . SPACE | LOWER | OSHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | - '--------------------------------------------------------------------------------------------------------------------------------------' -*/ -[LAYER_QWERTY] = { - { KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC }, - { KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, - { KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_ENT , KC_PGUP }, - { KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_RSFT, KC_UP , KC_PGDN }, - { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_RALT, KC_APP , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT } -}, -/* LAYER = LAYER_UPPER - .--------------------------------------------------------------------------------------------------------------------------------------. - | PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | KP / | KP * | KP - | XXXXXX | XXXXXX | ______ . ______ | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | PAUSE | F1 | F2 | F3 | F4 | NUM LK | KP / | KP 7 | KP 8 | KP 9 | KP - | ______ | ______ | ______ | INS | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | ______ | F5 | F6 | F7 | F8 | CAP LK | KP * | KP 4 | KP 5 | KP 6 | KP + | ______ | ______ . ______ | HOME | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | ______ | F9 | F10 | F11 | F12 | SCR LK | KP 0 | KP 1 | KP 2 | KP 3 | KP ENT | ______ . ______ | ______ | END | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | ______ | ______ | ______ | ______ | UPPER | KP 0 . KP 0 | ______ | RALT | KP . | KP ENT | ______ | ______ | ______ | ______ | - '--------------------------------------------------------------------------------------------------------------------------------------' -*/ -[LAYER_UPPER] = { - { KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, XXXXXXX, XXXXXXX, _______, _______ }, - { KC_PAUS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS }, - { _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, KC_HOME }, - { _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_SLCK, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, _______, KC_END }, - { _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ } -}, -/* LAYER = LAYER_LOWER - .--------------------------------------------------------------------------------------------------------------------------------------. - | PRINT | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | ______ . ______ | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | ______ | $ | { | [ | ( | % | # | ) | ] | } | @ | ______ | ______ | ______ | INS | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | ______ | ^ | * | + | - | / | \ | _ | ' | " | ` | ______ | ______ . ______ | HOME | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | ______ | | | & | ! | ~ | ; | : | = | < | > | ? | ______ . ______ | ______ | END | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | ______ | ______ | ______ | ______ | ______ | ______ . ______ | LOWER | ______ | ______ | ______ | ______ | ______ | ______ | ______ | - '--------------------------------------------------------------------------------------------------------------------------------------' -*/ -[LAYER_LOWER] = { - { KC_PSCR, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, _______ }, - { _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , _______, _______, _______, KC_INS }, - { _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______, _______, KC_HOME }, - { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, _______, _______, _______, KC_END }, - { _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, _______, _______, _______, _______ } -}, -/* LAYER = LAYER_FUNCTION - .--------------------------------------------------------------------------------------------------------------------------------------. - | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | XXXXXX | F13 | F14 | F15 | F16 | NUM LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | XXXXXX | F17 | F18 | F19 | F20 | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | ______ | F21 | F22 | F23 | F24 | CAP LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ______ . ______ | VOL UP | MUTE | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | ______ | ______ | FN | ______ | ______ | PLAY . PLAY | ______ | ______ | ______ | ______ | ______ | PREV | VOL DN | NEXT | - '--------------------------------------------------------------------------------------------------------------------------------------' -*/ -[LAYER_FUNCTION] = { - { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { _______, KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_VOLU, KC_MUTE }, - { _______, _______, M_FUNCT, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT } -}, -/* LAYER = LAYER_MOUSE - .--------------------------------------------------------------------------------------------------------------------------------------. - | ESC | MS AC0 | MS AC1 | MS AC2 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS UL | MS U | MS UR | XXXXXX | XXXXXX | XXXXXX | MS WHL | MS WHR | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | XXXXXX | MS BT5 | MS BT4 | MS BT3 | MS BT2 | XXXXXX | XXXXXX | MS L | XXXXXX | MS R | XXXXXX | XXXXXX | XXXXXX . XXXXXX | MS WHU | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | ______ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS DL | MS D | MS DR | XXXXXX | ______ . ______ | MS U | MS WHD | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | ______ | ______ | ______ | ______ | ______ | MS BT1 . MS BT1 | ______ | ______ | ______ | ______ | ______ | MS L | MS D | MS R | - '--------------------------------------------------------------------------------------------------------------------------------------' -*/ -[LAYER_MOUSE] = { - { KC_ESC , KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, - { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_UL, KC_MS_U, M_MS_UR, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_R }, - { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, XXXXXXX, KC_MS_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U }, - { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_DL, KC_MS_D, M_MS_DR, XXXXXXX, _______, _______, KC_MS_U, KC_WH_D }, - { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R } -}, -/* LAYER = LAYER_ADJUST - .--------------------------------------------------------------------------------------------------------------------------------------. - | XXXXXX | HELP 1 | HELP 2 | HELP 3 | HELP 4 | HELP 5 | HELP 6 | HELP 7 | HELP 8 | HELP 9 | XXXXXX | MUSIC | AUDIO | XXXXXX . XXXXXX | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | XXXXXX | BRTOG | BRSPD+ | BRSPD- | BRDFLT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | XXXXXX | QWERTY | XXXXXX | XXXXXX | BACKLT | RESET | XXXXXX | MOUSE | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | VOICE+ | XXXXXX | - |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER | XXXXXX . XXXXXX | LOWER | XXXXXX | XXXXXX | XXXXXX | XXXXXX | TEMPO- | VOICE- | TEMPO+ | - '--------------------------------------------------------------------------------------------------------------------------------------' -*/ -[LAYER_ADJUST] = { - { XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, M_HELP5, M_HELP6, M_HELP7, M_HELP8, M_HELP9, XXXXXXX, MU_TOG , AU_TOG , XXXXXXX, XXXXXXX }, - { XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, 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, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX }, - { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP } -}, + /* LAYER = LAYER_QWERTY + .--------------------------------------------------------------------------------------------------------------------------------------. + | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BACKSP . BACKSP | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | CAP LK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER . ENTER | PG UP | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT . RSHIFT | UP | PG DN | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | LCTRL | LWIN | FN | LALT | UPPER | SPACE . SPACE | LOWER | OSHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT | + '--------------------------------------------------------------------------------------------------------------------------------------' + */ + [LAYER_QWERTY] = LAYOUT_grid( + KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC, + KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , + KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_ENT , KC_PGUP, + KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_RSFT, KC_UP , KC_PGDN, + KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_RALT, KC_APP , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + /* LAYER = LAYER_UPPER + .--------------------------------------------------------------------------------------------------------------------------------------. + | PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | KP / | KP * | KP - | XXXXXX | XXXXXX | ______ . ______ | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | PAUSE | F1 | F2 | F3 | F4 | NUM LK | KP / | KP 7 | KP 8 | KP 9 | KP - | ______ | ______ | ______ | INS | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | F5 | F6 | F7 | F8 | CAP LK | KP * | KP 4 | KP 5 | KP 6 | KP + | ______ | ______ . ______ | HOME | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | F9 | F10 | F11 | F12 | SCR LK | KP 0 | KP 1 | KP 2 | KP 3 | KP ENT | ______ . ______ | ______ | END | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | ______ | ______ | UPPER | KP 0 . KP 0 | ______ | RALT | KP . | KP ENT | ______ | ______ | ______ | ______ | + '--------------------------------------------------------------------------------------------------------------------------------------' + */ + [LAYER_UPPER] = LAYOUT_grid( + KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, XXXXXXX, XXXXXXX, _______, _______, + KC_PAUS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS , + _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, KC_HOME, + _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_SLCK, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, _______, KC_END , + _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ + ), + /* LAYER = LAYER_LOWER + .--------------------------------------------------------------------------------------------------------------------------------------. + | PRINT | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | ______ . ______ | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | $ | { | [ | ( | % | # | ) | ] | } | @ | ______ | ______ | ______ | INS | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ^ | * | + | - | / | \ | _ | ' | " | ` | ______ | ______ . ______ | HOME | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | | | & | ! | ~ | ; | : | = | < | > | ? | ______ . ______ | ______ | END | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | ______ | ______ | ______ | ______ . ______ | LOWER | ______ | ______ | ______ | ______ | ______ | ______ | ______ | + '--------------------------------------------------------------------------------------------------------------------------------------' + */ + [LAYER_LOWER] = LAYOUT_grid( + KC_PSCR, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, _______, + _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , _______, _______, _______, KC_INS , + _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______, _______, KC_HOME, + _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, _______, _______, _______, KC_END , + _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, _______, _______, _______, _______ + ), + /* LAYER = LAYER_FUNCTION + .--------------------------------------------------------------------------------------------------------------------------------------. + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | F13 | F14 | F15 | F16 | NUM LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | F17 | F18 | F19 | F20 | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | F21 | F22 | F23 | F24 | CAP LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ______ . ______ | VOL UP | MUTE | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | FN | ______ | ______ | PLAY . PLAY | ______ | ______ | ______ | ______ | ______ | PREV | VOL DN | NEXT | + '--------------------------------------------------------------------------------------------------------------------------------------' + */ + [LAYER_FUNCTION] = LAYOUT_grid( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_VOLU, KC_MUTE, + _______, _______, M_FUNCT, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT + ), + /* LAYER = LAYER_MOUSE + .--------------------------------------------------------------------------------------------------------------------------------------. + | ESC | MS AC0 | MS AC1 | MS AC2 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS UL | MS U | MS UR | XXXXXX | XXXXXX | XXXXXX | MS WHL | MS WHR | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | MS BT5 | MS BT4 | MS BT3 | MS BT2 | XXXXXX | XXXXXX | MS L | XXXXXX | MS R | XXXXXX | XXXXXX | XXXXXX . XXXXXX | MS WHU | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS DL | MS D | MS DR | XXXXXX | ______ . ______ | MS U | MS WHD | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | ______ | ______ | ______ | ______ | ______ | MS BT1 . MS BT1 | ______ | ______ | ______ | ______ | ______ | MS L | MS D | MS R | + '--------------------------------------------------------------------------------------------------------------------------------------' + */ + [LAYER_MOUSE] = LAYOUT_grid( + KC_ESC , KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_UL, KC_MS_U, M_MS_UR, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_R, + XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, XXXXXXX, KC_MS_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_DL, KC_MS_D, M_MS_DR, XXXXXXX, _______, _______, KC_MS_U, KC_WH_D, + _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R + ), + /* LAYER = LAYER_ADJUST + .--------------------------------------------------------------------------------------------------------------------------------------. + | XXXXXX | HELP 1 | HELP 2 | HELP 3 | HELP 4 | HELP 5 | HELP 6 | HELP 7 | HELP 8 | HELP 9 | XXXXXX | MUSIC | AUDIO | XXXXXX . XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | BRTOG | BRSPD+ | BRSPD- | BRDFLT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | QWERTY | XXXXXX | XXXXXX | BACKLT | RESET | XXXXXX | MOUSE | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | VOICE+ | XXXXXX | + |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| + | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER | XXXXXX . XXXXXX | LOWER | XXXXXX | XXXXXX | XXXXXX | XXXXXX | TEMPO- | VOICE- | TEMPO+ | + '--------------------------------------------------------------------------------------------------------------------------------------' + */ + [LAYER_ADJUST] = LAYOUT_grid( + XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, M_HELP5, M_HELP6, M_HELP7, M_HELP8, M_HELP9, XXXXXXX, MU_TOG , AU_TOG , XXXXXXX, XXXXXXX, + XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, 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, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP + ), }; #ifdef AUDIO_ENABLE @@ -255,22 +255,19 @@ float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); #endif /* AUDIO_ENABLE */ -void persistent_default_layer_set(uint16_t default_layer) -{ - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); } const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_MODS_ONESHOT(MOD_LSFT), + [0] = ACTION_MODS_ONESHOT(MOD_LSFT), }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - // MACRODOWN only works in this function - switch(id) - { + // MACRODOWN only works in this function + switch(id) { case MACRO_HELP_1: if (record->event.pressed) diff --git a/keyboards/atomic/keymaps/twolayer.c b/keyboards/atomic/keymaps/twolayer.c index 8ea045d806a..f0ff56467da 100644 --- a/keyboards/atomic/keymaps/twolayer.c +++ b/keyboards/atomic/keymaps/twolayer.c @@ -1,72 +1,68 @@ -#include "atomic.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* QWERTY - MIT ENHANCED / GRID COMPATIBLE - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | LCTRL1 | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | - * |--------+--------+--------+--------+--------+- 6.25u ---------+--------+--------+--------+--------+-----------------+--------+--------| - * | BRITE | LALT | FN | XXXXXX . SPACE | RCTRL | RALT | FN | LEFT | DOWN | RIGHT | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [0] = { /* QWERTY */ - { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC }, - { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL }, - { KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP }, - { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN }, - { M(0), KC_ALT, MO(1), KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RCTL, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT }, - }, + /* QWERTY - MIT ENHANCED / GRID COMPATIBLE + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | LCTRL1 | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN | + * |--------+--------+--------+--------+--------+- 6.25u ---------+--------+--------+--------+--------+-----------------+--------+--------| + * | BRITE | LALT | FN | XXXXXX . SPACE | RCTRL | RALT | FN | LEFT | DOWN | RIGHT | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + [0] = LAYOUT_grid( /* QWERTY */ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN, + M(0), KC_ALT, MO(1), KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RCTL, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, + ), - -/* FUNCTION - * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. - * | GRV | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | SCR LK | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24 | PAUSE | PR SCR | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| - * | CAP LK | MS BT5 | MS BT4 | MS BT3 | MS BT2 | SLOW M | FAST M | NEXT | VOL+ | VOL- | PLAY | | XXXXXX . | WHEEL+ | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| - * | NUM LK | | | | | | | | INSERT | END1 | HOME | XXXXXX . | MOUS U | WHEEL- | - * |--------+--------+--------+--------+--------+- 6.25 ------------+--------+--------+------+--------+-----------------+--------+--------| - * | | | FN | XXXXXX . MS BT1 | | | FN | MOUS L | MOUS D | MOUS R | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [1] = { /* FUNCTION LAYER*/ - { 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, ___T___, ___T___ }, - { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_PAUS, KC_PSCR }, - { KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, ___T___, ___T___, KC_WH_U }, - { KC_NLCK, _______, _______, _______, _______, _______, _______, _______, KC_INSERT, KC_END, KC_HOME, ___T___, ___T___, KC_MS_U, KC_WH_D }, - { _______, _______, MO(1), _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, MO(1), KC_MS_L, KC_MS_D, KC_MS_R }, - }, + /* FUNCTION + * .---------------------------------------------------------------------------------------------------------------------- 2u ------------. + * | GRV | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| + * | SCR LK | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24 | PAUSE | PR SCR | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------| + * | CAP LK | MS BT5 | MS BT4 | MS BT3 | MS BT2 | SLOW M | FAST M | NEXT | VOL+ | VOL- | PLAY | | XXXXXX . | WHEEL+ | + * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------| + * | NUM LK | | | | | | | | INSERT | END1 | HOME | XXXXXX . | MOUS U | WHEEL- | + * |--------+--------+--------+--------+--------+- 6.25 ------------+--------+--------+------+--------+-----------------+--------+--------| + * | | | FN | XXXXXX . MS BT1 | | | FN | MOUS L | MOUS D | MOUS R | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ + [1] = LAYOUT_grid( /* FUNCTION LAYER*/ + 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, ___T___, ___T___, + KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_PAUS, KC_PSCR, + KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, ___T___, ___T___, KC_WH_U, + KC_NLCK, _______, _______, _______, _______, _______, _______, _______, KC_INSERT, KC_END, KC_HOME, ___T___, ___T___, KC_MS_U, KC_WH_D, + _______, _______, MO(1), _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, MO(1), KC_MS_L, KC_MS_D, KC_MS_R, + ), }; const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(1), - [2] = ACTION_LAYER_MOMENTARY(1), + [1] = ACTION_LAYER_MOMENTARY(1), + [2] = ACTION_LAYER_MOMENTARY(1), }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - break; + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); } - return MACRO_NONE; + break; + } + return MACRO_NONE; }; diff --git a/keyboards/atreus/atreus.h b/keyboards/atreus/atreus.h index f841c351997..8e868ecc0e6 100644 --- a/keyboards/atreus/atreus.h +++ b/keyboards/atreus/atreus.h @@ -9,7 +9,7 @@ // This a shortcut to help you visually see your layout. // The first section contains all of the arguements // The second converts the arguments into a two-dimensional array -#define KEYMAP( \ +#define LAYOUT( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \ diff --git a/keyboards/atreus/info.json b/keyboards/atreus/info.json new file mode 100644 index 00000000000..34933672f9b --- /dev/null +++ b/keyboards/atreus/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "Atreus", + "url": "", + "maintainer": "qmk", + "bootloader": "", + "width": 12.5, + "height": 4.6, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"x":11.5, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":7.5, "y":2}, {"x":8.5, "y":2}, {"x":9.5, "y":2}, {"x":10.5, "y":2}, {"x":11.5, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3, "h":1.5}, {"x":6.5, "y":3, "h":1.5}, {"x":7.5, "y":3}, {"x":8.5, "y":3}, {"x":9.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}] + } + } +} \ No newline at end of file diff --git a/keyboards/atreus/keymaps/alphadox/keymap.c b/keyboards/atreus/keymaps/alphadox/keymap.c index b8ec0e032fa..575a640c4f1 100644 --- a/keyboards/atreus/keymaps/alphadox/keymap.c +++ b/keyboards/atreus/keymaps/alphadox/keymap.c @@ -1,4 +1,4 @@ -#include "atreus.h" +#include QMK_KEYBOARD_H #define BASE 0 #define SYMB 1 @@ -9,27 +9,26 @@ enum macro_id { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -[BASE] = KEYMAP( + [BASE] = LAYOUT( KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_SCLN, LT(ETC,KC_A), KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH), KC_GRV, KC_DEL, KC_LALT, GUI_T(KC_TAB), LT(SYMB,KC_BSPC), CTL_T(KC_ESC), SFT_T(KC_ENT), LT(SYMB,KC_SPC), GUI_T(KC_LEFT), KC_DOWN, KC_UP, LCAG_T(KC_RGHT) -), + ), -[SYMB] = KEYMAP( + [SYMB] = LAYOUT( KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_EQL, KC_7, KC_8, KC_9, KC_PLUS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_BSLS, KC_MINS, KC_4, KC_5, KC_6, KC_QUOT, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_ASTR, KC_UNDS, KC_1, KC_2, KC_3, KC_DQUO, KC_TILD, KC_AMPR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_NO, KC_DOT, KC_TRNS -), + ), -[ETC] = KEYMAP( + [ETC] = LAYOUT( RESET, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_VOLU, KC_F7, KC_F8, KC_F9, KC_HOME, LT(ETC,KC_A), KC_NO, KC_NO, KC_NO, KC_PGDN, KC_VOLD, KC_F4, KC_F5, KC_F6, KC_END, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, KC_MUTE, KC_F1, KC_F2, KC_F3, KC_INS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO -), + ), }; const uint16_t PROGMEM fn_actions[] = { diff --git a/keyboards/atreus/keymaps/classic/keymap.c b/keyboards/atreus/keymaps/classic/keymap.c index d0741162690..529b58a13b4 100644 --- a/keyboards/atreus/keymaps/classic/keymap.c +++ b/keyboards/atreus/keymaps/classic/keymap.c @@ -1,4 +1,4 @@ -#include "atreus.h" +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. @@ -9,23 +9,26 @@ #define _LW 2 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QW] = KEYMAP( /* Qwerty */ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P , - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN , - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH , - KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT ), + [_QW] = LAYOUT( /* Qwerty */ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P , + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN , + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH , + KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT + ), - [_RS] = KEYMAP( /* [> RAISE <] */ - KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR , - KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS , - KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS , - TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL ), + [_RS] = LAYOUT( /* [> RAISE <] */ + KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR , + KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS , + KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS , + TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL + ), - [_LW] = KEYMAP( /* [> LOWER <] */ - KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 , - KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 , - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12 , - KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, RESET ) + [_LW] = LAYOUT( /* [> LOWER <] */ + KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 , + KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 , + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12 , + KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, RESET + ), }; const uint16_t PROGMEM fn_actions[] = { diff --git a/keyboards/atreus/keymaps/default/keymap.c b/keyboards/atreus/keymaps/default/keymap.c index 9e91233c329..2e991ac6f27 100644 --- a/keyboards/atreus/keymaps/default/keymap.c +++ b/keyboards/atreus/keymaps/default/keymap.c @@ -1,7 +1,7 @@ // this is the style you want to emulate. // This is the canonical layout file for the Quantum project. If you want to add another keyboard, -#include "atreus.h" +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. @@ -12,50 +12,51 @@ #define _LW 2 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QW] = KEYMAP( /* Qwerty */ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P , - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN , - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH , - KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT ), -/* - * ! @ up { } || pgup 7 8 9 * - * # left down right $ || pgdn 4 5 6 + - * [ ] ( ) & || ` 1 2 3 \ - * lower insert super shift bksp ctrl || alt space fn . 0 = - */ -[_RS] = KEYMAP( /* [> RAISE <] */ - KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR , - KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS , - KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS , - TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL ), -/* - * insert home up end pgup || up F7 F8 F9 F10 - * del left down right pgdn || down F4 F5 F6 F11 - * volup reset || F1 F2 F3 F12 - * voldn super shift bksp ctrl || alt space L0 prtsc scroll pause - */ -[_LW] = KEYMAP( /* [> LOWER <] */ - KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 , - KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 , - KC_NO, KC_VOLU, KC_NO, KC_NO, RESET, KC_NO, KC_F1, KC_F2, KC_F3, KC_F12 , - KC_NO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, TO(_QW), KC_PSCR, KC_SLCK, KC_PAUS ) + [_QW] = LAYOUT( /* Qwerty */ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P , + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN , + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH , + KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT + ), + + /* + * ! @ up { } || pgup 7 8 9 * + * # left down right $ || pgdn 4 5 6 + + * [ ] ( ) & || ` 1 2 3 \ + * lower insert super shift bksp ctrl || alt space fn . 0 = + */ + [_RS] = LAYOUT( /* [> RAISE <] */ + KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR , + KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS , + KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS , + TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL ), + /* + * insert home up end pgup || up F7 F8 F9 F10 + * del left down right pgdn || down F4 F5 F6 F11 + * volup reset || F1 F2 F3 F12 + * voldn super shift bksp ctrl || alt space L0 prtsc scroll pause + */ + [_LW] = LAYOUT( /* [> LOWER <] */ + KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 , + KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 , + KC_NO, KC_VOLU, KC_NO, KC_NO, RESET, KC_NO, KC_F1, KC_F2, KC_F3, KC_F12 , + KC_NO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, TO(_QW), KC_PSCR, KC_SLCK, KC_PAUS ) }; const uint16_t PROGMEM fn_actions[] = { }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); } - return MACRO_NONE; + break; + } + return MACRO_NONE; }; diff --git a/keyboards/atreus/keymaps/dvorak_42_key/keymap.c b/keyboards/atreus/keymaps/dvorak_42_key/keymap.c index 15064eb8c9a..ba343ce4dbf 100644 --- a/keyboards/atreus/keymaps/dvorak_42_key/keymap.c +++ b/keyboards/atreus/keymaps/dvorak_42_key/keymap.c @@ -1,5 +1,5 @@ -#include "atreus.h" +#include QMK_KEYBOARD_H // layers #define BASE 0 @@ -25,7 +25,7 @@ enum custom_keycodes { CLOUD9_GOTO_SYMBOL, CLOUD9_GOTO_LINE, CLOUD9_NAVIGATE, - + }; // building instructions: @@ -35,50 +35,47 @@ enum custom_keycodes { // avrdude -p atmega32u4 -c avr109 -U flash:w:atreus_dvorak_42_key.hex -P COM7 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -[BASE] = { - {KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, KC_TRNS, KC_F, KC_G, KC_C, KC_R, KC_L, }, - {KC_A, KC_O, KC_E, KC_U, KC_I, KC_TRNS, KC_D, KC_H, KC_T, KC_N, KC_S, }, - {KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, MO(KEYNAV), KC_B, KC_M, KC_W, KC_V, KC_Z, }, - {OSM(MOD_LSFT), OSM(MOD_LCTL), MO(KEYSEL), MO(BROWSER_CONTROL), MO(COMBINED), KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_CAPSLOCK, OSM(MOD_LSFT), } -}, + [BASE] = LAYOUT( + KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, + KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, + KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, + OSM(MOD_LSFT), OSM(MOD_LCTL), MO(KEYSEL), MO(BROWSER_CONTROL), MO(COMBINED), MO(KEYNAV), KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_CAPSLOCK, OSM(MOD_LSFT) + ), -[KEYNAV] = { - {KC_ESC, CLOUD9_GOTO_LINE, RCTL(KC_Z), RCTL(KC_S), MEH(KC_F10), KC_TRNS, KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, }, - {MEH(KC_F11), CLOUD9_GOTO_SYMBOL, RSFT(KC_TAB), KC_TAB, MEH(KC_A), KC_TRNS, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), }, - {MEH(KC_B), CLOUD9_NAVIGATE, CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE, KC_TRNS, KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDOWN, }, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE), } -}, + [KEYNAV] = LAYOUT( + KC_ESC, CLOUD9_GOTO_LINE, RCTL(KC_Z), RCTL(KC_S), MEH(KC_F10), KC_TRNS, KC_HOME, KC_UP, KC_END, KC_PGUP, + MEH(KC_F11), CLOUD9_GOTO_SYMBOL, RSFT(KC_TAB), KC_TAB, MEH(KC_A), LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), + MEH(KC_B), CLOUD9_NAVIGATE, CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE, KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDOWN, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE) + ), -[KEYSEL] = { - {MEH(KC_G), MEH(KC_H),MEH(KC_I), MEH(KC_J), MEH(KC_K), KC_TRNS, KC_TRNS, RSFT(KC_HOME), RSFT(KC_UP), RSFT(KC_END), RSFT(KC_PGUP), }, - {MEH(KC_L), MEH(KC_M),MEH(KC_N), MEH(KC_O), MEH(KC_P), KC_TRNS, RSFT(RCTL(KC_LEFT)), RSFT(KC_LEFT), RSFT(KC_DOWN), RSFT(KC_RIGHT), RSFT(RCTL(KC_RIGHT)), }, - {MEH(KC_Q), MEH(KC_R),MEH(KC_S), MEH(KC_T), MEH(KC_U), KC_TRNS, KC_TRNS, RCTL(KC_C),RCTL(KC_X), RCTL(KC_V), RSFT(KC_PGDN), }, - {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE), } -}, + [KEYSEL] = LAYOUT( + MEH(KC_G), MEH(KC_H),MEH(KC_I), MEH(KC_J), MEH(KC_K), KC_TRNS, RSFT(KC_HOME), RSFT(KC_UP), RSFT(KC_END), RSFT(KC_PGUP), + MEH(KC_L), MEH(KC_M),MEH(KC_N), MEH(KC_O), MEH(KC_P), RSFT(RCTL(KC_LEFT)), RSFT(KC_LEFT), RSFT(KC_DOWN), RSFT(KC_RIGHT), RSFT(RCTL(KC_RIGHT)), + MEH(KC_Q), MEH(KC_R),MEH(KC_S), MEH(KC_T), MEH(KC_U), KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), RSFT(KC_PGDN), + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE) + ), -[COMBINED] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_TRNS, KC_PLUS, KC_7, KC_8, KC_9, KC_ASTR, }, - {KC_LPRN, KC_RPRN, KC_LBRACKET, KC_RBRACKET, KC_UNDS, KC_TRNS, KC_MINS, KC_4, KC_5, KC_6, KC_SLSH, }, - {KC_COLN, KC_DQUO, KC_LCBR, KC_RCBR, KC_AMPR, KC_TRNS, KC_EQUAL, KC_1, KC_2, KC_3, KC_QUES, }, - {KC_TRNS, KC_TILD, KC_GRAVE, KC_CIRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_PIPE, KC_BSLS, } -}, - -[MOUSE] = { - {KC_TRNS, KC_PGUP, KC_MS_WH_UP, KC_UP, KC_TRNS, KC_TRNS, KC_UP, KC_HOME, KC_MS_U, KC_END, KC_MS_WH_UP, }, - {KC_MS_ACCEL0, KC_PGDN, KC_MS_WH_DOWN, KC_DOWN, KC_TRNS, KC_TRNS, KC_DOWN, KC_MS_L, KC_MS_D, KC_MS_R, KC_MS_WH_DOWN, }, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN3, MEH(KC_X), MEH(KC_Y), MEH(KC_Z), KC_F5, RCTL(KC_W), }, - {KC_TRNS, M(MOUSE_LOCK), KC_TRNS, KC_MS_ACCEL0, KC_TRNS, KC_BTN1, KC_BTN2, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT), } -}, - -[BROWSER_CONTROL] = { - {KC_TRNS, KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2, KC_TRNS, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, KC_TRNS, }, - {KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT), }, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5, }, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_W), RCTL(KC_T), RSFT(RCTL(KC_TAB)), KC_TRNS, KC_TRNS, KC_TRNS, } -}, + [COMBINED] = LAYOUT( + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PLUS, KC_7, KC_8, KC_9, KC_ASTR, + KC_LPRN, KC_RPRN, KC_LBRACKET, KC_RBRACKET, KC_UNDS, KC_MINS, KC_4, KC_5, KC_6, KC_SLSH, + KC_COLN, KC_DQUO, KC_LCBR, KC_RCBR, KC_AMPR, KC_EQUAL, KC_1, KC_2, KC_3, KC_QUES, + KC_TRNS, KC_TILD, KC_GRAVE, KC_CIRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_PIPE, KC_BSLS + ), + [MOUSE] = LAYOUT( + KC_TRNS, KC_PGUP, KC_MS_WH_UP, KC_UP, KC_TRNS, KC_UP, KC_HOME, KC_MS_U, KC_END, KC_MS_WH_UP, + KC_MS_ACCEL0, KC_PGDN, KC_MS_WH_DOWN, KC_DOWN, KC_TRNS, KC_DOWN, KC_MS_L, KC_MS_D, KC_MS_R, KC_MS_WH_DOWN, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MEH(KC_X), MEH(KC_Y), MEH(KC_Z), KC_F5, RCTL(KC_W), + KC_TRNS, M(MOUSE_LOCK), KC_TRNS, KC_MS_ACCEL0, KC_TRNS, KC_BTN3, KC_BTN1, KC_BTN2, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT) + ), + [BROWSER_CONTROL] = LAYOUT( + KC_TRNS, KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, KC_TRNS, + KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_W), RCTL(KC_T), RSFT(RCTL(KC_TAB)), KC_TRNS, KC_TRNS, KC_TRNS + ), }; const uint16_t PROGMEM fn_actions[] = { @@ -91,31 +88,31 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { // Cloud9 macros case CLOUD9_TAB_LEFT: SEND_STRING(SS_LCTRL("[")); - return true; + return true; break; case CLOUD9_TAB_RIGHT: SEND_STRING(SS_LCTRL("]")); - return true; + return true; break; case CLOUD9_TAB_CLOSE: SEND_STRING(SS_LALT("w")); - return true; + return true; break; case CLOUD9_GOTO_SYMBOL: SEND_STRING(SS_LSFT(SS_LCTRL("e"))); - return true; + return true; break; case CLOUD9_GOTO_LINE: SEND_STRING(SS_LCTRL("g")); - return true; + return true; break; case CLOUD9_NAVIGATE: SEND_STRING(SS_LCTRL("e")); return true; - break; + break; } } - + return true; } @@ -142,7 +139,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) else mouse_lock = true; } - break; + break; } return MACRO_NONE; }; diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c index 32c8826e023..232c700e948 100644 --- a/keyboards/atreus/keymaps/erlandsona/keymap.c +++ b/keyboards/atreus/keymaps/erlandsona/keymap.c @@ -1,7 +1,7 @@ // this is the style you want to emulate. // This is the canonical layout file for the Quantum project. If you want to add another keyboard, -#include "atreus.h" +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. @@ -17,23 +17,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[BASE] = KEYMAP( /* Qwerty */ - KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , - KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , - SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT), - KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS ), + [BASE] = LAYOUT( /* Qwerty */ + KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , + KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , + SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT), + KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS + ), -[NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */ - KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, - KC_TAB , KC_5 , KC_6 , KC_7 , KC_8 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, - _______, KC_9 , KC_0 , KC_DOT , KC_COMM, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, - _______, _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, _______, _______, _______), + [NUMS] = LAYOUT( /* Numbers / Arrows / Symbols */ + KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC, + KC_TAB , KC_5 , KC_6 , KC_7 , KC_8 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC, + _______, KC_9 , KC_0 , KC_DOT , KC_COMM, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______, + _______, _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, _______, _______, _______ + ), -[MOUS] = KEYMAP( /* Mouse and Media Keys */ - KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, - KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3, - KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_R, KC_WH_U, KC_WH_D, KC_WH_L, KC_F2, - _______, _______ , _______, _______, _______, _______, _______, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1) + [MOUS] = LAYOUT( /* Mouse and Media Keys */ + KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4, + KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3, + KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_R, KC_WH_U, KC_WH_D, KC_WH_L, KC_F2, + _______, _______ , _______, _______, _______, _______, _______, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1 + ), }; @@ -45,17 +48,16 @@ const uint16_t PROGMEM fn_actions[] = { [MOUS] = ACTION_LAYER_ON(2, 1) // switch to layer 2 }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); } - return MACRO_NONE; + break; + } + return MACRO_NONE; }; diff --git a/keyboards/atreus/keymaps/gerb/keymap.c b/keyboards/atreus/keymaps/gerb/keymap.c index 1ba3942e3b9..c52f32ef61d 100644 --- a/keyboards/atreus/keymaps/gerb/keymap.c +++ b/keyboards/atreus/keymaps/gerb/keymap.c @@ -1,7 +1,7 @@ // This is the personal keymap of Chris Gerber (@gerbercj). I haven't worked out the kinks // with the Colemak and Dvorak support yet, but everything else works nicely. -#include "atreus.h" +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. @@ -14,53 +14,52 @@ #define _L2 4 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QW] = { /* Qwerty */ - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P }, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, - {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH}, - {KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_RCTL, KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT } - }, - [_CM] = { /* Colemak */ - {KC_Q, KC_W, KC_F, KC_P, KC_G, KC_NO, KC_J, KC_L, KC_U, KC_Y, KC_SCLN}, - {KC_A, KC_R, KC_S, KC_T, KC_D, KC_NO, KC_H, KC_N, KC_E, KC_I, KC_O }, - {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH}, - {KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_RCTL, KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT } - }, - [_DV] = { /* Dvorak */ - {KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_NO, KC_F, KC_G, KC_C, KC_R, KC_L }, - {KC_A, KC_O, KC_E, KC_U, KC_I, KC_NO, KC_D, KC_H, KC_T, KC_N, KC_S }, - {KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LALT, KC_B, KC_M, KC_W, KC_V, KC_Z }, - {KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_RCTL, KC_SPC, MO(_L1), KC_MINS, KC_SLSH, KC_ENT } - }, - [_L1] = { /* LAYER 1 */ - {KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_VOLU, KC_7, KC_8, KC_9, KC_LBRC}, - {KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_NO, KC_VOLD, KC_4, KC_5, KC_6, KC_RBRC}, - {KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, KC_MINS, KC_LALT, KC_MUTE, KC_1, KC_2, KC_3, KC_BSLS}, - {TG(_L2), KC_APP, KC_LGUI, KC_LSFT, KC_BSPC, KC_RCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL } - }, - [_L2] = { /* LAYER 2 */ - {KC_TRNS, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U, KC_NO, DF(_QW), KC_F7, KC_F8, KC_F9, KC_F10 }, - {KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, KC_NO, DF(_CM), KC_F6, KC_F5, KC_F6, KC_F11 }, - {KC_BTN4, KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4, KC_LALT, DF(_DV), KC_F1, KC_F2, KC_F3, KC_F12 }, - {KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_RCTL, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, RESET } - } + [_QW] = LAYOUT( /* Qwerty */ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LALT, KC_RCTL, KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT + ), + [_CM] = LAYOUT( /* Colemak */ + KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, + KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LALT, KC_RCTL, KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT + ), + [_DV] = LAYOUT( /* Dvorak */ + KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, + KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, + KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, + KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LALT, KC_RCTL, KC_SPC, MO(_L1), KC_MINS, KC_SLSH, KC_ENT + ), + [_L1] = LAYOUT( /* LAYER 1 */ + KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_VOLU, KC_7, KC_8, KC_9, KC_LBRC, + KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_VOLD, KC_4, KC_5, KC_6, KC_RBRC, + KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, KC_MINS, KC_MUTE, KC_1, KC_2, KC_3, KC_BSLS, + TG(_L2), KC_APP, KC_LGUI, KC_LSFT, KC_BSPC, KC_LALT, KC_RCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL + ), + [_L2] = LAYOUT( /* LAYER 2 */ + KC_TRNS, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U, DF(_QW), KC_F7, KC_F8, KC_F9, KC_F10, + KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, DF(_CM), KC_F6, KC_F5, KC_F6, KC_F11, + KC_BTN4, KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4, DF(_DV), KC_F1, KC_F2, KC_F3, KC_F12, + KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LALT, KC_RCTL, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, RESET + ), }; const uint16_t PROGMEM fn_actions[] = { }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; + switch(id) { + case 0: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); } - return MACRO_NONE; + break; + } + return MACRO_NONE; }; diff --git a/keyboards/atreus/keymaps/henxing/keymap.c b/keyboards/atreus/keymaps/henxing/keymap.c index e5ff5f5d3fb..51a46fa3737 100644 --- a/keyboards/atreus/keymaps/henxing/keymap.c +++ b/keyboards/atreus/keymaps/henxing/keymap.c @@ -1,4 +1,4 @@ -#include "atreus.h" +#include QMK_KEYBOARD_H #include "action_layer.h" #include "eeconfig.h" @@ -19,87 +19,85 @@ enum custom_keycodes { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * q w e r t || y u i o p + * a s d f g || h j k l ; + * z x c v b || n m , . / + * esc tab gui shift bksp ctrl || alt space lower - ' enter + */ + [_QWERTY] = LAYOUT( \ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \ + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \ + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \ + KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, LOWER, KC_MINS, KC_QUOT, KC_ENT \ + ), - /* - * q w e r t || y u i o p - * a s d f g || h j k l ; - * z x c v b || n m , . / - * esc tab gui shift bksp ctrl || alt space lower - ' enter - */ - [_QWERTY] = KEYMAP( \ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \ - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \ - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \ - KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, LOWER, KC_MINS, KC_QUOT, KC_ENT \ - ), - - /* - * ! @ up { } || pgup 7 8 9 * - * # left down right $ || pgdn 4 5 6 + - * [ ] ( ) & || ` 1 2 3 \ - * raise insert gui shift bksp ctrl || alt space ____ . 0 = - */ - [_LOWER] = KEYMAP( \ - KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR, \ - KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS, \ - KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, \ - RAISE, KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL \ - ), - - /* - * insert home up end pgup || up F7 F8 F9 F10 - * del left down right pgdn || down F4 F5 F6 F11 - * volup reset || F1 F2 F3 F12 - * voldn super shift bksp ctrl || alt space QWERTY prtsc scroll pause - */ - [_RAISE] = KEYMAP( \ - KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10, \ - KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11, \ - KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12, \ - KC_NO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, QWERTY, KC_PSCR, KC_SLCK, KC_PAUS \ - ) + /* + * ! @ up { } || pgup 7 8 9 * + * # left down right $ || pgdn 4 5 6 + + * [ ] ( ) & || ` 1 2 3 \ + * raise insert gui shift bksp ctrl || alt space ____ . 0 = + */ + [_LOWER] = LAYOUT( \ + KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR, \ + KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS, \ + KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, \ + RAISE, KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL \ + ), + /* + * insert home up end pgup || up F7 F8 F9 F10 + * del left down right pgdn || down F4 F5 F6 F11 + * volup reset || F1 F2 F3 F12 + * voldn super shift bksp ctrl || alt space QWERTY prtsc scroll pause + */ + [_RAISE] = LAYOUT( \ + KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10, \ + KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11, \ + KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12, \ + KC_NO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, QWERTY, KC_PSCR, KC_SLCK, KC_PAUS \ + ), }; void persistent_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); } bool process_record_user(uint16_t keycode, keyrecord_t *record) { - // The value to return - bool return_value = false; + // The value to return + bool return_value = false; - switch (keycode) { - case QWERTY: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_QWERTY); - } - break; + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_QWERTY); + } + break; - case LOWER: - // Toggle LOWER layer on when key pressed and off when released - if (record->event.pressed) { - layer_on(_LOWER); - } else { - layer_off(_LOWER); - } - break; + case LOWER: + // Toggle LOWER layer on when key pressed and off when released + if (record->event.pressed) { + layer_on(_LOWER); + } else { + layer_off(_LOWER); + } + break; - case RAISE: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_RAISE); - } - break; + case RAISE: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_RAISE); + } + break; - default: + default: - // If the keycode is not handled by any of the other cases, the - // function should return true - return_value = true; - break; - } + // If the keycode is not handled by any of the other cases, the + // function should return true + return_value = true; + break; + } - return return_value; + return return_value; } diff --git a/keyboards/atreus/keymaps/jeremy/keymap.c b/keyboards/atreus/keymaps/jeremy/keymap.c index 90ec6f9049a..42bef9d80c9 100644 --- a/keyboards/atreus/keymaps/jeremy/keymap.c +++ b/keyboards/atreus/keymaps/jeremy/keymap.c @@ -1,6 +1,6 @@ // This is the personal keymap of Jeremy Cowgar (@jcowgar). It is written for the programmer. -#include "atreus.h" +#include QMK_KEYBOARD_H #include "action_layer.h" #include "keymap_colemak.h" @@ -25,41 +25,43 @@ #define KM_REDO LGUI(LSFT(KC_Z)) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[ALPH] = { - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P}, - {KC_A, LT(NUMS, KC_S), LT(FKEY, KC_D), KC_F, KC_G, KC_TRNS, KC_H, KC_J, LT(CURS, KC_K), LT(SYMB, KC_L), KC_SCLN}, - {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH}, - {KC_LCTL, KC_ESC, KC_NO, KC_LSFT, KC_SPC, KC_LGUI, KC_ENT, KC_RSFT, KC_NO, KC_ESC, KC_RCTL} -}, -[NUMS] = { - {KC_TRNS, KC_TRNS, KC_TRNS, KC_ASTR, KC_SLSH, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_SLSH}, - {KC_TRNS, KC_TRNS, KC_EQL, KC_PLUS, KC_MINS, KC_TRNS, KC_LPRN, KC_4, KC_5, KC_6, KC_ASTR}, - {KC_TRNS, KC_TRNS, KC_DOT, KC_COMM, CM_SCLN, KC_TRNS, KC_RPRN, KC_1, KC_2, KC_3, KC_MINS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_EQL, KC_PLUS} -}, -[CURS] = { - {KC_TRNS, KC_BSPC, KC_UP, KC_DELT, KC_PGUP, KC_TRNS, KC_TRNS, KM_SAVE, KC_TRNS, KM_OPEN, KC_TRNS}, - {KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KM_UNDO, KC_LALT, KC_TRNS, KC_LGUI, KC_TRNS}, - {KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_MPLY, KM_COPY, KM_REDO, KM_CLSE, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TAB, KM_CUT, KM_PAST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -[SYMB] = { - {KC_BSLS, KC_EXLM, KC_LABK, KC_RABK, CM_COLN, KC_TRNS, KC_UNDS, KC_DLR, KC_QUES, KC_TRNS, KC_PERC}, - {KC_AT, KC_AMPR, KC_LPRN, KC_RPRN, CM_SCLN, KC_TRNS, KC_COMM, KC_DOT, KC_QUOT, KC_TRNS, KC_TILD}, - {KC_HASH, KC_PIPE, KC_LCBR, KC_RCBR, KC_SLSH, KC_TRNS, KC_TRNS, KC_GRV, KC_DQT, KC_TRNS, KC_CIRC}, - {KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -[FKEY] = { - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}}; + [ALPH] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, LT(NUMS, KC_S), LT(FKEY, KC_D), KC_F, KC_G, KC_H, KC_J, LT(CURS, KC_K), LT(SYMB, KC_L), KC_SCLN, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_LCTL, KC_ESC, KC_NO, KC_LSFT, KC_SPC, KC_LALT, KC_LGUI, KC_ENT, KC_RSFT, KC_NO, KC_ESC, KC_RCTL + ), + [NUMS] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_ASTR, KC_SLSH, KC_TRNS, KC_7, KC_8, KC_9, KC_SLSH, + KC_TRNS, KC_TRNS, KC_EQL, KC_PLUS, KC_MINS, KC_LPRN, KC_4, KC_5, KC_6, KC_ASTR, + KC_TRNS, KC_TRNS, KC_DOT, KC_COMM, CM_SCLN, KC_RPRN, KC_1, KC_2, KC_3, KC_MINS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_EQL, KC_PLUS + ), + [CURS] = LAYOUT( + KC_TRNS, KC_BSPC, KC_UP, KC_DELT, KC_PGUP, KC_TRNS, KM_SAVE, KC_TRNS, KM_OPEN, KC_TRNS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KM_UNDO, KC_LALT, KC_TRNS, KC_LGUI, KC_TRNS, + KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_MPLY, KM_REDO, KM_CLSE, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TAB, KM_COPY, KM_CUT, KM_PAST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [SYMB] = LAYOUT( + KC_BSLS, KC_EXLM, KC_LABK, KC_RABK, CM_COLN, KC_UNDS, KC_DLR, KC_QUES, KC_TRNS, KC_PERC, + KC_AT, KC_AMPR, KC_LPRN, KC_RPRN, CM_SCLN, KC_COMM, KC_DOT, KC_QUOT, KC_TRNS, KC_TILD, + KC_HASH, KC_PIPE, KC_LCBR, KC_RCBR, KC_SLSH, KC_TRNS, KC_GRV, KC_DQT, KC_TRNS, KC_CIRC, + KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [FKEY] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), +}; -const uint16_t PROGMEM fn_actions[] = {}; +const uint16_t PROGMEM fn_actions[] = { -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { switch(id) {} return MACRO_NONE; diff --git a/keyboards/atreus/keymaps/khitsule/keymap.c b/keyboards/atreus/keymaps/khitsule/keymap.c index 23fabf0d791..04cd4d59168 100644 --- a/keyboards/atreus/keymaps/khitsule/keymap.c +++ b/keyboards/atreus/keymaps/khitsule/keymap.c @@ -1,10 +1,10 @@ // Personal keymap of khitsule -#include "atreus.h" +#include QMK_KEYBOARD_H -#define ALPH 0 -#define LOWR 1 -#define RAIS 2 +#define ALPH 0 +#define LOWR 1 +#define RAIS 2 // enum layers { // ALPH, //alpha qwerty @@ -24,24 +24,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[ALPH] = { - {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P}, - {KC_A, KC_S, KC_D, KC_F, KC_G, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, - {KC_Z, KC_X, KC_C, KC_V, KC_B, CTL_T(KC_SPC), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH}, - {KC_ESC, KC_TRNS, KC_TRNS, ALT_T(KC_ENT), LT(LOWR, KC_TAB), SFT_T(KC_BSPC), LT(RAIS, KC_DEL), KC_LGUI, KC_TRNS, KC_QUOT, KC_MINUS} -}, -[LOWR] = { - {KC_PSCR, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_TRNS, KC_LPRN, KC_F7, KC_F8, KC_F9, KC_RPRN}, - {KC_VOLU, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGUP, KC_TRNS, KC_LBRC, KC_F4, KC_F5, KC_F6, KC_RBRC}, - {KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT, KC_PGDN, KC_TRNS, LSFT(KC_LBRC), KC_F1, KC_F2, KC_F3, LSFT(KC_RBRC)}, - {KM_DLEFT, KM_DRIGHT, LALT(KC_TAB), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} -}, -[RAIS] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_TRNS}, - {KC_CIRC, KC_AMPR, KC_GRV, KC_TILD, KC_PIPE, KC_TRNS, KC_PLUS, KC_4, KC_5, KC_6, KC_ASTR}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_TRNS, KC_MINUS, KC_1, KC_2, KC_3, KC_SLASH}, - {RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_EQL} -} + [ALPH] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + KC_ESC, KC_TRNS, KC_TRNS, ALT_T(KC_ENT), LT(LOWR, KC_TAB), CTL_T(KC_SPC), SFT_T(KC_BSPC), LT(RAIS, KC_DEL), KC_LGUI, KC_TRNS, KC_QUOT, KC_MINUS + ), + [LOWR] = LAYOUT( + KC_PSCR, KC_HOME, KC_UP, KC_END, KC_TRNS, KC_LPRN, KC_F7, KC_F8, KC_F9, KC_RPRN, + KC_VOLU, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGUP, KC_LBRC, KC_F4, KC_F5, KC_F6, KC_RBRC, + KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT, KC_PGDN, LSFT(KC_LBRC), KC_F1, KC_F2, KC_F3, LSFT(KC_RBRC), + KM_DLEFT, KM_DRIGHT, LALT(KC_TAB), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + [RAIS] = LAYOUT( + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_TRNS, KC_7, KC_8, KC_9, KC_TRNS, + KC_CIRC, KC_AMPR, KC_GRV, KC_TILD, KC_PIPE, KC_PLUS, KC_4, KC_5, KC_6, KC_ASTR, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_MINUS, KC_1, KC_2, KC_3, KC_SLASH, + RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_EQL + ), }; const uint16_t PROGMEM fn_actions[] = { @@ -49,9 +49,8 @@ const uint16_t PROGMEM fn_actions[] = { [2] = ACTION_MACRO_TAP(2) }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + switch(id) { case 1: return tap_mod_macro(record, LGUI, MACRO( D(LSFT), T(9), U(LSFT), END)); break; diff --git a/keyboards/atreus/keymaps/replicaJunction/keymap.c b/keyboards/atreus/keymaps/replicaJunction/keymap.c index d39a184d487..2d8f0d70f86 100644 --- a/keyboards/atreus/keymaps/replicaJunction/keymap.c +++ b/keyboards/atreus/keymaps/replicaJunction/keymap.c @@ -15,7 +15,7 @@ * here: https://colemakmods.github.io/mod-dh/ */ -#include "atreus.h" +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. @@ -47,136 +47,136 @@ ; // This doesn't do anything. It's just for VSCode because its syntax highlighting is weird for the above #define statements. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * Colemak-ModDH + * + * ,----------------------------------. ,----------------------------------. + * | Q | W | F | P | B | | J | L | U | Y | ; | + * +------+------+------+------+------| +------+------+------+------+------| + * | A | R | S | T | G | | M | N | E | I | O | + * +------+------+------+------+------| +------+------+------+------+------| + * |Z Shft| X | C | D | V | ,------. ,------. | K | H | , | . |/ Shft| + * +------+------+------+------+------| | Ctrl | | Alt | +------+------+------+------+------| + * | Esc | Gui | Tab | _FN | Bksp | | Del | | Enter| |Sp/_NU| _EX | - | ' | = | + * `----------------------------------' `------' `------' `----------------------------------' + * + */ + [_CO] = LAYOUT( + KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, + KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, + SFT_T(KC_Z), KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, SFT_T(KC_SLSH), + KC_ESC, KC_LGUI, KC_TAB, MO(_FN), KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL + ), -/* - * Colemak-ModDH - * - * ,----------------------------------. ,----------------------------------. - * | Q | W | F | P | B | | J | L | U | Y | ; | - * +------+------+------+------+------| +------+------+------+------+------| - * | A | R | S | T | G | | M | N | E | I | O | - * +------+------+------+------+------| +------+------+------+------+------| - * |Z Shft| X | C | D | V | ,------. ,------. | K | H | , | . |/ Shft| - * +------+------+------+------+------| | Ctrl | | Alt | +------+------+------+------+------| - * | Esc | Gui | Tab | _FN | Bksp | | Del | | Enter| |Sp/_NU| _EX | - | ' | = | - * `----------------------------------' `------' `------' `----------------------------------' - * - */ -[_CO] = KEYMAP( - KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, - KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, - SFT_T(KC_Z), KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, SFT_T(KC_SLSH), - KC_ESC, KC_LGUI, KC_TAB, MO(_FN), KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL -), + /* + * QWERTY + * + * ,----------------------------------. ,----------------------------------. + * | Q | W | E | R | T | | Y | U | I | O | P | + * +------+------+------+------+------| +------+------+------+------+------| + * | A | S | D | F | G | | H | J | K | L | ; | + * +------+------+------+------+------| +------+------+------+------+------| + * |Z Shft| X | C | V | B | ,------. ,------. | N | M | , | . |/ Shft| + * +------+------+------+------+------| | Ctrl | | Alt | +------+------+------+------+------| + * | Esc | Gui | Tab | _FN | Bksp | | Del | | Enter| |Sp/_NU| _EX | - | ' | = | + * `----------------------------------' `------' `------' `----------------------------------' + * + */ + [_QW] = LAYOUT( /* Qwerty */ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH), + KC_ESC, KC_LGUI, KC_TAB, MO(_FN), KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL + ), -/* - * QWERTY - * - * ,----------------------------------. ,----------------------------------. - * | Q | W | E | R | T | | Y | U | I | O | P | - * +------+------+------+------+------| +------+------+------+------+------| - * | A | S | D | F | G | | H | J | K | L | ; | - * +------+------+------+------+------| +------+------+------+------+------| - * |Z Shft| X | C | V | B | ,------. ,------. | N | M | , | . |/ Shft| - * +------+------+------+------+------| | Ctrl | | Alt | +------+------+------+------+------| - * | Esc | Gui | Tab | _FN | Bksp | | Del | | Enter| |Sp/_NU| _EX | - | ' | = | - * `----------------------------------' `------' `------' `----------------------------------' - * - */ -[_QW] = KEYMAP( /* Qwerty */ - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, - KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, - SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH), - KC_ESC, KC_LGUI, KC_TAB, MO(_FN), KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL -), + /* + * Extend + * + * Ctrl+` is a keyboard shortcut for the program ConEmu, which brings up a dropdown console window. + * + * Also note that some dual-role keys are overridden here with their modifiers + * + * ,----------------------------------. ,----------------------------------. + * | | | | |Ctrl `| | PgUp | Home | Up | End | Del | + * +------+------+------+------+------| +------+------+------+------+------| + * | Gui | Shift| Alt | Ctrl | | | PgDn | Left | Down | Right| Bksp | + * +------+------+------+------+------| +------+------+------+------+------| + * | Shift| Cut | Copy | | Paste| ,------. ,------. | | ^Tab | Tab | |Insert| + * +------+------+------+------+------| | Del | | Enter| +------+------+------+------+------| + * | | | | | | | | | | | Space|XXXXXX| | |PrntSc| + * `----------------------------------' `------' `------' `----------------------------------' + * + */ + [_EX] = LAYOUT( /* Extend */ + _______, _______, _______, _______, LCTL(KC_GRV), KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL, + KC_LGUI, KC_LSFT, KC_LALT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC, + KC_LSFT, KX_CUT, KX_COPY, _______, KX_PAST, _______, KCX_LST, KC_TAB, _______, KC_INS, + _______, _______, _______, _______, _______, KC_DEL, KC_ENT, KC_SPC, _______, _______, _______, KC_PSCR + ), -/* - * Extend - * - * Ctrl+` is a keyboard shortcut for the program ConEmu, which brings up a dropdown console window. - * - * Also note that some dual-role keys are overridden here with their modifiers - * - * ,----------------------------------. ,----------------------------------. - * | | | | |Ctrl `| | PgUp | Home | Up | End | Del | - * +------+------+------+------+------| +------+------+------+------+------| - * | Gui | Shift| Alt | Ctrl | | | PgDn | Left | Down | Right| Bksp | - * +------+------+------+------+------| +------+------+------+------+------| - * | Shift| Cut | Copy | | Paste| ,------. ,------. | | ^Tab | Tab | |Insert| - * +------+------+------+------+------| | Del | | Enter| +------+------+------+------+------| - * | | | | | | | | | | | Space|XXXXXX| | |PrntSc| - * `----------------------------------' `------' `------' `----------------------------------' - * - */ -[_EX] = KEYMAP( /* Extend */ - _______, _______, _______, _______, LCTL(KC_GRV), KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL, - KC_LGUI, KC_LSFT, KC_LALT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC, - KC_LSFT, KX_CUT, KX_COPY, _______, KX_PAST, _______, KCX_LST, KC_TAB, _______, KC_INS, - _______, _______, _______, _______, _______, KC_DEL, KC_ENT, KC_SPC, _______, _______, _______, KC_PSCR -), + /* + * Numbers and symbols + * + * ,----------------------------------. ,----------------------------------. + * | ! | @ | { | } | & | | / | 7 | 8 | 9 | * | + * +------+------+------+------+------| +------+------+------+------+------| + * | # | $ | ( | ) | ~ | | | | 4 | 5 | 6 | - | + * +------+------+------+------+------| +------+------+------+------+------| + * | % | ^ | [ | ] | ` | ,------. ,------. | \ | 1 | 2 | 3 | + | + * +------+------+------+------+------| | | | | +------+------+------+------+------| + * | | _GA | | | | | | | | |XXXXXX| 0 | . | = | | + * `----------------------------------' `------' `------' `----------------------------------' + * + */ + [_NU] = LAYOUT( /* Numbers and symbols */ + KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR, + KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TILD, KC_PIPE, KC_4, KC_5, KC_6, KC_MINS, + KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, KC_BSLS, KC_1, KC_2, KC_3, KC_PLUS, + _______, TG(_GA), _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_EQL, _______ + ), -/* - * Numbers and symbols - * - * ,----------------------------------. ,----------------------------------. - * | ! | @ | { | } | & | | / | 7 | 8 | 9 | * | - * +------+------+------+------+------| +------+------+------+------+------| - * | # | $ | ( | ) | ~ | | | | 4 | 5 | 6 | - | - * +------+------+------+------+------| +------+------+------+------+------| - * | % | ^ | [ | ] | ` | ,------. ,------. | \ | 1 | 2 | 3 | + | - * +------+------+------+------+------| | | | | +------+------+------+------+------| - * | | _GA | | | | | | | | |XXXXXX| 0 | . | = | | - * `----------------------------------' `------' `------' `----------------------------------' - * - */ -[_NU] = KEYMAP( /* Numbers and symbols */ - KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR, - KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TILD, KC_PIPE, KC_4, KC_5, KC_6, KC_MINS, - KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, KC_BSLS, KC_1, KC_2, KC_3, KC_PLUS, - _______, TG(_GA), _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_EQL, _______ -), + /* + * Functions + * + * ,----------------------------------. ,----------------------------------. + * | Caps | F9 | F10 | F11 | F12 | | _USER|Whl Up| MUp |Whl Dn| | + * +------+------+------+------+------| +------+------+------+------+------| + * | | F5 | F6 | F7 | F8 | | Vol ^| MLeft| MDown|MRight| | + * +------+------+------+------+------| +------+------+------+------+------| + * | | F1 | F2 | F3 | F4 | ,------. ,------. | Vol v| | | | | + * +------+------+------+------+------| | | |RClick| +------+------+------+------+------| + * | | | |XXXXXX| | | | | | |LClick|MClick| _CO | _GA | RESET| + * `----------------------------------' `------' `------' `----------------------------------' + * + */ + [_FN] = LAYOUT( /* Functions */ + KC_CAPS, KC_F9, KC_F10, KC_F11, KC_F12, M(_USER),KC_WH_U, KC_MS_U, KC_WH_D, _______, + _______, KC_F5, KC_F6, KC_F7, KC_F8, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_R, _______, + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_VOLD, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_BTN2, KC_BTN1, KC_BTN3, DF(_CO), DF(_QW), RESET + ), -/* - * Functions - * - * ,----------------------------------. ,----------------------------------. - * | Caps | F9 | F10 | F11 | F12 | | _USER|Whl Up| MUp |Whl Dn| | - * +------+------+------+------+------| +------+------+------+------+------| - * | | F5 | F6 | F7 | F8 | | Vol ^| MLeft| MDown|MRight| | - * +------+------+------+------+------| +------+------+------+------+------| - * | | F1 | F2 | F3 | F4 | ,------. ,------. | Vol v| | | | | - * +------+------+------+------+------| | | |RClick| +------+------+------+------+------| - * | | | |XXXXXX| | | | | | |LClick|MClick| _CO | _GA | RESET| - * `----------------------------------' `------' `------' `----------------------------------' - * - */ -[_FN] = KEYMAP( /* Functions */ - KC_CAPS, KC_F9, KC_F10, KC_F11, KC_F12, M(_USER),KC_WH_U, KC_MS_U, KC_WH_D, _______, - _______, KC_F5, KC_F6, KC_F7, KC_F8, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_R, _______, - _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_VOLD, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, KC_BTN2, KC_BTN1, KC_BTN3, DF(_CO), DF(_QW), RESET -), - -/* - * Gaming - * - * ,----------------------------------. ,----------------------------------. - * | | | | | | | |Whl Up| MUp |Whl Dn| | - * +------+------+------+------+------| +------+------+------+------+------| - * | | | | | | | | MLeft| MDown|MRight| | - * +------+------+------+------+------| +------+------+------+------+------| - * | Z | | | | | ,------. ,------. | | | | | | - * +------+------+------+------+------| | Bksp | |RClick| +------+------+------+------+------| - * | | _GA | | Shift| Space| | | | | |LClick|MClick| | | | - * `----------------------------------' `------' `------' `----------------------------------' - * - */ -[_GA] = KEYMAP( /* Gaming */ - _______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, - _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, - KC_Z, _______, _______, _______, _______, _______, _______, KC_MS_D, _______, _______, - _______, TG(_GA), _______, KC_LSFT, KC_SPC, KC_BSPC, KC_BTN2, KC_BTN1, KC_BTN3, _______, _______, _______ -)}; + /* + * Gaming + * + * ,----------------------------------. ,----------------------------------. + * | | | | | | | |Whl Up| MUp |Whl Dn| | + * +------+------+------+------+------| +------+------+------+------+------| + * | | | | | | | | MLeft| MDown|MRight| | + * +------+------+------+------+------| +------+------+------+------+------| + * | Z | | | | | ,------. ,------. | | | | | | + * +------+------+------+------+------| | Bksp | |RClick| +------+------+------+------+------| + * | | _GA | | Shift| Space| | | | | |LClick|MClick| | | | + * `----------------------------------' `------' `------' `----------------------------------' + * + */ + [_GA] = LAYOUT( /* Gaming */ + _______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, + _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, + KC_Z, _______, _______, _______, _______, _______, _______, KC_MS_D, _______, _______, + _______, TG(_GA), _______, KC_LSFT, KC_SPC, KC_BSPC, KC_BTN2, KC_BTN1, KC_BTN3, _______, _______, _______ + ) +}; /* * Template @@ -197,17 +197,16 @@ const uint16_t PROGMEM fn_actions[] = { }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function - switch(id) { - case _USER: - if (record->event.pressed) { - register_code(KC_RSFT); - } else { - unregister_code(KC_RSFT); - } - break; + switch(id) { + case _USER: + if (record->event.pressed) { + register_code(KC_RSFT); + } else { + unregister_code(KC_RSFT); } - return MACRO_NONE; + break; + } + return MACRO_NONE; }; diff --git a/keyboards/atreus/keymaps/xk/keymap.c b/keyboards/atreus/keymaps/xk/keymap.c index 9ac1138ec05..ed1f634cebe 100644 --- a/keyboards/atreus/keymaps/xk/keymap.c +++ b/keyboards/atreus/keymaps/xk/keymap.c @@ -1,7 +1,7 @@ // this is the style you want to emulate. // This is the canonical layout file for the Quantum project. If you want to add another keyboard, -#include "atreus.h" +#include QMK_KEYBOARD_H #define _COLEMAK 0 #define _KAMELOC 1 @@ -109,169 +109,170 @@ OSX, const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* - TAP - ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ - │ Q │ W │ F │ P │ B │ │ J │ L │ U │ Y │ ; │ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │ A │ R │ S │ T │ G │ │ M │ N │ E │ I │ O │ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │ X │ C │ D │ V │ Z ├────┐ ┌────┤ K │ H │ , │ . │ / │ - ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ - │SFTn│CTLn│ALTn│ROUS│SPC │BKSP│ │TAB │ENT │PGDN│ ' │ \ │ESC │ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ - HOLD - ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ - │ │ │ │ │ │ │ │ │ │ │ALT │ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │ │ │ │ │ │ │ │ │ │ │ │ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │ │ │ │ │ ├────┐ ┌────┤ │ │ │ │CTL │ - ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ - │SFT │CTL │ALT │ROUS│L123│L OH│ │L OH│L123│L!@#│ │L FN│LESC│ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ - DOUBLETAP - ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ - │ │ │ │ │ │ │ │ │ │ │ │ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │ │ │ │ │ │ │ │ │ │ │ │ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │ │ │ │ │ ├────┐ ┌────┤ │ │ │ │ │ - ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ - │OSML│OSML│OSML│NADA│ │ │ │ │ │ │ │ │ │ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ -*/ + /* + TAP + ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ + │ Q │ W │ F │ P │ B │ │ J │ L │ U │ Y │ ; │ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │ A │ R │ S │ T │ G │ │ M │ N │ E │ I │ O │ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │ X │ C │ D │ V │ Z ├────┐ ┌────┤ K │ H │ , │ . │ / │ + ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ + │SFTn│CTLn│ALTn│ROUS│SPC │BKSP│ │TAB │ENT │PGDN│ ' │ \ │ESC │ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ + HOLD + ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ + │ │ │ │ │ │ │ │ │ │ │ALT │ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │ │ │ │ │ │ │ │ │ │ │ │ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │ │ │ │ │ ├────┐ ┌────┤ │ │ │ │CTL │ + ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ + │SFT │CTL │ALT │ROUS│L123│L OH│ │L OH│L123│L!@#│ │L FN│LESC│ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ + DOUBLETAP + ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ + │ │ │ │ │ │ │ │ │ │ │ │ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │ │ │ │ │ │ │ │ │ │ │ │ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │ │ │ │ │ ├────┐ ┌────┤ │ │ │ │ │ + ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ + │OSML│OSML│OSML│NADA│ │ │ │ │ │ │ │ │ │ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ + */ -// Colemak PB&J (Mod-DH) -[_COLEMAK] = KEYMAP( \ - KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, ALT_IT, \ - KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, \ - KC_X, KC_C, KC_D, KC_V, KC_Z, KC_K, KC_H, KC_COMM, SFT_IT, CTL_IT, \ - KYCTL, KYSFT, KYALT, TT(_MLAYER), XK_SPC, XK_TAB, XK_BSP, XK_ENT, XK_PGDN, XK_APO, PIPBOY, XK_ESC \ -), + // Colemak PB&J (Mod-DH) + [_COLEMAK] = LAYOUT( \ + KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, ALT_IT, \ + KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, \ + KC_X, KC_C, KC_D, KC_V, KC_Z, KC_K, KC_H, KC_COMM, SFT_IT, CTL_IT, \ + KYCTL, KYSFT, KYALT, TT(_MLAYER), XK_SPC, XK_TAB, XK_BSP, XK_ENT, XK_PGDN, XK_APO, PIPBOY, XK_ESC \ + ), -// useful for one-handed typing -[_KAMELOC] = KEYMAP( \ - KC_SCLN, KC_Y, KC_U, KC_L, KC_J, KC_B, KC_P, KC_F, KC_W, KC_Q, \ - KC_O, KC_I, KC_E, KC_N, KC_M, KC_G, KC_T, KC_S, KC_R, KC_A, \ - KC_SLSH, KC_DOT, KC_COMM, KC_H, KC_K, KC_Z, KC_V, KC_D, KC_C, KC_X, \ - XK_ESC, PIPBOY, TT(_MLAYER), KC_PGDN, KC_ENT, _______, _______, XK_SPC, KC_PGUP, KYALT, KYCTL, KYSFT \ -), + // useful for one-handed typing + [_KAMELOC] = LAYOUT( \ + KC_SCLN, KC_Y, KC_U, KC_L, KC_J, KC_B, KC_P, KC_F, KC_W, KC_Q, \ + KC_O, KC_I, KC_E, KC_N, KC_M, KC_G, KC_T, KC_S, KC_R, KC_A, \ + KC_SLSH, KC_DOT, KC_COMM, KC_H, KC_K, KC_Z, KC_V, KC_D, KC_C, KC_X, \ + XK_ESC, PIPBOY, TT(_MLAYER), KC_PGDN, KC_ENT, _______, _______, XK_SPC, KC_PGUP, KYALT, KYCTL, KYSFT \ + ), -/* - ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ - │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │ M │ V- │ V+ │NEXT│PLAY│ │ ← │ ↓ │ ↑ │ → │DASH│ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │ - │ = │ ` │GUI │UNDO├────┐ ┌────┤HOME│END │HOME│INS │ \ │ - ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ - │ │ │ │ │ │ │ │ │ │GUI │ │ │ │ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ -*/ + /* + ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ + │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │ M │ V- │ V+ │NEXT│PLAY│ │ ← │ ↓ │ ↑ │ → │DASH│ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │ - │ = │ ` │GUI │UNDO├────┐ ┌────┤HOME│END │HOME│INS │ \ │ + ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ + │ │ │ │ │ │ │ │ │ │GUI │ │ │ │ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ + */ -[_IKAPILA] = KEYMAP( \ - KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \ - KC_MUTE, KC_VOLD, KC_VOLU, TD(MND), KC_MPLY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TD(DSH), \ - KC_MINS, KC_EQL, KC_GRV, KC_LGUI, LCTL(KC_Z), TD(HND), KC_HOME, TD(HND), KC_INS, KC_BSLS, \ - _______, _______, _______, _______, _______, _______, _______, _______, KC_LGUI, _______, _______, KYSFT \ -), + [_IKAPILA] = LAYOUT( \ + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \ + KC_MUTE, KC_VOLD, KC_VOLU, TD(MND), KC_MPLY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TD(DSH), \ + KC_MINS, KC_EQL, KC_GRV, KC_LGUI, LCTL(KC_Z), TD(HND), KC_HOME, TD(HND), KC_INS, KC_BSLS, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_LGUI, _______, _______, KYSFT \ + ), -/* - ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ - │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ ( │ ) │ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │PSCR│ ← │ ↓ │ ↑ │ → │ │NEXT│PGUP│ V+ │ V- │DASH│ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │ _ │ + │ ~ │HOME│END ├────┐ ┌────┤ {} │ () │ <> │ [ │ ] │ - ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ - │ │ │ │ │ │DEL │ │BKSP│ │ │ │ │ │ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ -*/ + /* + ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ + │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ ( │ ) │ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │PSCR│ ← │ ↓ │ ↑ │ → │ │NEXT│PGUP│ V+ │ V- │DASH│ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │ _ │ + │ ~ │HOME│END ├────┐ ┌────┤ {} │ () │ <> │ [ │ ] │ + ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ + │ │ │ │ │ │DEL │ │BKSP│ │ │ │ │ │ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ + */ -[_IKASHFT] = KEYMAP( \ - KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, \ - KC_PSCR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TD(MND), KC_PGUP, KC_VOLU, TD(VOM), KC_MDSH, \ - KC_UNDS, KC_PLUS, KC_TILD, KC_HOME, KC_END, M(1), M(0), M(5), KC_LBRC, KC_RBRC, \ - _______, _______, _______, _______, _______, KC_BSPC, KC_DEL, _______, _______, _______, _______, _______ \ -), + [_IKASHFT] = LAYOUT( \ + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, \ + KC_PSCR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TD(MND), KC_PGUP, KC_VOLU, TD(VOM), KC_MDSH, \ + KC_UNDS, KC_PLUS, KC_TILD, KC_HOME, KC_END, M(1), M(0), M(5), KC_LBRC, KC_RBRC, \ + _______, _______, _______, _______, _______, KC_BSPC, KC_DEL, _______, _______, _______, _______, _______ \ + ), -/* - ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ - │ F1 │ F2 │ F3 │ F4 │ F5 │ │ F6 │ F7 │ F8 │ F9 │ F10│ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │ F21│ F22│ F23│ F24│PAUS│ │ │SCLK│BOOT│ │NKRO│ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │ │ │ │ │ ├────┐ ┌────┤ │ │ │ │CAPS│ - ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ - │ │ │ │ │ │ │ │ │ │ │ │ │ │ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ -*/ + /* + ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ + │ F1 │ F2 │ F3 │ F4 │ F5 │ │ F6 │ F7 │ F8 │ F9 │ F10│ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │ F21│ F22│ F23│ F24│PAUS│ │ │SCLK│BOOT│ │NKRO│ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │ │ │ │ │ ├────┐ ┌────┤ │ │ │ │CAPS│ + ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ + */ -[_FNCTION] = KEYMAP( \ - TD(F11), TD(F12), TD(F13), TD(F14), TD(F15), TD(F16), TD(F17), TD(F18), TD(F19), TD(F20), \ - KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, KC_SLCK, XXXXXXX, XXXXXXX, TGNKRO, \ - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_CAPS, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -), + [_FNCTION] = LAYOUT( \ + TD(F11), TD(F12), TD(F13), TD(F14), TD(F15), TD(F16), TD(F17), TD(F18), TD(F19), TD(F20), \ + KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, KC_SLCK, XXXXXXX, XXXXXXX, TGNKRO, \ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_CAPS, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), -[_GAMEQWERTY] = KEYMAP( \ - KC_P, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, \ - KC_SCLN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, \ - KC_SLSH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, TD(COD), \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -), + [_GAMEQWERTY] = LAYOUT( \ + KC_P, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, \ + KC_SCLN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, \ + KC_SLSH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, TD(COD), \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), -/* - ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ - │^HOM│^PGD│^UP │^PGU│^PGU│ │ │MW_L│ MU │MW_R│ AC2│ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │^END│^LFT│^DWN│^RGT│^PGD│ │ │ ML │ MD │ MR │ AC1│ - ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ - │ M5 │ M2 │ M4 │ M3 │ M1 ├────┐ ┌────┤ │MW_D│MW_U│ │ AC0│ - ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ - │ │ │ │ │ │ │ │ │ │ │ │ │ │ - └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ -*/ + /* + ┌────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬────┐ + │^HOM│^PGD│^UP │^PGU│^PGU│ │ │MW_L│ MU │MW_R│ AC2│ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │^END│^LFT│^DWN│^RGT│^PGD│ │ │ ML │ MD │ MR │ AC1│ + ├────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼────┤ + │ M5 │ M2 │ M4 │ M3 │ M1 ├────┐ ┌────┤ │MW_D│MW_U│ │ AC0│ + ├────┼────┼────┼────┼────┤ │ │ ├────┼────┼────┼────┼────┤ + │ │ │ │ │ │ │ │ │ │ │ │ │ │ + └────┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴────┴────┘ + */ -[_MLAYER] = KEYMAP( \ - LALT(KC_ESC), KC_9, KC_8, KC_7, KC_6, M(1), M(0), KC_MS_U, M(0), M(2), \ - KC_0, KC_2, KC_3, KC_4, KC_5, M(5), KC_MS_L, KC_MS_D, KC_MS_R, KC_ACL2, \ - KC_1, KC_0, XXXXXXX, XXXXXXX, KC_BTN5, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, M(5), \ - _______, _______, _______, _______, KC_BTN1, KC_BTN2, KC_BTN2, KC_BTN1, KC_BTN2, _______, KC_ACL0, _______ \ -), + [_MLAYER] = LAYOUT( \ + LALT(KC_ESC), KC_9, KC_8, KC_7, KC_6, M(1), M(0), KC_MS_U, M(0), M(2), \ + KC_0, KC_2, KC_3, KC_4, KC_5, M(5), KC_MS_L, KC_MS_D, KC_MS_R, KC_ACL2, \ + KC_1, KC_0, XXXXXXX, XXXXXXX, KC_BTN5, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, M(5), \ + _______, _______, _______, _______, KC_BTN1, KC_BTN2, KC_BTN2, KC_BTN1, KC_BTN2, _______, KC_ACL0, _______ \ + ), -//one_ring=2__rule__them-all -[_GRVTABL] = KEYMAP( \ - LALT(KC_PSCR), M(4), KC_PWR, KC_POWER, RESET, RESET, KC_R, KC_E, KC_I, LALT(KC_PSCR), \ - TG(_NINEKEY), TG(_FNCTION), TG(_MLAYER), TG(_IKASHFT), TG(_IKAPILA), TG(_IKAPILA), KC_S, KC_U, KC_B, TG(_NINEKEY), \ - M(3), TG(_GAMEQWERTY), XXXXXXX, XXXXXXX, XXXXXXX, KC_MYCM, KC_CALC, XXXXXXX, TG(_GAMEQWERTY), M(3), \ - TT(_GRVTABL), TG(_FNCTION), TG(_MLAYER), TG(_IKASHFT), TG(_IKAPILA), _______, _______, TG(_IKAPILA), TG(_IKASHFT), TG(_MLAYER), TG(_MLAYER), TG(_NINEKEY) \ -)}; + //one_ring=2__rule__them-all + [_GRVTABL] = LAYOUT( \ + LALT(KC_PSCR), M(4), KC_PWR, KC_POWER, RESET, RESET, KC_R, KC_E, KC_I, LALT(KC_PSCR), \ + TG(_NINEKEY), TG(_FNCTION), TG(_MLAYER), TG(_IKASHFT), TG(_IKAPILA), TG(_IKAPILA), KC_S, KC_U, KC_B, TG(_NINEKEY), \ + M(3), TG(_GAMEQWERTY), XXXXXXX, XXXXXXX, XXXXXXX, KC_MYCM, KC_CALC, XXXXXXX, TG(_GAMEQWERTY), M(3), \ + TT(_GRVTABL), TG(_FNCTION), TG(_MLAYER), TG(_IKASHFT), TG(_IKAPILA), _______, _______, TG(_IKAPILA), TG(_IKASHFT), TG(_MLAYER), TG(_MLAYER), TG(_NINEKEY) \ + ), +}; qk_tap_dance_action_t tap_dance_actions[] = { - [VOM] = ACTION_TAP_DANCE_DOUBLE(KC_VOLD, KC_MUTE), - [PRN] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_RPRN), - [EGT] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_RCBR), - [HRD] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC), - [DSH] = ACTION_TAP_DANCE_DOUBLE(KC_NDSH, KC_MDSH), - [ESC] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, LALT(KC_F4)), - [EQE] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_ENT), - [UND] = ACTION_TAP_DANCE_DOUBLE(KC_Z, LCTL(KC_Z)), - [PGN] = ACTION_TAP_DANCE_DOUBLE(KC_PGDN, KC_PGUP), - [HND] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, KC_END), - [COD] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_DOT), - [MND] = ACTION_TAP_DANCE_DOUBLE(KC_MNXT, KC_MPRV), - [F11] = ACTION_TAP_DANCE_DOUBLE(KC_F1, KC_F11), - [F12] = ACTION_TAP_DANCE_DOUBLE(KC_F2, KC_F12), - [F13] = ACTION_TAP_DANCE_DOUBLE(KC_F3, KC_F13), - [F14] = ACTION_TAP_DANCE_DOUBLE(KC_F4, KC_F14), - [F15] = ACTION_TAP_DANCE_DOUBLE(KC_F5, KC_F15), - [F16] = ACTION_TAP_DANCE_DOUBLE(KC_F6, KC_F16), - [F17] = ACTION_TAP_DANCE_DOUBLE(KC_F7, KC_F17), - [F18] = ACTION_TAP_DANCE_DOUBLE(KC_F8, KC_F18), - [F19] = ACTION_TAP_DANCE_DOUBLE(KC_F9, KC_F19), - [F20] = ACTION_TAP_DANCE_DOUBLE(KC_F10, KC_F20), + [VOM] = ACTION_TAP_DANCE_DOUBLE(KC_VOLD, KC_MUTE), + [PRN] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_RPRN), + [EGT] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_RCBR), + [HRD] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC), + [DSH] = ACTION_TAP_DANCE_DOUBLE(KC_NDSH, KC_MDSH), + [ESC] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, LALT(KC_F4)), + [EQE] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_ENT), + [UND] = ACTION_TAP_DANCE_DOUBLE(KC_Z, LCTL(KC_Z)), + [PGN] = ACTION_TAP_DANCE_DOUBLE(KC_PGDN, KC_PGUP), + [HND] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, KC_END), + [COD] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_DOT), + [MND] = ACTION_TAP_DANCE_DOUBLE(KC_MNXT, KC_MPRV), + [F11] = ACTION_TAP_DANCE_DOUBLE(KC_F1, KC_F11), + [F12] = ACTION_TAP_DANCE_DOUBLE(KC_F2, KC_F12), + [F13] = ACTION_TAP_DANCE_DOUBLE(KC_F3, KC_F13), + [F14] = ACTION_TAP_DANCE_DOUBLE(KC_F4, KC_F14), + [F15] = ACTION_TAP_DANCE_DOUBLE(KC_F5, KC_F15), + [F16] = ACTION_TAP_DANCE_DOUBLE(KC_F6, KC_F16), + [F17] = ACTION_TAP_DANCE_DOUBLE(KC_F7, KC_F17), + [F18] = ACTION_TAP_DANCE_DOUBLE(KC_F8, KC_F18), + [F19] = ACTION_TAP_DANCE_DOUBLE(KC_F9, KC_F19), + [F20] = ACTION_TAP_DANCE_DOUBLE(KC_F10, KC_F20), }; void matrix_init_user(){ @@ -281,33 +282,33 @@ void matrix_init_user(){ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { if (record->event.pressed) { switch(id) { - case 0: - return MACRO( D(LSFT), T(9), U(LSFT), D(LSFT), T(0), U(LSFT), T(LEFT), END ); - case 1: - return MACRO( D(LSFT), T(LBRC), U(LSFT), D(LSFT), T(RBRC), U(LSFT), T(LEFT), END ); - case 2: - return MACRO( T(LBRC), T(RBRC), T(LEFT), END); - case 5: - return MACRO( D(LSFT), T(COMMA), U(LSFT), D(LSFT), T(DOT), U(LSFT), END ); - case 3: - clear_keyboard(); - return false; - break; - case 4: - return MACRO( D(LSFT), T(SCOLON), U(LSFT), D(LSFT), T(9), U(LSFT), D(LSFT), T(0), U(LSFT), D(LSFT), T(LBRACKET), U(LSFT), D(LSFT), T(9), U(LSFT), D(LSFT), T(SCOLON), U(LSFT), D(LSFT), T(0), U(LSFT), D(LSFT), T(BSLASH), U(LSFT), D(LSFT), T(SCOLON), U(LSFT), D(LSFT), T(7), U(LSFT), D(LSFT), T(RBRACKET), U(LSFT), T(SCOLON), D(LSFT), T(SCOLON), U(LSFT), END ); - case WINSH: - set_unicode_input_mode(UC_WIN); - return false; - break; - case WIN: - set_unicode_input_mode(UC_WINC); - return false; - break; - case OSX: - set_unicode_input_mode(UC_OSX); - return false; - break; - } + case 0: + return MACRO( D(LSFT), T(9), U(LSFT), D(LSFT), T(0), U(LSFT), T(LEFT), END ); + case 1: + return MACRO( D(LSFT), T(LBRC), U(LSFT), D(LSFT), T(RBRC), U(LSFT), T(LEFT), END ); + case 2: + return MACRO( T(LBRC), T(RBRC), T(LEFT), END); + case 5: + return MACRO( D(LSFT), T(COMMA), U(LSFT), D(LSFT), T(DOT), U(LSFT), END ); + case 3: + clear_keyboard(); + return false; + break; + case 4: + return MACRO( D(LSFT), T(SCOLON), U(LSFT), D(LSFT), T(9), U(LSFT), D(LSFT), T(0), U(LSFT), D(LSFT), T(LBRACKET), U(LSFT), D(LSFT), T(9), U(LSFT), D(LSFT), T(SCOLON), U(LSFT), D(LSFT), T(0), U(LSFT), D(LSFT), T(BSLASH), U(LSFT), D(LSFT), T(SCOLON), U(LSFT), D(LSFT), T(7), U(LSFT), D(LSFT), T(RBRACKET), U(LSFT), T(SCOLON), D(LSFT), T(SCOLON), U(LSFT), END ); + case WINSH: + set_unicode_input_mode(UC_WIN); + return false; + break; + case WIN: + set_unicode_input_mode(UC_WINC); + return false; + break; + case OSX: + set_unicode_input_mode(UC_OSX); + return false; + break; + } } - return MACRO_NONE; + return MACRO_NONE; }; diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c index 347445ef6bc..fb0c5077f84 100644 --- a/keyboards/atreus/keymaps/xyverz/keymap.c +++ b/keyboards/atreus/keymaps/xyverz/keymap.c @@ -2,7 +2,7 @@ // Chris Gerber (@gerbercj), with the addition of persistent layers like the Planck and // Preonic keyboards by Jack Humbert. -#include "atreus.h" +#include QMK_KEYBOARD_H #include "action_layer.h" #include "eeconfig.h" @@ -43,7 +43,7 @@ enum planck_keycodes { #define XXXXXXX KC_NO const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Dvorak Layer + /* Dvorak Layer ,----------------------------------. ,----------------------------------. | ' | , | . | P | Y | | F | G | C | R | L | |------+------+------+------+------| |------+------+------+------+------| @@ -53,14 +53,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+------+------+------| ||Enter |------+------+------+------+------| | Esc | Tab | GUI | LOWER| BkSp |------'`------| Spc | RAISE| - | / | \ | `----------------------------------' `----------------------------------' */ - [_DVORAK] = { - {KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, XXXXXXX, KC_F, KC_G, KC_C, KC_R, KC_L }, - {KC_A, KC_O, KC_E, KC_U, KC_I, XXXXXXX, KC_D, KC_H, KC_T, KC_N, KC_S }, - {SFTSCLN, KC_Q, KC_J, KC_K, KC_X, KC_LCTL, KC_B, KC_M, KC_W, KC_V, SFTZED }, - {ESCTRL, TABALT, KC_LGUI, LOWER, KC_BSPC, ALTENT, KC_SPC, RAISE, KC_MINS, KC_SLSH, KC_BSLS} - }, + [_DVORAK] = LAYOUT( + KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L , + KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S , + SFTSCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, SFTZED , + ESCTRL, TABALT, KC_LGUI, LOWER, KC_BSPC, KC_LCTL, ALTENT, KC_SPC, RAISE, KC_MINS, KC_SLSH, KC_BSLS + ), -/* QWERTY Layer + /* QWERTY Layer ,----------------------------------. ,----------------------------------. | Q | W | E | R | T | | Y | U | I | O | P | |------+------+------+------+------| |------+------+------+------+------| @@ -70,14 +70,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+------+------+------| ||Enter |------+------+------+------+------| | Esc | Tab | GUI | LOWER| BkSp |------'`------| Spc | RAISE| - | ' | \ | `----------------------------------' `----------------------------------' */ - [_QWERTY] = { - {KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX, KC_Y, KC_U, KC_I, KC_O, KC_P }, - {KC_A, KC_S, KC_D, KC_F, KC_G, XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, - {SFTZED, KC_X, KC_C, KC_V, KC_B, KC_LCTL, KC_N, KC_M, KC_COMM, KC_DOT, SFTSLSH}, - {ESCTRL, TABALT, KC_LGUI, LOWER, KC_BSPC, ALTENT, KC_SPC, RAISE, KC_MINS, KC_QUOT, KC_BSLS} - }, + [_QWERTY] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P , + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + SFTZED, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFTSLSH, + ESCTRL, TABALT, KC_LGUI, LOWER, KC_BSPC, KC_LCTL, ALTENT, KC_SPC, RAISE, KC_MINS, KC_QUOT, KC_BSLS + ), -/* Colemak Layer + /* Colemak Layer ,----------------------------------. ,----------------------------------. | Q | W | F | P | G | | J | L | U | Y | L | |------+------+------+------+------| |------+------+------+------+------| @@ -87,14 +87,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+------+------+------| ||Enter |------+------+------+------+------| | Esc | Tab | GUI | LOWER| BkSp |------'`------| Spc | RAISE| - | ' | \ | `----------------------------------' `----------------------------------'*/ - [_COLEMAK] = { - {KC_Q, KC_W, KC_F, KC_P, KC_G, XXXXXXX, KC_J, KC_L, KC_U, KC_Y, KC_SCLN}, - {KC_A, KC_R, KC_S, KC_T, KC_D, XXXXXXX, KC_H, KC_N, KC_E, KC_I, KC_O }, - {SFTZED, KC_X, KC_C, KC_V, KC_B, KC_LCTL, KC_K, KC_M, KC_COMM, KC_DOT, SFTSLSH}, - {ESCTRL, TABALT, KC_LGUI, LOWER, KC_BSPC, ALTENT, KC_SPC, RAISE, KC_MINS, KC_QUOT, KC_BSLS} - }, + [_COLEMAK] = LAYOUT( + KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, + KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O , + SFTZED, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, SFTSLSH, + ESCTRL, TABALT, KC_LGUI, LOWER, KC_BSPC, KC_LCTL, ALTENT, KC_SPC, RAISE, KC_MINS, KC_QUOT, KC_BSLS + ), -/* Dvorak Layer with Command key on left thumb instead of Control + /* Dvorak Layer with Command key on left thumb instead of Control ,----------------------------------. ,----------------------------------. | ' | , | . | P | Y | | F | G | C | R | L | |------+------+------+------+------| |------+------+------+------+------| @@ -104,14 +104,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+------+------+------| ||Enter |------+------+------+------+------| | Esc | Tab | GUI | LOWER| BkSp |------'`------| Spc | RAISE| - | / | \ | `----------------------------------' `----------------------------------' */ - [_DVORMAC] = { - {KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, XXXXXXX, KC_F, KC_G, KC_C, KC_R, KC_L }, - {KC_A, KC_O, KC_E, KC_U, KC_I, XXXXXXX, KC_D, KC_H, KC_T, KC_N, KC_S }, - {SFTSCLN, KC_Q, KC_J, KC_K, KC_X, KC_LGUI, KC_B, KC_M, KC_W, KC_V, SFTZED }, - {ESCTRL, TABALT, KC_LGUI, LOWER, KC_BSPC, ALTENT, KC_SPC, RAISE, KC_MINS, KC_SLSH, KC_BSLS} - }, + [_DVORMAC] = LAYOUT( + KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L , + KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S , + SFTSCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, SFTZED , + ESCTRL, TABALT, KC_LGUI, LOWER, KC_BSPC, KC_LGUI, ALTENT, KC_SPC, RAISE, KC_MINS, KC_SLSH, KC_BSLS + ), -/* LOWER Layer + /* LOWER Layer ,----------------------------------. ,----------------------------------. | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |------+------+------+------+------| |------+------+------+------+------| @@ -121,14 +121,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+------+------+------| || |------+------+------+------+------| | ~ | | | | Del |------'`------| Ins | | | | | `----------------------------------' `----------------------------------'*/ - [_LOWER] = { - {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, XXXXXXX, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN}, - {KC_CAPS, _______, KC_UP, _______, KC_HOME, XXXXXXX, KC_PGUP, _______, KC_PLUS, KC_LCBR, KC_RCBR}, - {_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, _______}, - {KC_TILD, _______, _______, _______, KC_DEL, _______, KC_INS, _______, _______, _______, _______} - }, + [_LOWER] = LAYOUT( + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, + KC_CAPS, _______, KC_UP, _______, KC_HOME, KC_PGUP, _______, KC_PLUS, KC_LCBR, KC_RCBR, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, _______, + KC_TILD, _______, _______, _______, KC_DEL, _______, _______, KC_INS, _______, _______, _______, _______ + ), -/* RAISE Layer + /* RAISE Layer ,----------------------------------. ,----------------------------------. | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |------+------+------+------+------| |------+------+------+------+------| @@ -138,14 +138,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+------+------+------| || |------+------+------+------+------| | ` | | | | Del |------'`------| Ins | | | | | `----------------------------------' `----------------------------------'*/ - [_RAISE] = { - {KC_1, KC_2, KC_3, KC_4, KC_5, XXXXXXX, KC_6, KC_7, KC_8, KC_9, KC_0 }, - {KC_CAPS, _______, KC_UP, _______, KC_HOME, XXXXXXX, KC_PGUP, _______, KC_EQL, KC_LBRC, KC_RBRC}, - {_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, _______}, - {KC_GRV, _______, _______, _______, KC_DEL, _______, KC_INS, _______, _______, _______, _______} - }, + [_RAISE] = LAYOUT( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0 , + KC_CAPS, _______, KC_UP, _______, KC_HOME, KC_PGUP, _______, KC_EQL, KC_LBRC, KC_RBRC, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, _______, + KC_GRV, _______, _______, _______, KC_DEL, _______, _______, KC_INS, _______, _______, _______, _______ + ), -/* ADJUST Layer + /* ADJUST Layer ,----------------------------------. ,----------------------------------. | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | |------+------+------+------+------| |------+------+------+------+------| @@ -155,13 +155,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+------+------+------| || |------+------+------+------+------| | | | | | |------'`------| | | | | RESET| `----------------------------------' `----------------------------------'*/ - [_ADJUST] = { - {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 }, - {KC_F11, _______, _______, _______, _______, XXXXXXX, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_F12 }, - {_______, QWERTY, COLEMAK, DVORAK, DVORMAC, _______, _______, _______, _______, _______, _______}, - {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET } - } - + [_ADJUST] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 , + KC_F11, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_F12 , + _______, QWERTY, COLEMAK, DVORAK, DVORMAC, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET + ), }; const uint16_t PROGMEM fn_actions[] = { @@ -175,50 +174,50 @@ void persistent_default_layer_set(uint16_t default_layer) { bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { - case QWERTY: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_QWERTY); - } - return false; - break; - case COLEMAK: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_COLEMAK); - } - return false; - break; - case DVORAK: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_DVORAK); - } - return false; - break; - case DVORMAC: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_DVORMAC); - } - return false; - break; - case LOWER: - if (record->event.pressed) { - layer_on(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_LOWER); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; - case RAISE: - if (record->event.pressed) { - layer_on(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } else { - layer_off(_RAISE); - update_tri_layer(_LOWER, _RAISE, _ADJUST); - } - return false; - break; + case QWERTY: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_QWERTY); } - return true; + return false; + break; + case COLEMAK: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_DVORAK); + } + return false; + break; + case DVORMAC: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_DVORMAC); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_LOWER); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } else { + layer_off(_RAISE); + update_tri_layer(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + } + return true; }; From ec6f3e07c595802a6c6fc500a4ace6ea7fdfa086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nico=20Hormaz=C3=A1bal?= Date: Thu, 3 May 2018 16:58:12 +0200 Subject: [PATCH 19/34] Updated keymap for Dr NotSoKind Planck layout (#2877) * added own keymap for planck * dynamic macros * moved the reset button * Update readme for volume explanation * Format * added safe double shift * changed the modified shift to regular shift, for allowing shift + F keys * moved power stuff to the function layer * del button on raise * Update Readme.md * updated F keys --- .../planck/keymaps/dr_notsokind/Readme.md | 6 +- .../planck/keymaps/dr_notsokind/keymap.c | 64 +++++++++---------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/keyboards/planck/keymaps/dr_notsokind/Readme.md b/keyboards/planck/keymaps/dr_notsokind/Readme.md index 35f3975c6a7..e7e29cb7dd2 100644 --- a/keyboards/planck/keymaps/dr_notsokind/Readme.md +++ b/keyboards/planck/keymaps/dr_notsokind/Readme.md @@ -70,7 +70,7 @@ When you are done, press `Media` and `Enter`. You will finally hear a tune confi Press `Media` and the key where you stored your Macro, either `;` or `'`. The Macro will play. -![Imgur](https://i.imgur.com/TCsD6Ro.png) +![Imgur](https://i.imgur.com/ri4lEcl.png) http://www.keyboard-layout-editor.com/#/gists/4cfb26f84bbb4fabe5e6c7cc22c85e24 @@ -82,13 +82,13 @@ The Lock mode toggle disables the double-tap `CAPS` and disables `GUI` keys (WIN Lower + Raise gives access to the layer switching, plus keyboard modes (such as enabling music mode for annoying your coworkers), reset, SysReq and Lock Mode, which disables the double shift tap for CapsLock (taken from the *circuit* layout, see the comments below). Also provides another distribution for the F keys. -![Adjust](https://i.imgur.com/ADNLR6n.png) +![Adjust](https://i.imgur.com/6m6baos.png) http://www.keyboard-layout-editor.com/#/gists/12462bfba17d16bb40b54ed914209d92 ## Numpad Layer -![Numpad](https://i.imgur.com/iTyhjNZ.png) +![Numpad](https://i.imgur.com/od1plfz.png) http://www.keyboard-layout-editor.com/#/gists/5ab730ab278d2050c5250498806e8edc diff --git a/keyboards/planck/keymaps/dr_notsokind/keymap.c b/keyboards/planck/keymaps/dr_notsokind/keymap.c index b360b39da11..8555a959a46 100644 --- a/keyboards/planck/keymaps/dr_notsokind/keymap.c +++ b/keyboards/planck/keymaps/dr_notsokind/keymap.c @@ -87,9 +87,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* NUMPAD * ,-----------------------------------------------------------------------------------. - * |QWERTY| NULL | NULL | NULL | NULL | NULL | NULL | / | 7 | 8 | 9 | - | + * |QWERTY| NULL | Up | NULL | NULL | NULL | NULL | / | 7 | 8 | 9 | - | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | NULL | NULL | NULL | NULL | NULL | NULL | * | 4 | 5 | 6 | + | + * | | Left | Down | Right| NULL | NULL | NULL | * | 4 | 5 | 6 | + | * |------+------+------+------+------+------+------+------+------+------+------+------| * | |NumLck| NULL | NULL | NULL | NULL | NULL |BckSp | 1 | 2 | 3 | Ent | * |------+------+------+------+------+-------------+------+------+------+------+------| @@ -97,8 +97,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------------------------' */ [_NUMPAD] = { - {QWERTY, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS}, - {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS}, + {QWERTY, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS}, + {_______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS}, {_______, KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, KC_P1, KC_P2, KC_P3, KC_PENT}, {_______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PCMM, KC_PEQL} }, @@ -123,55 +123,55 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* RAISE * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BKSP | + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * | Del | F1 | F2 | F3 | F4 | F5 | | - | = | [ | ] | \ | * |------+------+------+------+------+------+------+------+------+------+------+------| - * |LShift| F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | NULL | PgUp | Enter| + * |LShift| F6 | F7 | F8 | F9 | F10 | |ISO # |ISO / | NULL | PgUp | Enter| * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | | Vol+ | | NULL | | | Home | PgDn | End | + * | | | | F11 | | F12 | | | Home | PgDn | End | * `-----------------------------------------------------------------------------------' */ [_RAISE] = { - {KC_GRV , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_DEL , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, XXXXXXX, KC_PGUP, KC_ENT }, - {_______, _______, _______, KC_VOLU, _______, XXXXXXX, XXXXXXX, _______, _______, KC_HOME, KC_PGDN, KC_END } + {KC_GRV , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, + {KC_DEL , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_LSFT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, KC_NUHS, KC_NUBS, XXXXXXX, KC_PGUP, KC_ENT }, + {_______, _______, _______, KC_F11, _______, KC_F12, KC_F12, _______, _______, KC_HOME, KC_PGDN, KC_END } }, /* LOWER * ,-----------------------------------------------------------------------------------. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Del | F13 | F14 | F15 | F16 | F17 | F18 | _ | + | { | } | | | + * | Del | F1 | F2 | F3 | F4 | F5 | | _ | + | { | } | | | * |------+------+------+------+------+------+------+------+------+------+------+------| - * |LShift| F19 | F20 | F21 | F22 | F23 | F24 |ISO ~ |ISO | | NULL | PgUp | Enter| + * |LShift| F6 | F7 | F8 | F9 | F10 | |ISO ~ |ISO | | NULL | PgUp | Enter| * |------+------+------+------+------+-------------+------+------+------+------+------| - * | | | | Vol- | | NULL | | | Home | PgDn | End | + * | | | | F11 | | F12 | | | Home | PgDn | End | * `-----------------------------------------------------------------------------------' */ [_LOWER] = { - {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, - {KC_DEL, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, - {KC_LSFT, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, S(KC_NUHS), S(KC_NUBS), XXXXXXX, KC_PGUP, KC_ENT }, - {_______, _______, _______, KC_VOLD, _______, XXXXXXX, XXXXXXX, _______, _______, KC_HOME, KC_PGDN, KC_END } + {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL }, + {KC_DEL , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_LSFT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, S(KC_NUHS), S(KC_NUBS), XXXXXXX, KC_PGUP, KC_ENT }, + {_______, _______, _______, KC_F11, _______, KC_F12, KC_F12, _______, _______, KC_HOME, KC_PGDN, KC_END } }, /* MEDIA AND COMMANDS * ,-----------------------------------------------------------------------------------. - * |Sleep | NULL |WbHome| NULL | NULL | NULL |Again | NULL |Insert| NULL |PrntSc|Power | + * | NULL | NULL |WbHome| NULL | NULL | NULL |Again | NULL |Insert| NULL |PrntSc| NULL | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Wake | NULL |WbSrch| NULL | Find | NULL | NULL | NULL | Calc | NULL |PlyMc1|PlyMc2| + * | NULL | NULL |WbSrch| NULL | Find | NULL | NULL | NULL | NULL | NULL |PlyMc1|PlyMc2| * |------+------+------+------+------+------+------+------+------+------+------+------| - * |LShift| Undo | Cut | Copy | Paste| NULL | NULL | NULL |ZoomOu|ZoomIn| Prev | NULL | + * |LShift| NULL | NULL | Calc | NULL | NULL | NULL | NULL |ZoomOu|ZoomIn| Prev |RecStp| * |------+------+------+------+------+-------------+------+------+------+------+------| - * | NULL | NULL | NULL | | Vol- | Mute | Vol+ | NULL | Stop | Next | Play | + * |ONESHT| NULL | NULL | | Vol- | Mute | Vol+ |Zoom 0| Stop | Next | Play | * `-----------------------------------------------------------------------------------' */ [_MEDIA] = { - {KC_SLEP, XXXXXXX, KC_WHOM, XXXXXXX, XXXXXXX, XXXXXXX, KC_AGAIN, XXXXXXX, KC_INS, XXXXXXX, KC_PSCR, KC_PWR}, - {KC_WAKE, XXXXXXX, KC_WSCH, XXXXXXX, KC_FIND, XXXXXXX, XXXXXXX, XXXXXXX, KC_CALC, XXXXXXX, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2 }, - {KC_LSFT, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, XXXXXXX, XXXXXXX, XXXXXXX, ZOOM_OUT, ZOOM_IN, KC_MPRV, DYN_REC_STOP }, + {XXXXXXX, XXXXXXX, KC_WHOM, XXXXXXX, XXXXXXX, XXXXXXX, KC_AGAIN, XXXXXXX, KC_INS, XXXXXXX, KC_PSCR, XXXXXXX}, + {XXXXXXX, XXXXXXX, KC_WSCH, XXXXXXX, KC_FIND, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2 }, + {KC_LSFT, XXXXXXX, XXXXXXX, KC_CALC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ZOOM_OUT, ZOOM_IN, KC_MPRV, DYN_REC_STOP }, {ONESHOT, XXXXXXX, XXXXXXX, _______, KC_VOLD, KC_MUTE, KC_MUTE, KC_VOLU, ZOOM_NML, KC_MSTP, KC_MNXT, KC_MPLY } }, @@ -195,18 +195,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* FUNCTIONS * ,-----------------------------------------------------------------------------------. - * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * | SLEEP| NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | POWER| * |------+------+------+------+------+------+------+------+------+------+------+------| - * | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24 | + * | WAKE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | NULL | Reset| NULL |AudOff|MusOff|QWERTY|NUMPAD|Mus On|Aud On| NULL |Voice+|SysReq| + * | NULL | NULL | NULL |AudOff|MusOff|QWERTY|NUMPAD|Mus On|Aud On| NULL |Voice+|SysReq| * |------+------+------+------+------+-------------+------+------+------+------+------| - * | NULL | NULL | Lock | NULL | | NULL | | NULL |AGNorm|Voice-|AGSwap| + * | Reset| NULL | LOCK | NULL | | NULL | | NULL |AGNorm|Voice-|AGSwap| * `-----------------------------------------------------------------------------------' */ [_FUNCTN] = { - {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_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24 }, + {KC_SLEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PWR }, + {KC_WAKE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, {XXXXXXX, XXXXXXX, XXXXXXX, AU_OFF, MU_OFF, QWERTY, NUMPAD, MU_ON, AU_ON, XXXXXXX, MUV_IN, KC_SYSREQ}, {RESET, XXXXXXX, LOCK, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, AG_NORM, MUV_DE, AG_SWAP} } From 6c1d6c32221ab18ad8083aecc8d2a04480f49cef Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Thu, 3 May 2018 15:56:10 -0400 Subject: [PATCH 20/34] add discord link --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 23773278e47..859e3ed12f1 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@ [![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags) [![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware) -[![Gitter](https://img.shields.io/gitter/room/qmk/qmk_firmware.js.svg)](https://gitter.im/qmk/qmk_firmware) +[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh) [![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm) [![GitHub contributors](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly) [![GitHub forks](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/) From 87612df54b01f826dd2059eafeb985d0d68523a4 Mon Sep 17 00:00:00 2001 From: Sascha Grunert Date: Fri, 4 May 2018 19:04:26 +0200 Subject: [PATCH 21/34] Add saschagrunert planck keymap (#2886) --- keyboards/planck/keymaps/sascha/keymap.c | 37 ++++++++++++++++++++++++ keyboards/planck/keymaps/sascha/rules.mk | 0 2 files changed, 37 insertions(+) create mode 100644 keyboards/planck/keymaps/sascha/keymap.c create mode 100644 keyboards/planck/keymaps/sascha/rules.mk diff --git a/keyboards/planck/keymaps/sascha/keymap.c b/keyboards/planck/keymaps/sascha/keymap.c new file mode 100644 index 00000000000..0ec7c01b5c7 --- /dev/null +++ b/keyboards/planck/keymaps/sascha/keymap.c @@ -0,0 +1,37 @@ +#include "backlight.h" +#include "planck.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { + /* ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ + * │ Esc │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ Bksp │ + * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤ + * │ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; : │ Entr │ + * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤ + * │ Shft │ Z │ X │ C │ V │ B │ N │ M │ , < │ . > │ / ? │ ' " │ + * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤ + * │ Alt │ GUI │ \ | │ - _ │ = + │ Spce │ Spce │ ( │ ) │ [ { │ ] } │ Lr 1 │ + * └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ + */ + { KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC } , + { KC_LCTL , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_ENT } , + { KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_QUOT } , + { KC_LALT , KC_LGUI , KC_BSLS , KC_MINS , KC_EQL , KC_SPC , KC_SPC , KC_LPRN , KC_RPRN , KC_LBRC , KC_RBRC , MO(1) } + }, +[1] = { + /* ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐ + * │ ~ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ DEL │ + * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤ + * │ ` │ ! │ @ │ # │ $ │ % │ * │ & │ BL+ │ BL- │ BLTg │ BLBr │ + * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤ + * │ Caps │ Home │ End │ PgUp │ PgDn │ F1 │ F2 │ F3 │ Left │ Down │ Up │ Rght │ + * ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤ + * │ Powr │ Rset │ VoUp │ VoDn │ Play │ Stop │ Prev │ Next │ Alt │ Ctrl │ GUI │ │ + * └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘ + */ + { KC_TILD , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_DEL } , + { KC_GRV , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , KC_CIRC , KC_AMPR , BL_INC , BL_DEC , BL_TOGG , BL_BRTG } , + { KC_CAPS , KC_HOME , KC_END , KC_PGUP , KC_PGDN , KC_F1 , KC_F2 , KC_F3 , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT } , + { KC_PWR , RESET , KC_VOLU , KC_VOLD , KC_MPLY , KC_MSTP , KC_MPRV , KC_MNXT , KC_RALT , KC_RCTL , KC_RGUI , KC_TRNS } + } +}; diff --git a/keyboards/planck/keymaps/sascha/rules.mk b/keyboards/planck/keymaps/sascha/rules.mk new file mode 100644 index 00000000000..e69de29bb2d From f969d5ed2870b54a80a0faa6f38eb21d4608e12d Mon Sep 17 00:00:00 2001 From: Biacco42 Date: Sat, 5 May 2018 02:24:35 +0900 Subject: [PATCH 22/34] Submit/ergo42 default keymap update (#2890) * Add new default keymap for Ergo42. * Rename keymap names * Update TAPPING_TERM --- .../{default-macOS => biacco-macOS}/config.h | 0 .../{default-macOS => biacco-macOS}/keymap.c | 0 .../{default-macOS => biacco-macOS}/rules.mk | 0 keyboards/ergo42/keymaps/biacco/config.h | 37 +++++++ keyboards/ergo42/keymaps/biacco/keymap.c | 98 +++++++++++++++++++ keyboards/ergo42/keymaps/biacco/rules.mk | 3 + keyboards/ergo42/keymaps/default/keymap.c | 71 +++++--------- keyboards/ergo42/rev1/config.h | 2 +- 8 files changed, 163 insertions(+), 48 deletions(-) rename keyboards/ergo42/keymaps/{default-macOS => biacco-macOS}/config.h (100%) rename keyboards/ergo42/keymaps/{default-macOS => biacco-macOS}/keymap.c (100%) rename keyboards/ergo42/keymaps/{default-macOS => biacco-macOS}/rules.mk (100%) create mode 100644 keyboards/ergo42/keymaps/biacco/config.h create mode 100644 keyboards/ergo42/keymaps/biacco/keymap.c create mode 100644 keyboards/ergo42/keymaps/biacco/rules.mk diff --git a/keyboards/ergo42/keymaps/default-macOS/config.h b/keyboards/ergo42/keymaps/biacco-macOS/config.h similarity index 100% rename from keyboards/ergo42/keymaps/default-macOS/config.h rename to keyboards/ergo42/keymaps/biacco-macOS/config.h diff --git a/keyboards/ergo42/keymaps/default-macOS/keymap.c b/keyboards/ergo42/keymaps/biacco-macOS/keymap.c similarity index 100% rename from keyboards/ergo42/keymaps/default-macOS/keymap.c rename to keyboards/ergo42/keymaps/biacco-macOS/keymap.c diff --git a/keyboards/ergo42/keymaps/default-macOS/rules.mk b/keyboards/ergo42/keymaps/biacco-macOS/rules.mk similarity index 100% rename from keyboards/ergo42/keymaps/default-macOS/rules.mk rename to keyboards/ergo42/keymaps/biacco-macOS/rules.mk diff --git a/keyboards/ergo42/keymaps/biacco/config.h b/keyboards/ergo42/keymaps/biacco/config.h new file mode 100644 index 00000000000..5a6261c4f7c --- /dev/null +++ b/keyboards/ergo42/keymaps/biacco/config.h @@ -0,0 +1,37 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#endif diff --git a/keyboards/ergo42/keymaps/biacco/keymap.c b/keyboards/ergo42/keymaps/biacco/keymap.c new file mode 100644 index 00000000000..704cd47e1fe --- /dev/null +++ b/keyboards/ergo42/keymaps/biacco/keymap.c @@ -0,0 +1,98 @@ +#include "ergo42.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +#define BASE 0 +#define META 1 +#define SYMB 2 +#define GAME 3 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* BASE + * ,------------------------------------------------. ,------------------------------------------------. + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ | + * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | | + * `------------------------------------------------' `------------------------------------------------' + */ + +[BASE] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \ + KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO), \ + KC_LCTRL, KC_LGUI, KC_APP, KC_PSCR, LT(SYMB, KC_ESC), RCTL_T(KC_SPC), SFT_T(KC_TAB), KC_BSPC, LT(META, KC_ENT), KC_DELT, KC_PSCR, TG(GAME), TG(SYMB), KC_JYEN \ +), + +/* META + * ,------------------------------------------------. ,------------------------------------------------. + * | 1 | 2 | 3 | 4 | 5 | 6 | [ | | ] | 7 | 8 | 9 | 0 | - | ^ | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | Alt | F1 | |Muhen | Henk | | ( | | ) | Left | Down | Up |Right | | | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | Sft | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 |\/Sft | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |Reset |=>GAME|=>SYMB| \ | + * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | | + * `------------------------------------------------' `------------------------------------------------' + */ + +[META] = KEYMAP( \ + 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_F1, XXXXXXX, KC_MHEN, KC_HENK, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, \ + _______, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, SFT_T(KC_RO), \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______ \ +), + +/* SYMB + * ,------------------------------------------------. ,------------------------------------------------. + * | ! | " | # | $ | % | & | [ | | ] | ' | ( | ) | ~ | = | ~ | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | Alt | | | | | | ( | | ) | | | | | + | * | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | Sft | | | | | | { | | } | | | < | > | ? | \ | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ | + * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | | + * `------------------------------------------------' `------------------------------------------------' + */ + +[SYMB] = KEYMAP( \ + S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), _______, _______, S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL), \ + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_SCLN), S(KC_QUOT), \ + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(KC_RO), \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +), + +/* GAME + * ,------------------------------------------------. ,------------------------------------------------. + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ | + * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| + * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : | + * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| + * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab | |Back |Enter | Del |PrtSc |=>GAME|=>SYMB| \ | + * | | | | | | | | |Space | | | | | | | + * `------------------------------------------------' `------------------------------------------------' + */ +[GAME] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \ + KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO), \ + KC_LCTRL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DELT, KC_PSCR, _______, _______, KC_JYEN \ +) + +}; + diff --git a/keyboards/ergo42/keymaps/biacco/rules.mk b/keyboards/ergo42/keymaps/biacco/rules.mk new file mode 100644 index 00000000000..457a3d01d4a --- /dev/null +++ b/keyboards/ergo42/keymaps/biacco/rules.mk @@ -0,0 +1,3 @@ +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/ergo42/keymaps/default/keymap.c b/keyboards/ergo42/keymaps/default/keymap.c index 704cd47e1fe..c06cda5db6a 100644 --- a/keyboards/ergo42/keymaps/default/keymap.c +++ b/keyboards/ergo42/keymaps/default/keymap.c @@ -17,82 +17,59 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* BASE * ,------------------------------------------------. ,------------------------------------------------. - * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ | + * | ESC | Tab | Q | W | E | R | T | | Y | U | I | O | P | [ | Bksp | * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| - * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : | + * | Del | RCtrl| A | S | D | F | G | | H | J | K | L | ; | ] | Enter| * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| - * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft | + * | SYMB | LSft | Z | X | C | V | B | | N | M | , | . | / | UP | RSft | * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ | - * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | | + * | META | LCtrl| ` | \ | LAlt | LGUI |Space | |Space | ' | - | = | LEFT | DOWN | RIGHT| * `------------------------------------------------' `------------------------------------------------' */ [BASE] = KEYMAP( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \ - KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO), \ - KC_LCTRL, KC_LGUI, KC_APP, KC_PSCR, LT(SYMB, KC_ESC), RCTL_T(KC_SPC), SFT_T(KC_TAB), KC_BSPC, LT(META, KC_ENT), KC_DELT, KC_PSCR, TG(GAME), TG(SYMB), KC_JYEN \ + KC_ESC, 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_BSPC, \ + KC_DELT, KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RBRC, KC_ENT, \ + MO(SYMB), KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, \ + MO(META), KC_LCTL, KC_GRV, KC_BSLS, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_QUOT, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT \ ), /* META * ,------------------------------------------------. ,------------------------------------------------. - * | 1 | 2 | 3 | 4 | 5 | 6 | [ | | ] | 7 | 8 | 9 | 0 | - | ^ | + * | Reset| 1 | 2 | 3 | 4 | 5 | [ | | ] | 6 | 7 | 8 | 9 | 0 | Bksp | * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| - * | Alt | F1 | |Muhen | Henk | | ( | | ) | Left | Down | Up |Right | | | + * | Del | F1 | |Muhen | Henk | | | | Left | Down | Up |Right | | | Enter| * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| - * | Sft | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 |\/Sft | + * | SYMB | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 | F12 | * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |Reset |=>GAME|=>SYMB| \ | - * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | | + * | META | LCtrl| ` | \ | LAlt | LGUI |Space | |Space | ' | - | = | | | | * `------------------------------------------------' `------------------------------------------------' */ [META] = KEYMAP( \ - 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_F1, XXXXXXX, KC_MHEN, KC_HENK, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, \ - _______, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, SFT_T(KC_RO), \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______ \ + RESET, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LBRC, KC_RBRC, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \ + _______, KC_F1, XXXXXXX, KC_MHEN, KC_HENK, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, _______, \ + _______, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, S(KC_LBRC), S(KC_RBRC), KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX \ ), /* SYMB * ,------------------------------------------------. ,------------------------------------------------. - * | ! | " | # | $ | % | & | [ | | ] | ' | ( | ) | ~ | = | ~ | + * | ESC | ! | @ | # | $ | % | [ | | ] | ^ | & | * | ( | ) | Bksp | * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| - * | Alt | | | | | | ( | | ) | | | | | + | * | + * | Del | | | | | | ( | | ) | | | | | | Enter| * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| - * | Sft | | | | | | { | | } | | | < | > | ? | \ | + * | SYMB | | | | | | { | | } | | | | | UP | Sft | * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ | - * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | | + * | META | LCtrl| ` | \ | LAlt | LGUI |Space | |Space | ' | - | = | LEFT | DOWN | RIGHT| * `------------------------------------------------' `------------------------------------------------' */ [SYMB] = KEYMAP( \ - S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), _______, _______, S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL), \ - _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_SCLN), S(KC_QUOT), \ - _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(KC_RO), \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ -), - -/* GAME - * ,------------------------------------------------. ,------------------------------------------------. - * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ | - * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------| - * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : | - * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------| - * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft | - * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| - * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab | |Back |Enter | Del |PrtSc |=>GAME|=>SYMB| \ | - * | | | | | | | | |Space | | | | | | | - * `------------------------------------------------' `------------------------------------------------' - */ -[GAME] = KEYMAP( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \ - KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO), \ - KC_LCTRL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DELT, KC_PSCR, _______, _______, KC_JYEN \ + _______, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), KC_LBRC, KC_RBRC, S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), _______, \ + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_9), S(KC_0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, \ + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_LBRC), S(KC_RBRC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ ) - }; diff --git a/keyboards/ergo42/rev1/config.h b/keyboards/ergo42/rev1/config.h index 51cff095c7c..1a674a85862 100644 --- a/keyboards/ergo42/rev1/config.h +++ b/keyboards/ergo42/rev1/config.h @@ -43,7 +43,7 @@ along with this program. If not, see . #define CATERINA_BOOTLOADER /* define tapping term */ -#define TAPPING_TERM 120 +#define TAPPING_TERM 100 /* define if matrix has ghost */ //#define MATRIX_HAS_GHOST From 1806509ad5d34d6eabf2968097d6f68f048fc761 Mon Sep 17 00:00:00 2001 From: hdbx <38972365+hdbx@users.noreply.github.com> Date: Sat, 5 May 2018 02:27:00 +0900 Subject: [PATCH 23/34] Add new keymap for Ergo42 (#2891) * Add Ergo42 keymaps for JIS layout --- keyboards/ergo42/keymaps/hdbx/config.h | 48 ++++++ keyboards/ergo42/keymaps/hdbx/keymap.c | 188 ++++++++++++++++++++++++ keyboards/ergo42/keymaps/hdbx/readme.md | 71 +++++++++ keyboards/ergo42/keymaps/hdbx/rules.mk | 5 + 4 files changed, 312 insertions(+) create mode 100644 keyboards/ergo42/keymaps/hdbx/config.h create mode 100644 keyboards/ergo42/keymaps/hdbx/keymap.c create mode 100644 keyboards/ergo42/keymaps/hdbx/readme.md create mode 100644 keyboards/ergo42/keymaps/hdbx/rules.mk diff --git a/keyboards/ergo42/keymaps/hdbx/config.h b/keyboards/ergo42/keymaps/hdbx/config.h new file mode 100644 index 00000000000..39be7526ae7 --- /dev/null +++ b/keyboards/ergo42/keymaps/hdbx/config.h @@ -0,0 +1,48 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#define TAPPING_TERM 120 +#define TAPPING_TOGGLE 3 + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLIGHT_SLEEP +#define RGBLED_NUM 14 +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + +#endif diff --git a/keyboards/ergo42/keymaps/hdbx/keymap.c b/keyboards/ergo42/keymaps/hdbx/keymap.c new file mode 100644 index 00000000000..29a419bce1b --- /dev/null +++ b/keyboards/ergo42/keymaps/hdbx/keymap.c @@ -0,0 +1,188 @@ +#include "ergo42.h" +#include "action_layer.h" +#include "eeconfig.h" +#include "keymap_jp.h" // qmk_firmware-master/quantum/keymap_extras/keymap_jp.h “ú–{ŒêƒL�[ƒ{�[ƒh�ݒè—p +#include // macro sendstring for jis keyboard ƒ}ƒNƒ�•¶Žš—񑗐MŽž‚ɓú–{ŒêƒL�[ƒ{�[ƒh�ݒè‚ł̕¶Žš‰»‚¯‰ñ”ð + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _LOWER 1 +#define _RAISE 2 +#define _GAME 3 +#define _ADJUST 4 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + MCR1, + MCR2, + MCR3, + DYNAMIC_MACRO_RANGE, + WN_SCLN, // ƒ^ƒbƒv‚ÅJIS‚́u:�v ƒVƒtƒg‚ÅJIS‚́u;�v (Windows) +}; + +// Use Dynamic macro +#include "dynamic_macro.h" + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO +#define KC_LOWR LT(_LOWER, KC_MHEN) // ƒ^ƒbƒv‚Ŗ³•ϊ· ƒz�[ƒ‹ƒh‚ÅLower +#define KC_RASE LT(_RAISE, KC_HENK) // ƒ^ƒbƒv‚ŕϊ· ƒz�[ƒ‹ƒh‚ÅRaise +#define KC_ALPS LALT(KC_PSCR) // Alt + PrintScreen +#define KC_LSLP MT(MOD_LSFT, JP_LPRN) // ƒ^ƒbƒv‚Å( ƒz�[ƒ‹ƒh‚ō¶Shift +#define KC_RSRP MT(MOD_RSFT, JP_RPRN) // ƒ^ƒbƒv‚Å) ƒz�[ƒ‹ƒh‚ʼnEShift +#define KC_ALTB MT(MOD_LALT, KC_TAB) // ƒ^ƒbƒv‚ÅTAB ƒz�[ƒ‹ƒh‚ō¶ALT +#define KC_ESCA LT(_ADJUST,KC_ESC) // ƒ^ƒbƒv‚ÅESC ƒz�[ƒ‹ƒh‚ÅADJUSTƒŒƒCƒ„�[on + + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* QWERTY + * ,-------------------------------------------------------. ,-------------------------------------------------------. + * |Tab/Alt| Q | W | E | R | T | - | | ~ | Y | U | I | O | P | BSPC | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | Ctrl | A | S | D | F | G | [ | | ] | H | J | K | L | : | ' | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | (/Sft | Z | X | C | V | B | F2 | | Home | N | M | , | . | / | )/Sft | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | TT | GUI | \ | Esc/ | LOWER | Enter | Del | | End | Space | RAISE | Left | Down | Up | Right | + * |(_GAME)| | |_ADJUST| –³•ϊ·| | | | | | •ϊ· | | | | | + * `-------------------------------------------------------' `-------------------------------------------------------' + */ + +[_QWERTY] = KEYMAP( \ + KC_ALTB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, JP_TILD, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, JP_LBRC, JP_RBRC, KC_H, KC_J, KC_K, KC_L, WN_SCLN, JP_QUOT, \ + KC_LSLP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F2, KC_HOME, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSRP, \ + TT(_GAME),KC_LGUI, JP_YEN, KC_ESCA, KC_LOWR, KC_ENT, KC_DEL, KC_END, KC_SPC, KC_RASE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* LOWER + * ,-------------------------------------------------------. ,-------------------------------------------------------. + * |Tab/Alt| 1 | 2 | 3 | 4 | 5 | 6 | | Esc | 7 | 8 | 9 | O | = | BSPC | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | Ctrl | F1 | F2 | F3 | F4 | F5 | F6 | | F2 | 4 | 5 | 6 | - | / | Enter | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | Shift | F7 | F8 | F9 | F10 | F11 | F12 | | Home | 1 | 2 | 3 | + | * | Shift | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * |XXXXXXX| GUI |XXXXXXX| Esc | | Enter | Del | | End | 0 | . | Left | Down | Up | Right | + * `-------------------------------------------------------' `-------------------------------------------------------' + */ + +[_LOWER] = KEYMAP( \ + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_ESC, KC_7, KC_8, KC_9, KC_0, JP_EQL, _______, \ + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F2, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PSLS, KC_ENT, \ + KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PAST, KC_RSFT, \ + _______, _______, XXXXXXX, KC_ESC, _______, _______, _______, _______, KC_P0, KC_PDOT, _______, _______, _______, _______ \ +), + +/* RAISE + * ,-------------------------------------------------------. ,-------------------------------------------------------. + * |Tab/Alt| ! | @ | # | $ | % | _ | | ` | ^ | & | Ins | \ |PrntScr| BSPC | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | Ctrl |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| { | | } | Left | Down | Up | Right | ; | " | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | Shift |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |PageUp |XXXXXXX|XXXXXXX| < | > | ? | Shift | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * |XXXXXXX| GUI | | | Esc |XXXXXXX| Enter | Del | |PageDwn| Space | | Left | Down | Up | Right | + * `-------------------------------------------------------' `-------------------------------------------------------' + */ + +[_RAISE] = KEYMAP( \ + _______, KC_EXLM, JP_AT, KC_HASH, KC_DLR, KC_PERC, JP_UNDS, JP_GRV, JP_CIRC, JP_AMPR, KC_INS, JP_YEN, KC_ALPS, _______, \ + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, JP_LBRC, JP_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_SCLN, JP_DQT, \ + KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, KC_LT, KC_GT, KC_QUES, KC_RSFT, \ + _______, _______, KC_PIPE, KC_ESC, XXXXXXX, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______ \ +), + +/* GAME + * ,-------------------------------------------------------. ,-------------------------------------------------------. + * | Esc | Q | W | E | R | T |PrntScr| | | | | | | | | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | Ctrl | A | S | D | F | G | F5 | | | | | | | | | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | Shift | Z | X | C | V | B | F2 | |PageUp | | | | | | | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | | GUI | Tab | Alt | Space | Enter | Del | |PageDwn| Space |XXXXXXX| Left | Down | Up | Right | + * `-------------------------------------------------------' `-------------------------------------------------------' + */ +[_GAME] = KEYMAP( \ + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ALPS, _______, _______, _______, _______, _______, _______, _______, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, JP_LBRC, _______, _______, _______, _______, _______, _______, _______, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F2, KC_PGUP, _______, _______, _______, _______, _______, _______, \ + _______, KC_LGUI, KC_TAB, KC_LALT, KC_SPC, KC_ENT, KC_DEL, KC_PGDN, _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* ADJUST + * ,-------------------------------------------------------. ,-------------------------------------------------------. + * |RGB_TOG| MCR1 | MCR2 | MCR3 |XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|PLAY_M1|PLAY_M2|REC_M1 |REC_M2 |STP_REC| BSPC | + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | RESET |RGB_MOD|_PLAIN |_BREATH|RGB_HuI|RGB_SaI|RGB_VaI| |XXXXXXX|QWERTY |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | Shift |_RAINBW|_SNAKE |_GRADIE|RGB_HuD|RGB_SaD|RGB_VaD| |XXXXXXX| M-PLAY|M-MUTE |VOL_DWN|VOL_UP |PREV_TR|NEXT_TR| + * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + * | DEBUG |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|XXXXXXX| Left | Down | Up | Right | + * `-------------------------------------------------------' `-------------------------------------------------------' + */ +[_ADJUST] = KEYMAP( \ + RGB_TOG, MCR1, MCR2, MCR3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, DYN_REC_START1, DYN_REC_START2, DYN_REC_STOP, KC_BSPC, \ + RESET, RGB_MOD, RGB_M_P, RGB_M_B, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, QWERTY, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ + KC_LSFT, RGB_M_R, RGB_M_SN,RGB_M_G, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT, \ + DEBUG, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +}; + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + static bool lshift = false; + if (!process_record_dynamic_macro(keycode, record)) { + return false; + } + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_QWERTY); + } + return false; + break; + case WN_SCLN: // ƒRƒ�ƒ“�u;:�v + if (record->event.pressed) { + lshift = keyboard_report->mods & MOD_BIT(KC_LSFT); + if (lshift) { + unregister_code(KC_LSFT); + register_code(JP_SCLN); + unregister_code(JP_SCLN); + } else { + register_code(JP_COLN); + unregister_code(JP_COLN); + } + } + return false; + break; + case MCR1: + if (record->event.pressed) { + SEND_STRING("hogehoge"); // ‘—�M•¶Žš—ñ + } + return false; + break; + case MCR2: + if (record->event.pressed) { + SEND_STRING("hogehogehoge"SS_TAP(X_ENTER)); // ‘—�M•¶Žš—ñ + } + return false; + break; + case MCR3: + if (record->event.pressed) { + SEND_STRING("hoge@hoge.co.jp"); // ‘—�M•¶Žš—ñ + } + return false; + break; + } + return true; +} diff --git a/keyboards/ergo42/keymaps/hdbx/readme.md b/keyboards/ergo42/keymaps/hdbx/readme.md new file mode 100644 index 00000000000..2aeebfe41ca --- /dev/null +++ b/keyboards/ergo42/keymaps/hdbx/readme.md @@ -0,0 +1,71 @@ +# hdbx + +Designed for Japanese Keyboardists using JIS on the Ergo42. + +## Layer + +```` +QWERTY +,-------------------------------------------------------. ,-------------------------------------------------------. +|Tab/Alt| Q | W | E | R | T | - | | ~ | Y | U | I | O | P | BSPC | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| Ctrl | A | S | D | F | G | [ | | ] | H | J | K | L | : | ' | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| (/Sft | Z | X | C | V | B | F2 | | Home | N | M | , | . | / | )/Sft | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| TT | GUI | \ | Esc/ | LOWER | Enter | Del | | End | Space | RAISE | Left | Down | Up | Right | +|(_GAME)| | |_ADJUST| –³•ϊ·| | | | | | •ϊ· | | | | | +`-------------------------------------------------------' `-------------------------------------------------------' + */ + +LOWER +,-------------------------------------------------------. ,-------------------------------------------------------. +|Tab/Alt| 1 | 2 | 3 | 4 | 5 | 6 | | Esc | 7 | 8 | 9 | O | = | BSPC | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| Ctrl | F1 | F2 | F3 | F4 | F5 | F6 | | F2 | 4 | 5 | 6 | - | / | Enter | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| Shift | F7 | F8 | F9 | F10 | F11 | F12 | | Home | 1 | 2 | 3 | + | * | Shift | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +|XXXXXXX| GUI |XXXXXXX| Esc | | Enter | Del | | End | 0 | . | Left | Down | Up | Right | +`-------------------------------------------------------' `-------------------------------------------------------' + */ + +RAISE +,-------------------------------------------------------. ,-------------------------------------------------------. +|Tab/Alt| ! | @ | # | $ | % | _ | | ` | ^ | & | Ins | \ |PrntScr| BSPC | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| Ctrl |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| { | | } | Left | Down | Up | Right | ; | " | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| Shift |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |PageUp |XXXXXXX|XXXXXXX| < | > | ? | Shift | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +|XXXXXXX| GUI | | | Esc |XXXXXXX| Enter | Del | |PageDwn| Space | | Left | Down | Up | Right | +`-------------------------------------------------------' `-------------------------------------------------------' + */ + +GAME +,-------------------------------------------------------. ,-------------------------------------------------------. +| Esc | Q | W | E | R | T |PrntScr| | | | | | | | | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| Ctrl | A | S | D | F | G | F5 | | | | | | | | | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| Shift | Z | X | C | V | B | F2 | |PageUp | | | | | | | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| | GUI | Tab | Alt | Space | Enter | Del | |PageDwn| Space |XXXXXXX| Left | Down | Up | Right | +`-------------------------------------------------------' `-------------------------------------------------------' + */ + +ADJUST +,-------------------------------------------------------. ,-------------------------------------------------------. +|RGB_TOG| MCR1 | MCR2 | MCR3 |XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|PLAY_M1|PLAY_M2|REC_M1 |REC_M2 |STP_REC| BSPC | +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| RESET |RGB_MOD|_PLAIN |_BREATH|RGB_HuI|RGB_SaI|RGB_VaI| |XXXXXXX|QWERTY |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| Shift |_RAINBW|_SNAKE |_GRADIE|RGB_HuD|RGB_SaD|RGB_VaD| |XXXXXXX| M-PLAY|M-MUTE |VOL_DWN|VOL_UP |PREV_TR|NEXT_TR| +|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| +| DEBUG |XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|XXXXXXX| |XXXXXXX|XXXXXXX|XXXXXXX| Left | Down | Up | Right | +`-------------------------------------------------------' `-------------------------------------------------------' +```` + +## Notes + +Supports RGB Underglow and Dynamic Macros. diff --git a/keyboards/ergo42/keymaps/hdbx/rules.mk b/keyboards/ergo42/keymaps/hdbx/rules.mk new file mode 100644 index 00000000000..1e576127880 --- /dev/null +++ b/keyboards/ergo42/keymaps/hdbx/rules.mk @@ -0,0 +1,5 @@ +RGBLIGHT_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif From e6be4484e9afe190246d17dd2f2dc3d688ac709f Mon Sep 17 00:00:00 2001 From: Daniel Gordon Date: Fri, 4 May 2018 12:39:57 -0500 Subject: [PATCH 24/34] Update to tap dance docs (#2895) * Added more comments * Documentation for 'quad function' tap dance now suggests to use the user's directory, and explains how to do so. --- docs/feature_tap_dance.md | 122 ++++++++++++++++++++++++++++++++------ 1 file changed, 104 insertions(+), 18 deletions(-) diff --git a/docs/feature_tap_dance.md b/docs/feature_tap_dance.md index 0521826b25f..141c3108d06 100644 --- a/docs/feature_tap_dance.md +++ b/docs/feature_tap_dance.md @@ -179,42 +179,124 @@ Below is a specific example: * Double Tap = Send `Escape` * Double Tap and Hold = Send `Alt` -The following example can be easily expanded to more than 4 quite easily: +## Setup + +You will need a few things that can be used for 'Quad Function Tap-Dance'. The suggested setup is to create a user directory for yourself. This directory will contain rules.mk `.c` and `.h`. This directory should be called ``, and located in the top level `users` directory. There should already be a few examples to look at there. + +### In `/qmk_firmware/users//rules.mk` + +Put the following: ```c -//**************** Definitions needed for quad function to work *********************// -//Enums used to clearly convey the state of the tap dance +TAP_DANCE_ENABLE = yes +SRC += your_name.c +``` + +Pretty simple. It is a nice way to keep some rules common on all your keymaps. + + +### In `/qmk_firmware/users//.h` + +You will need a few things in this file: + +```c +#ifndef YOUR_NAME +#define YOUR_NAME + +#include "quantum.h" +#include "process_keycode/process_tap_dance.h" + + +typedef struct { + bool is_press_action; + int state; +} xtap; + enum { SINGLE_TAP = 1, SINGLE_HOLD = 2, DOUBLE_TAP = 3, DOUBLE_HOLD = 4, - DOUBLE_SINGLE_TAP = 5 //send SINGLE_TAP twice - NOT DOUBLE_TAP - // Add more enums here if you want for triple, quadruple, etc. + DOUBLE_SINGLE_TAP = 5, //send two single taps + TRIPLE_TAP = 6, + TRIPLE_HOLD = 7 }; -typedef struct { - bool is_press_action; - int state; -} tap; +//Tap dance enums +enum { + CTL_X = 0, + SOME_OTHER_DANCE +} +int cur_dance (qk_tap_dance_state_t *state); + +//for the x tap dance. Put it here so it can be used in any keymap +void x_finished (qk_tap_dance_state_t *state, void *user_data); +void x_reset (qk_tap_dance_state_t *state, void *user_data); +``` + +### In `/qmk_firmware/users//.c` + +And then in your user's `.c` file you implement the functions above: + +```c +#include "gordon.h" +#include "quantum.h" +#include "action.h" +#include "process_keycode/process_tap_dance.h" + +/* Return an integer that corresponds to what kind of tap dance should be executed. + * + * How to figure out tap dance state: interrupted and pressed. + * + * Interrupted: If the state of a dance dance is "interrupted", that means that another key has been hit + * under the tapping term. This is typically indicitive that you are trying to "tap" the key. + * + * Pressed: Whether or not the key is still being pressed. If this value is true, that means the tapping term + * has ended, but the key is still being pressed down. This generally means the key is being "held". + * + * One thing that is currenlty not possible with qmk software in regards to tap dance is to mimic the "permissive hold" + * feature. In general, advanced tap dances do not work well if they are used with commonly typed letters. + * For example "A". Tap dances are best used on non-letter keys that are not hit while typing letters. + * + * Good places to put an advanced tap dance: + * z,q,x,j,k,v,b, any function key, home/end, comma, semi-colon + * + * Criteria for "good placement" of a tap dance key: + * Not a key that is hit frequently in a sentence + * Not a key that is used frequently to double tap, for example 'tab' is often double tapped in a terminal, or + * in a web form. So 'tab' would be a poor choice for a tap dance. + * Letters used in common words as a double. For example 'p' in 'pepper'. If a tap dance function existed on the + * letter 'p', the word 'pepper' would be quite frustating to type. + * + * For the third point, there does exist the 'DOUBLE_SINGLE_TAP', however this is not fully tested + * + */ int cur_dance (qk_tap_dance_state_t *state) { if (state->count == 1) { - //If count = 1, and it has been interrupted - it doesn't matter if it is pressed or not: Send SINGLE_TAP - if (state->interrupted || state->pressed==0) return SINGLE_TAP; + if (state->interrupted || !state->pressed) return SINGLE_TAP; + //key has not been interrupted, but they key is still held. Means you want to send a 'HOLD'. else return SINGLE_HOLD; } - //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated - //with single tap. In example below, that means to send `xx` instead of `Escape`. else if (state->count == 2) { + /* + * DOUBLE_SINGLE_TAP is to distinguish between typing "pepper", and actually wanting a double tap + * action when hitting 'pp'. Suggested use case for this return value is when you want to send two + * keystrokes of the key, and not the 'double tap' action/macro. + */ if (state->interrupted) return DOUBLE_SINGLE_TAP; else if (state->pressed) return DOUBLE_HOLD; else return DOUBLE_TAP; } - else return 6; //magic number. At some point this method will expand to work for more presses + //Assumes no one is trying to type the same letter three times (at least not quickly). + //If your tap dance key is 'KC_W', and you want to type "www." quickly - then you will need to add + //an exception here to return a 'TRIPLE_SINGLE_TAP', and define that enum just like 'DOUBLE_SINGLE_TAP' + if (state->count == 3) { + if (state->interrupted || !state->pressed) return TRIPLE_TAP; + else return TRIPLE_HOLD; + } + else return 8; //magic number. At some point this method will expand to work for more presses } -//**************** Definitions needed for quad function to work *********************// - //instanalize an instance of 'tap' for the 'x' tap dance. static tap xtap_state = { .is_press_action = true, @@ -245,6 +327,10 @@ void x_reset (qk_tap_dance_state_t *state, void *user_data) { } xtap_state.state = 0; } + +qk_tap_dance_action_t tap_dance_actions[] = { + [X_CTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,x_finished, x_reset) +}; ``` -And then simply add this to your list of tap dance functions: -`[X_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, x_finished, x_reset)` + +And then simply use TD(X_CTL) anywhere in your keymap. From 72ea1fd972540a6c5013b9e23d37829105b44b33 Mon Sep 17 00:00:00 2001 From: zwnk Date: Fri, 4 May 2018 14:40:40 -0300 Subject: [PATCH 25/34] layer double tapping fixed (#2885) * impstyle keymap added * impstyle keymap updated * mouse layer added to impstyle keymap * keymap updated * fixes * impsytle layout: mouse layer added * comments added * comments added * bugfix * typo fixed * double tap fixed * double tap fixed * still testing double tab * double tab mouse layer is working * README added * README updated --- keyboards/iris/keymaps/impstyle/README.md | 12 ++++++++++++ keyboards/iris/keymaps/impstyle/config.h | 2 ++ keyboards/iris/keymaps/impstyle/keymap.c | 16 +++++++++++++--- 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 keyboards/iris/keymaps/impstyle/README.md diff --git a/keyboards/iris/keymaps/impstyle/README.md b/keyboards/iris/keymaps/impstyle/README.md new file mode 100644 index 00000000000..b341f2d8681 --- /dev/null +++ b/keyboards/iris/keymaps/impstyle/README.md @@ -0,0 +1,12 @@ +## impstyle keymap + +the keymap is based on lewisriddens keymap but i changed some stuff. + +i removed: +>RGB backgoundlighting layer and functionallity + +i added: +>mouse layer + +the qwerty, lower and raise layer are more or less the same. here and there some keys are different. +take a look at the keymap.c \ No newline at end of file diff --git a/keyboards/iris/keymaps/impstyle/config.h b/keyboards/iris/keymaps/impstyle/config.h index 0e01f5d562f..6fc14133f8d 100644 --- a/keyboards/iris/keymaps/impstyle/config.h +++ b/keyboards/iris/keymaps/impstyle/config.h @@ -37,6 +37,8 @@ along with this program. If not, see . #define MOUSEKEY_WHEEL_MAX_SPEED 8 #define MOUSEKEY_WHEEL_TIME_TO_MAX 40 +#define TAPPING_TOGGLE 2 // double tab + #include "../../config.h" #endif diff --git a/keyboards/iris/keymaps/impstyle/keymap.c b/keyboards/iris/keymaps/impstyle/keymap.c index be5ee8c758c..d061a850a1d 100644 --- a/keyboards/iris/keymaps/impstyle/keymap.c +++ b/keyboards/iris/keymaps/impstyle/keymap.c @@ -9,7 +9,6 @@ extern keymap_config_t keymap_config; #define _LOWER 1 #define _RAISE 2 #define _MOUSE 3 -#define TAPPING_TOGGLE 2 // double tab enum custom_keycodes { QWERTY = SAFE_RANGE, @@ -89,9 +88,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______,_______,_______,_______,_______,_______,_______, KC_PLUS,_______,_______,_______,_______,_______,KC_VOLD, _______ ,_______,_______, KC_EQL,_______,_______ ), - + // MOUSE LAYER + //,----+----+----+----+----+----. ,----+----+----+----+----+----. + // , , , , , , , , , , , , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + // , ,MS_UP, , , , MS_WH_UP, , , , , , + //|----+----+----+----+----+----| |----+----+----+----+----+----| + // ,MS_LEFT,MS_DOWN,MS_RGHT, ,, MS_WH_DN,MS_BT1,MS_BT2,MS_BT3, , , + //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| + // , , , , , , , , , , ,MS_ACC0,MS_ACC1MS_ACC2 + //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' + // , , , , , + // `----+----+----' `----+----+----' [_MOUSE] = LAYOUT( - KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 , + _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,_______ ,_______ , _______ ,_______, KC_MS_UP ,_______,_______,_______, KC_MS_WH_UP,_______,_______,_______ ,_______,_______, _______ ,KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT,_______,_______, KC_MS_WH_DOWN,KC_MS_BTN1,KC_MS_BTN2,KC_MS_BTN3,_______,_______, _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2, From 1ef819ba96b64cf569e893791f16a377dfb86888 Mon Sep 17 00:00:00 2001 From: Oscillope Date: Fri, 4 May 2018 14:10:24 -0400 Subject: [PATCH 26/34] Add "oscillope" layout for the Orthodox (#2893) * Initial layout for the Orthodox * Added handy programming macros * Swapped raise/lower and os/alt to make it easier to reach the more used keys. --- keyboards/orthodox/keymaps/oscillope/config.h | 41 +++++++ keyboards/orthodox/keymaps/oscillope/keymap.c | 101 ++++++++++++++++++ keyboards/orthodox/keymaps/oscillope/rules.mk | 3 + 3 files changed, 145 insertions(+) create mode 100644 keyboards/orthodox/keymaps/oscillope/config.h create mode 100644 keyboards/orthodox/keymaps/oscillope/keymap.c create mode 100644 keyboards/orthodox/keymaps/oscillope/rules.mk diff --git a/keyboards/orthodox/keymaps/oscillope/config.h b/keyboards/orthodox/keymaps/oscillope/config.h new file mode 100644 index 00000000000..3b1fd500078 --- /dev/null +++ b/keyboards/orthodox/keymaps/oscillope/config.h @@ -0,0 +1,41 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert +Copyright 2017 Art Ortenburger + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "config_common.h" + +/* Use I2C or Serial, not both */ + +// #define USE_SERIAL +#define USE_I2C + +/* Select hand configuration */ + +// #define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + +#define TAPPING_TERM 200 +#define TAPPING_TOGGLE 3 + +#endif diff --git a/keyboards/orthodox/keymaps/oscillope/keymap.c b/keyboards/orthodox/keymaps/oscillope/keymap.c new file mode 100644 index 00000000000..28fea02c4d4 --- /dev/null +++ b/keyboards/orthodox/keymaps/oscillope/keymap.c @@ -0,0 +1,101 @@ +/* +This is the keymap for the keyboard + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert +Copyright 2017 Art Ortenburger + +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 "orthodox.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _QWERTY 0 +#define _LOWER 1 +#define _RAISE 2 +#define _NAV 3 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + NAV, + CC_ARRW, + CC_PRN, + CC_BRC, + CC_CBR, +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +#define NAV_TAP LT(_NAV, KC_SPC) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_QWERTY] = KEYMAP( \ + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, \ + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, TT(_RAISE), TT(_LOWER), TT(_LOWER), TT(_RAISE), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \ + KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSPC, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, NAV_TAP, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT \ + ), + + [_LOWER] = KEYMAP( \ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ + KC_INS, _______, _______, CC_PRN, CC_BRC, CC_CBR, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, \ + RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU \ + ), + + [_RAISE] = KEYMAP( \ + KC_CAPS, KC_AMPR, KC_ASTR, KC_UNDS, KC_LPRN, KC_RPRN, KC_7, KC_8, KC_9, KC_EQL, _______, _______, \ + _______, KC_DLR, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, _______, _______, _______, _______, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, _______, \ + CC_ARRW, KC_EXLM, KC_AT, KC_HASH, KC_LCBR, KC_RCBR, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_DOT, KC_BSLS, KC_PIPE \ + ), + + [_NAV] = KEYMAP( \ + _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______, \ + _______, _______, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ) + + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch(keycode) { + case CC_ARRW: + SEND_STRING("->"); + return false; + case CC_PRN: + SEND_STRING("()"SS_TAP(X_LEFT)); + return false; + case CC_BRC: + SEND_STRING("[]"SS_TAP(X_LEFT)); + return false; + case CC_CBR: + SEND_STRING("{}"SS_TAP(X_LEFT)); + return false; + } + } + return true; +} diff --git a/keyboards/orthodox/keymaps/oscillope/rules.mk b/keyboards/orthodox/keymaps/oscillope/rules.mk new file mode 100644 index 00000000000..fb77881d96d --- /dev/null +++ b/keyboards/orthodox/keymaps/oscillope/rules.mk @@ -0,0 +1,3 @@ +SUBPROJECT_rev1 = no +COMMAND_ENABLE = no +MOUSEKEY_ENABLE = no From 2e88f7767569d83117ca2448b370bb3f7f50cafe Mon Sep 17 00:00:00 2001 From: Xerpocalypse <31947786+Xerpocalypse@users.noreply.github.com> Date: Fri, 4 May 2018 18:25:12 -0700 Subject: [PATCH 27/34] Feature/ca66 json (#2897) * Made an appropriate KLE and converted it. For use with the CA66 on qmk.fm * Changed KEYMAP to LAYOUT to match new info.json * Changed #include and LAYOUT for new info.json --- keyboards/ca66/ca66.h | 2 +- keyboards/ca66/info.json | 12 ++++++++++++ keyboards/ca66/keymaps/default/keymap.c | 6 +++--- 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 keyboards/ca66/info.json diff --git a/keyboards/ca66/ca66.h b/keyboards/ca66/ca66.h index 9e3638aac31..0f91a1238df 100644 --- a/keyboards/ca66/ca66.h +++ b/keyboards/ca66/ca66.h @@ -3,7 +3,7 @@ #include "quantum.h" -#define KEYMAP( \ +#define LAYOUT( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K114, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K214, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K314, \ diff --git a/keyboards/ca66/info.json b/keyboards/ca66/info.json new file mode 100644 index 00000000000..906709ef1b8 --- /dev/null +++ b/keyboards/ca66/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "CA66", + "url": "", + "maintainer": "qmk", + "width": 16.5, + "height": 5.25, + "layouts": { + "LAYOUT": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.5, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15.5, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":15.5, "y":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":15.5, "y":3}, {"x":14.25, "y":3.25}, {"x":0, "y":4, "w":1.25}, {"x":2.25, "y":4}, {"x":3.25, "y":4, "w":1.25}, {"x":4.5, "y":4, "w":2.25}, {"x":6.75, "y":4, "w":2.75}, {"x":9.5, "y":4, "w":1.25}, {"x":10.75, "y":4}, {"x":11.75, "y":4, "w":1.25}, {"x":13.25, "y":4.25}, {"x":14.25, "y":4.25}, {"x":15.25, "y":4.25}] + } + } +} diff --git a/keyboards/ca66/keymaps/default/keymap.c b/keyboards/ca66/keymaps/default/keymap.c index 7feb0afb9f5..5a3c4c86231 100644 --- a/keyboards/ca66/keymaps/default/keymap.c +++ b/keyboards/ca66/keymaps/default/keymap.c @@ -1,15 +1,15 @@ -#include "ca66.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( + LAYOUT( KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_PSCR, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, KC_LSFT, KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - KEYMAP( + LAYOUT( 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_DEL, RGB_TOG, KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, RGB_MOD, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI, KC_INS, KC_HOME, From 5170398479c9e9ed36ff2966083c50e4808725be Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Fri, 4 May 2018 18:30:56 -0700 Subject: [PATCH 28/34] QMK Configurator support for Sentraq S60-x (#2889) * change to QMK_KEYBOARD_H * add info.json for QMK Configurator Support --- keyboards/s60_x/default/default.h | 4 ++-- keyboards/s60_x/default/info.json | 12 ++++++++++++ keyboards/s60_x/keymaps/amnesia0287/keymap.c | 10 +++++----- keyboards/s60_x/keymaps/ansi_qwertz/keymap.c | 8 ++++---- keyboards/s60_x/keymaps/bluebear/keymap.c | 14 +++++++------- keyboards/s60_x/keymaps/custom/keymap.c | 2 +- keyboards/s60_x/keymaps/dbroqua/keymap.c | 8 ++++---- keyboards/s60_x/keymaps/default/keymap.c | 2 +- keyboards/s60_x/keymaps/default_rgb/keymap.c | 6 +++--- keyboards/s60_x/keymaps/hasu/keymap.c | 2 +- keyboards/s60_x/keymaps/hhkb/keymap.c | 2 +- keyboards/s60_x/keymaps/iso/keymap.c | 2 +- keyboards/s60_x/keymaps/iso_rgb/keymap.c | 6 +++--- keyboards/s60_x/keymaps/jpec/keymap.c | 2 +- keyboards/s60_x/keymaps/plain/keymap.c | 2 +- keyboards/s60_x/keymaps/poker/keymap.c | 2 +- keyboards/s60_x/keymaps/poker_bit/keymap.c | 2 +- keyboards/s60_x/keymaps/poker_set/keymap.c | 2 +- keyboards/s60_x/keymaps/spacefn/keymap.c | 2 +- keyboards/s60_x/rgb/info.json | 12 ++++++++++++ keyboards/s60_x/rgb/rgb.h | 4 ++-- 21 files changed, 65 insertions(+), 41 deletions(-) create mode 100644 keyboards/s60_x/default/info.json create mode 100644 keyboards/s60_x/rgb/info.json diff --git a/keyboards/s60_x/default/default.h b/keyboards/s60_x/default/default.h index 027bf39f04e..f0797835e27 100644 --- a/keyboards/s60_x/default/default.h +++ b/keyboards/s60_x/default/default.h @@ -39,13 +39,13 @@ along with this program. If not, see . K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ 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, K3E, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \ K40, K41, K42, K46, K4A, K4B, K4C, K4D \ ) { \ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \ - { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E }, \ { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, KC_NO } \ } diff --git a/keyboards/s60_x/default/info.json b/keyboards/s60_x/default/info.json new file mode 100644 index 00000000000..d4473a515f6 --- /dev/null +++ b/keyboards/s60_x/default/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "S60-X", + "url": "", + "maintainer": "qmk", + "width": 15, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] + } + } +} diff --git a/keyboards/s60_x/keymaps/amnesia0287/keymap.c b/keyboards/s60_x/keymaps/amnesia0287/keymap.c index 8cbbb7bf94b..c17c9e74492 100644 --- a/keyboards/s60_x/keymaps/amnesia0287/keymap.c +++ b/keyboards/s60_x/keymaps/amnesia0287/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. @@ -21,28 +21,28 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_NO, KC_BSPC, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ 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_NO, KC_ENT , \ - KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, FN_HLb, \ + KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, FN_HLb, \ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_NO, KC_RALT, FN_HLa, KC_RCTL ), [_HLa] = LAYOUT( 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_TRNS, KC_DEL, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), [_HLb] = LAYOUT( 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_TRNS, KC_DEL, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), [_HL] = LAYOUT( RGB_TOG, RGB_M_P, RGB_RMOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, BL_BRTG, BL_OFF, BL_STEP, BL_ON, BL_DEC, BL_INC, KC_TRNS, LALT(KC_F4), RESET, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), }; diff --git a/keyboards/s60_x/keymaps/ansi_qwertz/keymap.c b/keyboards/s60_x/keymaps/ansi_qwertz/keymap.c index c8ad8ae3344..e4660e66887 100644 --- a/keyboards/s60_x/keymaps/ansi_qwertz/keymap.c +++ b/keyboards/s60_x/keymaps/ansi_qwertz/keymap.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "s60_x.h" +#include QMK_KEYBOARD_H //make keymap a little easier to read #define _______ KC_TRNS @@ -104,7 +104,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \ - KC_LSFT, KC_NUBS, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_RSFT, \ + KC_LSFT, KC_NUBS, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT, \ KC_FUNC, KC_LGUI, KC_LALT, KC_SPACEFN, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT ), @@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GMLK, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GMLK, \ _______, KC_RSFT, _______, KC_SPC, _______, _______, _______, _______ ), @@ -147,7 +147,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_INS, RESET, \ _______, _______, KC_CM_W, KC_CM_E, KC_MPRV, KC_MPLY, KC_MNXT, KC_CM_U, KC_CM_I, KC_CM_O, KC_CM_P, KC_PSCR, KC_SLCK, KC_PAUS, \ _______, KC_CM_A, KC_CM_S, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, KC_CM_K, KC_CM_L, _______, _______, _______, KC_PENT, \ - _______, _______, KC_CM_Y, _______, KC_CM_C, MICMUTE, KC_CALC, KC_CM_N, KC_CM_M, _______, _______, _______, _______, KC_PGUP, KC_GMLK, \ + _______, _______, KC_CM_Y, _______, KC_CM_C, MICMUTE, KC_CALC, KC_CM_N, KC_CM_M, _______, _______, _______, KC_PGUP, KC_GMLK, \ _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END ), }; diff --git a/keyboards/s60_x/keymaps/bluebear/keymap.c b/keyboards/s60_x/keymaps/bluebear/keymap.c index ebb5382c9a4..2ba29b09eee 100644 --- a/keyboards/s60_x/keymaps/bluebear/keymap.c +++ b/keyboards/s60_x/keymaps/bluebear/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H // Keyboard Layers @@ -176,7 +176,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, \ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC, \ CTL_T(KC_ESC), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_NO, MT(MOD_RCTL, KC_ENT), \ - KC_LSPO, KC_NO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_NO, KC_RSPC, KC_NO, \ + KC_LSPO, KC_NO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSPC, KC_NO, \ MO(2), KC_LGUI, KC_LALT, LT(1, KC_SPACE), ALGR_T(KC_APP), KC_RGUI, OSM(MOD_LCTL | MOD_LSFT), OSM(MOD_LCTL | MOD_LALT) ), @@ -198,7 +198,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [ARROWFN] = LAYOUT( KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, TO(3), TO(5), \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_NO, KC_NO, KC_NO, KC_INS, KC_DEL, \ - KC_CAPS, KC_HOME, KC_NO, KC_END, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_TRNS, \ + KC_CAPS, KC_HOME, KC_NO, KC_END, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_TRNS, \ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SPACE, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_TRNS, KC_NO, \ KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), @@ -223,7 +223,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { RESET, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, KC_NO, KC_NO, \ DEBUG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_MS_UP, KC_BTN2, KC_WH_U, KC_NO, KC_NO, KC_NO, \ TFS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_WH_D, KC_BTN3, KC_NO, KC_TRNS, \ - MAGSYS, 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_TRNS, KC_NO, \ + MAGSYS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_POWER, KC_TRNS, KC_TRNS, KC_NO, KC_NO ), @@ -246,7 +246,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TO(0), MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Gb, MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, KC_NO, TO(4), \ MI_OCTU, KC_NO, MI_Cs, MI_Ds, KC_NO, MI_Fs, MI_Gs, MI_As, KC_NO, MI_Cs_1, MI_Ds_1, KC_NO, KC_NO, KC_NO, \ MI_OCTD, MI_C, MI_D, MI_E, MI_F, MI_G, MI_A, MI_B, MI_C_1, MI_D_1, MI_E_1, MI_F_1, KC_NO, KC_NO, \ - MI_CH_Cm, KC_NO, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Gbm, MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, KC_NO, MI_CH_Fm, KC_NO, \ + MI_CH_Cm, KC_NO, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Gbm, MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, KC_NO, \ KC_NO, KC_NO, KC_NO, MI_ALLOFF, KC_NO, KC_NO, KC_NO, KC_NO ), @@ -269,7 +269,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TO(0), MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Gb, MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, TO(3), KC_NO, \ MI_OCTU, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Gbm, MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, KC_NO, \ MI_OCTD, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_GbDom7, MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, KC_NO, MI_CH_FDom7, \ - MI_CH_CDim7, KC_NO, MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_GbDim7, MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, KC_NO, MI_CH_FDim7, KC_NO, \ + MI_CH_CDim7, KC_NO, MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_GbDim7, MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, MI_CH_FDim7, KC_NO, \ KC_NO, KC_NO, KC_NO, MI_ALLOFF, KC_NO, KC_NO, KC_NO, KC_NO ), @@ -292,7 +292,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TO(0), MC_1, MC_2, MC_3, MC_4, MC_5, MC_6, MC_7, MC_8, MC_9, MC_0, KC_NO, KC_NO, KC_NO, KC_NO, \ KC_TAB, MC_APOS, MC_COMM, MC_DOT, MC_P, MC_Y, MC_F, MC_G, MC_C, MC_R, MC_L, MC_SLSH, MC_EQL, KC_BSPC, \ KC_NO, MC_A, MC_O, MC_E, MC_U, MC_I, MC_D, MC_H, MC_T, MC_N, MC_S, MC_MINS, KC_NO, KC_ENT, \ - MC_LSFT, KC_NO, MC_SCLN, MC_Q, MC_J, MC_K, MC_X, MC_B, MC_M, MC_W, MC_V, MC_Z, KC_NO, MC_RSFT, KC_NO, \ + MC_LSFT, KC_NO, MC_SCLN, MC_Q, MC_J, MC_K, MC_X, MC_B, MC_M, MC_W, MC_V, MC_Z, MC_RSFT, KC_NO, \ KC_NO, KC_NO, KC_NO, MC_SPACE, KC_NO, KC_NO, KC_NO, KC_NO ), diff --git a/keyboards/s60_x/keymaps/custom/keymap.c b/keyboards/s60_x/keymaps/custom/keymap.c index bb32837cf8b..1130a04f24e 100644 --- a/keyboards/s60_x/keymaps/custom/keymap.c +++ b/keyboards/s60_x/keymaps/custom/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H /* Main layer: Test layout, using all keys. diff --git a/keyboards/s60_x/keymaps/dbroqua/keymap.c b/keyboards/s60_x/keymaps/dbroqua/keymap.c index 6f9d33aae92..71cf93f0048 100644 --- a/keyboards/s60_x/keymaps/dbroqua/keymap.c +++ b/keyboards/s60_x/keymaps/dbroqua/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H #define _DEFAULT 0 #define _FN 1 @@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, ______, KC_ENT, \ - KC_LSFT, ______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, ______, KC_RSFT, MO(_FN), \ + KC_LSFT, ______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN), \ ______, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, ______, ______ \ ), @@ -46,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TG(_SFX),KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \ KC_CAPS, ______, ______, ______, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, ______, \ ______, KC_VOLD, KC_VOLU, KC_MUTE, ______, ______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT,______, ______, \ - ______, ______, KC_MPRV, KC_MPLY, KC_MNXT,______, ______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN,______, ______, ______, \ + ______, ______, KC_MPRV, KC_MPLY, KC_MNXT,______, ______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ______, ______, \ ______, ______, ______, ______, KC_MSTP, ______, ______, ______ \ ), @@ -68,7 +68,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ ______, BL_TOGG,BL_STEP,BL_DEC, BL_INC, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ ______, F(0), F(1), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \ - ______, ______, F(2), F(3), F(4), F(5), F(6), F(7), ______, ______, ______, ______, ______, ______, ______, \ + ______, ______, F(2), F(3), F(4), F(5), F(6), F(7), ______, ______, ______, ______, ______, ______, \ ______, ______, ______, ______, ______, ______, ______, ______ \ ) }; diff --git a/keyboards/s60_x/keymaps/default/keymap.c b/keyboards/s60_x/keymaps/default/keymap.c index 47ea2a4c183..8fbe0044e9b 100644 --- a/keyboards/s60_x/keymaps/default/keymap.c +++ b/keyboards/s60_x/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H /* 0: Main layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ diff --git a/keyboards/s60_x/keymaps/default_rgb/keymap.c b/keyboards/s60_x/keymaps/default_rgb/keymap.c index 7eefd7d7cd7..288104282e0 100644 --- a/keyboards/s60_x/keymaps/default_rgb/keymap.c +++ b/keyboards/s60_x/keymaps/default_rgb/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H /* 0: Main layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ @@ -19,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LAYOUT(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_NO, KC_BSPC, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT , \ - KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO, \ + KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, \ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_FN0, KC_APP, KC_RCTL), /* 1: Fn layer @@ -41,7 +41,7 @@ BL = Backlighting = In-Switch LED 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_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), }; diff --git a/keyboards/s60_x/keymaps/hasu/keymap.c b/keyboards/s60_x/keymaps/hasu/keymap.c index 6afdf5fd4ae..624de48cca3 100644 --- a/keyboards/s60_x/keymaps/hasu/keymap.c +++ b/keyboards/s60_x/keymaps/hasu/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H /* * Hasu diff --git a/keyboards/s60_x/keymaps/hhkb/keymap.c b/keyboards/s60_x/keymaps/hhkb/keymap.c index 4807324d151..60225db068a 100644 --- a/keyboards/s60_x/keymaps/hhkb/keymap.c +++ b/keyboards/s60_x/keymaps/hhkb/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H /* * HHKB Layout diff --git a/keyboards/s60_x/keymaps/iso/keymap.c b/keyboards/s60_x/keymaps/iso/keymap.c index 5b34ded70ef..46e5a450d54 100644 --- a/keyboards/s60_x/keymaps/iso/keymap.c +++ b/keyboards/s60_x/keymaps/iso/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H /* 0: Main layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ diff --git a/keyboards/s60_x/keymaps/iso_rgb/keymap.c b/keyboards/s60_x/keymaps/iso_rgb/keymap.c index 00b197c9e7e..d76055a82e7 100644 --- a/keyboards/s60_x/keymaps/iso_rgb/keymap.c +++ b/keyboards/s60_x/keymaps/iso_rgb/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H /* 0: Main layer ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ @@ -19,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LAYOUT(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_NO, KC_BSPC, \ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NO, \ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT , \ - KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO, \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, \ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_FN0, KC_APP, KC_RCTL), /* 1: Fn layer @@ -41,7 +41,7 @@ BL = Backlighting = In-Switch LED 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_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), }; diff --git a/keyboards/s60_x/keymaps/jpec/keymap.c b/keyboards/s60_x/keymaps/jpec/keymap.c index 85ad20e4e12..2bee19d1581 100644 --- a/keyboards/s60_x/keymaps/jpec/keymap.c +++ b/keyboards/s60_x/keymaps/jpec/keymap.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "s60_x.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Layout 0: Default Layer diff --git a/keyboards/s60_x/keymaps/plain/keymap.c b/keyboards/s60_x/keymaps/plain/keymap.c index f5d075f2434..7ca1fe60f29 100644 --- a/keyboards/s60_x/keymaps/plain/keymap.c +++ b/keyboards/s60_x/keymaps/plain/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H /* Main layer: ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ diff --git a/keyboards/s60_x/keymaps/poker/keymap.c b/keyboards/s60_x/keymaps/poker/keymap.c index 4c13f269bda..3044d621b9a 100644 --- a/keyboards/s60_x/keymaps/poker/keymap.c +++ b/keyboards/s60_x/keymaps/poker/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: qwerty diff --git a/keyboards/s60_x/keymaps/poker_bit/keymap.c b/keyboards/s60_x/keymaps/poker_bit/keymap.c index de3f597bae5..9aa4831cce5 100644 --- a/keyboards/s60_x/keymaps/poker_bit/keymap.c +++ b/keyboards/s60_x/keymaps/poker_bit/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H // Poker fix with toggle and bit operation // Fn + Esc = ` diff --git a/keyboards/s60_x/keymaps/poker_set/keymap.c b/keyboards/s60_x/keymaps/poker_set/keymap.c index e6c0f90b4e5..dbd361511fc 100644 --- a/keyboards/s60_x/keymaps/poker_set/keymap.c +++ b/keyboards/s60_x/keymaps/poker_set/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H // Poker fix with set(state transition) // Fn + Esc = ` diff --git a/keyboards/s60_x/keymaps/spacefn/keymap.c b/keyboards/s60_x/keymaps/spacefn/keymap.c index 3d65bf1faad..4031417d9e3 100644 --- a/keyboards/s60_x/keymaps/spacefn/keymap.c +++ b/keyboards/s60_x/keymaps/spacefn/keymap.c @@ -1,4 +1,4 @@ -#include "s60_x.h" +#include QMK_KEYBOARD_H /* * SpaceFN diff --git a/keyboards/s60_x/rgb/info.json b/keyboards/s60_x/rgb/info.json new file mode 100644 index 00000000000..b9f268cbf6a --- /dev/null +++ b/keyboards/s60_x/rgb/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "S60-X RGB", + "url": "", + "maintainer": "qmk", + "width": 15, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}] + } + } +} diff --git a/keyboards/s60_x/rgb/rgb.h b/keyboards/s60_x/rgb/rgb.h index f3318d91ed0..bded16ff640 100644 --- a/keyboards/s60_x/rgb/rgb.h +++ b/keyboards/s60_x/rgb/rgb.h @@ -7,13 +7,13 @@ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ - K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \ K400, K401, K402, K406, K410, K411, K412, K413 \ ) { \ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, KC_NO }, \ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ - { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \ { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, KC_NO } \ } From 50b5c6ad72682776705b0faf5b8ef87deec5cd6a Mon Sep 17 00:00:00 2001 From: sdothum Date: Fri, 4 May 2018 21:36:23 -0400 Subject: [PATCH 29/34] update with qmk master (#2887) * add splitography * trim keymap.c * add Makefile * rename Makefile to rules.mk * thumb key definition * thumb key definition * thumb key definition * blue/orange layer swap, double qwerty steno exit * fix TxBolt 1-3 key chord suppression (PREVENT_STUCK_MODIFIERS) * add audio control * beakl 8+10, dvorak (standard and splitography wide variant) * beakl 8+10, dvorak (standard and splitography wide variant) * shift layer home blocks * regex layer key changes * tilde align symbol navigation and regex layer * splitography/planck code break out into common .h segments * splitography/planck code break out into common .h segments * splitography common library * splitography common library * splitography beakl altgr home row * updating with qmk master --- keyboards/planck/keymaps/altgr/beakl.h | 612 +++++++++++++++ keyboards/planck/keymaps/altgr/colemak.h | 124 +++ .../keymaps/altgr/common/chord_layout.h | 41 + keyboards/planck/keymaps/altgr/common/init.h | 56 ++ .../keymaps/altgr/common/keycode_functions.h | 657 ++++++++++++++++ .../keymaps/altgr/common/number_fkey_layout.h | 86 ++ .../altgr/common/number_fkey_layout.save.h | 86 ++ .../keymaps/altgr/common/plover_keybind.h | 9 + .../planck/keymaps/altgr/common/sounds.h | 14 + .../keymaps/altgr/common/steno_layout.h | 39 + .../altgr/common/symbol_guifn_layout.h | 75 ++ .../planck/keymaps/altgr/common/tapdance.h | 49 ++ .../keymaps/altgr/common/toggle_layout.h | 102 +++ keyboards/planck/keymaps/altgr/config.h | 50 ++ keyboards/planck/keymaps/altgr/keymap.c | 490 ++++++++++++ .../planck/keymaps/altgr/private_string.h | 1 + keyboards/planck/keymaps/altgr/qwerty.h | 64 ++ keyboards/planck/keymaps/altgr/readme.md | 10 + keyboards/planck/keymaps/altgr/rules.mk | 26 + .../planck/keymaps/hiea/common/chord_layout.h | 41 + keyboards/planck/keymaps/hiea/common/init.h | 56 ++ .../keymaps/hiea/common/keycode_functions.h | 657 ++++++++++++++++ .../keymaps/hiea/common/number_fkey_layout.h | 46 ++ .../keymaps/hiea/common/plover_keybind.h | 9 + keyboards/planck/keymaps/hiea/common/sounds.h | 14 + .../planck/keymaps/hiea/common/steno_layout.h | 39 + .../keymaps/hiea/common/symbol_guifn_layout.h | 40 + .../planck/keymaps/hiea/common/tapdance.h | 49 ++ .../keymaps/hiea/common/toggle_layout.h | 102 +++ keyboards/planck/keymaps/hiea/config.h | 50 ++ keyboards/planck/keymaps/hiea/hiea.h | 63 ++ keyboards/planck/keymaps/hiea/keymap.c | 429 ++++++++++ keyboards/planck/keymaps/hiea/qwerty.h | 64 ++ keyboards/planck/keymaps/hiea/readme.md | 10 + keyboards/planck/keymaps/hiea/rules.mk | 26 + .../keymaps/hieax/common/chord_layout.h | 41 + keyboards/planck/keymaps/hieax/common/init.h | 56 ++ .../keymaps/hieax/common/keycode_functions.h | 732 ++++++++++++++++++ .../keymaps/hieax/common/number_fkey_layout.h | 46 ++ .../keymaps/hieax/common/plover_keybind.h | 9 + .../planck/keymaps/hieax/common/sounds.h | 14 + .../keymaps/hieax/common/steno_layout.h | 39 + .../hieax/common/symbol_guifn_layout.h | 40 + .../planck/keymaps/hieax/common/tapdance.h | 49 ++ .../keymaps/hieax/common/toggle_layout.h | 102 +++ keyboards/planck/keymaps/hieax/config.h | 50 ++ keyboards/planck/keymaps/hieax/hiea.h | 99 +++ ...ea.sync-conflict-20180501-144403-SMV4TP4.h | 97 +++ keyboards/planck/keymaps/hieax/keymap.c | 446 +++++++++++ keyboards/planck/keymaps/hieax/readme.md | 10 + keyboards/planck/keymaps/hieax/rules.mk | 26 + keyboards/planck/keymaps/sdothum/beakl.h | 551 +++++++++++++ keyboards/planck/keymaps/sdothum/colemak.h | 125 +++ .../keymaps/sdothum/common/chord_layout.h | 41 + .../planck/keymaps/sdothum/common/init.h | 56 ++ .../sdothum/common/keycode_functions.h | 656 ++++++++++++++++ .../sdothum/common/number_fkey_layout.h | 87 +++ .../keymaps/sdothum/common/plover_keybind.h | 7 + .../planck/keymaps/sdothum/common/sounds.h | 14 + .../keymaps/sdothum/common/steno_layout.h | 39 + .../sdothum/common/symbol_guifn_layout.h | 75 ++ .../planck/keymaps/sdothum/common/tapdance.h | 49 ++ .../keymaps/sdothum/common/toggle_layout.h | 102 +++ keyboards/planck/keymaps/sdothum/config.h | 50 ++ keyboards/planck/keymaps/sdothum/keymap.c | 480 ++++++++++++ keyboards/planck/keymaps/sdothum/qwerty.h | 64 ++ keyboards/planck/keymaps/sdothum/readme.md | 10 + keyboards/planck/keymaps/sdothum/rules.mk | 26 + 68 files changed, 8574 insertions(+) create mode 100644 keyboards/planck/keymaps/altgr/beakl.h create mode 100644 keyboards/planck/keymaps/altgr/colemak.h create mode 100644 keyboards/planck/keymaps/altgr/common/chord_layout.h create mode 100644 keyboards/planck/keymaps/altgr/common/init.h create mode 100644 keyboards/planck/keymaps/altgr/common/keycode_functions.h create mode 100644 keyboards/planck/keymaps/altgr/common/number_fkey_layout.h create mode 100644 keyboards/planck/keymaps/altgr/common/number_fkey_layout.save.h create mode 100644 keyboards/planck/keymaps/altgr/common/plover_keybind.h create mode 100644 keyboards/planck/keymaps/altgr/common/sounds.h create mode 100644 keyboards/planck/keymaps/altgr/common/steno_layout.h create mode 100644 keyboards/planck/keymaps/altgr/common/symbol_guifn_layout.h create mode 100644 keyboards/planck/keymaps/altgr/common/tapdance.h create mode 100644 keyboards/planck/keymaps/altgr/common/toggle_layout.h create mode 100644 keyboards/planck/keymaps/altgr/config.h create mode 100644 keyboards/planck/keymaps/altgr/keymap.c create mode 100644 keyboards/planck/keymaps/altgr/private_string.h create mode 100644 keyboards/planck/keymaps/altgr/qwerty.h create mode 100644 keyboards/planck/keymaps/altgr/readme.md create mode 100644 keyboards/planck/keymaps/altgr/rules.mk create mode 100644 keyboards/planck/keymaps/hiea/common/chord_layout.h create mode 100644 keyboards/planck/keymaps/hiea/common/init.h create mode 100644 keyboards/planck/keymaps/hiea/common/keycode_functions.h create mode 100644 keyboards/planck/keymaps/hiea/common/number_fkey_layout.h create mode 100644 keyboards/planck/keymaps/hiea/common/plover_keybind.h create mode 100644 keyboards/planck/keymaps/hiea/common/sounds.h create mode 100644 keyboards/planck/keymaps/hiea/common/steno_layout.h create mode 100644 keyboards/planck/keymaps/hiea/common/symbol_guifn_layout.h create mode 100644 keyboards/planck/keymaps/hiea/common/tapdance.h create mode 100644 keyboards/planck/keymaps/hiea/common/toggle_layout.h create mode 100644 keyboards/planck/keymaps/hiea/config.h create mode 100644 keyboards/planck/keymaps/hiea/hiea.h create mode 100644 keyboards/planck/keymaps/hiea/keymap.c create mode 100644 keyboards/planck/keymaps/hiea/qwerty.h create mode 100644 keyboards/planck/keymaps/hiea/readme.md create mode 100644 keyboards/planck/keymaps/hiea/rules.mk create mode 100644 keyboards/planck/keymaps/hieax/common/chord_layout.h create mode 100644 keyboards/planck/keymaps/hieax/common/init.h create mode 100644 keyboards/planck/keymaps/hieax/common/keycode_functions.h create mode 100644 keyboards/planck/keymaps/hieax/common/number_fkey_layout.h create mode 100644 keyboards/planck/keymaps/hieax/common/plover_keybind.h create mode 100644 keyboards/planck/keymaps/hieax/common/sounds.h create mode 100644 keyboards/planck/keymaps/hieax/common/steno_layout.h create mode 100644 keyboards/planck/keymaps/hieax/common/symbol_guifn_layout.h create mode 100644 keyboards/planck/keymaps/hieax/common/tapdance.h create mode 100644 keyboards/planck/keymaps/hieax/common/toggle_layout.h create mode 100644 keyboards/planck/keymaps/hieax/config.h create mode 100644 keyboards/planck/keymaps/hieax/hiea.h create mode 100644 keyboards/planck/keymaps/hieax/hiea.sync-conflict-20180501-144403-SMV4TP4.h create mode 100644 keyboards/planck/keymaps/hieax/keymap.c create mode 100644 keyboards/planck/keymaps/hieax/readme.md create mode 100644 keyboards/planck/keymaps/hieax/rules.mk create mode 100644 keyboards/planck/keymaps/sdothum/beakl.h create mode 100644 keyboards/planck/keymaps/sdothum/colemak.h create mode 100644 keyboards/planck/keymaps/sdothum/common/chord_layout.h create mode 100644 keyboards/planck/keymaps/sdothum/common/init.h create mode 100644 keyboards/planck/keymaps/sdothum/common/keycode_functions.h create mode 100644 keyboards/planck/keymaps/sdothum/common/number_fkey_layout.h create mode 100644 keyboards/planck/keymaps/sdothum/common/plover_keybind.h create mode 100644 keyboards/planck/keymaps/sdothum/common/sounds.h create mode 100644 keyboards/planck/keymaps/sdothum/common/steno_layout.h create mode 100644 keyboards/planck/keymaps/sdothum/common/symbol_guifn_layout.h create mode 100644 keyboards/planck/keymaps/sdothum/common/tapdance.h create mode 100644 keyboards/planck/keymaps/sdothum/common/toggle_layout.h create mode 100644 keyboards/planck/keymaps/sdothum/config.h create mode 100644 keyboards/planck/keymaps/sdothum/keymap.c create mode 100644 keyboards/planck/keymaps/sdothum/qwerty.h create mode 100644 keyboards/planck/keymaps/sdothum/readme.md create mode 100644 keyboards/planck/keymaps/sdothum/rules.mk diff --git a/keyboards/planck/keymaps/altgr/beakl.h b/keyboards/planck/keymaps/altgr/beakl.h new file mode 100644 index 00000000000..a684a6c43db --- /dev/null +++ b/keyboards/planck/keymaps/altgr/beakl.h @@ -0,0 +1,612 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// .................................................................... BEAKL EZ +#ifdef BEAKLEZ + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | K | ^Alt | ^GUI | F | G | R | C | V | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | " | ↑Alt | ↑GUI | L | S | T | N | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | ; | , | J | . | X | Caps |^Shift| B | D | M | P | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_K, CNTR_TL, CNTR_TR, KC_F, KC_G, KC_R, KC_C, KC_V }, + {KC_H, KC_I, KC_E, HOME_A, TD_QUOT, CNTR_HL, CNTR_HR, KC_L, KC_S, KC_T, KC_N, KC_W }, + {KC_SCLN, KC_COMM, KC_J, KC_DOT, KC_X, CNTR_BL, CNTR_BR, KC_B, KC_D, KC_M, KC_P, KC_Z }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_K), CNTR_TL, CNTR_TR, S(KC_F), S(KC_G), S(KC_R), S(KC_C), S(KC_V)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), TD_QUOT, CNTR_HL, CNTR_HR, S(KC_L), S(KC_S), S(KC_T), S(KC_N), S(KC_W)}, + {KC_SCLN, KC_COMM, S(KC_J), KC_DOT, S(KC_X), CNTR_BL, CNTR_BR, S(KC_B), S(KC_D), S(KC_M), S(KC_P), S(KC_Z)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | K | ^Alt | ^GUI | F | G | R | C | V | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | " | ↑Alt | ↑GUI | L | S | T | N | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | : | ~ | J | ` | X | Caps |^Shift| B | D | M | P | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_K), CNTR_TL, CNTR_TR, S(KC_F), S(KC_G), S(KC_R), S(KC_C), S(KC_V)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), TD_DQOT, CNTR_HL, CNTR_HR, S(KC_L), S(KC_S), S(KC_T), S(KC_N), S(KC_W)}, + {TD_COLN, TD_TILD, S(KC_J), TD_GRV, S(KC_X), CNTR_BL, CNTR_BR, S(KC_B), S(KC_D), S(KC_M), S(KC_P), S(KC_Z)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | K | ^Alt | ^GUI | F | G | R | C | V | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | " | ↑Alt | ↑GUI | L | S | T | N | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | : | / | J | ? | X | Caps |^Shift| B | D | M | P | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_K), CNTR_TL, CNTR_TR, S(KC_F), S(KC_G), S(KC_R), S(KC_C), S(KC_V)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), TD_DQOT, CNTR_HL, CNTR_HR, S(KC_L), S(KC_S), S(KC_T), S(KC_N), S(KC_W)}, + {TD_COLN, KC_SLSH, S(KC_J), KC_QUES, S(KC_X), CNTR_BL, CNTR_BR, S(KC_B), S(KC_D), S(KC_M), S(KC_P), S(KC_Z)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// ..................................................................... BEAKL 8 +#ifdef BEAKL8 + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | X | ^Alt | ^GUI | G | C | R | F | Z | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . | ↑Alt | ↑GUI | D | S | T | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | I | , | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_X, CNTR_TL, CNTR_TR, KC_G, KC_C, KC_R, KC_F, KC_Z }, + {KC_K, KC_H, KC_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_D, KC_S, KC_T, KC_N, KC_B }, + {KC_J, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_W, KC_M, KC_L, KC_P, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_C), S(KC_R), S(KC_F), S(KC_Z)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_D), S(KC_S), S(KC_T), S(KC_N), S(KC_B)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | X | ^Alt | ^GUI | G | C | R | F | Z | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ~ | ↑Alt | ↑GUI | D | S | T | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | ` | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_C), S(KC_R), S(KC_F), S(KC_Z)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), TD_TILD, CNTR_HL, CNTR_HR, S(KC_D), S(KC_S), S(KC_T), S(KC_N), S(KC_B)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), TD_GRV, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | X | ^Alt | ^GUI | G | C | R | F | Z | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? | ↑Alt | ↑GUI | D | S | T | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | / | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_C), S(KC_R), S(KC_F), S(KC_Z)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_D), S(KC_S), S(KC_T), S(KC_N), S(KC_B)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// .................................................................... BEAKL 8P +#ifdef BEAKL8P + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | ^Alt | ^GUI | G | D | R | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . | ↑Alt | ↑GUI | C | T | S | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | I | , | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_Z, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_R, KC_F, KC_X }, + {KC_K, KC_H, KC_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, KC_T, KC_S, KC_N, KC_B }, + {KC_J, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_W, KC_M, KC_L, KC_P, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | { | } | $ | ^Alt | ^GUI | G | D | R | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | < | > | ~ | ↑Alt | ↑GUI | C | T | S | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | ! | = | ` | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), KC_LCBR, KC_RCBR, KC_DLR, CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)}, + {S(KC_K), S(KC_H), TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)}, + {S(KC_J), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | ^Alt | ^GUI | ^ | [ | ] | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? | ↑Alt | ↑GUI | | | ( | ) | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | / | Caps |^Shift| \ | $ | * | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, KC_CIRC, KC_LBRC, KC_RBRC, S(KC_F), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, S(KC_N), S(KC_B)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_DLR, KC_ASTR, S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// ................................................................... BEAKL 8TX +#ifdef BEAKL8TX + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | J | ^Alt | ^GUI | G | D | R | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . | ↑Alt | ↑GUI | C | T | S | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | ; | " | I | , | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_J, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_R, KC_F, KC_X }, + {HOME_K, HOME_H, HOME_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, HOME_T, HOME_S, HOME_N, HOME_B }, + {KC_Z, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_W, KC_M, KC_L, KC_P, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)}, + {S(KC_Z), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | $ | { | } | J | ^Alt | ^GUI | G | D | R | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | / | < | > | ~ | ↑Alt | ↑GUI | C | T | S | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | : | ! | = | ` | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), KC_DLR, KC_LCBR, KC_RCBR, S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)}, + {S(KC_K), KC_SLSH, TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)}, + {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | J | ^Alt | ^GUI | G | [ | ] | ^ | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? | ↑Alt | ↑GUI | | | ( | ) | $ | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | : | " | I | / | Caps |^Shift| \ | * | . | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, S(KC_B)}, + {S(KC_Z), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT, S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// ................................................................... BEAKL 8TT +#ifdef BEAKL8TT + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | J | Fn | Caps | G | D | R | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . |Cursor| Mouse| C | T | S | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | ; | " | I | , | Num | Regex| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_J, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_R, KC_F, KC_X }, + {HOME_K, HOME_H, HOME_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, HOME_T, HOME_S, HOME_N, HOME_B }, + {KC_Z, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_W, KC_M, KC_L, KC_P, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)}, + {S(KC_Z), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | $ | { | } | J | Fn | Caps | G | D | R | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | / | < | > | ~ |Cursor| Mouse| C | T | S | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | : | ! | = | ` | Num | Regex| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), KC_DLR, KC_LCBR, KC_RCBR, S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)}, + {S(KC_K), KC_SLSH, TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)}, + {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | J | Fn | Caps | G | [ | ] | ^ | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? |Cursor| Mouse| | | ( | ) | $ | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | : | " | I | / | Num | Regex| \ | * | . | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, S(KC_B)}, + {S(KC_Z), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT, S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// .................................................................... BEAKL 10 +#ifdef BEAKL10 + // ,-----------------------------------------------------------------------------------. + // | Q | H | O | U | X | ^Alt | ^GUI | G | D | N | M | V | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Y | I | E | A | . | ↑Alt | ↑GUI | C | S | R | T | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | , | Z | Caps |^Shift| B | P | L | F | K | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_H, KC_O, KC_U, KC_X, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_N, KC_M, KC_V }, + {KC_Y, KC_I, KC_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, KC_S, KC_R, KC_T, KC_W }, + {KC_J, KC_SCLN, TD_QUOT, KC_COMM, KC_Z, CNTR_BL, CNTR_BR, KC_B, KC_P, KC_L, KC_F, KC_K }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_H), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_V)}, + {S(KC_Y), S(KC_I), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_S), S(KC_R), S(KC_T), S(KC_W)}, + {S(KC_J), KC_SCLN, TD_QUOT, KC_COMM, S(KC_Z), CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_K)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | [ | ! | ] | X | ^Alt | ^GUI | G | D | N | M | V | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Y | < | = | > | ~ | ↑Alt | ↑GUI | C | S | R | T | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | ` | Z | Caps |^Shift| B | P | L | F | K | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), TD_LBRC, KC_EXLM, TD_RBRC, S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_V)}, + {S(KC_Y), TD_LT, KC_EQL, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_S), S(KC_R), S(KC_T), S(KC_W)}, + {S(KC_J), KC_COLN, TD_DQOT, TD_GRV, S(KC_Z), CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_K)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | H | O | U | X | ^Alt | ^GUI | G | { | + | } | V | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Y | I | E | A | ? | ↑Alt | ↑GUI | C | ( | * | ) | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | / | Z | Caps |^Shift| B | P | L | F | K | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_H), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), TD_LCBR, KC_PLUS, TD_RCBR, S(KC_V)}, + {S(KC_Y), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), TD_LPRN, KC_ASTR, TD_RPRN, S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, KC_SLSH, S(KC_Z), CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_K)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// ............................................................... BEAKL Mash Up +#ifdef BEAKL810 + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | ^Alt | ^GUI | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . | ↑Alt | ↑GUI | C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | I | , | Caps |^Shift| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_Z, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_N, KC_M, KC_X }, + {KC_K, KC_H, KC_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, KC_T, KC_R, KC_S, KC_W }, + {KC_J, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_B, KC_P, KC_L, KC_F, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | { | } | $ | ^Alt | ^GUI | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | < | > | ~ | ↑Alt | ↑GUI | C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | ! | = | ` | Caps |^Shift| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), KC_LCBR, KC_RCBR, KC_DLR, CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | ^Alt | ^GUI | ^ | [ | ] | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? | ↑Alt | ↑GUI | | | ( | ) | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | / | Caps |^Shift| \ | $ | * | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, KC_CIRC, KC_LBRC, KC_RBRC, S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, S(KC_S), S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_DLR, KC_ASTR, S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// .................................................................... BEAKL MU +#ifdef BEAKLMU + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Fn | Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | I | , | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_Z, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_N, KC_M, KC_X }, + {HOME_K, HOME_H, HOME_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, HOME_T, HOME_R, HOME_S, HOME_W }, + {KC_J, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_B, KC_P, KC_L, KC_F, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | $ | { | } | Z | Fn | Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | / | < | > | ~ |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | ! | = | ` | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), KC_DLR, KC_LCBR, KC_RCBR, S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), KC_SLSH, TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Fn | Caps | G | [ | ] | ^ | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? |Cursor| Mouse| | | ( | ) | $ | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | / | Num | Regex| \ | * | . | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT, S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// .................................................................... BEAKL SP +#ifdef BEAKLSP + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | I | , | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Ins | Left | Ent | Bksp | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_Z, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_N, KC_M, KC_X }, + {HOME_K, HOME_H, HOME_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, HOME_T, HOME_R, HOME_S, HOME_W }, + {KC_J, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_B, KC_P, KC_L, KC_F, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, TD_ENT, SP_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, TD_ENT, SP_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | [ | ] | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | ^ | < | > | ~ |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | ! | = | ` | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | ↑Tab | f() | Ins | Left | _ | Del | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), KC_LBRC, KC_RBRC, S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), KC_CIRC, TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, S_TAB, ___fn__, LT_INS, S_LEFT, KC_UNDS, SP_DEL, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | { | } | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? |Cursor| Mouse| | | ( | ) | $ | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | / | Num | Regex| \ | * | . | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Tab | - | Ins | Left | f() | Bksp | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), KC_LCBR, KC_RCBR, S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT, S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_TAB, KC_MINS, LT_INS, S_LEFT, ___fn__, SP_BSPC, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// .................................................................... BEAKL GR +#ifdef BEAKLGR + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | I | , | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Ins | Left | Ent | Bksp | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_Z, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_N, KC_M, KC_X }, + {HOME_K, HOME_H, HOME_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, HOME_T, HOME_R, HOME_S, HOME_W }, + {KC_J, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_B, KC_P, KC_L, KC_F, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, TD_ENT, SP_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, TD_ENT, SP_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | [ | ] | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | ^ | < | > | ~ |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | ! | = | ` | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | ↑Tab | f() | Ins | Left | _ | Del | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), KC_LBRC, KC_RBRC, S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {SM_K, KC_CIRC, TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, S_TAB, ___fn__, LT_INS, S_LEFT, KC_UNDS, SP_DEL, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | { | } | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? |Cursor| Mouse| | | ( | ) | $ | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | / | Num | Regex| \ | * | . | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Tab | - | Ins | Left | f() | Bksp | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), KC_LCBR, KC_RCBR, S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, SM_W }, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT, S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_TAB, KC_MINS, LT_INS, S_LEFT, ___fn__, SP_BSPC, S_DOWN, S_UP, S_RGHT }, + }, +#endif diff --git a/keyboards/planck/keymaps/altgr/colemak.h b/keyboards/planck/keymaps/altgr/colemak.h new file mode 100644 index 00000000000..8810ba82a5b --- /dev/null +++ b/keyboards/planck/keymaps/altgr/colemak.h @@ -0,0 +1,124 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// .............................................................. Colemak Mod-DH +#ifdef COLEMAK + // ,-----------------------------------------------------------------------------------. + // | Q | W | F | P | B | ^Alt | ^GUI | J | L | U | Y | ; | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | R | S | T | G | ↑Alt | ↑GUI | M | N | E | I | O | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | D | V | Caps |^Shift| K | H | , | . | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_W, KC_F, KC_P, KC_B, CNTR_TL, CNTR_TR, KC_J, KC_L, KC_U, KC_Y, KC_SCLN}, + {KC_A, KC_R, KC_S, KC_T, KC_G, CNTR_HL, CNTR_HR, KC_M, KC_N, KC_E, KC_I, KC_O }, + {KC_Z, KC_X, KC_C, KC_D, KC_V, CNTR_BL, CNTR_BR, KC_K, KC_H, KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_B), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), KC_SCLN}, + {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_G), CNTR_HL, CNTR_HR, S(KC_M), S(KC_N), S(KC_E), S(KC_I), S(KC_O)}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_D), S(KC_V), CNTR_BL, CNTR_BR, S(KC_K), S(KC_H), KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | F | P | B | ^Alt | ^GUI | J | L | U | Y | : | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | R | S | T | G | ↑Alt | ↑GUI | M | N | E | I | O | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | D | V | Caps |^Shift| K | H | / | ? | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | - | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_B), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN}, + {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_G), CNTR_HL, CNTR_HR, S(KC_M), S(KC_N), S(KC_E), S(KC_I), S(KC_O)}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_D), S(KC_V), CNTR_BL, CNTR_BR, S(KC_K), S(KC_H), KC_SLSH, KC_QUES, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_MINS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | F | P | B | ^Alt | ^GUI | J | L | U | Y | : | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | R | S | T | G | ↑Alt | ↑GUI | M | N | E | I | O | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | D | V | Caps |^Shift| K | H | ~ | ` | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | _ | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_B), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN}, + {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_G), CNTR_HL, CNTR_HR, S(KC_M), S(KC_N), S(KC_E), S(KC_I), S(KC_O)}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_D), S(KC_V), CNTR_BL, CNTR_BR, S(KC_K), S(KC_H), TD_TILD, TD_GRV, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_UNDS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// ..................................................................... ColemaX +#ifdef COLEMAX + // ,-----------------------------------------------------------------------------------. + // | Q | W | C | G | Z | ^Alt | ^GUI | J | L | U | Y | ; | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | R | S | T | B | ↑Alt | ↑GUI | K | N | E | I | O | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | X | V | F | D | P | Caps |^Shift| M | H | , | . | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_W, KC_C, KC_G, KC_Z, CNTR_TL, CNTR_TR, KC_J, KC_L, KC_U, KC_Y, KC_SCLN}, + {KC_A, KC_R, KC_S, KC_T, KC_B, CNTR_HL, CNTR_HR, KC_K, KC_N, KC_E, KC_I, KC_O }, + {KC_X, KC_V, KC_F, KC_D, KC_P, CNTR_BL, CNTR_BR, KC_M, KC_H, KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_W), S(KC_C), S(KC_G), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), KC_SCLN}, + {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_B), CNTR_HL, CNTR_HR, S(KC_K), S(KC_N), S(KC_E), S(KC_I), S(KC_O)}, + {S(KC_X), S(KC_V), S(KC_F), S(KC_D), S(KC_P), CNTR_BL, CNTR_BR, S(KC_M), S(KC_H), KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | C | G | Z | ^Alt | ^GUI | J | L | U | Y | : | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | R | S | T | B | ↑Alt | ↑GUI | K | N | E | I | O | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | X | V | F | D | P | Caps |^Shift| M | H | / | ? | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | - | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_C), S(KC_G), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN}, + {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_B), CNTR_HL, CNTR_HR, S(KC_K), S(KC_N), S(KC_E), S(KC_I), S(KC_O)}, + {S(KC_X), S(KC_V), S(KC_F), S(KC_D), S(KC_P), CNTR_BL, CNTR_BR, S(KC_M), S(KC_H), KC_SLSH, KC_QUES, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_MINS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | C | G | Z | ^Alt | ^GUI | J | L | U | Y | : | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | R | S | T | B | ↑Alt | ↑GUI | K | N | E | I | O | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | X | V | F | D | P | Caps |^Shift| M | H | ~ | ` | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | _ | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_C), S(KC_G), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN}, + {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_B), CNTR_HL, CNTR_HR, S(KC_K), S(KC_N), S(KC_E), S(KC_I), S(KC_O)}, + {S(KC_X), S(KC_V), S(KC_F), S(KC_D), S(KC_P), CNTR_BL, CNTR_BR, S(KC_M), S(KC_H), TD_TILD, TD_GRV, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_UNDS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif diff --git a/keyboards/planck/keymaps/altgr/common/chord_layout.h b/keyboards/planck/keymaps/altgr/common/chord_layout.h new file mode 100644 index 00000000000..2c785d56ca7 --- /dev/null +++ b/keyboards/planck/keymaps/altgr/common/chord_layout.h @@ -0,0 +1,41 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// .................................................................. Short Cuts + + // .-----------------------------------------------------------------------------------. + // | | | Copy | Paste| | | | | | | | | + // |--------------------------------------------------------------+------+------+------| + // | Undo | Cut | Copy | Paste| | | | | PRIV | PUB | | | + // |-----------------------------------------------------------------------------------| + // | | | Nak | Eot | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | | | | f() | | | | | | + // | | | | | | | | f() | | | | | see _PLOVER + // '-----------------------------------------------------------------------------------' + + [_EDIT] = { + {_______, _______, TMCOPY, TMPASTE, _______, _______, _______, _______, _______, _______, _______, _______}, + {UNDO, CUT, COPY, PASTE, _______, _______, _______, _______, TD_PRIV, TD_SEND, _______, _______}, + {_______, _______, NAK, EOT, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, ___fn__, ___fn__, _______, _______, _______, _______}, + }, + +// ................................................................ Adjust Layer + + // ,-----------------------------------------------------------------------------------. + // |Plover| | | | | | | | | | | | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // |Aud on| | | | | | | | | | | | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Reset| | | | | | | | | | | | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | | | f() | | | | | f() | | | | + // `-----------------------------------------------------------------------------------' + + [_ADJUST] = { + {PLOVER, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {AU_ON, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, ___fn__, _______, _______, _______, _______, ___fn__, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/altgr/common/init.h b/keyboards/planck/keymaps/altgr/common/init.h new file mode 100644 index 00000000000..6366a19f65e --- /dev/null +++ b/keyboards/planck/keymaps/altgr/common/init.h @@ -0,0 +1,56 @@ + +// ....................................................................... Audio + +void matrix_init_user(void) +{ +#ifdef STENO_ENABLE + steno_set_mode(STENO_MODE_BOLT); // or STENO_MODE_GEMINI +#endif +#ifdef AUDIO_ENABLE + startup_user(); +#endif +} + +#ifdef AUDIO_ENABLE +#ifdef BACKLIGHT_ENABLE +void led_set_user(uint8_t usb_led) +{ + static uint8_t old_usb_led = 0; + _delay_ms(10); // gets rid of tick + if (!is_playing_notes()) { + if ((usb_led & (1<event.pressed) { + key_timer = timer_read(); + register_code(modifier); + if (modifier2) { + register_code(modifier2); + } + } + else { + unregister_code(modifier); + if (modifier2) { + unregister_code(modifier2); + } + if (timer_elapsed(key_timer) < TAPPING_TERM) { + shift_key(keycode); + } + key_timer = 0; + } +} + +// ................................................................... Mod Masks + +// tap dance persistant mods, see process_record_user() +// keyboard_report->mods (?) appears to be cleared by tap dance +static uint8_t mods = 0; + +void tap_mods(keyrecord_t *record, uint16_t keycode) +{ + if (record->event.pressed) { + mods |= MOD_BIT(keycode); + } + else { + mods &= ~(MOD_BIT(keycode)); + } +} + +// (un)register modifiers +void modifier(void (*f)(uint8_t)) +{ + if (mods & MOD_BIT(KC_LCTL)) { + (*f)(KC_LCTL); + } + if (mods & MOD_BIT(KC_LGUI)) { + (*f)(KC_LGUI); + } + if (mods & MOD_BIT(KC_LALT)) { + (*f)(KC_LALT); + } +} + +// .................................................... Triple Dance Shift/Layer + +static uint8_t dt_shift = 0; + +void double_shift(uint16_t keycode, uint8_t layer) +{ + tap_key (keycode); + if (DT_SHIFT) { + // set_oneshot_mods(MOD_LSFT); + // layer_on(layer); + layer_on (_SHIFT); + set_oneshot_layer(_SHIFT, ONESHOT_START); + dt_shift = 1; + } + else { + layer_on(layer); + } +} + +// tap dance LT (LAYER, KEY) emulation with -> and auto-repeat extensions! +void tap_shift(qk_tap_dance_state_t *state, uint16_t keycode, uint8_t layer) +{ + // double tap plus down + if (state->count > 2) { + // double enter shift + if (keycode == KC_ENT) { + tap_key (keycode); + double_shift(keycode, layer); + } + // repeating keycode + else { + register_code(keycode); + } + } + // tap plus down (or double tap): keycode (one shot) shift + else if (state->count > 1) { + double_shift(keycode, layer); + } + // down: shift + else if (state->pressed) { + layer_on(layer); + } + // tap: keycode + else { + modifier(register_code); + tap_key (keycode); + modifier(unregister_code); + } +} + +void tap_reset(uint16_t keycode, uint8_t layer) +{ + unregister_code(keycode); + if (DT_SHIFT && dt_shift) { + clear_oneshot_layer_state(ONESHOT_PRESSED); + dt_shift = 0; + } + else { + layer_off(layer); + } +} + +// augment pseudo LT (_RSHIFT, KC_ENT) handling below for rapid sequences +void enter(qk_tap_dance_state_t *state, void *user_data) +{ + tap_shift(state, KC_ENT, _RSHIFT); +} + +void enter_reset(qk_tap_dance_state_t *state, void *user_data) +{ + tap_reset(KC_ENT, _RSHIFT); +} + +// augment pseudo LT (_LSHIFT, KC_SPC) handling below for rapid sequences +void space(qk_tap_dance_state_t *state, void *user_data) +{ + tap_shift(state, KC_SPC, _LSHIFT); +} + +void space_reset(qk_tap_dance_state_t *state, void *user_data) +{ + tap_reset(KC_SPC, _LSHIFT); +} + +// ......................................................... Triple Dance Insert + +void double_max(uint8_t count, uint8_t shift, uint16_t keycode) +{ + if (shift) { + shift_key(keycode); + if (count > 1) { + shift_key(keycode); + } + } + else { + tap_key(keycode); + if (count > 1) { + tap_key(keycode); + } + } +} + +void colon(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key (KC_SPC); + shift_key(KC_SCLN); + shift_key(KC_SCLN); + tap_key (KC_SPC); + } + else { + double_max(state->count, SHIFT, KC_SCLN); + } + reset_tap_dance(state); +} + +void eql(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key(KC_SPC); + tap_key(KC_SLSH); + tap_key(KC_EQL); + tap_key(KC_SPC); + } + else { + double_max(state->count, NOSHIFT, KC_EQL); + } + reset_tap_dance(state); +} + +void greater(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key (KC_SPC); + tap_key (KC_MINS); + shift_key(KC_DOT); + tap_key (KC_SPC); + } + else { + double_max(state->count, SHIFT, KC_DOT); + } + reset_tap_dance(state); +} + +void lesser(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key (KC_SPC); + shift_key(KC_COMM); + tap_key (KC_MINS); + tap_key (KC_SPC); + } + else { + double_max(state->count, SHIFT, KC_COMM); + } + reset_tap_dance(state); +} + +void tilde(qk_tap_dance_state_t *state, void *user_data) +{ + // double tap plus down: repeating keycode + if (state->count > 2) { + register_code(KC_LSFT); + register_code(KC_GRV); + } + // tap: keycode + else { + shift_key(KC_GRV); + // double tap: unix home directory + if (state->count > 1) { + tap_key(KC_SLSH); + } + } +} + +void tilde_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_GRV); + unregister_code(KC_LSFT); +} + +// ............................................................. Tap Dance Pairs + +// tap dance shift rules +#define S_NEVER 0 +#define S_SINGLE 1 +#define S_DOUBLE 2 +#define S_ALWAYS S_SINGLE | S_DOUBLE + +void symbol_pair(uint8_t shift, uint16_t left, uint16_t right) +{ + if (shift & S_DOUBLE) { + shift_key(left); + shift_key(right); + } + else { + tap_key(left); + tap_key(right); + } +} + +#define CLOSE 1 + +// tap dance symbol pairs +void tap_pair(qk_tap_dance_state_t *state, uint8_t shift, uint16_t left, uint16_t right, uint16_t modifier, uint8_t close) +{ + // triple tap: left right with cursor between symbol pair a la vim :-) + if (state->count > 2) { + symbol_pair(shift, left, right); + tap_key (KC_LEFT); + } + // double tap: left right + else if (state->count > 1) { + symbol_pair(shift, left, right); + } + // down: modifier + else if (state->pressed) { + if (modifier) { + register_code(modifier); + } + } + // tap: left (close: right) + else { + if (shift & S_SINGLE) { + shift_key(close ? right : left); + } + else { + tap_key(close ? right : left); + } + } + if (!modifier) { + reset_tap_dance(state); + } +} + +void doublequote(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_QUOT, KC_QUOT, 0, 0); +} + +void grave(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_GRV, KC_GRV, 0, 0); +} + +void lbrace(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, 0); +} + +void lcurly(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, 0); +} + +void lparen(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_9, KC_0, KC_LCTL, 0); +} + +void lparen_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_LCTL); +} + +void quote(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_QUOT, KC_QUOT, 0, 0); +} + +void rangle(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_COMM, KC_DOT, 0, CLOSE); +} + +void rbrace(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, CLOSE); +} + +void rcurly(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, CLOSE); +} + +void rparen(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_9, KC_0, 0, CLOSE); +} + +void rparen_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_LCTL); +} + +// ............................................................ Tap Dance Insert + +void comma(qk_tap_dance_state_t *state, void *user_data) +{ + tap_key(KC_COMM); + if (state->count > 1) { + tap_key(KC_SPC); + } + reset_tap_dance(state); +} + +void dot(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { + shift_key(KC_COLN); + } + else { + tap_key(KC_DOT); + } + reset_tap_dance(state); +} + +// compile time macro string, see functions/hardware planck script +void private(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { +#ifdef PRIVATE_STRING +#include "private_string.h" +#endif + } + reset_tap_dance(state); +} + +// config.h defined string +void send(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { + SEND_STRING(PUBLIC_STRING); + } + reset_tap_dance(state); +} + +// .......................................................... Tap Dance One Shot + +void caps(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { + tap_key(KC_CAPS); + } + else { + set_oneshot_mods(MOD_LSFT); + register_code (KC_LSFT); // on hold down + } +} + +void caps_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_LSFT); +} + +// ................................................................... Tap Dance + +qk_tap_dance_action_t tap_dance_actions[] = { + [_CAPS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, caps, caps_reset) + ,[_COLN] = ACTION_TAP_DANCE_FN (colon) + ,[_COMM] = ACTION_TAP_DANCE_FN (comma) + ,[_DOT] = ACTION_TAP_DANCE_FN (dot) + ,[_DQOT] = ACTION_TAP_DANCE_FN (doublequote) + ,[_ENT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, enter, enter_reset) + ,[_EQL] = ACTION_TAP_DANCE_FN (eql) + ,[_GRV] = ACTION_TAP_DANCE_FN (grave) + ,[_GT] = ACTION_TAP_DANCE_FN (greater) + ,[_LBRC] = ACTION_TAP_DANCE_FN (lbrace) + ,[_LCBR] = ACTION_TAP_DANCE_FN (lcurly) + ,[_LPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lparen, lparen_reset) + ,[_LT] = ACTION_TAP_DANCE_FN (lesser) + ,[_PRIV] = ACTION_TAP_DANCE_FN (private) + ,[_QUOT] = ACTION_TAP_DANCE_FN (quote) + ,[_RBRC] = ACTION_TAP_DANCE_FN (rbrace) + ,[_RCBR] = ACTION_TAP_DANCE_FN (rcurly) + ,[_RNGL] = ACTION_TAP_DANCE_FN (rangle) + ,[_RPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rparen, rparen_reset) + ,[_SEND] = ACTION_TAP_DANCE_FN (send) + ,[_SPC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, space, space_reset) + ,[_TILD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tilde, tilde_reset) +}; + +// .............................................................. Dynamic Layers + +#define LEFT 1 +#define RIGHT 2 +static uint8_t thumb = 0; + +// LEFT (KC_SPC, S(KC_BSLS)), RIGHT (KC_LEFT, S(KC_LEFT)) opposite thumb combinations, see process_record_user() +// up, up -> _BASE +// up, down -> _SYMBOL +// down, up -> _NUMBER +// down, down -> _MOUSE // see layer keycodes that raise mouse layer +#define THUMBS_DOWN _MOUSE // layer + +static uint8_t overlayer = 0; + +// left right thumb layer combinations +void thumb_layer(keyrecord_t *record, uint8_t side, uint8_t shift, uint16_t keycode, uint8_t thumb_dn_layer, uint8_t thumb_up_layer) +{ + if (record->event.pressed) { + // layer_on via tap_layer(), see process_record_user() + key_timer = timer_read(); + thumb = thumb | side; + } + else { + layer_off(thumb_dn_layer); + // opposite thumb_layer() thumb may have switched effective layer! + if (overlayer) { + layer_off(overlayer); + overlayer = 0; + } + if (!key_press(shift, keycode)) { + layer_off(THUMBS_DOWN); // both thumbs needed + // opposite thumb down? see left right combination layer table above + if (thumb & (side == LEFT ? RIGHT : LEFT)) { + layer_on(thumb_up_layer); + overlayer = thumb_up_layer; + } + } + clear_mods(); + thumb = thumb & ~side; + key_timer = 0; + } +} + +// #ifdef STENO_ENABLE +// // LT for steno keycode +// void stn_layer(keyrecord_t *record, uint16_t keycode, uint8_t layer) +// { +// if (record->event.pressed) { +// key_timer = timer_read(); +// if (keycode) { +// process_steno(keycode, record); +// } +// layer_on(layer); +// } +// else { +// layer_off(layer); +// if (keycode) { +// if (timer_elapsed(key_timer) < TAPPING_TERM) { +// process_steno(keycode, record); +// } +// else { +// // clear pressed state (request push of updated) process_steno.c and .h +// // steno_clear_state(); +// } +// } +// key_timer = 0; +// } +// } +// #endif + +// LT for S(keycode) +void lt_shift(keyrecord_t *record, uint16_t keycode, uint8_t layer) +{ + if (record->event.pressed) { + key_timer = timer_read(); + layer_on(layer); + } + else { + layer_off(layer); + // for shifted keycodes, hence, LT_SHIFT + key_press(SHIFT, keycode); + clear_mods(); + key_timer = 0; + } +} + +// set layer asap to overcome macro latency errors, notably tap dance and LT usage +// this routine inexplicably (?) sets layer_on() faster than can be done in thumb_layer() +void tap_layer(keyrecord_t *record, uint8_t layer) +{ + if (record->event.pressed) { + layer_on(layer); + } + else { + layer_off(layer); + } +} + +// ..................................................................... Keymaps + +// void persistant_default_layer_set(uint16_t default_layer) +// { +// eeconfig_update_default_layer(default_layer); +// default_layer_set (default_layer); +// } + +void clear_layers(void) +{ + uint8_t layer; + for (layer = 0; layer < _END_LAYERS; layer++) { + layer_off(layer); + } +} + +#ifdef CENTER_TT +static uint16_t tt_keycode = 0; // current TT keycode + +void clear_tt(void) +{ + if (tt_keycode == KC_CAPS) { + tap_key(KC_CAPS); // clear capslock + } + tt_keycode = 0; + clear_layers(); + set_single_persistent_default_layer(_BASE); +} +#endif + +// txbolt plover run state +static uint8_t plover = 0; + +void toggle_plover(uint8_t state) +{ + if (plover != state) { +#ifdef PLOVER_KEYBIND +#include "plover_keybind.h" +#endif + plover = state; + } +} + +void base_layer(void) +{ +#ifdef AUDIO_ENABLE + if (plover) { + PLAY_SONG(song_plover_gb); + } + else { + PLAY_SONG(song_qwerty); + } +#endif + clear_layers(); + set_single_persistent_default_layer(_BASE); + toggle_plover(0); +} + +void steno(keyrecord_t *record) +{ + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + PLAY_SONG(song_plover); +#endif + clear_layers(); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + if (!plover) { + toggle_plover(1); + } + } +} + +void steno_exit(keyrecord_t *record) +{ + if (record->event.pressed) { + base_layer(); + toggle_plover(0); + } +} diff --git a/keyboards/planck/keymaps/altgr/common/number_fkey_layout.h b/keyboards/planck/keymaps/altgr/common/number_fkey_layout.h new file mode 100644 index 00000000000..528020e7417 --- /dev/null +++ b/keyboards/planck/keymaps/altgr/common/number_fkey_layout.h @@ -0,0 +1,86 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ......................................................... Number Keypad Layer +#ifdef SHIFT_SYMBOLS + // .-----------------------------------------------------------------------------------. + // | | F | E | D | | | | / | 7 | 8 | 9 | * | + // |-----------------------------------------------------------------------------------| + // | GUI | C | B | A | | | | . | 4 | 5 | 6 | - | + // |-----------------------------------------------------------------------------------| + // | | # | G | \ | | | | , | 1 | 2 | 3 | + | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | 0 | = | | | | + // | | | | f() | | | | = | 0 | | | | + // '-----------------------------------------------------------------------------------' + + [_NUMBER] = { + {_______, KC_F, MT_E, KC_D, _______, ___x___, ___x___, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR}, + {OS_GUI, GT_C, AT_B, ST_A, _______, ___x___, ___x___, TD_DOT, KC_4, KC_5, KC_6, KC_MINS}, + {_______, KC_HASH, SM_G, KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1, KC_2, KC_3, KC_PLUS}, +#ifdef THUMB_0 + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0, LT_EQL, ___x___, ___x___, ___x___}, +#else + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL, LT_0, ___x___, ___x___, ___x___}, +#endif + }, +#else + // .-----------------------------------------------------------------------------------. + // | | F | E | D | | | | / | 7 | 8 | 9 | * | + // |-----------------------------------------------------------------------------------| + // | GUI | C | B | A | | | | . | 4 | 5 | 6 | - | + // |-----------------------------------------------------------------------------------| + // | | # | X | G | | | | , | 1 | 2 | 3 | + | + // |-----------------------------------------------------------------------------------| + // | | f() | | 0 | = | | + // | | f() | | = | 0 | | + // '-----------------------------------------------------------------------------------' + + [_NUMBER] = { + {_______, KC_F, MT_E, KC_D, _______, _______, _______, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR}, + {OS_GUI, GT_C, AT_B, LT_A, _______, _______, _______, KC_DOT, KC_4, KC_5, KC_6, KC_MINS}, + {_______, KC_HASH, MT_X, S(KC_G), _______, _______, _______, TD_COMM, KC_1, KC_2, KC_3, KC_PLUS}, +#ifdef THUMB_0 + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0, LT_EQL, ___x___, ___x___, ___x___}, +#else + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL, LT_0, ___x___, ___x___, ___x___}, +#endif + }, + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | { | & | ? | : | } | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | ( | $ | % | ^ | ) | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | [ | < | ~ | > | ] | + // |-----------------------------------------------------------------------------------| + // | | f() | | \ | | | | + // '-----------------------------------------------------------------------------------' + + [_NUMSYM] = { + {_______, _______, _______, ___x___, _______, _______, _______, TD_LCBR, KC_AMPR, KC_QUES, KC_COLN, KC_RCBR}, + {___x___, ___x___, ___x___, ___fn__, _______, _______, _______, TD_LPRN, KC_DLR, KC_PERC, KC_CIRC, KC_RPRN}, + {_______, _______, _______, ___x___, _______, _______, _______, TD_LBRC, KC_LT, KC_TILD, KC_GT, KC_RBRC}, + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_BSLS, KC_PIPE, ___x___, ___x___, ___x___}, + }, +#endif + +// ............ .................................................. Function Keys + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | F7 | F8 | F9 | F12 | + // |-----------------------------------------------------------------------------------| + // | Ctrl | GUI | Alt | Shift| | | | | F4 | F5 | F6 | F11 | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | F1 | F2 | F3 | F10 | + // |-----------------------------------------------------------------------------------| + // | | | | | | f() | | + | | | | | + // | | | | | f() | | | + | | | | | see _PLOVER + // '-----------------------------------------------------------------------------------' + + [_FNCKEY] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7, KC_F8, KC_F9, KC_F12 }, + {OS_GUI, OS_CTL, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_F4, KC_F5, KC_F6, KC_F11 }, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1, KC_F2, KC_F3, KC_F10 }, + {_______, _______, _______, _______, ___fn__, ___fn__, _______, KC_PLUS, _______, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/altgr/common/number_fkey_layout.save.h b/keyboards/planck/keymaps/altgr/common/number_fkey_layout.save.h new file mode 100644 index 00000000000..7022863724e --- /dev/null +++ b/keyboards/planck/keymaps/altgr/common/number_fkey_layout.save.h @@ -0,0 +1,86 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ......................................................... Number Keypad Layer +#ifdef SHIFT_SYMBOLS + // .-----------------------------------------------------------------------------------. + // | | F | E | D | | | | / | 7 | 8 | 9 | * | + // |-----------------------------------------------------------------------------------| + // | Ctrl | C | B | A | | | | . | 4 | 5 | 6 | - | + // |-----------------------------------------------------------------------------------| + // | | # | G | \ | | | | , | 1 | 2 | 3 | + | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | 0 | = | | | | + // | | | | f() | | | | = | 0 | | | | + // '-----------------------------------------------------------------------------------' + + [_NUMBER] = { + {_______, KC_F, MT_E, KC_D, _______, ___x___, ___x___, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR}, + {OS_CTL, GT_C, AT_B, ST_A, _______, ___x___, ___x___, TD_DOT, KC_4, KC_5, KC_6, KC_MINS}, + {_______, KC_HASH, SM_G, KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1, KC_2, KC_3, KC_PLUS}, +#ifdef THUMB_0 + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0, LT_EQL, ___x___, ___x___, ___x___}, +#else + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL, LT_0, ___x___, ___x___, ___x___}, +#endif + }, +#else + // .-----------------------------------------------------------------------------------. + // | | F | E | D | | | | / | 7 | 8 | 9 | * | + // |-----------------------------------------------------------------------------------| + // | Ctrl | C | B | A | | | | . | 4 | 5 | 6 | - | + // |-----------------------------------------------------------------------------------| + // | | # | X | G | | | | , | 1 | 2 | 3 | + | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | 0 | = | | | | + // | | | | f() | | | | = | 0 | | | | + // '-----------------------------------------------------------------------------------' + + [_NUMBER] = { + {_______, KC_F, MT_E, KC_D, _______, _______, _______, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR}, + {OS_CTL, GT_C, AT_B, LT_A, _______, _______, _______, KC_DOT, KC_4, KC_5, KC_6, KC_MINS}, + {_______, KC_HASH, MT_X, S(KC_G), _______, _______, _______, TD_COMM, KC_1, KC_2, KC_3, KC_PLUS}, +#ifdef THUMB_0 + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0, LT_EQL, ___x___, ___x___, ___x___}, +#else + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL, LT_0, ___x___, ___x___, ___x___}, +#endif + }, + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | { | & | ? | : | } | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | ( | $ | % | ^ | ) | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | [ | < | ~ | > | ] | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | \ | | | | | | + // '-----------------------------------------------------------------------------------' + + [_NUMSYM] = { + {_______, _______, _______, ___x___, _______, _______, _______, TD_LCBR, KC_AMPR, KC_QUES, KC_COLN, KC_RCBR}, + {___x___, ___x___, ___x___, ___fn__, _______, _______, _______, TD_LPRN, KC_DLR, KC_PERC, KC_CIRC, KC_RPRN}, + {_______, _______, _______, ___x___, _______, _______, _______, TD_LBRC, KC_LT, KC_TILD, KC_GT, KC_RBRC}, + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_BSLS, KC_PIPE, ___x___, ___x___, ___x___}, + }, +#endif + +// ............ .................................................. Function Keys + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | F7 | F8 | F9 | F12 | + // |-----------------------------------------------------------------------------------| + // | Ctrl | GUI | Alt | Shift| | | | | F4 | F5 | F6 | F11 | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | F1 | F2 | F3 | F10 | + // |-----------------------------------------------------------------------------------| + // | | | | | | f() | | + | | | | | + // | | | | | f() | | | + | | | | | see _PLOVER + // '-----------------------------------------------------------------------------------' + + [_FNCKEY] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7, KC_F8, KC_F9, KC_F12 }, + {OS_CTL, OS_GUI, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_F4, KC_F5, KC_F6, KC_F11 }, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1, KC_F2, KC_F3, KC_F10 }, + {_______, _______, _______, _______, ___fn__, ___fn__, _______, KC_PLUS, _______, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/altgr/common/plover_keybind.h b/keyboards/planck/keymaps/altgr/common/plover_keybind.h new file mode 100644 index 00000000000..cb4ef92ef84 --- /dev/null +++ b/keyboards/planck/keymaps/altgr/common/plover_keybind.h @@ -0,0 +1,9 @@ + +// simple window manager specific plover keybind hook + +// toggle plover application, see herbstluftwm/config/appbinds +register_code (KC_LGUI); +register_code (KC_LCTL); +tap_key (KC_EQL); +unregister_code(KC_LCTL); +unregister_code(KC_LGUI); diff --git a/keyboards/planck/keymaps/altgr/common/sounds.h b/keyboards/planck/keymaps/altgr/common/sounds.h new file mode 100644 index 00000000000..1bfc7a6da0c --- /dev/null +++ b/keyboards/planck/keymaps/altgr/common/sounds.h @@ -0,0 +1,14 @@ + +// ................................................................ Audio Sounds + +#ifdef AUDIO_ENABLE +float song_startup [][2] = SONG(STARTUP_SOUND); +float song_colemak [][2] = SONG(COLEMAK_SOUND); +float song_qwerty [][2] = SONG(QWERTY_SOUND); +float song_plover [][2] = SONG(PLOVER_SOUND); +float song_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float song_caps_on [][2] = SONG(CAPS_LOCK_ON_SOUND); +float song_caps_off [][2] = SONG(CAPS_LOCK_OFF_SOUND); +float music_scale [][2] = SONG(MUSIC_SCALE_SOUND); +float song_goodbye [][2] = SONG(GOODBYE_SOUND); +#endif diff --git a/keyboards/planck/keymaps/altgr/common/steno_layout.h b/keyboards/planck/keymaps/altgr/common/steno_layout.h new file mode 100644 index 00000000000..ab4a6fe011c --- /dev/null +++ b/keyboards/planck/keymaps/altgr/common/steno_layout.h @@ -0,0 +1,39 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ...................................................................... Plover +#ifdef STENO_ENABLE + // ,-----------------------------------------------------------------------------------. + // | # | # | # | # | # | # | # | # | # | # | # | # | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Base | S | T | P | H | * | * | F | P | L | T | D | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Base | S | K | W | R | * | * | R | B | G | S | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | A | O | E | U | | + // `-----------------------------------------------------------------------------------' + + [_PLOVER] = { + {STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC }, + {BASE1, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR }, + {BASE2, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR }, + {_______, _______, _______, PS_STNA, PS_STNO, _______, _______, PS_STNE, PS_STNU, _______, _______, _______}, + }, +#else + // ,-----------------------------------------------------------------------------------. + // | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Base | S | T | P | H | * | * | F | P | L | T | D | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Base | S | K | W | R | * | * | R | B | G | S | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | A | O | E | U | | + // `-----------------------------------------------------------------------------------' + + [_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {BASE1, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {BASE2, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {_______, _______, _______, LT_C, LT_V, _______, _______, LT_N, LT_M, _______, _______, _______}, + }, +#endif diff --git a/keyboards/planck/keymaps/altgr/common/symbol_guifn_layout.h b/keyboards/planck/keymaps/altgr/common/symbol_guifn_layout.h new file mode 100644 index 00000000000..79861087075 --- /dev/null +++ b/keyboards/planck/keymaps/altgr/common/symbol_guifn_layout.h @@ -0,0 +1,75 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ..................................................... Symbol Navigation Layer +#ifdef SHIFT_SYMBOLS + // .-----------------------------------------------------------------------------------. + // | | ~ | * | & | | | | | Home | Up | End | PgUp | + // |-----------------------------------------------------------------------------------| + // | GUI | ^ | % | $ | | | | | Left | Down | Right| PgDn | + // |-----------------------------------------------------------------------------------| + // | | # | @ | ! | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | |Adjust| \ | | f() | | + // '-----------------------------------------------------------------------------------' + + [_SYMBOL] = { + {_______, KC_TILD, KC_ASTR, KC_AMPR, _______, ___x___, ___x___, _______, KC_HOME, KC_UP, KC_END, KC_PGUP}, + {OS_GUI, SM_CIRC, SM_PERC, SM_DLR, _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN}, + {_______, KC_HASH, KC_AT, KC_EXLM, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {___x___, ___x___, ___x___, ADJUST, LT_BSLS, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___}, + }, +#else + // .-----------------------------------------------------------------------------------. + // | { | . | * | & | } | | | | Home | Up | End | PgUp | + // |-----------------------------------------------------------------------------------| + // | ( | ^ | % | $ | ) | | | | Left | Down | Right| PgDn | + // |-----------------------------------------------------------------------------------| + // | [ | # | @ | ! | ] | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | \ | | f() | | + // '-----------------------------------------------------------------------------------' + + [_SYMBOL] = { + {KC_LCBR, KC_DOT, KC_ASTR, KC_AMPR, TD_RCBR, _______, _______, _______, KC_HOME, KC_UP, KC_END, KC_PGUP}, + {SM_LPRN, SM_CIRC, SM_PERC, SM_DLR, TD_RPRN, _______, _______, _______, LT_LFTX, KC_DOWN, KC_RGHT, KC_PGDN}, + {KC_LBRC, KC_HASH, KC_AT, KC_EXLM, TD_RBRC, _______, _______, _______, _______, _______, _______, _______}, + {___x___, ___x___, ___x___, SL_PIPE, LT_BSLS, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___}, + }, + + // .-----------------------------------------------------------------------------------. + // | | ? | + | ~ | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | < | = | > | | | | | f() | | | | + // |-----------------------------------------------------------------------------------| + // | | 3 | 2 | 1 | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | | f() | | + // '-----------------------------------------------------------------------------------' + + [_SYMREG] = { + {___x___, KC_QUES, KC_PLUS, KC_TILD, ___x___, _______, _______, _______, ___x___, ___x___, ___x___, ___x___}, + {___x___, KC_LT, KC_EQL, TD_RNGL, ___x___, _______, _______, _______, ___fn__, ___x___, ___x___, ___x___}, + {___x___, KC_3, KC_2, KC_1, ___x___, _______, _______, _______, _______, _______, _______, _______}, + {___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___}, + }, +#endif + +// ............................................................... Mouse Actions + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | Left | Up | Right| Up | + // |-----------------------------------------------------------------------------------| + // | | Btn3 | Btn2 | Btn1 | | | | | Left | Down | Right| Down | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | f() | | f() | | + // '-----------------------------------------------------------------------------------' + + [_MOUSE] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U}, + {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D}, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, ___fn__, _______, _______, _______, ___fn__, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/altgr/common/tapdance.h b/keyboards/planck/keymaps/altgr/common/tapdance.h new file mode 100644 index 00000000000..d778286bf1e --- /dev/null +++ b/keyboards/planck/keymaps/altgr/common/tapdance.h @@ -0,0 +1,49 @@ + +// tap dance keys +enum tap_dance { + _CAPS = 0 + ,_COLN + ,_COMM + ,_DOT + ,_DQOT + ,_ENT + ,_EQL + ,_GRV + ,_GT + ,_LBRC + ,_LCBR + ,_LPRN + ,_LT + ,_PRIV + ,_QUOT + ,_RBRC + ,_RCBR + ,_RNGL + ,_RPRN + ,_SEND + ,_SPC + ,_TILD +}; + +#define TD_CAPS TD(_CAPS) +#define TD_COLN TD(_COLN) +#define TD_COMM TD(_COMM) +#define TD_DOT TD(_DOT) +#define TD_DQOT TD(_DQOT) +#define TD_ENT TD(_ENT) +#define TD_EQL TD(_EQL) +#define TD_GRV TD(_GRV) +#define TD_GT TD(_GT) +#define TD_LBRC TD(_LBRC) +#define TD_LCBR TD(_LCBR) +#define TD_LPRN TD(_LPRN) +#define TD_LT TD(_LT) +#define TD_PRIV TD(_PRIV) // compile time macro string, provided in private_string.h +#define TD_QUOT TD(_QUOT) +#define TD_RBRC TD(_RBRC) +#define TD_RCBR TD(_RCBR) +#define TD_RNGL TD(_RNGL) +#define TD_RPRN TD(_RPRN) +#define TD_SEND TD(_SEND) // config.h defined macro string +#define TD_SPC TD(_SPC) // see process_record_user() for extended handling of Spc +#define TD_TILD TD(_TILD) diff --git a/keyboards/planck/keymaps/altgr/common/toggle_layout.h b/keyboards/planck/keymaps/altgr/common/toggle_layout.h new file mode 100644 index 00000000000..713d27bbcfc --- /dev/null +++ b/keyboards/planck/keymaps/altgr/common/toggle_layout.h @@ -0,0 +1,102 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ......................................................... Number Keypad Layer + + // .-----------------------------------------------------------------------------------. + // | | F | E | D | | | | / | 7 | 8 | 9 | * | + // |-----------------------------------------------------------------------------------| + // | GUI | C | B | A | | | | . | 4 | 5 | 6 | - | + // |-----------------------------------------------------------------------------------| + // | | # | G | \ | | | | , | 1 | 2 | 3 | + | + // |-----------------------------------------------------------------------------------| + // | | | | f() | Space| | | 0 | = | | | | + // | | | | f() | Space| | | = | 0 | | | | + // '-----------------------------------------------------------------------------------' + + [_TTNUMBER] = { + {_______, KC_F, MT_E, KC_D, _______, ___x___, ___x___, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR}, + {OS_GUI, GT_C, AT_B, ST_A, _______, ___x___, ___x___, TD_DOT, KC_4, KC_5, KC_6, KC_MINS}, + {_______, KC_HASH, SM_G, KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1, KC_2, KC_3, KC_PLUS}, +#ifdef THUMB_0 + {_______, _______, _______, TT_ESC, KC_SPC, _______, _______, KC_0, LT_EQL, _______, _______, _______}, +#else + {_______, _______, _______, TT_ESC, KC_SPC, _______, _______, KC_EQL, LT_0, _______, _______, _______}, +#endif + }, + +// ............ .................................................. Function Keys + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | F7 | F8 | F9 | F12 | + // |-----------------------------------------------------------------------------------| + // | GUI | Ctrl | Alt | Shift| | | | | F4 | F5 | F6 | F11 | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | F1 | F2 | F3 | F10 | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | + | | | | | + // '-----------------------------------------------------------------------------------' + + [_TTFNCKEY] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7, KC_F8, KC_F9, KC_F12 }, + {OS_GUI, OS_CTL, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_F4, KC_F5, KC_F6, KC_F11 }, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1, KC_F2, KC_F3, KC_F10 }, + {_______, _______, _______, TT_ESC, _______, _______, _______, KC_PLUS, _______, _______, _______, _______}, + }, + +// ....................................................................... Regex + + // ,-----------------------------------------------------------------------------------. + // | | ~ | { | } | & | | | % | [ | ] | @ | | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | | ^ | < | > | ? | | | | | ( | ) | $ | | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | | : | ! | = | / | | | \ | * | . | # | | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | | | f() | - | | | + | Space| | | | + // `-----------------------------------------------------------------------------------' + + [_TTREGEX] = { + {___x___, KC_TILD, KC_LCBR, KC_RCBR, KC_AMPR, ___x___, ___x___, KC_PERC, KC_LBRC, KC_RBRC, KC_AT, ___x___}, + {___x___, KC_CIRC, KC_LT, KC_GT, KC_QUES, ___x___, ___x___, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, ___x___}, + {___x___, KC_COLN, KC_EXLM, KC_EQL, KC_SLSH, ___x___, ___x___, KC_BSLS, KC_ASTR, KC_DOT, KC_HASH, ___x___}, + {_______, _______, _______, TT_ESC, KC_MINS, _______, _______, KC_PLUS, KC_SPC, _______, _______, _______}, + }, + +// ............................................................ Navigation Layer + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | Home | Up | End | PgUp | + // |-----------------------------------------------------------------------------------| + // | GUI | Ctrl | Alt | Shift| | | | | Left | Down | Right| PgDn | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | | | | | | + // '-----------------------------------------------------------------------------------' + + [_TTCURSOR] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_HOME, KC_UP, KC_END, KC_PGUP}, + {OS_GUI, OS_CTL, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN}, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {_______, _______, _______, TT_ESC, _______, _______, _______, _______, _______, _______, _______, _______}, + }, + +// ............................................................... Mouse Actions + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | Left | Up | Right| Up | + // |-----------------------------------------------------------------------------------| + // | | Btn3 | Btn2 | Btn1 | | | | | Left | Down | Right| Down | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | | | | | | + // '-----------------------------------------------------------------------------------' + + [_TTMOUSE] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U}, + {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D}, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {_______, _______, _______, TT_ESC, _______, _______, _______, _______, _______, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/altgr/config.h b/keyboards/planck/keymaps/altgr/config.h new file mode 100644 index 00000000000..d55258c02bd --- /dev/null +++ b/keyboards/planck/keymaps/altgr/config.h @@ -0,0 +1,50 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// required because lower/raise modifiers are redefined by colemak-dh +#define PREVENT_STUCK_MODIFIERS + +// tap dance key press termination interval +#define TAPPING_TERM 250 + +// smooth mouse motion +// #define MOUSEKEY_INTERVAL 20 +// #define MOUSEKEY_DELAY 0 +// #define MOUSEKEY_TIME_TO_MAX 60 +// #define MOUSEKEY_MAX_SPEED 7 +// #define MOUSEKEY_WHEEL_DELAY 0 + +// compile time macro string, see functions/hardware planck script (undefine otherwise) +#define PRIVATE_STRING + +// compile time macro string, must be in quotes +#define PUBLIC_STRING ":%s/arch=(.*)/arch=('any')\n" + +// thumb key tap-shift() double tap: one shot shift (0) off (1) on +#define DT_SHIFT 1 + +// number layer 0 position KEYPAD_0, THUMB_0 +#define THUMB_0 + +// home block shift symbol clustes defined (no overlays required for extended symbols, undefine otherwise) +#define SHIFT_SYMBOLS + +// center column TT assignments (undefine for OSM chords) +#define CENTER_TT +#define TAPPING_TOGGLE 1 + +// home row modifiers +#define HOME_MODS +// fix dual function timing +#define PERMISSIVE_HOLD +#define IGNORE_MOD_TAP_INTERRUPT + +// layout ADNW*, BEAKL*, COLEKA*, QWERTY (default) +#define BEAKLGR + +// sync app with window manager keybind hook defined in plover_keybind.h +#define PLOVER_KEYBIND + +#endif diff --git a/keyboards/planck/keymaps/altgr/keymap.c b/keyboards/planck/keymaps/altgr/keymap.c new file mode 100644 index 00000000000..516f481fc09 --- /dev/null +++ b/keyboards/planck/keymaps/altgr/keymap.c @@ -0,0 +1,490 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. +// +// To flash planck firmware +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// Reset keyboard or press hw reset button on base (hole) +// +// cd qmk_firmware/keyboards/planck +// sudo make KEYMAP=sdothum dfu +// +// sudo make clean (good practice before flashing) +// sudo make KEYMAP=sdothum (to compile check) +// +// Package requirements (for arch linux) +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// avr-gcc-atmel +// avr-libc-atmel +// dfu-programmer +// +// Notes +// ▔▔▔▔▔ +// ** E R G O W I D E S P L I T ** Layout +// +// Autocompletion tap dance key pairs (),[],{} are available from the +// number/symbol layer, as well as, numerous (un)shift key values +// +// The navigation pad provides a single hand right thumb activated cluster +// with left hand modifiers +// +// #define PRIVATE_STRING includes private_string.h, a user defined code +// block for the PRIV tap dance e.g. SEND_STRING("secret messape"), +// see function private() +// +// Modifier clusters +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// The num and sym keys together access the navigation pad layer +// +// ,-----------------------------------------------------------------------------------. +// | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| +// `-----------------------------------------------------------------------------------' +// +// Hint +// ▔▔▔▔ +// For sculpted keycaps such as Cherry or OEM profile, reverse the Alt, Num, +// Shift, Shift, Nav, Sym keycaps for more ergonomic thumb orientation and +// actuation +// +// Code +// ▔▔▔▔ +// This source is shamelessly based on the "default" planck layout +// +// #ifdef/#endif block structures are not indented, as syntax highlighting +// in vim is sufficient for identification +// +// c++ commenting style is used throughout +// +// Change history +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// See http://thedarnedestthing.com/planck%20constant +// See http://thedarnedestthing.com/planck%20done + + + +// === N O T E === +// +// sudo CPATH=/common make ... + + +#include "config.h" +#include "planck.h" +#include "action_layer.h" +#ifdef STENO_ENABLE +#include "keymap_steno.h" +#endif +#ifdef AUDIO_ENABLE +#include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +enum planck_layers { + _BASE = 0 + ,_SHIFT + ,_LSHIFT + ,_RSHIFT + ,_PLOVER + ,_NUMBER + ,_SYMBOL + ,_FNCKEY + ,_MOUSE +#ifdef CENTER_TT + ,_TTNUMBER + ,_TTREGEX + ,_TTFNCKEY + ,_TTCURSOR + ,_TTMOUSE +#endif +#ifndef SHIFT_SYMBOLS + ,_NUMSYM + ,_SYMREG +#endif + ,_EDIT + ,_QWERTY + ,_ADJUST + ,_END_LAYERS +}; + +enum planck_keycodes { + BASE = SAFE_RANGE + ,BASE1 + ,BASE2 + ,PLOVER + ,PLOEXIT + ,SM_CIRC // pseudo GUI_T(S(KC_6)) for shifted key-codes, see process_record_user() + ,SM_DLR // pseudo SFT_T(S(KC_4)) for shifted key-codes, see process_record_user() + ,SM_G // pseudo MT (MOD_LALT | MOD_LSFT, S(KC_G)) for shifted key-codes, see process_record_user() + ,SM_K // pseudo MT (MOD_LGUI | MOD_LSFT, S(KC_K)) for shifted key-codes, see process_record_user() + ,SM_PERC // pseudo ALT_T(S(KC_5)) for shifted key-codes, see process_record_user() + ,SM_LPRN // pseudo CTL_T(S(KC_9)) for shifted key-codes, see process_record_user() + ,SM_W // pseudo MT (MOD_LGUI | MOD_LSFT, S(KC_W)) for shifted key-codes, see process_record_user() + ,SL_LEFT // pseudo LT (_MOUSE, S(KC_LEFT)) for shifted key-codes, see process_record_user() + ,SP_DEL // pseudo LT (_MOUSE, KC_DEL) for shifted key-codes, see process_record_user() + ,SL_PIPE // pseudo LT (_ADJUST, S(KC_BSLS)) for shifted key-codes, see process_record_user() + ,SL_TAB // pseudo LT (_FNCKEY, S(KC_TAB)) for shifted key-codes, see process_record_user() +#ifdef CENTER_TT + ,TT_ESC +#endif +#ifdef STENO_ENABLE + ,PS_STNA = STN_A + ,PS_STNO = STN_O + ,PS_STNE = STN_E + ,PS_STNU = STN_U +#else + ,LT_C = LT (_NUMBER, KC_C) + ,LT_V = LT (_FNCKEY, KC_V) + ,LT_N = LT (_EDIT, KC_N) + ,LT_M = LT (_SYMBOL, KC_M) +#endif + ,PS_BASE +}; + +// modifier keys +#define AT_B ALT_T(KC_B) +#define AT_DOWN ALT_T(KC_DOWN) +#define CT_RGHT CTL_T(KC_RGHT) +#define GT_C GUI_T(KC_C) +#define GT_UP GUI_T(KC_UP) +#define MT_E MT (MOD_LCTL | MOD_LALT, KC_E) +#define MT_X MT (MOD_LALT | MOD_LSFT, KC_X) +#define ST_A SFT_T(KC_A) +#ifdef HOME_MODS +#define HOME_K GUI_T(KC_K) +#define HOME_H CTL_T(KC_H) +#define HOME_E ALT_T(KC_E) +#define HOME_A SFT_T(KC_A) +#if defined(BEAKLMU) || defined(BEAKLSP) || defined(BEAKLGR) +#define HOME_T SFT_T(KC_T) +#define HOME_R ALT_T(KC_R) +#define HOME_S CTL_T(KC_S) +#define HOME_W GUI_T(KC_W) +#else +#define HOME_T SFT_T(KC_T) +#define HOME_S ALT_T(KC_S) +#define HOME_N GUI_T(KC_N) +#define HOME_B CTL_T(KC_B) +#endif +#else +#define HOME_K KC_K +#define HOME_H KC_H +#define HOME_E KC_E +#define HOME_A KC_A +#define HOME_T KC_T +#define HOME_S KC_S +#define HOME_N KC_N +#define HOME_B KC_B +#endif + +#define S_DOWN S (KC_DOWN) +#define S_LEFT S (KC_LEFT) +#define S_RGHT S (KC_RGHT) +#define S_TAB S (KC_TAB) +#define S_UP S (KC_UP) + +#include "tapdance.h" + +// keycodes +#define ___x___ KC_TRNS +#define ___fn__ KC_TRNS +#ifdef _______ +#undef _______ +#endif +#define _______ KC_NO + +#define COPY LCTL(KC_C) +#define CUT LCTL(KC_X) +#define EOT LCTL(KC_D) +#define NAK LCTL(KC_U) +#define PASTE LCTL(KC_V) +#define UNDO LCTL(KC_Z) +#define TMCOPY LALT(LCTL(KC_C)) +#define TMPASTE LALT(LCTL(KC_V)) +#define LT_BSLS LT (_MOUSE, KC_BSLS) // see process_record_user() for extended handling +#define LT_BSPC LT (_EDIT, KC_BSPC) +#define SP_LEFT LT (_EDIT, KC_LEFT) +#define LT_ESC LT (_NUMBER, KC_ESC) +#define LT_LEFT LT (_SYMBOL, KC_LEFT) // see process_record_user() for extended handling +#define SP_BSPC LT (_SYMBOL, KC_BSPC) // see process_record_user() for extended handling +#define LT_TAB LT (_FNCKEY, KC_TAB) +#define LT_INS LT (_FNCKEY, KC_INS) +#define LT_ALTG LT (_FNCKEY, KC_RALT) +#define ADJUST MO (_ADJUST) +#define OS_ALT OSM (MOD_LALT) +#define OS_CTL OSM (MOD_LCTL) +#define OS_GUI OSM (MOD_LGUI) +#define OS_SFT OSM (MOD_LSFT) +#define OS_CALT OSM (MOD_LALT | MOD_LCTL) +#define OS_CGUI OSM (MOD_LGUI | MOD_LCTL) +#define OS_CSFT OSM (MOD_LSFT | MOD_LCTL) +#define OS_SALT OSM (MOD_LALT | MOD_LSFT) +#define OS_SGUI OSM (MOD_LGUI | MOD_LSFT) + +#ifdef CENTER_TT +#ifdef BEAKLSP +#define CNTR_TL OSM (MOD_LSFT) +#else +#define CNTR_TL TT (_TTFNCKEY) +#endif +#define CNTR_TR KC_CAPS +#define CNTR_HL TT (_TTCURSOR) +#define CNTR_HR TT (_TTMOUSE) +#define CNTR_BL TT (_TTNUMBER) +#define CNTR_BR TT (_TTREGEX) +#else +#define CNTR_TL OSM (MOD_LALT | MOD_LCTL) +#define CNTR_TR OSM (MOD_LGUI | MOD_LCTL) +#define CNTR_HL OSM (MOD_LALT | MOD_LSFT) +#define CNTR_HR OSM (MOD_LGUI | MOD_LSFT) +#define CNTR_BL TD (_CAPS) +#define CNTR_BR OSM (MOD_LSFT | MOD_LCTL) +#endif + +#ifdef THUMB_0 +#define LT_EQL LT (_ADJUST, KC_EQL) +#else +#define LT_0 LT (_ADJUST, KC_0) +#endif +#ifndef SHIFT_SYMBOLS +#define LT_A LT (_NUMSYM, KC_A) +#define LT_LFTX LT (_SYMREG, KC_LEFT) +#endif + +// ........................................................ Default Alpha Layout + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +#include "beakl.h" +#include "colemak.h" +#include "qwerty.h" +#include "steno_layout.h" + +// ...................................................... Number / Function Keys + +#include "number_fkey_layout.h" + +// ......................................................... Symbol / Navigation + +#include "symbol_guifn_layout.h" + +// ............................................................... Toggle Layers + +#ifdef CENTER_TT +#include "toggle_layout.h" +#endif + +// ......................................................... Short Cuts / Adjust + +#include "chord_layout.h" + +}; + +// ...................................................................... Sounds + +#include "sounds.h" + +// ........................................................... User Keycode Trap + +#include "keycode_functions.h" + +#define BASE_1 1 +#define BASE_2 2 +#define BASE_12 3 +static uint8_t base_n = 0; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + switch (keycode) { + case BASE1: + if (record->event.pressed) { + base_n = base_n | BASE_1; + if (base_n == BASE_12) { + base_layer(); + } + } + else { + base_n = base_n & ~BASE_1; + } + return false; + case BASE2: + if (record->event.pressed) { + base_n = base_n | BASE_2; + if (base_n == BASE_12) { + base_layer(); + } + } + else { + base_n = base_n & ~BASE_2; + } + return false; + case AT_DOWN: +#ifdef HOME_MODS + case HOME_E: +#if defined(BEAKLMU) || defined(BEAKLSP) || defined(BEAKLGR) + case HOME_R: +#else + case HOME_S: +#endif +#endif + tap_mods(record, KC_LALT); + break; + case CT_RGHT: +#ifdef HOME_MODS + case HOME_K: +#if defined(BEAKLMU) || defined(BEAKLSP) || defined(BEAKLGR) + case HOME_W: +#else + case HOME_B: +#endif +#endif + tap_mods(record, KC_LGUI); + break; + case GT_UP: +#ifdef HOME_MODS + case HOME_H: +#if defined(BEAKLMU) || defined(BEAKLSP) || defined(BEAKLGR) + case HOME_S: +#else + case HOME_N: +#endif +#endif + tap_mods(record, KC_LCTL); + break; +#ifdef HOME_MODS + case HOME_A: + case HOME_T: + tap_mods(record, KC_LSFT); + break; +#endif +#ifdef CENTER_TT + case TT_ESC: + clear_tt(); // exit TT layer + return false; +#endif + case LT_ESC: +#ifdef CENTER_TT + if (tt_keycode != 0) { + clear_tt(); // exit TT layer + return false; + } +#endif + tap_layer(record, _NUMBER); + break; + case LT_LEFT: + case SP_BSPC: + tap_layer(record, _SYMBOL); + // LT (_SYMBOL, KC_LEFT) left right combination layer + thumb_layer(record, RIGHT, 0, 0, _SYMBOL, _LSHIFT); + break; + case OS_ALT: + tap_mods(record, KC_LALT); + break; + case OS_CTL: + tap_mods(record, KC_LCTL); + break; + case OS_GUI: + tap_mods(record, KC_LGUI); + break; + case SM_CIRC: + // GUI_T(S(KC_6)) + mt_shift(record, KC_LGUI, 0, KC_6); + break; + case SM_DLR: + // SFT_T(S(KC_4)) + mt_shift(record, KC_LSFT, 0, KC_4); + break; + case SM_G: + // MT(MOD_LALT | MOD_LSFT, S(KC_G)) + mt_shift(record, KC_LALT, KC_LSFT, KC_G); + break; + case SM_K: + // MT(MOD_LGUI | MOD_LSFT, S(KC_K)) + mt_shift(record, KC_LGUI, KC_LSFT, KC_K); + break; + case SM_W: + // MT(MOD_LGUI | MOD_LSFT, S(KC_W)) + mt_shift(record, KC_LGUI, KC_LSFT, KC_W); + break; + case SM_LPRN: + // CTL_T(S(KC_9)) + mt_shift(record, KC_LCTL, 0, KC_9); + break; + case SM_PERC: + // ALT_T(S(KC_5)) + mt_shift(record, KC_LALT, 0, KC_5); + break; + case LT_BSLS: + tap_layer(record, _MOUSE); + // LT (_MOUSE, KC_BSLS) left right combination layer, see #define LT_BSLS + thumb_layer(record, LEFT, 0, 0, _MOUSE, _SYMBOL); + break; + case SL_LEFT: + tap_layer(record, _MOUSE); + // LT (_MOUSE, S(KC_LEFT)) left right combination layer + thumb_layer(record, RIGHT, SHIFT, KC_LEFT, _MOUSE, _LSHIFT); + break; + case SP_DEL: + tap_layer(record, _MOUSE); + // LT (_MOUSE, S(KC_LEFT)) left right combination layer + thumb_layer(record, RIGHT, NOSHIFT, KC_DEL, _MOUSE, _LSHIFT); + break; + case SL_PIPE: + // LT (_ADJUST, S(KC_BSLS)) emulation + lt_shift(record, KC_BSLS, _ADJUST); + break; + case SL_TAB: + // LT (_FNCKEY, S(KC_TAB)) emulation + lt_shift(record, KC_TAB, _FNCKEY); + break; + case TD_ENT: + tap_layer(record, _RSHIFT); + // LT (_RSHIFT, KC_ENT) emulation, see tap dance enter + break; + case TD_SPC: + tap_layer(record, _LSHIFT); + // LT (_LSHIFT, KC_SPC) left right combination layer, see tap dance TD_SPC + thumb_layer(record, LEFT, 0, 0, _LSHIFT, _SYMBOL); + break; +#ifdef CENTER_TT + case CNTR_TL: + case CNTR_TR: + case CNTR_HL: + case CNTR_HR: + case CNTR_BL: + case CNTR_BR: + if (tt_keycode != keycode && tt_keycode != 0) { + clear_tt(); // return to base layer first if different TT layer selected + } + tt_keycode = keycode; + break; +#endif +// #ifdef STENO_ENABLE +// case PS_STNA: +// stn_layer(record, STN_A, _NUMBER); +// break; +// case PS_STNO: +// stn_layer(record, STN_O, _FNCKEY); +// break; +// case PS_STNE: +// stn_layer(record, STN_E, _EDIT); +// break; +// case PS_STNU: +// stn_layer(record, STN_U, _SYMBOL); +// break; +// #endif + case PS_BASE: + if (record->event.pressed) { + base_layer(); + } + return false; + case PLOVER: + steno(record); + return false; + case PLOEXIT: + steno_exit(record); + return false; + } + return true; +} + +#include "init.h" diff --git a/keyboards/planck/keymaps/altgr/private_string.h b/keyboards/planck/keymaps/altgr/private_string.h new file mode 100644 index 00000000000..6ea34cc8e87 --- /dev/null +++ b/keyboards/planck/keymaps/altgr/private_string.h @@ -0,0 +1 @@ +SEND_STRING("the keys of enoch"); diff --git a/keyboards/planck/keymaps/altgr/qwerty.h b/keyboards/planck/keymaps/altgr/qwerty.h new file mode 100644 index 00000000000..d11d0478b3f --- /dev/null +++ b/keyboards/planck/keymaps/altgr/qwerty.h @@ -0,0 +1,64 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ...................................................................... Qwerty +#ifdef QWERTY + // ,-----------------------------------------------------------------------------------. + // | Q | W | E | R | T | ^Alt | ^GUI | Y | U | I | O | P | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | S | D | F | G | ↑Alt | ↑GUI | H | J | K | L | ; | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | V | B | Caps |^Shift| N | M | , | . | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_W, KC_E, KC_R, KC_T, CNTR_TL, CNTR_TR, KC_Y, KC_U, KC_I, KC_O, KC_P }, + {KC_A, KC_S, KC_D, KC_F, KC_G, CNTR_HL, CNTR_HR, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, + {KC_Z, KC_X, KC_C, KC_V, KC_B, CNTR_BL, CNTR_BR, KC_N, KC_M, KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)}, + {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), KC_SCLN}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | E | R | T | ^Alt | ^GUI | Y | U | I | O | P | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | S | D | F | G | ↑Alt | ↑GUI | H | J | K | L | : | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | V | B | Caps |^Shift| N | M | / | ? | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | - | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)}, + {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), TD_COLN}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), KC_SLSH, KC_QUES, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_MINS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | E | R | T | ^Alt | ^GUI | Y | U | I | O | P | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | S | D | F | G | ↑Alt | ↑GUI | H | J | K | L | : | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | V | B | Caps |^Shift| N | M | ~ | ` | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | _ | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)}, + {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), TD_COLN}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), TD_TILD, TD_GRV, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_UNDS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + diff --git a/keyboards/planck/keymaps/altgr/readme.md b/keyboards/planck/keymaps/altgr/readme.md new file mode 100644 index 00000000000..58f73e3b445 --- /dev/null +++ b/keyboards/planck/keymaps/altgr/readme.md @@ -0,0 +1,10 @@ +# The sdothum extended Default Planck Layout + +- Colemak-DH layout layer with shift/tab key overlays +- Number and symbol/function key layer +- Hexadecimal keypad layer +- Navigation keypad layer +- Dynamic macro layer +- Autocompletion tap key pairs (),[],{} +- Normalized enter and esc key position across keyboard layers +- Extensive use of tap keys diff --git a/keyboards/planck/keymaps/altgr/rules.mk b/keyboards/planck/keymaps/altgr/rules.mk new file mode 100644 index 00000000000..40f153844c1 --- /dev/null +++ b/keyboards/planck/keymaps/altgr/rules.mk @@ -0,0 +1,26 @@ +# Build Options: +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically + +BOOTMAGIC_ENABLE = no # virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # mouse keys(+4700) +EXTRAKEY_ENABLE = no # audio control and System control(+450) +CONSOLE_ENABLE = no # console for debug(+400) +COMMAND_ENABLE = no # commands for debug and configuration +NKRO_ENABLE = yes # nkey rollover +BACKLIGHT_ENABLE = no # enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # audio output on port C6 +UNICODE_ENABLE = no # unicode +BLUETOOTH_ENABLE = no # enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # enable WS2812 RGB underlight, do not enable this with audio at the same time. +STENO_ENABLE = yes # enable TX Bolt protocol, requires VIRTSER and may not work with mouse keys + +# do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # breathing sleep LED during USB suspend + +TAP_DANCE_ENABLE = yes # enable double tap completion of (),[],{} + +ifndef QUANTUM_DIR +include ../../../../Makefile +endif diff --git a/keyboards/planck/keymaps/hiea/common/chord_layout.h b/keyboards/planck/keymaps/hiea/common/chord_layout.h new file mode 100644 index 00000000000..2c785d56ca7 --- /dev/null +++ b/keyboards/planck/keymaps/hiea/common/chord_layout.h @@ -0,0 +1,41 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// .................................................................. Short Cuts + + // .-----------------------------------------------------------------------------------. + // | | | Copy | Paste| | | | | | | | | + // |--------------------------------------------------------------+------+------+------| + // | Undo | Cut | Copy | Paste| | | | | PRIV | PUB | | | + // |-----------------------------------------------------------------------------------| + // | | | Nak | Eot | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | | | | f() | | | | | | + // | | | | | | | | f() | | | | | see _PLOVER + // '-----------------------------------------------------------------------------------' + + [_EDIT] = { + {_______, _______, TMCOPY, TMPASTE, _______, _______, _______, _______, _______, _______, _______, _______}, + {UNDO, CUT, COPY, PASTE, _______, _______, _______, _______, TD_PRIV, TD_SEND, _______, _______}, + {_______, _______, NAK, EOT, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, ___fn__, ___fn__, _______, _______, _______, _______}, + }, + +// ................................................................ Adjust Layer + + // ,-----------------------------------------------------------------------------------. + // |Plover| | | | | | | | | | | | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // |Aud on| | | | | | | | | | | | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Reset| | | | | | | | | | | | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | | | f() | | | | | f() | | | | + // `-----------------------------------------------------------------------------------' + + [_ADJUST] = { + {PLOVER, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {AU_ON, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, ___fn__, _______, _______, _______, _______, ___fn__, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/hiea/common/init.h b/keyboards/planck/keymaps/hiea/common/init.h new file mode 100644 index 00000000000..6366a19f65e --- /dev/null +++ b/keyboards/planck/keymaps/hiea/common/init.h @@ -0,0 +1,56 @@ + +// ....................................................................... Audio + +void matrix_init_user(void) +{ +#ifdef STENO_ENABLE + steno_set_mode(STENO_MODE_BOLT); // or STENO_MODE_GEMINI +#endif +#ifdef AUDIO_ENABLE + startup_user(); +#endif +} + +#ifdef AUDIO_ENABLE +#ifdef BACKLIGHT_ENABLE +void led_set_user(uint8_t usb_led) +{ + static uint8_t old_usb_led = 0; + _delay_ms(10); // gets rid of tick + if (!is_playing_notes()) { + if ((usb_led & (1<event.pressed) { + key_timer = timer_read(); + register_code(modifier); + if (modifier2) { + register_code(modifier2); + } + } + else { + unregister_code(modifier); + if (modifier2) { + unregister_code(modifier2); + } + if (timer_elapsed(key_timer) < TAPPING_TERM) { + shift_key(keycode); + } + key_timer = 0; + } +} + +// ................................................................... Mod Masks + +// tap dance persistant mods, see process_record_user() +// keyboard_report->mods (?) appears to be cleared by tap dance +static uint8_t mods = 0; + +void tap_mods(keyrecord_t *record, uint16_t keycode) +{ + if (record->event.pressed) { + mods |= MOD_BIT(keycode); + } + else { + mods &= ~(MOD_BIT(keycode)); + } +} + +// (un)register modifiers +void modifier(void (*f)(uint8_t)) +{ + if (mods & MOD_BIT(KC_LCTL)) { + (*f)(KC_LCTL); + } + if (mods & MOD_BIT(KC_LGUI)) { + (*f)(KC_LGUI); + } + if (mods & MOD_BIT(KC_LALT)) { + (*f)(KC_LALT); + } +} + +// .................................................... Triple Dance Shift/Layer + +static uint8_t dt_shift = 0; + +void double_shift(uint16_t keycode, uint8_t layer) +{ + tap_key (keycode); + if (DT_SHIFT) { + // set_oneshot_mods(MOD_LSFT); + // layer_on(layer); + layer_on (_SHIFT); + set_oneshot_layer(_SHIFT, ONESHOT_START); + dt_shift = 1; + } + else { + layer_on(layer); + } +} + +// tap dance LT (LAYER, KEY) emulation with -> and auto-repeat extensions! +void tap_shift(qk_tap_dance_state_t *state, uint16_t keycode, uint8_t layer) +{ + // double tap plus down + if (state->count > 2) { + // double enter shift + if (keycode == KC_ENT) { + tap_key (keycode); + double_shift(keycode, layer); + } + // repeating keycode + else { + register_code(keycode); + } + } + // tap plus down (or double tap): keycode (one shot) shift + else if (state->count > 1) { + double_shift(keycode, layer); + } + // down: shift + else if (state->pressed) { + layer_on(layer); + } + // tap: keycode + else { + modifier(register_code); + tap_key (keycode); + modifier(unregister_code); + } +} + +void tap_reset(uint16_t keycode, uint8_t layer) +{ + unregister_code(keycode); + if (DT_SHIFT && dt_shift) { + clear_oneshot_layer_state(ONESHOT_PRESSED); + dt_shift = 0; + } + else { + layer_off(layer); + } +} + +// augment pseudo LT (_RSHIFT, KC_ENT) handling below for rapid sequences +void enter(qk_tap_dance_state_t *state, void *user_data) +{ + tap_shift(state, KC_ENT, _RSHIFT); +} + +void enter_reset(qk_tap_dance_state_t *state, void *user_data) +{ + tap_reset(KC_ENT, _RSHIFT); +} + +// augment pseudo LT (_LSHIFT, KC_SPC) handling below for rapid sequences +void space(qk_tap_dance_state_t *state, void *user_data) +{ + tap_shift(state, KC_SPC, _LSHIFT); +} + +void space_reset(qk_tap_dance_state_t *state, void *user_data) +{ + tap_reset(KC_SPC, _LSHIFT); +} + +// ......................................................... Triple Dance Insert + +void double_max(uint8_t count, uint8_t shift, uint16_t keycode) +{ + if (shift) { + shift_key(keycode); + if (count > 1) { + shift_key(keycode); + } + } + else { + tap_key(keycode); + if (count > 1) { + tap_key(keycode); + } + } +} + +void colon(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key (KC_SPC); + shift_key(KC_SCLN); + shift_key(KC_SCLN); + tap_key (KC_SPC); + } + else { + double_max(state->count, SHIFT, KC_SCLN); + } + reset_tap_dance(state); +} + +void eql(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key(KC_SPC); + tap_key(KC_SLSH); + tap_key(KC_EQL); + tap_key(KC_SPC); + } + else { + double_max(state->count, NOSHIFT, KC_EQL); + } + reset_tap_dance(state); +} + +void greater(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key (KC_SPC); + tap_key (KC_MINS); + shift_key(KC_DOT); + tap_key (KC_SPC); + } + else { + double_max(state->count, SHIFT, KC_DOT); + } + reset_tap_dance(state); +} + +void lesser(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key (KC_SPC); + shift_key(KC_COMM); + tap_key (KC_MINS); + tap_key (KC_SPC); + } + else { + double_max(state->count, SHIFT, KC_COMM); + } + reset_tap_dance(state); +} + +void tilde(qk_tap_dance_state_t *state, void *user_data) +{ + // double tap plus down: repeating keycode + if (state->count > 2) { + register_code(KC_LSFT); + register_code(KC_GRV); + } + // tap: keycode + else { + shift_key(KC_GRV); + // double tap: unix home directory + if (state->count > 1) { + tap_key(KC_SLSH); + } + } +} + +void tilde_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_GRV); + unregister_code(KC_LSFT); +} + +// ............................................................. Tap Dance Pairs + +// tap dance shift rules +#define S_NEVER 0 +#define S_SINGLE 1 +#define S_DOUBLE 2 +#define S_ALWAYS S_SINGLE | S_DOUBLE + +void symbol_pair(uint8_t shift, uint16_t left, uint16_t right) +{ + if (shift & S_DOUBLE) { + shift_key(left); + shift_key(right); + } + else { + tap_key(left); + tap_key(right); + } +} + +#define CLOSE 1 + +// tap dance symbol pairs +void tap_pair(qk_tap_dance_state_t *state, uint8_t shift, uint16_t left, uint16_t right, uint16_t modifier, uint8_t close) +{ + // triple tap: left right with cursor between symbol pair a la vim :-) + if (state->count > 2) { + symbol_pair(shift, left, right); + tap_key (KC_LEFT); + } + // double tap: left right + else if (state->count > 1) { + symbol_pair(shift, left, right); + } + // down: modifier + else if (state->pressed) { + if (modifier) { + register_code(modifier); + } + } + // tap: left (close: right) + else { + if (shift & S_SINGLE) { + shift_key(close ? right : left); + } + else { + tap_key(close ? right : left); + } + } + if (!modifier) { + reset_tap_dance(state); + } +} + +void doublequote(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_QUOT, KC_QUOT, 0, 0); +} + +void grave(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_GRV, KC_GRV, 0, 0); +} + +void lbrace(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, 0); +} + +void lcurly(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, 0); +} + +void lparen(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_9, KC_0, KC_LCTL, 0); +} + +void lparen_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_LCTL); +} + +void quote(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_QUOT, KC_QUOT, 0, 0); +} + +void rangle(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_COMM, KC_DOT, 0, CLOSE); +} + +void rbrace(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, CLOSE); +} + +void rcurly(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, CLOSE); +} + +void rparen(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_9, KC_0, 0, CLOSE); +} + +void rparen_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_LCTL); +} + +// ............................................................ Tap Dance Insert + +void comma(qk_tap_dance_state_t *state, void *user_data) +{ + tap_key(KC_COMM); + if (state->count > 1) { + tap_key(KC_SPC); + } + reset_tap_dance(state); +} + +void dot(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { + shift_key(KC_COLN); + } + else { + tap_key(KC_DOT); + } + reset_tap_dance(state); +} + +// compile time macro string, see functions/hardware planck script +void private(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { +#ifdef PRIVATE_STRING +#include "private_string.h" +#endif + } + reset_tap_dance(state); +} + +// config.h defined string +void send(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { + SEND_STRING(PUBLIC_STRING); + } + reset_tap_dance(state); +} + +// .......................................................... Tap Dance One Shot + +void caps(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { + tap_key(KC_CAPS); + } + else { + set_oneshot_mods(MOD_LSFT); + register_code (KC_LSFT); // on hold down + } +} + +void caps_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_LSFT); +} + +// ................................................................... Tap Dance + +qk_tap_dance_action_t tap_dance_actions[] = { + [_CAPS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, caps, caps_reset) + ,[_COLN] = ACTION_TAP_DANCE_FN (colon) + ,[_COMM] = ACTION_TAP_DANCE_FN (comma) + ,[_DOT] = ACTION_TAP_DANCE_FN (dot) + ,[_DQOT] = ACTION_TAP_DANCE_FN (doublequote) + ,[_ENT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, enter, enter_reset) + ,[_EQL] = ACTION_TAP_DANCE_FN (eql) + ,[_GRV] = ACTION_TAP_DANCE_FN (grave) + ,[_GT] = ACTION_TAP_DANCE_FN (greater) + ,[_LBRC] = ACTION_TAP_DANCE_FN (lbrace) + ,[_LCBR] = ACTION_TAP_DANCE_FN (lcurly) + ,[_LPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lparen, lparen_reset) + ,[_LT] = ACTION_TAP_DANCE_FN (lesser) + ,[_PRIV] = ACTION_TAP_DANCE_FN (private) + ,[_QUOT] = ACTION_TAP_DANCE_FN (quote) + ,[_RBRC] = ACTION_TAP_DANCE_FN (rbrace) + ,[_RCBR] = ACTION_TAP_DANCE_FN (rcurly) + ,[_RNGL] = ACTION_TAP_DANCE_FN (rangle) + ,[_RPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rparen, rparen_reset) + ,[_SEND] = ACTION_TAP_DANCE_FN (send) + ,[_SPC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, space, space_reset) + ,[_TILD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tilde, tilde_reset) +}; + +// .............................................................. Dynamic Layers + +#define LEFT 1 +#define RIGHT 2 +static uint8_t thumb = 0; + +// LEFT (KC_SPC, S(KC_BSLS)), RIGHT (KC_LEFT, S(KC_LEFT)) opposite thumb combinations, see process_record_user() +// up, up -> _BASE +// up, down -> _SYMBOL +// down, up -> _NUMBER +// down, down -> _MOUSE // see layer keycodes that raise mouse layer +#define THUMBS_DOWN _MOUSE // layer + +static uint8_t overlayer = 0; + +// left right thumb layer combinations +void thumb_layer(keyrecord_t *record, uint8_t side, uint8_t shift, uint16_t keycode, uint8_t thumb_dn_layer, uint8_t thumb_up_layer) +{ + if (record->event.pressed) { + // layer_on via tap_layer(), see process_record_user() + key_timer = timer_read(); + thumb = thumb | side; + } + else { + layer_off(thumb_dn_layer); + // opposite thumb_layer() thumb may have switched effective layer! + if (overlayer) { + layer_off(overlayer); + overlayer = 0; + } + if (!key_press(shift, keycode)) { + layer_off(THUMBS_DOWN); // both thumbs needed + // opposite thumb down? see left right combination layer table above + if (thumb & (side == LEFT ? RIGHT : LEFT)) { + layer_on(thumb_up_layer); + overlayer = thumb_up_layer; + } + } + clear_mods(); + thumb = thumb & ~side; + key_timer = 0; + } +} + +// #ifdef STENO_ENABLE +// // LT for steno keycode +// void stn_layer(keyrecord_t *record, uint16_t keycode, uint8_t layer) +// { +// if (record->event.pressed) { +// key_timer = timer_read(); +// if (keycode) { +// process_steno(keycode, record); +// } +// layer_on(layer); +// } +// else { +// layer_off(layer); +// if (keycode) { +// if (timer_elapsed(key_timer) < TAPPING_TERM) { +// process_steno(keycode, record); +// } +// else { +// // clear pressed state (request push of updated) process_steno.c and .h +// // steno_clear_state(); +// } +// } +// key_timer = 0; +// } +// } +// #endif + +// LT for S(keycode) +void lt_shift(keyrecord_t *record, uint16_t keycode, uint8_t layer) +{ + if (record->event.pressed) { + key_timer = timer_read(); + layer_on(layer); + } + else { + layer_off(layer); + // for shifted keycodes, hence, LT_SHIFT + key_press(SHIFT, keycode); + clear_mods(); + key_timer = 0; + } +} + +// set layer asap to overcome macro latency errors, notably tap dance and LT usage +// this routine inexplicably (?) sets layer_on() faster than can be done in thumb_layer() +void tap_layer(keyrecord_t *record, uint8_t layer) +{ + if (record->event.pressed) { + layer_on(layer); + } + else { + layer_off(layer); + } +} + +// ..................................................................... Keymaps + +// void persistant_default_layer_set(uint16_t default_layer) +// { +// eeconfig_update_default_layer(default_layer); +// default_layer_set (default_layer); +// } + +void clear_layers(void) +{ + uint8_t layer; + for (layer = 0; layer < _END_LAYERS; layer++) { + layer_off(layer); + } +} + +#ifdef CENTER_TT +static uint16_t tt_keycode = 0; // current TT keycode + +void clear_tt(void) +{ + if (tt_keycode == KC_CAPS) { + tap_key(KC_CAPS); // clear capslock + } + tt_keycode = 0; + clear_layers(); + set_single_persistent_default_layer(_BASE); +} +#endif + +// txbolt plover run state +static uint8_t plover = 0; + +void toggle_plover(uint8_t state) +{ + if (plover != state) { +#ifdef PLOVER_KEYBIND +#include "plover_keybind.h" +#endif + plover = state; + } +} + +void base_layer(void) +{ +#ifdef AUDIO_ENABLE + if (plover) { + PLAY_SONG(song_plover_gb); + } + else { + PLAY_SONG(song_qwerty); + } +#endif + clear_layers(); + set_single_persistent_default_layer(_BASE); + toggle_plover(0); +} + +void steno(keyrecord_t *record) +{ + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + PLAY_SONG(song_plover); +#endif + clear_layers(); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + if (!plover) { + toggle_plover(1); + } + } +} + +void steno_exit(keyrecord_t *record) +{ + if (record->event.pressed) { + base_layer(); + toggle_plover(0); + } +} diff --git a/keyboards/planck/keymaps/hiea/common/number_fkey_layout.h b/keyboards/planck/keymaps/hiea/common/number_fkey_layout.h new file mode 100644 index 00000000000..321482b2919 --- /dev/null +++ b/keyboards/planck/keymaps/hiea/common/number_fkey_layout.h @@ -0,0 +1,46 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ......................................................... Number Keypad Layer + + // .-----------------------------------------------------------------------------------. + // | | F | E | D | | | | / | 7 | 8 | 9 | * | + // |-----------------------------------------------------------------------------------| + // | GUI | C | B | A | | | | . | 4 | 5 | 6 | - | + // |-----------------------------------------------------------------------------------| + // | | # | G | \ | | | | , | 1 | 2 | 3 | + | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | 0 | = | | | | + // | | | | f() | | | | = | 0 | | | | + // '-----------------------------------------------------------------------------------' + + [_NUMBER] = { + {_______, KC_F, MT_E, KC_D, _______, ___x___, ___x___, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR}, + {OS_GUI, GT_C, AT_B, ST_A, _______, ___x___, ___x___, TD_DOT, KC_4, KC_5, KC_6, KC_MINS}, + {_______, KC_HASH, SM_G, KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1, KC_2, KC_3, KC_PLUS}, +#ifdef THUMB_0 + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0, LT_EQL, ___x___, ___x___, ___x___}, +#else + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL, LT_0, ___x___, ___x___, ___x___}, +#endif + }, + +// ............ .................................................. Function Keys + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | F7 | F8 | F9 | F12 | + // |-----------------------------------------------------------------------------------| + // | Ctrl | GUI | Alt | Shift| | | | | F4 | F5 | F6 | F11 | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | F1 | F2 | F3 | F10 | + // |-----------------------------------------------------------------------------------| + // | | | | | | f() | | + | | | | | + // | | | | | f() | | | + | | | | | see _PLOVER + // '-----------------------------------------------------------------------------------' + + [_FNCKEY] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7, KC_F8, KC_F9, KC_F12 }, + {OS_GUI, OS_CTL, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_F4, KC_F5, KC_F6, KC_F11 }, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1, KC_F2, KC_F3, KC_F10 }, + {_______, _______, _______, _______, ___fn__, ___fn__, _______, KC_PLUS, _______, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/hiea/common/plover_keybind.h b/keyboards/planck/keymaps/hiea/common/plover_keybind.h new file mode 100644 index 00000000000..cb4ef92ef84 --- /dev/null +++ b/keyboards/planck/keymaps/hiea/common/plover_keybind.h @@ -0,0 +1,9 @@ + +// simple window manager specific plover keybind hook + +// toggle plover application, see herbstluftwm/config/appbinds +register_code (KC_LGUI); +register_code (KC_LCTL); +tap_key (KC_EQL); +unregister_code(KC_LCTL); +unregister_code(KC_LGUI); diff --git a/keyboards/planck/keymaps/hiea/common/sounds.h b/keyboards/planck/keymaps/hiea/common/sounds.h new file mode 100644 index 00000000000..1bfc7a6da0c --- /dev/null +++ b/keyboards/planck/keymaps/hiea/common/sounds.h @@ -0,0 +1,14 @@ + +// ................................................................ Audio Sounds + +#ifdef AUDIO_ENABLE +float song_startup [][2] = SONG(STARTUP_SOUND); +float song_colemak [][2] = SONG(COLEMAK_SOUND); +float song_qwerty [][2] = SONG(QWERTY_SOUND); +float song_plover [][2] = SONG(PLOVER_SOUND); +float song_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float song_caps_on [][2] = SONG(CAPS_LOCK_ON_SOUND); +float song_caps_off [][2] = SONG(CAPS_LOCK_OFF_SOUND); +float music_scale [][2] = SONG(MUSIC_SCALE_SOUND); +float song_goodbye [][2] = SONG(GOODBYE_SOUND); +#endif diff --git a/keyboards/planck/keymaps/hiea/common/steno_layout.h b/keyboards/planck/keymaps/hiea/common/steno_layout.h new file mode 100644 index 00000000000..ab4a6fe011c --- /dev/null +++ b/keyboards/planck/keymaps/hiea/common/steno_layout.h @@ -0,0 +1,39 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ...................................................................... Plover +#ifdef STENO_ENABLE + // ,-----------------------------------------------------------------------------------. + // | # | # | # | # | # | # | # | # | # | # | # | # | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Base | S | T | P | H | * | * | F | P | L | T | D | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Base | S | K | W | R | * | * | R | B | G | S | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | A | O | E | U | | + // `-----------------------------------------------------------------------------------' + + [_PLOVER] = { + {STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC }, + {BASE1, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR }, + {BASE2, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR }, + {_______, _______, _______, PS_STNA, PS_STNO, _______, _______, PS_STNE, PS_STNU, _______, _______, _______}, + }, +#else + // ,-----------------------------------------------------------------------------------. + // | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Base | S | T | P | H | * | * | F | P | L | T | D | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Base | S | K | W | R | * | * | R | B | G | S | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | A | O | E | U | | + // `-----------------------------------------------------------------------------------' + + [_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {BASE1, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {BASE2, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {_______, _______, _______, LT_C, LT_V, _______, _______, LT_N, LT_M, _______, _______, _______}, + }, +#endif diff --git a/keyboards/planck/keymaps/hiea/common/symbol_guifn_layout.h b/keyboards/planck/keymaps/hiea/common/symbol_guifn_layout.h new file mode 100644 index 00000000000..677e46409ba --- /dev/null +++ b/keyboards/planck/keymaps/hiea/common/symbol_guifn_layout.h @@ -0,0 +1,40 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ..................................................... Symbol Navigation Layer + + // .-----------------------------------------------------------------------------------. + // | | ~ | * | & | | | | | Home | Up | End | PgUp | + // |-----------------------------------------------------------------------------------| + // | GUI | ^ | % | $ | | | | | Left | Down | Right| PgDn | + // |-----------------------------------------------------------------------------------| + // | | # | @ | ! | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | |Adjust| \ | | f() | | + // '-----------------------------------------------------------------------------------' + + [_SYMBOL] = { + {_______, KC_TILD, KC_ASTR, KC_AMPR, _______, ___x___, ___x___, _______, KC_HOME, KC_UP, KC_END, KC_PGUP}, + {OS_GUI, SM_CIRC, SM_PERC, SM_DLR, _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN}, + {_______, KC_HASH, KC_AT, KC_EXLM, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {___x___, ___x___, ___x___, ADJUST, LT_BSLS, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___}, + }, + +// ............................................................... Mouse Actions + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | Left | Up | Right| Up | + // |-----------------------------------------------------------------------------------| + // | | Btn3 | Btn2 | Btn1 | | | | | Left | Down | Right| Down | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | f() | | f() | | + // '-----------------------------------------------------------------------------------' + + [_MOUSE] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U}, + {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D}, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, ___fn__, _______, _______, _______, ___fn__, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/hiea/common/tapdance.h b/keyboards/planck/keymaps/hiea/common/tapdance.h new file mode 100644 index 00000000000..d778286bf1e --- /dev/null +++ b/keyboards/planck/keymaps/hiea/common/tapdance.h @@ -0,0 +1,49 @@ + +// tap dance keys +enum tap_dance { + _CAPS = 0 + ,_COLN + ,_COMM + ,_DOT + ,_DQOT + ,_ENT + ,_EQL + ,_GRV + ,_GT + ,_LBRC + ,_LCBR + ,_LPRN + ,_LT + ,_PRIV + ,_QUOT + ,_RBRC + ,_RCBR + ,_RNGL + ,_RPRN + ,_SEND + ,_SPC + ,_TILD +}; + +#define TD_CAPS TD(_CAPS) +#define TD_COLN TD(_COLN) +#define TD_COMM TD(_COMM) +#define TD_DOT TD(_DOT) +#define TD_DQOT TD(_DQOT) +#define TD_ENT TD(_ENT) +#define TD_EQL TD(_EQL) +#define TD_GRV TD(_GRV) +#define TD_GT TD(_GT) +#define TD_LBRC TD(_LBRC) +#define TD_LCBR TD(_LCBR) +#define TD_LPRN TD(_LPRN) +#define TD_LT TD(_LT) +#define TD_PRIV TD(_PRIV) // compile time macro string, provided in private_string.h +#define TD_QUOT TD(_QUOT) +#define TD_RBRC TD(_RBRC) +#define TD_RCBR TD(_RCBR) +#define TD_RNGL TD(_RNGL) +#define TD_RPRN TD(_RPRN) +#define TD_SEND TD(_SEND) // config.h defined macro string +#define TD_SPC TD(_SPC) // see process_record_user() for extended handling of Spc +#define TD_TILD TD(_TILD) diff --git a/keyboards/planck/keymaps/hiea/common/toggle_layout.h b/keyboards/planck/keymaps/hiea/common/toggle_layout.h new file mode 100644 index 00000000000..713d27bbcfc --- /dev/null +++ b/keyboards/planck/keymaps/hiea/common/toggle_layout.h @@ -0,0 +1,102 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ......................................................... Number Keypad Layer + + // .-----------------------------------------------------------------------------------. + // | | F | E | D | | | | / | 7 | 8 | 9 | * | + // |-----------------------------------------------------------------------------------| + // | GUI | C | B | A | | | | . | 4 | 5 | 6 | - | + // |-----------------------------------------------------------------------------------| + // | | # | G | \ | | | | , | 1 | 2 | 3 | + | + // |-----------------------------------------------------------------------------------| + // | | | | f() | Space| | | 0 | = | | | | + // | | | | f() | Space| | | = | 0 | | | | + // '-----------------------------------------------------------------------------------' + + [_TTNUMBER] = { + {_______, KC_F, MT_E, KC_D, _______, ___x___, ___x___, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR}, + {OS_GUI, GT_C, AT_B, ST_A, _______, ___x___, ___x___, TD_DOT, KC_4, KC_5, KC_6, KC_MINS}, + {_______, KC_HASH, SM_G, KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1, KC_2, KC_3, KC_PLUS}, +#ifdef THUMB_0 + {_______, _______, _______, TT_ESC, KC_SPC, _______, _______, KC_0, LT_EQL, _______, _______, _______}, +#else + {_______, _______, _______, TT_ESC, KC_SPC, _______, _______, KC_EQL, LT_0, _______, _______, _______}, +#endif + }, + +// ............ .................................................. Function Keys + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | F7 | F8 | F9 | F12 | + // |-----------------------------------------------------------------------------------| + // | GUI | Ctrl | Alt | Shift| | | | | F4 | F5 | F6 | F11 | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | F1 | F2 | F3 | F10 | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | + | | | | | + // '-----------------------------------------------------------------------------------' + + [_TTFNCKEY] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7, KC_F8, KC_F9, KC_F12 }, + {OS_GUI, OS_CTL, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_F4, KC_F5, KC_F6, KC_F11 }, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1, KC_F2, KC_F3, KC_F10 }, + {_______, _______, _______, TT_ESC, _______, _______, _______, KC_PLUS, _______, _______, _______, _______}, + }, + +// ....................................................................... Regex + + // ,-----------------------------------------------------------------------------------. + // | | ~ | { | } | & | | | % | [ | ] | @ | | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | | ^ | < | > | ? | | | | | ( | ) | $ | | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | | : | ! | = | / | | | \ | * | . | # | | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | | | f() | - | | | + | Space| | | | + // `-----------------------------------------------------------------------------------' + + [_TTREGEX] = { + {___x___, KC_TILD, KC_LCBR, KC_RCBR, KC_AMPR, ___x___, ___x___, KC_PERC, KC_LBRC, KC_RBRC, KC_AT, ___x___}, + {___x___, KC_CIRC, KC_LT, KC_GT, KC_QUES, ___x___, ___x___, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, ___x___}, + {___x___, KC_COLN, KC_EXLM, KC_EQL, KC_SLSH, ___x___, ___x___, KC_BSLS, KC_ASTR, KC_DOT, KC_HASH, ___x___}, + {_______, _______, _______, TT_ESC, KC_MINS, _______, _______, KC_PLUS, KC_SPC, _______, _______, _______}, + }, + +// ............................................................ Navigation Layer + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | Home | Up | End | PgUp | + // |-----------------------------------------------------------------------------------| + // | GUI | Ctrl | Alt | Shift| | | | | Left | Down | Right| PgDn | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | | | | | | + // '-----------------------------------------------------------------------------------' + + [_TTCURSOR] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_HOME, KC_UP, KC_END, KC_PGUP}, + {OS_GUI, OS_CTL, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN}, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {_______, _______, _______, TT_ESC, _______, _______, _______, _______, _______, _______, _______, _______}, + }, + +// ............................................................... Mouse Actions + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | Left | Up | Right| Up | + // |-----------------------------------------------------------------------------------| + // | | Btn3 | Btn2 | Btn1 | | | | | Left | Down | Right| Down | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | | | | | | + // '-----------------------------------------------------------------------------------' + + [_TTMOUSE] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U}, + {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D}, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {_______, _______, _______, TT_ESC, _______, _______, _______, _______, _______, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/hiea/config.h b/keyboards/planck/keymaps/hiea/config.h new file mode 100644 index 00000000000..9bb5e087350 --- /dev/null +++ b/keyboards/planck/keymaps/hiea/config.h @@ -0,0 +1,50 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// required because lower/raise modifiers are redefined by colemak-dh +#define PREVENT_STUCK_MODIFIERS + +// tap dance key press termination interval +#define TAPPING_TERM 250 + +// smooth mouse motion +// #define MOUSEKEY_INTERVAL 20 +// #define MOUSEKEY_DELAY 0 +// #define MOUSEKEY_TIME_TO_MAX 60 +// #define MOUSEKEY_MAX_SPEED 7 +// #define MOUSEKEY_WHEEL_DELAY 0 + +// compile time macro string, see functions/hardware planck script (undefine otherwise) +#define PRIVATE_STRING + +// compile time macro string, must be in quotes +#define PUBLIC_STRING ":%s/arch=(.*)/arch=('any')\n" + +// thumb key tap-shift() double tap: one shot shift (0) off (1) on +#define DT_SHIFT 1 + +// number layer 0 position KEYPAD_0, THUMB_0 +#define THUMB_0 + +// home block shift symbol clustes defined (no overlays required for extended symbols, undefine otherwise) +#define SHIFT_SYMBOLS + +// center column TT assignments (undefine for OSM chords) +#define CENTER_TT +#define TAPPING_TOGGLE 1 + +// home row modifiers +#define HOME_MODS +// fix dual function timing +#define PERMISSIVE_HOLD +#define IGNORE_MOD_TAP_INTERRUPT + +// layout ADNW*, BEAKL*, COLEKA*, QWERTY (default) +#define DEFAULT + +// sync app with window manager keybind hook defined in plover_keybind.h +#define PLOVER_KEYBIND + +#endif diff --git a/keyboards/planck/keymaps/hiea/hiea.h b/keyboards/planck/keymaps/hiea/hiea.h new file mode 100644 index 00000000000..093802aef16 --- /dev/null +++ b/keyboards/planck/keymaps/hiea/hiea.h @@ -0,0 +1,63 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// .................................................................. BEAKL HIEA +#ifdef DEFAULT + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | . |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | K | , | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Ins | Left | Ent | Bksp | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_Z, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_N, KC_M, KC_X }, + {HOME_H, HOME_I, HOME_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, HOME_T, HOME_R, HOME_S, HOME_W }, + {KC_J, KC_SCLN, TD_QUOT, KC_K, KC_COMM, CNTR_BL, CNTR_BR, KC_B, KC_P, KC_L, KC_F, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, TD_ENT, SP_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_K), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, TD_ENT, SP_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | [ | ] | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | ^ | < | > | ~ |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | ! | = | ` | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | ↑Tab | f() | Ins | Left | _ | Del | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), KC_LBRC, KC_RBRC, S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {SM_H, KC_CIRC, TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, S_TAB, ___fn__, LT_INS, S_LEFT, KC_UNDS, SP_DEL, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | { | } | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | ? |Cursor| Mouse| | | ( | ) | $ | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | K | / | Num | Regex| \ | * | . | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Tab | - | Ins | Left | f() | Bksp | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), KC_LCBR, KC_RCBR, S(KC_M), S(KC_X)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, SM_W }, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT, S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_TAB, KC_MINS, LT_INS, S_LEFT, ___fn__, SP_BSPC, S_DOWN, S_UP, S_RGHT }, + }, +#endif diff --git a/keyboards/planck/keymaps/hiea/keymap.c b/keyboards/planck/keymaps/hiea/keymap.c new file mode 100644 index 00000000000..2f573f9a45d --- /dev/null +++ b/keyboards/planck/keymaps/hiea/keymap.c @@ -0,0 +1,429 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. +// +// To flash planck firmware +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// Reset keyboard or press hw reset button on base (hole) +// +// cd qmk_firmware/keyboards/planck +// sudo make KEYMAP=sdothum dfu +// +// sudo make clean (good practice before flashing) +// sudo make KEYMAP=sdothum (to compile check) +// +// Package requirements (for arch linux) +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// avr-gcc-atmel +// avr-libc-atmel +// dfu-programmer +// +// Notes +// ▔▔▔▔▔ +// ** E R G O W I D E S P L I T ** Layout +// +// Autocompletion tap dance key pairs (),[],{} are available from the +// number/symbol layer, as well as, numerous (un)shift key values +// +// The navigation pad provides a single hand right thumb activated cluster +// with left hand modifiers +// +// #define PRIVATE_STRING includes private_string.h, a user defined code +// block for the PRIV tap dance e.g. SEND_STRING("secret messape"), +// see function private() +// +// Modifier clusters +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// The num and sym keys together access the navigation pad layer +// +// ,-----------------------------------------------------------------------------------. +// | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| +// `-----------------------------------------------------------------------------------' +// +// Hint +// ▔▔▔▔ +// For sculpted keycaps such as Cherry or OEM profile, reverse the Alt, Num, +// Shift, Shift, Nav, Sym keycaps for more ergonomic thumb orientation and +// actuation +// +// Code +// ▔▔▔▔ +// This source is shamelessly based on the "default" planck layout +// +// #ifdef/#endif block structures are not indented, as syntax highlighting +// in vim is sufficient for identification +// +// c++ commenting style is used throughout +// +// Change history +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// See http://thedarnedestthing.com/planck%20constant +// See http://thedarnedestthing.com/planck%20done + + + +// === N O T E === +// +// sudo CPATH=/common make ... + + +#include "config.h" +#include "planck.h" +#include "action_layer.h" +#ifdef STENO_ENABLE +#include "keymap_steno.h" +#endif +#ifdef AUDIO_ENABLE +#include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +enum planck_layers { + _BASE = 0 + ,_SHIFT + ,_LSHIFT + ,_RSHIFT + ,_PLOVER + ,_NUMBER + ,_SYMBOL + ,_FNCKEY + ,_MOUSE +#ifdef CENTER_TT + ,_TTNUMBER + ,_TTREGEX + ,_TTFNCKEY + ,_TTCURSOR + ,_TTMOUSE +#endif + ,_EDIT + ,_ADJUST + ,_END_LAYERS +}; + +enum planck_keycodes { + BASE = SAFE_RANGE + ,BASE1 + ,BASE2 + ,PLOVER + ,SM_CIRC // pseudo GUI_T(S(KC_6)) for shifted key-codes, see process_record_user() + ,SM_DLR // pseudo SFT_T(S(KC_4)) for shifted key-codes, see process_record_user() + ,SM_G // pseudo MT (MOD_LALT | MOD_LSFT, S(KC_G)) for shifted key-codes, see process_record_user() + ,SM_H // pseudo MT (MOD_LCTL | MOD_LSFT, S(KC_H)) for shifted key-codes, see process_record_user() + ,SM_PERC // pseudo ALT_T(S(KC_5)) for shifted key-codes, see process_record_user() + ,SM_W // pseudo MT (MOD_LGUI | MOD_LSFT, S(KC_W)) for shifted key-codes, see process_record_user() + ,SL_LEFT // pseudo LT (_MOUSE, S(KC_LEFT)) for shifted key-codes, see process_record_user() + ,SP_DEL // pseudo LT (_MOUSE, KC_DEL) for shifted key-codes, see process_record_user() + ,SL_TAB // pseudo LT (_FNCKEY, S(KC_TAB)) for shifted key-codes, see process_record_user() +#ifdef CENTER_TT + ,TT_ESC +#endif +#ifdef STENO_ENABLE + ,PS_STNA = STN_A + ,PS_STNO = STN_O + ,PS_STNE = STN_E + ,PS_STNU = STN_U +#else + ,LT_C = LT (_NUMBER, KC_C) + ,LT_V = LT (_FNCKEY, KC_V) + ,LT_N = LT (_EDIT, KC_N) + ,LT_M = LT (_SYMBOL, KC_M) +#endif +}; + +// modifier keys +#define AT_B ALT_T(KC_B) +#define AT_DOWN ALT_T(KC_DOWN) +#define CT_RGHT CTL_T(KC_RGHT) +#define GT_C GUI_T(KC_C) +#define GT_UP GUI_T(KC_UP) +#define MT_E MT (MOD_LCTL | MOD_LALT, KC_E) +#define ST_A SFT_T(KC_A) +#ifdef HOME_MODS +#define HOME_H GUI_T(KC_H) +#define HOME_I CTL_T(KC_I) +#define HOME_E ALT_T(KC_E) +#define HOME_A SFT_T(KC_A) +#define HOME_T SFT_T(KC_T) +#define HOME_R ALT_T(KC_R) +#define HOME_S CTL_T(KC_S) +#define HOME_W GUI_T(KC_W) +#else +#define HOME_H KC_H +#define HOME_I KC_I +#define HOME_E KC_E +#define HOME_A KC_A +#define HOME_T KC_T +#define HOME_R KC_R +#define HOME_S KC_S +#define HOME_W KC_W +#endif + +#define S_DOWN S (KC_DOWN) +#define S_LEFT S (KC_LEFT) +#define S_RGHT S (KC_RGHT) +#define S_TAB S (KC_TAB) +#define S_UP S (KC_UP) + +#include "tapdance.h" + +// keycodes +#define ___x___ KC_TRNS +#define ___fn__ KC_TRNS +#ifdef _______ +#undef _______ +#endif +#define _______ KC_NO + +#define COPY LCTL(KC_C) +#define CUT LCTL(KC_X) +#define EOT LCTL(KC_D) +#define NAK LCTL(KC_U) +#define PASTE LCTL(KC_V) +#define UNDO LCTL(KC_Z) +#define TMCOPY LALT(LCTL(KC_C)) +#define TMPASTE LALT(LCTL(KC_V)) +#define LT_BSLS LT (_MOUSE, KC_BSLS) // see process_record_user() for extended handling +#define LT_BSPC LT (_EDIT, KC_BSPC) +#define SP_LEFT LT (_EDIT, KC_LEFT) +#define LT_ESC LT (_NUMBER, KC_ESC) +#define LT_LEFT LT (_SYMBOL, KC_LEFT) // see process_record_user() for extended handling +#define SP_BSPC LT (_SYMBOL, KC_BSPC) // see process_record_user() for extended handling +#define LT_TAB LT (_FNCKEY, KC_TAB) +#define LT_INS LT (_FNCKEY, KC_INS) +#define ADJUST MO (_ADJUST) +#define OS_ALT OSM (MOD_LALT) +#define OS_CTL OSM (MOD_LCTL) +#define OS_GUI OSM (MOD_LGUI) +#define OS_SFT OSM (MOD_LSFT) + +#ifdef CENTER_TT +#define CNTR_TL TT (_TTFNCKEY) +#define CNTR_TR KC_CAPS +#define CNTR_HL TT (_TTCURSOR) +#define CNTR_HR TT (_TTMOUSE) +#define CNTR_BL TT (_TTNUMBER) +#define CNTR_BR TT (_TTREGEX) +#else +#define CNTR_TL OSM (MOD_LALT | MOD_LCTL) +#define CNTR_TR OSM (MOD_LGUI | MOD_LCTL) +#define CNTR_HL OSM (MOD_LALT | MOD_LSFT) +#define CNTR_HR OSM (MOD_LGUI | MOD_LSFT) +#define CNTR_BL TD (_CAPS) +#define CNTR_BR OSM (MOD_LSFT | MOD_LCTL) +#endif + +#ifdef THUMB_0 +#define LT_EQL LT (_ADJUST, KC_EQL) +#else +#define LT_0 LT (_ADJUST, KC_0) +#endif + +// ........................................................ Default Alpha Layout + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +#include "hiea.h" +#include "steno_layout.h" + +// ...................................................... Number / Function Keys + +#include "number_fkey_layout.h" + +// ......................................................... Symbol / Navigation + +#include "symbol_guifn_layout.h" + +// ............................................................... Toggle Layers + +#ifdef CENTER_TT +#include "toggle_layout.h" +#endif + +// ......................................................... Short Cuts / Adjust + +#include "chord_layout.h" + +}; + +// ...................................................................... Sounds + +#include "sounds.h" + +// ........................................................... User Keycode Trap + +#include "keycode_functions.h" + +#define BASE_1 1 +#define BASE_2 2 +#define BASE_12 3 +static uint8_t base_n = 0; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + switch (keycode) { + case BASE1: + if (record->event.pressed) { + base_n = base_n | BASE_1; + if (base_n == BASE_12) { + base_layer(); + } + } + else { + base_n = base_n & ~BASE_1; + } + return false; + case BASE2: + if (record->event.pressed) { + base_n = base_n | BASE_2; + if (base_n == BASE_12) { + base_layer(); + } + } + else { + base_n = base_n & ~BASE_2; + } + return false; + case AT_DOWN: +#ifdef HOME_MODS + case HOME_E: + case HOME_R: +#endif + tap_mods(record, KC_LALT); + break; + case CT_RGHT: +#ifdef HOME_MODS + case HOME_H: + case HOME_W: +#endif + tap_mods(record, KC_LGUI); + break; + case GT_UP: +#ifdef HOME_MODS + case HOME_I: + case HOME_S: +#endif + tap_mods(record, KC_LCTL); + break; +#ifdef HOME_MODS + case HOME_A: + case HOME_T: + tap_mods(record, KC_LSFT); + break; +#endif +#ifdef CENTER_TT + case TT_ESC: + clear_tt(); // exit TT layer + return false; +#endif + case LT_ESC: +#ifdef CENTER_TT + if (tt_keycode != 0) { + clear_tt(); // exit TT layer + return false; + } +#endif + tap_layer(record, _NUMBER); + break; + case LT_LEFT: + case SP_BSPC: + tap_layer(record, _SYMBOL); + // LT (_SYMBOL, KC_LEFT) left right combination layer + thumb_layer(record, RIGHT, 0, 0, _SYMBOL, _LSHIFT); + break; + case OS_ALT: + tap_mods(record, KC_LALT); + break; + case OS_CTL: + tap_mods(record, KC_LCTL); + break; + case OS_GUI: + tap_mods(record, KC_LGUI); + break; + case SM_CIRC: + // GUI_T(S(KC_6)) + mt_shift(record, KC_LGUI, 0, KC_6); + break; + case SM_DLR: + // SFT_T(S(KC_4)) + mt_shift(record, KC_LSFT, 0, KC_4); + break; + case SM_G: + // MT(MOD_LALT | MOD_LSFT, S(KC_G)) + mt_shift(record, KC_LALT, KC_LSFT, KC_G); + break; + case SM_H: + // MT(MOD_LCTL | MOD_LSFT, S(KC_K)) + mt_shift(record, KC_LCTL, KC_LSFT, KC_H); + break; + case SM_W: + // MT(MOD_LGUI | MOD_LSFT, S(KC_W)) + mt_shift(record, KC_LGUI, KC_LSFT, KC_W); + break; + case SM_PERC: + // ALT_T(S(KC_5)) + mt_shift(record, KC_LALT, 0, KC_5); + break; + case LT_BSLS: + tap_layer(record, _MOUSE); + // LT (_MOUSE, KC_BSLS) left right combination layer, see #define LT_BSLS + thumb_layer(record, LEFT, 0, 0, _MOUSE, _SYMBOL); + break; + case SL_LEFT: + tap_layer(record, _MOUSE); + // LT (_MOUSE, S(KC_LEFT)) left right combination layer + thumb_layer(record, RIGHT, SHIFT, KC_LEFT, _MOUSE, _LSHIFT); + break; + case SP_DEL: + tap_layer(record, _MOUSE); + // LT (_MOUSE, S(KC_LEFT)) left right combination layer + thumb_layer(record, RIGHT, NOSHIFT, KC_DEL, _MOUSE, _LSHIFT); + break; + case SL_TAB: + // LT (_FNCKEY, S(KC_TAB)) emulation + lt_shift(record, KC_TAB, _FNCKEY); + break; + case TD_ENT: + tap_layer(record, _RSHIFT); + // LT (_RSHIFT, KC_ENT) emulation, see tap dance enter + break; + case TD_SPC: + tap_layer(record, _LSHIFT); + // LT (_LSHIFT, KC_SPC) left right combination layer, see tap dance TD_SPC + thumb_layer(record, LEFT, 0, 0, _LSHIFT, _SYMBOL); + break; +#ifdef CENTER_TT + case CNTR_TL: + case CNTR_TR: + case CNTR_HL: + case CNTR_HR: + case CNTR_BL: + case CNTR_BR: + if (tt_keycode != keycode && tt_keycode != 0) { + clear_tt(); // return to base layer first if different TT layer selected + } + tt_keycode = keycode; + break; +#endif +// #ifdef STENO_ENABLE +// case PS_STNA: +// stn_layer(record, STN_A, _NUMBER); +// break; +// case PS_STNO: +// stn_layer(record, STN_O, _FNCKEY); +// break; +// case PS_STNE: +// stn_layer(record, STN_E, _EDIT); +// break; +// case PS_STNU: +// stn_layer(record, STN_U, _SYMBOL); +// break; +// #endif + case PLOVER: + steno(record); + return false; + } + return true; +} + +#include "init.h" diff --git a/keyboards/planck/keymaps/hiea/qwerty.h b/keyboards/planck/keymaps/hiea/qwerty.h new file mode 100644 index 00000000000..d11d0478b3f --- /dev/null +++ b/keyboards/planck/keymaps/hiea/qwerty.h @@ -0,0 +1,64 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ...................................................................... Qwerty +#ifdef QWERTY + // ,-----------------------------------------------------------------------------------. + // | Q | W | E | R | T | ^Alt | ^GUI | Y | U | I | O | P | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | S | D | F | G | ↑Alt | ↑GUI | H | J | K | L | ; | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | V | B | Caps |^Shift| N | M | , | . | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_W, KC_E, KC_R, KC_T, CNTR_TL, CNTR_TR, KC_Y, KC_U, KC_I, KC_O, KC_P }, + {KC_A, KC_S, KC_D, KC_F, KC_G, CNTR_HL, CNTR_HR, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, + {KC_Z, KC_X, KC_C, KC_V, KC_B, CNTR_BL, CNTR_BR, KC_N, KC_M, KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)}, + {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), KC_SCLN}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | E | R | T | ^Alt | ^GUI | Y | U | I | O | P | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | S | D | F | G | ↑Alt | ↑GUI | H | J | K | L | : | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | V | B | Caps |^Shift| N | M | / | ? | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | - | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)}, + {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), TD_COLN}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), KC_SLSH, KC_QUES, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_MINS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | E | R | T | ^Alt | ^GUI | Y | U | I | O | P | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | S | D | F | G | ↑Alt | ↑GUI | H | J | K | L | : | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | V | B | Caps |^Shift| N | M | ~ | ` | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | _ | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)}, + {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), TD_COLN}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), TD_TILD, TD_GRV, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_UNDS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + diff --git a/keyboards/planck/keymaps/hiea/readme.md b/keyboards/planck/keymaps/hiea/readme.md new file mode 100644 index 00000000000..58f73e3b445 --- /dev/null +++ b/keyboards/planck/keymaps/hiea/readme.md @@ -0,0 +1,10 @@ +# The sdothum extended Default Planck Layout + +- Colemak-DH layout layer with shift/tab key overlays +- Number and symbol/function key layer +- Hexadecimal keypad layer +- Navigation keypad layer +- Dynamic macro layer +- Autocompletion tap key pairs (),[],{} +- Normalized enter and esc key position across keyboard layers +- Extensive use of tap keys diff --git a/keyboards/planck/keymaps/hiea/rules.mk b/keyboards/planck/keymaps/hiea/rules.mk new file mode 100644 index 00000000000..40f153844c1 --- /dev/null +++ b/keyboards/planck/keymaps/hiea/rules.mk @@ -0,0 +1,26 @@ +# Build Options: +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically + +BOOTMAGIC_ENABLE = no # virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # mouse keys(+4700) +EXTRAKEY_ENABLE = no # audio control and System control(+450) +CONSOLE_ENABLE = no # console for debug(+400) +COMMAND_ENABLE = no # commands for debug and configuration +NKRO_ENABLE = yes # nkey rollover +BACKLIGHT_ENABLE = no # enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # audio output on port C6 +UNICODE_ENABLE = no # unicode +BLUETOOTH_ENABLE = no # enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # enable WS2812 RGB underlight, do not enable this with audio at the same time. +STENO_ENABLE = yes # enable TX Bolt protocol, requires VIRTSER and may not work with mouse keys + +# do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # breathing sleep LED during USB suspend + +TAP_DANCE_ENABLE = yes # enable double tap completion of (),[],{} + +ifndef QUANTUM_DIR +include ../../../../Makefile +endif diff --git a/keyboards/planck/keymaps/hieax/common/chord_layout.h b/keyboards/planck/keymaps/hieax/common/chord_layout.h new file mode 100644 index 00000000000..2c785d56ca7 --- /dev/null +++ b/keyboards/planck/keymaps/hieax/common/chord_layout.h @@ -0,0 +1,41 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// .................................................................. Short Cuts + + // .-----------------------------------------------------------------------------------. + // | | | Copy | Paste| | | | | | | | | + // |--------------------------------------------------------------+------+------+------| + // | Undo | Cut | Copy | Paste| | | | | PRIV | PUB | | | + // |-----------------------------------------------------------------------------------| + // | | | Nak | Eot | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | | | | f() | | | | | | + // | | | | | | | | f() | | | | | see _PLOVER + // '-----------------------------------------------------------------------------------' + + [_EDIT] = { + {_______, _______, TMCOPY, TMPASTE, _______, _______, _______, _______, _______, _______, _______, _______}, + {UNDO, CUT, COPY, PASTE, _______, _______, _______, _______, TD_PRIV, TD_SEND, _______, _______}, + {_______, _______, NAK, EOT, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, ___fn__, ___fn__, _______, _______, _______, _______}, + }, + +// ................................................................ Adjust Layer + + // ,-----------------------------------------------------------------------------------. + // |Plover| | | | | | | | | | | | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // |Aud on| | | | | | | | | | | | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Reset| | | | | | | | | | | | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | | | f() | | | | | f() | | | | + // `-----------------------------------------------------------------------------------' + + [_ADJUST] = { + {PLOVER, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {AU_ON, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, ___fn__, _______, _______, _______, _______, ___fn__, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/hieax/common/init.h b/keyboards/planck/keymaps/hieax/common/init.h new file mode 100644 index 00000000000..6366a19f65e --- /dev/null +++ b/keyboards/planck/keymaps/hieax/common/init.h @@ -0,0 +1,56 @@ + +// ....................................................................... Audio + +void matrix_init_user(void) +{ +#ifdef STENO_ENABLE + steno_set_mode(STENO_MODE_BOLT); // or STENO_MODE_GEMINI +#endif +#ifdef AUDIO_ENABLE + startup_user(); +#endif +} + +#ifdef AUDIO_ENABLE +#ifdef BACKLIGHT_ENABLE +void led_set_user(uint8_t usb_led) +{ + static uint8_t old_usb_led = 0; + _delay_ms(10); // gets rid of tick + if (!is_playing_notes()) { + if ((usb_led & (1<event.pressed) { + key_timer = timer_read(); + register_code(modifier); + if (modifier2) { + register_code(modifier2); + } + } + else { + unregister_code(modifier); + if (modifier2) { + unregister_code(modifier2); + } + if (timer_elapsed(key_timer) < TAPPING_TERM) { + shift_key(keycode); + } + key_timer = 0; + } +} + +// ................................................................... Mod Masks + +// tap dance persistant mods, see process_record_user() +// keyboard_report->mods (?) appears to be cleared by tap dance +static uint8_t mods = 0; + +void tap_mods(keyrecord_t *record, uint16_t keycode) +{ + if (record->event.pressed) { + mods |= MOD_BIT(keycode); + } + else { + mods &= ~(MOD_BIT(keycode)); + } +} + +// (un)register modifiers +void modifier(void (*f)(uint8_t)) +{ + if (mods & MOD_BIT(KC_LCTL)) { + (*f)(KC_LCTL); + } + if (mods & MOD_BIT(KC_LGUI)) { + (*f)(KC_LGUI); + } + if (mods & MOD_BIT(KC_LALT)) { + (*f)(KC_LALT); + } + if (mods & MOD_BIT(KC_LSFT)) { + (*f)(KC_LSFT); + } + if (mods & MOD_BIT(KC_RSFT)) { + (*f)(KC_RSFT); + } +} + +// .................................................... Triple Dance Shift/Layer + +static uint8_t dt_shift = 0; + +void double_shift(uint16_t keycode, uint8_t layer) +{ + tap_key (keycode); + if (DT_SHIFT) { + // set_oneshot_mods(MOD_LSFT); + // layer_on(layer); + layer_on (_SHIFT); + set_oneshot_layer(_SHIFT, ONESHOT_START); + dt_shift = 1; + } + else { + layer_on(layer); + } +} + +// tap dance LT (LAYER, KEY) emulation with -> and auto-repeat extensions! +void tap_shift(qk_tap_dance_state_t *state, uint16_t keycode, uint8_t layer) +{ + // double tap plus down + if (state->count > 2) { + // double enter shift + if (keycode == KC_ENT) { + tap_key (keycode); + double_shift(keycode, layer); + } + // repeating keycode + else { + register_code(keycode); + } + } + // tap plus down (or double tap): keycode (one shot) shift + else if (state->count > 1) { + double_shift(keycode, layer); + } + // down: shift + else if (state->pressed) { + layer_on(layer); + } + // tap: keycode + else { + modifier(register_code); + tap_key (keycode); + modifier(unregister_code); + } +} + +void tap_reset(uint16_t keycode, uint8_t layer) +{ + unregister_code(keycode); + if (DT_SHIFT && dt_shift) { + clear_oneshot_layer_state(ONESHOT_PRESSED); + dt_shift = 0; + } + else { + layer_off(layer); + } +} + +// augment pseudo LT (_RSHIFT, KC_ENT) handling below for rapid sequences +void enter(qk_tap_dance_state_t *state, void *user_data) +{ + tap_shift(state, KC_ENT, _RSHIFT); +} + +void enter_reset(qk_tap_dance_state_t *state, void *user_data) +{ + tap_reset(KC_ENT, _RSHIFT); +} + +// augment pseudo LT (_LSHIFT, KC_SPC) handling below for rapid sequences +void space(qk_tap_dance_state_t *state, void *user_data) +{ + tap_shift(state, KC_SPC, _LSHIFT); +} + +void space_reset(qk_tap_dance_state_t *state, void *user_data) +{ + tap_reset(KC_SPC, _LSHIFT); +} + +// ......................................................... Triple Dance Insert + +void double_max(uint8_t count, uint8_t shift, uint16_t keycode) +{ + if (shift) { + shift_key(keycode); + if (count > 1) { + shift_key(keycode); + } + } + else { + tap_key(keycode); + if (count > 1) { + tap_key(keycode); + } + } +} + +void colon(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key (KC_SPC); + shift_key(KC_SCLN); + shift_key(KC_SCLN); + tap_key (KC_SPC); + } + else { + double_max(state->count, SHIFT, KC_SCLN); + } + reset_tap_dance(state); +} + +void eql(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key(KC_SPC); + tap_key(KC_SLSH); + tap_key(KC_EQL); + tap_key(KC_SPC); + } + else { + double_max(state->count, NOSHIFT, KC_EQL); + } + reset_tap_dance(state); +} + +void greater(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key (KC_SPC); + tap_key (KC_MINS); + shift_key(KC_DOT); + tap_key (KC_SPC); + } + else { + double_max(state->count, SHIFT, KC_DOT); + } + reset_tap_dance(state); +} + +void lesser(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key (KC_SPC); + shift_key(KC_COMM); + tap_key (KC_MINS); + tap_key (KC_SPC); + } + else { + double_max(state->count, SHIFT, KC_COMM); + } + reset_tap_dance(state); +} + +void tilde(qk_tap_dance_state_t *state, void *user_data) +{ + // double tap plus down: repeating keycode + if (state->count > 2) { + register_code(KC_LSFT); + register_code(KC_GRV); + } + // tap: keycode + else { + shift_key(KC_GRV); + // double tap: unix home directory + if (state->count > 1) { + tap_key(KC_SLSH); + } + } +} + +void tilde_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_GRV); + unregister_code(KC_LSFT); +} + +// ............................................................. Tap Dance Pairs + +// tap dance shift rules +#define S_NEVER 0 +#define S_SINGLE 1 +#define S_DOUBLE 2 +#define S_ALWAYS S_SINGLE | S_DOUBLE + +void symbol_pair(uint8_t shift, uint16_t left, uint16_t right) +{ + if (shift & S_DOUBLE) { + shift_key(left); + shift_key(right); + } + else { + tap_key(left); + tap_key(right); + } +} + +#define CLOSE 1 + +// tap dance symbol pairs +void tap_pair(qk_tap_dance_state_t *state, uint8_t shift, uint16_t left, uint16_t right, uint16_t modifier, uint8_t close) +{ + // triple tap: left right with cursor between symbol pair a la vim :-) + if (state->count > 2) { + symbol_pair(shift, left, right); + tap_key (KC_LEFT); + } + // double tap: left right + else if (state->count > 1) { + symbol_pair(shift, left, right); + } + // down: modifier + else if (state->pressed) { + if (modifier) { + register_code(modifier); + } + } + // tap: left (close: right) + else { + if (shift & S_SINGLE) { + shift_key(close ? right : left); + } + else { + tap_key(close ? right : left); + } + } + if (!modifier) { + reset_tap_dance(state); + } +} + +void doublequote(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_QUOT, KC_QUOT, 0, 0); +} + +void grave(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_GRV, KC_GRV, 0, 0); +} + +void lbrace(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, 0); +} + +void lcurly(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, 0); +} + +void lparen(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_9, KC_0, KC_LCTL, 0); +} + +void lparen_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_LCTL); +} + +void quote(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_QUOT, KC_QUOT, 0, 0); +} + +void rangle(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_COMM, KC_DOT, 0, CLOSE); +} + +void rbrace(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, CLOSE); +} + +void rcurly(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, CLOSE); +} + +void rparen(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_9, KC_0, 0, CLOSE); +} + +void rparen_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_LCTL); +} + +// ............................................................ Tap Dance Insert + +void comma(qk_tap_dance_state_t *state, void *user_data) +{ + tap_key(KC_COMM); + if (state->count > 1) { + tap_key(KC_SPC); + } + reset_tap_dance(state); +} + +void dot(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { + shift_key(KC_COLN); + } + else { + tap_key(KC_DOT); + } + reset_tap_dance(state); +} + +// compile time macro string, see functions/hardware planck script +void private(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { +#ifdef PRIVATE_STRING +#include "private_string.h" +#endif + } + reset_tap_dance(state); +} + +// config.h defined string +void send(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { + SEND_STRING(PUBLIC_STRING); + } + reset_tap_dance(state); +} + +// .......................................................... Tap Dance One Shot + +void caps(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { + tap_key(KC_CAPS); + } + else { + set_oneshot_mods(MOD_LSFT); + register_code (KC_LSFT); // on hold down + } +} + +void caps_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_LSFT); +} + +// ................................................................... Tap Dance + +qk_tap_dance_action_t tap_dance_actions[] = { + [_CAPS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, caps, caps_reset) + ,[_COLN] = ACTION_TAP_DANCE_FN (colon) + ,[_COMM] = ACTION_TAP_DANCE_FN (comma) + ,[_DOT] = ACTION_TAP_DANCE_FN (dot) + ,[_DQOT] = ACTION_TAP_DANCE_FN (doublequote) + ,[_ENT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, enter, enter_reset) + ,[_EQL] = ACTION_TAP_DANCE_FN (eql) + ,[_GRV] = ACTION_TAP_DANCE_FN (grave) + ,[_GT] = ACTION_TAP_DANCE_FN (greater) + ,[_LBRC] = ACTION_TAP_DANCE_FN (lbrace) + ,[_LCBR] = ACTION_TAP_DANCE_FN (lcurly) + ,[_LPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lparen, lparen_reset) + ,[_LT] = ACTION_TAP_DANCE_FN (lesser) + ,[_PRIV] = ACTION_TAP_DANCE_FN (private) + ,[_QUOT] = ACTION_TAP_DANCE_FN (quote) + ,[_RBRC] = ACTION_TAP_DANCE_FN (rbrace) + ,[_RCBR] = ACTION_TAP_DANCE_FN (rcurly) + ,[_RNGL] = ACTION_TAP_DANCE_FN (rangle) + ,[_RPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rparen, rparen_reset) + ,[_SEND] = ACTION_TAP_DANCE_FN (send) + ,[_SPC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, space, space_reset) + ,[_TILD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tilde, tilde_reset) +}; + +// .............................................................. Dynamic Layers + +#define LEFT 1 +#define RIGHT 2 +static uint8_t thumb = 0; + +// LEFT (KC_SPC, S(KC_BSLS)), RIGHT (KC_LEFT, S(KC_LEFT)) opposite thumb combinations, see process_record_user() +// up, up -> _BASE +// up, down -> _SYMBOL +// down, up -> _NUMBER +// down, down -> _MOUSE // see layer keycodes that raise mouse layer +#define THUMBS_DOWN _MOUSE // layer + +static uint8_t overlayer = 0; + +// left right thumb layer combinations +void thumb_layer(keyrecord_t *record, uint8_t side, uint8_t shift, uint16_t keycode, uint8_t thumb_dn_layer, uint8_t thumb_up_layer) +{ + if (record->event.pressed) { + // layer_on via tap_layer(), see process_record_user() + key_timer = timer_read(); + thumb = thumb | side; + } + else { + layer_off(thumb_dn_layer); + // opposite thumb_layer() thumb may have switched effective layer! + if (overlayer) { + layer_off(overlayer); + overlayer = 0; + } + if (!key_press(shift, keycode)) { + layer_off(THUMBS_DOWN); // both thumbs needed + // opposite thumb down? see left right combination layer table above + if (thumb & (side == LEFT ? RIGHT : LEFT)) { + layer_on(thumb_up_layer); + overlayer = thumb_up_layer; + } + } + clear_mods(); + thumb = thumb & ~side; + key_timer = 0; + } +} + +// #ifdef STENO_ENABLE +// // LT for steno keycode +// void stn_layer(keyrecord_t *record, uint16_t keycode, uint8_t layer) +// { +// if (record->event.pressed) { +// key_timer = timer_read(); +// if (keycode) { +// process_steno(keycode, record); +// } +// layer_on(layer); +// } +// else { +// layer_off(layer); +// if (keycode) { +// if (timer_elapsed(key_timer) < TAPPING_TERM) { +// process_steno(keycode, record); +// } +// else { +// // clear pressed state (request push of updated) process_steno.c and .h +// // steno_clear_state(); +// } +// } +// key_timer = 0; +// } +// } +// #endif + +// LT macro for nested LT layers +void lt(keyrecord_t *record, uint8_t shift, uint16_t keycode, uint16_t modifier, uint8_t layer) +{ + if (record->event.pressed) { + key_timer = timer_read(); + if (modifier) { + register_code(modifier); + } + layer_on(layer); + } + else { + if (modifier) { + unregister_code(modifier); + } + layer_off(layer); + // for shifted keycodes, hence, LT_SHIFT + key_press(shift, keycode); + clear_mods(); + key_timer = 0; + } +} + +// LT for S(keycode) +void lt_shift(keyrecord_t *record, uint16_t keycode, uint8_t layer) +{ + lt(record, SHIFT, keycode, 0, layer); +} + +// set layer asap to overcome macro latency errors, notably tap dance and LT usage +// this routine inexplicably (?) sets layer_on() faster than can be done in thumb_layer() +void tap_layer(keyrecord_t *record, uint8_t layer) +{ + if (record->event.pressed) { + layer_on(layer); + } + else { + layer_off(layer); + } +} + +// ..................................................................... Keymaps + +// void persistant_default_layer_set(uint16_t default_layer) +// { +// eeconfig_update_default_layer(default_layer); +// default_layer_set (default_layer); +// } + +void clear_layers(void) +{ + uint8_t layer; + for (layer = 0; layer < _END_LAYERS; layer++) { + layer_off(layer); + } +} + +#ifdef HOME_MODS +// home row layer/shift key state, see tap_mods() and keymap.c +#define LSYMBOL MOD_BIT(KC_LSFT) +#define RSYMBOL MOD_BIT(KC_RSFT) + +void home_state(void) { + // if only the shift key, raise the opposite hand symbol layer + if (mods == LSYMBOL) { + layer_on(_LSYMBOL); + } + else if (mods == RSYMBOL) { + layer_on(_RSYMBOL); + } + // or combine modifiers + else if (mods & LSYMBOL) { + register_code(KC_LSFT); + } + else if (mods & RSYMBOL) { + register_code(KC_RSFT); + } +} + +// home row layer/shift +void symbol_shift(keyrecord_t *record, uint16_t keycode) +{ + if (keycode) { + if (record->event.pressed) { + key_timer = timer_read(); + home_state(); + } + else { + // clear layer/shift state + if (keycode == KC_A) { + layer_off(_LSYMBOL); + unregister_code(KC_LSFT); + } + else if (keycode == KC_T) { + layer_off(_RSYMBOL); + unregister_code(KC_RSFT); + } + // no other modifier enabled, issue keycode + if (~mods) { + key_press(NOSHIFT, keycode); + } + key_timer = 0; + } + } + else { + // a non-shift modifier disables symbol layer + layer_off(_LSYMBOL); + layer_off(_RSYMBOL); + // update home layer/shift state + home_state(); + } +} +#endif + +#ifdef CENTER_TT +static uint16_t tt_keycode = 0; // current TT keycode + +void clear_tt(void) +{ + if (tt_keycode == KC_CAPS) { + tap_key(KC_CAPS); // clear capslock + } + tt_keycode = 0; + clear_layers(); + set_single_persistent_default_layer(_BASE); +} +#endif + +// txbolt plover run state +static uint8_t plover = 0; + +void toggle_plover(uint8_t state) +{ + if (plover != state) { +#ifdef PLOVER_KEYBIND +#include "plover_keybind.h" +#endif + plover = state; + } +} + +void base_layer(void) +{ +#ifdef AUDIO_ENABLE + if (plover) { + PLAY_SONG(song_plover_gb); + } + else { + PLAY_SONG(song_qwerty); + } +#endif + clear_layers(); + set_single_persistent_default_layer(_BASE); + toggle_plover(0); +} + +void steno(keyrecord_t *record) +{ + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + PLAY_SONG(song_plover); +#endif + clear_layers(); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + if (!plover) { + toggle_plover(1); + } + } +} + +void steno_exit(keyrecord_t *record) +{ + if (record->event.pressed) { + base_layer(); + toggle_plover(0); + } +} diff --git a/keyboards/planck/keymaps/hieax/common/number_fkey_layout.h b/keyboards/planck/keymaps/hieax/common/number_fkey_layout.h new file mode 100644 index 00000000000..321482b2919 --- /dev/null +++ b/keyboards/planck/keymaps/hieax/common/number_fkey_layout.h @@ -0,0 +1,46 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ......................................................... Number Keypad Layer + + // .-----------------------------------------------------------------------------------. + // | | F | E | D | | | | / | 7 | 8 | 9 | * | + // |-----------------------------------------------------------------------------------| + // | GUI | C | B | A | | | | . | 4 | 5 | 6 | - | + // |-----------------------------------------------------------------------------------| + // | | # | G | \ | | | | , | 1 | 2 | 3 | + | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | 0 | = | | | | + // | | | | f() | | | | = | 0 | | | | + // '-----------------------------------------------------------------------------------' + + [_NUMBER] = { + {_______, KC_F, MT_E, KC_D, _______, ___x___, ___x___, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR}, + {OS_GUI, GT_C, AT_B, ST_A, _______, ___x___, ___x___, TD_DOT, KC_4, KC_5, KC_6, KC_MINS}, + {_______, KC_HASH, SM_G, KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1, KC_2, KC_3, KC_PLUS}, +#ifdef THUMB_0 + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0, LT_EQL, ___x___, ___x___, ___x___}, +#else + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL, LT_0, ___x___, ___x___, ___x___}, +#endif + }, + +// ............ .................................................. Function Keys + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | F7 | F8 | F9 | F12 | + // |-----------------------------------------------------------------------------------| + // | Ctrl | GUI | Alt | Shift| | | | | F4 | F5 | F6 | F11 | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | F1 | F2 | F3 | F10 | + // |-----------------------------------------------------------------------------------| + // | | | | | | f() | | + | | | | | + // | | | | | f() | | | + | | | | | see _PLOVER + // '-----------------------------------------------------------------------------------' + + [_FNCKEY] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7, KC_F8, KC_F9, KC_F12 }, + {OS_GUI, OS_CTL, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_F4, KC_F5, KC_F6, KC_F11 }, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1, KC_F2, KC_F3, KC_F10 }, + {_______, _______, _______, _______, ___fn__, ___fn__, _______, KC_PLUS, _______, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/hieax/common/plover_keybind.h b/keyboards/planck/keymaps/hieax/common/plover_keybind.h new file mode 100644 index 00000000000..cb4ef92ef84 --- /dev/null +++ b/keyboards/planck/keymaps/hieax/common/plover_keybind.h @@ -0,0 +1,9 @@ + +// simple window manager specific plover keybind hook + +// toggle plover application, see herbstluftwm/config/appbinds +register_code (KC_LGUI); +register_code (KC_LCTL); +tap_key (KC_EQL); +unregister_code(KC_LCTL); +unregister_code(KC_LGUI); diff --git a/keyboards/planck/keymaps/hieax/common/sounds.h b/keyboards/planck/keymaps/hieax/common/sounds.h new file mode 100644 index 00000000000..1bfc7a6da0c --- /dev/null +++ b/keyboards/planck/keymaps/hieax/common/sounds.h @@ -0,0 +1,14 @@ + +// ................................................................ Audio Sounds + +#ifdef AUDIO_ENABLE +float song_startup [][2] = SONG(STARTUP_SOUND); +float song_colemak [][2] = SONG(COLEMAK_SOUND); +float song_qwerty [][2] = SONG(QWERTY_SOUND); +float song_plover [][2] = SONG(PLOVER_SOUND); +float song_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float song_caps_on [][2] = SONG(CAPS_LOCK_ON_SOUND); +float song_caps_off [][2] = SONG(CAPS_LOCK_OFF_SOUND); +float music_scale [][2] = SONG(MUSIC_SCALE_SOUND); +float song_goodbye [][2] = SONG(GOODBYE_SOUND); +#endif diff --git a/keyboards/planck/keymaps/hieax/common/steno_layout.h b/keyboards/planck/keymaps/hieax/common/steno_layout.h new file mode 100644 index 00000000000..ab4a6fe011c --- /dev/null +++ b/keyboards/planck/keymaps/hieax/common/steno_layout.h @@ -0,0 +1,39 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ...................................................................... Plover +#ifdef STENO_ENABLE + // ,-----------------------------------------------------------------------------------. + // | # | # | # | # | # | # | # | # | # | # | # | # | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Base | S | T | P | H | * | * | F | P | L | T | D | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Base | S | K | W | R | * | * | R | B | G | S | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | A | O | E | U | | + // `-----------------------------------------------------------------------------------' + + [_PLOVER] = { + {STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC }, + {BASE1, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR }, + {BASE2, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR }, + {_______, _______, _______, PS_STNA, PS_STNO, _______, _______, PS_STNE, PS_STNU, _______, _______, _______}, + }, +#else + // ,-----------------------------------------------------------------------------------. + // | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Base | S | T | P | H | * | * | F | P | L | T | D | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Base | S | K | W | R | * | * | R | B | G | S | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | A | O | E | U | | + // `-----------------------------------------------------------------------------------' + + [_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {BASE1, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {BASE2, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {_______, _______, _______, LT_C, LT_V, _______, _______, LT_N, LT_M, _______, _______, _______}, + }, +#endif diff --git a/keyboards/planck/keymaps/hieax/common/symbol_guifn_layout.h b/keyboards/planck/keymaps/hieax/common/symbol_guifn_layout.h new file mode 100644 index 00000000000..677e46409ba --- /dev/null +++ b/keyboards/planck/keymaps/hieax/common/symbol_guifn_layout.h @@ -0,0 +1,40 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ..................................................... Symbol Navigation Layer + + // .-----------------------------------------------------------------------------------. + // | | ~ | * | & | | | | | Home | Up | End | PgUp | + // |-----------------------------------------------------------------------------------| + // | GUI | ^ | % | $ | | | | | Left | Down | Right| PgDn | + // |-----------------------------------------------------------------------------------| + // | | # | @ | ! | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | |Adjust| \ | | f() | | + // '-----------------------------------------------------------------------------------' + + [_SYMBOL] = { + {_______, KC_TILD, KC_ASTR, KC_AMPR, _______, ___x___, ___x___, _______, KC_HOME, KC_UP, KC_END, KC_PGUP}, + {OS_GUI, SM_CIRC, SM_PERC, SM_DLR, _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN}, + {_______, KC_HASH, KC_AT, KC_EXLM, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {___x___, ___x___, ___x___, ADJUST, LT_BSLS, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___}, + }, + +// ............................................................... Mouse Actions + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | Left | Up | Right| Up | + // |-----------------------------------------------------------------------------------| + // | | Btn3 | Btn2 | Btn1 | | | | | Left | Down | Right| Down | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | f() | | f() | | + // '-----------------------------------------------------------------------------------' + + [_MOUSE] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U}, + {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D}, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, ___fn__, _______, _______, _______, ___fn__, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/hieax/common/tapdance.h b/keyboards/planck/keymaps/hieax/common/tapdance.h new file mode 100644 index 00000000000..d778286bf1e --- /dev/null +++ b/keyboards/planck/keymaps/hieax/common/tapdance.h @@ -0,0 +1,49 @@ + +// tap dance keys +enum tap_dance { + _CAPS = 0 + ,_COLN + ,_COMM + ,_DOT + ,_DQOT + ,_ENT + ,_EQL + ,_GRV + ,_GT + ,_LBRC + ,_LCBR + ,_LPRN + ,_LT + ,_PRIV + ,_QUOT + ,_RBRC + ,_RCBR + ,_RNGL + ,_RPRN + ,_SEND + ,_SPC + ,_TILD +}; + +#define TD_CAPS TD(_CAPS) +#define TD_COLN TD(_COLN) +#define TD_COMM TD(_COMM) +#define TD_DOT TD(_DOT) +#define TD_DQOT TD(_DQOT) +#define TD_ENT TD(_ENT) +#define TD_EQL TD(_EQL) +#define TD_GRV TD(_GRV) +#define TD_GT TD(_GT) +#define TD_LBRC TD(_LBRC) +#define TD_LCBR TD(_LCBR) +#define TD_LPRN TD(_LPRN) +#define TD_LT TD(_LT) +#define TD_PRIV TD(_PRIV) // compile time macro string, provided in private_string.h +#define TD_QUOT TD(_QUOT) +#define TD_RBRC TD(_RBRC) +#define TD_RCBR TD(_RCBR) +#define TD_RNGL TD(_RNGL) +#define TD_RPRN TD(_RPRN) +#define TD_SEND TD(_SEND) // config.h defined macro string +#define TD_SPC TD(_SPC) // see process_record_user() for extended handling of Spc +#define TD_TILD TD(_TILD) diff --git a/keyboards/planck/keymaps/hieax/common/toggle_layout.h b/keyboards/planck/keymaps/hieax/common/toggle_layout.h new file mode 100644 index 00000000000..ea4ead56b92 --- /dev/null +++ b/keyboards/planck/keymaps/hieax/common/toggle_layout.h @@ -0,0 +1,102 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ......................................................... Number Keypad Layer + + // .-----------------------------------------------------------------------------------. + // | | F | E | D | | | | / | 7 | 8 | 9 | * | + // |-----------------------------------------------------------------------------------| + // | GUI | C | B | A | | | | . | 4 | 5 | 6 | - | + // |-----------------------------------------------------------------------------------| + // | | # | G | \ | | | | , | 1 | 2 | 3 | + | + // |-----------------------------------------------------------------------------------| + // | | | | f() | Space| | | 0 | = | | | | + // | | | | f() | Space| | | = | 0 | | | | + // '-----------------------------------------------------------------------------------' + + [_TTNUMBER] = { + {_______, KC_F, MT_E, KC_D, _______, ___x___, ___x___, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR}, + {OS_GUI, GT_C, AT_B, ST_A, _______, ___x___, ___x___, TD_DOT, KC_4, KC_5, KC_6, KC_MINS}, + {_______, KC_HASH, SM_G, KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1, KC_2, KC_3, KC_PLUS}, +#ifdef THUMB_0 + {_______, _______, _______, TT_ESC, KC_SPC, _______, _______, KC_0, LT_EQL, _______, _______, _______}, +#else + {_______, _______, _______, TT_ESC, KC_SPC, _______, _______, KC_EQL, LT_0, _______, _______, _______}, +#endif + }, + +// ............ .................................................. Function Keys + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | F7 | F8 | F9 | F12 | + // |-----------------------------------------------------------------------------------| + // | GUI | Ctrl | Alt | Shift| | | | | F4 | F5 | F6 | F11 | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | F1 | F2 | F3 | F10 | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | + | | | | | + // '-----------------------------------------------------------------------------------' + + [_TTFNCKEY] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7, KC_F8, KC_F9, KC_F12 }, + {OS_GUI, OS_CTL, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_F4, KC_F5, KC_F6, KC_F11 }, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1, KC_F2, KC_F3, KC_F10 }, + {_______, _______, _______, TT_ESC, _______, _______, _______, KC_PLUS, _______, _______, _______, _______}, + }, + +// ....................................................................... Regex + + // ,-----------------------------------------------------------------------------------. + // | | . | * | & | ~ | | | ` | [ | ] | ^ | | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | | < | % | > | ? | | | | | ( | ) | $ | | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | | : | @ | ! | / | | | \ | { | } | # | | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | | | f() | = | | | + | Space| | | | + // `-----------------------------------------------------------------------------------' + + [_TTREGEX] = { + {___x___, KC_DOT, KC_ASTR, KC_AMPR, KC_TILD, ___x___, ___x___, KC_GRV, KC_LBRC, KC_RBRC, KC_CIRC, ___x___}, + {___x___, KC_LT, KC_PERC, KC_GT, KC_QUES, ___x___, ___x___, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, ___x___}, + {___x___, KC_COLN, KC_AT, KC_EXLM, KC_SLSH, ___x___, ___x___, KC_BSLS, KC_LCBR, KC_RCBR, KC_HASH, ___x___}, + {_______, _______, _______, TT_ESC, KC_EQL, _______, _______, KC_PLUS, KC_SPC, _______, _______, _______}, + }, + +// ............................................................ Navigation Layer + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | Home | Up | End | PgUp | + // |-----------------------------------------------------------------------------------| + // | GUI | Ctrl | Alt | Shift| | | | | Left | Down | Right| PgDn | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | | | | | | + // '-----------------------------------------------------------------------------------' + + [_TTCURSOR] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_HOME, KC_UP, KC_END, KC_PGUP}, + {OS_GUI, OS_CTL, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN}, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {_______, _______, _______, TT_ESC, _______, _______, _______, _______, _______, _______, _______, _______}, + }, + +// ............................................................... Mouse Actions + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | Left | Up | Right| Up | + // |-----------------------------------------------------------------------------------| + // | | Btn3 | Btn2 | Btn1 | | | | | Left | Down | Right| Down | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | | | | | | + // '-----------------------------------------------------------------------------------' + + [_TTMOUSE] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U}, + {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D}, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {_______, _______, _______, TT_ESC, _______, _______, _______, _______, _______, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/hieax/config.h b/keyboards/planck/keymaps/hieax/config.h new file mode 100644 index 00000000000..9bb5e087350 --- /dev/null +++ b/keyboards/planck/keymaps/hieax/config.h @@ -0,0 +1,50 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// required because lower/raise modifiers are redefined by colemak-dh +#define PREVENT_STUCK_MODIFIERS + +// tap dance key press termination interval +#define TAPPING_TERM 250 + +// smooth mouse motion +// #define MOUSEKEY_INTERVAL 20 +// #define MOUSEKEY_DELAY 0 +// #define MOUSEKEY_TIME_TO_MAX 60 +// #define MOUSEKEY_MAX_SPEED 7 +// #define MOUSEKEY_WHEEL_DELAY 0 + +// compile time macro string, see functions/hardware planck script (undefine otherwise) +#define PRIVATE_STRING + +// compile time macro string, must be in quotes +#define PUBLIC_STRING ":%s/arch=(.*)/arch=('any')\n" + +// thumb key tap-shift() double tap: one shot shift (0) off (1) on +#define DT_SHIFT 1 + +// number layer 0 position KEYPAD_0, THUMB_0 +#define THUMB_0 + +// home block shift symbol clustes defined (no overlays required for extended symbols, undefine otherwise) +#define SHIFT_SYMBOLS + +// center column TT assignments (undefine for OSM chords) +#define CENTER_TT +#define TAPPING_TOGGLE 1 + +// home row modifiers +#define HOME_MODS +// fix dual function timing +#define PERMISSIVE_HOLD +#define IGNORE_MOD_TAP_INTERRUPT + +// layout ADNW*, BEAKL*, COLEKA*, QWERTY (default) +#define DEFAULT + +// sync app with window manager keybind hook defined in plover_keybind.h +#define PLOVER_KEYBIND + +#endif diff --git a/keyboards/planck/keymaps/hieax/hiea.h b/keyboards/planck/keymaps/hieax/hiea.h new file mode 100644 index 00000000000..64541d633e7 --- /dev/null +++ b/keyboards/planck/keymaps/hieax/hiea.h @@ -0,0 +1,99 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// .................................................................. BEAKL HIEA +#ifdef DEFAULT + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | . |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | K | , | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Ins | Left | Ent | Bksp | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_Z, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_N, KC_M, KC_X }, + {HOME_H, HOME_I, HOME_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, HOME_T, HOME_R, HOME_S, HOME_W }, + {KC_J, KC_SCLN, TD_QUOT, KC_K, KC_COMM, CNTR_BL, CNTR_BR, KC_B, KC_P, KC_L, KC_F, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, TD_ENT, SP_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_K), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, TD_ENT, SP_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | ? |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | K | / | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | ↑Tab | f() | Ins | Left | _ | Del | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, S_TAB, ___fn__, LT_INS, S_LEFT, KC_UNDS, SP_DEL, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | ? |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | K | / | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Tab | - | Ins | Left | f() | Bksp | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_TAB, KC_MINS, LT_INS, S_LEFT, ___fn__, SP_BSPC, S_DOWN, S_UP, S_RGHT }, + }, +#ifdef HOME_MODS + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Fn | Caps | ` | [ | ] | ^ | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | f() | ? |Cursor| Mouse| | | ( | ) | $ | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | K | / | Num | Regex| \ | { | } | # | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Ins | Left | + | Space| Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSYMBOL] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, TD_GRV, KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)}, + {HOME_H, HOME_I, HOME_E, ___fn__, KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_LCBR, KC_RCBR, KC_HASH, S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, KC_PLUS, SL_SPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | . | * | & | ~ | Fn | Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | < | % | > | ? |Cursor| Mouse| C | f() | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | @ | ! | / | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | ↑Tab | = | Ins | Left | Ent | Bksp | Down | Up | Right| + // | | ↑Tab | = | Ent | Bksp | | + // `-----------------------------------------------------------------------------------' + + [_RSYMBOL] = { + {S(KC_Q), KC_DOT, KC_ASTR, KC_AMPR, TD_TILD, CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_H), TD_LT, KC_PERC, TD_GT, KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), ___fn__, HOME_R, HOME_S, HOME_W }, + {S(KC_J), TD_COLN, KC_AT, KC_EXLM, KC_SLSH, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, S_TAB, TD_EQL, LT_INS, SP_LEFT, TD_ENT, LT_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, +#endif +#endif diff --git a/keyboards/planck/keymaps/hieax/hiea.sync-conflict-20180501-144403-SMV4TP4.h b/keyboards/planck/keymaps/hieax/hiea.sync-conflict-20180501-144403-SMV4TP4.h new file mode 100644 index 00000000000..53ffb886128 --- /dev/null +++ b/keyboards/planck/keymaps/hieax/hiea.sync-conflict-20180501-144403-SMV4TP4.h @@ -0,0 +1,97 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// .................................................................. BEAKL HIEA +#ifdef DEFAULT + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | . |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | K | , | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Ins | Left | Ent | Bksp | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_Z, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_N, KC_M, KC_X }, + {HOME_H, HOME_I, HOME_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, HOME_T, HOME_R, HOME_S, HOME_W }, + {KC_J, KC_SCLN, TD_QUOT, KC_K, KC_COMM, CNTR_BL, CNTR_BR, KC_B, KC_P, KC_L, KC_F, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, TD_ENT, SP_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_K), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, TD_ENT, SP_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | ? |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | K | / | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | ↑Tab | f() | Ins | Left | _ | Del | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, S_TAB, ___fn__, LT_INS, S_LEFT, KC_UNDS, SP_DEL, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | ? |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | K | / | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Tab | - | Ins | Left | f() | Bksp | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_TAB, KC_MINS, LT_INS, S_LEFT, ___fn__, SP_BSPC, S_DOWN, S_UP, S_RGHT }, + }, +#endif + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Fn | Caps | ` | [ | ] | ^ | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | f() | ? |Cursor| Mouse| | | ( | ) | $ | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | K | / | Num | Regex| \ | { | } | # | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | Esc | Space| + | Space| | + // `-----------------------------------------------------------------------------------' + + [_LSYMBOL] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, TD_GRV, KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)}, + {HOME_H, HOME_I, HOME_E, ___fn__, KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_K), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_LCBR, KC_RCBR, KC_HASH, S(KC_V)}, + {_______, _______, _______, _______, LT_ESC, TD_SPC, KC_PLUS, KC_SPC, _______, _______, _______, _______}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | . | * | & | ~ | Fn | Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | < | % | > | ? |Cursor| Mouse| C | f() | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | @ | ! | / | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | ↑Tab | = | Ent | Bksp | | + // `-----------------------------------------------------------------------------------' + + [_RSYMBOL] = { + {S(KC_Q), KC_DOT, KC_ASTR, KC_AMPR, TD_TILD, CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_H), TD_LT, KC_PERC, TD_GT, KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), ___fn__, HOME_R, HOME_S, HOME_W }, + {S(KC_J), TD_COLN, KC_AT, KC_EXLM, KC_SLSH, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {_______, _______, _______, _______, S_TAB, TD_EQL, TD_ENT, LT_BSPC, _______, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/hieax/keymap.c b/keyboards/planck/keymaps/hieax/keymap.c new file mode 100644 index 00000000000..d761ee6777c --- /dev/null +++ b/keyboards/planck/keymaps/hieax/keymap.c @@ -0,0 +1,446 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. +// +// To flash planck firmware +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// Reset keyboard or press hw reset button on base (hole) +// +// cd qmk_firmware/keyboards/planck +// sudo make KEYMAP=sdothum dfu +// +// sudo make clean (good practice before flashing) +// sudo make KEYMAP=sdothum (to compile check) +// +// Package requirements (for arch linux) +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// avr-gcc-atmel +// avr-libc-atmel +// dfu-programmer +// +// Notes +// ▔▔▔▔▔ +// ** E R G O W I D E S P L I T ** Layout +// +// Autocompletion tap dance key pairs (),[],{} are available from the +// number/symbol layer, as well as, numerous (un)shift key values +// +// The navigation pad provides a single hand right thumb activated cluster +// with left hand modifiers +// +// #define PRIVATE_STRING includes private_string.h, a user defined code +// block for the PRIV tap dance e.g. SEND_STRING("secret messape"), +// see function private() +// +// Modifier clusters +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// The num and sym keys together access the navigation pad layer +// +// ,-----------------------------------------------------------------------------------. +// | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| +// `-----------------------------------------------------------------------------------' +// +// Hint +// ▔▔▔▔ +// For sculpted keycaps such as Cherry or OEM profile, reverse the Alt, Num, +// Shift, Shift, Nav, Sym keycaps for more ergonomic thumb orientation and +// actuation +// +// Code +// ▔▔▔▔ +// This source is shamelessly based on the "default" planck layout +// +// #ifdef/#endif block structures are not indented, as syntax highlighting +// in vim is sufficient for identification +// +// c++ commenting style is used throughout +// +// Change history +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// See http://thedarnedestthing.com/planck%20constant +// See http://thedarnedestthing.com/planck%20done + + + +// === N O T E === +// +// sudo CPATH=/common make ... + + +#include "config.h" +#include "planck.h" +#include "action_layer.h" +#ifdef STENO_ENABLE +#include "keymap_steno.h" +#endif +#ifdef AUDIO_ENABLE +#include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +enum planck_layers { + _BASE = 0 + ,_SHIFT + ,_LSHIFT + ,_RSHIFT + ,_LSYMBOL + ,_RSYMBOL + ,_PLOVER + ,_NUMBER + ,_SYMBOL + ,_FNCKEY + ,_MOUSE + ,_EDIT + ,_ADJUST +#ifdef CENTER_TT + ,_TTNUMBER + ,_TTREGEX + ,_TTFNCKEY + ,_TTCURSOR + ,_TTMOUSE +#endif + ,_END_LAYERS +}; + +enum planck_keycodes { + BASE = SAFE_RANGE + ,BASE1 + ,BASE2 + ,PLOVER + ,SM_CIRC // pseudo GUI_T(S(KC_6)) for shifted key-codes, see process_record_user() + ,SM_DLR // pseudo SFT_T(S(KC_4)) for shifted key-codes, see process_record_user() + ,SM_G // pseudo MT (MOD_LALT | MOD_LSFT, S(KC_G)) for shifted key-codes, see process_record_user() + ,SM_H // pseudo MT (MOD_LCTL | MOD_LSFT, S(KC_H)) for shifted key-codes, see process_record_user() + ,SM_PERC // pseudo ALT_T(S(KC_5)) for shifted key-codes, see process_record_user() + ,SM_W // pseudo MT (MOD_LGUI | MOD_LSFT, S(KC_W)) for shifted key-codes, see process_record_user() + ,SL_LEFT // pseudo LT (_MOUSE, S(KC_LEFT)) for shifted key-codes, see process_record_user() + ,SP_DEL // pseudo LT (_MOUSE, KC_DEL) for shifted key-codes, see process_record_user() + ,SL_TAB // pseudo LT (_FNCKEY, S(KC_TAB)) for shifted key-codes, see process_record_user() + ,SL_SPC // pseudo LT (S(_SYMBOL), KC_SPC) for home row shifted GUIFN +#ifdef HOME_MODS + ,HOME_A // pseudo SFT_T(KC_A) + ,HOME_T // pseudo SFT_T(KC_T) +#endif +#ifdef CENTER_TT + ,TT_ESC +#endif +#ifdef STENO_ENABLE + ,PS_STNA = STN_A + ,PS_STNO = STN_O + ,PS_STNE = STN_E + ,PS_STNU = STN_U +#else + ,LT_C = LT (_NUMBER, KC_C) + ,LT_V = LT (_FNCKEY, KC_V) + ,LT_N = LT (_EDIT, KC_N) + ,LT_M = LT (_SYMBOL, KC_M) +#endif +}; + +// modifier keys +#define AT_B ALT_T(KC_B) +#define AT_DOWN ALT_T(KC_DOWN) +#define CT_RGHT CTL_T(KC_RGHT) +#define GT_C GUI_T(KC_C) +#define GT_UP GUI_T(KC_UP) +#define MT_E MT (MOD_LCTL | MOD_LALT, KC_E) +#define ST_A SFT_T(KC_A) +#ifdef HOME_MODS +#define HOME_H GUI_T(KC_H) +#define HOME_I CTL_T(KC_I) +#define HOME_E ALT_T(KC_E) +#define HOME_R ALT_T(KC_R) +#define HOME_S CTL_T(KC_S) +#define HOME_W GUI_T(KC_W) +#else +#define HOME_H KC_H +#define HOME_I KC_I +#define HOME_E KC_E +#define HOME_A KC_A +#define HOME_T KC_T +#define HOME_R KC_R +#define HOME_S KC_S +#define HOME_W KC_W +#endif + +#define S_DOWN S (KC_DOWN) +#define S_LEFT S (KC_LEFT) +#define S_RGHT S (KC_RGHT) +#define S_TAB S (KC_TAB) +#define S_UP S (KC_UP) + +#include "tapdance.h" + +// keycodes +#define ___x___ KC_TRNS +#define ___fn__ KC_TRNS +#ifdef _______ +#undef _______ +#endif +#define _______ KC_NO + +#define COPY LCTL(KC_C) +#define CUT LCTL(KC_X) +#define EOT LCTL(KC_D) +#define NAK LCTL(KC_U) +#define PASTE LCTL(KC_V) +#define UNDO LCTL(KC_Z) +#define TMCOPY LALT(LCTL(KC_C)) +#define TMPASTE LALT(LCTL(KC_V)) +#define LT_BSLS LT (_MOUSE, KC_BSLS) // see process_record_user() for extended handling +#define LT_BSPC LT (_EDIT, KC_BSPC) +#define SP_LEFT LT (_EDIT, KC_LEFT) +#define LT_ESC LT (_NUMBER, KC_ESC) +#define LT_LEFT LT (_SYMBOL, KC_LEFT) // see process_record_user() for extended handling +#define SP_BSPC LT (_SYMBOL, KC_BSPC) // see process_record_user() for extended handling +#define LT_TAB LT (_FNCKEY, KC_TAB) +#define LT_INS LT (_FNCKEY, KC_INS) +#define ADJUST MO (_ADJUST) +#define OS_ALT OSM (MOD_LALT) +#define OS_CTL OSM (MOD_LCTL) +#define OS_GUI OSM (MOD_LGUI) +#define OS_SFT OSM (MOD_LSFT) + +#ifdef CENTER_TT +#define CNTR_TL TT (_TTFNCKEY) +#define CNTR_TR KC_CAPS +#define CNTR_HL TT (_TTCURSOR) +#define CNTR_HR TT (_TTMOUSE) +#define CNTR_BL TT (_TTNUMBER) +#define CNTR_BR TT (_TTREGEX) +#else +#define CNTR_TL OSM (MOD_LALT | MOD_LCTL) +#define CNTR_TR OSM (MOD_LGUI | MOD_LCTL) +#define CNTR_HL OSM (MOD_LALT | MOD_LSFT) +#define CNTR_HR OSM (MOD_LGUI | MOD_LSFT) +#define CNTR_BL TD (_CAPS) +#define CNTR_BR OSM (MOD_LSFT | MOD_LCTL) +#endif + +// LT can only reference layers 0-15 +#ifdef THUMB_0 +#define LT_EQL LT (_ADJUST, KC_EQL) +#else +#define LT_0 LT (_ADJUST, KC_0) +#endif + +// ........................................................ Default Alpha Layout + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +#include "hiea.h" +#include "steno_layout.h" + +// ...................................................... Number / Function Keys + +#include "number_fkey_layout.h" + +// ......................................................... Symbol / Navigation + +#include "symbol_guifn_layout.h" + +// ............................................................... Toggle Layers + +#ifdef CENTER_TT +#include "toggle_layout.h" +#endif + +// ......................................................... Short Cuts / Adjust + +#include "chord_layout.h" + +}; + +// ...................................................................... Sounds + +#include "sounds.h" + +// ........................................................... User Keycode Trap + +#include "keycode_functions.h" + +#define BASE_1 1 +#define BASE_2 2 +#define BASE_12 3 +static uint8_t base_n = 0; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + switch (keycode) { + case BASE1: + if (record->event.pressed) { + base_n = base_n | BASE_1; + if (base_n == BASE_12) { + base_layer(); + } + } + else { + base_n = base_n & ~BASE_1; + } + return false; + case BASE2: + if (record->event.pressed) { + base_n = base_n | BASE_2; + if (base_n == BASE_12) { + base_layer(); + } + } + else { + base_n = base_n & ~BASE_2; + } + return false; +#ifdef HOME_MODS + case HOME_E: + case HOME_R: + tap_mods(record, KC_LALT); + symbol_shift(record, 0); + break; + case HOME_H: + case HOME_W: + tap_mods(record, KC_LGUI); + symbol_shift(record, 0); + break; + case HOME_I: + case HOME_S: + tap_mods(record, KC_LCTL); + symbol_shift(record, 0); + break; + case HOME_A: + tap_mods(record, KC_LSFT); + symbol_shift(record, KC_A); + break; + case HOME_T: + tap_mods(record, KC_RSFT); + symbol_shift(record, KC_T); + break; +#else + case AT_DOWN: + tap_mods(record, KC_LALT); + break; + case CT_RGHT: + tap_mods(record, KC_LGUI); + break; + case GT_UP: + tap_mods(record, KC_LCTL); + break; +#endif + case SL_SPC: + lt(record, NOSHIFT, KC_SPC, KC_LSFT, _SYMBOL); + break; +#ifdef CENTER_TT + case TT_ESC: + clear_tt(); // exit TT layer + return false; +#endif + case LT_ESC: +#ifdef CENTER_TT + if (tt_keycode != 0) { + clear_tt(); // exit TT layer + return false; + } +#endif + tap_layer(record, _NUMBER); + break; + case LT_LEFT: + case SP_BSPC: + tap_layer(record, _SYMBOL); + // LT (_SYMBOL, KC_LEFT) left right combination layer + thumb_layer(record, RIGHT, 0, 0, _SYMBOL, _LSHIFT); + break; + case OS_ALT: + tap_mods(record, KC_LALT); + break; + case OS_CTL: + tap_mods(record, KC_LCTL); + break; + case OS_GUI: + tap_mods(record, KC_LGUI); + break; + case SM_CIRC: + // GUI_T(S(KC_6)) + mt_shift(record, KC_LGUI, 0, KC_6); + break; + case SM_DLR: + // SFT_T(S(KC_4)) + mt_shift(record, KC_LSFT, 0, KC_4); + break; + case SM_G: + // MT(MOD_LALT | MOD_LSFT, S(KC_G)) + mt_shift(record, KC_LALT, KC_LSFT, KC_G); + break; + case SM_H: + // MT(MOD_LCTL | MOD_LSFT, S(KC_K)) + mt_shift(record, KC_LCTL, KC_LSFT, KC_H); + break; + case SM_W: + // MT(MOD_LGUI | MOD_LSFT, S(KC_W)) + mt_shift(record, KC_LGUI, KC_LSFT, KC_W); + break; + case SM_PERC: + // ALT_T(S(KC_5)) + mt_shift(record, KC_LALT, 0, KC_5); + break; + case LT_BSLS: + tap_layer(record, _MOUSE); + // LT (_MOUSE, KC_BSLS) left right combination layer, see #define LT_BSLS + thumb_layer(record, LEFT, 0, 0, _MOUSE, _SYMBOL); + break; + case SL_LEFT: + tap_layer(record, _MOUSE); + // LT (_MOUSE, S(KC_LEFT)) left right combination layer + thumb_layer(record, RIGHT, SHIFT, KC_LEFT, _MOUSE, _LSHIFT); + break; + case SP_DEL: + tap_layer(record, _MOUSE); + // LT (_MOUSE, S(KC_LEFT)) left right combination layer + thumb_layer(record, RIGHT, NOSHIFT, KC_DEL, _MOUSE, _LSHIFT); + break; + case SL_TAB: + // LT (_FNCKEY, S(KC_TAB)) emulation + lt_shift(record, KC_TAB, _FNCKEY); + break; + case TD_ENT: + tap_layer(record, _RSHIFT); + // LT (_RSHIFT, KC_ENT) emulation, see tap dance enter + break; + case TD_SPC: + tap_layer(record, _LSHIFT); + // LT (_LSHIFT, KC_SPC) left right combination layer, see tap dance TD_SPC + thumb_layer(record, LEFT, 0, 0, _LSHIFT, _SYMBOL); + break; +#ifdef CENTER_TT + case CNTR_TL: + case CNTR_TR: + case CNTR_HL: + case CNTR_HR: + case CNTR_BL: + case CNTR_BR: + if (tt_keycode != keycode && tt_keycode != 0) { + clear_tt(); // return to base layer first if different TT layer selected + } + tt_keycode = keycode; + break; +#endif +// #ifdef STENO_ENABLE +// case PS_STNA: +// stn_layer(record, STN_A, _NUMBER); +// break; +// case PS_STNO: +// stn_layer(record, STN_O, _FNCKEY); +// break; +// case PS_STNE: +// stn_layer(record, STN_E, _EDIT); +// break; +// case PS_STNU: +// stn_layer(record, STN_U, _SYMBOL); +// break; +// #endif + case PLOVER: + steno(record); + return false; + } + return true; +} + +#include "init.h" diff --git a/keyboards/planck/keymaps/hieax/readme.md b/keyboards/planck/keymaps/hieax/readme.md new file mode 100644 index 00000000000..58f73e3b445 --- /dev/null +++ b/keyboards/planck/keymaps/hieax/readme.md @@ -0,0 +1,10 @@ +# The sdothum extended Default Planck Layout + +- Colemak-DH layout layer with shift/tab key overlays +- Number and symbol/function key layer +- Hexadecimal keypad layer +- Navigation keypad layer +- Dynamic macro layer +- Autocompletion tap key pairs (),[],{} +- Normalized enter and esc key position across keyboard layers +- Extensive use of tap keys diff --git a/keyboards/planck/keymaps/hieax/rules.mk b/keyboards/planck/keymaps/hieax/rules.mk new file mode 100644 index 00000000000..40f153844c1 --- /dev/null +++ b/keyboards/planck/keymaps/hieax/rules.mk @@ -0,0 +1,26 @@ +# Build Options: +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically + +BOOTMAGIC_ENABLE = no # virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # mouse keys(+4700) +EXTRAKEY_ENABLE = no # audio control and System control(+450) +CONSOLE_ENABLE = no # console for debug(+400) +COMMAND_ENABLE = no # commands for debug and configuration +NKRO_ENABLE = yes # nkey rollover +BACKLIGHT_ENABLE = no # enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # audio output on port C6 +UNICODE_ENABLE = no # unicode +BLUETOOTH_ENABLE = no # enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # enable WS2812 RGB underlight, do not enable this with audio at the same time. +STENO_ENABLE = yes # enable TX Bolt protocol, requires VIRTSER and may not work with mouse keys + +# do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # breathing sleep LED during USB suspend + +TAP_DANCE_ENABLE = yes # enable double tap completion of (),[],{} + +ifndef QUANTUM_DIR +include ../../../../Makefile +endif diff --git a/keyboards/planck/keymaps/sdothum/beakl.h b/keyboards/planck/keymaps/sdothum/beakl.h new file mode 100644 index 00000000000..de3da34a5d3 --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/beakl.h @@ -0,0 +1,551 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// .................................................................... BEAKL EZ +#ifdef BEAKLEZ + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | K | ^Alt | ^GUI | F | G | R | C | V | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | " | ↑Alt | ↑GUI | L | S | T | N | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | ; | , | J | . | X | Caps |^Shift| B | D | M | P | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_K, CNTR_TL, CNTR_TR, KC_F, KC_G, KC_R, KC_C, KC_V }, + {KC_H, KC_I, KC_E, HOME_A, TD_QUOT, CNTR_HL, CNTR_HR, KC_L, KC_S, KC_T, KC_N, KC_W }, + {KC_SCLN, KC_COMM, KC_J, KC_DOT, KC_X, CNTR_BL, CNTR_BR, KC_B, KC_D, KC_M, KC_P, KC_Z }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_K), CNTR_TL, CNTR_TR, S(KC_F), S(KC_G), S(KC_R), S(KC_C), S(KC_V)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), TD_QUOT, CNTR_HL, CNTR_HR, S(KC_L), S(KC_S), S(KC_T), S(KC_N), S(KC_W)}, + {KC_SCLN, KC_COMM, S(KC_J), KC_DOT, S(KC_X), CNTR_BL, CNTR_BR, S(KC_B), S(KC_D), S(KC_M), S(KC_P), S(KC_Z)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | K | ^Alt | ^GUI | F | G | R | C | V | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | " | ↑Alt | ↑GUI | L | S | T | N | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | : | ~ | J | ` | X | Caps |^Shift| B | D | M | P | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_K), CNTR_TL, CNTR_TR, S(KC_F), S(KC_G), S(KC_R), S(KC_C), S(KC_V)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), TD_DQOT, CNTR_HL, CNTR_HR, S(KC_L), S(KC_S), S(KC_T), S(KC_N), S(KC_W)}, + {TD_COLN, TD_TILD, S(KC_J), TD_GRV, S(KC_X), CNTR_BL, CNTR_BR, S(KC_B), S(KC_D), S(KC_M), S(KC_P), S(KC_Z)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | K | ^Alt | ^GUI | F | G | R | C | V | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | H | I | E | A | " | ↑Alt | ↑GUI | L | S | T | N | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | : | / | J | ? | X | Caps |^Shift| B | D | M | P | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_K), CNTR_TL, CNTR_TR, S(KC_F), S(KC_G), S(KC_R), S(KC_C), S(KC_V)}, + {S(KC_H), S(KC_I), S(KC_E), S(KC_A), TD_DQOT, CNTR_HL, CNTR_HR, S(KC_L), S(KC_S), S(KC_T), S(KC_N), S(KC_W)}, + {TD_COLN, KC_SLSH, S(KC_J), KC_QUES, S(KC_X), CNTR_BL, CNTR_BR, S(KC_B), S(KC_D), S(KC_M), S(KC_P), S(KC_Z)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// ..................................................................... BEAKL 8 +#ifdef BEAKL8 + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | X | ^Alt | ^GUI | G | C | R | F | Z | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . | ↑Alt | ↑GUI | D | S | T | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | I | , | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_X, CNTR_TL, CNTR_TR, KC_G, KC_C, KC_R, KC_F, KC_Z }, + {KC_K, KC_H, KC_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_D, KC_S, KC_T, KC_N, KC_B }, + {KC_J, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_W, KC_M, KC_L, KC_P, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_C), S(KC_R), S(KC_F), S(KC_Z)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_D), S(KC_S), S(KC_T), S(KC_N), S(KC_B)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | X | ^Alt | ^GUI | G | C | R | F | Z | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ~ | ↑Alt | ↑GUI | D | S | T | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | ` | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_C), S(KC_R), S(KC_F), S(KC_Z)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), TD_TILD, CNTR_HL, CNTR_HR, S(KC_D), S(KC_S), S(KC_T), S(KC_N), S(KC_B)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), TD_GRV, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | X | ^Alt | ^GUI | G | C | R | F | Z | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? | ↑Alt | ↑GUI | D | S | T | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | / | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_C), S(KC_R), S(KC_F), S(KC_Z)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_D), S(KC_S), S(KC_T), S(KC_N), S(KC_B)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// .................................................................... BEAKL 8P +#ifdef BEAKL8P + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | ^Alt | ^GUI | G | D | R | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . | ↑Alt | ↑GUI | C | T | S | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | I | , | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_Z, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_R, KC_F, KC_X }, + {KC_K, KC_H, KC_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, KC_T, KC_S, KC_N, KC_B }, + {KC_J, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_W, KC_M, KC_L, KC_P, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | { | } | $ | ^Alt | ^GUI | G | D | R | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | < | > | ~ | ↑Alt | ↑GUI | C | T | S | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | ! | = | ` | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), KC_LCBR, KC_RCBR, KC_DLR, CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)}, + {S(KC_K), S(KC_H), TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)}, + {S(KC_J), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | ^Alt | ^GUI | ^ | [ | ] | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? | ↑Alt | ↑GUI | | | ( | ) | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | / | Caps |^Shift| \ | $ | * | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, KC_CIRC, KC_LBRC, KC_RBRC, S(KC_F), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, S(KC_N), S(KC_B)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_DLR, KC_ASTR, S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// ................................................................... BEAKL 8TX +#ifdef BEAKL8TX + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | J | ^Alt | ^GUI | G | D | R | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . | ↑Alt | ↑GUI | C | T | S | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | ; | " | I | , | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_J, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_R, KC_F, KC_X }, + {HOME_K, HOME_H, HOME_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, HOME_T, HOME_S, HOME_N, HOME_B }, + {KC_Z, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_W, KC_M, KC_L, KC_P, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)}, + {S(KC_Z), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | $ | { | } | J | ^Alt | ^GUI | G | D | R | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | / | < | > | ~ | ↑Alt | ↑GUI | C | T | S | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | : | ! | = | ` | Caps |^Shift| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), KC_DLR, KC_LCBR, KC_RCBR, S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)}, + {S(KC_K), KC_SLSH, TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)}, + {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | J | ^Alt | ^GUI | G | [ | ] | ^ | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? | ↑Alt | ↑GUI | | | ( | ) | $ | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | : | " | I | / | Caps |^Shift| \ | * | . | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, S(KC_B)}, + {S(KC_Z), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT, S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// ................................................................... BEAKL 8TT +#ifdef BEAKL8TT + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | J | Fn | Caps | G | D | R | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . |Cursor| Mouse| C | T | S | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | ; | " | I | , | Num | Regex| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_J, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_R, KC_F, KC_X }, + {HOME_K, HOME_H, HOME_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, HOME_T, HOME_S, HOME_N, HOME_B }, + {KC_Z, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_W, KC_M, KC_L, KC_P, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)}, + {S(KC_Z), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | $ | { | } | J | Fn | Caps | G | D | R | F | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | / | < | > | ~ |Cursor| Mouse| C | T | S | N | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | : | ! | = | ` | Num | Regex| W | M | L | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), KC_DLR, KC_LCBR, KC_RCBR, S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_R), S(KC_F), S(KC_X)}, + {S(KC_K), KC_SLSH, TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_S), S(KC_N), S(KC_B)}, + {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_W), S(KC_M), S(KC_L), S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | J | Fn | Caps | G | [ | ] | ^ | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? |Cursor| Mouse| | | ( | ) | $ | B | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | : | " | I | / | Num | Regex| \ | * | . | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_J), CNTR_TL, CNTR_TR, S(KC_G), KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, S(KC_B)}, + {S(KC_Z), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT, S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// .................................................................... BEAKL 10 +#ifdef BEAKL10 + // ,-----------------------------------------------------------------------------------. + // | Q | H | O | U | X | ^Alt | ^GUI | G | D | N | M | V | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Y | I | E | A | . | ↑Alt | ↑GUI | C | S | R | T | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | , | Z | Caps |^Shift| B | P | L | F | K | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_H, KC_O, KC_U, KC_X, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_N, KC_M, KC_V }, + {KC_Y, KC_I, KC_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, KC_S, KC_R, KC_T, KC_W }, + {KC_J, KC_SCLN, TD_QUOT, KC_COMM, KC_Z, CNTR_BL, CNTR_BR, KC_B, KC_P, KC_L, KC_F, KC_K }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_H), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_V)}, + {S(KC_Y), S(KC_I), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_S), S(KC_R), S(KC_T), S(KC_W)}, + {S(KC_J), KC_SCLN, TD_QUOT, KC_COMM, S(KC_Z), CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_K)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | [ | ! | ] | X | ^Alt | ^GUI | G | D | N | M | V | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Y | < | = | > | ~ | ↑Alt | ↑GUI | C | S | R | T | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | ` | Z | Caps |^Shift| B | P | L | F | K | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), TD_LBRC, KC_EXLM, TD_RBRC, S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_V)}, + {S(KC_Y), TD_LT, KC_EQL, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_S), S(KC_R), S(KC_T), S(KC_W)}, + {S(KC_J), KC_COLN, TD_DQOT, TD_GRV, S(KC_Z), CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_K)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | H | O | U | X | ^Alt | ^GUI | G | { | + | } | V | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Y | I | E | A | ? | ↑Alt | ↑GUI | C | ( | * | ) | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | / | Z | Caps |^Shift| B | P | L | F | K | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_H), S(KC_O), S(KC_U), S(KC_X), CNTR_TL, CNTR_TR, S(KC_G), TD_LCBR, KC_PLUS, TD_RCBR, S(KC_V)}, + {S(KC_Y), S(KC_I), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, S(KC_C), TD_LPRN, KC_ASTR, TD_RPRN, S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, KC_SLSH, S(KC_Z), CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_K)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// ............................................................... BEAKL Mash Up +#ifdef BEAKL810 + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | ^Alt | ^GUI | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . | ↑Alt | ↑GUI | C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | I | , | Caps |^Shift| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_Z, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_N, KC_M, KC_X }, + {KC_K, KC_H, KC_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, KC_T, KC_R, KC_S, KC_W }, + {KC_J, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_B, KC_P, KC_L, KC_F, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | { | } | $ | ^Alt | ^GUI | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | < | > | ~ | ↑Alt | ↑GUI | C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | ! | = | ` | Caps |^Shift| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), KC_LCBR, KC_RCBR, KC_DLR, CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | ^Alt | ^GUI | ^ | [ | ] | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? | ↑Alt | ↑GUI | | | ( | ) | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | / | Caps |^Shift| \ | $ | * | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, KC_CIRC, KC_LBRC, KC_RBRC, S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, S(KC_S), S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_DLR, KC_ASTR, S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// .................................................................... BEAKL MU +#ifdef BEAKLMU + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Fn | Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | I | , | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_Z, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_N, KC_M, KC_X }, + {HOME_K, HOME_H, HOME_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, HOME_T, HOME_R, HOME_S, HOME_W }, + {KC_J, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_B, KC_P, KC_L, KC_F, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | $ | { | } | Z | Fn | Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | / | < | > | ~ |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | ! | = | ` | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | _ | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), KC_DLR, KC_LCBR, KC_RCBR, S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), KC_SLSH, TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_UNDS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Fn | Caps | G | [ | ] | ^ | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? |Cursor| Mouse| | | ( | ) | $ | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | / | Num | Regex| \ | * | . | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | - | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), KC_LBRC, KC_RBRC, KC_CIRC, S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT, S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_MINS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// .................................................................... BEAKL SP +#ifdef BEAKLSP + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | . |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | ; | " | I | , | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Ins | Left | Ent | Bksp | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_Y, KC_O, KC_U, KC_Z, CNTR_TL, CNTR_TR, KC_G, KC_D, KC_N, KC_M, KC_X }, + {HOME_K, HOME_H, HOME_E, HOME_A, KC_DOT, CNTR_HL, CNTR_HR, KC_C, HOME_T, HOME_R, HOME_S, HOME_W }, + {KC_J, KC_SCLN, TD_QUOT, KC_I, KC_COMM, CNTR_BL, CNTR_BR, KC_B, KC_P, KC_L, KC_F, KC_V }, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, TD_ENT, SP_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_DOT, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_J), KC_SCLN, TD_QUOT, S(KC_I), KC_COMM, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_INS, SP_LEFT, TD_ENT, SP_BSPC, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | [ | ] | Z | Shift| Caps | G | D | N | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | ^ | < | > | ~ |Cursor| Mouse| C | T | R | S | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | ! | = | ` | Num | Regex| B | P | L | F | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | ↑Tab | f() | Ins | Left | _ | Del | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_Y), KC_LBRC, KC_RBRC, S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), S(KC_D), S(KC_N), S(KC_M), S(KC_X)}, + {S(KC_K), KC_CIRC, TD_LT, TD_GT, TD_TILD, CNTR_HL, CNTR_HR, S(KC_C), S(KC_T), S(KC_R), S(KC_S), S(KC_W)}, + {S(KC_Z), KC_COLN, KC_EXLM, KC_EQL, TD_GRV, CNTR_BL, CNTR_BR, S(KC_B), S(KC_P), S(KC_L), S(KC_F), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, S_TAB, ___fn__, LT_INS, S_LEFT, KC_UNDS, SP_DEL, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | Y | O | U | Z | Shift| Caps | G | { | } | M | X | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | K | H | E | A | ? |Cursor| Mouse| | | ( | ) | $ | W | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | J | : | " | I | / | Num | Regex| \ | * | . | P | V | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Tab | - | Ins | Left | f() | Bksp | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_Y), S(KC_O), S(KC_U), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_G), KC_LCBR, KC_RCBR, S(KC_M), S(KC_X)}, + {S(KC_K), S(KC_H), S(KC_E), S(KC_A), KC_QUES, CNTR_HL, CNTR_HR, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, S(KC_W)}, + {S(KC_J), TD_COLN, TD_DQOT, S(KC_I), KC_SLSH, CNTR_BL, CNTR_BR, KC_BSLS, KC_ASTR, KC_DOT, S(KC_P), S(KC_V)}, + {OS_CTL, OS_GUI, OS_ALT, KC_TAB, KC_MINS, LT_INS, S_LEFT, ___fn__, SP_BSPC, S_DOWN, S_UP, S_RGHT }, + }, +#endif diff --git a/keyboards/planck/keymaps/sdothum/colemak.h b/keyboards/planck/keymaps/sdothum/colemak.h new file mode 100644 index 00000000000..b7e9df22c15 --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/colemak.h @@ -0,0 +1,125 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// .............................................................. Colemak Mod-DH +#ifdef COLEMAK + // ,-----------------------------------------------------------------------------------. + // | Q | W | F | P | B | ^Alt | ^GUI | J | L | U | Y | ; | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | R | S | T | G | ↑Alt | ↑GUI | M | N | E | I | O | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | D | V | Caps |^Shift| K | H | , | . | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_W, KC_F, KC_P, KC_B, CNTR_TL, CNTR_TR, KC_J, KC_L, KC_U, KC_Y, KC_SCLN}, + {KC_A, KC_R, KC_S, KC_T, KC_G, CNTR_HL, CNTR_HR, KC_M, KC_N, KC_E, KC_I, KC_O }, + {KC_Z, KC_X, KC_C, KC_D, KC_V, CNTR_BL, CNTR_BR, KC_K, KC_H, KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_B), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), KC_SCLN}, + {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_G), CNTR_HL, CNTR_HR, S(KC_M), S(KC_N), S(KC_E), S(KC_I), S(KC_O)}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_D), S(KC_V), CNTR_BL, CNTR_BR, S(KC_K), S(KC_H), KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | F | P | B | ^Alt | ^GUI | J | L | U | Y | : | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | R | S | T | G | ↑Alt | ↑GUI | M | N | E | I | O | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | D | V | Caps |^Shift| K | H | / | ? | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | - | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_B), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN}, + {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_G), CNTR_HL, CNTR_HR, S(KC_M), S(KC_N), S(KC_E), S(KC_I), S(KC_O)}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_D), S(KC_V), CNTR_BL, CNTR_BR, S(KC_K), S(KC_H), KC_SLSH, KC_QUES, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_MINS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | F | P | B | ^Alt | ^GUI | J | L | U | Y | : | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | R | S | T | G | ↑Alt | ↑GUI | M | N | E | I | O | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | D | V | Caps |^Shift| K | H | ~ | ` | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | _ | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_F), S(KC_P), S(KC_B), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN}, + {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_G), CNTR_HL, CNTR_HR, S(KC_M), S(KC_N), S(KC_E), S(KC_I), S(KC_O)}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_D), S(KC_V), CNTR_BL, CNTR_BR, S(KC_K), S(KC_H), TD_TILD, TD_GRV, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_UNDS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + +// ..................................................................... ColemaX +#ifdef COLEMAX + // ,-----------------------------------------------------------------------------------. + // | Q | W | C | G | Z | ^Alt | ^GUI | J | L | U | Y | ; | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | R | S | T | B | ↑Alt | ↑GUI | K | N | E | I | O | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | X | V | F | D | P | Caps |^Shift| M | H | , | . | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_W, KC_C, KC_G, KC_Z, CNTR_TL, CNTR_TR, KC_J, KC_L, KC_U, KC_Y, KC_SCLN}, + {KC_A, KC_R, KC_S, KC_T, KC_B, CNTR_HL, CNTR_HR, KC_K, KC_N, KC_E, KC_I, KC_O }, + {KC_X, KC_V, KC_F, KC_D, KC_P, CNTR_BL, CNTR_BR, KC_M, KC_H, KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_W), S(KC_C), S(KC_G), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), KC_SCLN}, + {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_B), CNTR_HL, CNTR_HR, S(KC_K), S(KC_N), S(KC_E), S(KC_I), S(KC_O)}, + {S(KC_X), S(KC_V), S(KC_F), S(KC_D), S(KC_P), CNTR_BL, CNTR_BR, S(KC_M), S(KC_H), KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | C | G | Z | ^Alt | ^GUI | J | L | U | Y | : | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | R | S | T | B | ↑Alt | ↑GUI | K | N | E | I | O | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | X | V | F | D | P | Caps |^Shift| M | H | / | ? | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | - | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_C), S(KC_G), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN}, + {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_B), CNTR_HL, CNTR_HR, S(KC_K), S(KC_N), S(KC_E), S(KC_I), S(KC_O)}, + {S(KC_X), S(KC_V), S(KC_F), S(KC_D), S(KC_P), CNTR_BL, CNTR_BR, S(KC_M), S(KC_H), KC_SLSH, KC_QUES, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_MINS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | C | G | Z | ^Alt | ^GUI | J | L | U | Y | : | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | R | S | T | B | ↑Alt | ↑GUI | K | N | E | I | O | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | X | V | F | D | P | Caps |^Shift| M | H | ~ | ` | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | _ | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_C), S(KC_G), S(KC_Z), CNTR_TL, CNTR_TR, S(KC_J), S(KC_L), S(KC_U), S(KC_Y), TD_COLN}, + {S(KC_A), S(KC_R), S(KC_S), S(KC_T), S(KC_B), CNTR_HL, CNTR_HR, S(KC_K), S(KC_N), S(KC_E), S(KC_I), S(KC_O)}, + {S(KC_X), S(KC_V), S(KC_F), S(KC_D), S(KC_P), CNTR_BL, CNTR_BR, S(KC_M), S(KC_H), TD_TILD, TD_GRV, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_UNDS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + diff --git a/keyboards/planck/keymaps/sdothum/common/chord_layout.h b/keyboards/planck/keymaps/sdothum/common/chord_layout.h new file mode 100644 index 00000000000..2c785d56ca7 --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/common/chord_layout.h @@ -0,0 +1,41 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// .................................................................. Short Cuts + + // .-----------------------------------------------------------------------------------. + // | | | Copy | Paste| | | | | | | | | + // |--------------------------------------------------------------+------+------+------| + // | Undo | Cut | Copy | Paste| | | | | PRIV | PUB | | | + // |-----------------------------------------------------------------------------------| + // | | | Nak | Eot | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | | | | f() | | | | | | + // | | | | | | | | f() | | | | | see _PLOVER + // '-----------------------------------------------------------------------------------' + + [_EDIT] = { + {_______, _______, TMCOPY, TMPASTE, _______, _______, _______, _______, _______, _______, _______, _______}, + {UNDO, CUT, COPY, PASTE, _______, _______, _______, _______, TD_PRIV, TD_SEND, _______, _______}, + {_______, _______, NAK, EOT, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, _______, _______, ___fn__, ___fn__, _______, _______, _______, _______}, + }, + +// ................................................................ Adjust Layer + + // ,-----------------------------------------------------------------------------------. + // |Plover| | | | | | | | | | | | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // |Aud on| | | | | | | | | | | | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Reset| | | | | | | | | | | | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | | | f() | | | | | f() | | | | + // `-----------------------------------------------------------------------------------' + + [_ADJUST] = { + {PLOVER, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {AU_ON, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, + {_______, _______, _______, ___fn__, _______, _______, _______, _______, ___fn__, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/sdothum/common/init.h b/keyboards/planck/keymaps/sdothum/common/init.h new file mode 100644 index 00000000000..6366a19f65e --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/common/init.h @@ -0,0 +1,56 @@ + +// ....................................................................... Audio + +void matrix_init_user(void) +{ +#ifdef STENO_ENABLE + steno_set_mode(STENO_MODE_BOLT); // or STENO_MODE_GEMINI +#endif +#ifdef AUDIO_ENABLE + startup_user(); +#endif +} + +#ifdef AUDIO_ENABLE +#ifdef BACKLIGHT_ENABLE +void led_set_user(uint8_t usb_led) +{ + static uint8_t old_usb_led = 0; + _delay_ms(10); // gets rid of tick + if (!is_playing_notes()) { + if ((usb_led & (1<event.pressed) { + key_timer = timer_read(); + register_code(modifier); + if (modifier2) { + register_code(modifier2); + } + } + else { + unregister_code(modifier); + if (modifier2) { + unregister_code(modifier2); + } + if (timer_elapsed(key_timer) < TAPPING_TERM) { + shift_key(keycode); + } + key_timer = 0; + } +} + +// ................................................................... Mod Masks + +// tap dance persistant mods, see process_record_user() +// keyboard_report->mods (?) appears to be cleared by tap dance +static uint8_t mods = 0; + +void tap_mods(keyrecord_t *record, uint16_t keycode) +{ + if (record->event.pressed) { + mods |= MOD_BIT(keycode); + } + else { + mods &= ~(MOD_BIT(keycode)); + } +} + +// (un)register modifiers +void modifier(void (*f)(uint8_t)) +{ + if (mods & MOD_BIT(KC_LCTL)) { + (*f)(KC_LCTL); + } + if (mods & MOD_BIT(KC_LGUI)) { + (*f)(KC_LGUI); + } + if (mods & MOD_BIT(KC_LALT)) { + (*f)(KC_LALT); + } +} + +// .................................................... Triple Dance Shift/Layer + +static uint8_t dt_shift = 0; + +void double_shift(uint16_t keycode, uint8_t layer) +{ + tap_key (keycode); + if (DT_SHIFT) { + // set_oneshot_mods(MOD_LSFT); + // layer_on(layer); + layer_on (_SHIFT); + set_oneshot_layer(_SHIFT, ONESHOT_START); + dt_shift = 1; + } + else { + layer_on(layer); + } +} + +// tap dance LT (LAYER, KEY) emulation with -> and auto-repeat extensions! +void tap_shift(qk_tap_dance_state_t *state, uint16_t keycode, uint8_t layer) +{ + // double tap plus down + if (state->count > 2) { + // double enter shift + if (keycode == KC_ENT) { + tap_key (keycode); + double_shift(keycode, layer); + } + // repeating keycode + else { + register_code(keycode); + } + } + // tap plus down (or double tap): keycode (one shot) shift + else if (state->count > 1) { + double_shift(keycode, layer); + } + // down: shift + else if (state->pressed) { + layer_on(layer); + } + // tap: keycode + else { + modifier(register_code); + tap_key (keycode); + modifier(unregister_code); + } +} + +void tap_reset(uint16_t keycode, uint8_t layer) +{ + unregister_code(keycode); + if (DT_SHIFT && dt_shift) { + clear_oneshot_layer_state(ONESHOT_PRESSED); + dt_shift = 0; + } + else { + layer_off(layer); + } +} + +// augment pseudo LT (_RSHIFT, KC_ENT) handling below for rapid sequences +void enter(qk_tap_dance_state_t *state, void *user_data) +{ + tap_shift(state, KC_ENT, _RSHIFT); +} + +void enter_reset(qk_tap_dance_state_t *state, void *user_data) +{ + tap_reset(KC_ENT, _RSHIFT); +} + +// augment pseudo LT (_LSHIFT, KC_SPC) handling below for rapid sequences +void space(qk_tap_dance_state_t *state, void *user_data) +{ + tap_shift(state, KC_SPC, _LSHIFT); +} + +void space_reset(qk_tap_dance_state_t *state, void *user_data) +{ + tap_reset(KC_SPC, _LSHIFT); +} + +// ......................................................... Triple Dance Insert + +void double_max(uint8_t count, uint8_t shift, uint16_t keycode) +{ + if (shift) { + shift_key(keycode); + if (count > 1) { + shift_key(keycode); + } + } + else { + tap_key(keycode); + if (count > 1) { + tap_key(keycode); + } + } +} + +void colon(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key (KC_SPC); + shift_key(KC_SCLN); + shift_key(KC_SCLN); + tap_key (KC_SPC); + } + else { + double_max(state->count, SHIFT, KC_SCLN); + } + reset_tap_dance(state); +} + +void eql(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key(KC_SPC); + tap_key(KC_SLSH); + tap_key(KC_EQL); + tap_key(KC_SPC); + } + else { + double_max(state->count, NOSHIFT, KC_EQL); + } + reset_tap_dance(state); +} + +void greater(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key (KC_SPC); + tap_key (KC_MINS); + shift_key(KC_DOT); + tap_key (KC_SPC); + } + else { + double_max(state->count, SHIFT, KC_DOT); + } + reset_tap_dance(state); +} + +void lesser(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 2) { + tap_key (KC_SPC); + shift_key(KC_COMM); + tap_key (KC_MINS); + tap_key (KC_SPC); + } + else { + double_max(state->count, SHIFT, KC_COMM); + } + reset_tap_dance(state); +} + +void tilde(qk_tap_dance_state_t *state, void *user_data) +{ + // double tap plus down: repeating keycode + if (state->count > 2) { + register_code(KC_LSFT); + register_code(KC_GRV); + } + // tap: keycode + else { + shift_key(KC_GRV); + // double tap: unix home directory + if (state->count > 1) { + tap_key(KC_SLSH); + } + } +} + +void tilde_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_GRV); + unregister_code(KC_LSFT); +} + +// ............................................................. Tap Dance Pairs + +// tap dance shift rules +#define S_NEVER 0 +#define S_SINGLE 1 +#define S_DOUBLE 2 +#define S_ALWAYS S_SINGLE | S_DOUBLE + +void symbol_pair(uint8_t shift, uint16_t left, uint16_t right) +{ + if (shift & S_DOUBLE) { + shift_key(left); + shift_key(right); + } + else { + tap_key(left); + tap_key(right); + } +} + +#define CLOSE 1 + +// tap dance symbol pairs +void tap_pair(qk_tap_dance_state_t *state, uint8_t shift, uint16_t left, uint16_t right, uint16_t modifier, uint8_t close) +{ + // triple tap: left right with cursor between symbol pair a la vim :-) + if (state->count > 2) { + symbol_pair(shift, left, right); + tap_key (KC_LEFT); + } + // double tap: left right + else if (state->count > 1) { + symbol_pair(shift, left, right); + } + // down: modifier + else if (state->pressed) { + if (modifier) { + register_code(modifier); + } + } + // tap: left (close: right) + else { + if (shift & S_SINGLE) { + shift_key(close ? right : left); + } + else { + tap_key(close ? right : left); + } + } + if (!modifier) { + reset_tap_dance(state); + } +} + +void doublequote(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_QUOT, KC_QUOT, 0, 0); +} + +void grave(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_GRV, KC_GRV, 0, 0); +} + +void lbrace(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, 0); +} + +void lcurly(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, 0); +} + +void lparen(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_9, KC_0, KC_LCTL, 0); +} + +void lparen_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_LCTL); +} + +void quote(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_QUOT, KC_QUOT, 0, 0); +} + +void rangle(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_COMM, KC_DOT, 0, CLOSE); +} + +void rbrace(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_NEVER, KC_LBRC, KC_RBRC, 0, CLOSE); +} + +void rcurly(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_LBRC, KC_RBRC, 0, CLOSE); +} + +void rparen(qk_tap_dance_state_t *state, void *user_data) +{ + tap_pair(state, S_ALWAYS, KC_9, KC_0, 0, CLOSE); +} + +void rparen_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_LCTL); +} + +// ............................................................ Tap Dance Insert + +void comma(qk_tap_dance_state_t *state, void *user_data) +{ + tap_key(KC_COMM); + if (state->count > 1) { + tap_key(KC_SPC); + } + reset_tap_dance(state); +} + +void dot(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { + shift_key(KC_COLN); + } + else { + tap_key(KC_DOT); + } + reset_tap_dance(state); +} + +// compile time macro string, see functions/hardware planck script +void private(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { +#ifdef PRIVATE_STRING +#include "private_string.h" +#endif + } + reset_tap_dance(state); +} + +// config.h defined string +void send(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { + SEND_STRING(PUBLIC_STRING); + } + reset_tap_dance(state); +} + +// .......................................................... Tap Dance One Shot + +void caps(qk_tap_dance_state_t *state, void *user_data) +{ + if (state->count > 1) { + tap_key(KC_CAPS); + } + else { + set_oneshot_mods(MOD_LSFT); + register_code (KC_LSFT); // on hold down + } +} + +void caps_reset(qk_tap_dance_state_t *state, void *user_data) +{ + unregister_code(KC_LSFT); +} + +// ................................................................... Tap Dance + +qk_tap_dance_action_t tap_dance_actions[] = { + [_CAPS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, caps, caps_reset) + ,[_COLN] = ACTION_TAP_DANCE_FN (colon) + ,[_COMM] = ACTION_TAP_DANCE_FN (comma) + ,[_DOT] = ACTION_TAP_DANCE_FN (dot) + ,[_DQOT] = ACTION_TAP_DANCE_FN (doublequote) + ,[_ENT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, enter, enter_reset) + ,[_EQL] = ACTION_TAP_DANCE_FN (eql) + ,[_GRV] = ACTION_TAP_DANCE_FN (grave) + ,[_GT] = ACTION_TAP_DANCE_FN (greater) + ,[_LBRC] = ACTION_TAP_DANCE_FN (lbrace) + ,[_LCBR] = ACTION_TAP_DANCE_FN (lcurly) + ,[_LPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lparen, lparen_reset) + ,[_LT] = ACTION_TAP_DANCE_FN (lesser) + ,[_PRIV] = ACTION_TAP_DANCE_FN (private) + ,[_QUOT] = ACTION_TAP_DANCE_FN (quote) + ,[_RBRC] = ACTION_TAP_DANCE_FN (rbrace) + ,[_RCBR] = ACTION_TAP_DANCE_FN (rcurly) + ,[_RNGL] = ACTION_TAP_DANCE_FN (rangle) + ,[_RPRN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rparen, rparen_reset) + ,[_SEND] = ACTION_TAP_DANCE_FN (send) + ,[_SPC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, space, space_reset) + ,[_TILD] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tilde, tilde_reset) +}; + +// .............................................................. Dynamic Layers + +#define LEFT 1 +#define RIGHT 2 +static uint8_t thumb = 0; + +// LEFT (KC_SPC, S(KC_BSLS)), RIGHT (KC_LEFT, S(KC_LEFT)) opposite thumb combinations, see process_record_user() +// up, up -> _BASE +// up, down -> _SYMBOL +// down, up -> _NUMBER +// down, down -> _MOUSE // see layer keycodes that raise mouse layer +#define THUMBS_DOWN _MOUSE // layer + +static uint8_t overlayer = 0; + +// left right thumb layer combinations +void thumb_layer(keyrecord_t *record, uint8_t side, uint8_t shift, uint16_t keycode, uint8_t thumb_dn_layer, uint8_t thumb_up_layer) +{ + if (record->event.pressed) { + // layer_on via tap_layer(), see process_record_user() + key_timer = timer_read(); + thumb = thumb | side; + } + else { + layer_off(thumb_dn_layer); + // opposite thumb_layer() thumb may have switched effective layer! + if (overlayer) { + layer_off(overlayer); + overlayer = 0; + } + if (!key_press(shift, keycode)) { + layer_off(THUMBS_DOWN); // both thumbs needed + // opposite thumb down? see left right combination layer table above + if (thumb & (side == LEFT ? RIGHT : LEFT)) { + layer_on(thumb_up_layer); + overlayer = thumb_up_layer; + } + } + clear_mods(); + thumb = thumb & ~side; + key_timer = 0; + } +} + +// #ifdef STENO_ENABLE +// // LT for steno keycode +// void stn_layer(keyrecord_t *record, uint16_t keycode, uint8_t layer) +// { +// if (record->event.pressed) { +// key_timer = timer_read(); +// if (keycode) { +// process_steno(keycode, record); +// } +// layer_on(layer); +// } +// else { +// layer_off(layer); +// if (keycode) { +// if (timer_elapsed(key_timer) < TAPPING_TERM) { +// process_steno(keycode, record); +// } +// else { +// // clear pressed state (request push of updated) process_steno.c and .h +// // steno_clear_state(); +// } +// } +// key_timer = 0; +// } +// } +// #endif + +// LT for S(keycode) +void lt_shift(keyrecord_t *record, uint16_t keycode, uint8_t layer) +{ + if (record->event.pressed) { + key_timer = timer_read(); + layer_on(layer); + } + else { + layer_off(layer); + // for shifted keycodes, hence, LT_SHIFT + key_press(SHIFT, keycode); + clear_mods(); + key_timer = 0; + } +} + +// set layer asap to overcome macro latency errors, notably tap dance and LT usage +// this routine inexplicably (?) sets layer_on() faster than can be done in thumb_layer() +void tap_layer(keyrecord_t *record, uint8_t layer) +{ + if (record->event.pressed) { + layer_on(layer); + } + else { + layer_off(layer); + } +} + +// ..................................................................... Keymaps + +// void persistant_default_layer_set(uint16_t default_layer) +// { +// eeconfig_update_default_layer(default_layer); +// default_layer_set (default_layer); +// } + +void clear_layers(void) +{ + uint8_t layer; + for (layer = 0; layer < _END_LAYERS; layer++) { + layer_off(layer); + } +} + +#ifdef CENTER_TT +static uint16_t tt_keycode = 0; // current TT keycode + +void clear_tt(void) +{ + if (tt_keycode == KC_CAPS) { + tap_key(KC_CAPS); // clear capslock + } + tt_keycode = 0; + clear_layers(); + set_single_persistent_default_layer(_BASE); +} +#endif + +// txbolt plover run state +static uint8_t plover = 0; + +void base_layer(void) +{ +#ifdef AUDIO_ENABLE + if (plover) { + PLAY_SONG(song_plover_gb); + } + else { + PLAY_SONG(song_qwerty); + } +#endif + clear_layers(); + set_single_persistent_default_layer(_BASE); +} + +void toggle_plover(uint8_t state) +{ + if (plover != state) { +#ifdef PLOVER_KEYBIND +#include "plover_keybind.h" +#endif + plover = state; + } +} + +void steno(keyrecord_t *record) +{ + if (record->event.pressed) { +#ifdef AUDIO_ENABLE + PLAY_SONG(song_plover); +#endif + clear_layers(); + layer_on(_PLOVER); + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + keymap_config.raw = eeconfig_read_keymap(); + keymap_config.nkro = 1; + eeconfig_update_keymap(keymap_config.raw); + if (!plover) { + toggle_plover(1); + } + } +} + +void steno_exit(keyrecord_t *record) +{ + if (record->event.pressed) { + base_layer(); + toggle_plover(0); + } +} diff --git a/keyboards/planck/keymaps/sdothum/common/number_fkey_layout.h b/keyboards/planck/keymaps/sdothum/common/number_fkey_layout.h new file mode 100644 index 00000000000..4824b82a070 --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/common/number_fkey_layout.h @@ -0,0 +1,87 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ......................................................... Number Keypad Layer +#ifdef SHIFT_SYMBOLS + // .-----------------------------------------------------------------------------------. + // | | F | E | D | | | | / | 7 | 8 | 9 | * | + // |-----------------------------------------------------------------------------------| + // | Ctrl | C | B | A | | | | . | 4 | 5 | 6 | - | + // |-----------------------------------------------------------------------------------| + // | | # | G | \ | | | | , | 1 | 2 | 3 | + | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | 0 | = | | | | + // | | | | f() | | | | = | 0 | | | | + // '-----------------------------------------------------------------------------------' + + [_NUMBER] = { + {_______, KC_F, MT_E, KC_D, _______, ___x___, ___x___, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR}, + {OS_CTL, GT_C, AT_B, ST_A, _______, ___x___, ___x___, TD_DOT, KC_4, KC_5, KC_6, KC_MINS}, + {_______, KC_HASH, SM_G, KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1, KC_2, KC_3, KC_PLUS}, +#ifdef THUMB_0 + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0, LT_EQL, ___x___, ___x___, ___x___}, +#else + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL, LT_0, ___x___, ___x___, ___x___}, +#endif + }, +#else + // .-----------------------------------------------------------------------------------. + // | | F | E | D | | | | / | 7 | 8 | 9 | * | + // |-----------------------------------------------------------------------------------| + // | Ctrl | C | B | A | | | | . | 4 | 5 | 6 | - | + // |-----------------------------------------------------------------------------------| + // | | # | X | G | | | | , | 1 | 2 | 3 | + | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | 0 | = | | | | + // | | | | f() | | | | = | 0 | | | | + // '-----------------------------------------------------------------------------------' + + [_NUMBER] = { + {_______, KC_F, MT_E, KC_D, _______, _______, _______, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR}, + {OS_CTL, GT_C, AT_B, LT_A, _______, _______, _______, KC_DOT, KC_4, KC_5, KC_6, KC_MINS}, + {_______, KC_HASH, MT_X, S(KC_G), _______, _______, _______, TD_COMM, KC_1, KC_2, KC_3, KC_PLUS}, +#ifdef THUMB_0 + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_0, LT_EQL, ___x___, ___x___, ___x___}, +#else + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_EQL, LT_0, ___x___, ___x___, ___x___}, +#endif + }, + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | { | & | ? | : | } | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | ( | $ | % | ^ | ) | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | [ | < | ~ | > | ] | + // |-----------------------------------------------------------------------------------| + // | | | | f() | | | | \ | | | | | | + // '-----------------------------------------------------------------------------------' + + [_NUMSYM] = { + {_______, _______, _______, ___x___, _______, _______, _______, TD_LCBR, KC_AMPR, KC_QUES, KC_COLN, KC_RCBR}, + {___x___, ___x___, ___x___, ___fn__, _______, _______, _______, TD_LPRN, KC_DLR, KC_PERC, KC_CIRC, KC_RPRN}, + {_______, _______, _______, ___x___, _______, _______, _______, TD_LBRC, KC_LT, KC_TILD, KC_GT, KC_RBRC}, + {___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___, KC_BSLS, KC_PIPE, ___x___, ___x___, ___x___}, + }, +#endif + +// ............ .................................................. Function Keys + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | F7 | F8 | F9 | F12 | + // |-----------------------------------------------------------------------------------| + // | Ctrl | GUI | Alt | Shift| | | | | F4 | F5 | F6 | F11 | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | F1 | F2 | F3 | F10 | + // |-----------------------------------------------------------------------------------| + // | | | | | | f() | | + | | | | | + // | | | | | f() | | | + | | | | | see _PLOVER + // '-----------------------------------------------------------------------------------' + + [_FNCKEY] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7, KC_F8, KC_F9, KC_F12 }, + {OS_CTL, OS_GUI, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_F4, KC_F5, KC_F6, KC_F11 }, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1, KC_F2, KC_F3, KC_F10 }, + {_______, _______, _______, _______, ___fn__, ___fn__, _______, KC_PLUS, _______, _______, _______, _______}, + }, + diff --git a/keyboards/planck/keymaps/sdothum/common/plover_keybind.h b/keyboards/planck/keymaps/sdothum/common/plover_keybind.h new file mode 100644 index 00000000000..88ec727bfd6 --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/common/plover_keybind.h @@ -0,0 +1,7 @@ + +// simple window manager specific plover keybind hook + +// toggle plover application, see herbstluftwm/config/appbinds +register_code (KC_LGUI); +shift_key (KC_RGHT); +unregister_code(KC_LGUI); diff --git a/keyboards/planck/keymaps/sdothum/common/sounds.h b/keyboards/planck/keymaps/sdothum/common/sounds.h new file mode 100644 index 00000000000..1bfc7a6da0c --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/common/sounds.h @@ -0,0 +1,14 @@ + +// ................................................................ Audio Sounds + +#ifdef AUDIO_ENABLE +float song_startup [][2] = SONG(STARTUP_SOUND); +float song_colemak [][2] = SONG(COLEMAK_SOUND); +float song_qwerty [][2] = SONG(QWERTY_SOUND); +float song_plover [][2] = SONG(PLOVER_SOUND); +float song_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); +float song_caps_on [][2] = SONG(CAPS_LOCK_ON_SOUND); +float song_caps_off [][2] = SONG(CAPS_LOCK_OFF_SOUND); +float music_scale [][2] = SONG(MUSIC_SCALE_SOUND); +float song_goodbye [][2] = SONG(GOODBYE_SOUND); +#endif diff --git a/keyboards/planck/keymaps/sdothum/common/steno_layout.h b/keyboards/planck/keymaps/sdothum/common/steno_layout.h new file mode 100644 index 00000000000..ab4a6fe011c --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/common/steno_layout.h @@ -0,0 +1,39 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ...................................................................... Plover +#ifdef STENO_ENABLE + // ,-----------------------------------------------------------------------------------. + // | # | # | # | # | # | # | # | # | # | # | # | # | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Base | S | T | P | H | * | * | F | P | L | T | D | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Base | S | K | W | R | * | * | R | B | G | S | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | A | O | E | U | | + // `-----------------------------------------------------------------------------------' + + [_PLOVER] = { + {STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC }, + {BASE1, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR }, + {BASE2, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR }, + {_______, _______, _______, PS_STNA, PS_STNO, _______, _______, PS_STNE, PS_STNU, _______, _______, _______}, + }, +#else + // ,-----------------------------------------------------------------------------------. + // | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | Base | S | T | P | H | * | * | F | P | L | T | D | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Base | S | K | W | R | * | * | R | B | G | S | Z | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | A | O | E | U | | + // `-----------------------------------------------------------------------------------' + + [_PLOVER] = { + {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, + {BASE1, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, + {BASE2, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {_______, _______, _______, LT_C, LT_V, _______, _______, LT_N, LT_M, _______, _______, _______}, + }, +#endif diff --git a/keyboards/planck/keymaps/sdothum/common/symbol_guifn_layout.h b/keyboards/planck/keymaps/sdothum/common/symbol_guifn_layout.h new file mode 100644 index 00000000000..2edfe1a04a5 --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/common/symbol_guifn_layout.h @@ -0,0 +1,75 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ..................................................... Symbol Navigation Layer +#ifdef SHIFT_SYMBOLS + // .-----------------------------------------------------------------------------------. + // | | ~ | * | & | | | | | Home | Up | End | PgUp | + // |-----------------------------------------------------------------------------------| + // | Ctrl | ^ | % | $ | | | | | Left | Down | Right| PgDn | + // |-----------------------------------------------------------------------------------| + // | | # | @ | ! | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | |Adjust| \ | | | | f() | | | | + // '-----------------------------------------------------------------------------------' + + [_SYMBOL] = { + {_______, KC_TILD, KC_ASTR, KC_AMPR, _______, ___x___, ___x___, _______, KC_HOME, KC_UP, KC_END, KC_PGUP}, + {OS_CTL, SM_CIRC, SM_PERC, SM_DLR, _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN}, + {_______, KC_HASH, KC_AT, KC_EXLM, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {___x___, ___x___, ___x___, ADJUST, LT_BSLS, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___}, + }, +#else + // .-----------------------------------------------------------------------------------. + // | { | . | * | & | } | | | | Home | Up | End | PgUp | + // |-----------------------------------------------------------------------------------| + // | ( | ^ | % | $ | ) | | | | Left | Down | Right| PgDn | + // |-----------------------------------------------------------------------------------| + // | [ | # | @ | ! | ] | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | | | \ | | | | f() | | | | + // '-----------------------------------------------------------------------------------' + + [_SYMBOL] = { + {KC_LCBR, KC_DOT, KC_ASTR, KC_AMPR, TD_RCBR, _______, _______, _______, KC_HOME, KC_UP, KC_END, KC_PGUP}, + {SM_LPRN, SM_CIRC, SM_PERC, SM_DLR, TD_RPRN, _______, _______, _______, LT_LFTX, KC_DOWN, KC_RGHT, KC_PGDN}, + {KC_LBRC, KC_HASH, KC_AT, KC_EXLM, TD_RBRC, _______, _______, _______, _______, _______, _______, _______}, + {___x___, ___x___, ___x___, SL_PIPE, LT_BSLS, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___}, + }, + + // .-----------------------------------------------------------------------------------. + // | | ? | + | ~ | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | < | = | > | | | | | f() | | | | + // |-----------------------------------------------------------------------------------| + // | | 3 | 2 | 1 | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | f() | | | | + // '-----------------------------------------------------------------------------------' + + [_SYMREG] = { + {___x___, KC_QUES, KC_PLUS, KC_TILD, ___x___, _______, _______, _______, ___x___, ___x___, ___x___, ___x___}, + {___x___, KC_LT, KC_EQL, TD_RNGL, ___x___, _______, _______, _______, ___fn__, ___x___, ___x___, ___x___}, + {___x___, KC_3, KC_2, KC_1, ___x___, _______, _______, _______, _______, _______, _______, _______}, + {___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___x___, ___fn__, ___x___, ___x___, ___x___}, + }, +#endif + +// ............................................................... Mouse Actions + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | Left | Up | Right| Up | + // |-----------------------------------------------------------------------------------| + // | | Btn3 | Btn2 | Btn1 | | | | | Left | Down | Right| Down | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | | | | f() | | | | f() | | | | + // '-----------------------------------------------------------------------------------' + + [_MOUSE] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U}, + {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D}, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, ___fn__, _______, _______, _______, ___fn__, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/sdothum/common/tapdance.h b/keyboards/planck/keymaps/sdothum/common/tapdance.h new file mode 100644 index 00000000000..d778286bf1e --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/common/tapdance.h @@ -0,0 +1,49 @@ + +// tap dance keys +enum tap_dance { + _CAPS = 0 + ,_COLN + ,_COMM + ,_DOT + ,_DQOT + ,_ENT + ,_EQL + ,_GRV + ,_GT + ,_LBRC + ,_LCBR + ,_LPRN + ,_LT + ,_PRIV + ,_QUOT + ,_RBRC + ,_RCBR + ,_RNGL + ,_RPRN + ,_SEND + ,_SPC + ,_TILD +}; + +#define TD_CAPS TD(_CAPS) +#define TD_COLN TD(_COLN) +#define TD_COMM TD(_COMM) +#define TD_DOT TD(_DOT) +#define TD_DQOT TD(_DQOT) +#define TD_ENT TD(_ENT) +#define TD_EQL TD(_EQL) +#define TD_GRV TD(_GRV) +#define TD_GT TD(_GT) +#define TD_LBRC TD(_LBRC) +#define TD_LCBR TD(_LCBR) +#define TD_LPRN TD(_LPRN) +#define TD_LT TD(_LT) +#define TD_PRIV TD(_PRIV) // compile time macro string, provided in private_string.h +#define TD_QUOT TD(_QUOT) +#define TD_RBRC TD(_RBRC) +#define TD_RCBR TD(_RCBR) +#define TD_RNGL TD(_RNGL) +#define TD_RPRN TD(_RPRN) +#define TD_SEND TD(_SEND) // config.h defined macro string +#define TD_SPC TD(_SPC) // see process_record_user() for extended handling of Spc +#define TD_TILD TD(_TILD) diff --git a/keyboards/planck/keymaps/sdothum/common/toggle_layout.h b/keyboards/planck/keymaps/sdothum/common/toggle_layout.h new file mode 100644 index 00000000000..504a1ff579e --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/common/toggle_layout.h @@ -0,0 +1,102 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ......................................................... Number Keypad Layer + + // .-----------------------------------------------------------------------------------. + // | | F | E | D | | | | / | 7 | 8 | 9 | * | + // |-----------------------------------------------------------------------------------| + // | Ctrl | C | B | A | | | | . | 4 | 5 | 6 | - | + // |-----------------------------------------------------------------------------------| + // | | # | G | \ | | | | , | 1 | 2 | 3 | + | + // |-----------------------------------------------------------------------------------| + // | | f() | Space| 0 | = | | + // | | f() | Space| = | 0 | | + // '-----------------------------------------------------------------------------------' + + [_TTNUMBER] = { + {_______, KC_F, MT_E, KC_D, _______, ___x___, ___x___, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR}, + {OS_CTL, GT_C, AT_B, ST_A, _______, ___x___, ___x___, TD_DOT, KC_4, KC_5, KC_6, KC_MINS}, + {_______, KC_HASH, SM_G, KC_BSLS, _______, ___x___, ___x___, TD_COMM, KC_1, KC_2, KC_3, KC_PLUS}, +#ifdef THUMB_0 + {_______, _______, _______, _______, TT_ESC, KC_SPC, KC_0, LT_EQL, _______, _______, _______, _______}, +#else + {_______, _______, _______, _______, TT_ESC, KC_SPC, KC_EQL, LT_0, _______, _______, _______, _______}, +#endif + }, + +// ............ .................................................. Function Keys + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | F7 | F8 | F9 | F12 | + // |-----------------------------------------------------------------------------------| + // | Ctrl | GUI | Alt | Shift| | | | | F4 | F5 | F6 | F11 | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | F1 | F2 | F3 | F10 | + // |-----------------------------------------------------------------------------------| + // | | f() | | + | | | + // '-----------------------------------------------------------------------------------' + + [_TTFNCKEY] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F7, KC_F8, KC_F9, KC_F12 }, + {OS_CTL, OS_GUI, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_F4, KC_F5, KC_F6, KC_F11 }, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_F1, KC_F2, KC_F3, KC_F10 }, + {_______, _______, _______, _______, TT_ESC, _______, KC_PLUS, _______, _______, _______, _______, _______}, + }, + +// ....................................................................... Regex + + // ,-----------------------------------------------------------------------------------. + // | | ~ | { | } | & | | | % | [ | ] | @ | | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | | ^ | < | > | ? | | | | | ( | ) | $ | | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | | : | ! | = | / | | | \ | * | . | # | | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | | f() | - | + | Space| | + // `-----------------------------------------------------------------------------------' + + [_TTREGEX] = { + {___x___, KC_TILD, KC_LCBR, KC_RCBR, KC_AMPR, ___x___, ___x___, KC_PERC, KC_LBRC, KC_RBRC, KC_AT, ___x___}, + {___x___, KC_CIRC, KC_LT, KC_GT, KC_QUES, ___x___, ___x___, KC_PIPE, KC_LPRN, KC_RPRN, KC_DLR, ___x___}, + {___x___, KC_COLN, KC_EXLM, KC_EQL, KC_SLSH, ___x___, ___x___, KC_BSLS, KC_ASTR, KC_DOT, KC_HASH, ___x___}, + {_______, _______, _______, _______, TT_ESC, KC_MINS, KC_PLUS, KC_SPC, _______, _______, _______, _______}, + }, + +// ............................................................ Navigation Layer + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | Home | Up | End | PgUp | + // |-----------------------------------------------------------------------------------| + // | Ctrl | GUI | Alt | Shift| | | | | Left | Down | Right| PgDn | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | f() | | | | | + // '-----------------------------------------------------------------------------------' + + [_TTCURSOR] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_HOME, KC_UP, KC_END, KC_PGUP}, + {OS_CTL, OS_GUI, OS_ALT, OS_SFT, _______, ___x___, ___x___, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN}, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, TT_ESC, _______, _______, _______, _______, _______, _______, _______}, + }, + +// ............................................................... Mouse Actions + + // .-----------------------------------------------------------------------------------. + // | | | | | | | | | Left | Up | Right| Up | + // |-----------------------------------------------------------------------------------| + // | | Btn3 | Btn2 | Btn1 | | | | | Left | Down | Right| Down | + // |-----------------------------------------------------------------------------------| + // | | | | | | | | | | | | | + // |-----------------------------------------------------------------------------------| + // | | f() | | | | | + // '-----------------------------------------------------------------------------------' + + [_TTMOUSE] = { + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U}, + {_______, KC_BTN3, KC_BTN2, KC_BTN1, _______, ___x___, ___x___, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D}, + {_______, _______, _______, _______, _______, ___x___, ___x___, _______, _______, _______, _______, _______}, + {_______, _______, _______, _______, TT_ESC, _______, _______, _______, _______, _______, _______, _______}, + }, diff --git a/keyboards/planck/keymaps/sdothum/config.h b/keyboards/planck/keymaps/sdothum/config.h new file mode 100644 index 00000000000..4b2cdeece17 --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/config.h @@ -0,0 +1,50 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// required because lower/raise modifiers are redefined by colemak-dh +#define PREVENT_STUCK_MODIFIERS + +// tap dance key press termination interval +#define TAPPING_TERM 250 + +// smooth mouse motion +// #define MOUSEKEY_INTERVAL 20 +// #define MOUSEKEY_DELAY 0 +// #define MOUSEKEY_TIME_TO_MAX 60 +// #define MOUSEKEY_MAX_SPEED 7 +// #define MOUSEKEY_WHEEL_DELAY 0 + +// compile time macro string, see functions/hardware planck script (undefine otherwise) +#define PRIVATE_STRING + +// compile time macro string, must be in quotes +#define PUBLIC_STRING ":%s/arch=(.*)/arch=('any')\n" + +// thumb key tap-shift() double tap: one shot shift (0) off (1) on +#define DT_SHIFT 1 + +// number layer 0 position KEYPAD_0, THUMB_0 +#define THUMB_0 + +// home block shift symbol clustes defined (no overlays required for extended symbols, undefine otherwise) +#define SHIFT_SYMBOLS + +// center column TT assignments (undefine for OSM chords) +#define CENTER_TT +#define TAPPING_TOGGLE 1 + +// home row modifiers +#define HOME_MODS +// fix dual function timing +#define PERMISSIVE_HOLD +#define IGNORE_MOD_TAP_INTERRUPT + +// layout ADNW*, BEAKL*, COLEKA*, QWERTY (default) +#define BEAKLSP + +// sync app with window manager keybind hook defined in plover_keybind.h +#define PLOVER_KEYBIND + +#endif diff --git a/keyboards/planck/keymaps/sdothum/keymap.c b/keyboards/planck/keymaps/sdothum/keymap.c new file mode 100644 index 00000000000..ac509c41dc9 --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/keymap.c @@ -0,0 +1,480 @@ +// This is the canonical layout file for the Quantum project. If you want to add another keyboard, +// this is the style you want to emulate. +// +// To flash planck firmware +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// Reset keyboard or press hw reset button on base (hole) +// +// cd qmk_firmware/keyboards/planck +// sudo make KEYMAP=sdothum dfu +// +// sudo make clean (good practice before flashing) +// sudo make KEYMAP=sdothum (to compile check) +// +// Package requirements (for arch linux) +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// avr-gcc-atmel +// avr-libc-atmel +// dfu-programmer +// +// Notes +// ▔▔▔▔▔ +// ** E R G O W I D E S P L I T ** Layout +// +// Autocompletion tap dance key pairs (),[],{} are available from the +// number/symbol layer, as well as, numerous (un)shift key values +// +// The navigation pad provides a single hand right thumb activated cluster +// with left hand modifiers +// +// #define PRIVATE_STRING includes private_string.h, a user defined code +// block for the PRIV tap dance e.g. SEND_STRING("secret messape"), +// see function private() +// +// Modifier clusters +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// The num and sym keys together access the navigation pad layer +// +// ,-----------------------------------------------------------------------------------. +// | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| +// `-----------------------------------------------------------------------------------' +// +// Hint +// ▔▔▔▔ +// For sculpted keycaps such as Cherry or OEM profile, reverse the Alt, Num, +// Shift, Shift, Nav, Sym keycaps for more ergonomic thumb orientation and +// actuation +// +// Code +// ▔▔▔▔ +// This source is shamelessly based on the "default" planck layout +// +// #ifdef/#endif block structures are not indented, as syntax highlighting +// in vim is sufficient for identification +// +// c++ commenting style is used throughout +// +// Change history +// ▔▔▔▔▔▔▔▔▔▔▔▔▔▔ +// See http://thedarnedestthing.com/planck%20constant +// See http://thedarnedestthing.com/planck%20done + + + +// === N O T E === +// +// sudo CPATH=/common make ... + + +#include "config.h" +#include "planck.h" +#include "action_layer.h" +#ifdef STENO_ENABLE +#include "keymap_steno.h" +#endif +#ifdef AUDIO_ENABLE +#include "audio.h" +#endif +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +enum planck_layers { + _BASE = 0 + ,_SHIFT + ,_LSHIFT + ,_RSHIFT + ,_PLOVER + ,_NUMBER + ,_SYMBOL + ,_FNCKEY + ,_MOUSE +#ifdef CENTER_TT + ,_TTNUMBER + ,_TTREGEX + ,_TTFNCKEY + ,_TTCURSOR + ,_TTMOUSE +#endif +#ifndef SHIFT_SYMBOLS + ,_NUMSYM + ,_SYMREG +#endif + ,_EDIT + ,_QWERTY + ,_ADJUST + ,_END_LAYERS +}; + +enum planck_keycodes { + BASE = SAFE_RANGE + ,BASE1 + ,BASE2 + ,PLOVER + ,PLOEXIT + ,SM_CIRC // pseudo GUI_T(S(KC_6)) for shifted key-codes, see process_record_user() + ,SM_DLR // pseudo SFT_T(S(KC_4)) for shifted key-codes, see process_record_user() + ,SM_G // pseudo MT (MOD_LALT | MOD_LSFT, S(KC_G)) for shifted key-codes, see process_record_user() + ,SM_PERC // pseudo ALT_T(S(KC_5)) for shifted key-codes, see process_record_user() + ,SM_LPRN // pseudo CTL_T(S(KC_9)) for shifted key-codes, see process_record_user() + ,SL_LEFT // pseudo LT (_MOUSE, S(KC_LEFT)) for shifted key-codes, see process_record_user() + ,SP_DEL // pseudo LT (_MOUSE, KC_DEL) for shifted key-codes, see process_record_user() + ,SL_PIPE // pseudo LT (_ADJUST, S(KC_BSLS)) for shifted key-codes, see process_record_user() + ,SL_TAB // pseudo LT (_FNCKEY, S(KC_TAB)) for shifted key-codes, see process_record_user() +#ifdef CENTER_TT + ,TT_ESC +#endif +#ifdef STENO_ENABLE + ,PS_STNA = STN_A + ,PS_STNO = STN_O + ,PS_STNE = STN_E + ,PS_STNU = STN_U +#else + ,LT_C = LT (_NUMBER, KC_C) + ,LT_V = LT (_FNCKEY, KC_V) + ,LT_N = LT (_EDIT, KC_N) + ,LT_M = LT (_SYMBOL, KC_M) +#endif + ,PS_BASE +}; + +// modifier keys +#define AT_B ALT_T(KC_B) +#define AT_DOWN ALT_T(KC_DOWN) +#define CT_RGHT CTL_T(KC_RGHT) +#define GT_C GUI_T(KC_C) +#define GT_UP GUI_T(KC_UP) +#define MT_E MT (MOD_LCTL | MOD_LALT, KC_E) +#define MT_X MT (MOD_LALT | MOD_LSFT, KC_X) +#define ST_A SFT_T(KC_A) +#ifdef HOME_MODS +#define HOME_K CTL_T(KC_K) +#define HOME_H GUI_T(KC_H) +#define HOME_E ALT_T(KC_E) +#define HOME_A SFT_T(KC_A) +#if defined(BEAKLMU) || defined(BEAKLSP) +#define HOME_T SFT_T(KC_T) +#define HOME_R ALT_T(KC_R) +#define HOME_S GUI_T(KC_S) +#define HOME_W CTL_T(KC_W) +#else +#define HOME_T SFT_T(KC_T) +#define HOME_S ALT_T(KC_S) +#define HOME_N GUI_T(KC_N) +#define HOME_B CTL_T(KC_B) +#endif +#else +#define HOME_K KC_K +#define HOME_H KC_H +#define HOME_E KC_E +#define HOME_A KC_A +#define HOME_T KC_T +#define HOME_S KC_S +#define HOME_N KC_N +#define HOME_B KC_B +#endif + +#define S_DOWN S (KC_DOWN) +#define S_LEFT S (KC_LEFT) +#define S_RGHT S (KC_RGHT) +#define S_TAB S (KC_TAB) +#define S_UP S (KC_UP) + +#include "tapdance.h" + +// keycodes +#define ___x___ KC_TRNS +#define ___fn__ KC_TRNS +#ifdef _______ +#undef _______ +#endif +#define _______ KC_NO + +#define COPY LCTL(KC_C) +#define CUT LCTL(KC_X) +#define EOT LCTL(KC_D) +#define NAK LCTL(KC_U) +#define PASTE LCTL(KC_V) +#define UNDO LCTL(KC_Z) +#define TMCOPY LALT(LCTL(KC_C)) +#define TMPASTE LALT(LCTL(KC_V)) +#define LT_BSLS LT (_MOUSE, KC_BSLS) // see process_record_user() for extended handling +#define LT_BSPC LT (_EDIT, KC_BSPC) +#define SP_LEFT LT (_EDIT, KC_LEFT) +#define LT_ESC LT (_NUMBER, KC_ESC) +#define LT_LEFT LT (_SYMBOL, KC_LEFT) // see process_record_user() for extended handling +#define SP_BSPC LT (_SYMBOL, KC_BSPC) // see process_record_user() for extended handling +#define LT_TAB LT (_FNCKEY, KC_TAB) +#define LT_INS LT (_FNCKEY, KC_INS) +#define LT_ALTG LT (_FNCKEY, KC_RALT) +#define ADJUST MO (_ADJUST) +#define OS_ALT OSM (MOD_LALT) +#define OS_CTL OSM (MOD_LCTL) +#define OS_GUI OSM (MOD_LGUI) +#define OS_SFT OSM (MOD_LSFT) +#define OS_CALT OSM (MOD_LALT | MOD_LCTL) +#define OS_CGUI OSM (MOD_LGUI | MOD_LCTL) +#define OS_CSFT OSM (MOD_LSFT | MOD_LCTL) +#define OS_SALT OSM (MOD_LALT | MOD_LSFT) +#define OS_SGUI OSM (MOD_LGUI | MOD_LSFT) + +#ifdef CENTER_TT +#ifdef BEAKLSP +#define CNTR_TL OSM (MOD_LSFT) +#else +#define CNTR_TL TT (_TTFNCKEY) +#endif +#define CNTR_TR KC_CAPS +#define CNTR_HL TT (_TTCURSOR) +#define CNTR_HR TT (_TTMOUSE) +#define CNTR_BL TT (_TTNUMBER) +#define CNTR_BR TT (_TTREGEX) +#else +#define CNTR_TL OSM (MOD_LALT | MOD_LCTL) +#define CNTR_TR OSM (MOD_LGUI | MOD_LCTL) +#define CNTR_HL OSM (MOD_LALT | MOD_LSFT) +#define CNTR_HR OSM (MOD_LGUI | MOD_LSFT) +#define CNTR_BL TD (_CAPS) +#define CNTR_BR OSM (MOD_LSFT | MOD_LCTL) +#endif + +#ifdef THUMB_0 +#define LT_EQL LT (_ADJUST, KC_EQL) +#else +#define LT_0 LT (_ADJUST, KC_0) +#endif +#ifndef SHIFT_SYMBOLS +#define LT_A LT (_NUMSYM, KC_A) +#define LT_LFTX LT (_SYMREG, KC_LEFT) +#endif + +// ........................................................ Default Alpha Layout + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +#include "beakl.h" +#include "colemak.h" +#include "qwerty.h" +#include "steno_layout.h" + +// ...................................................... Number / Function Keys + +#include "number_fkey_layout.h" + +// ......................................................... Symbol / Navigation + +#include "symbol_guifn_layout.h" + +// ............................................................... Toggle Layers + +#ifdef CENTER_TT +#include "toggle_layout.h" +#endif + +// ......................................................... Short Cuts / Adjust + +#include "chord_layout.h" + +}; + +// ...................................................................... Sounds + +#include "sounds.h" + +// ........................................................... User Keycode Trap + +#include "keycode_functions.h" + +#define BASE_1 1 +#define BASE_2 2 +#define BASE_12 3 +static uint8_t base_n = 0; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + switch (keycode) { + case BASE1: + if (record->event.pressed) { + base_n = base_n | BASE_1; + if (base_n == BASE_12) { + base_layer(); + } + } + else { + base_n = base_n & ~BASE_1; + } + return false; + case BASE2: + if (record->event.pressed) { + base_n = base_n | BASE_2; + if (base_n == BASE_12) { + base_layer(); + } + } + else { + base_n = base_n & ~BASE_2; + } + return false; + case AT_DOWN: +#ifdef HOME_MODS + case HOME_E: +#if defined(BEAKLMU) || defined(BEAKLSP) + case HOME_R: +#else + case HOME_S: +#endif +#endif + tap_mods(record, KC_LALT); + break; + case CT_RGHT: +#ifdef HOME_MODS + case HOME_K: +#if defined(BEAKLMU) || defined(BEAKLSP) + case HOME_W: +#else + case HOME_B: +#endif +#endif + tap_mods(record, KC_LCTL); + break; + case GT_UP: +#ifdef HOME_MODS + case HOME_H: +#if defined(BEAKLMU) || defined(BEAKLSP) + case HOME_S: +#else + case HOME_N: +#endif +#endif + tap_mods(record, KC_LGUI); + break; +#ifdef HOME_MODS + case HOME_A: + case HOME_T: + tap_mods(record, KC_LSFT); + break; +#endif +#ifdef CENTER_TT + case TT_ESC: + clear_tt(); // exit TT layer + return false; +#endif + case LT_ESC: +#ifdef CENTER_TT + if (tt_keycode != 0) { + clear_tt(); // exit TT layer + return false; + } +#endif + tap_layer(record, _NUMBER); + break; + case LT_LEFT: + case SP_BSPC: + tap_layer(record, _SYMBOL); + // LT (_SYMBOL, KC_LEFT) left right combination layer + thumb_layer(record, RIGHT, 0, 0, _SYMBOL, _LSHIFT); + break; + case OS_ALT: + tap_mods(record, KC_LALT); + break; + case OS_CTL: + tap_mods(record, KC_LCTL); + break; + case OS_GUI: + tap_mods(record, KC_LGUI); + break; + case SM_CIRC: + // GUI_T(S(KC_6)) + mt_shift(record, KC_LGUI, 0, KC_6); + break; + case SM_DLR: + // SFT_T(S(KC_4)) + mt_shift(record, KC_LSFT, 0, KC_4); + break; + case SM_G: + // MT(MOD_LALT | MOD_LSFT, S(KC_G)) + mt_shift(record, KC_LALT, KC_LSFT, KC_G); + break; + case SM_LPRN: + // CTL_T(S(KC_9)) + mt_shift(record, KC_LCTL, 0, KC_9); + break; + case SM_PERC: + // ALT_T(S(KC_5)) + mt_shift(record, KC_LALT, 0, KC_5); + break; + case LT_BSLS: + tap_layer(record, _MOUSE); + // LT (_MOUSE, KC_BSLS) left right combination layer, see #define LT_BSLS + thumb_layer(record, LEFT, 0, 0, _MOUSE, _SYMBOL); + break; + case SL_LEFT: + tap_layer(record, _MOUSE); + // LT (_MOUSE, S(KC_LEFT)) left right combination layer + thumb_layer(record, RIGHT, SHIFT, KC_LEFT, _MOUSE, _LSHIFT); + break; + case SP_DEL: + tap_layer(record, _MOUSE); + // LT (_MOUSE, S(KC_LEFT)) left right combination layer + thumb_layer(record, RIGHT, NOSHIFT, KC_DEL, _MOUSE, _LSHIFT); + break; + case SL_PIPE: + // LT (_ADJUST, S(KC_BSLS)) emulation + lt_shift(record, KC_BSLS, _ADJUST); + break; + case SL_TAB: + // LT (_FNCKEY, S(KC_TAB)) emulation + lt_shift(record, KC_TAB, _FNCKEY); + break; + case TD_ENT: + tap_layer(record, _RSHIFT); + // LT (_RSHIFT, KC_ENT) emulation, see tap dance enter + break; + case TD_SPC: + tap_layer(record, _LSHIFT); + // LT (_LSHIFT, KC_SPC) left right combination layer, see tap dance TD_SPC + thumb_layer(record, LEFT, 0, 0, _LSHIFT, _SYMBOL); + break; +#ifdef CENTER_TT + case CNTR_TL: + case CNTR_TR: + case CNTR_HL: + case CNTR_HR: + case CNTR_BL: + case CNTR_BR: + if (tt_keycode != keycode && tt_keycode != 0) { + clear_tt(); // return to base layer first if different TT layer selected + } + tt_keycode = keycode; + break; +#endif +// #ifdef STENO_ENABLE +// case PS_STNA: +// stn_layer(record, STN_A, _NUMBER); +// break; +// case PS_STNO: +// stn_layer(record, STN_O, _FNCKEY); +// break; +// case PS_STNE: +// stn_layer(record, STN_E, _EDIT); +// break; +// case PS_STNU: +// stn_layer(record, STN_U, _SYMBOL); +// break; +// #endif + case PS_BASE: + if (record->event.pressed) { + base_layer(); + } + return false; + case PLOVER: + steno(record); + return false; + case PLOEXIT: + steno_exit(record); + return false; + } + return true; +} + +#include "init.h" diff --git a/keyboards/planck/keymaps/sdothum/qwerty.h b/keyboards/planck/keymaps/sdothum/qwerty.h new file mode 100644 index 00000000000..d11d0478b3f --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/qwerty.h @@ -0,0 +1,64 @@ + +// const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +// ...................................................................... Qwerty +#ifdef QWERTY + // ,-----------------------------------------------------------------------------------. + // | Q | W | E | R | T | ^Alt | ^GUI | Y | U | I | O | P | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | S | D | F | G | ↑Alt | ↑GUI | H | J | K | L | ; | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | V | B | Caps |^Shift| N | M | , | . | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_BASE] = { + {KC_Q, KC_W, KC_E, KC_R, KC_T, CNTR_TL, CNTR_TR, KC_Y, KC_U, KC_I, KC_O, KC_P }, + {KC_A, KC_S, KC_D, KC_F, KC_G, CNTR_HL, CNTR_HR, KC_H, KC_J, KC_K, KC_L, KC_SCLN}, + {KC_Z, KC_X, KC_C, KC_V, KC_B, CNTR_BL, CNTR_BR, KC_N, KC_M, KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + [_SHIFT] = { + {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)}, + {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), KC_SCLN}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), KC_COMM, KC_DOT, TD_QUOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, TD_SPC, LT_TAB, LT_BSPC, TD_ENT, LT_LEFT, AT_DOWN, GT_UP, CT_RGHT}, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | E | R | T | ^Alt | ^GUI | Y | U | I | O | P | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | S | D | F | G | ↑Alt | ↑GUI | H | J | K | L | : | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | V | B | Caps |^Shift| N | M | / | ? | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Esc | f() | Tab | Del | - | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_LSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)}, + {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), TD_COLN}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), KC_SLSH, KC_QUES, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, LT_ESC, ___fn__, LT_TAB, KC_DEL, KC_MINS, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, + + // ,-----------------------------------------------------------------------------------. + // | Q | W | E | R | T | ^Alt | ^GUI | Y | U | I | O | P | + // |------+------+------+------+------+-------------+------+------+------+------+------| + // | A | S | D | F | G | ↑Alt | ↑GUI | H | J | K | L | : | + // |------+------+------+------+------+------|------+------+------+------+------+------| + // | Z | X | C | V | B | Caps |^Shift| N | M | ~ | ` | " | + // |------+------+------+------+------+------+------+------+------+------+------+------| + // | Ctrl | GUI | Alt | Caps | _ | ↑Tab | Bksp | f() | Left | Down | Up | Right| + // `-----------------------------------------------------------------------------------' + + [_RSHIFT] = { + {S(KC_Q), S(KC_W), S(KC_E), S(KC_R), S(KC_T), CNTR_TL, CNTR_TR, S(KC_Y), S(KC_U), S(KC_I), S(KC_O), S(KC_P)}, + {S(KC_A), S(KC_S), S(KC_D), S(KC_F), S(KC_G), CNTR_HL, CNTR_HR, S(KC_H), S(KC_J), S(KC_K), S(KC_L), TD_COLN}, + {S(KC_Z), S(KC_X), S(KC_C), S(KC_V), S(KC_B), CNTR_BL, CNTR_BR, S(KC_N), S(KC_M), TD_TILD, TD_GRV, TD_DQOT}, + {OS_CTL, OS_GUI, OS_ALT, KC_CAPS, KC_UNDS, SL_TAB, LT_BSPC, ___fn__, SL_LEFT, S_DOWN, S_UP, S_RGHT }, + }, +#endif + diff --git a/keyboards/planck/keymaps/sdothum/readme.md b/keyboards/planck/keymaps/sdothum/readme.md new file mode 100644 index 00000000000..58f73e3b445 --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/readme.md @@ -0,0 +1,10 @@ +# The sdothum extended Default Planck Layout + +- Colemak-DH layout layer with shift/tab key overlays +- Number and symbol/function key layer +- Hexadecimal keypad layer +- Navigation keypad layer +- Dynamic macro layer +- Autocompletion tap key pairs (),[],{} +- Normalized enter and esc key position across keyboard layers +- Extensive use of tap keys diff --git a/keyboards/planck/keymaps/sdothum/rules.mk b/keyboards/planck/keymaps/sdothum/rules.mk new file mode 100644 index 00000000000..40f153844c1 --- /dev/null +++ b/keyboards/planck/keymaps/sdothum/rules.mk @@ -0,0 +1,26 @@ +# Build Options: +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically + +BOOTMAGIC_ENABLE = no # virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # mouse keys(+4700) +EXTRAKEY_ENABLE = no # audio control and System control(+450) +CONSOLE_ENABLE = no # console for debug(+400) +COMMAND_ENABLE = no # commands for debug and configuration +NKRO_ENABLE = yes # nkey rollover +BACKLIGHT_ENABLE = no # enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # audio output on port C6 +UNICODE_ENABLE = no # unicode +BLUETOOTH_ENABLE = no # enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # enable WS2812 RGB underlight, do not enable this with audio at the same time. +STENO_ENABLE = yes # enable TX Bolt protocol, requires VIRTSER and may not work with mouse keys + +# do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # breathing sleep LED during USB suspend + +TAP_DANCE_ENABLE = yes # enable double tap completion of (),[],{} + +ifndef QUANTUM_DIR +include ../../../../Makefile +endif From 824e48f294a9de0a2c4816d294da5d93ec295bf1 Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Fri, 4 May 2018 21:39:59 -0400 Subject: [PATCH 30/34] infinite emoji (#2898) --- .../frosty_flake/keymaps/nikchi/keymap.c | 147 ++++++++---------- 1 file changed, 66 insertions(+), 81 deletions(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index f9cff0b84a0..bf7c5e58837 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -6,15 +6,16 @@ #include "quantum.h" #define _______ KC_TRNS -#define EMOJIBLOCK 5 +#define MAXEMOJITAPS 80 //declarations for tap dancing emojis void register_hex32(uint32_t hex); void cycleEmojis(qk_tap_dance_state_t *state, void *user_data); void cycleAnimals(qk_tap_dance_state_t *state, void *user_data); -void cycleHands(qk_tap_dance_state_t *state, void *user_data); -void cycleMemes(qk_tap_dance_state_t *state, void *user_data); +void cycleFoods(qk_tap_dance_state_t *state, void *user_data); +void cycleEtc(qk_tap_dance_state_t *state, void *user_data); +void cycleAll(qk_tap_dance_state_t *state, void *user_data); void tap(uint16_t keycode){ register_code(keycode); @@ -28,36 +29,20 @@ enum taps{ ANIMAL, HAND, MEMES, - COPA + COPA, + ALLS }; -enum unicode_name { // split every five emojis - THINK = 1, // thinking face 🤔 - GRIN, // grinning face 😊 - SMRK, // smirk 😏 - WEARY, // good shit 😩 - UNAMU, // unamused 😒 - - SNEK, // snke 🐍 - PENGUIN, // 🐧 - DRAGON, // 🐉 - MONKEY, // 🐒 - CHICK, // 🐥 - - OKOK, // 👌 - EFFU, // 🖕 - INUP, // 👆 - THUP, // 👍 - THDN, // 👎 - - BBB, // dat B 🅱 - AVO, // avocado 🥑 - BRED, // unicode consortium pls make toast 🍞 - EGGPL, // EGGPLANT 🍆 - WATER, // wet 💦 - - LIT // fire 🔥 - +enum unicode_name { + EMOTIS = 1,//80, //1F60x - 1F64x + ANIMALS, //64, //1F40x - 1F43x + SYMBOLS,// = 45, //1F300 - 1F32C + FOODS,// = 87 , //1F32D - + ETC,// = 192, //1F44x -1F4Fx + VEHICLES,// = 83, //1F68x - 1F6Dx + SUPPLEMENT,// = 32, //1F91x-1F92x + ALCHEMY,// = 116 //1F70x - 1F773 + }; enum my_macros { @@ -75,8 +60,12 @@ qk_tap_dance_action_t tap_dance_actions[] = { [COPA] = ACTION_TAP_DANCE_DOUBLE(LCTL(KC_C), LCTL(KC_V)), [EMOJIS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleEmojis, NULL, NULL, 800), [ANIMAL] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleAnimals, NULL, NULL, 800), - [HAND] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleHands, NULL, NULL, 800), - [MEMES] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleMemes, NULL, NULL, 800) + //[SYMBOLS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleSymbols, NULL, NULL, 800), + [FOODS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleFoods, NULL, NULL, 800), + [ETC] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleEtc, NULL, NULL, 800), + //[VEHICLES] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleVehicles, NULL, NULL, 800), + //[SUPPLEMENT] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleSupplement, NULL, NULL, 800), + [ALLS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleAll, NULL, NULL, 800) // Other declarations would go here, separated by commas, if you have them }; @@ -107,29 +96,17 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { return MACRO_NONE; }; + // emojis in unicode const uint32_t PROGMEM unicode_map[] = { - [THINK] = 0x1F914, - [GRIN] = 0x1F600, - [BBB] = 0x1F171, - [AVO] = 0x1F951, - [BRED] = 0x1F35E, - [SMRK] = 0x1F60F, - [WEARY] = 0x1F629, - [EGGPL] = 0x1F346, - [WATER] = 0x1F4A6, - [LIT] = 0x1F525, - [UNAMU] = 0x1F612, - [SNEK] = 0x1F40D, - [PENGUIN] = 0x1F427, - [MONKEY] = 0x1F412, - [CHICK] = 0x1F425, - [DRAGON] = 0x1F409, - [OKOK] = 0x1F44C, - [EFFU] = 0x1F595, - [INUP] = 0x1F446, - [THDN] = 0x1F44E, - [THUP] = 0x1F44D + [EMOTIS] = 0x1F600, + [ANIMALS] = 0x1F400, + [SYMBOLS] = 0x1F300, + [FOODS] = 0x1F32D, + [ETC] = 0x1F440, + [VEHICLES] = 0x1F680, + [SUPPLEMENT] = 0x1F910, + [ALCHEMY] = 0x1F700 }; // Layouts const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -141,11 +118,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LSPO,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \ TD(TD_CTCPS),KC_LGUI,KC_LALT, KC_SPC, KC_LEAD,KC_RGUI, KC_APP,MO(1) , KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT), [1] = KEYMAP(\ - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ - TD(EMOJIS),TD(ANIMAL),TD(HAND),TD(MEMES),X(WEARY),X(UNAMU), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ - KC_TAB, KC_Q, M(0), KC_E, KC_R,X(EGGPL),X(WATER), KC_U, KC_I, KC_O, KC_P, KC_UP ,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ - KC_LCTL, M(1), M(3), M(2), KC_F, X(LIT), X(SNEK), KC_J, KC_K, KC_L,KC_LEFT,KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \ - KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, TD(COPA), X(BBB), X(AVO), KC_M,KC_COMM, KC_DOT,KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ + TD(ALLS), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ + KC_GRV, TD(EMOJIS),TD(ANIMAL),TD(ETC),TD(FOODS), KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \ + KC_TAB, KC_Q, M(0), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_UP ,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ + KC_LCTL, M(1), M(3), M(2), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_LEFT,KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \ + KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, TG(2),_______ , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), [2] = KEYMAP(\ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \ @@ -153,7 +130,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \ KC_LCTL, KC_D, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ - KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, _______, _______, KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), + KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, TG(2) , KC_NO , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT), }; LEADER_EXTERNS(); @@ -169,12 +146,6 @@ void matrix_scan_user(void) { tap(KC_C); unregister_code(KC_LCTL); } - SEQ_THREE_KEYS(KC_L,KC_I,KC_T) { // 🔥🔥 - unicode_input_start(); - register_hex32(pgm_read_dword(&unicode_map[LIT])); - unicode_input_finish(); - } - } } @@ -183,17 +154,31 @@ void matrix_init_user(void) { set_unicode_input_mode(UC_WINC); }; +void cycleAll(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 1) { + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[EMOTIS])); + unicode_input_finish(); + } + else if(state->count <= 1642) { + tap(KC_BSPC); + unicode_input_start(); + register_hex32(pgm_read_dword(&unicode_map[1])+state->count); + unicode_input_finish(); + } +}; + void cycleEmojis(qk_tap_dance_state_t *state, void *user_data) { if(state->count == 1) { unicode_input_start(); - register_hex32(pgm_read_dword(&unicode_map[state->count])); + register_hex32(pgm_read_dword(&unicode_map[EMOTIS])); unicode_input_finish(); } - else if(state->count <= EMOJIBLOCK) { + else if(state->count <= 80) { tap(KC_BSPC); unicode_input_start(); - register_hex32(pgm_read_dword(&unicode_map[state->count])); + register_hex32(pgm_read_dword(&unicode_map[EMOTIS])+state->count); unicode_input_finish(); } }; @@ -201,43 +186,43 @@ void cycleEmojis(qk_tap_dance_state_t *state, void *user_data) { void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) { if(state->count == 1) { unicode_input_start(); - register_hex32(pgm_read_dword(&unicode_map[state->count+5])); + register_hex32(pgm_read_dword(&unicode_map[ANIMALS])); unicode_input_finish(); } - else if(state->count <= EMOJIBLOCK) { + else if(state->count <= MAXEMOJITAPS) { tap(KC_BSPC); unicode_input_start(); - register_hex32(pgm_read_dword(&unicode_map[state->count+5])); + register_hex32(pgm_read_dword(&unicode_map[ANIMALS])+state->count); unicode_input_finish(); } }; -void cycleHands(qk_tap_dance_state_t *state, void *user_data) { +void cycleFoods(qk_tap_dance_state_t *state, void *user_data) { if(state->count == 1) { unicode_input_start(); - register_hex32(pgm_read_dword(&unicode_map[state->count+10])); + register_hex32(pgm_read_dword(&unicode_map[FOODS])); unicode_input_finish(); } - else if(state->count <= EMOJIBLOCK) { + else if(state->count <= 87) { tap(KC_BSPC); unicode_input_start(); - register_hex32(pgm_read_dword(&unicode_map[state->count+10])); + register_hex32(pgm_read_dword(&unicode_map[FOODS])+state->count); unicode_input_finish(); } }; -void cycleMemes(qk_tap_dance_state_t *state, void *user_data) { + +void cycleEtc(qk_tap_dance_state_t *state, void *user_data) { if(state->count == 1) { unicode_input_start(); - register_hex32(pgm_read_dword(&unicode_map[state->count+15])); + register_hex32(pgm_read_dword(&unicode_map[ETC])); unicode_input_finish(); } - else if(state->count <= EMOJIBLOCK) { + else if(state->count <= MAXEMOJITAPS) { tap(KC_BSPC); unicode_input_start(); - register_hex32(pgm_read_dword(&unicode_map[state->count+15])); + register_hex32(pgm_read_dword(&unicode_map[ETC])+state->count); unicode_input_finish(); } }; - From c9108f4b371bd39f728e5fdbc00407ab514aa8d6 Mon Sep 17 00:00:00 2001 From: Pim Ostendorf Date: Sat, 5 May 2018 19:47:32 +0200 Subject: [PATCH 31/34] Added Tanuki Keyboard (#2894) * added tanuki * updated definitions to new qmk standard * complying with suggestions made by drashna * update rulesfile * used qmk template for readme file --- keyboards/tanuki/config.h | 82 +++++++++++++ keyboards/tanuki/keymaps/default/keymap.c | 141 ++++++++++++++++++++++ keyboards/tanuki/readme.md | 15 +++ keyboards/tanuki/rules.mk | 70 +++++++++++ keyboards/tanuki/tanuki.c | 10 ++ keyboards/tanuki/tanuki.h | 22 ++++ 6 files changed, 340 insertions(+) create mode 100644 keyboards/tanuki/config.h create mode 100644 keyboards/tanuki/keymaps/default/keymap.c create mode 100644 keyboards/tanuki/readme.md create mode 100644 keyboards/tanuki/rules.mk create mode 100644 keyboards/tanuki/tanuki.c create mode 100644 keyboards/tanuki/tanuki.h diff --git a/keyboards/tanuki/config.h b/keyboards/tanuki/config.h new file mode 100644 index 00000000000..1e42f13d4ff --- /dev/null +++ b/keyboards/tanuki/config.h @@ -0,0 +1,82 @@ +/* +Copyright 2015 Jun Wako + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#ifndef CONFIG_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x6464 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Seth +#define PRODUCT Tanuki PCB version +#define DESCRIPTION Handwired 40% keyboard + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 11 + +#define MATRIX_COL_PINS { B3 , B2 , B6 , B5 , B4 , E6 , D7 , C6 , F4 , F5 , F6 } +#define MATRIX_ROW_PINS { F7 , B1 , D4 , D0 } +#define UNUSED_PINS + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +/* key combination for command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +#define RGB_DI_PIN D1 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 5 +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + + +#define TAPPING_TERM 200 +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#endif diff --git a/keyboards/tanuki/keymaps/default/keymap.c b/keyboards/tanuki/keymaps/default/keymap.c new file mode 100644 index 00000000000..607b197f50a --- /dev/null +++ b/keyboards/tanuki/keymaps/default/keymap.c @@ -0,0 +1,141 @@ +#include QMK_KEYBOARD_H +#include "rgblight.h" + +//Layer definitions +#define _BL 0 +#define _DL 1 +#define _UL 2 +#define _GL 3 +#define _BK 4 + + +//other variables +int mCalled = 0; +bool blockToggle = false; +bool lRGB = true; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_BL] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, TG(_GL), \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_QUOT, KC_SLSH, KC_ENT, \ + KC_TAB, KC_ESC, KC_LCTL, KC_LALT, KC_COMMA, LT(_DL,KC_SPC), LT(_UL,KC_SPC), KC_DOT, KC_LGUI), + +[_DL] = LAYOUT( + KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,\ + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,\ + KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_F1, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +[_UL] = LAYOUT( + KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_PIPE, KC_BSLS, KC_PLUS, KC_UNDS, KC_MINS, KC_EQL, KC_DEL,\ + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, \ + KC_TRNS, KC_FN0, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAD, RGB_VAD, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_GRV, KC_TRNS, RGB_MOD, RGB_HUI, KC_TRNS, KC_TRNS, RGB_SAI, RGB_VAI), + +[_GL] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +[_BK] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_FN1, KC_NO, KC_NO), + +}; + + +//KC_MPLY, KC_VOLU, KC_VOLD, KC_TRNS, KC_TRNS, KC_MNXT, KC_MPRV +//function to toggle the interactive rgb variable +bool toggleLayerRGB(void){ + if(lRGB == true){ + return false; + } + else{ + return true; + } +} + +void matrix_init_user(void){ + rgblight_enable(); + rgblight_mode(1); + rgblight_sethsv(0,10,255); +} + +//check for layer and if there was a keypress change underglow lighting +void matrix_scan_kb(void){ + if(lRGB == true) + { + + + + //base layer + if(layer_state == 0x00000000 && mCalled == 1 ){ + rgblight_sethsv(0,10,255); + mCalled = 0; + } + + //down layer + else if(layer_state == 0x00000002 && mCalled == 1){ + rgblight_sethsv(160,255,255); + mCalled = 0; + } + + + //up layer with rgb access blocked + else if(layer_state == 0x00000004 && mCalled == 1 && lRGB == true){ + //blockToggle = true; + layer_state = 0x00000014; + rgblight_sethsv(180,255,255); + mCalled = 0; + } + + //arrow cluster layer + else if(layer_state == 0x00000008 && mCalled == 1){ + rgblight_sethsv(0,180,255); + mCalled = 0; + } + + //if on blocked layer and the spacebar has been released reset to baselayer and set colours to white + else if(layer_state == 0x00000014 && blockToggle == true ) + { + blockToggle = false; + layer_state = 0x00000000; + rgblight_sethsv(0,10,255); + } + + } +} + +//set mCalled to 1 when a button is pressed to make sure the leds aren't continuesly updated. +bool process_record_user (uint16_t keycode, keyrecord_t *record) { + mCalled = 1; + + //uncommenting the line below causes the lights to flicker when typing on the keyboard. + //rgblight_sethsv(0,255,0); + + if(keycode == KC_FN0 && record->event.pressed){ + //set the toggle and make sure to set the colour back to white + lRGB = toggleLayerRGB(); + rgblight_enable(); + rgblight_mode(1); + rgblight_sethsv(0,255,255); + layer_state =0x00000000; + + return false; + } + + //check if spacebar is released when on a different layer + if(keycode == KC_FN1){ + if(record ->event.pressed){ + }else{ + blockToggle = true; + } + } + + return true; +} diff --git a/keyboards/tanuki/readme.md b/keyboards/tanuki/readme.md new file mode 100644 index 00000000000..331df5b2eac --- /dev/null +++ b/keyboards/tanuki/readme.md @@ -0,0 +1,15 @@ +# Tanuki + +![Tanuki](https://github.com/SethSenpai/Tanuki/blob/master/Img/glamour1.jpg?raw=true) + +The QMK firmware for the Tanuki 40% keyboard. The other files needed for construction can be found in the [Tanuki repo](https://github.com/SethSenpai/Tanuki). + +Keyboard Maintainer: [SethSenpai](https://github.com/SethSenpai) +Hardware Supported: Tanuki pcb, pro micro +Hardware Availability: [Tanuki repo](https://github.com/SethSenpai/Tanuki) + +Make example for this keyboard (after setting up your build environment): + + make tanuki:default + +See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. diff --git a/keyboards/tanuki/rules.mk b/keyboards/tanuki/rules.mk new file mode 100644 index 00000000000..cc3734152fb --- /dev/null +++ b/keyboards/tanuki/rules.mk @@ -0,0 +1,70 @@ + + +# MCU name +MCU = atmega32u4 + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +# +# This will be an integer division of F_USB below, as it is sourced by +# F_USB after it has run through any CPU prescalers. Note that this value +# does not *change* the processor frequency - it should merely be updated to +# reflect the processor speed set externally so that the code can use accurate +# software delays. +F_CPU = 16000000 + + +# +# LUFA specific +# +# Target architecture (see library "Board Types" documentation). +ARCH = AVR8 + +# Input clock frequency. +# This will define a symbol, F_USB, in all source code files equal to the +# input clock frequency (before any prescaling is performed) in Hz. This value may +# differ from F_CPU if prescaling is used on the latter, and is required as the +# raw input clock is fed directly to the PLL sections of the AVR for high speed +# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL' +# at the end, this will be done automatically to create a 32-bit value in your +# source code. +# +# If no clock division is performed on the input clock inside the AVR (via the +# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + + +# Boot Section Size in *bytes* +# Teensy halfKay 512 +# Teensy++ halfKay 1024 +# Atmel DFU loader 4096 +# LUFA bootloader 4096 +# USBaspLoader 2048 +BOOTLOADER=caterina + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +RGBLIGHT_ENABLE =yes # Enable keyboard underlight functionality (+4870) +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality (+1150) +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +TAP_DANCE_ENABLE = no + +ifndef QUANTUM_DIR + include ../../Makefile +endif diff --git a/keyboards/tanuki/tanuki.c b/keyboards/tanuki/tanuki.c new file mode 100644 index 00000000000..573e2006111 --- /dev/null +++ b/keyboards/tanuki/tanuki.c @@ -0,0 +1,10 @@ +#include "tanuki.h" +#include "rgblight.h" +#include "config.h" +#include "rgblight.h" + +void matrix_init_kb(void) { + // put your keyboard start-up code here + // runs once when the firmware starts up + +}; diff --git a/keyboards/tanuki/tanuki.h b/keyboards/tanuki/tanuki.h new file mode 100644 index 00000000000..6b686adafa8 --- /dev/null +++ b/keyboards/tanuki/tanuki.h @@ -0,0 +1,22 @@ +#include "quantum.h" + + +// readability +#define XXX KC_NO + +// The first section contains all of the arguments +// The second converts the arguments into a two-dimensional array +#define LAYOUT( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, \ + k30, k31, k32, k33, k34, k35, k36, k38, k39 \ +) \ +{ \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a}, \ + {k30, k31, k32, k33, k34, k35, k36, XXX, k38, k39, XXX} \ +} + + From 24efce0ecadc89d98358c02df9c90c96eb82ecae Mon Sep 17 00:00:00 2001 From: hdbx <38972365+hdbx@users.noreply.github.com> Date: Sun, 6 May 2018 02:48:28 +0900 Subject: [PATCH 32/34] Fixed hdbx keymaps (#2899) * Add * Revert "Add" This reverts commit 4b10fef88712a63f4a91410410b4c99346fa1b24. * Add Ergo42 keymaps for JIS layout * Fix hdbx keymap for Ergo42 Changed some keys layout and add description. --- keyboards/ergo42/keymaps/hdbx/keymap.c | 60 +++++++++++++------------ keyboards/ergo42/keymaps/hdbx/readme.md | 10 ++--- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/keyboards/ergo42/keymaps/hdbx/keymap.c b/keyboards/ergo42/keymaps/hdbx/keymap.c index 29a419bce1b..8b3df3f4aba 100644 --- a/keyboards/ergo42/keymaps/hdbx/keymap.c +++ b/keyboards/ergo42/keymaps/hdbx/keymap.c @@ -1,11 +1,15 @@ +// WindowsでJIS配列として認識しているときに、US配列として使うためのキーマップ +// @leopard_gecko さんがPlanck用に作成されたキーマップをかなり参考にしています。 + #include "ergo42.h" #include "action_layer.h" #include "eeconfig.h" -#include "keymap_jp.h" // qmk_firmware-master/quantum/keymap_extras/keymap_jp.h “ú–{ŒêƒL�[ƒ{�[ƒh�ݒè—p -#include // macro sendstring for jis keyboard ƒ}ƒNƒ�•¶Žš—񑗐MŽž‚ɓú–{ŒêƒL�[ƒ{�[ƒh�ݒè‚ł̕¶Žš‰»‚¯‰ñ”ð +#include "keymap_jp.h" // qmk_firmware-master/quantum/keymap_extras/keymap_jp.h 日本語キーボード設定用 +#include // macro sendstring for jis keyboard マクロ文字列送信時に日本語キーボード設定での文字化け回避 extern keymap_config_t keymap_config; +// レイヤー #define _QWERTY 0 #define _LOWER 1 #define _RAISE 2 @@ -13,12 +17,12 @@ extern keymap_config_t keymap_config; #define _ADJUST 4 enum custom_keycodes { - QWERTY = SAFE_RANGE, - MCR1, - MCR2, - MCR3, - DYNAMIC_MACRO_RANGE, - WN_SCLN, // ƒ^ƒbƒv‚ÅJIS‚́u:�v ƒVƒtƒg‚ÅJIS‚́u;�v (Windows) + QWERTY = SAFE_RANGE, // デフォルトレイヤー用 + MCR1, // マクロ1 + MCR2, // マクロ2 + MCR3, // マクロ3 + DYNAMIC_MACRO_RANGE, // ダイナミックマクロ + WN_SCLN, // タップでJISの「:」 シフトでJISの「;」 (Windows) }; // Use Dynamic macro @@ -27,14 +31,14 @@ enum custom_keycodes { // Fillers to make layering more clear #define _______ KC_TRNS #define XXXXXXX KC_NO -#define KC_LOWR LT(_LOWER, KC_MHEN) // ƒ^ƒbƒv‚Ŗ³•ϊ· ƒz�[ƒ‹ƒh‚ÅLower -#define KC_RASE LT(_RAISE, KC_HENK) // ƒ^ƒbƒv‚ŕϊ· ƒz�[ƒ‹ƒh‚ÅRaise +#define KC_LOWR LT(_LOWER, KC_MHEN) // タップで無変換 ホールドでLower +#define KC_RASE LT(_RAISE, KC_HENK) // タップで変換 ホールドでRaise +#define KC_LSLB MT(MOD_LSFT, JP_LBRC) // タップで[ ホールドで左Shift +#define KC_RSRB MT(MOD_RSFT, JP_RBRC) // タップで] ホールドで右Shift +#define KC_ALTB MT(MOD_LALT, KC_TAB) // タップでTAB ホールドで左ALT +#define KC_ESCA LT(_ADJUST,KC_ESC) // タップでESC ホールドでADJUSTレイヤーon +#define CTL_ZH CTL_T(KC_ZKHK) // タップで半角/全角 ホールドで左Control (Windows) #define KC_ALPS LALT(KC_PSCR) // Alt + PrintScreen -#define KC_LSLP MT(MOD_LSFT, JP_LPRN) // ƒ^ƒbƒv‚Å( ƒz�[ƒ‹ƒh‚ō¶Shift -#define KC_RSRP MT(MOD_RSFT, JP_RPRN) // ƒ^ƒbƒv‚Å) ƒz�[ƒ‹ƒh‚ʼnEShift -#define KC_ALTB MT(MOD_LALT, KC_TAB) // ƒ^ƒbƒv‚ÅTAB ƒz�[ƒ‹ƒh‚ō¶ALT -#define KC_ESCA LT(_ADJUST,KC_ESC) // ƒ^ƒbƒv‚ÅESC ƒz�[ƒ‹ƒh‚ÅADJUSTƒŒƒCƒ„�[on - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -42,19 +46,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-------------------------------------------------------. ,-------------------------------------------------------. * |Tab/Alt| Q | W | E | R | T | - | | ~ | Y | U | I | O | P | BSPC | * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| - * | Ctrl | A | S | D | F | G | [ | | ] | H | J | K | L | : | ' | + * |ZH/Ctrl| A | S | D | F | G | ( | | ) | H | J | K | L | : | ' | * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| - * | (/Sft | Z | X | C | V | B | F2 | | Home | N | M | , | . | / | )/Sft | + * | [/Sft | Z | X | C | V | B | F2 | | Home | N | M | , | . | / | ]/Sft | * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| * | TT | GUI | \ | Esc/ | LOWER | Enter | Del | | End | Space | RAISE | Left | Down | Up | Right | - * |(_GAME)| | |_ADJUST| –³•ϊ·| | | | | | •ϊ· | | | | | + * |(_GAME)| | |_ADJUST| 無変換| | | | | | 変換 | | | | | * `-------------------------------------------------------' `-------------------------------------------------------' */ [_QWERTY] = KEYMAP( \ KC_ALTB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, JP_TILD, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, JP_LBRC, JP_RBRC, KC_H, KC_J, KC_K, KC_L, WN_SCLN, JP_QUOT, \ - KC_LSLP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F2, KC_HOME, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSRP, \ + CTL_ZH, KC_A, KC_S, KC_D, KC_F, KC_G, JP_LPRN, JP_RPRN, KC_H, KC_J, KC_K, KC_L, WN_SCLN, JP_QUOT, \ + KC_LSLB, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F2, KC_HOME, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSRB, \ TT(_GAME),KC_LGUI, JP_YEN, KC_ESCA, KC_LOWR, KC_ENT, KC_DEL, KC_END, KC_SPC, KC_RASE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ ), @@ -62,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-------------------------------------------------------. ,-------------------------------------------------------. * |Tab/Alt| 1 | 2 | 3 | 4 | 5 | 6 | | Esc | 7 | 8 | 9 | O | = | BSPC | * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| - * | Ctrl | F1 | F2 | F3 | F4 | F5 | F6 | | F2 | 4 | 5 | 6 | - | / | Enter | + * |ZH/Ctrl| F1 | F2 | F3 | F4 | F5 | F6 | | F2 | 4 | 5 | 6 | - | / | Enter | * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| * | Shift | F7 | F8 | F9 | F10 | F11 | F12 | | Home | 1 | 2 | 3 | + | * | Shift | * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| @@ -81,7 +85,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-------------------------------------------------------. ,-------------------------------------------------------. * |Tab/Alt| ! | @ | # | $ | % | _ | | ` | ^ | & | Ins | \ |PrntScr| BSPC | * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| - * | Ctrl |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| { | | } | Left | Down | Up | Right | ; | " | + * |ZH/Ctrl|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| { | | } | Left | Down | Up | Right | ; | " | * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| * | Shift |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX| |PageUp |XXXXXXX|XXXXXXX| < | > | ? | Shift | * |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| @@ -91,9 +95,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_RAISE] = KEYMAP( \ _______, KC_EXLM, JP_AT, KC_HASH, KC_DLR, KC_PERC, JP_UNDS, JP_GRV, JP_CIRC, JP_AMPR, KC_INS, JP_YEN, KC_ALPS, _______, \ - _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, JP_LBRC, JP_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_SCLN, JP_DQT, \ + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, JP_LCBR, JP_RCBR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_SCLN, JP_DQT, \ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, KC_LT, KC_GT, KC_QUES, KC_RSFT, \ - _______, _______, KC_PIPE, KC_ESC, XXXXXXX, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______ \ + _______, _______, JP_PIPE, KC_ESC, XXXXXXX, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______ \ ), /* GAME @@ -151,7 +155,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case WN_SCLN: // ƒRƒ�ƒ“�u;:�v + case WN_SCLN: // コロン「;:」 if (record->event.pressed) { lshift = keyboard_report->mods & MOD_BIT(KC_LSFT); if (lshift) { @@ -167,19 +171,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { break; case MCR1: if (record->event.pressed) { - SEND_STRING("hogehoge"); // ‘—�M•¶Žš—ñ + SEND_STRING("hogehoge"); // 送信文字列 } return false; break; case MCR2: if (record->event.pressed) { - SEND_STRING("hogehogehoge"SS_TAP(X_ENTER)); // ‘—�M•¶Žš—ñ + SEND_STRING("hogehogehoge"SS_TAP(X_ENTER)); // 送信文字列 } return false; break; case MCR3: if (record->event.pressed) { - SEND_STRING("hoge@hoge.co.jp"); // ‘—�M•¶Žš—ñ + SEND_STRING("hoge@hoge.co.jp"); // 送信文字列 } return false; break; diff --git a/keyboards/ergo42/keymaps/hdbx/readme.md b/keyboards/ergo42/keymaps/hdbx/readme.md index 2aeebfe41ca..fe76fc7cf76 100644 --- a/keyboards/ergo42/keymaps/hdbx/readme.md +++ b/keyboards/ergo42/keymaps/hdbx/readme.md @@ -9,14 +9,13 @@ QWERTY ,-------------------------------------------------------. ,-------------------------------------------------------. |Tab/Alt| Q | W | E | R | T | - | | ~ | Y | U | I | O | P | BSPC | |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| -| Ctrl | A | S | D | F | G | [ | | ] | H | J | K | L | : | ' | +|ZH/Ctrl| A | S | D | F | G | ( | | ) | H | J | K | L | : | ' | |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| -| (/Sft | Z | X | C | V | B | F2 | | Home | N | M | , | . | / | )/Sft | +| [/Sft | Z | X | C | V | B | F2 | | Home | N | M | , | . | / | ]/Sft | |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| | TT | GUI | \ | Esc/ | LOWER | Enter | Del | | End | Space | RAISE | Left | Down | Up | Right | -|(_GAME)| | |_ADJUST| –³•ϊ·| | | | | | •ϊ· | | | | | +|(_GAME)| | |_ADJUST| –³•ÏŠ·| | | | | | •ÏŠ· | | | | | `-------------------------------------------------------' `-------------------------------------------------------' - */ LOWER ,-------------------------------------------------------. ,-------------------------------------------------------. @@ -28,7 +27,6 @@ LOWER |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| |XXXXXXX| GUI |XXXXXXX| Esc | | Enter | Del | | End | 0 | . | Left | Down | Up | Right | `-------------------------------------------------------' `-------------------------------------------------------' - */ RAISE ,-------------------------------------------------------. ,-------------------------------------------------------. @@ -40,7 +38,6 @@ RAISE |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| |XXXXXXX| GUI | | | Esc |XXXXXXX| Enter | Del | |PageDwn| Space | | Left | Down | Up | Right | `-------------------------------------------------------' `-------------------------------------------------------' - */ GAME ,-------------------------------------------------------. ,-------------------------------------------------------. @@ -52,7 +49,6 @@ GAME |-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| | | GUI | Tab | Alt | Space | Enter | Del | |PageDwn| Space |XXXXXXX| Left | Down | Up | Right | `-------------------------------------------------------' `-------------------------------------------------------' - */ ADJUST ,-------------------------------------------------------. ,-------------------------------------------------------. From 280c10cb094bddc229bfd181c3e9321c2ac1d5fc Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Mon, 7 May 2018 08:38:09 -0700 Subject: [PATCH 33/34] Thanks to talljoe, 1up60 actually only has 16, not 20 RGB LEDs (#2906) --- keyboards/1up60rgb/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/1up60rgb/config.h b/keyboards/1up60rgb/config.h index 2668ab21b89..bfdf354af7d 100644 --- a/keyboards/1up60rgb/config.h +++ b/keyboards/1up60rgb/config.h @@ -49,7 +49,7 @@ #define RGB_DI_PIN E2 #ifdef RGB_DI_PIN #define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 20 +#define RGBLED_NUM 16 #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 From 06e5f9b25e640f05814e158c701263e209b33ef2 Mon Sep 17 00:00:00 2001 From: Hannes Egler Date: Mon, 7 May 2018 17:41:56 +0200 Subject: [PATCH 34/34] added additional configurator support (#2905) * added additional configurator support Added support for choosing between 5 configurator options: Layout (supports all keys) Layout_ansi_1u Layout_iso_1u Layout_ansi Layout_iso * confirming to conventions replaced .h filenames with QMK_KEYBOARD_H --- keyboards/kbd75/info.json | 460 ++++++++++++++++++++++- keyboards/kbd75/kbd75.h | 68 +++- keyboards/kbd75/keymaps/adit/keymap.c | 6 +- keyboards/kbd75/keymaps/default/keymap.c | 36 +- keyboards/kbd75/keymaps/iso/keymap.c | 115 +----- keyboards/kbd75/keymaps/smt/keymap.c | 12 +- 6 files changed, 550 insertions(+), 147 deletions(-) diff --git a/keyboards/kbd75/info.json b/keyboards/kbd75/info.json index e134a854ac0..2eb1412f2ab 100644 --- a/keyboards/kbd75/info.json +++ b/keyboards/kbd75/info.json @@ -1,12 +1,456 @@ { - "keyboard_name": "KBD75", - "url": "", - "maintainer": "qmk", - "width": 16, - "height": 6, + "keyboard_name": "KBD75", + "url": "", + "maintainer": "qmk", + "width": 16, + "height": 6, "layouts": { - "KEYMAP_ALL": { - "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"PrtSc", "x":13, "y":0}, {"label":"Pause", "x":14, "y":0}, {"label":"Delete", "x":15, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"label":"Home", "x":15, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"Page Up", "x":15, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"label":"Enter", "x":12.75, "y":3, "w":2.25}, {"label":"Page Down", "x":15, "y":3}, {"label":"Shift", "x":0, "y":4, "w":1.25}, {"x":1.25, "y":4}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"End", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"Win", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":2.25}, {"x":6, "y":5}, {"x":7, "y":5, "w":3}, {"label":"Alt", "x":10, "y":5}, {"label":"Fn", "x":11, "y":5}, {"label":"Ctrl", "x":12, "y":5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}] + "LAYOUT": { + "key_count": 88, + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1, "y":0}, + {"label":"F2", "x":2, "y":0}, + {"label":"F3", "x":3, "y":0}, + {"label":"F4", "x":4, "y":0}, + {"label":"F5", "x":5, "y":0}, + {"label":"F6", "x":6, "y":0}, + {"label":"F7", "x":7, "y":0}, + {"label":"F8", "x":8, "y":0}, + {"label":"F9", "x":9, "y":0}, + {"label":"F10", "x":10, "y":0}, + {"label":"F11", "x":11, "y":0}, + {"label":"F12", "x":12, "y":0}, + {"label":"PrtSc", "x":13, "y":0}, + {"label":"Pause", "x":14, "y":0}, + {"label":"Delete", "x":15, "y":0}, + {"label":"~", "x":0, "y":1}, + {"label":"1", "x":1, "y":1}, + {"label":"2", "x":2, "y":1}, + {"label":"3", "x":3, "y":1}, + {"label":"4", "x":4, "y":1}, + {"label":"5", "x":5, "y":1}, + {"label":"6", "x":6, "y":1}, + {"label":"7", "x":7, "y":1}, + {"label":"8", "x":8, "y":1}, + {"label":"9", "x":9, "y":1}, + {"label":"0", "x":10, "y":1}, + {"label":"_", "x":11, "y":1}, + {"label":"+", "x":12, "y":1}, + {"x":13, "y":1}, + {"x":14, "y":1}, + {"label":"Home", "x":15, "y":1}, + {"label":"Tab", "x":0, "y":2, "w":1.5}, + {"label":"Q", "x":1.5, "y":2}, + {"label":"W", "x":2.5, "y":2}, + {"label":"E", "x":3.5, "y":2}, + {"label":"R", "x":4.5, "y":2}, + {"label":"T", "x":5.5, "y":2}, + {"label":"Y", "x":6.5, "y":2}, + {"label":"U", "x":7.5, "y":2}, + {"label":"I", "x":8.5, "y":2}, + {"label":"O", "x":9.5, "y":2}, + {"label":"P", "x":10.5, "y":2}, + {"label":"{", "x":11.5, "y":2}, + {"label":"}", "x":12.5, "y":2}, + {"label":"|", "x":13.5, "y":2, "w":1.5}, + {"label":"Page Up", "x":15, "y":2}, + {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, + {"label":"A", "x":1.75, "y":3}, + {"label":"S", "x":2.75, "y":3}, + {"label":"D", "x":3.75, "y":3}, + {"label":"F", "x":4.75, "y":3}, + {"label":"G", "x":5.75, "y":3}, + {"label":"H", "x":6.75, "y":3}, + {"label":"J", "x":7.75, "y":3}, + {"label":"K", "x":8.75, "y":3}, + {"label":"L", "x":9.75, "y":3}, + {"label":":", "x":10.75, "y":3}, + {"label":"\"", "x":11.75, "y":3}, + {"label":"Enter", "x":12.75, "y":3, "w":2.25}, + {"label":"Page Down", "x":15, "y":3}, + {"label":"Shift", "x":0, "y":4, "w":1.25}, + {"x":1.25, "y":4}, + {"label":"Z", "x":2.25, "y":4}, + {"label":"X", "x":3.25, "y":4}, + {"label":"C", "x":4.25, "y":4}, + {"label":"V", "x":5.25, "y":4}, + {"label":"B", "x":6.25, "y":4}, + {"label":"N", "x":7.25, "y":4}, + {"label":"M", "x":8.25, "y":4}, + {"label":"<", "x":9.25, "y":4}, + {"label":">", "x":10.25, "y":4}, + {"label":"?", "x":11.25, "y":4}, + {"label":"Shift", "x":12.25, "y":4, "w":1.75}, + {"label":"\u2191", "x":14, "y":4}, + {"label":"End", "x":15, "y":4}, + {"label":"Ctrl", "x":0, "y":5, "w":1.25}, + {"label":"Win", "x":1.25, "y":5, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5, "w":1.25}, + {"x":3.75, "y":5, "w":2.25}, + {"x":6, "y":5}, + {"x":7, "y":5, "w":3}, + {"label":"Alt", "x":10, "y":5}, + {"label":"Fn", "x":11, "y":5}, + {"label":"Ctrl", "x":12, "y":5}, + {"label":"\u2190", "x":13, "y":5}, + {"label":"\u2193", "x":14, "y":5}, + {"label":"\u2192", "x":15, "y":5}] + }, + + "LAYOUT_ansi_1u": { + "key_count": 84, + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1, "y":0}, + {"label":"F2", "x":2, "y":0}, + {"label":"F3", "x":3, "y":0}, + {"label":"F4", "x":4, "y":0}, + {"label":"F5", "x":5, "y":0}, + {"label":"F6", "x":6, "y":0}, + {"label":"F7", "x":7, "y":0}, + {"label":"F8", "x":8, "y":0}, + {"label":"F9", "x":9, "y":0}, + {"label":"F10", "x":10, "y":0}, + {"label":"F11", "x":11, "y":0}, + {"label":"F12", "x":12, "y":0}, + {"label":"PrtSc", "x":13, "y":0}, + {"label":"Pause", "x":14, "y":0}, + {"label":"Delete", "x":15, "y":0}, + {"label":"~", "x":0, "y":1}, + {"label":"1", "x":1, "y":1}, + {"label":"2", "x":2, "y":1}, + {"label":"3", "x":3, "y":1}, + {"label":"4", "x":4, "y":1}, + {"label":"5", "x":5, "y":1}, + {"label":"6", "x":6, "y":1}, + {"label":"7", "x":7, "y":1}, + {"label":"8", "x":8, "y":1}, + {"label":"9", "x":9, "y":1}, + {"label":"0", "x":10, "y":1}, + {"label":"_", "x":11, "y":1}, + {"label":"+", "x":12, "y":1}, + {"label":"delete", "x":13, "y":1, "w":2}, + {"label":"Home", "x":15, "y":1}, + {"label":"Tab", "x":0, "y":2, "w":1.5}, + {"label":"Q", "x":1.5, "y":2}, + {"label":"W", "x":2.5, "y":2}, + {"label":"E", "x":3.5, "y":2}, + {"label":"R", "x":4.5, "y":2}, + {"label":"T", "x":5.5, "y":2}, + {"label":"Y", "x":6.5, "y":2}, + {"label":"U", "x":7.5, "y":2}, + {"label":"I", "x":8.5, "y":2}, + {"label":"O", "x":9.5, "y":2}, + {"label":"P", "x":10.5, "y":2}, + {"label":"{", "x":11.5, "y":2}, + {"label":"}", "x":12.5, "y":2}, + {"label":"|", "x":13.5, "y":2, "w":1.5}, + {"label":"Page Up", "x":15, "y":2}, + {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, + {"label":"A", "x":1.75, "y":3}, + {"label":"S", "x":2.75, "y":3}, + {"label":"D", "x":3.75, "y":3}, + {"label":"F", "x":4.75, "y":3}, + {"label":"G", "x":5.75, "y":3}, + {"label":"H", "x":6.75, "y":3}, + {"label":"J", "x":7.75, "y":3}, + {"label":"K", "x":8.75, "y":3}, + {"label":"L", "x":9.75, "y":3}, + {"label":":", "x":10.75, "y":3}, + {"label":"\"", "x":11.75, "y":3}, + {"label":"Enter", "x":12.75, "y":3, "w":2.25}, + {"label":"Page Down", "x":15, "y":3}, + {"label":"Shift", "x":0, "y":4, "w":2.25}, + {"label":"Z", "x":2.25, "y":4}, + {"label":"X", "x":3.25, "y":4}, + {"label":"C", "x":4.25, "y":4}, + {"label":"V", "x":5.25, "y":4}, + {"label":"B", "x":6.25, "y":4}, + {"label":"N", "x":7.25, "y":4}, + {"label":"M", "x":8.25, "y":4}, + {"label":"<", "x":9.25, "y":4}, + {"label":">", "x":10.25, "y":4}, + {"label":"?", "x":11.25, "y":4}, + {"label":"Shift", "x":12.25, "y":4, "w":1.75}, + {"label":"\u2191", "x":14, "y":4}, + {"label":"End", "x":15, "y":4}, + {"label":"Ctrl", "x":0, "y":5, "w":1.25}, + {"label":"Win", "x":1.25, "y":5, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5, "w":1.25}, + {"x":3.75, "y":5, "w":6.75}, + {"label":"Alt", "x":10, "y":5}, + {"label":"Fn", "x":11, "y":5}, + {"label":"Ctrl", "x":12, "y":5}, + {"label":"\u2190", "x":13, "y":5}, + {"label":"\u2193", "x":14, "y":5}, + {"label":"\u2192", "x":15, "y":5}] + }, + + "LAYOUT_iso_1u": { + "key_count": 85, + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1, "y":0}, + {"label":"F2", "x":2, "y":0}, + {"label":"F3", "x":3, "y":0}, + {"label":"F4", "x":4, "y":0}, + {"label":"F5", "x":5, "y":0}, + {"label":"F6", "x":6, "y":0}, + {"label":"F7", "x":7, "y":0}, + {"label":"F8", "x":8, "y":0}, + {"label":"F9", "x":9, "y":0}, + {"label":"F10", "x":10, "y":0}, + {"label":"F11", "x":11, "y":0}, + {"label":"F12", "x":12, "y":0}, + {"label":"PrtSc", "x":13, "y":0}, + {"label":"Pause", "x":14, "y":0}, + {"label":"Delete", "x":15, "y":0}, + {"label":"~", "x":0, "y":1}, + {"label":"1", "x":1, "y":1}, + {"label":"2", "x":2, "y":1}, + {"label":"3", "x":3, "y":1}, + {"label":"4", "x":4, "y":1}, + {"label":"5", "x":5, "y":1}, + {"label":"6", "x":6, "y":1}, + {"label":"7", "x":7, "y":1}, + {"label":"8", "x":8, "y":1}, + {"label":"9", "x":9, "y":1}, + {"label":"0", "x":10, "y":1}, + {"label":"_", "x":11, "y":1}, + {"label":"+", "x":12, "y":1}, + {"label":"delete", "x":13, "y":1, "w":2}, + {"label":"Home", "x":15, "y":1}, + {"label":"Tab", "x":0, "y":2, "w":1.5}, + {"label":"Q", "x":1.5, "y":2}, + {"label":"W", "x":2.5, "y":2}, + {"label":"E", "x":3.5, "y":2}, + {"label":"R", "x":4.5, "y":2}, + {"label":"T", "x":5.5, "y":2}, + {"label":"Y", "x":6.5, "y":2}, + {"label":"U", "x":7.5, "y":2}, + {"label":"I", "x":8.5, "y":2}, + {"label":"O", "x":9.5, "y":2}, + {"label":"P", "x":10.5, "y":2}, + {"label":"{", "x":11.5, "y":2}, + {"label":"}", "x":12.5, "y":2}, + {"label":"Enter", "x":13.75, "y":2, "KS":[ [0,0], [1.5,0], [1.5,2], [0.25,2], [0.25,1], [0,1], [0,0] ]}, + {"label":"Page Up", "x":15, "y":2}, + {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, + {"label":"A", "x":1.75, "y":3}, + {"label":"S", "x":2.75, "y":3}, + {"label":"D", "x":3.75, "y":3}, + {"label":"F", "x":4.75, "y":3}, + {"label":"G", "x":5.75, "y":3}, + {"label":"H", "x":6.75, "y":3}, + {"label":"J", "x":7.75, "y":3}, + {"label":"K", "x":8.75, "y":3}, + {"label":"L", "x":9.75, "y":3}, + {"label":":", "x":10.75, "y":3}, + {"label":"@", "x":11.75, "y":3}, + {"label":"~", "x":12.75, "y":3}, + {"label":"Page Down", "x":15, "y":3}, + {"label":"Shift", "x":0, "y":4, "w":1.25}, + {"x":1.25, "y":4}, + {"label":"Z", "x":2.25, "y":4}, + {"label":"X", "x":3.25, "y":4}, + {"label":"C", "x":4.25, "y":4}, + {"label":"V", "x":5.25, "y":4}, + {"label":"B", "x":6.25, "y":4}, + {"label":"N", "x":7.25, "y":4}, + {"label":"M", "x":8.25, "y":4}, + {"label":"<", "x":9.25, "y":4}, + {"label":">", "x":10.25, "y":4}, + {"label":"?", "x":11.25, "y":4}, + {"label":"Shift", "x":12.25, "y":4, "w":1.75}, + {"label":"\u2191", "x":14, "y":4}, + {"label":"End", "x":15, "y":4}, + {"label":"Ctrl", "x":0, "y":5, "w":1.25}, + {"label":"Win", "x":1.25, "y":5, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5, "w":1.25},{"x":3.75, "y":5, "w":2.25}, {"x":6, "y":5}, {"x":7, "y":5, "w":3}, + {"label":"Alt", "x":10, "y":5}, + {"label":"Fn", "x":11, "y":5}, + {"label":"Ctrl", "x":12, "y":5}, + {"label":"\u2190", "x":13, "y":5}, + {"label":"\u2193", "x":14, "y":5}, + {"label":"\u2192", "x":15, "y":5}] + }, + + "LAYOUT_ansi": { + "key_count": 83, + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1, "y":0}, + {"label":"F2", "x":2, "y":0}, + {"label":"F3", "x":3, "y":0}, + {"label":"F4", "x":4, "y":0}, + {"label":"F5", "x":5, "y":0}, + {"label":"F6", "x":6, "y":0}, + {"label":"F7", "x":7, "y":0}, + {"label":"F8", "x":8, "y":0}, + {"label":"F9", "x":9, "y":0}, + {"label":"F10", "x":10, "y":0}, + {"label":"F11", "x":11, "y":0}, + {"label":"F12", "x":12, "y":0}, + {"label":"PrtSc", "x":13, "y":0}, + {"label":"Pause", "x":14, "y":0}, + {"label":"Delete", "x":15, "y":0}, + {"label":"~", "x":0, "y":1}, + {"label":"1", "x":1, "y":1}, + {"label":"2", "x":2, "y":1}, + {"label":"3", "x":3, "y":1}, + {"label":"4", "x":4, "y":1}, + {"label":"5", "x":5, "y":1}, + {"label":"6", "x":6, "y":1}, + {"label":"7", "x":7, "y":1}, + {"label":"8", "x":8, "y":1}, + {"label":"9", "x":9, "y":1}, + {"label":"0", "x":10, "y":1}, + {"label":"_", "x":11, "y":1}, + {"label":"+", "x":12, "y":1}, + {"label":"delete", "x":13, "y":1, "w":2}, + {"label":"Home", "x":15, "y":1}, + {"label":"Tab", "x":0, "y":2, "w":1.5}, + {"label":"Q", "x":1.5, "y":2}, + {"label":"W", "x":2.5, "y":2}, + {"label":"E", "x":3.5, "y":2}, + {"label":"R", "x":4.5, "y":2}, + {"label":"T", "x":5.5, "y":2}, + {"label":"Y", "x":6.5, "y":2}, + {"label":"U", "x":7.5, "y":2}, + {"label":"I", "x":8.5, "y":2}, + {"label":"O", "x":9.5, "y":2}, + {"label":"P", "x":10.5, "y":2}, + {"label":"{", "x":11.5, "y":2}, + {"label":"}", "x":12.5, "y":2}, + {"label":"|", "x":13.5, "y":2, "w":1.5}, + {"label":"Page Up", "x":15, "y":2}, + {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, + {"label":"A", "x":1.75, "y":3}, + {"label":"S", "x":2.75, "y":3}, + {"label":"D", "x":3.75, "y":3}, + {"label":"F", "x":4.75, "y":3}, + {"label":"G", "x":5.75, "y":3}, + {"label":"H", "x":6.75, "y":3}, + {"label":"J", "x":7.75, "y":3}, + {"label":"K", "x":8.75, "y":3}, + {"label":"L", "x":9.75, "y":3}, + {"label":":", "x":10.75, "y":3}, + {"label":"\"", "x":11.75, "y":3}, + {"label":"Enter", "x":12.75, "y":3, "w":2.25}, + {"label":"Page Down", "x":15, "y":3}, + {"label":"Shift", "x":0, "y":4, "w":2.25}, + {"label":"Z", "x":2.25, "y":4}, + {"label":"X", "x":3.25, "y":4}, + {"label":"C", "x":4.25, "y":4}, + {"label":"V", "x":5.25, "y":4}, + {"label":"B", "x":6.25, "y":4}, + {"label":"N", "x":7.25, "y":4}, + {"label":"M", "x":8.25, "y":4}, + {"label":"<", "x":9.25, "y":4}, + {"label":">", "x":10.25, "y":4}, + {"label":"?", "x":11.25, "y":4}, + {"label":"Shift", "x":12.25, "y":4, "w":1.75}, + {"label":"\u2191", "x":14, "y":4}, + {"label":"End", "x":15, "y":4}, + {"label":"Ctrl", "x":0, "y":5, "w":1.25}, + {"label":"Win", "x":1.25, "y":5, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5, "w":1.25}, + {"x":3.75, "y":5, "w":6.75}, + {"label":"Alt", "x":10, "y":5, "w":1.5}, + {"label":"Ctrl", "x":11.5, "y":5, "w":1.5}, + {"label":"\u2190", "x":13, "y":5}, + {"label":"\u2193", "x":14, "y":5}, + {"label":"\u2192", "x":15, "y":5}] + }, + + "LAYOUT_iso": { + "key_count": 84, + "layout": [ + {"label":"Esc", "x":0, "y":0}, + {"label":"F1", "x":1, "y":0}, + {"label":"F2", "x":2, "y":0}, + {"label":"F3", "x":3, "y":0}, + {"label":"F4", "x":4, "y":0}, + {"label":"F5", "x":5, "y":0}, + {"label":"F6", "x":6, "y":0}, + {"label":"F7", "x":7, "y":0}, + {"label":"F8", "x":8, "y":0}, + {"label":"F9", "x":9, "y":0}, + {"label":"F10", "x":10, "y":0}, + {"label":"F11", "x":11, "y":0}, + {"label":"F12", "x":12, "y":0}, + {"label":"PrtSc", "x":13, "y":0}, + {"label":"Pause", "x":14, "y":0}, + {"label":"Delete", "x":15, "y":0}, + {"label":"~", "x":0, "y":1}, + {"label":"1", "x":1, "y":1}, + {"label":"2", "x":2, "y":1}, + {"label":"3", "x":3, "y":1}, + {"label":"4", "x":4, "y":1}, + {"label":"5", "x":5, "y":1}, + {"label":"6", "x":6, "y":1}, + {"label":"7", "x":7, "y":1}, + {"label":"8", "x":8, "y":1}, + {"label":"9", "x":9, "y":1}, + {"label":"0", "x":10, "y":1}, + {"label":"_", "x":11, "y":1}, + {"label":"+", "x":12, "y":1}, + {"label":"delete", "x":13, "y":1, "w":2}, + {"label":"Home", "x":15, "y":1}, + {"label":"Tab", "x":0, "y":2, "w":1.5}, + {"label":"Q", "x":1.5, "y":2}, + {"label":"W", "x":2.5, "y":2}, + {"label":"E", "x":3.5, "y":2}, + {"label":"R", "x":4.5, "y":2}, + {"label":"T", "x":5.5, "y":2}, + {"label":"Y", "x":6.5, "y":2}, + {"label":"U", "x":7.5, "y":2}, + {"label":"I", "x":8.5, "y":2}, + {"label":"O", "x":9.5, "y":2}, + {"label":"P", "x":10.5, "y":2}, + {"label":"{", "x":11.5, "y":2}, + {"label":"}", "x":12.5, "y":2}, + {"label":"Enter", "x":13.75, "y":2, "KS":[ [0,0], [1.5,0], [1.5,2], [0.25,2], [0.25,1], [0,1], [0,0] ]}, + {"label":"Page Up", "x":15, "y":2}, + {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, + {"label":"A", "x":1.75, "y":3}, + {"label":"S", "x":2.75, "y":3}, + {"label":"D", "x":3.75, "y":3}, + {"label":"F", "x":4.75, "y":3}, + {"label":"G", "x":5.75, "y":3}, + {"label":"H", "x":6.75, "y":3}, + {"label":"J", "x":7.75, "y":3}, + {"label":"K", "x":8.75, "y":3}, + {"label":"L", "x":9.75, "y":3}, + {"label":":", "x":10.75, "y":3}, + {"label":"@", "x":11.75, "y":3}, + {"label":"~", "x":12.75, "y":3}, + {"label":"Page Down", "x":15, "y":3}, + {"label":"Shift", "x":0, "y":4, "w":1.25}, + {"x":1.25, "y":4}, + {"label":"Z", "x":2.25, "y":4}, + {"label":"X", "x":3.25, "y":4}, + {"label":"C", "x":4.25, "y":4}, + {"label":"V", "x":5.25, "y":4}, + {"label":"B", "x":6.25, "y":4}, + {"label":"N", "x":7.25, "y":4}, + {"label":"M", "x":8.25, "y":4}, + {"label":"<", "x":9.25, "y":4}, + {"label":">", "x":10.25, "y":4}, + {"label":"?", "x":11.25, "y":4}, + {"label":"Shift", "x":12.25, "y":4, "w":1.75}, + {"label":"\u2191", "x":14, "y":4}, + {"label":"End", "x":15, "y":4}, + {"label":"Ctrl", "x":0, "y":5, "w":1.25}, + {"label":"Win", "x":1.25, "y":5, "w":1.25}, + {"label":"Alt", "x":2.5, "y":5, "w":1.25}, + {"x":3.75, "y":5, "w":6.75}, + {"label":"Alt", "x":10, "y":5, "w":1.5}, + {"label":"Ctrl", "x":11.5, "y":5, "w":1.5}, + {"label":"\u2190", "x":13, "y":5}, + {"label":"\u2193", "x":14, "y":5}, + {"label":"\u2192", "x":15, "y":5}] } - } + } } diff --git a/keyboards/kbd75/kbd75.h b/keyboards/kbd75/kbd75.h index 3648a15bd85..fa1c1a00a52 100644 --- a/keyboards/kbd75/kbd75.h +++ b/keyboards/kbd75/kbd75.h @@ -4,7 +4,7 @@ #include "quantum.h" // LAYOUT for all possible switch positions on a KBD75 -#define KEYMAP_ALL( \ +#define LAYOUT( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, \ @@ -20,4 +20,68 @@ { K500, K501, KC_NO, K503, K504, KC_NO, K506, KC_NO, K508, KC_NO, K510, K511, K512, K513, K514, K515 } \ } -#endif \ No newline at end of file +#define LAYOUT_ansi_1u( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \ + K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K315, \ + K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K413, K414, K415, \ + K500, K501, K503, K506, K510, K511, K512, K513, K514, K515 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \ + { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \ + { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, KC_NO, K315 }, \ + { K400, KC_NO, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, KC_NO, K413, K414, K415 }, \ + { K500, K501, KC_NO, K503, KC_NO, KC_NO, K506, KC_NO, KC_NO, KC_NO, K510, K511, K512, K513, K514, K515 } \ +} + +#define LAYOUT_iso_1u( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \ + K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K315, \ + K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K413, K414, K415, \ + K500, K501, K503, K506, K510, K511, K512, K513, K514, K515 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114, K115 }, \ + { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \ + { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, KC_NO, K315 }, \ + { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, KC_NO, K413, K414, K415 }, \ + { K500, K501, KC_NO, K503, KC_NO, KC_NO, K506, KC_NO, KC_NO, KC_NO, K510, K511, K512, K513, K514, K515 } \ +} + +#define LAYOUT_ansi( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \ + K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K315, \ + K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K413, K414, K415, \ + K500, K501, K503, K506, K510, K512, K513, K514, K515 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114, K115 }, \ + { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \ + { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, KC_NO, K315 }, \ + { K400, KC_NO, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, KC_NO, K413, K414, K415 }, \ + { K500, K501, KC_NO, K503, KC_NO, KC_NO, K506, KC_NO, KC_NO, KC_NO, K510, KC_NO, K512, K513, K514, K515 } \ +} + +#define LAYOUT_iso( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \ + K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K315, \ + K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K413, K414, K415, \ + K500, K501, K503, K506, K510, K512, K513, K514, K515 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114, K115 }, \ + { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \ + { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, KC_NO, K315 }, \ + { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, KC_NO, K413, K414, K415 }, \ + { K500, K501, KC_NO, K503, KC_NO, KC_NO, K506, KC_NO, KC_NO, KC_NO, K510, KC_NO, K512, K513, K514, K515 } \ +} + +#endif diff --git a/keyboards/kbd75/keymaps/adit/keymap.c b/keyboards/kbd75/keymaps/adit/keymap.c index 8bcc15affc1..23bf34e8c40 100644 --- a/keyboards/kbd75/keymaps/adit/keymap.c +++ b/keyboards/kbd75/keymaps/adit/keymap.c @@ -1,8 +1,8 @@ -#include "kbd75.h" +#include QMK_KEYBOARD_H #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP_ALL( + LAYOUT( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_DEL, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_TRNS, KC_BSPC, KC_HOME, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, @@ -10,7 +10,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LSFT, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, LT(1,KC_END), KC_CAPS, KC_LALT, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_RGUI, KC_TRNS, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - KEYMAP_ALL( + LAYOUT( RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, diff --git a/keyboards/kbd75/keymaps/default/keymap.c b/keyboards/kbd75/keymaps/default/keymap.c index 3c96dee0879..107962e7016 100644 --- a/keyboards/kbd75/keymaps/default/keymap.c +++ b/keyboards/kbd75/keymaps/default/keymap.c @@ -1,16 +1,16 @@ -#include "kbd75.h" +#include QMK_KEYBOARD_H #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP_ALL( - LT(2, KC_ESC), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, MO(1), KC_DEL, + LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, MO(1), KC_DEL, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_HOME, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_LSFT, MO(1), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -18,7 +18,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, M(1), M(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -26,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -58,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -66,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -74,7 +74,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -82,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -90,7 +90,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -98,7 +98,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -106,7 +106,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -114,7 +114,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -122,7 +122,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, diff --git a/keyboards/kbd75/keymaps/iso/keymap.c b/keyboards/kbd75/keymaps/iso/keymap.c index 49d6ad71682..01aa35c6971 100644 --- a/keyboards/kbd75/keymaps/iso/keymap.c +++ b/keyboards/kbd75/keymaps/iso/keymap.c @@ -1,16 +1,16 @@ -#include "kbd75.h" +#include QMK_KEYBOARD_H #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP_ALL( - LT(2, KC_ESC), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, MO(1), KC_DEL, + LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, MO(1), KC_DEL, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_HOME, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - KEYMAP_ALL( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -18,118 +18,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP_ALL( + LAYOUT( KC_TRNS, M(1), M(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - - KEYMAP_ALL( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) - }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { diff --git a/keyboards/kbd75/keymaps/smt/keymap.c b/keyboards/kbd75/keymaps/smt/keymap.c index 1a549e59ec9..a29a7e8a9fa 100644 --- a/keyboards/kbd75/keymaps/smt/keymap.c +++ b/keyboards/kbd75/keymaps/smt/keymap.c @@ -1,4 +1,4 @@ -#include "kbd75.h" +#include QMK_KEYBOARD_H #define _QWERTY 0 #define _COLEMAK 1 @@ -40,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ /* 0: ANSI qwerty */ - [_QWERTY] = KEYMAP_ALL( + [_QWERTY] = LAYOUT( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, KC_DEL, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_INS, KC_HOME, \ HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGUP, \ @@ -65,7 +65,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ /* 1: ANSI colemak */ - [_COLEMAK] = KEYMAP_ALL( + [_COLEMAK] = LAYOUT( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, KC_DEL, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_INS, KC_HOME, \ HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGUP, \ @@ -90,7 +90,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ /* 2: ANSI dvorak */ - [_DVORAK] = KEYMAP_ALL( + [_DVORAK] = LAYOUT( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, KC_DEL, \ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS, KC_HOME, \ HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC, KC_PGUP, \ @@ -115,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ /* 3: ANSI Fn layer */ - [_FL] = KEYMAP_ALL( + [_FL] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ @@ -140,7 +140,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ /* 4: ANSI control layer */ - [_CL] = KEYMAP_ALL( + [_CL] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, \ _______, _______, _______, _______, RESET, _______, _______, QWERTY, COLEMAK, DVORAK, _______, _______, _______, _______, RGB_VAI, \