From 5aada76f12239f2faa43d0c312b6168367017a40 Mon Sep 17 00:00:00 2001 From: Maarten Dekkers Date: Tue, 17 Apr 2018 00:15:28 +0200 Subject: [PATCH 001/152] Update maartenwut's keymaps (tada68, atom47) and add GH60 layout (#2751) --- keyboards/atom47/keymaps/maartenwut/keymap.c | 44 +++++++++++++----- keyboards/gh60/keymaps/maartenwut/keymap.c | 47 ++++++++++++++++++++ keyboards/tada68/keymaps/maartenwut/keymap.c | 40 ++--------------- 3 files changed, 84 insertions(+), 47 deletions(-) create mode 100755 keyboards/gh60/keymaps/maartenwut/keymap.c diff --git a/keyboards/atom47/keymaps/maartenwut/keymap.c b/keyboards/atom47/keymaps/maartenwut/keymap.c index 7de75e10ec4..d526d836c35 100644 --- a/keyboards/atom47/keymaps/maartenwut/keymap.c +++ b/keyboards/atom47/keymaps/maartenwut/keymap.c @@ -11,36 +11,60 @@ #define _______ KC_TRNS +enum custom_keycodes { + CTRLZ = SAFE_RANGE, + CTRLX, + CTRLC, + CTRLV +}; + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_MA] = KEYMAP_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_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( + 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( _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, _______, _______, _______, \ KC_CAPS, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY, KC_PSCR, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), \ -[_LO] = KEYMAP_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_LBRC, KC_RBRC, KC_BSLS, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET), \ - }; void led_set_user(uint8_t usb_led) { if (usb_led & (1<event.pressed) { + switch(keycode) { + case CTRLZ: + SEND_STRING(SS_LCTRL("z")); + return false; + case CTRLX: + SEND_STRING(SS_LCTRL("x")); + return false; + case CTRLC: + SEND_STRING(SS_LCTRL("c")); + return false; + case CTRLV: + SEND_STRING(SS_LCTRL("v")); + return false; + } + } + return true; +}; diff --git a/keyboards/gh60/keymaps/maartenwut/keymap.c b/keyboards/gh60/keymaps/maartenwut/keymap.c new file mode 100755 index 00000000000..825a4033671 --- /dev/null +++ b/keyboards/gh60/keymaps/maartenwut/keymap.c @@ -0,0 +1,47 @@ +#include "gh60.h" +#include "action_layer.h" + +#define _MA 0 +#define _GA 1 +#define _FL 2 +#define _AR 3 + +#define TRNS KC_TRNS +#define trigger_time 400 + +#define LSHIFT OSM(MOD_LSFT) +#define SPACE LT(_AR, KC_SPC) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +// Main Layer +[_MA] = KEYMAP_HHKB( + 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_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_ENT, + LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_DEL, + KC_LCTL, KC_LGUI, KC_LALT, SPACE, KC_NO, KC_RALT, MO(_FL), KC_RCTRL), + +//Function Layer +[_FL] = KEYMAP_HHKB( + 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, RESET, KC_NO, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_PSCR, + TRNS, KC_MS_L, KC_MS_D, KC_MS_R, TRNS, TG(_GA), TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_VOLD, KC_VOLU, KC_MUTE, TRNS, KC_MPLY, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), + +//Arrow keys layer (space bar) +[_AR] = KEYMAP_HHKB( + 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, TRNS, KC_NO, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_PGUP, KC_UP, KC_PGDN, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_LEFT, KC_DOWN, KC_RGHT, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), +//Game layer (fn + g) +[_GA] = KEYMAP_HHKB( + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_NO, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + KC_LSFT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, KC_SPC, TRNS, TRNS, MO(_FL), TRNS), + +}; diff --git a/keyboards/tada68/keymaps/maartenwut/keymap.c b/keyboards/tada68/keymaps/maartenwut/keymap.c index c5b9d987ea4..f427f56a6bd 100755 --- a/keyboards/tada68/keymaps/maartenwut/keymap.c +++ b/keyboards/tada68/keymaps/maartenwut/keymap.c @@ -13,21 +13,20 @@ #define LSHIFT OSM(MOD_LSFT) #define SPACE LT(_AR, KC_SPC) -#define CAPS LT(_LE, KC_CAPS) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Main Layer [_MA] = KEYMAP_ANSI( 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_MPLY, 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, - 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_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_PGUP, LSHIFT, 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, SPACE, KC_RALT, KC_RCTRL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT), //Function Layer [_FL] = KEYMAP_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, RESET, KC_PSCR, - TRNS, KC_BTN1, KC_MS_U, KC_BTN2, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TO(_LO), + TRNS, KC_BTN1, KC_MS_U, KC_BTN2, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_INS, TRNS, KC_MS_L, KC_MS_D, KC_MS_R, TRNS, TG(_GA), TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_HOME, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_VOLD, KC_VOLU, KC_MUTE, TRNS, KC_WH_U, KC_END, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_WH_L, KC_WH_D, KC_WH_R), @@ -38,45 +37,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TERM_ON, TERM_OFF, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, M(0), TRNS, TRNS, TRNS), -//LED control layer (caps) -[_LE] = KEYMAP_ANSI( - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - TRNS, BL_TOGG, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - TRNS, BL_INC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - TRNS, BL_DEC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), - //Game layer (fn + g) [_GA] = KEYMAP_ANSI( TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - KC_CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_LSFT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, KC_SPC, TRNS, TRNS, MO(_FL), TRNS, TRNS, TRNS), - -[_UL] = KEYMAP_ANSI( - 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_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, TO(_MA), - 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_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_NO, KC_NO, TRNS, KC_NO, KC_NO, KC_NO), - -[_LO] = KEYMAP_ANSI( - 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_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_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_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, MO(_UL), KC_NO, KC_NO, KC_NO), -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - switch (id) { - case 0: - if (record->event.pressed) { - SEND_STRING("Password"); - } - break; - } - return MACRO_NONE; }; \ No newline at end of file From ec9058f22714894b3b518000fd95977f68251fb9 Mon Sep 17 00:00:00 2001 From: zwnk Date: Wed, 18 Apr 2018 00:50:20 -0300 Subject: [PATCH 002/152] impstyle keymap added (#2753) --- keyboards/iris/keymaps/impstyle/keymap.c | 119 +++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 keyboards/iris/keymaps/impstyle/keymap.c diff --git a/keyboards/iris/keymaps/impstyle/keymap.c b/keyboards/iris/keymaps/impstyle/keymap.c new file mode 100644 index 00000000000..84f89c9c09b --- /dev/null +++ b/keyboards/iris/keymaps/impstyle/keymap.c @@ -0,0 +1,119 @@ +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; + +#define _QWERTY 0 +#define _LOWER 1 +#define _RAISE 2 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ADJUST, +}; + +#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) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_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_LGUI,KC_RASE,KC_SPC , KC_ENT ,KC_LOWR,KC_LALT + ), + + [_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 + +), + [_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, + _______ ,KC_LEFT,KC_DOWN,KC_RGHT,_______,KC_LPRN, KC_RPRN,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_VOLU, + _______,_______,_______,_______,_______,_______,_______, KC_PLUS,_______,_______,_______,_______,_______,KC_VOLD, + _______ ,_______,_______, KC_EQL,_______,_______ + ), + + [_ADJUST] = LAYOUT( + //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------. + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + RESET , DEBUG , RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------| + BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------' + _______, _______, _______, _______, _______, _______ + // `--------+--------+--------' `--------+--------+--------' + ) + +}; + +#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; +} From 9ab786d1d8f07a252d109e4fcea92b929a7fb5cf Mon Sep 17 00:00:00 2001 From: Ethan Madden Date: Tue, 17 Apr 2018 20:50:50 -0700 Subject: [PATCH 003/152] Added amj40 keymap (#2754) fixed shift area keymap updates to try to make this thing usable documentation tweaks fix readme mismatch clean up and finish docs --- .../amj40/keymaps/jetpacktuxedo/keymap.c | 43 +++++++++++++++ .../amj40/keymaps/jetpacktuxedo/readme.md | 55 +++++++++++++++++++ .../amj40/keymaps/jetpacktuxedo/rules.mk | 27 +++++++++ 3 files changed, 125 insertions(+) create mode 100755 keyboards/amj40/keymaps/jetpacktuxedo/keymap.c create mode 100755 keyboards/amj40/keymaps/jetpacktuxedo/readme.md create mode 100644 keyboards/amj40/keymaps/jetpacktuxedo/rules.mk diff --git a/keyboards/amj40/keymaps/jetpacktuxedo/keymap.c b/keyboards/amj40/keymaps/jetpacktuxedo/keymap.c new file mode 100755 index 00000000000..62f4376f586 --- /dev/null +++ b/keyboards/amj40/keymaps/jetpacktuxedo/keymap.c @@ -0,0 +1,43 @@ +#include "amj40.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // Default Layer + [0] = KEYMAP( \ + KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,\ + LT(2, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(2, KC_ENT),\ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, MT(MOD_RSFT, KC_SLSH),\ + KC_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), LT(1, KC_SPC), KC_RALT, MO(3), KC_RCTL \ + ), + + // Number Layer + [1] = KEYMAP( \ + 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_TRNS, KC_MINS, KC_EQL, KC_SCLN, KC_QUOT, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, MT(MOD_RSFT, KC_BSLS), \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS\ + ), + + // Shifted Layer + [2] = KEYMAP( \ + 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_TRNS, KC_UNDS, KC_PLUS, KC_COLN, KC_DQUO, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_PIPE, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS\ + ), + + // Fkey Layer + [3] = KEYMAP( \ + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET,\ + KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, TG(4), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS\ + ), + + // Gaming Layer + [4] = KEYMAP( \ + KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_U, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,\ + KC_TAB, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,\ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\ + KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS\ + ), +}; diff --git a/keyboards/amj40/keymaps/jetpacktuxedo/readme.md b/keyboards/amj40/keymaps/jetpacktuxedo/readme.md new file mode 100755 index 00000000000..64ae16c7eb8 --- /dev/null +++ b/keyboards/amj40/keymaps/jetpacktuxedo/readme.md @@ -0,0 +1,55 @@ +Jetpacktuxedo's AMJ40 layout +===================== + +This is based heavily on my minivan layout, with most difference stemming from the different widths between the minivan and the AMJ40. ![Image of my specific layout](https://i.imgur.com/B9XraJY.jpg) + +## Base Layer (0) + +The base layer is pretty simple, straight qwerty layout where available. Both spacebars go to layer 1 when held. `tab` is `tab` when pressed and `fn2` when held, `enter` is the same. `GESC` is `esc` when used alone, but `~` when shifted. `/` is `/` when tapped but `rshift` when held. +``` +|GESC| Q | W | E | R | T | Y | U | I | O | P |BSPC| +| TAB | A | S | D | F | G | H | J | K | L | ENTER | +|LSHIFT | Z | X | C | V | B | N | M | , | . | / | +|LCTRL|LWIN|LALT | SPACE | SPACE |RALT |FN 3|RCTRL | +``` + +## Number Layer (1) + +Numbers are set up just like on my minivan layout, but symbols are a bit different because the AMJ40 is one key narrower than the minivan and also lacks dedicated arrows. Decided to go with `hjkl` arrows, which takes some getting used to. `;` is on a layer now because of the narrowness I mentioned before, and it (along with `-`, `=`, and `'`) moves to the right hand to leave room for the `hjkl` arrows. `delete` on `backspace`, `[` and `]` on `<` and `>`, and `\` on `/` are all stolen straight from my minivan layout. +``` +| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |DEL | +| | - | = | ; | ' | | ← | ↓ | ↑ | → | | +| | | | | | | | | [ | ] | \ | +| | | | | | | | | +``` + +## Shifted Layer (2) + +I don't want to be using two key combos constantly, so I also added this symbol layer that is basically shift+numeric layer. Also has nav keys on top of where arrows sit on the previous layer +``` +| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |DEL | +| | _ | + | : | " | |HOME|PGDN|PGUP|END | | +| | | | | | | | | { | } | | | +| | | | | | | | | +``` + +## Fkey Layer (3) + +Honestly, I use this more for jumping to my gaming layer and for reset than I use it for Fkeys. Lol. Hitting the left windows key while in this layer locks the gaming layer listed below +``` +| | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 |F10 |RSET| +| |F11 |F12 | | | | | | | | | +| | | | | | | | | | | | +| |FN 4| | | | | | | +``` + +## "Gaming" Layer (4) + +Based on the "gaming" layer on my minivan that I mostly just use for mouse keys. To toggle this back off you hit the right windows key (to go to layer 3) and then the left windows key again. +``` +|ESC | | | | | |MWUP|MLCK|M UP|MRCK| | | +| TAB | | | | | |MWDN|M L |M DN|M R | | +| | | | | | | | | | | | +| | | | SPACE | | | | | +``` + diff --git a/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk b/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk new file mode 100644 index 00000000000..d7f3e76054e --- /dev/null +++ b/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk @@ -0,0 +1,27 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. + +# Do not enable SLEEP_LED_ENABLE. It uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD + + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif From a7fca476866ea7efac69c7519d9666665c9a62a8 Mon Sep 17 00:00:00 2001 From: internetirl Date: Wed, 18 Apr 2018 22:21:36 -0400 Subject: [PATCH 004/152] Link to Atmel's flip is broken. (#2752) The link to Atmel's flip is broken. It re-directs to http://www.microchip.com/. Please update! I think this is the correct link. Please verify. http://www.microchip.com/developmenttools/productdetails.aspx?partno=flip --- docs/flashing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/flashing.md b/docs/flashing.md index 8e1381f6981..e5fe59f8f03 100644 --- a/docs/flashing.md +++ b/docs/flashing.md @@ -20,7 +20,7 @@ Compatible flashers: * [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (recommended GUI) * [dfu-programmer](https://github.com/dfu-programmer/dfu-programmer) / `:dfu` in QMK (recommended command line) -* [Atmel's Flip](http://www.atmel.com/tools/flip.aspx) (not recommended) +* [Atmel's Flip](http://www.microchip.com/developmenttools/productdetails.aspx?partno=flip) (not recommended) Flashing sequence: From 3d3c093173f6e9a838671bd7484b3a11dc564c1a Mon Sep 17 00:00:00 2001 From: adiron Date: Thu, 19 Apr 2018 05:22:08 +0300 Subject: [PATCH 005/152] Added bending to MIDI (#2740) This is done via MI_BENDD and MI_BENDU. At the moment the value is hardcoded and cannot be adjusted (future commit?) and is the max for the `midi_send_pitchbend` function (up or down). `MI_BENDD` and `MI_BENDU` both require `#define MIDI_ADVANCED` MIDI pitch bend was already implemented in `protocol/midi.c`, I merely added the keycodes to trigger them. :) (thanks to Jack, two years ago in commit fb4fe52c apparently) --- quantum/process_keycode/process_midi.c | 20 ++++++++++++++++++++ quantum/quantum_keycodes.h | 3 +++ 2 files changed, 23 insertions(+) diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 9728076dfd3..a67f736285f 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -222,6 +222,26 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) dprintf("midi modulation interval %d\n", midi_config.modulation_interval); } return false; + case MI_BENDD: + if (record->event.pressed) { + midi_send_pitchbend(&midi_device, midi_config.channel, -0x2000); + dprintf("midi pitchbend channel:%d amount:%d\n", midi_config.channel, -0x2000); + } + else { + midi_send_pitchbend(&midi_device, midi_config.channel, 0); + dprintf("midi pitchbend channel:%d amount:%d\n", midi_config.channel, 0); + } + return false; + case MI_BENDU: + if (record->event.pressed) { + midi_send_pitchbend(&midi_device, midi_config.channel, 0x1fff); + dprintf("midi pitchbend channel:%d amount:%d\n", midi_config.channel, 0x1fff); + } + else { + midi_send_pitchbend(&midi_device, midi_config.channel, 0); + dprintf("midi pitchbend channel:%d amount:%d\n", midi_config.channel, 0); + } + return false; }; return true; diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 8122bfe7397..d545440c99d 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -383,6 +383,9 @@ enum quantum_keycodes { MI_MOD, // modulation MI_MODSD, // decrease modulation speed MI_MODSU, // increase modulation speed + + MI_BENDD, // Bend down + MI_BENDU, // Bend up #endif // MIDI_ADVANCED // Backlight functionality From b4bdebab9a48546160465d64000724a07617054e Mon Sep 17 00:00:00 2001 From: Cole Markham Date: Wed, 18 Apr 2018 23:57:24 -0500 Subject: [PATCH 006/152] Meira updates for bluetooth and audio (#2731) * Add audio output * Update Miera to fix bluetooth issues, bootloader definition. * Added keymap with audio example * Cleanup Meira audio code --- keyboards/meira/config.h | 4 + keyboards/meira/featherble/config.h | 4 + keyboards/meira/featherble/rules.mk | 2 +- keyboards/meira/keymaps/cole/config.h | 31 +++ keyboards/meira/keymaps/cole/keymap.c | 253 +++++++++++++++++++++++ keyboards/meira/keymaps/cole/readme.md | 1 + keyboards/meira/keymaps/cole/rules.mk | 2 + keyboards/meira/keymaps/default/config.h | 10 + keyboards/meira/keymaps/default/keymap.c | 11 + keyboards/meira/meira.c | 20 -- keyboards/meira/meira.h | 1 + keyboards/meira/promicro/rules.mk | 13 ++ keyboards/meira/rules.mk | 39 ++-- 13 files changed, 347 insertions(+), 44 deletions(-) create mode 100644 keyboards/meira/keymaps/cole/config.h create mode 100644 keyboards/meira/keymaps/cole/keymap.c create mode 100644 keyboards/meira/keymaps/cole/readme.md create mode 100644 keyboards/meira/keymaps/cole/rules.mk diff --git a/keyboards/meira/config.h b/keyboards/meira/config.h index b9bdd426a0e..5e9dd6837e0 100644 --- a/keyboards/meira/config.h +++ b/keyboards/meira/config.h @@ -35,11 +35,15 @@ along with this program. If not, see . /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ #define DIODE_DIRECTION CUSTOM_MATRIX +#ifdef BACKLIGHT_ENABLE #define BACKLIGHT_LEVELS 10 #define BACKLIGHT_PWM_MAP {2, 4, 8, 16, 40, 55, 70, 128, 200, 255} +#endif +#ifdef RGBLIGHT_ENABLE #define RGB_DI_PIN D3 #define RGBLIGHT_TIMER #define RGBLED_NUM 15 // Number of LEDs +#endif #endif diff --git a/keyboards/meira/featherble/config.h b/keyboards/meira/featherble/config.h index ea26bedfa06..b7cdfe8bdb8 100644 --- a/keyboards/meira/featherble/config.h +++ b/keyboards/meira/featherble/config.h @@ -36,6 +36,10 @@ along with this program. If not, see . #define LED_EN_PIN D2 #define UNUSED_PINS +#define QMK_SPEAKER B5 +#define B5_AUDIO +#define AUDIO_VOICES + #define CATERINA_BOOTLOADER diff --git a/keyboards/meira/featherble/rules.mk b/keyboards/meira/featherble/rules.mk index 3f32ba890ba..e27608983f1 100644 --- a/keyboards/meira/featherble/rules.mk +++ b/keyboards/meira/featherble/rules.mk @@ -1,3 +1,3 @@ BLUETOOTH_ENABLE = yes F_CPU = 8000000 - +BLUETOOTH = AdafruitBLE diff --git a/keyboards/meira/keymaps/cole/config.h b/keyboards/meira/keymaps/cole/config.h new file mode 100644 index 00000000000..90c490e8362 --- /dev/null +++ b/keyboards/meira/keymaps/cole/config.h @@ -0,0 +1,31 @@ +/* Copyright 2017 Cole Markham, WoodKeys.click + * + * 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" + +// place overrides here +#define MUSIC_MASK (keycode != KC_NO) +#ifdef AUDIO_ENABLE + #define STARTUP_SONG SONG(IMPERIAL_MARCH) + // Disable music mode to keep the firmware size down + #define NO_MUSIC_MODE + +#endif + +#endif diff --git a/keyboards/meira/keymaps/cole/keymap.c b/keyboards/meira/keymaps/cole/keymap.c new file mode 100644 index 00000000000..b1c230d9264 --- /dev/null +++ b/keyboards/meira/keymaps/cole/keymap.c @@ -0,0 +1,253 @@ +/* Copyright 2017 Cole Markham + * + * 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 "meira.h" +#include "lighting.h" + +#ifdef RGBLIGHT_ENABLE +//Following line allows macro to read current RGB settings +extern rgblight_config_t rgblight_config; +#endif + +#define _QWERTY 0 +#define _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _ADJUST 16 + + +#ifndef BLUETOOTH_ENABLE +#define OUT_BT KC_TRNS +#endif + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ADJUST, +}; + +// define variables for reactive RGB +bool TOG_STATUS = false; +int RGB_current_mode; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | ; | ' | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Ctrl | Alt |Lower | Cmd |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ + [_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, \ + KC_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, KC_ENT, \ + ADJUST, KC_LCTL, KC_LALT, KC_LALT, LOWER, KC_LGUI, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ + ), + + /* Lower + * ,-----------------------------------------------------------------------------------. + * | | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ~ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ + [_LOWER] = KEYMAP( \ + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ + KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, KC_QUOT, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ + ), + + /* Raise + * ,-----------------------------------------------------------------------------------. + * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | ` | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Home | PgUp | PgDn | End | + * `-----------------------------------------------------------------------------------' + */ + [_RAISE] = KEYMAP( \ + _______, 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ + ), + + /* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ + [_ADJUST] = KEYMAP( \ + RESET, _______, _______, KC_MRWD, KC_MPLY, KC_MFFD, KC_PSCR, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, \ + BL_STEP, RGB_MOD, _______, AU_ON, AU_OFF, _______, _______, _______, _______, _______, _______, _______, \ + BL_TOGG, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, KC_PSCR, _______, _______, _______, _______, _______, _______, _______, OUT_AUTO, OUT_USB, OUT_BT \ + ) +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +// Setting ADJUST layer RGB back to default +void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { + if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { +#ifdef RGBLIGHT_ENABLE + rgblight_mode(RGB_current_mode); +#endif + layer_on(layer3); + } else { + layer_off(layer3); + } +} + +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; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case LOWER: + if (record->event.pressed) { + //not sure how to have keyboard check mode and set it to a variable, so my work around + //uses another variable that would be set to true after the first time a reactive key is pressed. + if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false + } else { + TOG_STATUS = !TOG_STATUS; +#ifdef RGBLIGHT_ENABLE + rgblight_mode(16); +#endif + } + layer_on(_LOWER); + update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + } else { +#ifdef RGBLIGHT_ENABLE + rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change +#endif + TOG_STATUS = false; + layer_off(_LOWER); + update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + //not sure how to have keyboard check mode and set it to a variable, so my work around + //uses another variable that would be set to true after the first time a reactive key is pressed. + if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false + } else { + TOG_STATUS = !TOG_STATUS; +#ifdef RGBLIGHT_ENABLE + rgblight_mode(15); +#endif + } + layer_on(_RAISE); + update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + } else { +#ifdef RGBLIGHT_ENABLE + rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change +#endif + layer_off(_RAISE); + TOG_STATUS = false; + update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + } + return false; + break; + case ADJUST: + // FIXME add RGB feedback + if (record->event.pressed) { + layer_on(_ADJUST); + } else { + layer_off(_ADJUST); + } + return false; + break; + case BL_TOGG: +#ifdef BACKLIGHT_ENABLE + if (record->event.pressed) { + print("Enabling backlight\n"); + backlight_init_ports(); + } +#endif + return false; + break; + case BL_STEP: + if (record->event.pressed) { +#ifdef BACKLIGHT_ENABLE + backlight_step(); +#endif + + } + return false; + break; + //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released +#ifdef RGBLIGHT_ENABLE + case RGB_MOD: + if (record->event.pressed) { + rgblight_mode(RGB_current_mode); + rgblight_step(); + RGB_current_mode = rgblight_config.mode; + } + return false; + break; +#endif + } + return true; +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/meira/keymaps/cole/readme.md b/keyboards/meira/keymaps/cole/readme.md new file mode 100644 index 00000000000..be840488132 --- /dev/null +++ b/keyboards/meira/keymaps/cole/readme.md @@ -0,0 +1 @@ +# The default keymap for meira diff --git a/keyboards/meira/keymaps/cole/rules.mk b/keyboards/meira/keymaps/cole/rules.mk new file mode 100644 index 00000000000..8f8d53e57a5 --- /dev/null +++ b/keyboards/meira/keymaps/cole/rules.mk @@ -0,0 +1,2 @@ +AUDIO_ENABLE = yes # Audio output on port C6 +EXTRAFLAGS+=-flto # -4-7k \ No newline at end of file diff --git a/keyboards/meira/keymaps/default/config.h b/keyboards/meira/keymaps/default/config.h index 97210115b9e..5f5844a70a1 100644 --- a/keyboards/meira/keymaps/default/config.h +++ b/keyboards/meira/keymaps/default/config.h @@ -20,5 +20,15 @@ #include "../../config.h" // place overrides here +#define MUSIC_MASK (keycode != KC_NO) +#ifdef AUDIO_ENABLE + #define STARTUP_SONG SONG(PLANCK_SOUND) + // #define STARTUP_SONG SONG(NO_SOUND) + + #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ + SONG(COLEMAK_SOUND), \ + SONG(DVORAK_SOUND) \ + } +#endif #endif diff --git a/keyboards/meira/keymaps/default/keymap.c b/keyboards/meira/keymaps/default/keymap.c index dd55859a580..4bbd014cb79 100644 --- a/keyboards/meira/keymaps/default/keymap.c +++ b/keyboards/meira/keymaps/default/keymap.c @@ -37,6 +37,17 @@ enum custom_keycodes { ADJUST, }; +#ifdef AUDIO_ENABLE + +float tone_my_startup[][2] = SONG(ODE_TO_JOY); +float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY); + +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_SOUND); + +#endif /* AUDIO_ENABLE */ + // define variables for reactive RGB bool TOG_STATUS = false; int RGB_current_mode; diff --git a/keyboards/meira/meira.c b/keyboards/meira/meira.c index 2ae53e00a3e..3ff62a080b9 100644 --- a/keyboards/meira/meira.c +++ b/keyboards/meira/meira.c @@ -22,30 +22,10 @@ extern void backlight_set(uint8_t level); -#ifdef AUDIO_ENABLE - float tone_startup[][2] = SONG(STARTUP_SOUND); - float tone_goodbye[][2] = SONG(GOODBYE_SOUND); -#endif - - -void shutdown_user(void) { - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_goodbye, false, 0); - _delay_ms(150); - stop_all_notes(); - #endif -} - - void matrix_init_kb(void) { debug_enable=true; print("meira matrix_init_kb\n"); -#ifdef AUDIO_ENABLE - _delay_ms(20); // gets rid of tick - PLAY_NOTE_ARRAY(tone_startup, false, 0); -#endif - #ifdef ISSI_ENABLE issi_init(); diff --git a/keyboards/meira/meira.h b/keyboards/meira/meira.h index 35c5ba419de..8cdcd09fe22 100644 --- a/keyboards/meira/meira.h +++ b/keyboards/meira/meira.h @@ -54,6 +54,7 @@ void reset_keyboard_kb(void); #define LAYOUT_ortho_4x12 KEYMAP #define KC_LAYOUT_ortho_4x12 KC_KEYMAP +#define LAYOUT_kc_ortho_4x12 KC_KEYMAP #endif diff --git a/keyboards/meira/promicro/rules.mk b/keyboards/meira/promicro/rules.mk index 3c81f1b344a..22e49971f1c 100644 --- a/keyboards/meira/promicro/rules.mk +++ b/keyboards/meira/promicro/rules.mk @@ -1 +1,14 @@ +# 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 + BLUETOOTH_ENABLE = no diff --git a/keyboards/meira/rules.mk b/keyboards/meira/rules.mk index e898146abd2..d3e45fc8d0d 100644 --- a/keyboards/meira/rules.mk +++ b/keyboards/meira/rules.mk @@ -4,19 +4,6 @@ SRC += matrix.c TWIlib.c issi.c lighting.c #MCU = at90usb1286 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 @@ -37,6 +24,12 @@ ARCH = AVR8 # CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU. F_USB = $(F_CPU) +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = caterina + # Interrupt driven control endpoint task(+60) OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT @@ -54,10 +47,10 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 # change yes to no to disable # BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) EXTRAKEY_ENABLE = yes # Audio control and System control(+450) -CONSOLE_ENABLE = yes # Console for debug(+400) -COMMAND_ENABLE = yes # Commands for debug and configuration +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work @@ -74,13 +67,13 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be di CUSTOM_MATRIX = yes -ifeq ($(strip $(ISSI_ENABLE)), yes) - TMK_COMMON_DEFS += -DISSI_ENABLE -endif - -ifeq ($(strip $(WATCHDOG_ENABLE)), yes) - TMK_COMMON_DEFS += -DWATCHDOG_ENABLE -endif +#ifeq ($(strip $(ISSI_ENABLE)), yes) +# TMK_COMMON_DEFS += -DISSI_ENABLE +#endif +# +#ifeq ($(strip $(WATCHDOG_ENABLE)), yes) +# TMK_COMMON_DEFS += -DWATCHDOG_ENABLE +#endif DEFAULT_FOLDER = meira/promicro LAYOUTS = ortho_4x12 From 23b45710acc57ed147e006a8c79a1caf6fa57fd7 Mon Sep 17 00:00:00 2001 From: Cole Markham Date: Sun, 17 Dec 2017 22:04:50 -0600 Subject: [PATCH 007/152] Add support for Big Series 1-key PCB by Woodkeys.click --- keyboards/bigseries/bigseries.c | 26 ++++ keyboards/bigseries/bigseries.h | 28 ++++ keyboards/bigseries/config.h | 59 ++++++++ keyboards/bigseries/keymaps/default/keymap.c | 93 +++++++++++++ keyboards/bigseries/keymaps/leddance/config.h | 23 ++++ keyboards/bigseries/keymaps/leddance/keymap.c | 127 ++++++++++++++++++ keyboards/bigseries/keymaps/leddance/rules.mk | 1 + keyboards/bigseries/readme.md | 15 +++ keyboards/bigseries/rules.mk | 59 ++++++++ 9 files changed, 431 insertions(+) create mode 100755 keyboards/bigseries/bigseries.c create mode 100755 keyboards/bigseries/bigseries.h create mode 100755 keyboards/bigseries/config.h create mode 100755 keyboards/bigseries/keymaps/default/keymap.c create mode 100644 keyboards/bigseries/keymaps/leddance/config.h create mode 100755 keyboards/bigseries/keymaps/leddance/keymap.c create mode 100644 keyboards/bigseries/keymaps/leddance/rules.mk create mode 100644 keyboards/bigseries/readme.md create mode 100755 keyboards/bigseries/rules.mk diff --git a/keyboards/bigseries/bigseries.c b/keyboards/bigseries/bigseries.c new file mode 100755 index 00000000000..0ef84478b31 --- /dev/null +++ b/keyboards/bigseries/bigseries.c @@ -0,0 +1,26 @@ +/* +Copyright 2018 Cole Markham + +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 "bigseries.h" + +void matrix_scan_kb(void) { + // Looping keyboard code goes here + // This runs every cycle (a lot) + matrix_scan_user(); +#ifdef BACKLIGHT_ENABLE + backlight_task(); +#endif +}; diff --git a/keyboards/bigseries/bigseries.h b/keyboards/bigseries/bigseries.h new file mode 100755 index 00000000000..4a8ac1116cd --- /dev/null +++ b/keyboards/bigseries/bigseries.h @@ -0,0 +1,28 @@ +/* +Copyright 2018 Cole Markham + +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 BIGSWITCH_H +#define BIGSWITCH_H + +#include "quantum.h" + +#define KEYMAP( \ + K00 \ +) { \ + { K00 } \ +} + +#endif diff --git a/keyboards/bigseries/config.h b/keyboards/bigseries/config.h new file mode 100755 index 00000000000..3c401f563ba --- /dev/null +++ b/keyboards/bigseries/config.h @@ -0,0 +1,59 @@ +/* +Copyright 2018 Cole Markham + +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 0x6071 +#define DEVICE_VER 0x0002 +#define MANUFACTURER WoodKeys.click +#define PRODUCT BigSeries Single Keyboard +#define DESCRIPTION Single key board for Novelkeys Big Series Switch + +/* key matrix size */ +#define MATRIX_ROWS 1 +#define MATRIX_COLS 1 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B0 } +#define MATRIX_COL_PINS { B4 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION ROW2COL + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 50 + +/* key combination for command */ +#define IS_COMMAND() ( \ + false \ +) + +/* prevent stuck modifiers */ +#define PREVENT_STUCK_MODIFIERS + +#ifdef RGBLIGHT_ENABLE +#define RGB_DI_PIN D3 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 5 +#endif + +#endif diff --git a/keyboards/bigseries/keymaps/default/keymap.c b/keyboards/bigseries/keymaps/default/keymap.c new file mode 100755 index 00000000000..67cfb168c24 --- /dev/null +++ b/keyboards/bigseries/keymaps/default/keymap.c @@ -0,0 +1,93 @@ +/* +Copyright 2018 Cole Markham + +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 "../../bigseries.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +KEYMAP( + KC_A), + + +}; + + +bool initialized = 0; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + return MACRO_NONE ; +} + +void matrix_init_user(void) { + if (!initialized){ + dprintf("Initializing in matrix_scan_user"); + rgblight_enable(); + rgblight_mode(7); + rgblight_sethsv(0,255,255); + rgblight_setrgb(0x00, 0x00, 0xFF); + initialized = 1; + } +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_A: + if (record->event.pressed) { + SEND_STRING("Howdy!!\n"); + rgblight_step(); + return false; + } + } + return true; +} + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + +} diff --git a/keyboards/bigseries/keymaps/leddance/config.h b/keyboards/bigseries/keymaps/leddance/config.h new file mode 100644 index 00000000000..57398fb996b --- /dev/null +++ b/keyboards/bigseries/keymaps/leddance/config.h @@ -0,0 +1,23 @@ +/* +Copyright 2018 Cole Markham + +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 + +#define TAPPING_TERM 400 + +#endif diff --git a/keyboards/bigseries/keymaps/leddance/keymap.c b/keyboards/bigseries/keymaps/leddance/keymap.c new file mode 100755 index 00000000000..4cb57f4375a --- /dev/null +++ b/keyboards/bigseries/keymaps/leddance/keymap.c @@ -0,0 +1,127 @@ +/* +Copyright 2018 Cole Markham + +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 "../../bigseries.h" +#include "print.h" + +extern rgblight_config_t rgblight_config; + +enum custom_keycodes { + BL = SAFE_RANGE +}; + +enum custom_layers { + BASE = 0, + LED +}; + +//Tap Dance Declarations +enum { + TD_TOGGLE = 0 +}; + +void dance_toggle (qk_tap_dance_state_t *state, void *user_data) { + if (state->count >= 2) { + println("Double tapped, switching layers"); + if (layer_state_is(LED)) { + layer_off(LED); + } else { + layer_on(LED); + } + } else { + print("Single tapped: "); + if (layer_state_is(LED)) { +#ifdef RGBLIGHT_ENABLE + if (!rgblight_config.enable) { + rgblight_enable(); + } + rgblight_step(); +#endif + } else { + println("Base layer, sending string"); + SEND_STRING("This thing is BIG!!\n"); + } + } +} + +//Tap Dance Definitions +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_TOGGLE] = ACTION_TAP_DANCE_FN(dance_toggle) +// Other declarations would go here, separated by commas, if you have them +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[BASE] = KEYMAP( + TD(TD_TOGGLE)), +[LED] = KEYMAP( + TD(TD_TOGGLE) + ) + + +}; + + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + return MACRO_NONE ; +} + + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + // Nothing here, see dance_toggle + return true; +} + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + +} diff --git a/keyboards/bigseries/keymaps/leddance/rules.mk b/keyboards/bigseries/keymaps/leddance/rules.mk new file mode 100644 index 00000000000..1ba2fa8fbef --- /dev/null +++ b/keyboards/bigseries/keymaps/leddance/rules.mk @@ -0,0 +1 @@ +TAP_DANCE_ENABLE = yes \ No newline at end of file diff --git a/keyboards/bigseries/readme.md b/keyboards/bigseries/readme.md new file mode 100644 index 00000000000..dfb41566898 --- /dev/null +++ b/keyboards/bigseries/readme.md @@ -0,0 +1,15 @@ +# Big Series Keyboard + +![Big Series 1-Key](https://woodkeys.click/wp-content/uploads/2017/12/woodkeys_419.jpg) + +A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/). + +Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click) +Hardware Supported: Big Series PCBs +Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz) + +Make example for this keyboard (after setting up your build environment): + + make bigseries: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. \ No newline at end of file diff --git a/keyboards/bigseries/rules.mk b/keyboards/bigseries/rules.mk new file mode 100755 index 00000000000..4cac07f7253 --- /dev/null +++ b/keyboards/bigseries/rules.mk @@ -0,0 +1,59 @@ +#SRC += rgb_backlight.c + +# MCU name +MCU = atmega32u2 + +# 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* +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# 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 = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Custom backlighting code is used, so this should not be enabled +AUDIO_ENABLE = no # This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below +RGBLIGHT_ENABLE = yes # This can be enabled if a ws2812 strip is connected to the expansion port. + From 8b0b17a369be6d3dff4cb9bad4253960252a5e95 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Wed, 18 Apr 2018 22:47:04 -0700 Subject: [PATCH 008/152] Add Faux Clicking as subset of Audio feature (#2748) * Add Faux Clicky to main Audio feature * Make clicky settings user configurable * Add additional documentation * Don't play when music mode is enabled (hopefully) --- docs/feature_audio.md | 30 ++++++++++ keyboards/viterbi/keymaps/drashna/keymap.c | 2 +- quantum/process_keycode/process_audio.c | 69 +++++++++++++++++++++- quantum/quantum_keycodes.h | 11 ++++ users/drashna/config.h | 1 + users/drashna/drashna.c | 18 ------ users/drashna/drashna.h | 1 - 7 files changed, 111 insertions(+), 21 deletions(-) diff --git a/docs/feature_audio.md b/docs/feature_audio.md index eaaa2fe512f..1b8ca86f498 100644 --- a/docs/feature_audio.md +++ b/docs/feature_audio.md @@ -97,6 +97,36 @@ You can completely disable Music Mode as well. This is useful, if you're pressed #define NO_MUSIC_MODE +## Faux Click + +This adds a click sound each time you hit a button, to simulate click sounds from the keyboard. And the sounds are slightly different for each keypress, so it doesn't sound like a single long note, if you type rapidly. + +* `CK_TOGG` - Toggles the status (will play sound if enabled) +* `CK_RST` - Resets the frequency to the default state +* `CK_UP` - Increases the frequency of the clicks +* `CK_DOWN` - Decreases the frequency of the clicks + +The feature is disabled by default, to save space. To enable it, add this to your `config.h`: + + #define AUDIO_CLICKY + +Additionally, even when enabled, the feature is not enabled by default, so you would need to turn it on first. And since we don't use EEPROM to store the setting (yet), you can default this to on by adding this to your `config.h`: + + #define AUDIO_CLICKY_ON + +You can configure the default, min and max frequencies, the stepping and built in randomness by defining these values: + +| Option | Default Value | Description | +|--------|---------------|-------------| +| `AUDIO_CLICKY_FREQ_DEFAULT` | 440.0f | Sets the default/starting audio frequency for the clicky sounds. | +| `AUDIO_CLICKY_FREQ_MIN` | 65.0f | Sets the lowest frequency (under 60f are a bit buggy). | +| `AUDIO_CLICKY_FREQ_MAX` | 1500.0f | Sets the the highest frequency. Too high may result in coworkers attacking you. | +| `AUDIO_CLICKY_FREQ_FACTOR` | 1.18921f| Sets the stepping of UP/DOWN key codes. | +| `AUDIO_CLICKY_FREQ_RANDOMNESS` | 0.05f | Sets a factor of randomness for the clicks, Setting this to `0f` will make each click identical. | + + + + ## MIDI Functionality This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile. diff --git a/keyboards/viterbi/keymaps/drashna/keymap.c b/keyboards/viterbi/keymaps/drashna/keymap.c index b5a7c18f88b..78c60d1a68c 100644 --- a/keyboards/viterbi/keymaps/drashna/keymap.c +++ b/keyboards/viterbi/keymaps/drashna/keymap.c @@ -67,7 +67,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [_MEDIA] = LAYOUT_ortho_5x7( - KC_MAKE, KC_RESET,MU_TOG, AUD_ON, AUD_OFF, KC_FXCL, RGB_SAD, + KC_MAKE, KC_RESET,MU_TOG, AUD_ON, AUD_OFF, CK_TOGG, RGB_SAD, MEDIA, EPRM, KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_M_SW,RGB_M_SN,RGB_M_K, RGB_HUD, KC_MPLY, KC_MPRV, KC_MNXT, RGB_M_X, RGB_M_G, RGB_M_P, RGB_HUI, diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c index 32057ae8dc3..2d92e4064d2 100644 --- a/quantum/process_keycode/process_audio.c +++ b/quantum/process_keycode/process_audio.c @@ -10,6 +10,46 @@ float voice_change_song[][2] = VOICE_CHANGE_SONG; #define PITCH_STANDARD_A 440.0f #endif +#ifdef AUDIO_CLICKY +#ifdef AUDIO_CLICKY_ON +bool clicky_enable = true; +#else +bool clicky_enable = false; +#endif +#ifndef AUDIO_CLICKY_FREQ_DEFAULT +#define AUDIO_CLICKY_FREQ_DEFAULT 440.0f +#endif +#ifndef AUDIO_CLICKY_FREQ_MIN +#define AUDIO_CLICKY_FREQ_MIN 65.0f +#endif +#ifndef AUDIO_CLICKY_FREQ_MAX +#define AUDIO_CLICKY_FREQ_MAX 1500.0f +#endif +#ifndef AUDIO_CLICKY_FREQ_FACTOR +#define AUDIO_CLICKY_FREQ_FACTOR 1.18921f +#endif +#ifndef AUDIO_CLICKY_FREQ_RANDOMNESS +#define AUDIO_CLICKY_FREQ_RANDOMNESS 0.05f +#endif + +float clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; +float clicky_song[][2] = {{AUDIO_CLICKY_FREQ_DEFAULT, 3}, {AUDIO_CLICKY_FREQ_DEFAULT, 1}}; // 3 and 1 --> durations + +#ifndef NO_MUSIC_MODE +extern bool music_activated; +extern bool midi_activated; +#endif + +void clicky_play(void) { +#ifndef NO_MUSIC_MODE + if (music_activated || midi_activated) return; +#endif + clicky_song[0][0] = 2.0f * clicky_freq * (1.0f + AUDIO_CLICKY_FREQ_RANDOMNESS * ( ((float)rand()) / ((float)(RAND_MAX)) ) ); + clicky_song[1][0] = clicky_freq * (1.0f + AUDIO_CLICKY_FREQ_RANDOMNESS * ( ((float)rand()) / ((float)(RAND_MAX)) ) ); + PLAY_SONG(clicky_song); +} +#endif + static float compute_freq_for_midi_note(uint8_t note) { // https://en.wikipedia.org/wiki/MIDI_tuning_standard @@ -49,6 +89,33 @@ bool process_audio(uint16_t keycode, keyrecord_t *record) { return false; } +#ifdef AUDIO_CLICKY + if (keycode == CLICKY_TOGGLE && record->event.pressed) { clicky_enable = !clicky_enable; } + + if (keycode == CLICKY_RESET && record->event.pressed) { clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; } + + if (keycode == CLICKY_UP && record->event.pressed) { + float new_freq = clicky_freq * AUDIO_CLICKY_FREQ_FACTOR; + if (new_freq < AUDIO_CLICKY_FREQ_MAX) { + clicky_freq = new_freq; + } + } + if (keycode == CLICKY_TOGGLE && record->event.pressed) { + float new_freq = clicky_freq / AUDIO_CLICKY_FREQ_FACTOR; + if (new_freq > AUDIO_CLICKY_FREQ_MIN) { + clicky_freq = new_freq; + } + } + + + if ( (clicky_enable && keycode != CLICKY_TOGGLE) || (!clicky_enable && keycode == CLICKY_TOGGLE) ) { + if (record->event.pressed) { + stop_all_notes(); + clicky_play();; + } + } +#endif // AUDIO_CLICKY + return true; } @@ -65,4 +132,4 @@ void process_audio_all_notes_off(void) { } __attribute__ ((weak)) -void audio_on_user() {} \ No newline at end of file +void audio_on_user() {} diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index d545440c99d..d6030284a91 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -140,6 +140,12 @@ enum quantum_keycodes { AU_OFF, AU_TOG, + // Faux clicky as part of main audio feature + CLICKY_TOGGLE, + CLICKY_UP, + CLICKY_DOWN, + CLICKY_RESET, + #ifdef FAUXCLICKY_ENABLE // Faux clicky FC_ON, @@ -561,6 +567,11 @@ enum quantum_keycodes { #define KC_GESC GRAVE_ESC +#define CK_TOGG CLICKY_TOGGLE +#define CK_RST CLICKY_RESET +#define CK_UP CLICKY_UP +#define CK_DOWN CLICKY_DOWN + #define RGB_MOD RGB_MODE_FORWARD #define RGB_SMOD RGB_MODE_FORWARD #define RGB_RMOD RGB_MODE_REVERSE diff --git a/users/drashna/config.h b/users/drashna/config.h index 68394ee4dbb..f9b0d4d17a2 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h @@ -3,6 +3,7 @@ #ifdef AUDIO_ENABLE +#define AUDIO_CLICKY #define STARTUP_SONG SONG(E1M1_DOOM) #define GOODBYE_SONG SONG(SONIC_RING) #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index 170c320d364..73bd249e4ce 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -224,19 +224,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed); #endif //CONSOLE_ENABLE - // Run custom faux click code, but only if faux clicky is enabled -#ifdef AUDIO_ENABLE - if ( (faux_click_enabled && keycode != KC_FXCL) || (!faux_click_enabled && keycode == KC_FXCL) ) { - if (record->event.pressed) { - stop_all_notes(); - PLAY_SONG(fauxclicky_pressed); - } else { - stop_all_notes(); - PLAY_SONG(fauxclicky_released); - } - } -#endif //AUDIO_ENABLE - switch (keycode) { case KC_QWERTY: @@ -398,11 +385,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #endif // TAP_DANCE_ENABLE - case KC_FXCL: - if (!record->event.pressed) { // Toggles the custom faux click code - faux_click_enabled = !faux_click_enabled; - } - return false; break; case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal #ifdef RGBLIGHT_ENABLE if (record->event.pressed) { diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index 1086fa02ed0..b7cbaa44afb 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h @@ -83,7 +83,6 @@ enum userspace_custom_keycodes { KC_SECRET_3, KC_SECRET_4, KC_SECRET_5, - KC_FXCL, NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes }; From 7dda7158fb6fd337debfe735f27dd7a1a65450d2 Mon Sep 17 00:00:00 2001 From: blindassassin111 <38090555+blindassassin111@users.noreply.github.com> Date: Thu, 19 Apr 2018 00:52:17 -0500 Subject: [PATCH 009/152] added omnikey_blackheart keyboard support (#2688) * added omnikey_blackheart keyboard support * fixing omnikey_blackheart layout * fixing omnikey_blackheart NKRO --- keyboards/omnikey_blackheart/config.h | 60 +++++++++++++++++++ .../keymaps/default/keymap.c | 48 +++++++++++++++ .../omnikey_blackheart/omnikey_blackheart.c | 1 + .../omnikey_blackheart/omnikey_blackheart.h | 22 +++++++ keyboards/omnikey_blackheart/readme.md | 14 +++++ keyboards/omnikey_blackheart/rules.mk | 56 +++++++++++++++++ 6 files changed, 201 insertions(+) create mode 100644 keyboards/omnikey_blackheart/config.h create mode 100644 keyboards/omnikey_blackheart/keymaps/default/keymap.c create mode 100644 keyboards/omnikey_blackheart/omnikey_blackheart.c create mode 100644 keyboards/omnikey_blackheart/omnikey_blackheart.h create mode 100644 keyboards/omnikey_blackheart/readme.md create mode 100644 keyboards/omnikey_blackheart/rules.mk diff --git a/keyboards/omnikey_blackheart/config.h b/keyboards/omnikey_blackheart/config.h new file mode 100644 index 00000000000..14b4a5f172a --- /dev/null +++ b/keyboards/omnikey_blackheart/config.h @@ -0,0 +1,60 @@ +#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 0x0001 +#define MANUFACTURER blindassassin111 +#define PRODUCT Omnikey Blackheart PCB +#define DESCRIPTION Teensy++ Board for Omnikey keyboards + +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 23 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { B7, D0, D1, D2, D3, D4 } +#define MATRIX_COL_PINS { C2, C3, C4, C7, C1, C0, E1, E0, D7, F7, F6, F5, F4, F3, F2, F1, F0, E6, E7, B0, B1, B2, B3 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* number of backlight levels */ +#ifdef BACKLIGHT_PIN +#define BACKLIGHT_LEVELS 0 +#endif + +/* 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)) \ +) + +/* force n-key rollover*/ +#define FORCE_NKRO + +/* prevent stuck modifiers */ +#define PREVENT_STUCK_MODIFIERS + + +#ifdef RGB_DI_PIN +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 0 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#endif + +#endif \ No newline at end of file diff --git a/keyboards/omnikey_blackheart/keymaps/default/keymap.c b/keyboards/omnikey_blackheart/keymaps/default/keymap.c new file mode 100644 index 00000000000..9dff862e87e --- /dev/null +++ b/keyboards/omnikey_blackheart/keymaps/default/keymap.c @@ -0,0 +1,48 @@ +#include "omnikey_blackheart.h" + +// Fillers to make layering more clear +#define ______ KC_TRNS +#define XXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = KEYMAP(\ + KC_F11 , KC_F12 , 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 , + KC_F1 , KC_F2 , 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_INS , KC_HOME , KC_PGUP , KC_NLCK , KC_PSLS, KC_PAST, KC_PMNS, + KC_F3 , KC_F4 , 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_END , KC_PGDN , KC_P7 , KC_P8 , KC_P9 , KC_PPLS, + KC_F5 , KC_F6 , 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 , XXXXXX , XXXXXX , XXXXXX , KC_P4 , KC_P5 , KC_P6 , KC_EQL, + KC_F7 , KC_F8 , 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(1) , XXXXXX , KC_UP , XXXXXX , KC_P1 , KC_P2 , KC_P3 , KC_PENT, + KC_F9 , KC_F10 , KC_LCTL , KC_LGUI , KC_LALT , XXXXXX , KC_SPC , KC_RALT , KC_RGUI , KC_RCTL , XXXXXX , KC_LEFT , KC_DOWN , KC_RIGHT, KC_P0 , KC_PDOT + ), + + [1] = KEYMAP(\ + KC_F11 , KC_F12 , 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 , + KC_F1 , KC_F2 , RESET , 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_INS , KC_HOME , KC_PGUP , KC_NLCK , KC_PSLS, KC_PAST, KC_PMNS, + KC_F3 , KC_F4 , 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_END , KC_PGDN , KC_P7 , KC_P8 , KC_P9 , KC_PPLS, + KC_F5 , KC_F6 , 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 , XXXXXX , XXXXXX , XXXXXX , KC_P4 , KC_P5 , KC_P6 , KC_EQL, + KC_F7 , KC_F8 , KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT , ______ , XXXXXX , KC_UP , XXXXXX , KC_P1 , KC_P2 , KC_P3 , KC_PENT, + KC_F9 , KC_F10 , KC_LCTL , KC_LGUI , KC_LALT , XXXXXX , KC_SPC , KC_RALT , KC_RGUI , KC_RCTL , XXXXXX , KC_LEFT , KC_DOWN , KC_RIGHT, KC_P0 , KC_PDOT + ), +}; + +void led_set_kb(uint8_t usb_led) { + DDRB |= (1 << 4) | (1 << 5) | (1 << 6); + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + PORTB |= (1 << 4); + } else { + PORTB &= ~(1 << 4); + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + PORTB |= (1 << 5); + } else { + PORTB &= ~(1 << 5); + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + PORTB |= (1 << 6); + } else { + PORTB &= ~(1 << 6); + } +} \ No newline at end of file diff --git a/keyboards/omnikey_blackheart/omnikey_blackheart.c b/keyboards/omnikey_blackheart/omnikey_blackheart.c new file mode 100644 index 00000000000..e54047fa68a --- /dev/null +++ b/keyboards/omnikey_blackheart/omnikey_blackheart.c @@ -0,0 +1 @@ +#include "omnikey_blackheart.h" diff --git a/keyboards/omnikey_blackheart/omnikey_blackheart.h b/keyboards/omnikey_blackheart/omnikey_blackheart.h new file mode 100644 index 00000000000..e0baa7f63a8 --- /dev/null +++ b/keyboards/omnikey_blackheart/omnikey_blackheart.h @@ -0,0 +1,22 @@ +#ifndef omnikey_blackheart +#define omnikey_blackheart + +#include "quantum.h" + +#define KEYMAP( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119, K120, K121, K122, \ + K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219, K220, K221, K222, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, K318, K319, K320, K321, \ + K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415, K416, K417, K418, K419, K420, K421, \ + K500, K501, K502, K503, K504, K505, K507, K512, K513, K514, K515, K516, K517, K518, K519, K520 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119, K120, K121, K122 }, \ + { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219, K220, K221, K222 }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, K318, K319, K320, K321, KC_NO }, \ + { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, K415, K416, K417, K418, K419, K420, K421, KC_NO }, \ + { K500, K501, K502, K503, K504, K505, KC_NO, K507, KC_NO, KC_NO, KC_NO, KC_NO, K512, K513, K514, K515, K516, K517, K518, K519, K520, KC_NO, KC_NO } \ +} + +#endif \ No newline at end of file diff --git a/keyboards/omnikey_blackheart/readme.md b/keyboards/omnikey_blackheart/readme.md new file mode 100644 index 00000000000..b318f3e3710 --- /dev/null +++ b/keyboards/omnikey_blackheart/readme.md @@ -0,0 +1,14 @@ +Omnikey Blackheart PCB +=== + +A replacement PCB for Omnikey keyboards. Supports 101, 102, Plus, Ultra T, Ultra, Prime and Stellar, as well as customs. + +Keyboard Maintainer: QMK Community and blindassassin111 +Hardware Supported: Omnikey blackheart PCB +Hardware Availability: https://deskthority.net/group-buys-f50/omnikey-replacement-pcb-t18276.html + +Make example for this keyboard (after setting up your build environment): + + make omnikey_blackheart: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/omnikey_blackheart/rules.mk b/keyboards/omnikey_blackheart/rules.mk new file mode 100644 index 00000000000..3d4422e9867 --- /dev/null +++ b/keyboards/omnikey_blackheart/rules.mk @@ -0,0 +1,56 @@ +# MCU name +MCU = at90usb1286 + +# 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* +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE ?= yes # 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 +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +AUDIO_ENABLE ?= no +RGBLIGHT_ENABLE ?= no \ No newline at end of file From 5226e4c79b3da327735f59344df7e402f254532d Mon Sep 17 00:00:00 2001 From: Joe Wasson Date: Fri, 13 Apr 2018 14:34:47 -0700 Subject: [PATCH 010/152] Correct documentation for `PREVENT_STUCK_MODIFIERS` --- docs/config_options.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/config_options.md b/docs/config_options.md index d45592f82fb..acc402665b7 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -116,7 +116,7 @@ If you define these options you will enable the associated feature, which may in * `#define FORCE_NKRO` * NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots. * `#define PREVENT_STUCK_MODIFIERS` - * when switching layers, this will release all mods + * stores the layer a key press came from so the same layer is used when the key is released, regardless of which layers are enabled ## Behaviors That Can Be Configured From 8ec22695199e9f3ae52e83d945763ba892f5bcd9 Mon Sep 17 00:00:00 2001 From: Harry Mills Date: Thu, 19 Apr 2018 10:18:58 -0400 Subject: [PATCH 011/152] Add magic backspace to my layout (#2758) * Add Haegin's keymap * Potential improvements to the keyboard * Add haegin minidox layout * Add Haegin's keyboard to ergodox layouts * Update Haegin's minidox keymap * Add home, end, and page up and down * Magic Backspace Backspace still acts as control when you hold it down, but if you tap it twice and hold it's a held backspace. Tapping it more than twice it continues to act as backspace, but it deletes more characters with each tap with the quantity deleted based on the fibonacci sequence. * Switch to deleting words after 4 taps When hitting backspace, after 4 taps this switches to deleting by word because if you're hitting backspace that frantically you must need to delete a lot of stuff. Holding backspace after 4 taps will delete words in the same way that holding alt+backspace deletes words on a normal keyboard. --- layouts/community/ergodox/haegin/keymap.c | 90 +++++++++++++++++++++-- layouts/community/ergodox/haegin/rules.mk | 1 + 2 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 layouts/community/ergodox/haegin/rules.mk diff --git a/layouts/community/ergodox/haegin/keymap.c b/layouts/community/ergodox/haegin/keymap.c index 56aee727d8d..aa017c8ea53 100644 --- a/layouts/community/ergodox/haegin/keymap.c +++ b/layouts/community/ergodox/haegin/keymap.c @@ -11,6 +11,10 @@ #define _______ KC_TRNS +enum { + TD_BSPC = 0 +}; + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer @@ -46,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LT(SYMBOLS,KC_GRV), KC_QUOT, KC_SLSH, KC_LALT, SFT_T(KC_RGHT), KC_HOME, KC_END, KC_PGUP, - GUI_T(KC_SPC), CTL_T(KC_BSPC), LGUI(KC_SPC), + GUI_T(KC_SPC), TD(TD_BSPC), LGUI(KC_SPC), // Right hand KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, LGUI(KC_SPC), @@ -136,17 +140,91 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, // right hand - _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, KC_UP, _______, _______, _______, - KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_MPLY, - _______, KC_VOLD, KC_MPRV, KC_MPLY, KC_MFFD, _______, _______, - KC_MUTE, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, + _______, _______, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, + KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_MPLY, + KC_MUTE, KC_VOLD, KC_MPRV, KC_MPLY, KC_MFFD, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WBAK ), }; +enum { + BSPC_LETTER = 0, + BSPC_WORD = 1, + HOLD_CTRL = 2 +}; + +typedef struct { + int a; + int b; + int state; +} fib_tap; + +static fib_tap fib_bspc = { + .a = 0, + .b = 1, + .state = BSPC_LETTER +}; + +void cur_backspace (qk_tap_dance_state_t *state) { + int next_fib = fib_bspc.a + fib_bspc.b; + fib_bspc.a = fib_bspc.b; + fib_bspc.b = next_fib; + for (int i=0; i < next_fib; i++) { + unregister_code(KC_BSPC); + register_code(KC_BSPC); + } +} + +void dance_backspace (qk_tap_dance_state_t *state, void *user_data) { + // If we're at the fifth tap, switch to deleting by words, and reset the fib + // counter + if (state->count == 4) { + register_code(KC_LALT); + fib_bspc.state = BSPC_WORD; + fib_bspc.a = 0; + fib_bspc.b = 1; + } + // If we're on the first press, wait to find out if it's being held + // If we're on the second tap, process the first tap, because we're past + // holding for ctrl now, then act normally + if (state->count == 2) { + register_code(KC_BSPC); + } + if (state->count > 1) { + cur_backspace(state); + } +}; + +void dance_backspace_ended (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { + if (state->pressed) { + fib_bspc.state = HOLD_CTRL; + register_code(KC_LCTRL); + } else { + register_code(KC_BSPC); + } + } +}; + +void dance_backspace_reset (qk_tap_dance_state_t *state, void *user_data) { + switch (fib_bspc.state) { + case HOLD_CTRL: unregister_code(KC_LCTRL); break; + case BSPC_WORD: unregister_code(KC_BSPC); unregister_code(KC_LALT); break; + case BSPC_LETTER: unregister_code(KC_BSPC); break; + } + fib_bspc.a = 0; + fib_bspc.b = 1; + fib_bspc.state = BSPC_LETTER; +}; + +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_BSPC] = ACTION_TAP_DANCE_FN_ADVANCED (dance_backspace, dance_backspace_ended, dance_backspace_reset) +}; + const uint16_t PROGMEM fn_actions[] = { [1] = ACTION_LAYER_TAP_TOGGLE(SYMBOLS) // FN1 - Momentary Layer 1 (Symbols) }; diff --git a/layouts/community/ergodox/haegin/rules.mk b/layouts/community/ergodox/haegin/rules.mk new file mode 100644 index 00000000000..31e0fcf2933 --- /dev/null +++ b/layouts/community/ergodox/haegin/rules.mk @@ -0,0 +1 @@ +TAP_DANCE_ENABLE=yes From 75360ebdae60023d8ea515ccf187fcd46eb4ebc1 Mon Sep 17 00:00:00 2001 From: Christian Richter Date: Thu, 19 Apr 2018 16:20:03 +0200 Subject: [PATCH 012/152] Add gh60 chaser Layout (#2757) --- keyboards/gh60/keymaps/chaser/README.md | 96 +++++++ keyboards/gh60/keymaps/chaser/keymap.c | 331 ++++++++++++++++++++++++ 2 files changed, 427 insertions(+) create mode 100644 keyboards/gh60/keymaps/chaser/README.md create mode 100644 keyboards/gh60/keymaps/chaser/keymap.c diff --git a/keyboards/gh60/keymaps/chaser/README.md b/keyboards/gh60/keymaps/chaser/README.md new file mode 100644 index 00000000000..e6ec9e82bed --- /dev/null +++ b/keyboards/gh60/keymaps/chaser/README.md @@ -0,0 +1,96 @@ +# [dragonchasers](https://github.com/dragonchaser) GH60 layout + +Layout derived from the default GH60 keymap. + +![Photo of the keyboard](https://pbs.twimg.com/media/DQzlD0yX0AA8spX.jpg) + +## Layers + +### Base Layer +``` +,-----------------------------------------------------------. +|Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | +|-----------------------------------------------------------| +|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | +|-----------------------------------------------------------| +|FN | A| S| D| F| G| H| J| K| L| ;| '|Return | +|-----------------------------------------------------------| +|Shift | Z| X| C| V| B| N| M| ,| .| /| Up |FN | +|-----------------------------------------------------------| +|Ctrl|Gui |Alt | Space |Alt |Left |Down|Right| +`-----------------------------------------------------------' + +Note: right FN triggers function layer, + left FN(CAPS) is a one-shot button for the macro layer +``` + +### Function Layer +``` +,-----------------------------------------------------------. +|GRV|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| DEL | +|-----------------------------------------------------------| +| MB3|MB2|MUP|MB1|MWU| | | |INS| |RST| | |Print| +|-----------------------------------------------------------| +| | ML|MDN|MR |MWD| | | | | | | | +|-----------------------------------------------------------| +|CAPS | | | | | | | | | | |PGUP| | +|-----------------------------------------------------------| +| | | | |Ctrl|HOME|PGD |END | +`-----------------------------------------------------------' +``` + +### Macro Layer +``` +,-----------------------------------------------------------. +|DEF| |DUE| | | | | | | | | |GAM| ARR| +|-----------------------------------------------------------| +| |MAG|CLO|DUT|RBS|TIG| | | |COU|PSH| | | | +|-----------------------------------------------------------| +| |ADD|STS|DFF|FTC|PLL| | |LOG| | | | +|-----------------------------------------------------------| +| | | |COM| |BRN| | | | |MUT|VOL+|PLPA| +|-----------------------------------------------------------| +| | | | |APP |PREV|VOL-|NEXT| +`-----------------------------------------------------------' + +Abbreviations: +-------------- +DEF - return to default layer +DUE - enable git duet mode +GAM - backlight WASD +ARR - backlight arrows +- +MAG - git submodule sync --recursive \ + && git submodule update --init --recursive \ + && git submodule foreach --recursive "git co . \ + && git reset --hard && git clean -dffx" +CLO - git clone +DUT - git duet (when in duet mode) +RBS - git rebase +TIG - tig +COU - git checkout +PSH - git push +- +ADD - git add +STS - git status +DFF - git diff +FTC - git fetch +PLL - git pull +LOG - git log +- +COM - git commit (or git duet commit if in duet mode) +BRN - git branch +MUT - audio mute +VOL+ - increase volume +PLPA - play/pause +- +APP - application (windows menu key) +PREV - previous song +VOL- - decrease volume +NEXT - next song + +Note: git commands are SEND_STRING macros sent to the + currently focused window Make sure it is your terminal :) + ``` + +**NOTE:** an outdated version of this keymap is also present for the Satan keyboard, which is no longer maintained since I could not get my hands on a properly working PCB. diff --git a/keyboards/gh60/keymaps/chaser/keymap.c b/keyboards/gh60/keymaps/chaser/keymap.c new file mode 100644 index 00000000000..cc32859161d --- /dev/null +++ b/keyboards/gh60/keymaps/chaser/keymap.c @@ -0,0 +1,331 @@ +#include QMK_KEYBOARD_H +#include "action_layer.h" +#include "eeconfig.h" +#include + + +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 _QW 0 +#define _FL 1 +#define _MC 2 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +bool git_duet = false; +bool backlight_arrows = false; +bool backlight_gaming = false; +enum custom_keycodes { + /* GIT related keycodes */ + G_ADD = SAFE_RANGE, G_BRN, G_COM, G_COU, G_CLO, + G_DFF, G_DUE, G_DUT, G_FTC, G_LOG, G_MAG, G_MRG, + G_MRT, G_PSH, G_PLL, G_RBS, G_STH, G_STS, G_TIG, + + /* Multi-media related keycodes */ + A_MUTE, A_NEXT, A_PLPA, A_PREV, A_VOUP, A_VDWN, + + /* System related shortcuts */ + F_BTN, M_WAPP, K_ARR, K_WASD, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* + * ,-----------------------------------------------------------. + * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | + * |-----------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | + * |-----------------------------------------------------------| + * |FN | A| S| D| F| G| H| J| K| L| ;| '|Return | + * |-----------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /| Up |FN | + * |-----------------------------------------------------------| + * |Ctrl|Gui |Alt | Space |Alt |Left |Down|Right| + * `-----------------------------------------------------------' + * + * Note: right FN triggers function layer, + * left FN is a one-shot button for the macro layer + */ +[_QW] = { /* Layer 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_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}, + {OSL(_MC), 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 }, + {KC_LSFT , XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, F_BTN, KC_UP}, + {KC_LCTL , KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT} +},\ + +/* + * ,-----------------------------------------------------------. + * |GRV|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| DEL | + * |-----------------------------------------------------------| + * | MB3|MB2|MUP|MB1|MWU| | | |INS| |RST| | |Print| + * |-----------------------------------------------------------| + * | | ML|MDN|MR |MWD| | | | | | | | + * |-----------------------------------------------------------| + * |CAPS | | | | | | | | | | |PGUP| | + * |-----------------------------------------------------------| + * | | | | |Ctrl|HOME|PGD |END | + * `-----------------------------------------------------------' + */ +[_FL] = { /* Layer 1: Functions */ + {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_MS_BTN3 , KC_MS_BTN2 ,KC_MS_UP ,KC_MS_BTN1 , KC_MS_WH_UP , _______, _______, _______, KC_INS , _______, RESET , _______, _______ , KC_PSCREEN}, + {KC_CAPS , KC_MS_LEFT ,KC_MS_DOWN ,KC_MS_RIGHT, KC_MS_WH_DOWN, _______, _______, _______, _______, _______, _______ , XXXXXXX, KC_TILDE}, + {_______ , XXXXXXX , _______ , _______ , _______ , _______, _______, _______, _______, _______, _______ , _______, _______ , KC_PGUP}, + {_______ , _______ , _______ , XXXXXXX , XXXXXXX , _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_RCTRL, KC_HOME, KC_PGDOWN, KC_END} +}, + +/* + * ,-----------------------------------------------------------. + * |DEF| |DUE| | | | | | | | | |GAM| ARR| + * |-----------------------------------------------------------| + * | |MAG|CLO|DUT|RBS|TIG|MRT| | |COU|PSH| | | | + * |-----------------------------------------------------------| + * | |ADD|STS|DFF|FTC|PLL|MRG| |STH|LOG| | | F_OFF| + * |-----------------------------------------------------------| + * | | | |COM| |BRN| | | | |MUT|VOL+|PLPA| + * |-----------------------------------------------------------| + * | | | | |APP |PREV|VOL-|NEXT| + * `-----------------------------------------------------------' + * + * Abbreviations: + * -------------- + * DEF - return to default layer + * DUE - enable git duet mode + * CLO - git clone + * DUT - git duet (when in duet mode) + * RBS - git rebase + * MAG - git submodule sync --recursive && git submodule update --init --recursive && git submodule foreach --recursive "git co . && git reset --hard && git clean -dffx" + * TIG - tig + * MRG - git merge + * MRT - git mergetool + * COU - git checkout + * PSH - git push + * ADD - git add + * STS - git status + * DFF - git diff + * FTC - git fetch + * PLL - git pull + * STH - git stash + * LOG - git log + * COM - git commit (or git duet commit if in duet mode) + * BRN - git branch + * APP - application (windows menu key) + * MUT - audio mute + * VOL+ - increase volume + * VOL- - decrease volume + * PLPA - play/pause + * PREV - previous song + * NEXT - next song + * ARR - backlight arrow keys + * GAM - backlight WASD + * + * Note: git commands are SEND_STRING macros sent to the + * currently focused window Make sure it is your terminal :) + */ +[_MC] = { /* Layer 2: Macros (Git & Multimedia) */ + {TO(_QW), XXXXXXX,G_DUE , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX , XXXXXXX, K_WASD , K_ARR }, + {XXXXXXX, G_MAG ,G_CLO , G_DUT , G_RBS , G_TIG , G_MRT , XXXXXXX, XXXXXXX, G_COU , G_PSH , XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, G_ADD ,G_STS , G_DFF , G_FTC , G_PLL , G_MRG , XXXXXXX, G_STH , G_LOG , XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX, G_COM , XXXXXXX, G_BRN , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX , A_MUTE, A_PLPA, A_VOUP}, + {XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_WAPP , A_PREV, A_VDWN, A_NEXT} +}, + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch(keycode) { + /* + * Begin git layer + */ + case G_ADD: + SEND_STRING("git add "); + layer_off(_MC); + return false;break; + case G_BRN: + SEND_STRING("git branch\n"); + layer_off(_MC); + return false;break; + case G_CLO: + SEND_STRING("git clone "); + layer_off(_MC); + return false;break; + case G_COM: + if(git_duet) { + SEND_STRING("git duet-commit "); + } else { + SEND_STRING("git commit "); + } + layer_off(_MC); + return false;break; + case G_COU: + SEND_STRING("git checkout "); + layer_off(_MC); + return false;break; + case G_DFF: + SEND_STRING("git diff\n"); + layer_off(_MC); + return false;break; + case G_DUE: + git_duet = !git_duet; + if(git_duet) { + gh60_esc_led_on(); + } else { + gh60_esc_led_off(); + } + layer_off(_MC); + return false;break; + case G_DUT: + if(git_duet) { + SEND_STRING("git duet "); + } + layer_off(_MC); + return false; break; + case G_FTC: + SEND_STRING("git fetch "); + layer_off(_MC); + return false;break; + case G_LOG: + SEND_STRING("git log --graph\n"); + layer_off(_MC); + return false;break; + case G_MAG: + // This is some git-magic to resync recursive submodule structures inside git projects (thx to https://github.com/jimmykarily) + SEND_STRING("git submodule sync --recursive && git submodule update --init --recursive && git submodule foreach --recursive \" git co . && git reset --hard && git clean -dffx \" \n"); + layer_off(_MC); + return false; break; + case G_MRG: + SEND_STRING("git merge "); + layer_off(_MC); + return false;break; + case G_MRT: + SEND_STRING("git mergetool "); + layer_off(_MC); + return false;break; + case G_PLL: + SEND_STRING("git pull "); + layer_off(_MC); + return false;break; + case G_PSH: + SEND_STRING("git push "); + layer_off(_MC); + return false;break; + case G_RBS: + SEND_STRING("git rebase "); + layer_off(_MC); + return false;break; + case G_STH: + SEND_STRING("git stash "); + layer_off(_MC); + return false;break; + case G_STS: + SEND_STRING("git status\n"); + layer_off(_MC); + return false;break; + case G_TIG: + SEND_STRING("tig\n"); + layer_off(_MC); + return false;break; + /* + * End git layer + */ + + /* + * Begin multimedia keys + */ + case A_MUTE: + register_code(KC_AUDIO_MUTE); + unregister_code(KC_AUDIO_MUTE); + layer_off(_MC); + return false;break; + case A_PLPA: + register_code(KC_MEDIA_PLAY_PAUSE); + unregister_code(KC_MEDIA_PLAY_PAUSE); + layer_off(_MC); + return false;break; + case A_VOUP: + register_code(KC_AUDIO_VOL_UP); + return false;break; + case A_VDWN: + register_code(KC_AUDIO_VOL_DOWN); + return false;break; + case A_PREV: + register_code(KC_MEDIA_PREV_TRACK); + unregister_code(KC_MEDIA_PREV_TRACK); + layer_off(_MC); + return false;break; + case A_NEXT: + register_code(KC_MEDIA_NEXT_TRACK); + unregister_code(KC_MEDIA_NEXT_TRACK); + layer_off(_MC); + return false;break; + /* + * End multimedia keys + */ + + // Tap dance to get the app button mapped + case M_WAPP: + register_code(KC_APP); + unregister_code(KC_APP); + layer_off(_MC); + return false;break; + + /* + * Begin multimedia keys + */ + case K_ARR: + backlight_arrows = !backlight_arrows; + if(backlight_arrows) { + gh60_poker_leds_on(); + } else { + gh60_poker_leds_off(); + } + layer_off(_MC); + return false;break; + case K_WASD: + backlight_gaming = !backlight_gaming; + if(backlight_gaming) { + gh60_wasd_leds_on(); + } else { + gh60_wasd_leds_off(); + } + layer_off(_MC); + return false; break; + case F_BTN: + gh60_fn_led_on(); + layer_on(_FL); + return false;break; + } + /* + * End multimedia keys + */ + + } else { + switch(keycode) { + /* + * Oneshots that will switch back to the default layer on KEY_UP + */ + case A_VOUP: + unregister_code(KC_AUDIO_VOL_UP); + layer_off(_MC); + return false;break; + case A_VDWN: + unregister_code(KC_AUDIO_VOL_DOWN); + layer_off(_MC); + return false;break; + case F_BTN: + layer_off(_FL); + gh60_fn_led_off(); + return false;break; + } + } + return true; +}; From eaa0b24335db0df875d967f63dfa97a7a9b325d8 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Thu, 19 Apr 2018 08:31:50 -0700 Subject: [PATCH 013/152] ScrabblePad Support (#2760) * Initial commit for donutcat's 15x15 monstrosity * modify readmes to be more descriptive * Add info.json to support QMK Configurator * Update copyright and change REPLACE_WITH_YOUR_NAME to MechMerlin * update naming convention for ScrabblePad * remove .vscode directory as per Jack's comments --- keyboards/scrabblepad/config.h | 190 ++++++++++++++++++ keyboards/scrabblepad/info.json | 12 ++ .../scrabblepad/keymaps/default/config.h | 24 +++ .../scrabblepad/keymaps/default/keymap.c | 72 +++++++ .../scrabblepad/keymaps/default/readme.md | 6 + keyboards/scrabblepad/readme.md | 17 ++ keyboards/scrabblepad/rules.mk | 67 ++++++ keyboards/scrabblepad/scrabblepad.c | 43 ++++ keyboards/scrabblepad/scrabblepad.h | 57 ++++++ 9 files changed, 488 insertions(+) create mode 100644 keyboards/scrabblepad/config.h create mode 100644 keyboards/scrabblepad/info.json create mode 100644 keyboards/scrabblepad/keymaps/default/config.h create mode 100644 keyboards/scrabblepad/keymaps/default/keymap.c create mode 100644 keyboards/scrabblepad/keymaps/default/readme.md create mode 100644 keyboards/scrabblepad/readme.md create mode 100644 keyboards/scrabblepad/rules.mk create mode 100644 keyboards/scrabblepad/scrabblepad.c create mode 100644 keyboards/scrabblepad/scrabblepad.h diff --git a/keyboards/scrabblepad/config.h b/keyboards/scrabblepad/config.h new file mode 100644 index 00000000000..01f847dd47e --- /dev/null +++ b/keyboards/scrabblepad/config.h @@ -0,0 +1,190 @@ +/* +Copyright 2018 MechMerlin + +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 0x0000 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Donut Cables +#define PRODUCT ScrabblePad +#define DESCRIPTION 15x15 Ortholinear Board + +/* key matrix size */ +#define MATRIX_ROWS 15 +#define MATRIX_COLS 15 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { D3, F1, C7, F2, C6, F3, C5, F4, C4, F5, C3, F6, C2, F7, C1 } +#define MATRIX_COL_PINS { D4, D5, D7, B7, D0, D1, D2, C0, F0, B4, B5, B6, E1, E7, E0 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * 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 + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +#endif diff --git a/keyboards/scrabblepad/info.json b/keyboards/scrabblepad/info.json new file mode 100644 index 00000000000..1368abd4b2b --- /dev/null +++ b/keyboards/scrabblepad/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "scrabblepad", + "url": "", + "maintainer": "qmk", + "width": 15, + "height": 15, + "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":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}, {"x":13, "y":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}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":0, "y":5}, {"x":1, "y":5}, {"x":2, "y":5}, {"x":3, "y":5}, {"x":4, "y":5}, {"x":5, "y":5}, {"x":6, "y":5}, {"x":7, "y":5}, {"x":8, "y":5}, {"x":9, "y":5}, {"x":10, "y":5}, {"x":11, "y":5}, {"x":12, "y":5}, {"x":13, "y":5}, {"x":14, "y":5}, {"x":0, "y":6}, {"x":1, "y":6}, {"x":2, "y":6}, {"x":3, "y":6}, {"x":4, "y":6}, {"x":5, "y":6}, {"x":6, "y":6}, {"x":7, "y":6}, {"x":8, "y":6}, {"x":9, "y":6}, {"x":10, "y":6}, {"x":11, "y":6}, {"x":12, "y":6}, {"x":13, "y":6}, {"x":14, "y":6}, {"x":0, "y":7}, {"x":1, "y":7}, {"x":2, "y":7}, {"x":3, "y":7}, {"x":4, "y":7}, {"x":5, "y":7}, {"x":6, "y":7}, {"x":7, "y":7}, {"x":8, "y":7}, {"x":9, "y":7}, {"x":10, "y":7}, {"x":11, "y":7}, {"x":12, "y":7}, {"x":13, "y":7}, {"x":14, "y":7}, {"x":0, "y":8}, {"x":1, "y":8}, {"x":2, "y":8}, {"x":3, "y":8}, {"x":4, "y":8}, {"x":5, "y":8}, {"x":6, "y":8}, {"x":7, "y":8}, {"x":8, "y":8}, {"x":9, "y":8}, {"x":10, "y":8}, {"x":11, "y":8}, {"x":12, "y":8}, {"x":13, "y":8}, {"x":14, "y":8}, {"x":0, "y":9}, {"x":1, "y":9}, {"x":2, "y":9}, {"x":3, "y":9}, {"x":4, "y":9}, {"x":5, "y":9}, {"x":6, "y":9}, {"x":7, "y":9}, {"x":8, "y":9}, {"x":9, "y":9}, {"x":10, "y":9}, {"x":11, "y":9}, {"x":12, "y":9}, {"x":13, "y":9}, {"x":14, "y":9}, {"x":0, "y":10}, {"x":1, "y":10}, {"x":2, "y":10}, {"x":3, "y":10}, {"x":4, "y":10}, {"x":5, "y":10}, {"x":6, "y":10}, {"x":7, "y":10}, {"x":8, "y":10}, {"x":9, "y":10}, {"x":10, "y":10}, {"x":11, "y":10}, {"x":12, "y":10}, {"x":13, "y":10}, {"x":14, "y":10}, {"x":0, "y":11}, {"x":1, "y":11}, {"x":2, "y":11}, {"x":3, "y":11}, {"x":4, "y":11}, {"x":5, "y":11}, {"x":6, "y":11}, {"x":7, "y":11}, {"x":8, "y":11}, {"x":9, "y":11}, {"x":10, "y":11}, {"x":11, "y":11}, {"x":12, "y":11}, {"x":13, "y":11}, {"x":14, "y":11}, {"x":0, "y":12}, {"x":1, "y":12}, {"x":2, "y":12}, {"x":3, "y":12}, {"x":4, "y":12}, {"x":5, "y":12}, {"x":6, "y":12}, {"x":7, "y":12}, {"x":8, "y":12}, {"x":9, "y":12}, {"x":10, "y":12}, {"x":11, "y":12}, {"x":12, "y":12}, {"x":13, "y":12}, {"x":14, "y":12}, {"x":0, "y":13}, {"x":1, "y":13}, {"x":2, "y":13}, {"x":3, "y":13}, {"x":4, "y":13}, {"x":5, "y":13}, {"x":6, "y":13}, {"x":7, "y":13}, {"x":8, "y":13}, {"x":9, "y":13}, {"x":10, "y":13}, {"x":11, "y":13}, {"x":12, "y":13}, {"x":13, "y":13}, {"x":14, "y":13}, {"x":0, "y":14}, {"x":1, "y":14}, {"x":2, "y":14}, {"x":3, "y":14}, {"x":4, "y":14}, {"x":5, "y":14}, {"x":6, "y":14}, {"x":7, "y":14}, {"x":8, "y":14}, {"x":9, "y":14}, {"x":10, "y":14}, {"x":11, "y":14}, {"x":12, "y":14}, {"x":13, "y":14}, {"x":14, "y":14}] + } + } +} diff --git a/keyboards/scrabblepad/keymaps/default/config.h b/keyboards/scrabblepad/keymaps/default/config.h new file mode 100644 index 00000000000..2c852d18199 --- /dev/null +++ b/keyboards/scrabblepad/keymaps/default/config.h @@ -0,0 +1,24 @@ +/* Copyright 2018 MechMerlin + * + * 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/scrabblepad/keymaps/default/keymap.c b/keyboards/scrabblepad/keymaps/default/keymap.c new file mode 100644 index 00000000000..bfbab6e885c --- /dev/null +++ b/keyboards/scrabblepad/keymaps/default/keymap.c @@ -0,0 +1,72 @@ +/* Copyright 2018 MechMerlin + * + * 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 "scrabblepad.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = LAYOUT( /* Base */ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC, \ + KC_D, KC_O, KC_N, KC_U, KC_T, KC_C, KC_A, KC_T, KC_SPC, KC_R, KC_U, KC_L, KC_E, KC_S, KC_SPC \ +), +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +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; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/scrabblepad/keymaps/default/readme.md b/keyboards/scrabblepad/keymaps/default/readme.md new file mode 100644 index 00000000000..4123e76671d --- /dev/null +++ b/keyboards/scrabblepad/keymaps/default/readme.md @@ -0,0 +1,6 @@ +# The default keymap for ScrabblePad + +This is the default keymap for the ScrabblePad. + +On each row, each key is used to spell out each character in +the following string: "donutcat rules ". diff --git a/keyboards/scrabblepad/readme.md b/keyboards/scrabblepad/readme.md new file mode 100644 index 00000000000..30ba9219637 --- /dev/null +++ b/keyboards/scrabblepad/readme.md @@ -0,0 +1,17 @@ +# ScrabblePad + +The ScrabblePad is a 15x15 ortholinear keyboard designed for use with +the XDA Scrabble Board sold by [Novelkeys](https://novelkeys.xyz). + +It uses a [Teensy++ 2.0](https://www.pjrc.com/store/teensypp.html) +featuring an at90usb1286 8 bit microcontroller. + +Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin) +Hardware Supported: Teensy++ 2.0 and ScrabblePad PCB +Hardware Availability: [Donut Cables](https://donutcables.com/) + +Make example for this keyboard (after setting up your build environment): + + make scrabblepad: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/scrabblepad/rules.mk b/keyboards/scrabblepad/rules.mk new file mode 100644 index 00000000000..20f532af4d5 --- /dev/null +++ b/keyboards/scrabblepad/rules.mk @@ -0,0 +1,67 @@ +# MCU name +MCU = at90usb1286 + +# 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 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +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 = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches diff --git a/keyboards/scrabblepad/scrabblepad.c b/keyboards/scrabblepad/scrabblepad.c new file mode 100644 index 00000000000..e97cbd46c01 --- /dev/null +++ b/keyboards/scrabblepad/scrabblepad.c @@ -0,0 +1,43 @@ +/* Copyright 2018 MechMerlin + * + * 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 "scrabblepad.h" + +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); +} + +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); +} diff --git a/keyboards/scrabblepad/scrabblepad.h b/keyboards/scrabblepad/scrabblepad.h new file mode 100644 index 00000000000..fbe0dfc7276 --- /dev/null +++ b/keyboards/scrabblepad/scrabblepad.h @@ -0,0 +1,57 @@ +/* Copyright 2018 MechMerlin + * + * 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 SCRABBLEPAD_H +#define SCRABBLEPAD_H + +#include "quantum.h" + +// Written in the format K(row)(column) where numbering is in hexadecimal +#define LAYOUT( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, \ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, \ + k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, \ + k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \ + k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, \ + k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5A, k5B, k5C, k5D, k5E, \ + k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6A, k6B, k6C, k6D, k6E, \ + k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7A, k7B, k7C, k7D, k7E, \ + k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8A, k8B, k8C, k8D, k8E, \ + k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, k9A, k9B, k9C, k9D, k9E, \ + kA0, kA1, kA2, kA3, kA4, kA5, kA6, kA7, kA8, kA9, kAA, kAB, kAC, kAD, kAE, \ + kB0, kB1, kB2, kB3, kB4, kB5, kB6, kB7, kB8, kB9, kBA, kBB, kBC, kBD, kBE, \ + kC0, kC1, kC2, kC3, kC4, kC5, kC6, kC7, kC8, kC9, kCA, kCB, kCC, kCD, kCE, \ + kD0, kD1, kD2, kD3, kD4, kD5, kD6, kD7, kD8, kD9, kDA, kDB, kDC, kDD, kDE, \ + kE0, kE1, kE2, kE3, kE4, kE5, kE6, kE7, kE8, kE9, kEA, kEB, kEC, kED, kEE \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, }, \ + { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, }, \ + { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, }, \ + { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, }, \ + { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, }, \ + { k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5A, k5B, k5C, k5D, k5E, }, \ + { k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6A, k6B, k6C, k6D, k6E, }, \ + { k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k7A, k7B, k7C, k7D, k7E, }, \ + { k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k8A, k8B, k8C, k8D, k8E, }, \ + { k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, k9A, k9B, k9C, k9D, k9E, }, \ + { kA0, kA1, kA2, kA3, kA4, kA5, kA6, kA7, kA8, kA9, kAA, kAB, kAC, kAD, kAE, }, \ + { kB0, kB1, kB2, kB3, kB4, kB5, kB6, kB7, kB8, kB9, kBA, kBB, kBC, kBD, kBE, }, \ + { kC0, kC1, kC2, kC3, kC4, kC5, kC6, kC7, kC8, kC9, kCA, kCB, kCC, kCD, kCE, }, \ + { kD0, kD1, kD2, kD3, kD4, kD5, kD6, kD7, kD8, kD9, kDA, kDB, kDC, kDD, kDE, }, \ + { kE0, kE1, kE2, kE3, kE4, kE5, kE6, kE7, kE8, kE9, kEA, kEB, kEC, kED, kEE } \ +} + +#endif From 47f55f417b9ecd2199b0b253e6dfb6881f9a8746 Mon Sep 17 00:00:00 2001 From: Cole Markham Date: Thu, 19 Apr 2018 11:09:33 -0500 Subject: [PATCH 014/152] Implement magic 8-ball mode for big series switch (#2763) --- keyboards/bigseries/keymaps/8ball/keymap.c | 144 +++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100755 keyboards/bigseries/keymaps/8ball/keymap.c diff --git a/keyboards/bigseries/keymaps/8ball/keymap.c b/keyboards/bigseries/keymaps/8ball/keymap.c new file mode 100755 index 00000000000..df4e3dde8ba --- /dev/null +++ b/keyboards/bigseries/keymaps/8ball/keymap.c @@ -0,0 +1,144 @@ +/* +Copyright 2018 Cole Markham + +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 "../../bigseries.h" + +static const char * const ANSWERS[] = { +// "Yes" answers +"It is certain\n", +"It is decidedly so\n", +"Without a doubt\n", +"Yes definitely\n", +"You may rely on it\n", +"As I see it, yes\n", +"Most likely\n", +"Outlook good\n", +"Yes\n", +"Signs point to yes\n", +// Uncertain answers, index 10 +"Reply hazy try again\n", +"Ask again later\n", +"Better not tell you now\n", +"Cannot predict now\n", +"Concentrate and ask again\n", +// "No" answers, index 15 +"Don't count on it\n", +"My reply is no\n", +"My sources say no\n", +"Outlook not so good\n", +"Very doubtful\n" +}; + +#define UNCERTAIN_BREAK 10 +#define NO_BREAK 15 +#define NUM_ANSWERS 20 +// Timeout of answer color in ms +#define ANSWER_TIMEOUT 3000 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +KEYMAP( + KC_A), +}; + + +void reset_rgb(void); + +bool initialized = 0; +uint32_t lastTime = 0; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + return MACRO_NONE ; +} + +void matrix_init_user(void) { + if (!initialized){ + dprintf("Initializing in matrix_scan_user"); + rgblight_enable(); + reset_rgb(); + initialized = 1; + } +} + +void matrix_scan_user(void) { + if (lastTime > 0 && timer_elapsed32(lastTime) > ANSWER_TIMEOUT) { + lastTime = 0; + reset_rgb(); + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_A: + if (record->event.pressed) { + uint8_t num = rand() / (RAND_MAX / NUM_ANSWERS + 1); + rgblight_mode(1); + if (num < UNCERTAIN_BREAK) { + rgblight_setrgb_green(); + } else if (num < NO_BREAK) { + rgblight_setrgb_yellow(); + } else { + rgblight_setrgb_red(); + } + send_string(ANSWERS[num]); + lastTime = timer_read32(); + return false; + } + } + return true; +} + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + +} + +void reset_rgb(void) { + // This gets called on init and after the timeout for the answer color + // If you want to change the default color/mode, do it here + rgblight_sethsv_blue(); + rgblight_mode(7); +} From d3c6da7afff15fa493d7a6c8b00ec6e4ac7274f3 Mon Sep 17 00:00:00 2001 From: Kenneth Aloysius Date: Fri, 20 Apr 2018 02:28:55 +1000 Subject: [PATCH 015/152] Updated personal keymaps, fixed Let's Split default keymap, updated JJ40 README (#2704) * Add M6-A keymap * Update XD60 keymap * Update XD60 keymap readme * Update JJ40 and Let's Split keymaps * Add readme for M6-A * Fix typo, update JJ40 README * Update jj40 readme * Cleanup jj40 keymap * Revert Let's Split QWERTY layer to default before #2010 * Update numpad layers * Fix: Let's Split keymap getting stuck mods due to having keycodes assigned on the Raise layer * Keep ASCII art consistent with keymap --- keyboards/converter/ibm_terminal/matrix.c | 2 +- .../four_banger/keymaps/default/keymap.c | 6 +- keyboards/jj40/README.md | 15 +- keyboards/jj40/keymaps/krusli/config.h | 2 +- keyboards/jj40/keymaps/krusli/keymap.c | 135 +++++----- keyboards/jj40/keymaps/krusli/readme.md | 4 +- keyboards/jj40/keymaps/krusli/rules.mk | 2 +- keyboards/lets_split/keymaps/default/keymap.c | 6 +- keyboards/lets_split/keymaps/krusli/keymap.c | 239 ++++++++++++++++++ keyboards/lets_split/keymaps/krusli/readme.md | 2 + keyboards/ps2avrGB/program | 2 +- keyboards/rama/m6_a/keymaps/krusli/README.md | 26 ++ keyboards/rama/m6_a/keymaps/krusli/keymap.c | 72 ++++++ keyboards/sweet16/keymaps/default/keymap.c | 2 +- keyboards/xd60/keymaps/krusli/HHKB-like.txt | 0 keyboards/xd60/keymaps/krusli/keymap.c | 50 ++-- keyboards/xd60/keymaps/krusli/readme.md | 2 +- util/atmega32a_program.py | 2 +- 18 files changed, 463 insertions(+), 106 deletions(-) create mode 100644 keyboards/lets_split/keymaps/krusli/keymap.c create mode 100644 keyboards/lets_split/keymaps/krusli/readme.md create mode 100644 keyboards/rama/m6_a/keymaps/krusli/README.md create mode 100644 keyboards/rama/m6_a/keymaps/krusli/keymap.c delete mode 100644 keyboards/xd60/keymaps/krusli/HHKB-like.txt diff --git a/keyboards/converter/ibm_terminal/matrix.c b/keyboards/converter/ibm_terminal/matrix.c index 9d717b61f53..caa0a380510 100644 --- a/keyboards/converter/ibm_terminal/matrix.c +++ b/keyboards/converter/ibm_terminal/matrix.c @@ -108,7 +108,7 @@ uint8_t matrix_scan(void) state = RESET; } break; - // after reset receive keyboad ID(2 bytes) + // after reset receive keyboard ID(2 bytes) case KBD_ID0: if (code) { state = KBD_ID1; diff --git a/keyboards/four_banger/keymaps/default/keymap.c b/keyboards/four_banger/keymaps/default/keymap.c index 24515538164..6c5f7c8a55f 100644 --- a/keyboards/four_banger/keymaps/default/keymap.c +++ b/keyboards/four_banger/keymaps/default/keymap.c @@ -6,7 +6,7 @@ enum custom_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LAYOUT_ortho_2x2( - KC_1, KC_U, + KC_1, KC_U, KC_P, UP_URL ), }; @@ -15,10 +15,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case UP_URL: if (record->event.pressed) { - SEND_STRING("http://1upkeyboads.com"); + SEND_STRING("http://1upkeyboards.com"); } return false; break; } return true; -} \ No newline at end of file +} diff --git a/keyboards/jj40/README.md b/keyboards/jj40/README.md index 563f5788e31..1b47ab81625 100644 --- a/keyboards/jj40/README.md +++ b/keyboards/jj40/README.md @@ -18,13 +18,24 @@ Note that this is a complete replacement for the firmware, so you won't be using Bootmapper Client to change any keyboard settings, since not all the USB report options are supported. -In addition you may need the AVR toolchain and `bootloadHID` for flashing: +In addition you may need the AVR toolchain and `bootloadHID` ([GitHub repo](https://github.com/whiteneon/bootloadHID)) for flashing: +For macOS: ``` $ brew cask install crosspack-avr $ brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb ``` +For Linux: +``` +$ sudo apt install libusb-dev +$ wget https://www.obdev.at/downloads/vusb/bootloadHID.2012-12-08.tar.gz +$ tar -xzf bootloadHID.2012-12-08.tar.gz +$ cd bootloadHID.2012-12-08/commandline +$ make +$ sudo cp bootloadHID /usr/bin +``` + In order to use the `./program` script, which can reboot the board into the bootloader, you'll need Python 2 with PyUSB installed: @@ -32,7 +43,7 @@ the bootloader, you'll need Python 2 with PyUSB installed: $ pip install pyusb ``` -If you prefer, you can just build it and flash the firmware directly with +If you prefer (or are having issues with a `program` flash), you can just build it (`make jj40:` and flash the firmware (`.hex` file) directly with `bootloadHID` if you boot the board while holding down `Backspace` (`Top Right Key`) to keep it in the bootloader: diff --git a/keyboards/jj40/keymaps/krusli/config.h b/keyboards/jj40/keymaps/krusli/config.h index 52aaa8f24dc..6d98a37a678 100644 --- a/keyboards/jj40/keymaps/krusli/config.h +++ b/keyboards/jj40/keymaps/krusli/config.h @@ -4,6 +4,6 @@ #include "../../config.h" #define PREVENT_STUCK_MODIFIERS -#define TAPPING_TERM 300 +// #define TAPPING_TERM 300 #endif diff --git a/keyboards/jj40/keymaps/krusli/keymap.c b/keyboards/jj40/keymaps/krusli/keymap.c index df692cc484f..2e6e9a76e7d 100644 --- a/keyboards/jj40/keymaps/krusli/keymap.c +++ b/keyboards/jj40/keymaps/krusli/keymap.c @@ -4,6 +4,7 @@ #define _QWERTY 0 #define _LOWER 1 #define _RAISE 2 +#define _NUMPAD 3 enum custom_keycodes { QWERTY = SAFE_RANGE, @@ -15,66 +16,84 @@ void matrix_scan_user(void) { // runs at every matrix scan. } -enum { - TD_H_E = 0 -}; - -qk_tap_dance_action_t tap_dance_actions[] = { - [TD_H_E] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, KC_END) -}; +// enum { +// TD_H_E = 0 +// }; +// +// qk_tap_dance_action_t tap_dance_actions[] = { +// [TD_H_E] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, KC_END) +// }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Qwerty - * ,-----------------------------------------------------------------------------------. - * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Esc | A | S | D | F | G | H | J | K | L | ; | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | Ctrl | GUI | Alt |Lower | Space |Raise | Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' - */ -[_QWERTY] = KEYMAP( \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ - TD(TD_H_E), KC_LCTL, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ -), + /* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Ctrl | GUI | Alt |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ + [_QWERTY] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + TO(_NUMPAD),KC_LCTL, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ + ), + + /* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | RGB | RGB | RGB | RGB |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | RGB | RGB | RGB | | | Next | Vol- | Vol+ | Play | | + * `-----------------------------------------------------------------------------------' + */ + [_LOWER] = KEYMAP( \ + 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_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, RGB_MOD, RGB_VAD, RGB_VAI, _______, \ + _______, RGB_SAD, RGB_SAI, RGB_HUI, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ + ), -/* Lower - * ,-----------------------------------------------------------------------------------. - * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | | | | | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_LOWER] = KEYMAP( \ - 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_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ - _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,_______, _______, _______, \ - BL_TOGG, BL_STEP, BL_BRTG, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -), + /* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | Home | End | PgUp | PgDn |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | Prev | Play | Next | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ + [_RAISE] = KEYMAP( \ + 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_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_PGUP, KC_PGDN, _______, \ + _______, KC_MRWD, KC_MPLY, KC_MNXT, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ + ), -/* Raise - * ,-----------------------------------------------------------------------------------. - * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | F7 | F8 | F9 | F10 | F11 | F12 | RGB | RGB | RGB | RGB |Enter | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | RGB | RGB | RGB | RGB | | | | Next | Vol- | Vol+ | Play | - * `-----------------------------------------------------------------------------------' - */ -[_RAISE] = KEYMAP( \ - 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_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, RGB_MOD, RGB_VAD, RGB_VAI, _______, \ - RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ -) + /* Numpad + * ,-----------------------------------------------------------------------------------. + * | Esc | 7 | 8 | 9 | * | / | | | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | <-- | 4 | 5 | 6 | + | - | | | | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | 1 | 2 | 3 |Enter |Enter | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Qwerty| 0 | . | . |Enter |Enter | | | | | | + * `-----------------------------------------------------------------------------------' + */ + [_NUMPAD] = KEYMAP( \ + KC_ESC, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS, _______, _______, _______, _______, _______, _______, \ + KC_BSPC, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PMNS, _______, _______, _______, _______, _______, _______, \ + _______, KC_P1, KC_P2, KC_P3, KC_PENT, KC_PENT, _______, _______, _______, _______, _______, _______, \ + TO(_QWERTY),KC_P0, KC_PDOT, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______ \ + ) }; diff --git a/keyboards/jj40/keymaps/krusli/readme.md b/keyboards/jj40/keymaps/krusli/readme.md index 75a84d0e677..ed760e8a61c 100644 --- a/keyboards/jj40/keymaps/krusli/readme.md +++ b/keyboards/jj40/keymaps/krusli/readme.md @@ -1,2 +1,4 @@ # krusli -Default JJ40 keymap, adapted with RGB underglow support. GUI and LAlt is also swapped. +JJ40 keymap based off the default Planck layout with a numpad layer and with RGB underglow controls. + +GUI and LAlt is also swapped to their standard positions. diff --git a/keyboards/jj40/keymaps/krusli/rules.mk b/keyboards/jj40/keymaps/krusli/rules.mk index e5ddcae8d92..5c6bb684e52 100644 --- a/keyboards/jj40/keymaps/krusli/rules.mk +++ b/keyboards/jj40/keymaps/krusli/rules.mk @@ -1 +1 @@ -TAP_DANCE_ENABLE = yes +# TAP_DANCE_ENABLE = yes diff --git a/keyboards/lets_split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c index 0de3a1390e2..7cc9e53c023 100644 --- a/keyboards/lets_split/keymaps/default/keymap.c +++ b/keyboards/lets_split/keymaps/default/keymap.c @@ -29,18 +29,18 @@ enum custom_keycodes { #define XXXXXXX KC_NO const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* Qwerty * ,-----------------------------------------------------------------------------------. * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Tab | A | S | D | F | G | H | J | K | L | ; | ' | + * | Tab | A | S | D | F | G | H | J | K | L | ; | " | * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Ctrl | GUI | Alt |Adjust|Lower |Space |Space |Raise | Left | Down | Up |Right | + * |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ + [_QWERTY] = 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, \ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ diff --git a/keyboards/lets_split/keymaps/krusli/keymap.c b/keyboards/lets_split/keymaps/krusli/keymap.c new file mode 100644 index 00000000000..177aa716838 --- /dev/null +++ b/keyboards/lets_split/keymaps/krusli/keymap.c @@ -0,0 +1,239 @@ +#include "lets_split.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 _COLEMAK 1 +#define _DVORAK 2 +#define _LOWER 3 +#define _RAISE 4 +#define _NUMPAD 5 +#define _ADJUST 16 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + LOWER, + RAISE, + ADJUST, + NUMPAD +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | ' | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Numpad| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + NUMPAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Colemak + * ,-----------------------------------------------------------------------------------. + * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | R | S | T | D | H | N | E | I | O | ' | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_COLEMAK] = KEYMAP( \ + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \ + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = KEYMAP( \ + KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + 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_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = KEYMAP( \ + 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_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | F7 | F8 | F9 | F10 | F11 | F12 | Home | End | PgUp | PgDn |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = KEYMAP( \ + 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_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_PGUP, KC_PGDN, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Numpad + * ,-----------------------------------------------------------------------------------. + * | Esc | 7 | 8 | 9 | * | / | | | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | <-- | 4 | 5 | 6 | + | - | | | | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | 1 | 2 | 3 |Enter |Enter | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * |Qwerty| 0 | . | . |Enter |Enter | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_NUMPAD] = KEYMAP( \ + KC_ESC, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS, _______, _______, _______, _______, _______, _______, \ + KC_BSPC, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PMNS, _______, _______, _______, _______, _______, _______, \ + _______, KC_P1, KC_P2, KC_P3, KC_PENT, KC_PENT, _______, _______, _______, _______, _______, _______, \ + QWERTY, KC_P0, KC_PDOT, KC_PDOT, KC_PENT, KC_PENT, _______, _______, _______, _______, _______, _______ \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | Reset| | | | | | | | | | Del | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = KEYMAP( \ + _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \ + _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + + +}; + +#ifdef AUDIO_ENABLE +float tone_qwerty[][2] = SONG(QWERTY_SOUND); +float tone_dvorak[][2] = SONG(DVORAK_SOUND); +float tone_colemak[][2] = SONG(COLEMAK_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 NUMPAD: + if (record->event.pressed) + persistent_default_layer_set(1UL<<_NUMPAD); + return false; + break; + case COLEMAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_colemak); + #endif + persistent_default_layer_set(1UL<<_COLEMAK); + } + return false; + break; + case DVORAK: + if (record->event.pressed) { + #ifdef AUDIO_ENABLE + PLAY_SONG(tone_dvorak); + #endif + persistent_default_layer_set(1UL<<_DVORAK); + } + 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; +} diff --git a/keyboards/lets_split/keymaps/krusli/readme.md b/keyboards/lets_split/keymaps/krusli/readme.md new file mode 100644 index 00000000000..175ef3c11a5 --- /dev/null +++ b/keyboards/lets_split/keymaps/krusli/readme.md @@ -0,0 +1,2 @@ +# krusli +Let's Split keymap based off the default Planck layout with a numpad layer. diff --git a/keyboards/ps2avrGB/program b/keyboards/ps2avrGB/program index 298e645477d..b777b911066 100755 --- a/keyboards/ps2avrGB/program +++ b/keyboards/ps2avrGB/program @@ -73,7 +73,7 @@ if len(sys.argv) < 2: kb = checkForKeyboardInNormalMode() if kb is not None: - print('Found a keyboad in normal mode. Attempting to send it to bootloader mode ...', end='') + print('Found a keyboard in normal mode. Attempting to send it to bootloader mode ...', end='') sendDeviceToBootloaderMode(kb) print(' done.') print("Hint: If your keyboard can't be set to bootloader mode automatically, plug it in while pressing the bootloader key to do so manually.") diff --git a/keyboards/rama/m6_a/keymaps/krusli/README.md b/keyboards/rama/m6_a/keymaps/krusli/README.md new file mode 100644 index 00000000000..771b47a475f --- /dev/null +++ b/keyboards/rama/m6_a/keymaps/krusli/README.md @@ -0,0 +1,26 @@ +# krusli's RAMA M6-A Layout + +Personal keymap for the RAMA M6-A. + +Keymap was from my own port for the M6-A before official support was added, thus the backlighting code is not ported yet from the official default keymap. + +Top-right button acts as a "toggle between layers" button. Layer 0 -> Layer 1 -> Layer 2 -> Layer 0 -> ... + +- Layer 0: Git and Discord shortcuts +- Layer 1: Media playback and volume controls +- Layer 2: Osu! gamepad layer + +## Helpful alternative keymaps (WIP) +### Arrow cluster +Use [karabiner-elements](https://github.com/tekezo/Karabiner-Elements) on macOS so that the state of the modifiers (shift, caps lock) are synchronised between keyboards (for shift + arrow key text selection, for example). It's also a handy tool for customising keyboard behaviour on a Mac. + +On Windows/Linux modifier state should be shared between all keyboards by default. + +Installation: install [homebrew](https://brew.sh) and run `brew install Caskroom/cask/karabiner-elements`. + +```C +KEYMAP( + KC_ESC, KC_UP, TO(_LAYER0), + KC_LEFT, KC_DOWN, KC_RIGHT +) +``` diff --git a/keyboards/rama/m6_a/keymaps/krusli/keymap.c b/keyboards/rama/m6_a/keymaps/krusli/keymap.c new file mode 100644 index 00000000000..679d0bc43ba --- /dev/null +++ b/keyboards/rama/m6_a/keymaps/krusli/keymap.c @@ -0,0 +1,72 @@ +#include "../../m6_a.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. + +enum layers { + _LAYER0, + _LAYER1, + _LAYER2 +}; + +enum custom_keycodes { + GIT_ADD = SAFE_RANGE, + GIT_COMMIT, + GIT_PUSH, + MUTE, + DEAFEN +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch(keycode) { + case GIT_ADD: + SEND_STRING("git add ."SS_TAP(X_ENTER)); + break; + case GIT_COMMIT: + SEND_STRING("git commit -m "SS_DOWN(X_LSHIFT)SS_TAP(X_QUOTE)SS_UP(X_LSHIFT)); + break; + case GIT_PUSH: + SEND_STRING("git push"SS_TAP(X_ENTER)); + break; + case MUTE: + SEND_STRING(SS_LGUI(SS_LSFT("M"))); + break; + case DEAFEN: + SEND_STRING(SS_LGUI(SS_LSFT("D"))); + break; + return false; + } + } + return true; +}; + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_LAYER0] = KEYMAP( + MUTE, DEAFEN, TO(_LAYER1), + GIT_ADD, GIT_COMMIT, GIT_PUSH + ), + [_LAYER1] = KEYMAP( + KC_VOLD, KC_VOLU, TO(_LAYER2), + KC_MRWD, KC_MPLY, KC_MNXT + ), + [_LAYER2] = KEYMAP( + KC_ESC, KC_UP, TO(_LAYER0), + KC_Z, KC_X, KC_SPACE + ) +}; + +void matrix_init_user(void) { + #ifdef BACKLIGHT_ENABLE + backlight_level(0); + #endif +} diff --git a/keyboards/sweet16/keymaps/default/keymap.c b/keyboards/sweet16/keymaps/default/keymap.c index 7fa8615438a..2ddf8acb410 100644 --- a/keyboards/sweet16/keymaps/default/keymap.c +++ b/keyboards/sweet16/keymaps/default/keymap.c @@ -17,7 +17,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case UP_URL: if (record->event.pressed) { - SEND_STRING("http://1upkeyboads.com"); + SEND_STRING("http://1upkeyboards.com"); } return false; break; diff --git a/keyboards/xd60/keymaps/krusli/HHKB-like.txt b/keyboards/xd60/keymaps/krusli/HHKB-like.txt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/keyboards/xd60/keymaps/krusli/keymap.c b/keyboards/xd60/keymaps/krusli/keymap.c index 95a3e3fadf4..cf3edff4035 100644 --- a/keyboards/xd60/keymaps/krusli/keymap.c +++ b/keyboards/xd60/keymaps/krusli/keymap.c @@ -1,40 +1,26 @@ #include "xd60.h" #include "action_layer.h" -/* HHKB-like layout for standard 60% layout with split RShift and split backspace */ +#define _______ KC_TRNS -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +#define _BASE 0 +#define _FN 1 - // 0: Base Layer - LAYOUT_ALL( - 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_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_RSFT, KC_RSFT, F(0), \ - KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, F(0), KC_RCTL, KC_RCTL), - - // 1: Function Layer - /* Layer HHKB: HHKB mode (HHKB Fn) - |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| - | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | - |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| - | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | | - |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| - | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | | - |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| - | | | | | | | + | - | End | PgD | Dow | | | | | - |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| - - |------+------+----------------------+------+------+ - | **** | **** | ******************** | **** | **** | - |------+------+----------------------+------+------+ - */ - LAYOUT_ALL( - RESET, 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_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_BSPC, \ - KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_NO, KC_ENT, \ - 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, F(0), KC_TRNS, KC_TRNS), +/* HHKB-like layout for standard 60% layout with split RShift */ +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = KEYMAP( + 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_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_RSFT, KC_RSFT, F(0), \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, _______, KC_APP, KC_RCTL), + + [_FN] = KEYMAP( + 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, _______, \ + RESET, RGB_TOG, RGB_MOD, RGB_HUI, RGB_VAD, RGB_VAI, RGB_SAD, RGB_SAI, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_INS, \ + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_NO, _______ \ + _______, KC_NO, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______), }; // Custom Actions diff --git a/keyboards/xd60/keymaps/krusli/readme.md b/keyboards/xd60/keymaps/krusli/readme.md index aefb23cca3b..34f46e026ca 100644 --- a/keyboards/xd60/keymaps/krusli/readme.md +++ b/keyboards/xd60/keymaps/krusli/readme.md @@ -1,7 +1,7 @@ # krusli's Keymap for XIUDI's 60% XD60 PCB ## Additional Notes -Keymap for the XD60 with 2.25u left shift and split backspace. HHKB-like function layer. +Keymap for the XD60 (ANSI) with 2.25u left shift, split right shift. HHKB-like function layer. ## Build To build this keymap, simply run `make xd60:krusli` on the top-level directory for QMK. diff --git a/util/atmega32a_program.py b/util/atmega32a_program.py index 298e645477d..b777b911066 100755 --- a/util/atmega32a_program.py +++ b/util/atmega32a_program.py @@ -73,7 +73,7 @@ if len(sys.argv) < 2: kb = checkForKeyboardInNormalMode() if kb is not None: - print('Found a keyboad in normal mode. Attempting to send it to bootloader mode ...', end='') + print('Found a keyboard in normal mode. Attempting to send it to bootloader mode ...', end='') sendDeviceToBootloaderMode(kb) print(' done.') print("Hint: If your keyboard can't be set to bootloader mode automatically, plug it in while pressing the bootloader key to do so manually.") From 5ec3bd9e40a9f04a05d23569fc1a402927e1a5c2 Mon Sep 17 00:00:00 2001 From: Josh Asplund Date: Thu, 19 Apr 2018 11:30:45 -0500 Subject: [PATCH 016/152] Adds default IC keymap (#2677) --- .../keymaps/input_club/README.md | 23 ++ .../keymaps/input_club/keymap.c | 267 ++++++++++++++++++ 2 files changed, 290 insertions(+) create mode 100644 keyboards/ergodox_infinity/keymaps/input_club/README.md create mode 100644 keyboards/ergodox_infinity/keymaps/input_club/keymap.c diff --git a/keyboards/ergodox_infinity/keymaps/input_club/README.md b/keyboards/ergodox_infinity/keymaps/input_club/README.md new file mode 100644 index 00000000000..31ae23ac403 --- /dev/null +++ b/keyboards/ergodox_infinity/keymaps/input_club/README.md @@ -0,0 +1,23 @@ +# Input Club ErgoDox Infinity Layout + +A basic ErgoDox layout that duplicates the default Input Club layout + +## Features + +Base Layers + +- QWERTY +- Function Keys +- Numpad + +## Building and flashing + +1. Put your board in DFU mode with either the button on the bottom, or with a software key in your current firmware +2. Flash left half: + ```bash + make ergodox_infinity:input_club:dfu-util + ``` +3. Flash right half: + ```bash + make ergodox_infinity:input_club:dfu-util MASTER=right + ``` diff --git a/keyboards/ergodox_infinity/keymaps/input_club/keymap.c b/keyboards/ergodox_infinity/keymaps/input_club/keymap.c new file mode 100644 index 00000000000..e77319d2c8f --- /dev/null +++ b/keyboards/ergodox_infinity/keymaps/input_club/keymap.c @@ -0,0 +1,267 @@ +#include QMK_KEYBOARD_H +#include "debug.h" +#include "action_layer.h" +#include "version.h" + +#define L0 0 // default layer +#define L1 1 +#define L2 2 + +enum custom_keycodes { + PLACEHOLDER = SAFE_RANGE, // can always be here + EPRM, + VRSN, + RGB_SLD +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[L0] = LAYOUT_ergodox( // layer 0 : default +/* + * left hand + * +-------+-----+-----+-----+-----+-----+-----+ + * | = | 0 | 2 | 3 | 4 | 5 | ESC | + * +-------+-----+-----+-----+-----+-----+-----+ + * | \ | Q | W | E | R | T |LCK-1| + * +-------+-----+-----+-----+-----+-----+ | + * | TAB | A | S | D | F | G +-----+ + * +-------+-----+-----+-----+-----+-----+ f1 | + * | LSHIFT| Z | X | C | V | B | | + * +-+-----+-----+-----+-----+-----+-----+-----+ + * |LGUI | ` | \ |LEFT |RIGHT| + * +-----+-----+-----+-----+-----+ +-----+-----+ + * |LCTRL| LALT| + * +-----+-----+-----+ + * | | | HOME| + * |BKSPC| DEL +-----+ + * | | | END | + * +-----+-----+-----+ + */ + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_BSLS, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(L1), + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(L1), + KC_LGUI, KC_GRV, KC_BSLS, KC_LEFT, KC_RGHT, + KC_LCTL, KC_LALT, + KC_HOME, + KC_BSPC, KC_DELT, KC_END, +/* right hand + * +-----+-----+-----+-----+-----+-----+-------+ + * |LCK-2| 6 | 7 | 8 | 9 | 0 | - | + * +-----+-----+-----+-----+-----+-----+-------+ + * | [ | Y | U | I | O | P | ] | + * | +-----+-----+-----+-----+-----+-------+ + * +-----+ H | J | K | L | ; | ' | + * | f1 +-----+-----+-----+-----+-----+-------+ + * | | N | M | , | . | / | RSHIFT| + * +-----+-----+-----+-----+-----+-----+-----+-+ + * |LEFT |DOWN | UP |RIGHT| RGUI| + * +-----+-----+ +-----+-----+-----+-----+-----+ + * | RALT|RCTRL| + * +-----+-----+-----+ + * | PGUP| | | + * +-----+ ENT | SPC | + * | PGDN| | | + * +-----+-----+-----+ + */ + TG(L2), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + MO(L1), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_RGUI, + KC_RALT, KC_RCTL, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC + ), + +[L1] = LAYOUT_ergodox( // layer 1 : function layers +/* left hand + * +-------+-----+-----+-----+-----+-----+-----+ + * | | f1 | f2 | f3 | f4 | f5 | f11 | + * +-------+-----+-----+-----+-----+-----+-----+ + * | | | | | | | | + * +-------+-----+-----+-----+-----+-----+ | + * | | | | | | +-----+ + * +-------+-----+-----+-----+-----+-----+ | + * | | | | | | | | + * +-+-----+-----+-----+-----+-----+-----+-----+ + * | | | | | | + * +-----+-----+-----+-----+-----+ +-----+-----+ + * | | | + * +-----+-----+-----+ + * | | | | + * | | +-----+ + * | | | | + * +-----+-----+-----+ + */ + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, +/* right hand + * +-----+-----+-----+-----+-----+-----+-------+ + * | f12 | f6 | f7 | f8 | f9 | f10 | | + * +-----+-----+-----+-----+-----+-----+-------+ + * | | | | | | | | + * | +-----+-----+-----+-----+-----+-------+ + * +-----+ | | | | | | + * | +-----+-----+-----+-----+-----+-------+ + * | | | | | | | | + * +-----+-----+-----+-----+-----+-----+-----+-+ + * | | | | | | + * +-----+-----+ +-----+-----+-----+-----+-----+ + * | | | + * +-----+-----+-----+ + * | | | | + * +-----+ | | + * | | | | + * +-----+-----+-----+ + */ + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +[L2] = LAYOUT_ergodox( +/* Left hand + * +-------+-----+-----+-----+-----+-----+-----+ + * | FLASH | | | | | | | + * +-------+-----+-----+-----+-----+-----+-----+ + * | | | | | | | | + * +-------+-----+-----+-----+-----+-----+ | + * | | | | | | +-----+ + * +-------+-----+-----+-----+-----+-----+ | + * | | | | | | | | + * +-+-----+-----+-----+-----+-----+-----+-----+ + * | | | | | | + * +-----+-----+-----+-----+-----+ +-----+-----+ + * | | | + * +-----+-----+-----+ + * | | | | + * | | +-----+ + * | | | | + * +-----+-----+-----+ + */ + 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, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, +/* right hand + * +-----+-----+-----+-----+-----+-----+-------+ + * | | |NMLCK| P/ | P* | P- | | + * +-----+-----+-----+-----+-----+-----+-------+ + * | | | P7 | P8 | P9 | P+ | | + * | +-----+-----+-----+-----+-----+-------+ + * +-----+ | P4 | P5 | P6 | P+ | | + * | +-----+-----+-----+-----+-----+-------+ + * | | | P1 | P2 | P3 |PENT | | + * +-----+-----+-----+-----+-----+-----+-----+-+ + * | | | P. |PENT | | + * +-----+-----+ +-----+-----+-----+-----+-----+ + * | | | + * +-----+-----+-----+ + * | | | | + * +-----+ | P0 | + * | | | | + * +-----+-----+-----+ + */ + KC_TRNS, KC_TRNS, KC_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_TRNS, + KC_TRNS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, KC_TRNS, + KC_TRNS, KC_TRNS, KC_KP_DOT, KC_KP_ENTER, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_KP_0 +), +}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_TAP_TOGGLE(L1) // FN1 - Momentary Layer 1 (Function) +}; + +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) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + break; + case 1: + if (record->event.pressed) { // For resetting EEPROM + eeconfig_init(); + } + break; + } + return MACRO_NONE; +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + // dynamically generate these. + case EPRM: + if (record->event.pressed) { + eeconfig_init(); + } + return false; + break; + case VRSN: + if (record->event.pressed) { + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + return false; + break; + case RGB_SLD: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + rgblight_mode(1); + #endif + } + return false; + break; + } + return true; +} + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; + + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + +}; From 3bb647910a09146309cef59eedd78be72697c88f Mon Sep 17 00:00:00 2001 From: Salt-Peanuts Date: Thu, 19 Apr 2018 21:11:07 -0400 Subject: [PATCH 017/152] Updated info and fixed minor errors (#2769) --- keyboards/kinesis/config.h | 2 +- keyboards/kinesis/readme.md | 4 ++-- keyboards/kinesis/stapelberg/readme.md | 5 ++--- keyboards/kinesis/stapelberg/stapelberg.h | 14 +++++++------- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/keyboards/kinesis/config.h b/keyboards/kinesis/config.h index 7cb0532c64f..a4e06b6ebb2 100644 --- a/keyboards/kinesis/config.h +++ b/keyboards/kinesis/config.h @@ -23,7 +23,7 @@ along with this program. If not, see . /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED #define MANUFACTURER You -#define PRODUCT kinesis-advantage +#define PRODUCT Kinesis Advantage/Contoured #define DESCRIPTION A custom keyboard // Mouse diff --git a/keyboards/kinesis/readme.md b/keyboards/kinesis/readme.md index 2813ee273b3..3802f50c9a3 100644 --- a/keyboards/kinesis/readme.md +++ b/keyboards/kinesis/readme.md @@ -1,10 +1,10 @@ -# Firmware for the Kinesis advantage keyboard +# Firmware for the Kinesis Advantage/Contoured keyboard There are at least two different ways to replace the controller in this keyboard. The Stapelberg folder contains the docs and configuration for using the custom controller created by Michael Stapelberg. -The alvicstep folder contains docs and configuration for directly wiring a Teensy2++ to the existing controller board. This follows the pinouts described in https://github.com/alvicstep/tmk_keyboard, which is where the name comes from. +The alvicstep folder contains docs and configuration for directly wiring a Teensy2++ to the existing controller board. This follows the pinouts described in https://github.com/alvicstep/tmk_keyboard, which is where the name comes from. ## Keymaps Both hardware solutions should work with the same keymaps diff --git a/keyboards/kinesis/stapelberg/readme.md b/keyboards/kinesis/stapelberg/readme.md index 0dcb7c283f3..2a69bb72500 100644 --- a/keyboards/kinesis/stapelberg/readme.md +++ b/keyboards/kinesis/stapelberg/readme.md @@ -44,11 +44,10 @@ The exterior cables can be seen here. ### Default -To build with the default keymap, run `make default` while in the -`kinesis_stapelberg` working directory. +To build with the default keymap, run `make kinesis/stapelberg` while in the QMK directory. ### Dvorak This keymap contains a dvorak implementation as well as media and symbol layers. -Run `make dvorak` while in the `kinesis_stapelberg` working directory. +Run `make kinesis/stapelberg:dvorak` while in the QMK directory. diff --git a/keyboards/kinesis/stapelberg/stapelberg.h b/keyboards/kinesis/stapelberg/stapelberg.h index c90fc3d52db..8c8619745d5 100644 --- a/keyboards/kinesis/stapelberg/stapelberg.h +++ b/keyboards/kinesis/stapelberg/stapelberg.h @@ -58,13 +58,13 @@ PD4 k4x Row: 4 R F V -- -- DEL PD5 k5x Row: 5 T G B RT LAL LCT PD6 k6x Row: 6 Y H N UP SPC PGD PD7 k7x Row: 7 U J M -- RET -- -PB0 k8x Row: 8 I K COM DWN RCT PGU -PB1 k9x Row: 9 O L PER LBR -- RAL -PB2 kAx Row: 0 P SEM SLA RBR -- -- -PB3 kBx Row: MIN BSL APO RSH X1 -- -- -PB4 kCx Row: ESC F3 F6 F9 F12 PAU -- -PB5 kDx Row: F1 F4 F7 F10 PRT PRG -- -PB6 kEx Row: F2 F5 F8 F11 SLK KEY -- +PC0 k8x Row: 8 I K COM DWN RCT PGU +PC1 k9x Row: 9 O L PER LBR -- RAL +PC2 kAx Row: 0 P SEM SLA RBR -- -- +PC3 kBx Row: MIN BSL APO RSH X1 -- -- +PC4 kCx Row: ESC F3 F6 F9 F12 PAU -- +PC5 kDx Row: F1 F4 F7 F10 PRT PRG -- +PC6 kEx Row: F2 F5 F8 F11 SLK KEY -- */ From 1de6458921963d40d812e696528d21fed744a732 Mon Sep 17 00:00:00 2001 From: That-Canadian Date: Fri, 20 Apr 2018 08:51:34 -0700 Subject: [PATCH 018/152] Launchpad (#2767) * Line ending stuff again * Added base launchpad files and a default layout * Updated KEYMAP to LAYOUT, also editing default keymap a bit and added a readme --- keyboards/launchpad/config.h | 75 ++++++++++++++++++++ keyboards/launchpad/keymaps/default/keymap.c | 66 +++++++++++++++++ keyboards/launchpad/keymaps/default/rules.mk | 25 +++++++ keyboards/launchpad/launchpad.c | 1 + keyboards/launchpad/launchpad.h | 11 +++ keyboards/launchpad/readme.md | 32 +++++++++ keyboards/launchpad/rev1/config.h | 32 +++++++++ keyboards/launchpad/rev1/rev1.c | 14 ++++ keyboards/launchpad/rev1/rev1.h | 24 +++++++ keyboards/launchpad/rev1/rules.mk | 3 + keyboards/launchpad/rules.mk | 67 +++++++++++++++++ 11 files changed, 350 insertions(+) create mode 100644 keyboards/launchpad/config.h create mode 100644 keyboards/launchpad/keymaps/default/keymap.c create mode 100644 keyboards/launchpad/keymaps/default/rules.mk create mode 100644 keyboards/launchpad/launchpad.c create mode 100644 keyboards/launchpad/launchpad.h create mode 100644 keyboards/launchpad/readme.md create mode 100644 keyboards/launchpad/rev1/config.h create mode 100644 keyboards/launchpad/rev1/rev1.c create mode 100644 keyboards/launchpad/rev1/rev1.h create mode 100644 keyboards/launchpad/rev1/rules.mk create mode 100644 keyboards/launchpad/rules.mk diff --git a/keyboards/launchpad/config.h b/keyboards/launchpad/config.h new file mode 100644 index 00000000000..9d1e310d3ec --- /dev/null +++ b/keyboards/launchpad/config.h @@ -0,0 +1,75 @@ +/* +Copyright 2012 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 0x1337 +#define PRODUCT_ID 0x6007 +#define MANUFACTURER Maple Computing +#define PRODUCT Launch Pad +#define DESCRIPTION An all-in-on macropad + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 2 + +/* 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)) \ +) + +/* + * 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 + +#ifdef SUBPROJECT_rev1 + #include "rev1/config.h" +#endif + +#endif diff --git a/keyboards/launchpad/keymaps/default/keymap.c b/keyboards/launchpad/keymaps/default/keymap.c new file mode 100644 index 00000000000..67103576d97 --- /dev/null +++ b/keyboards/launchpad/keymaps/default/keymap.c @@ -0,0 +1,66 @@ +// Below layout is based upon /u/That-Canadian's planck layout +#include "launchpad.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 _FUNC 15 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// Defines for task manager and such +#define CALTDEL LCTL(LALT(KC_DEL)) +#define TSKMGR LCTL(LSFT(KC_ESC)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Qwerty + * ,-------------. + * | 1 | 2 | + * |------+------| + * | 3 | 4 | + * |------+------| + * | 5 | 6 | + * |------+------| + * | FUNC | 8 | + * `-------------' + */ +[_QWERTY] = LAYOUT( \ + KC_1, KC_2, \ + KC_3, KC_4, \ + KC_5, KC_6, \ + MO(_FUNC), KC_8 \ +), + +/* Function + * ,-------------. + * | Q |CALDEL| + * |------+------| + * | A |TSKMGR| + * |------+------| + * | Z | X | + * |------+------| + * | | C | + * `-------------' + */ +[_FUNC] = LAYOUT( \ + KC_Q, CALTDEL, \ + KC_A, TSKMGR, \ + KC_Z, KC_X, \ + _______, KC_C \ +) + +}; + +void matrix_init_user(void) { + +} diff --git a/keyboards/launchpad/keymaps/default/rules.mk b/keyboards/launchpad/keymaps/default/rules.mk new file mode 100644 index 00000000000..260b9d8fad6 --- /dev/null +++ b/keyboards/launchpad/keymaps/default/rules.mk @@ -0,0 +1,25 @@ + + +# 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 = 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 # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +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. + +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/launchpad/launchpad.c b/keyboards/launchpad/launchpad.c new file mode 100644 index 00000000000..cc2812a76c6 --- /dev/null +++ b/keyboards/launchpad/launchpad.c @@ -0,0 +1 @@ +#include "launchpad.h" diff --git a/keyboards/launchpad/launchpad.h b/keyboards/launchpad/launchpad.h new file mode 100644 index 00000000000..85432de0ad2 --- /dev/null +++ b/keyboards/launchpad/launchpad.h @@ -0,0 +1,11 @@ +#ifndef LAUNCHPAD_H +#define LAUNCHPAD_H + +#ifdef KEYBOARD_launchpad_rev1 + #include "rev1.h" +#endif + +#include "quantum.h" + + +#endif diff --git a/keyboards/launchpad/readme.md b/keyboards/launchpad/readme.md new file mode 100644 index 00000000000..80b5de32191 --- /dev/null +++ b/keyboards/launchpad/readme.md @@ -0,0 +1,32 @@ +Launch Pad +=== + +![Launch Pad](https://i.imgur.com/WVTe0Ku.png) + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +A budget-minded, 4-8 key macro-pad with built in legs, plate & case. + +Supports MX & Alps switches. 2x 1u or 1x 2u supported for each row. + +Supports 2u PCB-Mount stabilizers. + +Runs off of 1x Pro Micro & 8x diodes (1n4148). + +Optional "Reset" switch can be used on the PCB. + +A fantastic project for beginners to learn to solder, veteran's of the hobby who want to add an easy macro-pad to their collection, and everyone in between. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +Make example for this keyboard (after setting up your build environment): + + make launchpad/rev1: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. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + +Due to PCB tolerance issues outside of our control, the snap-apart legs included on the PCB may need extra padding to prevent a small amount of wobbling once placed properly. We have included small, clear, and semi-permanent "glue dots" in each order (PCB Only -and- Full Kit) to help with this. You may also use plastic wrap, tape, Elmer's glue, hot glue, rubber cement, etc. We advise against using anything more "permanent" in case you wish to make changes to your Launch Pad in the future. It is also best to attach legs after all of your soldering and building is finished, to get the most accurate feel for your Launch Pad. + +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- \ No newline at end of file diff --git a/keyboards/launchpad/rev1/config.h b/keyboards/launchpad/rev1/config.h new file mode 100644 index 00000000000..67a4154226f --- /dev/null +++ b/keyboards/launchpad/rev1/config.h @@ -0,0 +1,32 @@ +/* +Copyright 2012 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 REV1_CONFIG_H +#define REV1_CONFIG_H + +#include "../config.h" + +#define DEVICE_VER 0x0001 + +/* Let's Macro V2 pin-out */ +#define MATRIX_ROW_PINS { C6, B1, B3, D7 } +#define MATRIX_COL_PINS { D2, F7 } +#define UNUSED_PINS + +#define DIODE_DIRECTION COL2ROW + +#endif diff --git a/keyboards/launchpad/rev1/rev1.c b/keyboards/launchpad/rev1/rev1.c new file mode 100644 index 00000000000..a7aec80e10f --- /dev/null +++ b/keyboards/launchpad/rev1/rev1.c @@ -0,0 +1,14 @@ +#include "launchpad.h" + +void matrix_init_kb(void) { + + // JTAG disable for PORT F. write JTD bit twice within four cycles. + MCUCR |= (1< Date: Fri, 20 Apr 2018 08:52:56 -0700 Subject: [PATCH 019/152] QMK Configurator support for alps64 pcb (#2774) * Change KEYMAP to LAYOUT * add layouts that match the layouts hasu has defined for alps64 * add layouts in info.json for aek, standard, and infinity * Add LAYOUT_iso and LAYOUT_all along with respective info.json LAYOUTs --- keyboards/alps64/alps64.h | 72 ++++++++++++++++++++++- keyboards/alps64/info.json | 28 +++++++++ keyboards/alps64/keymaps/default/keymap.c | 2 +- 3 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 keyboards/alps64/info.json diff --git a/keyboards/alps64/alps64.h b/keyboards/alps64/alps64.h index 83af132dfc6..a7ac93421cb 100644 --- a/keyboards/alps64/alps64.h +++ b/keyboards/alps64/alps64.h @@ -21,7 +21,7 @@ along with this program. If not, see . /* Alps64 keymap definition macro */ -#define KEYMAP( \ +#define LAYOUT_all( \ K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K26, K27, \ K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \ K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \ @@ -38,7 +38,75 @@ along with this program. If not, see . { K70, K71, K72, K73, K74, K75, K76, K77 } \ } -#define KC_KEYMAP( \ +#define LAYOUT_iso( \ + K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K27, \ + K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \ + K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \ + K31, K41, K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, \ + K30, K40, K50, K60, K70, K00, K20 \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07 }, \ + { KC_NO, K11, K12, K13, K14, K15, K16, K17 }, \ + { K20, K21, KC_NO, K23, K24, K25, KC_NO, K27 }, \ + { K30, K31, K32, K33, K34, K35, K36, K37 }, \ + { K40, K41, K42, K43, K44, K45, K46, K47 }, \ + { K50, K51, K52, K53, K54, K55, K56, K57 }, \ + { K60, K61, K62, K63, K64, K65, K66, K67 }, \ + { K70, K71, K72, K73, K74, K75, K76, K77 } \ +} + +#define LAYOUT_standard_60( \ + K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K27, \ + K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \ + K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \ + K31, K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, \ + K30, K40, K50, K60, K70, K00, K10, K20 \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07 }, \ + { K10, K11, K12, K13, K14, K15, K16, K17 }, \ + { K20, K21, KC_NO, K23, K24, K25, KC_NO, K27 }, \ + { K30, K31, K32, K33, K34, K35, K36, K37 }, \ + { K40, KC_NO, K42, K43, K44, K45, K46, K47 }, \ + { K50, K51, K52, K53, K54, K55, K56, K57 }, \ + { K60, K61, K62, K63, K64, K65, K66, K67 }, \ + { K70, K71, K72, K73, K74, K75, K76, K77 } \ +} + +#define LAYOUT_infinity( \ + K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K26, K27, \ + K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \ + K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \ + K31, K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, K22, \ + K30, K40, K50, K60, K70, K00, K10, K20 \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07 }, \ + { K10, K11, K12, K13, K14, K15, K16, K17 }, \ + { K20, K21, K22, K23, K24, K25, K26, K27 }, \ + { K30, K31, K32, K33, K34, K35, K36, K37 }, \ + { K40, KC_NO, K42, K43, K44, K45, K46, K47 }, \ + { K50, K51, K52, K53, K54, K55, K56, K57 }, \ + { K60, K61, K62, K63, K64, K65, K66, K67 }, \ + { K70, K71, K72, K73, K74, K75, K76, K77 } \ +} + +#define LAYOUT_aek_103( \ + K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K27, \ + K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \ + K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \ + K31, K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, \ + K30, K40, K50, K60, K70, K00, K20 \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07 }, \ + { KC_NO, K11, K12, K13, K14, K15, K16, K17 }, \ + { K20, K21, KC_NO, K23, K24, K25, KC_NO, K27 }, \ + { K30, K31, K32, K33, K34, K35, K36, K37 }, \ + { K40, KC_NO, K42, K43, K44, K45, K46, K47 }, \ + { K50, K51, K52, K53, K54, K55, K56, K57 }, \ + { K60, K61, K62, K63, K64, K65, K66, K67 }, \ + { K70, K71, K72, K73, K74, K75, K76, K77 } \ +} + +#define LAYOUT_kc( \ K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K26, K27, \ K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \ K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \ diff --git a/keyboards/alps64/info.json b/keyboards/alps64/info.json new file mode 100644 index 00000000000..41735cf7ea8 --- /dev/null +++ b/keyboards/alps64/info.json @@ -0,0 +1,28 @@ +{ + "keyboard_name": "alps64", + "url": "", + "maintainer": "qmk", + "width": 15, + "height": 5, + "layouts": { + "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}, {"label":"Enter", "x":12.75, "y":2, "w":2.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}] + }, + + "LAYOUT_standard_60": { + "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}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"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.25}, {"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":2.75}, {"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}] + }, + + "LAYOUT_infinity": { + "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}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"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.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"label":"Alt", "x":10, "y":4, "w":1.5}, {"label":"Win", "x":11.5, "y":4}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}] + }, + + "LAYOUT_aek_103": { + "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}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"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.25}, {"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":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4, "w":1.25}, {"label":"Alt", "x":2.75, "y":4, "w":1.5}, {"x":4.25, "y":4, "w":6.5}, {"label":"Alt", "x":10.75, "y":4, "w":1.5}, {"label":"Menu", "x":12.25, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}] + }, + + "LAYOUT_iso": { + "layout": [{"label":"\u00ac", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "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":"Backspace", "x":13, "y":0, "w":2}, {"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":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"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":"~", "x":12.75, "y":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "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":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"AltGr", "x":11, "y":4, "w":1.5}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}] + } + } +} diff --git a/keyboards/alps64/keymaps/default/keymap.c b/keyboards/alps64/keymaps/default/keymap.c index 49ef9b2bf3a..12f78952dfe 100644 --- a/keyboards/alps64/keymaps/default/keymap.c +++ b/keyboards/alps64/keymaps/default/keymap.c @@ -2,7 +2,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* 0: qwerty */ - KC_KEYMAP( \ + LAYOUT_kc( \ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS, BSPC, \ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \ CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \ From ded93909446b633f3d296d3a360505330c1f9155 Mon Sep 17 00:00:00 2001 From: Salt-Peanuts Date: Fri, 20 Apr 2018 11:53:35 -0400 Subject: [PATCH 020/152] Updated folder name; overdue updates to keymap and readme files (#2770) * Updated info and fixed minor errors * Updated folder name; overdue updates to keymap and readme files Updated folder name; overdue updates to keymap and readme files --- .../{salty => insertsnideremarks}/config.h | 4 +- .../keymaps/insertsnideremarks/keymap.c | 681 ++++++++++++++++++ .../keymaps/insertsnideremarks/readme.md | 249 +++++++ .../{salty => insertsnideremarks}/rules.mk | 7 +- keyboards/kinesis/keymaps/salty/keymap.c | 433 ----------- keyboards/kinesis/keymaps/salty/readme.md | 14 - 6 files changed, 937 insertions(+), 451 deletions(-) rename keyboards/kinesis/keymaps/{salty => insertsnideremarks}/config.h (64%) create mode 100644 keyboards/kinesis/keymaps/insertsnideremarks/keymap.c create mode 100644 keyboards/kinesis/keymaps/insertsnideremarks/readme.md rename keyboards/kinesis/keymaps/{salty => insertsnideremarks}/rules.mk (86%) delete mode 100644 keyboards/kinesis/keymaps/salty/keymap.c delete mode 100644 keyboards/kinesis/keymaps/salty/readme.md diff --git a/keyboards/kinesis/keymaps/salty/config.h b/keyboards/kinesis/keymaps/insertsnideremarks/config.h similarity index 64% rename from keyboards/kinesis/keymaps/salty/config.h rename to keyboards/kinesis/keymaps/insertsnideremarks/config.h index 5afb8043502..38d08b20c8b 100644 --- a/keyboards/kinesis/keymaps/salty/config.h +++ b/keyboards/kinesis/keymaps/insertsnideremarks/config.h @@ -5,6 +5,8 @@ #include "../../config.h" // place overrides here -#define TAPPING_TERM 200 +#define PREVENT_STUCK_MODIFIERS +#define TAPPING_TERM 175 + #endif diff --git a/keyboards/kinesis/keymaps/insertsnideremarks/keymap.c b/keyboards/kinesis/keymaps/insertsnideremarks/keymap.c new file mode 100644 index 00000000000..8885867ee87 --- /dev/null +++ b/keyboards/kinesis/keymaps/insertsnideremarks/keymap.c @@ -0,0 +1,681 @@ +#include "kinesis.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +enum kinesis_layers { + _CMODDH, // Colemak Mod-DH Matrix (default layer) + _QWERTY, // Qwerty + _COLEMAK, // Colemak + _NUMBERS, // Numbers & Symbols + _NUMBERS2, // Numbers & Symbols 2 (identical as _NUMBERS; basically used for tri-layer access to _ADJUST) + _FUNCTION, // Function + _FUNCTION2, // Function 2 (identical as _FUNCTION; used to allow for easier use of space and backspace while using function layer arrows) + _NUMPAD, // Numpad + _CMODDHGM, // Colemak Mod-DH Matrix gaming/vanilla (no dual-role keys with layer access) + _QWERTYGM, // QWERTY gaming/vanilla (no dual-role keys with layer access) + _ADJUST // Adjust layer +}; + +enum kinesis_keycodes { + CMODDH = SAFE_RANGE, + QWERTY, + COLEMAK, + CMODDHGM, + QWERTYGM, + SPCFN = LT(_FUNCTION, KC_SPC), + BSPCFN = LT(_FUNCTION2, KC_BSPC), + ENTNS = LT(_NUMBERS, KC_ENT), + DELNS = LT(_NUMBERS2, KC_DEL), + CTLESC = CTL_T(KC_ESC), + NKROTG = MAGIC_TOGGLE_NKRO +}; + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +//Tap Dance Declarations +enum { + ADJ = 0, + LBCB, + RBCB, + EQPL, + PLEQ, + MNUN, + SLAS, + GVTL, + PPLEQ, + PMNUN, + PSLPAS +}; + +void dance_LAYER_finished(qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 2) { + layer_on(_ADJUST); + set_oneshot_layer(_ADJUST, ONESHOT_START); + } +} +void dance_LAYER_reset(qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 2) { + layer_off(_ADJUST); + clear_oneshot_layer_state(ONESHOT_PRESSED); + } +} + +qk_tap_dance_action_t tap_dance_actions[] = { +[ADJ] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_LAYER_finished, dance_LAYER_reset), // Double-tap to activate Adjust layer via oneshot layer +[LBCB] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LCBR), // Left bracket on a single-tap, left brace on a double-tap +[RBCB] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RCBR), // Right bracket on a single-tap, right brace on a double-tap +[EQPL] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS), // Plus sign on a single-tap, equal sign on a double-tap +[PLEQ] = ACTION_TAP_DANCE_DOUBLE(KC_PLUS, KC_EQL), // Equal sign on a single-tap, plus sign on a double-tap +[MNUN] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS), // Minus sign on a single-tap, underscore on a double-tap +[SLAS] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_ASTR), // Slash in a single-tap, asterisk in a double-tap +[GVTL] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_TILD), // Grave on a single-tap, tilde on a double-tap +[PPLEQ] = ACTION_TAP_DANCE_DOUBLE(KC_PPLS, KC_EQL), // Numpad plus sign on a single-tap, equal sign on a double-tap +[PMNUN] = ACTION_TAP_DANCE_DOUBLE(KC_PMNS, KC_UNDS), // Numpad minus sign on a single-tap, underscore on a double-tap +[PSLPAS] = ACTION_TAP_DANCE_DOUBLE(KC_PSLS, KC_PAST) // Numpad slash on a single-tap, numpad asterisk on a double-tap +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Colemak Mod-DH Matrix +* (Defauit layer; keys separated by /: tap for first, hold for second; uses Space Cadet Shifts) +* ,-----------------------------------------------------------------------------------------------------------. +* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst| +* `-----------------------------------------------------------------------------------------------------------' +* ,-------------------------------------------. ,-------------------------------------------. +* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | Tab | Q | W | F | P | B | | J | L | U | Y | ; | \ | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* |Esc/Ctrl| A | R | S | T | G | | M | N | E | I | O | ' | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* |SC Shift| Z | X | C | D | V | | K | H | , | . | / |SC Shift| +* `--------+------+------+------+------+------' `------+------+------+------+------+--------' +* | Ins | ` | [ | ] | | Left | Down | Up | Right| +* `---------------------------' `---------------------------' +* ,---------------. ,---------------. +* |Esc/Ctl| Hyper | | RAlt | RCtl | +* ,-------|-------|-------| |-------+-------+-------. +* | Space | Enter |App/Alt| | RGUI | Delete| Bspc | +* | / | / |-------| |-------| / | / | +* | Fn | Number| Bspc | | Tab |Number2| Fn2 | +* `-----------------------' `-----------------------' +*/ +[_CMODDH] = KEYMAP( + // Left Hand + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, + CTLESC, KC_A, KC_R, KC_S, KC_T, KC_G, + KC_LSPO, KC_Z, KC_X, KC_C, KC_D, KC_V, + KC_INS, KC_GRV, KC_LBRC, KC_RBRC, + //Left Thumb + CTLESC, ALL_T(KC_NO), + ALT_T(KC_APP), + SPCFN, ENTNS, KC_BSPC, + //Right Hand + KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_NUMPAD), MO(_ADJUST), + KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, + KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + //Right Thumb + KC_RALT, KC_RCTL, + KC_RGUI, + KC_TAB, DELNS, BSPCFN +), + +/* QWERTY +* (Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts) +* ,-----------------------------------------------------------------------------------------------------------. +* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst| +* `-----------------------------------------------------------------------------------------------------------' +* ,-------------------------------------------. ,-------------------------------------------. +* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* |Esc/Ctrl| A | S | D | F | G | | H | J | K | L | ; | ' | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* |SC Shift| Z | X | C | V | B | | N | M | , | . | / |SC Shift| +* `--------+------+------+------+------+------' `------+------+------+------+------+--------' +* | Ins | ` | [ | ] | | Left | Down | Up | Right| +* `---------------------------' `---------------------------' +* ,---------------. ,---------------. +* |Esc/Ctl| Hyper | | RAlt | RCtl | +* ,-------|-------|-------| |-------+-------+-------. +* | Space | Enter |App/Alt| | RGUI | Delete| Bspc | +* | / | / |-------| |-------| / | / | +* | Fn | Number| Bspc | | Tab |Number2| Fn2 | +* `-----------------------' `-----------------------' +*/ +[_QWERTY] = KEYMAP( + // Left Hand + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, + CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, + KC_INS, KC_GRV, KC_LBRC, KC_RBRC, + //Left Thumb + CTLESC, ALL_T(KC_NO), + ALT_T(KC_APP), + SPCFN, ENTNS, KC_BSPC, + + //Right Hand + KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_NUMPAD), MO(_ADJUST), + KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + //Right Thumb + KC_RALT, KC_RCTL, + KC_RGUI, + KC_TAB, DELNS, BSPCFN +), + +/* Colemak +* (Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts) +* ,-----------------------------------------------------------------------------------------------------------. +* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst| +* `-----------------------------------------------------------------------------------------------------------' +* ,-------------------------------------------. ,-------------------------------------------. +* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* |Esc/Ctrl| A | R | S | T | D | | H | N | E | I | O | ' | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* |SC Shift| Z | X | C | V | B | | K | M | , | . | / |SC Shift| +* `--------+------+------+------+------+------' `------+------+------+------+------+--------' +* | Ins | ` | [ | ] | | Left | Down | Up | Right| +* `---------------------------' `---------------------------' +* ,---------------. ,---------------. +* |Esc/Ctl| Hyper | | RAlt | RCtl | +* ,-------|-------|-------| |-------+-------+-------. +* | Space | Enter |App/Alt| | RGUI | Delete| Bspc | +* | / | / |-------| |-------| / | / | +* | Fn | Number| Bspc | | Tab |Number2| Fn2 | +* `-----------------------' `-----------------------' +*/ +[_COLEMAK] = KEYMAP( + // Left Hand + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, + CTLESC, KC_A, KC_R, KC_S, KC_T, KC_D, + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, + KC_INS, KC_GRV, KC_LBRC, KC_RBRC, + //Left Thumb + CTLESC, ALL_T(KC_NO), + ALT_T(KC_APP), + SPCFN, ENTNS, KC_BSPC, + //Right Hand + KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_NUMPAD), MO(_ADJUST), + KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, + KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + //Right Thumb + KC_RALT, KC_RCTL, + KC_RGUI, + KC_TAB, DELNS, BSPCFN +), + +/* Number/symbol layer +* (Multiple characters: single-tap for first, double-tap for second) +* ,-----------------------------------------------------------------------------------------------------------. +* | | | | | | | | | | | | | | | | | | | +* `-----------------------------------------------------------------------------------------------------------' +* ,-------------------------------------------. ,-------------------------------------------. +* | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | | 6 | 7 | 8 | 9 | 0 | | ^ | & | * | ( | ) | | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | | 1 | 2 | 3 | 4 | 5 | | ! | @ | # | $ | % | | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | | | . | / * | - _ | + = | | ` ~ | [ { | ] } | | | | +* `--------+------+------+------+------+------' `------+------+------+------+------+--------' +* | ( | ) | [ { | ] } | | | | | | +* `---------------------------' `---------------------------' +* ,---------------. ,---------------. +* | | | | | | +* ,-------|-------|-------| |-------+-------+-------. +* | | | | | | | | +* | | |-------| |-------| | | +* | | | | | | | | +* `-----------------------' `-----------------------' +*/ +[_NUMBERS] = KEYMAP( + // Left Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, + _______, KC_6, KC_7, KC_8, KC_9, KC_0, + _______, KC_1, KC_2, KC_3, KC_4, KC_5, + _______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ), + KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB), + // Left Thumb + _______, _______, + _______, + _______, _______, _______, + // Right Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, + TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______, + _______, _______, _______, _______, + // Right Thumb + _______, _______, + _______, + _______, _______, _______ +), + +[_NUMBERS2] = KEYMAP( + // Left Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, + _______, KC_6, KC_7, KC_8, KC_9, KC_0, + _______, KC_1, KC_2, KC_3, KC_4, KC_5, + _______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ), + KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB), + // Left Thumb + _______, _______, + _______, + _______, _______, _______, + // Right Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, + TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______, + _______, _______, _______, _______, + // Right Thumb + _______, _______, + _______, + _______, _______, _______ +), + +/* Function layer +* ,-----------------------------------------------------------------------------------------------------------. +* | | | | | | | | | | | | | | | | | | | +* `-----------------------------------------------------------------------------------------------------------' +* ,-------------------------------------------. ,-------------------------------------------. +* | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | | | | Up | | | | | | Up |Ctrl+Y| | | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | |Ctrl+A| Left | Down | Right|C+A+Tb| | PgUp | Right| Down | Left | Home | | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | |Ctrl+Z|Ctrl+X|Ctrl+C|Ctrl+V| Bspc | | PgDn | Mute | Vol- | Vol+ | End | | +* `--------+------+------+------+------+------' `------+------+------+------+------+--------' +* | | | | | | Prev | Play | Next | Stop | +* `---------------------------' `---------------------------' +* ,---------------. ,---------------. +* | | | | | | +* ,-------|-------|-------| |-------+-------+-------. +* | | | | | | | | +* | | |-------| |-------| | | +* | | | | |C+A+Tab| | | +* `-----------------------' `-----------------------' +*/ +[_FUNCTION] = KEYMAP( + // Left Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, + _______, _______, _______, KC_UP, _______, _______, + _______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB), + _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC, + _______, _______, _______, _______, + // Left Thumb + _______, _______, + _______, + _______, _______, _______, + // Right Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______, _______, KC_UP, LCTL(KC_Y), _______, _______, + KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______, + KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______, + KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, + // Right Thumb + _______, _______, + _______, + LCA(KC_TAB), _______, _______ +), + +[_FUNCTION2] = KEYMAP( + // Left Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, + _______, _______, _______, KC_UP, _______, _______, + _______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB), + _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC, + _______, _______, _______, _______, + // Left Thumb + _______, _______, + _______, + _______, _______, _______, + // Right Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______, _______, KC_UP, LCTL(KC_Y), _______, _______, + KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______, + KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______, + KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, + // Right Thumb + _______, _______, + _______, + LCA(KC_TAB), _______, _______ +), + +/* Numpad layer +* (Left side duplicates layout from the Numbers layer, just with numpad output; right side layout close to PC numpad layout) +* ,-----------------------------------------------------------------------------------------------------------. +* | | | | | | | | | | | | | | | | | | | +* `-----------------------------------------------------------------------------------------------------------' +* ,-------------------------------------------. ,-------------------------------------------. +* | | NumLk| | | | | | Tab | NumLk| KP / | kP *| KP - | | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | | KP 6 | KP 7 | KP 8 | KP 9 | KP 0 | | | KP 7 | KP 8 | KP 9 | KP + | | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | | KP 1 | KP 2 | KP 3 | KP 4 | KP 5 | | | KP 4 | KP 5 | KP 6 | = | | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | | | KP . |KP/KP*| KP- _| KP+ =| | | KP 1 | KP 2 | KP 3 |KP Ent| | +* `--------+------+------+------+------+------' `------+------+------+------+------+--------' +* | ( | ) | [ { | ] } | | KP 0 | , | KP . |KP Ent| +* `---------------------------' `---------------------------' +* ,---------------. ,---------------. +* | | | | | | +* ,-------|-------|-------| |-------+-------+-------. +* | | | | | | | | +* | | |-------| |-------| | | +* | | | | | | | | +* `-----------------------' `-----------------------' +*/ +[_NUMPAD] = KEYMAP( + // Left Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_NLCK, _______, _______, _______, _______, + _______, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, + _______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, + _______, _______, KC_PDOT, TD(PSLPAS), TD(PMNUN), TD(PPLEQ), + KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB), + // Left Thumb + _______, _______, + _______, + _______, _______, _______, + // Right Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_TAB, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______, + _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______, + _______, KC_P4, KC_P5, KC_P6, KC_EQL, _______, + _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______, + KC_P0, KC_COMM, KC_PDOT, KC_PENT, + // Right Thumb + _______, _______, + _______, + _______, _______, _______ +), + +/* Colemak Mod-DH Matrix gaming/vanilla +* (No access to Function or Numbers layers; mainly used for gaming; double-tap the TD(ADJ) above LAlt to access Adjust layer) +* ,-----------------------------------------------------------------------------------------------------------. +* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst| +* `-----------------------------------------------------------------------------------------------------------' +* ,-------------------------------------------. ,-------------------------------------------. +* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | Tab | Q | W | F | P | B | | J | L | U | Y | ; | \ | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | Ctrl | A | R | S | T | G | | M | N | E | I | O | ' | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | Shift | Z | X | C | D | V | | K | H | , | . | / | Shift | +* `--------+------+------+------+------+------' `------+------+------+------+------+--------' +* | Ins | ` | [ | ] | | Left | Down | Up | Right| +* `---------------------------' `---------------------------' +* ,---------------. ,---------------. +* |Esc/Ctl|TD(ADJ)| | RAlt | RCtl | +* ,-------|-------|-------| |-------+-------+-------. +* | | | LAlt | | RGUI | | | +* | Space | Enter |-------| |-------| Delete| Bspc | +* | | | Bspc | | Tab | | | +* `-----------------------' `-----------------------' +*/ +[_CMODDHGM] = KEYMAP( + // Left Hand + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, + KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, + KC_INS, KC_GRV, KC_LBRC, KC_RBRC, + //Left Thumb + CTLESC, TD(ADJ), + KC_LALT, + KC_SPC, KC_ENT, KC_BSPC, + //Right Hand + KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_NUMPAD), MO(_ADJUST), + KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, + KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + //Right Thumb + KC_RALT, KC_RCTL, + KC_RGUI, + KC_TAB, KC_DEL, KC_BSPC +), + +/* QWERTY gaming/vanilla +* (No access to Function or Numbers layers; mainly used for gaming; double-tap the TD(ADJ) above LAlt to access Adjust layer) +* ,-----------------------------------------------------------------------------------------------------------. +* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst| +* `-----------------------------------------------------------------------------------------------------------' +* ,-------------------------------------------. ,-------------------------------------------. +* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | Shift | Z | X | C | V | B | | N | M | , | . | / | Shift | +* `--------+------+------+------+------+------' `------+------+------+------+------+--------' +* | Ins | ` | [ | ] | | Left | Down | Up | Right| +* `---------------------------' `---------------------------' +* ,---------------. ,---------------. +* |Esc/Ctl|TD(ADJ)| | RAlt | RCtl | +* ,-------|-------|-------| |-------+-------+-------. +* | | | LAlt | | RGUI | | | +* | Space | Enter |-------| |-------| Delete| Bspc | +* | | | Bspc | | Tab | | | +* `-----------------------' `-----------------------' +*/ +[_QWERTYGM] = KEYMAP( + // Left Hand + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, + KC_INS, KC_GRV, KC_LBRC, KC_RBRC, + //Left Thumb + CTLESC, TD(ADJ), + KC_LALT, + KC_SPC, KC_ENT, KC_BSPC, + //Right Hand + KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_NUMPAD), MO(_ADJUST), + KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + //Right Thumb + KC_RALT, KC_RCTL, + KC_RGUI, + KC_TAB, KC_DEL, KC_BSPC +), + +/* Adjust layer +* (Enter/Number + Delete/Number2 under non-gaming/vanilla layers) +* ,-----------------------------------------------------------------------------------------------------------. +* | | | | | | | | | | | | | | | | | | | +* `-----------------------------------------------------------------------------------------------------------' +* ,-------------------------------------------. ,-------------------------------------------. +* | |CModDH|Qwerty|Colmak|CMoDGM| QWGM | |Numpad| | | | | RESET | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | | | | | | | | | | | | | | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | | | | | | | | |NKROTG| | | | | +* |--------+------+------+------+------+------| |------+------+------+------+------+--------| +* | | | | | | | | | | | | | | +* `--------+------+------+------+------+------' `------+------+------+------+------+--------' +* | | | | | | | | | | +* `---------------------------' `---------------------------' +* ,---------------. ,---------------. +* | | | | | | +* ,-------|-------|-------| |-------+-------+-------. +* | | | | | | | | +* | | |-------| |-------| | | +* | | | | | | | | +* `-----------------------' `-----------------------' +*/ +[_ADJUST] = KEYMAP( + // Left Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, CMODDH, QWERTY, COLEMAK, CMODDHGM, QWERTYGM, + _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, + // Left Thumb + _______, _______, + _______, + _______, _______, _______, + // Right Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + TG(_NUMPAD), _______, _______, _______, _______, RESET, + _______, _______, _______, _______, _______, _______, + _______, NKROTG, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, + // Right Thumb + _______, _______, + _______, + _______, _______, _______ +) + +}; + +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 CMODDH: + if (record->event.pressed) { + persistent_default_layer_set(1UL << _CMODDH); + layer_off ( _QWERTY); + layer_off ( _COLEMAK); + layer_off ( _NUMBERS); + layer_off ( _NUMBERS2); + layer_off ( _FUNCTION); + layer_off ( _FUNCTION2); + layer_off ( _NUMPAD); + layer_off ( _CMODDHGM); + layer_off ( _QWERTYGM); + layer_off ( _ADJUST); + } + return false; + break; + case QWERTY: + if (record->event.pressed) { + persistent_default_layer_set(1UL << _QWERTY); + layer_off ( _CMODDH); + layer_off ( _COLEMAK); + layer_off ( _NUMBERS); + layer_off ( _NUMBERS2); + layer_off ( _FUNCTION); + layer_off ( _FUNCTION2); + layer_off ( _NUMPAD); + layer_off ( _CMODDHGM); + layer_off ( _QWERTYGM); + layer_off ( _ADJUST); + } + return false; + break; + case COLEMAK: + if (record->event.pressed) { + persistent_default_layer_set(1UL << _COLEMAK); + layer_off ( _CMODDH); + layer_off ( _QWERTY); + layer_off ( _NUMBERS); + layer_off ( _NUMBERS2); + layer_off ( _FUNCTION); + layer_off ( _FUNCTION2); + layer_off ( _NUMPAD); + layer_off ( _CMODDHGM); + layer_off ( _QWERTYGM); + layer_off ( _ADJUST); + } + return false; + break; + case CMODDHGM: + if (record->event.pressed) { + default_layer_set(1UL << _CMODDHGM); + layer_off ( _CMODDH); + layer_off ( _QWERTY); + layer_off ( _COLEMAK); + layer_off ( _NUMBERS); + layer_off ( _NUMBERS2); + layer_off ( _FUNCTION); + layer_off ( _FUNCTION2); + layer_off ( _NUMPAD); + layer_off ( _QWERTYGM); + layer_off ( _ADJUST); + } + return false; + break; + case QWERTYGM: + if (record->event.pressed) { + default_layer_set(1UL << _QWERTYGM); + layer_off ( _CMODDH); + layer_off ( _QWERTY); + layer_off ( _COLEMAK); + layer_off ( _NUMBERS); + layer_off ( _NUMBERS2); + layer_off ( _FUNCTION); + layer_off ( _FUNCTION2); + layer_off ( _NUMPAD); + layer_off ( _CMODDHGM); + layer_off ( _ADJUST); + } + return false; + break; + case ENTNS: + if (record->event.pressed) { + layer_on(_NUMBERS); + update_tri_layer(_NUMBERS, _NUMBERS2, _ADJUST); + } else { + layer_off(_NUMBERS); + update_tri_layer(_NUMBERS, _NUMBERS2, _ADJUST); + } + break; + case DELNS: + if (record->event.pressed) { + layer_on(_NUMBERS2); + update_tri_layer(_NUMBERS, _NUMBERS2, _ADJUST); + } else { + layer_off(_NUMBERS2); + update_tri_layer(_NUMBERS, _NUMBERS2, _ADJUST); + } + break; + } + return true; +} \ No newline at end of file diff --git a/keyboards/kinesis/keymaps/insertsnideremarks/readme.md b/keyboards/kinesis/keymaps/insertsnideremarks/readme.md new file mode 100644 index 00000000000..1920d4f9b81 --- /dev/null +++ b/keyboards/kinesis/keymaps/insertsnideremarks/readme.md @@ -0,0 +1,249 @@ +# insertsnideremarks' Kinesis Keymap + +These layouts are derived from what I was using on my Kinesis Contoured keyboards with Hasu's TMK converters. With the move to QMK via Stapelberg replacement controller, I've cleaned up the layouts a bit while adding more functions and layers. + +There are minor changes in the base keywell layout of non-alpha keys (e.g., CapsLock is ESC/Ctl, arrow clusters on one side), while the thumb clusters deviate more from the default layout. + +Changes to the thumb clusters include: +* The navigations keys moved to function layers. +* The function of 2u keys have been reversed - I've always used space with my left thumb, and I find it more helpful to have access to Space and Enter while using my mouse/trackball. +* Backspace have been duplicated on both clusters. +* The 2u keys serve dual function as momentary layer switchers. + +I've largely left the function keys untouched, with the intension of not using them. They are neither easy to use nor reach due to their locations and size, and, prior to Advantage2, particularly terrible rubber domes were used for them. They have since updated the keys with Cherry ML switches on Advantage2, but did not resolve the issues of size or location. Additionally, leaving the function keys unused here makes it easier for me to adapt the keymaps to my other keyboards, most of which do not have physical function keys. + +I use Colemak Mod-DH Matrix as my default layout. There QWERTY and Colemak layouts as well. + +Additionally, I've added gaming/vanilla version of Colemak Mod-DH Matrix and QWERTY layouts. These layouts have no access to the Function or Numbers layers, thus no dual-role keys with layer access, and are mainly used for gaming. + +Persistent default layer has been enabled for Colemak Mod-DH Matrix, QWERTY, and Colemak. The gaming/vanilla Colemak Mod-DH Matrix and QWERTY can be set as default layer, but will not be persistent. + +## Future plans + +* Add status LEDs to the Stapelberg PCB (usually used for Caps Lock, Num Lock, and Scroll Lock). May configure it as layer indicator. +* Add a speaker now that QMK supports additional pins for audio use. +* Utilize the leftover spots on the key matrix, as well as unused pins on Teensy to run macropad and/or foot pedals. + + +### Colemak Mod-DH Matrix + (Default layer, keys separated by /: tap for first, hold for second; uses Space Cadet Shifts) + ,-----------------------------------------------------------------------------------------------------------. + | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst| + `-----------------------------------------------------------------------------------------------------------' + ,-------------------------------------------. ,-------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | Tab | Q | W | F | P | B | | J | L | U | Y | ; | \ | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + |Esc/Ctrl| A | R | S | T | G | | M | N | E | I | O | ' | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + |SC Shift| Z | X | C | D | V | | K | H | , | . | / |SC Shift| + `--------+------+------+------+------+------' `------+------+------+------+------+--------' + | Ins | ` | [ | ] | | Left | Down | Up | Right| + `---------------------------' `---------------------------' + ,---------------. ,---------------. + |Esc/Ctl| Hyper | | RAlt | RCtl | + ,-------|-------|-------| |-------+-------+-------. + | Space | Enter |App/Alt| | RGUI | Delete| Bspc | + | / | / |-------| |-------| / | / | + | Fn | Number| Bspc | | Tab |Number2| Fn2 | + `-----------------------' `-----------------------' + + +### QWERTY + (Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts) + ,-----------------------------------------------------------------------------------------------------------. + | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst| + `-----------------------------------------------------------------------------------------------------------' + ,-------------------------------------------. ,-------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + |Esc/Ctrl| A | S | D | F | G | | H | J | K | L | ; | ' | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + |SC Shift| Z | X | C | V | B | | N | M | , | . | / |SC Shift| + `--------+------+------+------+------+------' `------+------+------+------+------+--------' + | Ins | ` | [ | ] | | Left | Down | Up | Right| + `---------------------------' `---------------------------' + ,---------------. ,---------------. + |Esc/Ctl| Hyper | | RAlt | RCtl | + ,-------|-------|-------| |-------+-------+-------. + | Space | Enter |App/Alt| | RGUI | Delete| Bspc | + | / | / |-------| |-------| / | / | + | Fn | Number| Bspc | | Tab |Number2| Fn2 | + `-----------------------' `-----------------------' + + +### Colemak + (Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts) + ,-----------------------------------------------------------------------------------------------------------. + | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst| + `-----------------------------------------------------------------------------------------------------------' + ,-------------------------------------------. ,-------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + |Esc/Ctrl| A | R | S | T | D | | H | N | E | I | O | ' | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + |SC Shift| Z | X | C | V | B | | K | M | , | . | / |SC Shift| + `--------+------+------+------+------+------' `------+------+------+------+------+--------' + | Ins | ` | [ | ] | | Left | Down | Up | Right| + `---------------------------' `---------------------------' + ,---------------. ,---------------. + |Esc/Ctl| Hyper | | RAlt | RCtl | + ,-------|-------|-------| |-------+-------+-------. + | Space | Enter |App/Alt| | RGUI | Delete| Bspc | + | / | / |-------| |-------| / | / | + | Fn | Number| Bspc | | Tab |Number2| Fn2 | + `-----------------------' `-----------------------' + + +### Numbers & Symbols layer + (Multiple characters: single-tap for first, double-tap for second) + ,-----------------------------------------------------------------------------------------------------------. + | | | | | | | | | | | | | | | | | | | + `-----------------------------------------------------------------------------------------------------------' + ,-------------------------------------------. ,-------------------------------------------. + | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | | 6 | 7 | 8 | 9 | 0 | | ^ | & | * | ( | ) | | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | | 1 | 2 | 3 | 4 | 5 | | ! | @ | # | $ | % | | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | | | . | / * | - _ | + = | | ` ~ | [ { | ] } | | | | + `--------+------+------+------+------+------' `------+------+------+------+------+--------' + | ( | ) | [ { | ] } | | | | | | + `---------------------------' `---------------------------' + ,---------------. ,---------------. + | | | | | | + ,-------|-------|-------| |-------+-------+-------. + | | | | | | | | + | | |-------| |-------| | | + | | | | | | | | + `-----------------------' `-----------------------' + + +### Function layer + ,-----------------------------------------------------------------------------------------------------------. + | | | | | | | | | | | | | | | | | | | + `-----------------------------------------------------------------------------------------------------------' + ,-------------------------------------------. ,-------------------------------------------. + | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | | | | Up | | | | | | Up |Ctrl+Y| | | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | |Ctrl+A| Left | Down | Right| | | PgUp | Right| Down | Left | Home | | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | |Ctrl+Z|Ctrl+X|Ctrl+C|Ctrl+V| | | PgDn | Mute | Vol- | Vol+ | End | | + `--------+------+------+------+------+------' `------+------+------+------+------+--------' + | | | | | | Prev | Play | Next | Stop | + `---------------------------' `---------------------------' + ,---------------. ,---------------. + | | | | | | + ,-------|-------|-------| |-------+-------+-------. + | | | | | | | | + | | |-------| |-------| | | + | | | | |C+A+Tab| | | + `-----------------------' `-----------------------' + + +### Numpad layer + (Left side duplicates layout from the Numbers layer, just with numpad output; right side layout close to PC numpad layout) + ,-----------------------------------------------------------------------------------------------------------. + | | | | | | | | | | | | | | | | | | | + `-----------------------------------------------------------------------------------------------------------' + ,-------------------------------------------. ,-------------------------------------------. + | | NumLk| | | | | | Tab | NumLk| KP / | kP *| KP - | | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | | KP 6 | KP 7 | KP 8 | KP 9 | KP 0 | | | KP 7 | KP 8 | KP 9 | KP + | | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | | KP 1 | KP 2 | KP 3 | KP 4 | KP 5 | | | KP 4 | KP 5 | KP 6 | = | | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | | | KP . |KP/KP*| KP- _| KP+ =| | | KP 1 | KP 2 | KP 3 |KP Ent| | + `--------+------+------+------+------+------' `------+------+------+------+------+--------' + | ( | ) | [ { | ] } | | KP 0 | , | KP . |KP Ent| + `---------------------------' `---------------------------' + ,---------------. ,---------------. + | | | | | | + ,-------|-------|-------| |-------+-------+-------. + | | | | | | | | + | | |-------| |-------| | | + | | | | | | | | + `-----------------------' `-----------------------' + + +### Colemak Mod-DH Matrix gaming/vanilla + (No access to Function or Numbers layers; mainly used for gaming; double-tap TD(ADJ) for one shot access to Adjust layer) + ,-----------------------------------------------------------------------------------------------------------. + | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst| + `-----------------------------------------------------------------------------------------------------------' + ,-------------------------------------------. ,-------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | Tab | Q | W | F | P | B | | J | L | U | Y | ; | \ | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | Ctrl | A | R | S | T | G | | M | N | E | I | O | ' | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | Shift | Z | X | C | D | V | | K | H | , | . | / | Shift | + `--------+------+------+------+------+------' `------+------+------+------+------+--------' + | Ins | ` | [ | ] | | Left | Down | Up | Right| + `---------------------------' `---------------------------' + ,---------------. ,---------------. + |Esc/Ctl|TD(ADJ)| | RAlt | RCtl | + ,-------|-------|-------| |-------+-------+-------. + | | | LAlt | | RGUI | | | + | Space | Enter |-------| |-------| Delete| Bspc | + | | | Bspc | | Tab | | | + `-----------------------' `-----------------------' + + +### QWERTY gaming/vanilla + (No access to Function or Numbers layers; mainly used for gaming; double-tap TD(ADJ) for one shot access to Adjust layer) + ,-----------------------------------------------------------------------------------------------------------. + | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst| + `-----------------------------------------------------------------------------------------------------------' + ,-------------------------------------------. ,-------------------------------------------. + | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | Shift | Z | X | C | V | B | | N | M | , | . | / | Shift | + `--------+------+------+------+------+------' `------+------+------+------+------+--------' + | Ins | ` | [ | ] | | Left | Down | Up | Right| + `---------------------------' `---------------------------' + ,---------------. ,---------------. + |Esc/Ctl|TD(ADJ)| | RAlt | RCtl | + ,-------|-------|-------| |-------+-------+-------. + | | | LAlt | | RGUI | | | + | Space | Enter |-------| |-------| Delete| Bspc | + | | | Bspc | | Tab | | | + `-----------------------' `-----------------------' + +### Adjust layer + (Press Enter/Number + Delete/Number2 together under non-gaming/vanilla layers; Numpad is a toggle) + ,-----------------------------------------------------------------------------------------------------------. + | | | | | | | | | | | | | | | | | | | + `-----------------------------------------------------------------------------------------------------------' + ,-------------------------------------------. ,------------------------------------------ + | |CModDH|Qwerty|Colmak|CMoDGM| QWGM | |Numpad| | | | | RESET | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | | | | | | | | | | | | | | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | | | | | | | | | NKRO | | | | | + |--------+------+------+------+------+------| |------+------+------+------+------+--------| + | | | | | | | | | | | | | | + `--------+------+------+------+------+------' `------+------+------+------+------+--------' + | | | | | | | | | | + `---------------------------' `---------------------------' + ,---------------. ,---------------. + | | | | | | + ,-------|-------|-------| |-------+-------+-------. + | | | | | | | | + | | |-------| |-------| | | + | | | | | | | | + `-----------------------' `-----------------------' + \ No newline at end of file diff --git a/keyboards/kinesis/keymaps/salty/rules.mk b/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk similarity index 86% rename from keyboards/kinesis/keymaps/salty/rules.mk rename to keyboards/kinesis/keymaps/insertsnideremarks/rules.mk index e08bf38c8bf..e1af05cb442 100644 --- a/keyboards/kinesis/keymaps/salty/rules.mk +++ b/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk @@ -2,11 +2,13 @@ # change to "no" to disable the options, or define them in the Makefile in # the appropriate keymap folder that will get included automatically # +DEFAULT_FOLDER = kinesis/stapelberg + 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 = yes # Commands for debug and configuration +CONSOLE_ENABLE = yes # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality MIDI_ENABLE = no # MIDI controls @@ -16,7 +18,6 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend TAP_DANCE_ENABLE = yes # Enable Tap Dancing function -KEY_LOCK_ENABLE = yes # Enable key lock ifndef QUANTUM_DIR include ../../../../Makefile diff --git a/keyboards/kinesis/keymaps/salty/keymap.c b/keyboards/kinesis/keymaps/salty/keymap.c deleted file mode 100644 index bfbb17adc66..00000000000 --- a/keyboards/kinesis/keymaps/salty/keymap.c +++ /dev/null @@ -1,433 +0,0 @@ -#include "kinesis.h" -#include "action_layer.h" -#include "eeconfig.h" - -#define _QW 0 // Base QWERTY -#define _CM 1 // Colemak -#define _QG 2 // QWERTY gaming -#define _NS 3 // Number/Symbol -#define _NP 4 // Numpad -#define _LY 5 // Layer switcher -#define _FN 6 // Function -#define _FN2 7 // Function 2 (identical as _FN; used to deal with minor key interaction issue) - -#define _______ KC_TRNS -#define XXXXXXX KC_NO - -//Tap Dance Declarations -enum { - LPN_LBC, - RPN_RBC -}; - -qk_tap_dance_action_t tap_dance_actions[] = { -[LPN_LBC] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_LBRC), -[RPN_RBC] = ACTION_TAP_DANCE_DOUBLE(KC_RPRN, KC_RBRC) -}; - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* QWERTY -* (Keys separated by /: tap for first, hold for second) -* ,-----------------------------------------------------------------------------------------------------------. -* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Layer| -* `-----------------------------------------------------------------------------------------------------------' -* ,-------------------------------------------. ,-------------------------------------------. -* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | Esc | A | S | D | F | G | | H | J | K | L | ; | ' | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | Shift | Z | X | C | V | B | | N | M | , | . | / | Shift | -* `--------+------+------+------+------+------' `------+------+------+------+------+--------' -* | ` | | [ | ] | | Left | Down | Up | Right| -* `---------------------------' `---------------------------' -* ,--------------. ,--------------. -* | LCtl | LAlt | | RAlt | RCtl | -* ,------|-------|------| |------+-------+------. -* | Space| Enter | App | | RGUI | Delete| Bspc | -* | / | / |------| |------| / | / | -* | Fn | Number| Bspc | | Enter| Number| Fn2 | -* `---------------------' `---------------------' -*/ -[_QW] = KEYMAP( - // Left Hand - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, - KC_GRV, XXXXXXX, KC_LBRC, KC_RBRC, - //Left Thumb - KC_LCTL, KC_LALT, - KC_APP, - LT(_FN, KC_SPC), LT(_NS, KC_ENT), KC_BSPC, - //Right Hand - KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_NP), MO(_LY), - KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, - //Right Thumb - KC_RALT, KC_RCTL, - KC_RGUI, - KC_ENT, LT(_NS, KC_DEL), LT(_FN2, KC_BSPC) -), - -/* Colemak -* (Keys separated by /: tap for first, hold for second) -* ,-----------------------------------------------------------------------------------------------------------. -* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Layer| -* `-----------------------------------------------------------------------------------------------------------' -* ,-------------------------------------------. ,-------------------------------------------. -* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | Esc | A | R | S | T | D | | H | N | E | I | O | ' | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | Shift | Z | X | C | V | B | | K | M | , | . | / | Shift | -* `--------+------+------+------+------+------' `------+------+------+------+------+--------' -* | ` | | [ | ] | | Left | Down | Up | Right| -* `---------------------------' `---------------------------' -* ,--------------. ,--------------. -* | LCtl | LAlt | | RAlt | RCtl | -* ,------|-------|------| |------+-------+------. -* | Space| Enter | App | | RGUI | Delete| Bspc | -* | / | / |------| |------| / | / | -* | Fn | Number| Bspc | | Enter| Number| Fn2 | -* `---------------------' `---------------------' -*/ -[_CM] = KEYMAP( - // Left Hand - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, - KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, - KC_GRV, XXXXXXX, KC_LBRC, KC_RBRC, - //Left Thumb - KC_LCTL, KC_LALT, - KC_APP, - LT(_FN, KC_SPC), LT(_NS, KC_ENT), KC_BSPC, - //Right Hand - KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_NP), MO(_LY), - KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, - KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, - KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, - //Right Thumb - KC_RALT, KC_RCTL, - KC_RGUI, - KC_ENT, LT(_NS, KC_DEL), LT(_FN2, KC_BSPC) -), - -/* QWERTY Gaming -* (Keys separated by /: tap for first, hold for second; no access to Fn layer) -* ,-----------------------------------------------------------------------------------------------------------. -* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Layer| -* `-----------------------------------------------------------------------------------------------------------' -* ,-------------------------------------------. ,-------------------------------------------. -* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | Esc | A | S | D | F | G | | H | J | K | L | ; | ' | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | Shift | Z | X | C | V | B | | N | M | , | . | / | Shift | -* `--------+------+------+------+------+------' `------+------+------+------+------+--------' -* | ` | | [ | ] | | Left | Down | Up | Right| -* `---------------------------' `---------------------------' -* ,--------------. ,--------------. -* | LCtl | LAlt | | RAlt | RCtl | -* ,------|-------|------| |------+-------+------. -* | | Enter | | | RGUI | Delete| | -* | Space| / |------| |------| / | Bspc | -* | | Number| Bspc | | Enter| Number| | -* `---------------------' `---------------------' -*/ -[_QG] = KEYMAP( - // Left Hand - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, - KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, - KC_GRV, XXXXXXX, KC_LBRC, KC_RBRC, - //Left Thumb - KC_LCTL, KC_LALT, - XXXXXXX, - KC_SPC, LT(_NS, KC_ENT), KC_BSPC, - //Right Hand - KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_NP), MO(_LY), - KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, - KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, - KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, - KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, - //Right Thumb - KC_RALT, KC_RCTL, - KC_RGUI, - KC_ENT, LT(_NS, KC_DEL), KC_BSPC -), - -/* Number/symbol layer -* ,-----------------------------------------------------------------------------------------------------------. -* | | | | | | | | | | | | | | | | | | | -* `-----------------------------------------------------------------------------------------------------------' -* ,-------------------------------------------. ,-------------------------------------------. -* | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | | ! | @ | # | $ | % | | ^ | & | * | ` | ~ | | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | | = | { | [ | ( | + | | _ | ) | ] | } | - | | -* `--------+------+------+------+------+------' `------+------+------+------+------+--------' -* | | | | | | | | | | -* `---------------------------' `---------------------------' -* ,-------------. ,-------------. -* | | | | | | -* ,------|------|------| |------+------+------. -* | | | | | | | | -* | | |------| |------| | | -* | | | | | | | | -* `--------------------' `--------------------' -*/ -[_NS] = KEYMAP( - // Left Hand - _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, - _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, - _______, KC_1, KC_2, KC_3, KC_4, KC_5, - _______, KC_EQL, KC_LCBR, KC_LBRC, KC_LPRN, KC_PLUS, - _______, _______, _______, _______, - // Left Thumb - _______, _______, - _______, - _______, _______, _______, - // Right Hand - _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_CIRC, KC_AMPR, KC_ASTR, KC_GRV, KC_TILD, _______, - KC_6, KC_7, KC_8, KC_9, KC_0, _______, - KC_UNDS, KC_RPRN, KC_RBRC, KC_RCBR, KC_MINS, _______, - _______, _______, _______, _______, - // Right Thumb - _______, _______, - _______, - _______, _______, _______ -), - -/* Numpad layer -* ,-----------------------------------------------------------------------------------------------------------. -* | | | | | | | | | | | | | | | | | | | -* `-----------------------------------------------------------------------------------------------------------' -* ,-------------------------------------------. ,-------------------------------------------. -* | | | | | | | | NumLk| Tab | KP / | kP *| KP - | | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | | | | Up | | | | | KP 7 | KP 8 | KP 9 | KP + | | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | | | Left | Down | Right| | | | KP 4 | KP 5 | KP 6 | KP = | | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| | -* `--------+------+------+------+------+------' `------+------+------+------+------+--------' -* | | INS | | | | | KP , | KP . |KP Ent| -* `---------------------------' `---------------------------' -* ,-------------. ,-------------. -* | | | | | | -* ,------|------|------| |------+------+------. -* | | | | | | | | -* | | |------| |------| | KP 0 | -* | | | | | | | | -* `--------------------' `--------------------' -*/ -[_NP] = KEYMAP( - // Left Hand - _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, - _______, _______, _______, KC_UP, _______, _______, - _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, - _______, _______, _______, _______, _______, _______, - _______, KC_INS, _______, _______, - // Left Thumb - _______, _______, - _______, - _______, _______, _______, - // Right Hand - _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_NLCK, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS, _______, - _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______, - _______, KC_P4, KC_P5, KC_P6, KC_PEQL, _______, - _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______, - _______, KC_PCMM, KC_PDOT, KC_PENT, - // Right Thumb - _______, _______, - _______, - _______, _______, KC_P0 -), - -/* Layer switch layer -* ,-----------------------------------------------------------------------------------------------------------. -* | | | | | | | | | | | | | | | | | | | -* `-----------------------------------------------------------------------------------------------------------' -* ,-------------------------------------------. ,-------------------------------------------. -* | |QWERTY|Colemk|QW GM | | | | | | | | | | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | | | | | | | | | | | | | | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | | | | | | | | | | | | | | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | | | | | | | | | | | | | | -* `--------+------+------+------+------+------' `------+------+------+------+------+--------' -* | | | | | | | | | | -* `---------------------------' `---------------------------' -* ,-------------. ,-------------. -* | | | | | | -* ,------|------|------| |------+------+------. -* | | | | | | | | -* | | |------| |------| | | -* | | | | | | | | -* `--------------------' `--------------------' -*/ -[_LY] = KEYMAP( - // Left Hand - _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, DF(_QW), DF(_CM), DF(_QG), _______, _______, - _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, - // Left Thumb - _______, _______, - _______, - _______, _______, _______, - // Right Hand - _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, - // Right Thumb - _______, _______, - _______, - _______, _______, _______ -), - -/* Function layer -* ,-----------------------------------------------------------------------------------------------------------. -* | | | | | | | | | |RESET| | | | | | | | | -* `-----------------------------------------------------------------------------------------------------------' -* ,-------------------------------------------. ,-------------------------------------------. -* | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | | | | Up | |Alt+Tb| | | Home | Up | End | | | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | | | Left | Down | Right| | | PgUp | Right| Down | Left | | | -* |--------+------+------+------+------+------| |------+------+------+------+------+--------| -* | | | Prev | Play | Next | Stop | | PgDn | Mute | Vol- | Vol+ | | | -* `--------+------+------+------+------+------' `------+------+------+------+------+--------' -* | | INS | | | | | | | | -* `---------------------------' `---------------------------' -* ,-------------. ,-------------. -* | | | | | | -* ,------|------|------| |------+------+------. -* | | | | | | | | -* | | |------| |------| | | -* | | | | | | | | -* `--------------------' `--------------------' -*/ -[_FN] = KEYMAP( - // Left Hand - _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, - _______, _______, _______, KC_UP, _______, LALT(KC_TAB), - _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, - _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, - _______, KC_INS, _______, _______, - // Left Thumb - _______, _______, - _______, - _______, _______, _______, - // Right Hand - RESET, _______, _______, _______, _______, _______, _______, _______, _______, - KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - _______, KC_HOME, KC_UP, KC_END, _______, _______, - KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, - KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, - _______, _______, _______, _______, - // Right Thumb - _______, _______, - _______, - _______, _______, _______ -), - -[_FN2] = KEYMAP( - // Left Hand - _______, _______, _______, _______, _______, _______, _______, _______, _______, - KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, - _______, _______, _______, KC_UP, _______, LALT(KC_TAB), - _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, - _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, - _______, KC_INS, _______, _______, - // Left Thumb - _______, _______, - _______, - _______, _______, _______, - // Right Hand - RESET, _______, _______, _______, _______, _______, _______, _______, _______, - KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - _______, KC_HOME, KC_UP, KC_END, _______, _______, - KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, - KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, - _______, _______, _______, _______, - // Right Thumb - _______, _______, - _______, - _______, _______, _______ -) - -}; - -const uint16_t PROGMEM fn_actions[] = { - -}; - -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; -}; - - -void matrix_init_user(void) { - -} - -void matrix_scan_user(void) { - -} - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - return true; -} - -void led_set_user(uint8_t usb_led) { - -} - - - diff --git a/keyboards/kinesis/keymaps/salty/readme.md b/keyboards/kinesis/keymaps/salty/readme.md deleted file mode 100644 index 4c709642391..00000000000 --- a/keyboards/kinesis/keymaps/salty/readme.md +++ /dev/null @@ -1,14 +0,0 @@ -# Salty's Kinesis Keymap - -These layouts are derived from what I was using on my Kinesis Contoured keyboards through TMK converters. With the move to QMK through Stapelberg replacement controller, I've cleaned up the layouts a bit while adding number/symbol layer. - -There are only minor changes in the base keywell layout (e.g., CapsLock is ESC, arrow clusters on one side), while the thumb clusters deviate more from the default layout. - -Changes to the thumb clusters include: -* The navigations keys moved to Fn layers. -* The function of 2u keys have been reversed - I've always used space with my left thumb, and I find it more helpful to have access to Space and Enter while using my mouse/trackball. -* Enter and Backspace have been duplicated on both clusters. -* The 2u keys serve dual function as momentary layer switchers. - -I'm frequently fiddle around with the layouts as I find certain things I want to try out. - From 0ce2cc89154ce745bea04e10ad1ff4074ef564c9 Mon Sep 17 00:00:00 2001 From: Eric <22215921+ericywl@users.noreply.github.com> Date: Sat, 21 Apr 2018 00:12:15 +0800 Subject: [PATCH 021/152] Added dz60/eric and hhkb/eric (#2772) * added hhkb eric * dz60 and hhkb --- keyboards/dz60/keymaps/eric/keymap.c | 85 ++++++++++++++++++++++++++++ keyboards/hhkb/keymaps/eric/keymap.c | 78 +++++++++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 keyboards/dz60/keymaps/eric/keymap.c create mode 100644 keyboards/hhkb/keymaps/eric/keymap.c diff --git a/keyboards/dz60/keymaps/eric/keymap.c b/keyboards/dz60/keymaps/eric/keymap.c new file mode 100644 index 00000000000..730d750c4a0 --- /dev/null +++ b/keyboards/dz60/keymaps/eric/keymap.c @@ -0,0 +1,85 @@ +#include "dz60.h" + +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Layer 0 +* ,-----------------------------------------------------------------------------------------. +* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ~ | +* |-----------------------------------------------------------------------------------------+ +* | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bkspc | +* |-----------------------------------------------------------------------------------------+ +* | Caps | A | S | D | F | G | H | J | K | L | ; | ' | Enter | +* |-----------------------------------------------------------------------------------------+ +* | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn | +* |-----------------------------------------------------------------------------------------+ +* | Ctrl | GUI | Alt | Space | Alt | GUI | Ctrl | +* `-----------------------------------------------------------------------------------------' +*/ + + KEYMAP_2_SHIFTS( + 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_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_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, MO(1), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, MO(2)), + + + + /* Layer 1 +* ,-----------------------------------------------------------------------------------------. +* | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | INS | Del | +* |-----------------------------------------------------------------------------------------+ +* | | PGUP | UP | PGDN | HOME | & | | | | | Prnt | UP | Del | Bkspc | +* |-----------------------------------------------------------------------------------------+ +* | | LEFT | DWN | RGHT | END | * | | | PGUP | HOME | LEFT | RGHT | | +* |-----------------------------------------------------------------------------------------+ +* | | _ | + | ( | ) | | | ~ | | PGDN | END | DWN | | | +* |-----------------------------------------------------------------------------------------+ +* | | | | | | | | +* `-----------------------------------------------------------------------------------------' +*/ + + + KEYMAP_2_SHIFTS( + 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, KC_INS, KC_DEL, + KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_AMPR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_UP, KC_DEL, KC_BSPC, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_ASTR, KC_TRNS, KC_TRNS, KC_PGUP, KC_HOME, KC_LEFT, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_LPRN, KC_RPRN, KC_PIPE, KC_TILD, KC_TRNS, KC_PGDN, KC_END, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), +}; + +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; + } +} \ No newline at end of file diff --git a/keyboards/hhkb/keymaps/eric/keymap.c b/keyboards/hhkb/keymaps/eric/keymap.c new file mode 100644 index 00000000000..17351ba01ad --- /dev/null +++ b/keyboards/hhkb/keymaps/eric/keymap.c @@ -0,0 +1,78 @@ +/* -*- eval: (turn-on-orgtbl); -*- + * default HHKB Layout + */ +#include "hhkb.h" + +#define BASE 0 +#define HHKB 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* BASE Level: Default Layer + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | | + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | | + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | | + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + + |------+------+-----------------------+------+------| + | LAlt | LGUI | ******* Space ******* | RGUI | RAlt | + |------+------+-----------------------+------+------| + */ + + [BASE] = KEYMAP( // default layer + 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(HHKB), \ + KC_LGUI, KC_LALT, /* */ KC_SPC, KC_RALT, KC_RGUI), + + + + /* Layer HHKB: HHKB mode (HHKB Fn) + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | Caps | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | | PgU | Up | PgD | Hm | & | | | | | Psc | Up | Del | Backs | | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | | Lef | Dow | Rig | En | * | | | PgU | Hom | Lef | Rig | Enter | | | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | | _ | + | ( | ) | | | ~ | | PgD | End | Dow | | | | | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + + |------+------+----------------------+------+------+ + | **** | **** | ******************** | **** | **** | + |------+------+----------------------+------+------+ + + */ + + [HHKB] = KEYMAP( + KC_CAPS, 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_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_AMPR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_UP, KC_DEL, KC_BSPC, \ + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_ASTR, KC_TRNS, KC_TRNS, KC_PGUP, KC_HOME, KC_LEFT, KC_RGHT, KC_TRNS, \ + KC_TRNS, KC_UNDS, KC_PLUS, KC_LPRN, KC_RPRN, KC_PIPE, KC_TILD, KC_TRNS, KC_PGDN, KC_END, KC_DOWN, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)}; + + +const uint16_t PROGMEM fn_actions[] = { + +}; + +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; +}; From 3ea8bcb8ae768f43218a5d1e0934867059259f92 Mon Sep 17 00:00:00 2001 From: Thanh Hai Mai Date: Fri, 20 Apr 2018 09:13:14 -0700 Subject: [PATCH 022/152] Add Carpalx keymap for Kinesis (#2771) --- keyboards/kinesis/keymaps/carpalx/config.h | 8 + keyboards/kinesis/keymaps/carpalx/keymap.c | 203 ++++++++++++++++++++ keyboards/kinesis/keymaps/carpalx/readme.md | 83 ++++++++ keyboards/kinesis/keymaps/carpalx/rules.mk | 21 ++ 4 files changed, 315 insertions(+) create mode 100644 keyboards/kinesis/keymaps/carpalx/config.h create mode 100644 keyboards/kinesis/keymaps/carpalx/keymap.c create mode 100644 keyboards/kinesis/keymaps/carpalx/readme.md create mode 100644 keyboards/kinesis/keymaps/carpalx/rules.mk diff --git a/keyboards/kinesis/keymaps/carpalx/config.h b/keyboards/kinesis/keymaps/carpalx/config.h new file mode 100644 index 00000000000..8893d122e04 --- /dev/null +++ b/keyboards/kinesis/keymaps/carpalx/config.h @@ -0,0 +1,8 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "../../config.h" + +// place overrides here + +#endif diff --git a/keyboards/kinesis/keymaps/carpalx/keymap.c b/keyboards/kinesis/keymaps/carpalx/keymap.c new file mode 100644 index 00000000000..0ef454bc2d2 --- /dev/null +++ b/keyboards/kinesis/keymaps/carpalx/keymap.c @@ -0,0 +1,203 @@ +#include "kinesis.h" +#include "action_layer.h" +#include "eeconfig.h" + +extern keymap_config_t keymap_config; + +#define _CX 0 // Carpalx layer +#define _QW 1 // Qwerty layer +#define _KP 2 // Keypad + Media Layer + +// Macro name shortcuts +#define DVORAK M(_DV) +#define QWERTY M(_QW) +#define COLEMAK M(_CM) + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +/* + + Function Keys on All Layers (Keypad toggles): + ,---------------------------------------------------------------. + | L0 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | + `---------------------------------------------------------------' + ,---------------------------------------------------------------. + | F9 | F10 | F11 | F12 | PSCR | L1 | L2 | L2 | RESET | + `---------------------------------------------------------------' + + L0 Carpalx layer: + ,-------------------------------------------.,-------------------------------------------. + | Del | 1 | 3 | 5 | 7 | 9 || 0 | 8 | 6 | 4 | 2 | - | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | Tab | Q | G | M | L | W || B | Y | U | V | ; | = | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | ESC | D | S | T | N | R || I | A | E | O | H | ' | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | LShift | Z | X | C | F | J || K | P | , | . | / | RShift | + `--------+------+------+------+------+------'`------+------+------+------+------+--------' + | ` | [ | Left | Rght | | Dn | Up | ] | \ | + `---------------------------' `---------------------------' + ,----------------.,----------------. + | LCtl | LAlt || LAlt | RCtl | + ,------|-------|--------||--------+-------+-------. + | | | RGUI || RGUI | | | + | BkSp | ESC |--------||--------| Enter | Space | + | | | MO(L2) || MO(L2) | | | + `-----------------------'`------------------------' + + L1 QWERTY layer: + ,-------------------------------------------.,-------------------------------------------. + | Del | 1 | 3 | 5 | 7 | 9 || 0 | 8 | 6 | 4 | 2 | - | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | Tab | Q | W | E | R | T || Y | U | I | O | P | = | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | ESC | A | S | D | F | G || H | J | K | L | ; | ' | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | LShift | Z | X | C | V | B || N | M | , | . | / | RShift | + `--------+------+------+------+------+------'`------+------+------+------+------+--------' + | ` | [ | Left | Rght | | Dn | Up | ] | \ | + `---------------------------' `---------------------------' + ,----------------.,----------------. + | LCtl | LAlt || LAlt | RCtl | + ,------|-------|--------||--------+-------+-------. + | | | RGUI || RGUI | | | + | BkSp | ESC |--------||--------| Enter | Space | + | | | MO(L1) || MO(L2) | | | + `-----------------------'`------------------------' + + L2 Keypad + Media layer: + ,-------------------------------------------.,-------------------------------------------. + | | | | | | || | NmLk | KP = | KP / | KP * | | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | | | Mute | Vol- | Vol+ | || | KP 7 | KP 8 | KP 9 | KP - | | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | | Stop | Prev | Play | Next | Sel || | KP 4 | KP 5 | KP 6 | KP + | | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | | | | | | || | KP 1 | KP 2 | KP 3 |KP Ent| | + `--------+------+------+------+------+------'`------+------+------+------+------+--------' + | | | | | | ( | ) | KP . |KP Ent| | + `---------------------------' `----------------------------------' + ,----------------.,----------------. + | | || | | + ,------|-------|--------||--------+-------+-------. + | | | || | | | + | | |--------||--------|KP Entr| KP 0 | + | | | || | | | + `-----------------------'`------------------------' +*/ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_CX] = KEYMAP( + // Left Hand + TO(_CX), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, + KC_DEL, KC_1, KC_3, KC_5, KC_7, KC_9, + KC_TAB, KC_Q, KC_G, KC_M, KC_L, KC_W, + KC_ESC, KC_D, KC_S, KC_T, KC_N, KC_R, + KC_LSFT, KC_Z, KC_X, KC_C, KC_F, KC_J, + KC_GRV, KC_LBRC, KC_LEFT, KC_RGHT, + // Left Thumb + KC_LCTL, KC_LALT, + KC_RGUI, + KC_BSPC, KC_ESC, MO(_KP), + + // Right Hand + KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, TO(_QW), TO(_KP), TO(_KP), RESET, + KC_0, KC_8, KC_6, KC_4, KC_2, KC_MINS, + KC_B, KC_Y, KC_U, KC_V, KC_SCLN, KC_EQL, + KC_I, KC_A, KC_E, KC_O, KC_H, KC_QUOT, + KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_DOWN, KC_UP, KC_RBRC, KC_BSLS, + // Right Thumb + KC_RALT, KC_RCTL, + KC_RGUI, + MO(_KP), KC_ENT, KC_SPC + ), + +[_QW] = KEYMAP( + // Left Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, + _______, KC_Q, KC_W, KC_E, KC_R, KC_T, + _______, KC_A, KC_S, KC_D, KC_F, KC_G, + _______, KC_Z, KC_X, KC_C, KC_V, KC_B, + _______, _______, _______, _______, + // Left Thumb + _______, _______, + _______, + _______, _______, _______, + + // Right Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, + KC_Y, KC_U, KC_I, KC_O, KC_P, _______, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, _______, + KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, + _______, _______, _______, _______, + // Right Thumb + _______, _______, + _______, + _______, _______, _______ + ), + +[_KP] = KEYMAP( + // Left Hand + _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, + _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, + _______, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSEL, + _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, + // Left Thumb + _______, _______, + _______, + _______, _______, _______, + + // Right Hand */ + _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_NLCK, KC_PEQL, KC_PSLS, KC_PAST, _______, + _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______, + _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, + _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______, + KC_LPRN, KC_RPRN, KC_PDOT, KC_PENT, + // Right Thumb + _______, _______, + _______, + _______, KC_PENT, KC_P0 + ) + +}; + + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void persistent_default_layer_set(uint16_t default_layer) { + eeconfig_update_default_layer(default_layer); + default_layer_set(default_layer); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case _CX: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_CX); + } + break; + case _QW: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_QW); + } + break; + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { + +}; diff --git a/keyboards/kinesis/keymaps/carpalx/readme.md b/keyboards/kinesis/keymaps/carpalx/readme.md new file mode 100644 index 00000000000..aa57b60a52a --- /dev/null +++ b/keyboards/kinesis/keymaps/carpalx/readme.md @@ -0,0 +1,83 @@ +# Carpalx Kinesis Keymap + +## About this keymap + +Carpalx layout (also known as QGMLWBY) is an optimized alternative keyboard layout. +Learn more about it at: +[http://mkweb.bcgsc.ca/carpalx/?popular_alternatives]() + +The layout also includes a QWERTY layer to help with the transition. + - Scroll Lock: QWERTY layer + - Esc (Fn row): Carpalx layer + - Keypad: Keypad and Media layer + +## Details mapping + + Function Keys on All Layers (Keypad toggles): + ,---------------------------------------------------------------. + | L0 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | + `---------------------------------------------------------------' + ,---------------------------------------------------------------. + | F9 | F10 | F11 | F12 | PSCR | L1 | L2 | L2 | RESET | + `---------------------------------------------------------------' + + L0 Carpalx layer: + ,-------------------------------------------.,-------------------------------------------. + | Del | 1 | 3 | 5 | 7 | 9 || 0 | 8 | 6 | 4 | 2 | - | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | Tab | Q | G | M | L | W || B | Y | U | V | ; | = | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | ESC | D | S | T | N | R || I | A | E | O | H | ' | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | LShift | Z | X | C | F | J || K | P | , | . | / | RShift | + `--------+------+------+------+------+------'`------+------+------+------+------+--------' + | ` | [ | Left | Rght | | Dn | Up | ] | \ | + `---------------------------' `---------------------------' + ,----------------.,----------------. + | LCtl | LAlt || LAlt | RCtl | + ,------|-------|--------||--------+-------+-------. + | | | RGUI || RGUI | | | + | BkSp | ESC |--------||--------| Enter | Space | + | | | MO(L2) || MO(L2) | | | + `-----------------------'`------------------------' + + L1 QWERTY layer: + ,-------------------------------------------.,-------------------------------------------. + | Del | 1 | 3 | 5 | 7 | 9 || 0 | 8 | 6 | 4 | 2 | - | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | Tab | Q | W | E | R | T || Y | U | I | O | P | = | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | ESC | A | S | D | F | G || H | J | K | L | ; | ' | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | LShift | Z | X | C | V | B || N | M | , | . | / | RShift | + `--------+------+------+------+------+------'`------+------+------+------+------+--------' + | ` | [ | Left | Rght | | Dn | Up | ] | \ | + `---------------------------' `---------------------------' + ,----------------.,----------------. + | LCtl | LAlt || LAlt | RCtl | + ,------|-------|--------||--------+-------+-------. + | | | RGUI || RGUI | | | + | BkSp | ESC |--------||--------| Enter | Space | + | | | MO(L1) || MO(L2) | | | + `-----------------------'`------------------------' + + L2 Keypad + Media layer: + ,-------------------------------------------.,-------------------------------------------. + | | | | | | || | NmLk | KP = | KP / | KP * | | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | | | Mute | Vol- | Vol+ | || | KP 7 | KP 8 | KP 9 | KP - | | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | | Stop | Prev | Play | Next | Sel || | KP 4 | KP 5 | KP 6 | KP + | | + |--------+------+------+------+------+------||------+------+------+------+------+--------| + | | | | | | || | KP 1 | KP 2 | KP 3 |KP Ent| | + `--------+------+------+------+------+------'`------+------+------+------+------+--------' + | | | | | | ( | ) | KP . |KP Ent| | + `---------------------------' `----------------------------------' + ,----------------.,----------------. + | | || | | + ,------|-------|--------||--------+-------+-------. + | | | || | | | + | | |--------||--------|KP Entr| KP 0 | + | | | || | | | + `-----------------------'`------------------------' + diff --git a/keyboards/kinesis/keymaps/carpalx/rules.mk b/keyboards/kinesis/keymaps/carpalx/rules.mk new file mode 100644 index 00000000000..1854d35df24 --- /dev/null +++ b/keyboards/kinesis/keymaps/carpalx/rules.mk @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = 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. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif From 0912c42f04e7c96c80cc9f48c258082e5ba31e2d Mon Sep 17 00:00:00 2001 From: Kenneth Aloysius Date: Sat, 21 Apr 2018 02:14:40 +1000 Subject: [PATCH 023/152] Add Staryu macropad support (#2768) * Add M6-A keymap * Update XD60 keymap * Update XD60 keymap readme * Update JJ40 and Let's Split keymaps * Add readme for M6-A * Fix typo, update JJ40 README * Update jj40 readme * Cleanup jj40 keymap * Revert Let's Split QWERTY layer to default before #2010 * Update numpad layers * Fix: Let's Split keymap getting stuck mods due to having keycodes assigned on the Raise layer * Keep ASCII art consistent with keymap * Staryu: initial port * Add personal keymap * Added and updated READMEs * Fix: default keymap for staryu * Rudimentary backlight support. * Enabled mousekeys for default keymap * use QMK_KEYBOARD_H and LAYOUT * Update readme.md for NIU mini: flash using avrdude * Fix missing linebreaks for Staryu README * Update readme.md --- keyboards/hhkb/keymaps/krusli/config.h | 1 + keyboards/hhkb/keymaps/krusli/keymap.c | 78 +++++++++++++++ keyboards/lets_split/keymaps/default/keymap.c | 15 ++- keyboards/niu_mini/readme.md | 2 +- keyboards/staryu/backlight_staryu.c | 52 ++++++++++ keyboards/staryu/backlight_staryu.h | 12 +++ keyboards/staryu/config.h | 74 ++++++++++++++ keyboards/staryu/keymaps/default/README.md | 3 + keyboards/staryu/keymaps/default/keymap.c | 82 ++++++++++++++++ keyboards/staryu/keymaps/default/rules.mk | 1 + keyboards/staryu/keymaps/krusli/README.md | 9 ++ keyboards/staryu/keymaps/krusli/keymap.c | 97 +++++++++++++++++++ keyboards/staryu/readme.md | 15 +++ keyboards/staryu/rules.mk | 60 ++++++++++++ keyboards/staryu/staryu.c | 26 +++++ keyboards/staryu/staryu.h | 28 ++++++ 16 files changed, 546 insertions(+), 9 deletions(-) create mode 100644 keyboards/hhkb/keymaps/krusli/config.h create mode 100644 keyboards/hhkb/keymaps/krusli/keymap.c create mode 100644 keyboards/staryu/backlight_staryu.c create mode 100644 keyboards/staryu/backlight_staryu.h create mode 100755 keyboards/staryu/config.h create mode 100644 keyboards/staryu/keymaps/default/README.md create mode 100755 keyboards/staryu/keymaps/default/keymap.c create mode 100644 keyboards/staryu/keymaps/default/rules.mk create mode 100644 keyboards/staryu/keymaps/krusli/README.md create mode 100644 keyboards/staryu/keymaps/krusli/keymap.c create mode 100644 keyboards/staryu/readme.md create mode 100755 keyboards/staryu/rules.mk create mode 100755 keyboards/staryu/staryu.c create mode 100755 keyboards/staryu/staryu.h diff --git a/keyboards/hhkb/keymaps/krusli/config.h b/keyboards/hhkb/keymaps/krusli/config.h new file mode 100644 index 00000000000..af2fb9d8a52 --- /dev/null +++ b/keyboards/hhkb/keymaps/krusli/config.h @@ -0,0 +1 @@ +#define USB_MAX_POWER_CONSUMPTION 100 diff --git a/keyboards/hhkb/keymaps/krusli/keymap.c b/keyboards/hhkb/keymaps/krusli/keymap.c new file mode 100644 index 00000000000..bd5dd8372d5 --- /dev/null +++ b/keyboards/hhkb/keymaps/krusli/keymap.c @@ -0,0 +1,78 @@ +/* -*- eval: (turn-on-orgtbl); -*- + * default HHKB Layout + */ +#include "hhkb.h" + +#define BASE 0 +#define HHKB 1 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* BASE Level: Default Layer + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | | + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | | + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | | + |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| + + |------+------+-----------------------+------+------| + | LAlt | LGUI | ******* Space ******* | RGUI | RAlt | + |------+------+-----------------------+------+------| + */ + + [BASE] = KEYMAP( // default layer + 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(HHKB), \ + KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), + + + + /* Layer HHKB: HHKB mode (HHKB Fn) + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + | | | | | | | + | - | End | PgD | Dow | | | | | + |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| + + |------+------+----------------------+------+------+ + | **** | **** | ******************** | **** | **** | + |------+------+----------------------+------+------+ + + */ + + [HHKB] = KEYMAP( + KC_PWR, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ + 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)}; + + +const uint16_t PROGMEM fn_actions[] = { + +}; + +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; +}; diff --git a/keyboards/lets_split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c index 7cc9e53c023..a2d9c27eb75 100644 --- a/keyboards/lets_split/keymaps/default/keymap.c +++ b/keyboards/lets_split/keymaps/default/keymap.c @@ -31,21 +31,20 @@ enum custom_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Qwerty * ,-----------------------------------------------------------------------------------. - * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Tab | A | S | D | F | G | H | J | K | L | ; | " | + * | Esc | A | S | D | F | G | H | J | K | L | ; | " | * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| * |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ - -[_QWERTY] = 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, \ - KC_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, KC_ENT , \ - KC_LCTRL,KC_LGUI, KC_LALT, ADJUST, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +[_QWERTY] = KEYMAP( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ + ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ ), /* Colemak diff --git a/keyboards/niu_mini/readme.md b/keyboards/niu_mini/readme.md index 6955343b9f0..91f0cd4b6c6 100644 --- a/keyboards/niu_mini/readme.md +++ b/keyboards/niu_mini/readme.md @@ -11,6 +11,6 @@ Hardware Availability: [KBDFans](https://kbdfans.myshopify.com/products/niu-mini Make example for this keyboard (after setting up your build environment): - make niu_mini:default + make niu_mini:default:avrdude 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/staryu/backlight_staryu.c b/keyboards/staryu/backlight_staryu.c new file mode 100644 index 00000000000..6fb9713f3a7 --- /dev/null +++ b/keyboards/staryu/backlight_staryu.c @@ -0,0 +1,52 @@ +#include "backlight.h" +#include + +/* backlighting */ +void init_backlight_led(void) +{ + DDRC |= (1< + +void init_backlight_led(void); + +void backlight_led_on(uint8_t index); + +void backlight_led_off(uint8_t index); + +#endif diff --git a/keyboards/staryu/config.h b/keyboards/staryu/config.h new file mode 100755 index 00000000000..268fe991acf --- /dev/null +++ b/keyboards/staryu/config.h @@ -0,0 +1,74 @@ +/* +Copyright 2018 Cole Markham + +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 0x1209 +#define PRODUCT_ID 0x2328 +#define DEVICE_VER 0x0205 +#define MANUFACTURER K.T.E.C. +#define PRODUCT Staryu +#define DESCRIPTION 5-key macropad + +/* key matrix size */ +#define MATRIX_ROWS 1 +#define MATRIX_COLS 5 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { } +#define MATRIX_COL_PINS { D0, D1, D2, D3, D4 } +#define UNUSED_PINS + +// from light_ws2812_config @ +// https://github.com/kairyu/tmk_keyboard_custom/tree/master/keyboard/staryu +#define RGB_DI_PIN C6 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 1 // Number of LEDs + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCING_DELAY 5 + +// TODO backlighting +#define BACKLIGHT_LEVELS 10 +// #define BACKLIGHT_PIN B7 +/* +Backlight: C2, C7, D5, D6, B0 +switch (index) { + case 0: + PORTC &= ~(1<. +*/ +#include QMK_KEYBOARD_H +#include "action_layer.h" + +enum layers { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3 +}; + + +const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { + /* Keymap 0 + * ,-----------. + * | |Up |Fn0| + * |---+---+---| + * |Lef|Dow|Rig| + * `-----------' + */ + LAYOUT( KC_UP, TO(_LAYER1), KC_LEFT,KC_DOWN,KC_RIGHT ), + /* Keymap 1 + * ,-----------. + * | |PgU|Fn1| + * |---+---+---| + * |Hom|PgD|End| + * `-----------' + */ + LAYOUT( KC_PGUP,TO(_LAYER2), KC_HOME,KC_PGDN,KC_END ), + /* Keymap 2 + * ,-----------. + * | |Sel|Fn2| + * |---+---+---| + * |Pre|Pla|Nex| + * `-----------' + */ + LAYOUT( KC_MSEL,TO(_LAYER3), KC_MPRV,KC_MPLY,KC_MNXT ), + /* Keymap 3 + * ,-----------. + * | |MsU|Fn3| + * |---+---+---| + * |MsL|MsD|MsR| + * `-----------' + */ + LAYOUT( KC_MS_U,TO(_LAYER0), KC_MS_L,KC_MS_D,KC_MS_R ), + // /* Keymap 4 + // * ,-----------. + // * | |Fn6|Fn4| + // * |---+---+---| + // * |Fn7|Fn5|Fn8| + // * `-----------' + // */ + // LAYOUT( FN6, FN4, FN7, FN5, FN8 ), +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + return MACRO_NONE ; +} + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +void led_set_user(uint8_t usb_led) { +} diff --git a/keyboards/staryu/keymaps/default/rules.mk b/keyboards/staryu/keymaps/default/rules.mk new file mode 100644 index 00000000000..6c605daecf5 --- /dev/null +++ b/keyboards/staryu/keymaps/default/rules.mk @@ -0,0 +1 @@ +MOUSEKEY_ENABLE = yes diff --git a/keyboards/staryu/keymaps/krusli/README.md b/keyboards/staryu/keymaps/krusli/README.md new file mode 100644 index 00000000000..66a0979070f --- /dev/null +++ b/keyboards/staryu/keymaps/krusli/README.md @@ -0,0 +1,9 @@ +# krusli's RAMA M6-A Layout + +Personal keymap for the RAMA M6-A. + +Top-right button acts as a "toggle between layers" button. Layer 0 -> Layer 1 -> Layer 2 -> Layer 0 -> ... + +- Layer 0: Osu! gamepad layer +- Layer 1: Git commands +- Layer 2 and 3: RGB controls diff --git a/keyboards/staryu/keymaps/krusli/keymap.c b/keyboards/staryu/keymaps/krusli/keymap.c new file mode 100644 index 00000000000..2879b68e580 --- /dev/null +++ b/keyboards/staryu/keymaps/krusli/keymap.c @@ -0,0 +1,97 @@ +/* +Copyright 2018 Kenneth Aloysius + +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 +#include "action_layer.h" + +#include "../../backlight_staryu.h" + +enum layers { + _LAYER0, + _LAYER1, + _LAYER2, + _LAYER3 +}; + +enum custom_keycodes { + GIT_ADD = SAFE_RANGE, + GIT_COMMIT, + GIT_PUSH, + MUTE, + DEAFEN +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch(keycode) { + case GIT_ADD: + SEND_STRING("git add ."SS_TAP(X_ENTER)); + break; + case GIT_COMMIT: + SEND_STRING("git commit -m "SS_DOWN(X_LSHIFT)SS_TAP(X_QUOTE)SS_UP(X_LSHIFT)); + break; + case GIT_PUSH: + SEND_STRING("git push"SS_TAP(X_ENTER)); + break; + case MUTE: + SEND_STRING(SS_LGUI(SS_LSFT("M"))); + break; + case DEAFEN: + SEND_STRING(SS_LGUI(SS_LSFT("D"))); + break; + return false; + } + } + return true; +}; + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_LAYER0] = LAYOUT( \ + KC_ESC, TO(_LAYER1), \ + KC_Z, KC_X, KC_SPACE \ + ), + [_LAYER1] = LAYOUT( \ + MUTE, TO(_LAYER2), \ + GIT_ADD, GIT_COMMIT, GIT_PUSH \ + ), + [_LAYER2] = LAYOUT( \ + RGB_MOD, TO(_LAYER3), \ + RGB_TOG, RGB_HUD, RGB_HUI \ + ), + [_LAYER3] = LAYOUT( \ + RGB_VAI, TO(_LAYER0), \ + RGB_SAD, RGB_VAD, RGB_SAI \ + ) +}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + return MACRO_NONE ; +} + +void matrix_init_user(void) { + for (int i=0; i<5; i++) { + backlight_led_on(i); + } +} + +void matrix_scan_user(void) { +} + +void led_set_user(uint8_t usb_led) { +} diff --git a/keyboards/staryu/readme.md b/keyboards/staryu/readme.md new file mode 100644 index 00000000000..bca7482bc2d --- /dev/null +++ b/keyboards/staryu/readme.md @@ -0,0 +1,15 @@ +# Staryu + +![Staryu](https://i.imgur.com/obcCpZN.jpg) + +A 5 key macropad, designed by Kai and sold by KPRepublic. + +Keyboard Maintainer: QMK Community +Hardware Supported: Staryu (only the non-lite version has been tested) +Hardware Availability: [AliExpress](https://www.aliexpress.com/item/Staryu-Mini-Macro-Pad-custom-keyboard-by-tkg-kai-Mini-macro-pad-mechanical-keyboard-5-keys/32817560746.html) + +Make example for this keyboard (after setting up your build environment): + + make staryu: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/staryu/rules.mk b/keyboards/staryu/rules.mk new file mode 100755 index 00000000000..3e043bbcd5b --- /dev/null +++ b/keyboards/staryu/rules.mk @@ -0,0 +1,60 @@ +# MCU name +MCU = atmega32u2 + +BOOTLOADER = lufa-dfu + +SRC = backlight_staryu.c + +# 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* +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# 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 = yes # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # In-switch LEDs +AUDIO_ENABLE = no # There is no available timer or pin for audio on the NovelPad +RGBLIGHT_ENABLE = yes # RGB LEDs for underglow, installed and enabled by default for the NovelPad diff --git a/keyboards/staryu/staryu.c b/keyboards/staryu/staryu.c new file mode 100755 index 00000000000..6dcaaea0e85 --- /dev/null +++ b/keyboards/staryu/staryu.c @@ -0,0 +1,26 @@ +/* +Copyright 2018 Cole Markham + +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 "staryu.h" +#include "backlight_staryu.h" + +// for keyboard subdirectory level init functions +// @Override +void matrix_init_kb(void) { + // call user level keymaps, if any + init_backlight_led(); + matrix_init_user(); +} diff --git a/keyboards/staryu/staryu.h b/keyboards/staryu/staryu.h new file mode 100755 index 00000000000..12b8be92e71 --- /dev/null +++ b/keyboards/staryu/staryu.h @@ -0,0 +1,28 @@ +/* +Copyright 2018 Cole Markham + +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 KB_H +#define KB_H +#include "quantum.h" + +#define LAYOUT( \ + K00, K01, \ + K10, K11, K12 \ +) { \ + { K00, K01, K12, K11, K10 }, \ +} + +#endif From 503335be258b3b05a3188f73ab7ee72a34485078 Mon Sep 17 00:00:00 2001 From: Christian Hartlage Date: Fri, 20 Apr 2018 18:43:51 +0200 Subject: [PATCH 024/152] Added GH60 Satan ISO layout with split right shift and split backspace (#2773) * added an iso layout that supports split backspace and split rshift * added a keymap which uses the iso layout with split backspace and split rshift * added a #define LAYOUT_ for the KEYMAP_ * fixed missing newline --- keyboards/satan/keymaps/dende_iso/keymap.c | 80 +++++++++++++++++++++ keyboards/satan/keymaps/dende_iso/readme.md | 61 ++++++++++++++++ keyboards/satan/keymaps/dende_iso/rules.mk | 21 ++++++ keyboards/satan/satan.h | 31 ++++++++ 4 files changed, 193 insertions(+) create mode 100644 keyboards/satan/keymaps/dende_iso/keymap.c create mode 100644 keyboards/satan/keymaps/dende_iso/readme.md create mode 100644 keyboards/satan/keymaps/dende_iso/rules.mk diff --git a/keyboards/satan/keymaps/dende_iso/keymap.c b/keyboards/satan/keymaps/dende_iso/keymap.c new file mode 100644 index 00000000000..9ac1cddbad1 --- /dev/null +++ b/keyboards/satan/keymaps/dende_iso/keymap.c @@ -0,0 +1,80 @@ +#include "satan.h" +#include "keymap_extras/keymap_german.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. +// 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 _DEF 0 +#define _FNK 1 +#define _MEDIA 2 + +// dual-role shortcuts +#define FN_CAPS LT(_MEDIA, KC_CAPSLOCK) + +// increase readability +#define _______ KC_TRNS + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _DEF: Default Layer + * ,------------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| ß| ´|bcksp|fn1| + * |------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Z| U| I| O| P| Ü| +| | + * |----------------------------------------------------- Return| + * |fn2 | A| S| D| F| G| H| J| K| L| Ö| Ä| # | | + * |------------------------------------------------------------| + * |Sft | < | Y| X| C| V| B| N| M| ,| .| -| RSft| del | + * |------------------------------------------------------------| + * |Ctrl|Win |Alt | Space |RAlt |Win |App|RCtrl| + * `------------------------------------------------------------' + */ +[_DEF] = LAYOUT_60_iso_split_bs_rshift( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, DE_SS, DE_ACUT, KC_BSPC, MO(_FNK), \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, DE_Z, KC_U, KC_I, KC_O, KC_P, DE_UE, DE_PLUS, \ + FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, DE_OE, DE_AE, DE_HASH, KC_ENT, \ + KC_LSFT, DE_LESS, DE_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, DE_MINS, KC_RSFT, KC_DELETE, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, DE_ALGR, KC_RGUI, KC_APP, KC_RCTL), + + + /* Keymap _FNK: Function Keys + * ,------------------------------------------------------------. + * | ^ | F1| F2| F3| F4| F5| F6| F7| F8| F9| F0|F11|F12| Ins | | + * |------------------------------------------------------------| + * | |PGU| Up|PGD| | | |Ins|Hom|PDU| | | | | + * |----------------------------------------------------- | + * | |Lft|Dwn|Rgt| | | |Del|End|PGD| | | | | + * |------------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |------------------------------------------------------------| + * | | | | | | | | | + * `------------------------------------------------------------' + */ +[_FNK] = LAYOUT_60_iso_split_bs_rshift( + DE_CIRC, 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_UP, KC_PGDOWN, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______, _______, \ + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDOWN, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______), + + /* Keymap _MEDIA: Media and Mouse Layer + * ,------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------------------------------------------------------------| + * | | | | | | | |MLC| MU|MRC| | | | | + * |----------------------------------------------------- | + * | |PRV|VLD|VLU|NXT| | | ML| MD| MR| | | | | + * |------------------------------------------------------------| + * | | | | | | | | | | | | | UP | | + * |------------------------------------------------------------| + * | | | | PLAY | |LEFT|DWN|RIGHT| + * `------------------------------------------------------------' + */ + +[_MEDIA] = LAYOUT_60_iso_split_bs_rshift( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, \ + _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP , _______, \ + _______, _______, _______, KC_MPLY, _______, KC_LEFT, KC_DOWN, KC_RIGHT), + }; diff --git a/keyboards/satan/keymaps/dende_iso/readme.md b/keyboards/satan/keymaps/dende_iso/readme.md new file mode 100644 index 00000000000..238a2f725f0 --- /dev/null +++ b/keyboards/satan/keymaps/dende_iso/readme.md @@ -0,0 +1,61 @@ +# Satan GH60 ISO-DE Layout with split backspace and right shift + +![Layout Image](https://i.imgur.com/a7znS69.jpg) + +## Default Layer +This ISO-DE based layout has a split backspace. the left part is the actual backspace and the right parts serves as a FN key. +The right shift is also split, with the right part serving as the del key. +``` +/* Keymap _DEF: Default Layer + * ,------------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| ß| ´|bcksp|fn1| + * |------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Z| U| I| O| P| Ü| +| | + * |----------------------------------------------------- Return| + * |fn2 | A| S| D| F| G| H| J| K| L| Ö| Ä| # | | + * |------------------------------------------------------------| + * |Sft | < | Y| X| C| V| B| N| M| ,| .| -| RSft| del | + * |------------------------------------------------------------| + * |Ctrl|Win |Alt | Space |RAlt |Win |App|RCtrl| + * `------------------------------------------------------------' + */ +``` + + +## FN Key Layer +The Function keys can be accessed when holding fn1 (right part of backspace) + +``` +/* Keymap _FNK: Function Keys + * ,------------------------------------------------------------. + * | ^ | F1| F2| F3| F4| F5| F6| F7| F8| F9| F0|F11|F12| Ins | | + * |------------------------------------------------------------| + * | |PGU| Up|PGD| | | |Ins|Hom|PDU| | | | | + * |----------------------------------------------------- | + * | |Lft|Dwn|Rgt| | | |Del|End|PGD| | | | | + * |------------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |------------------------------------------------------------| + * | | | | | | | | | + * `------------------------------------------------------------' + */ +``` + +## Media and Mouse Layer +The Media Keys and Mouse control can be accessed when holding capslock (fn2) + +``` +/* Keymap _MEDIA: Media and Mouse Layer + * ,------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------------------------------------------------------------| + * | | | | | | | |MLC| MU|MRC| | | | | + * |----------------------------------------------------- | + * | |PRV|VLD|VLU|NXT| | | ML| MD| MR| | | | | + * |------------------------------------------------------------| + * | | | | | | | | | | | | | UP | | + * |------------------------------------------------------------| + * | | | | PLAY | |LEFT|DWN|RIGHT| + * `------------------------------------------------------------' + */ +``` \ No newline at end of file diff --git a/keyboards/satan/keymaps/dende_iso/rules.mk b/keyboards/satan/keymaps/dende_iso/rules.mk new file mode 100644 index 00000000000..2a7ff27793f --- /dev/null +++ b/keyboards/satan/keymaps/dende_iso/rules.mk @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/satan/satan.h b/keyboards/satan/satan.h index 8a8874ced3b..f7f7b44343a 100644 --- a/keyboards/satan/satan.h +++ b/keyboards/satan/satan.h @@ -138,11 +138,42 @@ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \ } +/* ISO w/ split right shift key matrix layout + * ,-----------------------------------------------------------. + * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d|49 | + * |-----------------------------------------------------------| + * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| | + * |-------------------------------------------------------- | + * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c| 2d| + * |-----------------------------------------------------------| + * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c| + * |-----------------------------------------------------------| + * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d | + * `-----------------------------------------------------------' + + swap 3c and 3d. 3c is right of 3d in reality + */ +#define KEYMAP_ISO_SPLITRSHIFT_SPLITBACKSPACE( \ + k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\ + k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \ + 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, k3d, k3c, \ + k40, k41, k42, k45, k4a, k4b, k4c, k4d \ +) \ +{ \ + {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \ + {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c}, \ + {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \ + {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \ + {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \ +} + void matrix_init_user(void); void matrix_scan_user(void); #define LAYOUT_60_ansi KEYMAP_ANSI #define LAYOUT_60_iso KEYMAP_ISO #define LAYOUT_60_ansi_split_bs_rshift KEYMAP_HHKB +#define LAYOUT_60_iso_split_bs_rshift KEYMAP_ISO_SPLITRSHIFT_SPLITBACKSPACE #endif From 2a63e212794627ee649e4649355ecce8d1a790b8 Mon Sep 17 00:00:00 2001 From: Luciano Malavasi Date: Fri, 20 Apr 2018 13:06:10 -0700 Subject: [PATCH 025/152] Firmware for Alpha (28-key keyboard) (#2755) * alpha with firmware added to list of keyboards, ready to push * revised according to drashna's fixes * keymap -> layout? * fixed macro and improved layout issuesOC * Update rules.mk * Update alpha.h * Update and rename keyboards/alpha/layouts/default/28_alpha/keymap.c to keyboards/alpha/keymaps/default/keymap.c * alpha/readme.md added according to qmk templateOC * resolved a careless merge conflict * bugfix --- keyboards/alpha/alpha.c | 1 + keyboards/alpha/alpha.h | 16 +++++ keyboards/alpha/config.h | 58 ++++++++++++++++++ keyboards/alpha/keymaps/default/keymap.c | 76 ++++++++++++++++++++++++ keyboards/alpha/readme.md | 14 +++++ keyboards/alpha/rules.mk | 56 +++++++++++++++++ 6 files changed, 221 insertions(+) create mode 100755 keyboards/alpha/alpha.c create mode 100755 keyboards/alpha/alpha.h create mode 100755 keyboards/alpha/config.h create mode 100755 keyboards/alpha/keymaps/default/keymap.c create mode 100644 keyboards/alpha/readme.md create mode 100755 keyboards/alpha/rules.mk diff --git a/keyboards/alpha/alpha.c b/keyboards/alpha/alpha.c new file mode 100755 index 00000000000..3029ba50a83 --- /dev/null +++ b/keyboards/alpha/alpha.c @@ -0,0 +1 @@ +#include "alpha.h" diff --git a/keyboards/alpha/alpha.h b/keyboards/alpha/alpha.h new file mode 100755 index 00000000000..025a3ac5fbb --- /dev/null +++ b/keyboards/alpha/alpha.h @@ -0,0 +1,16 @@ +#ifndef KB_H +#define KB_H + +#include "quantum.h" + +#define LAYOUT( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, \ + K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, \ + K200, K201, K202, K203, K205, K207, K208, K209 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009 }, \ + { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109 }, \ + { K200, K201, K202, K203, KC_NO, K205, KC_NO, K207, K208, K209 } \ +} + +#endif diff --git a/keyboards/alpha/config.h b/keyboards/alpha/config.h new file mode 100755 index 00000000000..02952756358 --- /dev/null +++ b/keyboards/alpha/config.h @@ -0,0 +1,58 @@ +#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 0x0001 +#define MANUFACTURER PyroL +#define PRODUCT alpha +#define DESCRIPTION 28-key keyboard by PyroL + +/* key matrix size */ +#define MATRIX_ROWS 3 +#define MATRIX_COLS 10 + +/* key matrix pins */ +#define MATRIX_ROW_PINS { D4, B4, B5 } +#define MATRIX_COL_PINS { D7, E6, C6, B6, B2, B3, B1, F7, F6, F5 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* number of backlight levels */ + +#ifdef BACKLIGHT_PIN +#define BACKLIGHT_LEVELS 3 +#endif + +/* 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)) \ +) + +/* prevent stuck modifiers */ +#define PREVENT_STUCK_MODIFIERS + +#define RGB_DI_PIN F4 +#ifdef RGB_DI_PIN +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 5 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#endif + +#endif diff --git a/keyboards/alpha/keymaps/default/keymap.c b/keyboards/alpha/keymaps/default/keymap.c new file mode 100755 index 00000000000..03c47452d3f --- /dev/null +++ b/keyboards/alpha/keymaps/default/keymap.c @@ -0,0 +1,76 @@ +#include QMK_KEYBOARD_H +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + 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, TO(1), + KC_Z, KC_X, KC_C, KC_V, MT(MOD_LSFT, KC_SPC), KC_B, KC_N, KC_M), + + LAYOUT( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, + KC_BSPC, KC_ESC, KC_TAB, KC_SCLN, KC_QUOT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TO(2), + KC_LCTL, KC_LGUI, KC_LALT, TO(0), MT(MOD_LSFT, KC_ENT), KC_COMM, KC_DOT, KC_SLSH), + + LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, + KC_LSFT, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, TO(3), + RGB_VAI, RGB_VAD, RGB_HUI, TO(0), RGB_MOD, KC_MPLY, KC_VOLD, KC_VOLU), + + LAYOUT( + RESET, 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_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, M(0), KC_NO, KC_NO, KC_NO), + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch (keycode) { + case 0: + SEND_STRING("I'm so sorry... -PyroL"); + return false; + } + } + return true; +}; + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + + +void led_set_user(uint8_t usb_led) { + + if (usb_led & (1 << USB_LED_NUM_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_COMPOSE)) { + + } else { + + } + + if (usb_led & (1 << USB_LED_KANA)) { + + } else { + + } + +} diff --git a/keyboards/alpha/readme.md b/keyboards/alpha/readme.md new file mode 100644 index 00000000000..75a9d5902b3 --- /dev/null +++ b/keyboards/alpha/readme.md @@ -0,0 +1,14 @@ +# Alpha + +![Alpha](https://imgur.com/a/TouJ5rH) + +A 28-key, semi-ortho keyboard designed by PyroL! +Keyboard Maintainer: [PyroL](https://www.github.com/PyrooL) +Hardware Supported: Alpha PCB, Pro Micro +Hardware Availability: on a group-buy basis for now. Pro Micros can be found on Ali or from the official Sparkfun website. + +Make example for Alpha (after setting up your build environment): + + make alpha:default + + See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/faq/build-compile-qmk) for more information. diff --git a/keyboards/alpha/rules.mk b/keyboards/alpha/rules.mk new file mode 100755 index 00000000000..61ea958d7e4 --- /dev/null +++ b/keyboards/alpha/rules.mk @@ -0,0 +1,56 @@ +# 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* +BOOTLOADER = caterina + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # 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 +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = yes From c604cd6fd716a84432ecc66edb69d74b5d23bbad Mon Sep 17 00:00:00 2001 From: Danny Date: Fri, 20 Apr 2018 20:02:09 -0400 Subject: [PATCH 026/152] Add Nyquist Rev. 2 (#2414) --- keyboards/nyquist/nyquist.h | 3 ++ keyboards/nyquist/rev1/config.h | 4 +- keyboards/nyquist/rev2/config.h | 86 +++++++++++++++++++++++++++++++++ keyboards/nyquist/rev2/rev2.c | 21 ++++++++ keyboards/nyquist/rev2/rev2.h | 68 ++++++++++++++++++++++++++ keyboards/nyquist/rev2/rules.mk | 1 + keyboards/nyquist/rules.mk | 1 - 7 files changed, 181 insertions(+), 3 deletions(-) create mode 100644 keyboards/nyquist/rev2/config.h create mode 100644 keyboards/nyquist/rev2/rev2.c create mode 100644 keyboards/nyquist/rev2/rev2.h create mode 100644 keyboards/nyquist/rev2/rules.mk diff --git a/keyboards/nyquist/nyquist.h b/keyboards/nyquist/nyquist.h index a96d40d9fe0..d401a45f78f 100644 --- a/keyboards/nyquist/nyquist.h +++ b/keyboards/nyquist/nyquist.h @@ -4,6 +4,9 @@ #ifdef KEYBOARD_nyquist_rev1 #include "rev1.h" #endif +#ifdef KEYBOARD_nyquist_rev2 + #include "rev2.h" +#endif #include "quantum.h" diff --git a/keyboards/nyquist/rev1/config.h b/keyboards/nyquist/rev1/config.h index 4430f254cb5..61bcb80e2cf 100644 --- a/keyboards/nyquist/rev1/config.h +++ b/keyboards/nyquist/rev1/config.h @@ -1,5 +1,5 @@ /* -Copyright 2017 Danny Nguyen +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 @@ -21,7 +21,7 @@ along with this program. If not, see . #include QMK_KEYBOARD_CONFIG_H /* USB Device descriptor parameter */ -#define VENDOR_ID 0xCEEB +#define VENDOR_ID 0xCB10 #define PRODUCT_ID 0x1156 #define DEVICE_VER 0x0100 #define MANUFACTURER Keebio diff --git a/keyboards/nyquist/rev2/config.h b/keyboards/nyquist/rev2/config.h new file mode 100644 index 00000000000..75d2e939352 --- /dev/null +++ b/keyboards/nyquist/rev2/config.h @@ -0,0 +1,86 @@ +/* +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 REV2_CONFIG_H +#define REV2_CONFIG_H + +#include QMK_KEYBOARD_CONFIG_H + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xCB10 +#define PRODUCT_ID 0x1156 +#define DEVICE_VER 0x0200 +#define MANUFACTURER Keebio +#define PRODUCT The Nyquist Keyboard +#define DESCRIPTION Split 60 percent ortholinear keyboard + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 10 +#define MATRIX_COLS 6 + +// wiring of each half +#define MATRIX_ROW_PINS { D4, D7, E6, B4, B5 } +#define MATRIX_COL_PINS { D2, F5, F6, F7, B1, B3 } + +/* 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)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D3 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 16 // Number of LEDs + +/* Backlight LEDs */ +#define BACKLIGHT_PIN B6 +#define BACKLIGHT_LEVELS 7 + +/* + * 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/nyquist/rev2/rev2.c b/keyboards/nyquist/rev2/rev2.c new file mode 100644 index 00000000000..9922b8995ab --- /dev/null +++ b/keyboards/nyquist/rev2/rev2.c @@ -0,0 +1,21 @@ +#include "rev2.h" + +#ifdef SSD1306OLED +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); +} +#endif + +void matrix_init_kb(void) { + + // // green led on + // DDRD |= (1<<5); + // PORTD &= ~(1<<5); + + // // orange led on + // DDRB |= (1<<0); + // PORTB &= ~(1<<0); + + matrix_init_user(); +}; diff --git a/keyboards/nyquist/rev2/rev2.h b/keyboards/nyquist/rev2/rev2.h new file mode 100644 index 00000000000..1eec5d2beb8 --- /dev/null +++ b/keyboards/nyquist/rev2/rev2.h @@ -0,0 +1,68 @@ +#ifndef REV2_H +#define REV2_H + +#include "nyquist.h" + +//void promicro_bootloader_jmp(bool program); +#include "quantum.h" + + +#ifdef USE_I2C +#include +#ifdef __AVR__ + #include + #include +#endif +#endif + +//void promicro_bootloader_jmp(bool program); + +#ifndef FLIP_HALF +// Standard Keymap +// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left) +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ + L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ + L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \ + L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { L40, L41, L42, L43, L44, L45 }, \ + { R05, R04, R03, R02, R01, R00 }, \ + { R15, R14, R13, R12, R11, R10 }, \ + { R25, R24, R23, R22, R21, R20 }, \ + { R35, R34, R33, R32, R31, R30 }, \ + { R45, R44, R43, R42, R41, R40 } \ + } +#else +// Keymap with right side flipped +// (TRRS jack on both halves are to the right) +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \ + L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \ + L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \ + L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { L40, L41, L42, L43, L44, L45 }, \ + { R00, R01, R02, R03, R04, R05 }, \ + { R10, R11, R12, R13, R14, R15 }, \ + { R20, R21, R22, R23, R24, R25 }, \ + { R30, R31, R32, R33, R34, R35 }, \ + { R40, R41, R42, R43, R44, R45 } \ + } +#endif + +#define LAYOUT_ortho_5x12 LAYOUT + +#endif diff --git a/keyboards/nyquist/rev2/rules.mk b/keyboards/nyquist/rev2/rules.mk new file mode 100644 index 00000000000..bd518d8f273 --- /dev/null +++ b/keyboards/nyquist/rev2/rules.mk @@ -0,0 +1 @@ +BACKLIGHT_ENABLE = yes diff --git a/keyboards/nyquist/rules.mk b/keyboards/nyquist/rules.mk index 971cd188a8e..840628e1c5f 100644 --- a/keyboards/nyquist/rules.mk +++ b/keyboards/nyquist/rules.mk @@ -64,7 +64,6 @@ 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. -SUBPROJECT_rev1 = yes USE_I2C = yes # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend From 46d12d90df02e91b7a21a01e008a12080bf13778 Mon Sep 17 00:00:00 2001 From: Fayek Helmi Date: Fri, 20 Apr 2018 20:20:52 -0400 Subject: [PATCH 027/152] changed the ALTFN layer key position and Readme file --- keyboards/dz60/keymaps/256k_HHKB/README.md | 29 ++++++++++++++++------ keyboards/dz60/keymaps/256k_HHKB/keymap.c | 18 +++++++------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/keyboards/dz60/keymaps/256k_HHKB/README.md b/keyboards/dz60/keymaps/256k_HHKB/README.md index cd045a40d64..4241ca1ba7c 100644 --- a/keyboards/dz60/keymaps/256k_HHKB/README.md +++ b/keyboards/dz60/keymaps/256k_HHKB/README.md @@ -3,6 +3,21 @@ this is my personal layer that i use on my Tina-C HHKB layout board with a DZ60 PCB. --- +UPDATE (4-20-2018): +=== +after a week of using this layout i reazlied that having the ALT button on the right side and the ALTFN layer trigger on the left isn't ideal...i still wanted to change the default HHKB style CROSS arrow cluster into a reversed T cluster since im more used to that so i swapped the ALTFN layer to the right side and the normal ALT layer is back on the left side. so now i can use the arrow cluster (which i shifted one key over to the right) with 1 hand. + +it feels more nataural to me this way. + +also i decided to change the mouse scroll keys on the mouse layer to mouse movement keys... the scrolling wasn't working out as well as i'd hoped. again, this is merely an experimental layer just to play around with mouse control. + + + + +--- + +Walkthrough: +--- there is 1 base layer and 4 modifyer layers: @@ -21,7 +36,7 @@ BASE: * |-----------------------------------------------------------------------------------------+ * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | FN | * |-----------------------------------------------------------------------------------------+ - * | Win | Alt | Space | Alt | LIGHTS | + * | Win | Alt | Space | ALTFN | LIGHTS | * `-----------------------------------------------------------------------------------------' */ ``` @@ -37,9 +52,9 @@ BASE: * ,--------------------------------------------------------------------------------------------------------------------- * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | INSERT | _ | * |---------------------------------------------------------------------------------------------------------------------+ - * | CAPS | _ | _ | _ | _ | _ | _ | _ | _ | UP | MUTE | V_DEC | V_INC | DEL | + * | CAPS | _ | _ | _ | _ | _ | _ | _ | _ | _ | UP | V_DEC | V_INC | DEL | * |---------------------------------------------------------------------------------------------------------------------+ - * | CTRL | _ | _ | _ | _ | _ | _ | HOME | LEFT | DOWN | RIGHT | END | _ | + * | CTRL | _ | _ | _ | _ | _ | _ | HOME | END | LEFT | DOWN | RIGHT | _ | * |---------------------------------------------------------------------------------------------------------------------+ * | Shift | _ | _ | _ | _ | _ | _ | _ | PREV | NEXT | PLAY | _ | _ | * |---------------------------------------------------------------------------------------------------------------------+ @@ -61,14 +76,14 @@ also another benefit is that a lot of mice do not have horizontal control button (This layer is still experimental so i might change it later or modify it but so far i enjoy it) ``` -/* MOUSEFN LAYER + /* MOUSEFN LAYER * * ,--------------------------------------------------------------------------------------------------------------------- * | | ACC_1 | ACC_2 | ACC_3 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | * |---------------------------------------------------------------------------------------------------------------------+ - * | CAPS | _ | _ | _ | _ | _ | _ | _ | _ | WHEEL_UP | _ | _ | _ | _ | + * | CAPS | _ | _ | _ | _ | _ | _ | _ | _ | _ | WHEEL_UP | _ | _ | _ | * |---------------------------------------------------------------------------------------------------------------------+ - * | CTRL | _ | _ | _ | _ | _ | _ | _ | WH_LEFT | WH_DOWN | WH_RIGHT | _ | _ | + * | CTRL | _ | _ | _ | _ | _ | _ | _ | _ | WH_LEFT | WH_DOWN | WH_RIGHT | _ | * |---------------------------------------------------------------------------------------------------------------------+ * | Shift | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | * |---------------------------------------------------------------------------------------------------------------------+ @@ -110,4 +125,4 @@ also another benefit is that a lot of mice do not have horizontal control button */ ``` - \ No newline at end of file + diff --git a/keyboards/dz60/keymaps/256k_HHKB/keymap.c b/keyboards/dz60/keymaps/256k_HHKB/keymap.c index 42b9f88639d..e870a688d4f 100644 --- a/keyboards/dz60/keymaps/256k_HHKB/keymap.c +++ b/keyboards/dz60/keymaps/256k_HHKB/keymap.c @@ -35,7 +35,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_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_NO, 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, MO(_ALTFN), KC_SPC, KC_RALT, MO(_LIGHTS)), + KC_LGUI, KC_LALT, KC_SPC, MO(_ALTFN), MO(_LIGHTS)), @@ -46,9 +46,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,--------------------------------------------------------------------------------------------------------------------- * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | INSERT | _ | * |---------------------------------------------------------------------------------------------------------------------+ - * | CAPS | _ | _ | _ | _ | _ | _ | _ | _ | UP | MUTE | V_DEC | V_INC | DEL | + * | CAPS | _ | _ | _ | _ | _ | _ | _ | _ | _ | UP | V_DEC | V_INC | DEL | * |---------------------------------------------------------------------------------------------------------------------+ - * | CTRL | _ | _ | _ | _ | _ | _ | HOME | LEFT | DOWN | RIGHT | END | _ | + * | CTRL | _ | _ | _ | _ | _ | _ | HOME | END | LEFT | DOWN | RIGHT | _ | * |---------------------------------------------------------------------------------------------------------------------+ * | Shift | _ | _ | _ | _ | _ | _ | _ | PREV | NEXT | PLAY | _ | _ | * |---------------------------------------------------------------------------------------------------------------------+ @@ -59,8 +59,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_ALTFN] = LAYOUT_hhkb( MO(_MOUSEFN), 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_CAPS, ______, ______, ______, ______, ______, ______, ______, ______, KC_UP, KC_MUTE, KC_VOLD, KC_VOLU, KC_DEL, - ______, ______, ______, ______, ______, ______, ______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, ______, + KC_CAPS, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_UP, KC_VOLD, KC_VOLU, KC_DEL, + ______, ______, ______, ______, ______, ______, ______, KC_HOME, KC_END, KC_LEFT, KC_DOWN, KC_RIGHT, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_MPRV, KC_MNXT, KC_MPLY, ______, ______, ______, ______, ______, ______, ______), @@ -75,9 +75,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,--------------------------------------------------------------------------------------------------------------------- * | | ACC_1 | ACC_2 | ACC_3 | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | * |---------------------------------------------------------------------------------------------------------------------+ - * | CAPS | _ | _ | _ | _ | _ | _ | _ | _ | WHEEL_UP | _ | _ | _ | _ | + * | CAPS | _ | _ | _ | _ | _ | _ | _ | _ | _ | WHEEL_UP | _ | _ | _ | * |---------------------------------------------------------------------------------------------------------------------+ - * | CTRL | _ | _ | _ | _ | _ | _ | _ | WH_LEFT | WH_DOWN | WH_RIGHT | _ | _ | + * | CTRL | _ | _ | _ | _ | _ | _ | _ | _ | WH_LEFT | WH_DOWN | WH_RIGHT | _ | * |---------------------------------------------------------------------------------------------------------------------+ * | Shift | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | * |---------------------------------------------------------------------------------------------------------------------+ @@ -89,8 +89,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_MOUSEFN] = LAYOUT_hhkb( ______, KC_ACL0, KC_ACL1, KC_ACL2, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, - ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_WH_U, ______, ______, ______, ______, - ______, ______, ______, ______, ______, ______, ______, ______, KC_WH_L, KC_WH_D, KC_WH_R, ______, ______, + ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_MS_UP, ______, ______, ______, + ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______), From 4e4101efdf1e1d954ccec4aa9be05234e2a699fa Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 20 Apr 2018 17:32:53 -0700 Subject: [PATCH 028/152] Fix Merge issue that reverted LS default keymap to KEYMAP (#2778) --- keyboards/lets_split/keymaps/default/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/lets_split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c index a2d9c27eb75..fc0fe9c7c99 100644 --- a/keyboards/lets_split/keymaps/default/keymap.c +++ b/keyboards/lets_split/keymaps/default/keymap.c @@ -40,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Adjust| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | * `-----------------------------------------------------------------------------------' */ -[_QWERTY] = KEYMAP( +[_QWERTY] = LAYOUT( KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \ From 1bb77c087502de19fe5e403f519be321ba2c85f5 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 20 Apr 2018 17:53:19 -0700 Subject: [PATCH 029/152] Update to drashna keymaps and userspace (#2756) * Re-add NO_SECRETS option * Add Thumb Clusters defines for default layout * Minor tweaks * More Minor tweaks * Revert Orthodox layers and move function keys around * Fix keymap so it will compile under the Infinity Since I haven't added 'pretty' layouts to it yet * Cleanup of userspace * Cleanup keymaps * OMG fix Workman * Move mods layer key around * Reduce debounce in Ergodox EZ * Fix Infinity layers * Add list of pins used by Ergdox EZ for easy reference * Revert "Reduce debounce in Ergodox EZ" This reverts commit 8a3db2673b419ef8032c40a6d29156cef632f9cd. * Add Clicky toggle to Orthodox * Fix Audio Clicky keycode * Enable Faux Clicky by default * Add Unicode stuff --- keyboards/orthodox/keymaps/drashna/keymap.c | 14 +-- layouts/community/ergodox/drashna/keymap.c | 50 ++++---- layouts/community/ergodox/drashna/notes.txt | 6 + layouts/community/ergodox/drashna/rules.mk | 4 +- quantum/process_keycode/process_audio.c | 2 +- users/drashna/config.h | 7 +- users/drashna/drashna.c | 68 ++++++++++- users/drashna/drashna.h | 125 ++++++++++++++++---- users/drashna/rules.mk | 4 +- 9 files changed, 213 insertions(+), 67 deletions(-) create mode 100644 layouts/community/ergodox/drashna/notes.txt diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c index 480540144b4..ed5f32b9871 100644 --- a/keyboards/orthodox/keymaps/drashna/keymap.c +++ b/keyboards/orthodox/keymaps/drashna/keymap.c @@ -65,20 +65,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), [_LOWER] = 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_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, _______, _______, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, - _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_PGUP, KC_COMM, KC_DOT, KC_PGDN, _______ + 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, _______, _______ ), [_RAISE] = 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_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, _______, KC_RCTL, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, - _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_HOME, KC_COMM, KC_DOT, 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_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, KC_FXCL, AUD_ON, AUD_OFF, AG_NORM, _______, _______, _______, _______, AG_SWAP, KC_QWERTY, KC_COLEMAK, KC_DVORAK, KC_WORKMAN, TG(_MODS), + RGB_SMOD,RGB_HUI, CK_TOGG, AUD_ON, AUD_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 ) diff --git a/layouts/community/ergodox/drashna/keymap.c b/layouts/community/ergodox/drashna/keymap.c index f29c57f2e07..7ff103ed6ac 100644 --- a/layouts/community/ergodox/drashna/keymap.c +++ b/layouts/community/ergodox/drashna/keymap.c @@ -28,7 +28,7 @@ along with this program. If not, see . bool skip_leds = false; - +#ifdef KEYBOARD_ergodox_ez const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: QWERTY Layer * @@ -56,14 +56,10 @@ 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, _________________QWERTY_L1_________________, TG(_DIABLO), TG(_DIABLO), _________________QWERTY_R1_________________, KC_BSLS, - TG(_MODS), _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, GUI_T(KC_QUOT), + SH_TT, _________________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), - ALT_T(KC_APP), KC_LGUI, KC_RGUI, CTL_T(KC_ESCAPE), - KC_HOME, KC_PGUP, - KC_SPACE,KC_BSPC, KC_END, KC_PGDN, KC_DEL, KC_ENTER - - + __________________ERGODOX_THUMB_CLUSTER_____________________ ), /* Keymap 0: COLEMAK layer * @@ -92,12 +88,10 @@ 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, - TG(_MODS), _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, GUI_T(KC_QUOT), + SH_TT, _________________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), - ALT_T(KC_APP), KC_LGUI, KC_RGUI, CTL_T(KC_ESCAPE), - KC_HOME, KC_PGUP, - KC_SPACE,KC_BSPC, KC_END, KC_PGDN, KC_DEL, KC_ENTER + __________________ERGODOX_THUMB_CLUSTER_____________________ ), /* Keymap 0: DVORAK Layout * @@ -126,12 +120,10 @@ 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, - TG(_MODS), _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, GUI_T(KC_MINS), + SH_TT, _________________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), - ALT_T(KC_APP), KC_LGUI, KC_RGUI, CTL_T(KC_ESCAPE), - KC_HOME, KC_PGUP, - KC_SPACE,KC_BSPC, KC_END, KC_PGDN, KC_DEL, KC_ENTER + __________________ERGODOX_THUMB_CLUSTER_____________________ ), /* Keymap 0: WORKMAN layer * @@ -160,12 +152,10 @@ 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, - TG(_MODS), _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, GUI_T(KC_QUOT), + SH_TT, _________________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), - ALT_T(KC_APP), KC_LGUI, KC_RGUI, CTL_T(KC_ESCAPE), - KC_HOME, KC_PGUP, - KC_SPACE,KC_BSPC, KC_END, KC_PGDN, KC_DEL, KC_ENTER + __________________ERGODOX_THUMB_CLUSTER_____________________ ), // Reverts OSM(Shift) to normal Shifts. However, may not need since we fixed the issue with RDP (LOCAL RESOURCES) @@ -203,9 +193,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_SYMB] = LAYOUT_ergodox_pretty( EPRM, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_QWERTY, KC_QWERTY, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, - KC_RST, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_WORKMAN, KC_DVORAK, KC_PPLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PAST, KC_F12, + KC_RST, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_COLEMAK, KC_WORKMAN, KC_PPLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PAST, KC_F12, KC_MAKE, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRAVE, KC_PMNS, KC_KP_4, KC_KP_5, KC_KP_6, KC_PSLS, KC_PSCREEN, - VRSN, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_COLEMAK, KC_COLEMAK, KC_NLCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_PEQL, KC_PAUSE, + VRSN, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_DVORAK, TG(_MODS), KC_NLCK, KC_KP_1, KC_KP_2, KC_KP_3, KC_PEQL, KC_PAUSE, KC_TRNS, KC_AMPR, KC_ASTR, KC_COLN, KC_SCLN, KC_KP_0, KC_KP_0, KC_PDOT, KC_PENT, KC_TRNS, RGB_SMOD, KC_RGB_T, KC_TRNS, KC_TRNS, RGB_HUI, KC_TRNS, @@ -238,7 +228,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_G, KC_U, KC_I, KC_Y, KC_T, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, 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 @@ -309,7 +299,19 @@ 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) { @@ -327,8 +329,6 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; } - - void matrix_init_keymap(void) { // Runs boot tasks for keyboard }; diff --git a/layouts/community/ergodox/drashna/notes.txt b/layouts/community/ergodox/drashna/notes.txt new file mode 100644 index 00000000000..0f3959ff615 --- /dev/null +++ b/layouts/community/ergodox/drashna/notes.txt @@ -0,0 +1,6 @@ +Pins used by Ergodox EZ + +Column Pins: F0 F1 F4 F5 F6 F7 +Row Pins : B0 B1 B2 B3 D2 D3 C6 +LEDs : D6 B5 B6 B7 +: diff --git a/layouts/community/ergodox/drashna/rules.mk b/layouts/community/ergodox/drashna/rules.mk index 12f100d665e..536d5308af0 100644 --- a/layouts/community/ergodox/drashna/rules.mk +++ b/layouts/community/ergodox/drashna/rules.mk @@ -1,7 +1,9 @@ TAP_DANCE_ENABLE = yes SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend COMMAND_ENABLE = yes # Commands for debug and configuration -RGBLIGHT_ENABLE = yes +ifeq ($(strip $(KEYBOARD)), ergodox_ez) + RGBLIGHT_ENABLE = yes +endif CONSOLE_ENABLE = no BOOTMAGIC_ENABLE = yes diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c index 2d92e4064d2..fc0f23ee341 100644 --- a/quantum/process_keycode/process_audio.c +++ b/quantum/process_keycode/process_audio.c @@ -108,7 +108,7 @@ bool process_audio(uint16_t keycode, keyrecord_t *record) { } - if ( (clicky_enable && keycode != CLICKY_TOGGLE) || (!clicky_enable && keycode == CLICKY_TOGGLE) ) { + 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 f9b0d4d17a2..e48f72355b2 100644 --- a/users/drashna/config.h +++ b/users/drashna/config.h @@ -4,6 +4,7 @@ #ifdef AUDIO_ENABLE #define AUDIO_CLICKY +#define AUDIO_CLICKY_ON #define STARTUP_SONG SONG(E1M1_DOOM) #define GOODBYE_SONG SONG(SONIC_RING) #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ @@ -16,7 +17,7 @@ #ifdef RGBLIGHT_ENABLE #ifndef KEYBOARD_ergodox_ez #define RGBLIGHT_SLEEP - #endif + #endif // !KEYBOARD_ergodox_ez #endif // RGBLIGHT_ENABLE @@ -51,8 +52,8 @@ #ifdef TAPPING_TERM #undef TAPPING_TERM -#endif -#define TAPPING_TERM 160 +#endif // TAPPING_TERM +#define TAPPING_TERM 176 // Disable action_get_macro and fn_actions, since we don't use these diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c index 73bd249e4ce..d9d412b086d 100644 --- a/users/drashna/drashna.c +++ b/users/drashna/drashna.c @@ -41,8 +41,13 @@ float fauxclicky_pressed[][2] = SONG(S__NOTE(_A6)); // change to you 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 @@ -198,17 +203,21 @@ void matrix_scan_user(void) { 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(); - register_code(is_overwatch ? KC_BSPC : KC_ENTER); - unregister_code(is_overwatch ? KC_BSPC : KC_ENTER); + tap(is_overwatch ? KC_BSPC : KC_ENTER); wait_ms(50); send_string(str); - register_code(KC_ENTER); - unregister_code(KC_ENTER); + wait_ms(50); + tap(KC_ENTER); } if (override) wait_ms(3000); return false; @@ -402,6 +411,56 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return true; break; #endif // RGBLIGHT_ENABLE + + + case KC_CCCV: // One key copy/paste + if(record->event.pressed){ + copy_paste_timer = timer_read(); + } else { + if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy + register_code(KC_LCTL); + tap(KC_C); + unregister_code(KC_LCTL); +#ifdef AUDIO_ENABLE + PLAY_SONG(tone_copy); +#endif + } else { // Tap, paste + register_code(KC_LCTL); + tap(KC_V); + unregister_code(KC_LCTL); +#ifdef AUDIO_ENABLE + PLAY_SONG(tone_paste); +#endif + } + } + return false; + break; + +#ifdef UNICODE_ENABLE + case UC_FLIP: // (╯°□°)╯ ︵ ┻━┻ + if (record->event.pressed) { + register_code(KC_RSFT); + tap(KC_9); + unregister_code(KC_RSFT); + process_unicode((0x256F | QK_UNICODE), record); // Arm + process_unicode((0x00B0 | QK_UNICODE), record); // Eye + process_unicode((0x25A1 | QK_UNICODE), record); // Mouth + process_unicode((0x00B0 | QK_UNICODE), record); // Eye + register_code(KC_RSFT); + tap(KC_0); + unregister_code(KC_RSFT); + process_unicode((0x256F | QK_UNICODE), record); // Arm + tap(KC_SPC); + process_unicode((0x0361 | QK_UNICODE), record); // Flippy + tap(KC_SPC); + process_unicode((0x253B | QK_UNICODE), record); // Table + process_unicode((0x2501 | QK_UNICODE), record); // Table + process_unicode((0x253B | QK_UNICODE), record); // Table + } + return false; + break; +#endif // UNICODE_ENABLE + } return process_record_keymap(keycode, record); } @@ -413,6 +472,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { uint32_t layer_state_set_user(uint32_t state) { #ifdef RGBLIGHT_ENABLE uint8_t default_layer = eeconfig_read_default_layer(); + if (rgb_layer_change) { switch (biton32(state)) { case _NAV: diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h index b7cbaa44afb..746c7e20a0c 100644 --- a/users/drashna/drashna.h +++ b/users/drashna/drashna.h @@ -20,25 +20,25 @@ along with this program. If not, see . #include "quantum.h" // Define layer names -#define _QWERTY 0 -#define _NUMLOCK 0 -#define _COLEMAK 1 -#define _DVORAK 2 -#define _WORKMAN 3 -#define _MODS 4 -//#define _MISC 5 -#define _NAV 6 -#define _COVECUBE 7 -#define _SYMB 8 -#define _GAMEPAD 9 -#define _DIABLO 10 -#define _MOUS 11 -#define _MACROS 12 -#define _MEDIA 13 -#define _LOWER 14 -#define _RAISE 15 -#define _ADJUST 16 - +enum userspace_layers { + _QWERTY = 0, + _NUMLOCK = 0, + _COLEMAK, + _DVORAK, + _WORKMAN, + _MODS, + _NAV, + _COVECUBE, + _SYMB, + _GAMEPAD, + _DIABLO, + _MOUS, + _MACROS, + _MEDIA, + _LOWER, + _RAISE, + _ADJUST, +}; //define modifiers #define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) @@ -83,6 +83,10 @@ enum userspace_custom_keycodes { KC_SECRET_3, KC_SECRET_4, KC_SECRET_5, + KC_CCCV, +#ifdef UNICODE_ENABLE + UC_FLIP, +#endif //UNICODE_ENABLE NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes }; @@ -107,6 +111,72 @@ 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 @@ -199,13 +269,13 @@ enum { #define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z) -#define _________________WORKMAN_L1________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y -#define _________________WORKMAN_L2________________ KC_A, KC_O, KC_E, KC_U, KC_I -#define _________________WORKMAN_L3________________ CTL_T(KC_SCLN),KC_Q, KC_J, KC_K, KC_X +#define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B +#define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G +#define _________________WORKMAN_L3________________ CTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V -#define _________________WORKMAN_R1________________ KC_F, KC_G, KC_C, KC_R, KC_L -#define _________________WORKMAN_R2________________ KC_D, KC_H, KC_T, KC_N, KC_S -#define _________________WORKMAN_R3________________ KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z) +#define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN +#define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, KC_I +#define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, CTL_T(KC_SLASH) #define _________________NORMAN_L1_________________ KC_Q, KC_W, KC_D, KC_F, KC_K @@ -226,4 +296,9 @@ enum { #define ___________ERGODOX_BOTTOM_RIGHT____________ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +#define __________________ERGODOX_THUMB_CLUSTER_____________________ ALT_T(KC_APP), KC_LGUI, KC_RGUI, CTL_T(KC_ESCAPE), \ + KC_HOME, KC_PGUP, \ + KC_SPACE,KC_BSPC, KC_END, KC_PGDN, KC_DEL, KC_ENTER + + #endif diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk index 062ecd3c491..123c0cc70a3 100644 --- a/users/drashna/rules.mk +++ b/users/drashna/rules.mk @@ -2,4 +2,6 @@ SRC += drashna.c EXTRAFLAGS += -flto - +ifeq ($(strip $(NO_SECRETS)), yes) + OPT_DEFS += -DNO_SECRETS +endif From 14b2a35571b078effce2cbfa4030c613b31f4d49 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Sat, 21 Apr 2018 00:22:30 -0700 Subject: [PATCH 030/152] Use QMK_KEYBOARD_H instead of the mykeyboard.h (#2780) --- quantum/template/keymaps/default/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/template/keymaps/default/keymap.c b/quantum/template/keymaps/default/keymap.c index 508b4c79b52..d4bda895c71 100644 --- a/quantum/template/keymaps/default/keymap.c +++ b/quantum/template/keymaps/default/keymap.c @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "%KEYBOARD%.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( /* Base */ From e36d6bbbe3392b8e1e36157c070ed028dc8f5992 Mon Sep 17 00:00:00 2001 From: bjacques Date: Sat, 21 Apr 2018 08:43:36 +0100 Subject: [PATCH 031/152] Update feature_tap_dance.md (#2643) --- docs/feature_tap_dance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/feature_tap_dance.md b/docs/feature_tap_dance.md index e31e331679d..0521826b25f 100644 --- a/docs/feature_tap_dance.md +++ b/docs/feature_tap_dance.md @@ -22,7 +22,7 @@ This array specifies what actions shall be taken when a tap-dance key is in acti * `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the final tap count of the tap dance action. * `ACTION_TAP_DANCE_FN_ADVANCED(on_each_tap_fn, on_dance_finished_fn, on_dance_reset_fn)`: Calls the first specified function - defined in the user keymap - on every tap, the second function on when the dance action finishes (like the previous option), and the last function when the tap dance action resets. -The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise. +The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise. And that's the bulk of it! From 9a7347e35707585f081c439d571730169c2ec774 Mon Sep 17 00:00:00 2001 From: fixed Date: Sat, 21 Apr 2018 16:32:53 +0200 Subject: [PATCH 032/152] Adds config for ALF X2 60% keyboard (#2765) * Adds initial keyboard config and layouts for ALF X2 60% * Cleans up empty if/else blocks * Renames KEYMAP to LAYOUT across the alf_x2 config files. * Replaces include in alf_x2 keymaps with QMK_KEYBOARD_H macro --- keyboards/alf_x2/alf_x2.c | 1 + keyboards/alf_x2/alf_x2.h | 22 +++++++++ keyboards/alf_x2/config.h | 58 +++++++++++++++++++++++ keyboards/alf_x2/keymaps/default/keymap.c | 40 ++++++++++++++++ keyboards/alf_x2/keymaps/hhkb_60/keymap.c | 40 ++++++++++++++++ keyboards/alf_x2/readme.md | 15 ++++++ keyboards/alf_x2/rules.mk | 56 ++++++++++++++++++++++ 7 files changed, 232 insertions(+) create mode 100644 keyboards/alf_x2/alf_x2.c create mode 100644 keyboards/alf_x2/alf_x2.h create mode 100644 keyboards/alf_x2/config.h create mode 100644 keyboards/alf_x2/keymaps/default/keymap.c create mode 100644 keyboards/alf_x2/keymaps/hhkb_60/keymap.c create mode 100644 keyboards/alf_x2/readme.md create mode 100644 keyboards/alf_x2/rules.mk diff --git a/keyboards/alf_x2/alf_x2.c b/keyboards/alf_x2/alf_x2.c new file mode 100644 index 00000000000..cc22d872a5d --- /dev/null +++ b/keyboards/alf_x2/alf_x2.c @@ -0,0 +1 @@ +#include "alf_x2.h" diff --git a/keyboards/alf_x2/alf_x2.h b/keyboards/alf_x2/alf_x2.h new file mode 100644 index 00000000000..dee10bf1bfe --- /dev/null +++ b/keyboards/alf_x2/alf_x2.h @@ -0,0 +1,22 @@ +#ifndef ALF_X2_H +#define ALF_X2_H + +#include "quantum.h" + +// K404 and K408 are the microswitches at the top of the PCB + +#define LAYOUT( \ + 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, \ + 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, KC_NO }, \ + { 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 \ No newline at end of file diff --git a/keyboards/alf_x2/config.h b/keyboards/alf_x2/config.h new file mode 100644 index 00000000000..31212ce3368 --- /dev/null +++ b/keyboards/alf_x2/config.h @@ -0,0 +1,58 @@ +#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 0x0001 +#define MANUFACTURER ALF +#define PRODUCT X2 +#define DESCRIPTION ALF X2 60 + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 15 + +/* key matrix pins */ +#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, F4 } +#define UNUSED_PINS + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* number of backlight levels */ +#define BACKLIGHT_PIN B6 +#ifdef BACKLIGHT_PIN +#define BACKLIGHT_LEVELS 3 +#endif + +/* 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)) \ +) + +/* prevent stuck modifiers */ +#define PREVENT_STUCK_MODIFIERS + +#define RGB_DI_PIN E2 +#ifdef RGB_DI_PIN +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 4 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#endif + +#endif \ No newline at end of file diff --git a/keyboards/alf_x2/keymaps/default/keymap.c b/keyboards/alf_x2/keymaps/default/keymap.c new file mode 100644 index 00000000000..9b32c94d74d --- /dev/null +++ b/keyboards/alf_x2/keymaps/default/keymap.c @@ -0,0 +1,40 @@ +#include QMK_KEYBOARD_H + +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_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_LCTL, KC_LGUI, KC_LALT, KC_VOLU, KC_SPC, KC_VOLD, KC_RALT, MO(1), KC_NO, KC_APP, KC_RCTL), + + 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, RESET, + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_DOWN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_TRNS, KC_MPRV, 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) { + return MACRO_NONE; +} + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + DDRB |= (1 << 2); PORTB &= ~(1 << 2); + } else { + DDRB &= ~(1 << 2); PORTB &= ~(1 << 2); + } +} diff --git a/keyboards/alf_x2/keymaps/hhkb_60/keymap.c b/keyboards/alf_x2/keymaps/hhkb_60/keymap.c new file mode 100644 index 00000000000..17771a541dc --- /dev/null +++ b/keyboards/alf_x2/keymaps/hhkb_60/keymap.c @@ -0,0 +1,40 @@ +#include QMK_KEYBOARD_H + +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_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_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, MO(1), + KC_LCTL, KC_LGUI, KC_LALT, KC_VOLU, KC_SPC, KC_VOLD, KC_RALT, KC_RGUI, KC_NO, KC_APP, KC_RCTL), + + LAYOUT( + KC_NO, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, RESET, + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_DOWN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_TRNS, KC_MPRV, 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) { + return MACRO_NONE; +} + +void matrix_init_user(void) { +} + +void matrix_scan_user(void) { +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + DDRB |= (1 << 2); PORTB &= ~(1 << 2); + } else { + DDRB &= ~(1 << 2); PORTB &= ~(1 << 2); + } +} \ No newline at end of file diff --git a/keyboards/alf_x2/readme.md b/keyboards/alf_x2/readme.md new file mode 100644 index 00000000000..d51cd180a25 --- /dev/null +++ b/keyboards/alf_x2/readme.md @@ -0,0 +1,15 @@ +# ALF X2 + +![alf_x2](https://cdn.shopify.com/s/files/1/1674/0405/products/1_088c2862-1f68-4fdd-a346-965208c3a3de_1024x1024.png?v=1511296076) + +A customizable 60% keyboard. + +Keyboard Maintainer: QMK Community +Hardware Supported: ALF X2 60% +Hardware Availability: [zfrontier](https://en.zfrontier.com/products/group-buy-alf-x2-60) + +Make example for this keyboard (after setting up your build environment): + + make alf_x2: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/alf_x2/rules.mk b/keyboards/alf_x2/rules.mk new file mode 100644 index 00000000000..9c4082da29f --- /dev/null +++ b/keyboards/alf_x2/rules.mk @@ -0,0 +1,56 @@ +# 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* +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# comment out to disable the options. +# +BOOTMAGIC_ENABLE = yes # 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 +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = yes \ No newline at end of file From d1c3419d2ade6341bb7eba130bf8c77005705519 Mon Sep 17 00:00:00 2001 From: Mike Kozlowski Date: Sat, 21 Apr 2018 12:21:46 -0400 Subject: [PATCH 033/152] Rework layer function docs (#2656) * Rework layer function docs * Update per PR feedback --- docs/feature_advanced_keycodes.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md index 2db313e75c1..89d0ae8fcf5 100644 --- a/docs/feature_advanced_keycodes.md +++ b/docs/feature_advanced_keycodes.md @@ -19,14 +19,15 @@ Currently, the keycodes able to used with these functions are limited to the [Ba # Switching and Toggling Layers -These functions allow you to activate layers in various ways. +These functions allow you to activate layers in various ways. Note that layers are not generally independent layouts -- multiple layers can be activated at once, and it's typical for layers to use `KC_TRNS` to allow keypresses to pass through to lower layers. For a detailed explanation of layers, see [Keymap Overview](keymap.md#keymap-and-layers) -* `MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. -* `LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. -* `TG(layer)` - toggles a layer on or off. -* `TO(layer)` - Goes to a layer. This code is special, because it lets you go either up or down the stack -- just goes directly to the layer you want. So while other codes only let you go _up_ the stack (from layer 0 to layer 3, for example), `TO(2)` is going to get you to layer 2, no matter where you activate it from -- even if you're currently on layer 5. This gets activated on keydown (as soon as the key is pressed). -* `TT(layer)` - Layer Tap-Toggle. If you hold the key down, the layer becomes active, and then deactivates when you let go. And if you repeatedly tap it, the layer simply becomes active (toggles on). It needs 5 taps by default, but you can set it by defining `TAPPING_TOGGLE`, for example, `#define TAPPING_TOGGLE 2` for just two taps. -* `LM(layer, mod)` - Momentary switch to *layer* (like MO), but with modifier(s) *mod* active. Only supports layers 0-15 and the left modifiers. +* `DF(layer)` - switches the default layer. The default layer is the always-active base layer that other layers stack on top of. See below for more about the default layer. This might be used to switch from QWERTY to Dvorak layout. (Note that this is a temporary switch that only persists until the keyboard loses power. To modify the default layer in a persistent way requires deeper customization, such as calling the `set_single_persistent_default_layer` function inside of [process_record_user](custom_quantum_functions.md#programming-the-behavior-of-any-keycode).) +* `MO(layer)` - momentarily activates *layer*. As soon as you let go of the key, the layer is deactivated. +* `LM(layer, mod)` - Momentarily activates *layer* (like `MO`), but with modifier(s) *mod* active. Only supports layers 0-15 and the left modifiers. +* `LT(layer, kc)` - momentarily activates *layer* when held, and sends *kc* when tapped. +* `TG(layer)` - toggles *layer*, activating it if it's inactive and vice versa +* `TO(layer)` - activates *layer* and de-activates all other layers (except your default layer). This function is special, because instead of just adding/removing one layer to your active layer stack, it will completely replace your current active layers, uniquely allowing you to replace higher layers with a lower one. This is activated on keydown (as soon as the key is pressed). +* `TT(layer)` - Layer Tap-Toggle. If you hold the key down, *layer* is activated, and then is de-activated when you let go (like `MO`). If you repeatedly tap it, the layer will be toggled on or off (like `TG`). It needs 5 taps by default, but you can change this by defining `TAPPING_TOGGLE` -- for example, `#define TAPPING_TOGGLE 2` to toggle on just two taps. # Working with Layers @@ -36,9 +37,9 @@ Care must be taken when switching layers, it's possible to lock yourself into a If you are just getting started with QMK you will want to keep everything simple. Follow these guidelines when setting up your layers: -* Setup layer 0 as your "base" layer. This is your normal typing layer, and could be whatever layout you want (qwerty, dvorak, colemak, etc.) +* Setup layer 0 as your default, "base" layer. This is your normal typing layer, and could be whatever layout you want (qwerty, dvorak, colemak, etc.). It's important to set this as the lowest layer since it will typically have most or all of the keyboard's keys defined, so would block other layers from having any effect if it were above them (i.e., had a higher layer number). * Arrange your layers in a "tree" layout, with layer 0 as the root. Do not try to enter the same layer from more than one other layer. -* Never try to stack a higher numbered layer on top of a lower numbered layer. Doing so is tricky and error prone. +* In a layer's keymap, only reference higher-numbered layers. Because layers are processed from the highest-numbered (topmost) active layer down, modifying the state of lower layers can be tricky and error-prone. ### Intermediate Users From 33fdd1d2551591a5c295c6dc68ccf52c4698b9c1 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 21 Apr 2018 09:30:10 -0700 Subject: [PATCH 034/152] Fix Audio Clicky sub-feature (#2784) * Fix Audio Clicky feature * Add to features --- common_features.mk | 1 + quantum/process_keycode/process_audio.c | 65 --------------------- quantum/process_keycode/process_clicky.c | 72 ++++++++++++++++++++++++ quantum/process_keycode/process_clicky.h | 7 +++ quantum/quantum.c | 5 +- quantum/quantum.h | 3 + 6 files changed, 87 insertions(+), 66 deletions(-) create mode 100644 quantum/process_keycode/process_clicky.c create mode 100644 quantum/process_keycode/process_clicky.h diff --git a/common_features.mk b/common_features.mk index 9b99edd752f..7bd43afdbaf 100644 --- a/common_features.mk +++ b/common_features.mk @@ -34,6 +34,7 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes) OPT_DEFS += -DAUDIO_ENABLE MUSIC_ENABLE := 1 SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c + SRC += $(QUANTUM_DIR)/process_keycode/process_clicky.c ifeq ($(PLATFORM),AVR) SRC += $(QUANTUM_DIR)/audio/audio.c else diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c index fc0f23ee341..e9b20512e74 100644 --- a/quantum/process_keycode/process_audio.c +++ b/quantum/process_keycode/process_audio.c @@ -10,45 +10,7 @@ float voice_change_song[][2] = VOICE_CHANGE_SONG; #define PITCH_STANDARD_A 440.0f #endif -#ifdef AUDIO_CLICKY -#ifdef AUDIO_CLICKY_ON -bool clicky_enable = true; -#else -bool clicky_enable = false; -#endif -#ifndef AUDIO_CLICKY_FREQ_DEFAULT -#define AUDIO_CLICKY_FREQ_DEFAULT 440.0f -#endif -#ifndef AUDIO_CLICKY_FREQ_MIN -#define AUDIO_CLICKY_FREQ_MIN 65.0f -#endif -#ifndef AUDIO_CLICKY_FREQ_MAX -#define AUDIO_CLICKY_FREQ_MAX 1500.0f -#endif -#ifndef AUDIO_CLICKY_FREQ_FACTOR -#define AUDIO_CLICKY_FREQ_FACTOR 1.18921f -#endif -#ifndef AUDIO_CLICKY_FREQ_RANDOMNESS -#define AUDIO_CLICKY_FREQ_RANDOMNESS 0.05f -#endif - -float clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; -float clicky_song[][2] = {{AUDIO_CLICKY_FREQ_DEFAULT, 3}, {AUDIO_CLICKY_FREQ_DEFAULT, 1}}; // 3 and 1 --> durations -#ifndef NO_MUSIC_MODE -extern bool music_activated; -extern bool midi_activated; -#endif - -void clicky_play(void) { -#ifndef NO_MUSIC_MODE - if (music_activated || midi_activated) return; -#endif - clicky_song[0][0] = 2.0f * clicky_freq * (1.0f + AUDIO_CLICKY_FREQ_RANDOMNESS * ( ((float)rand()) / ((float)(RAND_MAX)) ) ); - clicky_song[1][0] = clicky_freq * (1.0f + AUDIO_CLICKY_FREQ_RANDOMNESS * ( ((float)rand()) / ((float)(RAND_MAX)) ) ); - PLAY_SONG(clicky_song); -} -#endif static float compute_freq_for_midi_note(uint8_t note) { @@ -89,33 +51,6 @@ bool process_audio(uint16_t keycode, keyrecord_t *record) { return false; } -#ifdef AUDIO_CLICKY - if (keycode == CLICKY_TOGGLE && record->event.pressed) { clicky_enable = !clicky_enable; } - - if (keycode == CLICKY_RESET && record->event.pressed) { clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; } - - if (keycode == CLICKY_UP && record->event.pressed) { - float new_freq = clicky_freq * AUDIO_CLICKY_FREQ_FACTOR; - if (new_freq < AUDIO_CLICKY_FREQ_MAX) { - clicky_freq = new_freq; - } - } - if (keycode == CLICKY_TOGGLE && record->event.pressed) { - float new_freq = clicky_freq / AUDIO_CLICKY_FREQ_FACTOR; - if (new_freq > AUDIO_CLICKY_FREQ_MIN) { - clicky_freq = new_freq; - } - } - - - if ( clicky_enable ) { - if (record->event.pressed) { - stop_all_notes(); - clicky_play();; - } - } -#endif // AUDIO_CLICKY - return true; } diff --git a/quantum/process_keycode/process_clicky.c b/quantum/process_keycode/process_clicky.c new file mode 100644 index 00000000000..2b9d8a0f76a --- /dev/null +++ b/quantum/process_keycode/process_clicky.c @@ -0,0 +1,72 @@ +#include "audio.h" +#include "process_clicky.h" + +#ifdef AUDIO_CLICKY + +#ifdef AUDIO_CLICKY_ON +bool clicky_enable = true; +#else // AUDIO_CLICKY_ON +bool clicky_enable = false; +#endif // AUDIO_CLICKY_ON +#ifndef AUDIO_CLICKY_FREQ_DEFAULT +#define AUDIO_CLICKY_FREQ_DEFAULT 440.0f +#endif // !AUDIO_CLICKY_FREQ_DEFAULT +#ifndef AUDIO_CLICKY_FREQ_MIN +#define AUDIO_CLICKY_FREQ_MIN 65.0f +#endif // !AUDIO_CLICKY_FREQ_MIN +#ifndef AUDIO_CLICKY_FREQ_MAX +#define AUDIO_CLICKY_FREQ_MAX 1500.0f +#endif // !AUDIO_CLICKY_FREQ_MAX +#ifndef AUDIO_CLICKY_FREQ_FACTOR +#define AUDIO_CLICKY_FREQ_FACTOR 1.18921f +#endif // !AUDIO_CLICKY_FREQ_FACTOR +#ifndef AUDIO_CLICKY_FREQ_RANDOMNESS +#define AUDIO_CLICKY_FREQ_RANDOMNESS 0.05f +#endif // !AUDIO_CLICKY_FREQ_RANDOMNESS + +float clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; +float clicky_song[][2] = {{AUDIO_CLICKY_FREQ_DEFAULT, 3}, {AUDIO_CLICKY_FREQ_DEFAULT, 1}}; // 3 and 1 --> durations + +#ifndef NO_MUSIC_MODE +extern bool music_activated; +extern bool midi_activated; +#endif // !NO_MUSIC_MODE + +void clicky_play(void) { +#ifndef NO_MUSIC_MODE + if (music_activated || midi_activated) return; +#endif // !NO_MUSIC_MODE + clicky_song[0][0] = 2.0f * clicky_freq * (1.0f + AUDIO_CLICKY_FREQ_RANDOMNESS * ( ((float)rand()) / ((float)(RAND_MAX)) ) ); + clicky_song[1][0] = clicky_freq * (1.0f + AUDIO_CLICKY_FREQ_RANDOMNESS * ( ((float)rand()) / ((float)(RAND_MAX)) ) ); + PLAY_SONG(clicky_song); +} + +bool process_clicky(uint16_t keycode, keyrecord_t *record) { + if (keycode == CLICKY_TOGGLE && record->event.pressed) { clicky_enable = !clicky_enable; } + + if (keycode == CLICKY_RESET && record->event.pressed) { clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; } + + if (keycode == CLICKY_UP && record->event.pressed) { + float new_freq = clicky_freq * AUDIO_CLICKY_FREQ_FACTOR; + if (new_freq < AUDIO_CLICKY_FREQ_MAX) { + clicky_freq = new_freq; + } + } + if (keycode == CLICKY_TOGGLE && record->event.pressed) { + float new_freq = clicky_freq / AUDIO_CLICKY_FREQ_FACTOR; + if (new_freq > AUDIO_CLICKY_FREQ_MIN) { + clicky_freq = new_freq; + } + } + + + if ( clicky_enable ) { + if (record->event.pressed) { + stop_all_notes(); + clicky_play();; + } + } + return true; +} + +#endif //AUDIO_CLICKY diff --git a/quantum/process_keycode/process_clicky.h b/quantum/process_keycode/process_clicky.h new file mode 100644 index 00000000000..e274af56f1f --- /dev/null +++ b/quantum/process_keycode/process_clicky.h @@ -0,0 +1,7 @@ +#ifndef PROCESS_CLICKY_H +#define PROCESS_CLICKY_H + +void clicky_play(void); +bool process_clicky(uint16_t keycode, keyrecord_t *record); + +#endif diff --git a/quantum/quantum.c b/quantum/quantum.c index 66feca2f296..5a2a73d4a2b 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -226,6 +226,9 @@ bool process_record_quantum(keyrecord_t *record) { // Must run first to be able to mask key_up events. process_key_lock(&keycode, record) && #endif + #if defined(AUDIO_ENABLE) && defined(AUDIO_CLICKY) + process_clicky(keycode, record) && + #endif //AUDIO_CLICKY process_record_kb(keycode, record) && #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) process_midi(keycode, record) && @@ -236,7 +239,7 @@ bool process_record_quantum(keyrecord_t *record) { #ifdef STENO_ENABLE process_steno(keycode, record) && #endif - #if ( defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))) && !defined(NO_MUSIC_MODE) + #if ( defined(AUDIO_ENABLE) || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))) && !defined(NO_MUSIC_MODE) process_music(keycode, record) && #endif #ifdef TAP_DANCE_ENABLE diff --git a/quantum/quantum.h b/quantum/quantum.h index b9424d5cdd3..80a606f0913 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -57,6 +57,9 @@ extern uint32_t default_layer_state; #ifdef AUDIO_ENABLE #include "audio.h" #include "process_audio.h" + #ifdef AUDIO_CLICKY + #include "process_clicky.h" + #endif // AUDIO_CLICKY #endif #ifdef STENO_ENABLE From 5ca9aecfb4cb09cc002a5256939098132a40015f Mon Sep 17 00:00:00 2001 From: Joe Wasson Date: Sat, 21 Apr 2018 10:48:30 -0700 Subject: [PATCH 035/152] Talljoe's layout with common keymap. (#2764) * Add userspace to talljoe layout. * Move more authority to userspace and create Bananasplit layout. * Move more things into userspace. * Common Core example * More work on common layout. * Num layer. * talljoe-ansi layout * Updates for Zeal60 * Add Zeal60 to 60_ansi_split_bs_rshift * Swap Escape and Grave * Num-layer tweaks * More tweaks. * Add 1up60rgb to world of layouts. * Rename ansi_split_bs_rshift layout to hhkb. * Control RGB Backlight. * change capslock led * Remove obsolete line from rules.mk. * Add user-friendly userspace override. * Fix enter for 1uprgb60 * Revert "Rename ansi_split_bs_rshift layout to hhkb." This reverts commit 53133719db25c7cb6a199108bbf5d980481a45f4. --- build_keyboard.mk | 6 +- docs/feature_userspace.md | 20 +- keyboards/1up60rgb/1up60rgb.h | 48 ++++- keyboards/1up60rgb/rules.mk | 4 +- .../bananasplit/keymaps/talljoe/config.h | 22 +++ .../bananasplit/keymaps/talljoe/keymap.c | 1 + .../community/60_ansi/talljoe-ansi/config.h | 22 +++ .../community/60_ansi/talljoe-ansi/keymap.c | 1 + .../community/60_ansi/talljoe-ansi/rules.mk | 1 + .../60_ansi_split_bs_rshift/talljoe/config.h | 68 ++++++- .../60_ansi_split_bs_rshift/talljoe/keymap.c | 186 ++++++++---------- layouts/community/ortho_4x12/talljoe/config.h | 22 +++ layouts/community/ortho_4x12/talljoe/keymap.c | 1 + users/talljoe/config.h | 9 + users/talljoe/readme.md | 7 + users/talljoe/rules.mk | 3 + users/talljoe/talljoe.c | 124 ++++++++++++ users/talljoe/talljoe.h | 108 ++++++++++ 18 files changed, 536 insertions(+), 117 deletions(-) create mode 100644 keyboards/bananasplit/keymaps/talljoe/config.h create mode 100644 keyboards/bananasplit/keymaps/talljoe/keymap.c create mode 100644 layouts/community/60_ansi/talljoe-ansi/config.h create mode 100644 layouts/community/60_ansi/talljoe-ansi/keymap.c create mode 100644 layouts/community/60_ansi/talljoe-ansi/rules.mk create mode 100644 layouts/community/ortho_4x12/talljoe/config.h create mode 100644 layouts/community/ortho_4x12/talljoe/keymap.c create mode 100644 users/talljoe/config.h create mode 100644 users/talljoe/readme.md create mode 100644 users/talljoe/rules.mk create mode 100644 users/talljoe/talljoe.c create mode 100644 users/talljoe/talljoe.h diff --git a/build_keyboard.mk b/build_keyboard.mk index 90a3df7768c..4781f4a5d19 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -204,7 +204,11 @@ else endif # User space stuff -USER_PATH := users/$(KEYMAP) +ifeq ("$(USER_NAME)","") + USER_NAME := $(KEYMAP) +endif +USER_PATH := users/$(USER_NAME) + -include $(USER_PATH)/rules.mk ifneq ("$(wildcard users/$(KEYMAP)/config.h)","") CONFIG_H += users/$(KEYMAP)/config.h diff --git a/docs/feature_userspace.md b/docs/feature_userspace.md index 454481cb2cc..c8fa406cb00 100644 --- a/docs/feature_userspace.md +++ b/docs/feature_userspace.md @@ -25,19 +25,19 @@ For example, Will include the `/users/jack/` folder in the path, along with `/users/jack/rules.mk`. -Additionally, `config.h` here will be processed like the same file in your keymap folder. This is handled separately from the `.h` file. +Additionally, `config.h` here will be processed like the same file in your keymap folder. This is handled separately from the `.h` file. -The reason for this, is that `.h` won't be added in time to add settings (such as `#define TAPPING_TERM 100`), and including the `` file in any `config.h` files will result in compile issues. +The reason for this, is that `.h` won't be added in time to add settings (such as `#define TAPPING_TERM 100`), and including the `` file in any `config.h` files will result in compile issues. + +So you should use the `config.h` for QMK settings, and the `.h` file for user or keymap specific settings. -So you should use the `config.h` for QMK settings, and the `.h` file for user or keymap specific settings. - ## Readme Please include authorship (your name, github username, email), and optionally [a license that's GPL compatible](https://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses). ## `Config.h` -If you do add a `config,h` file, you want to make sure that it only gets processed once. So you may want to start off with something like this: +If you do add a `config,h` file, you want to make sure that it only gets processed once. So you may want to start off with something like this: ```c #ifndef USERSPACE_CONFIG_H @@ -48,7 +48,7 @@ If you do add a `config,h` file, you want to make sure that it only gets process #endif // !USERSPACE_CONFIG_H ``` -You can use any option hre that you could use in your keymap's `config.h` file. You can find a list of vales [here](config_options.md). +You can use any option hre that you could use in your keymap's `config.h` file. You can find a list of vales [here](config_options.md). ## Example @@ -115,3 +115,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { This will add a new `KC_MAKE` keycode that can be used in any of your keymaps. And this keycode will output `make :`, making frequent compiling easier. And this will work with any keyboard and any keymap as it will output the current boards info, so that you don't have to type this out every time. Additionally, this should flash the newly compiled firmware automatically, using the correct utility, based on the bootloader settings (or default to just generating the HEX file). However, it should be noted that this may not work on all systems. AVRDUDE doesn't work on WSL, namely (and will dump the HEX in the ".build" folder instead). + +## Override default userspace + +By default the userspace used will be the same as the keymap name. In some situations this isn't desirable. For instance, if you use the [layout](feature_layouts.md) feature you can't use the same name for different keymaps (e.g. ANSI and ISO). You can name your layouts `mylayout-ansi` and `mylayout-iso` and add the following line to your layout's `rules.mk`: + +``` +USER_NAME := mylayout +``` \ No newline at end of file diff --git a/keyboards/1up60rgb/1up60rgb.h b/keyboards/1up60rgb/1up60rgb.h index a3d820f805f..564a82caa6d 100644 --- a/keyboards/1up60rgb/1up60rgb.h +++ b/keyboards/1up60rgb/1up60rgb.h @@ -17,4 +17,50 @@ { K400, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413, K414 } \ } -#endif \ No newline at end of file + +/* ANSI variant. No extra keys for ISO */ +#define LAYOUT_60_ansi ( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \ + 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, K214, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ + K400, K401, K403, K406, K410, K411, K413, K414 \ +) KEYMAP( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K013,\ + 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, K214, K214, \ + K300, KC_NO,K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, KC_NO,\ + K400, K401, K403, K406, K410, K411, K413, K414 \ +) + +/* ISO variant. Remove useless ANSI keys */ +#define LAYOUT_60_iso ( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \ + K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \ + 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, K313, \ + K400, K401, K403, K406, K410, K411, K413, K414 \ +) KEYMAP( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K013,\ + K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K214, \ + 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, K313, KC_NO,\ + K400, K401, K403, K406, K410, K411, K413, K414 \ +) + +/* HHKB Variant */ +#define LAYOUT_60_ansi_split_bs_rshift ( \ + 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, K214, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \ + K400, K401, K403, K406, K410, K411, K413, K414 \ +) KEYMAP( \ + 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, K214, K214, \ + K300, KC_NO,K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314,\ + K400, K401, K403, K406, K410, K411, K413, K414 \ +) + +#endif diff --git a/keyboards/1up60rgb/rules.mk b/keyboards/1up60rgb/rules.mk index c303af4bccd..7363b3c3dfc 100644 --- a/keyboards/1up60rgb/rules.mk +++ b/keyboards/1up60rgb/rules.mk @@ -53,4 +53,6 @@ SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality AUDIO_ENABLE ?= no -RGBLIGHT_ENABLE ?= yes \ No newline at end of file +RGBLIGHT_ENABLE ?= yes + +LAYOUTS = 60_ansi 60_iso 60_ansi_split_bs_rshift diff --git a/keyboards/bananasplit/keymaps/talljoe/config.h b/keyboards/bananasplit/keymaps/talljoe/config.h new file mode 100644 index 00000000000..ce342bd7aca --- /dev/null +++ b/keyboards/bananasplit/keymaps/talljoe/config.h @@ -0,0 +1,22 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include QMK_KEYBOARD_CONFIG_H + +#define SPACE_COUNT 3 + +#define LAYOUT( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \ + { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \ + { K40, K41, K42, KC_NO, K44, K45, K46, KC_NO, K48, K49, KC_NO, K4B, K4C, KC_NO }\ +} + +#endif diff --git a/keyboards/bananasplit/keymaps/talljoe/keymap.c b/keyboards/bananasplit/keymaps/talljoe/keymap.c new file mode 100644 index 00000000000..7812add812b --- /dev/null +++ b/keyboards/bananasplit/keymaps/talljoe/keymap.c @@ -0,0 +1 @@ +// This space intentionally left blank diff --git a/layouts/community/60_ansi/talljoe-ansi/config.h b/layouts/community/60_ansi/talljoe-ansi/config.h new file mode 100644 index 00000000000..9e27b1b0a78 --- /dev/null +++ b/layouts/community/60_ansi/talljoe-ansi/config.h @@ -0,0 +1,22 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include QMK_KEYBOARD_CONFIG_H + +#define ENABLE_GAME_LAYER + +#define LAYOUT( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ +) LAYOUT_60_ansi( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \ + K40, K41, K42, K45, K48, K49, K4B, K4C \ +) + +#endif //CONFIG_USER_H diff --git a/layouts/community/60_ansi/talljoe-ansi/keymap.c b/layouts/community/60_ansi/talljoe-ansi/keymap.c new file mode 100644 index 00000000000..7812add812b --- /dev/null +++ b/layouts/community/60_ansi/talljoe-ansi/keymap.c @@ -0,0 +1 @@ +// This space intentionally left blank diff --git a/layouts/community/60_ansi/talljoe-ansi/rules.mk b/layouts/community/60_ansi/talljoe-ansi/rules.mk new file mode 100644 index 00000000000..92007fe8ad7 --- /dev/null +++ b/layouts/community/60_ansi/talljoe-ansi/rules.mk @@ -0,0 +1 @@ +USER_NAME := talljoe diff --git a/layouts/community/60_ansi_split_bs_rshift/talljoe/config.h b/layouts/community/60_ansi_split_bs_rshift/talljoe/config.h index f5ab0c8dc67..0eacbde3369 100644 --- a/layouts/community/60_ansi_split_bs_rshift/talljoe/config.h +++ b/layouts/community/60_ansi_split_bs_rshift/talljoe/config.h @@ -3,8 +3,70 @@ #include QMK_KEYBOARD_CONFIG_H -#define PREVENT_STUCK_MODIFIERS +#define ENABLE_GAME_LAYER -#define KM LAYOUT_60_ansi_split_bs_rshift +#define LAYOUT( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ +) LAYOUT_60_ansi_split_bs_rshift( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K45, K48, K49, K4B, K4C \ +) -#endif //CONFIG_USER_H \ No newline at end of file +/* Color Map */ +#define CM( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K47, K4A, K4B, K4C, K4D \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \ + { K30, {}, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \ + { K40, K41, K42, {}, {}, {}, {}, K47, {}, {}, K4A, K4B, K4C, K4D } \ + } + +#ifdef KEYBOARD_zeal60 + + #define ZEAL_RGB + + /* enable/disable LEDs based on layout */ + #undef USE_SPLIT_BACKSPACE + #define USE_SPLIT_BACKSPACE 1 + + #undef USE_SPLIT_LEFT_SHIFT + #define USE_SPLIT_LEFT_SHIFT 0 + + #undef USE_SPLIT_RIGHT_SHIFT + #define USE_SPLIT_RIGHT_SHIFT 1 + + #undef USE_7U_SPACEBAR + #define USE_7U_SPACEBAR 0 + + #undef USE_ISO_ENTER + #define USE_ISO_ENTER 0 + + #undef TAPPING_TOGGLE + #define TAPPING_TOGGLE 2 + + #undef BACKLIGHT_MOD_LAYER_3 + #define BACKLIGHT_MOD_LAYER_3 RESET_LAYER + + #undef BACKLIGHT_ALPHAS_MODS_ROW_0 + #undef BACKLIGHT_ALPHAS_MODS_ROW_1 + #undef BACKLIGHT_ALPHAS_MODS_ROW_2 + #define BACKLIGHT_ALPHAS_MODS_ROW_0 0b0000000000000001 + #define BACKLIGHT_ALPHAS_MODS_ROW_1 0b0010000000000001 + #define BACKLIGHT_ALPHAS_MODS_ROW_2 0b0011000000000001 + +#endif //KEYBOARD_zeal60 + +#endif //CONFIG_USER_H diff --git a/layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c b/layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c index 7eff999305f..b5dc5449276 100644 --- a/layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c +++ b/layouts/community/60_ansi_split_bs_rshift/talljoe/keymap.c @@ -1,113 +1,89 @@ -#include QMK_KEYBOARD_H +#ifdef KEYBOARD_zeal60 +#include "config.h" +#include "zeal60.h" +#include "zeal_backlight.h" +#include "action_layer.h" +#include "solarized.h" +#include "talljoe.h" -enum layers { - _BASE = 0, - _WORKMAN, - _NORMAN, - _DVORAK, - _COLMAK, - _GAME, - _NAV, - _ADJUST, - _RESET, -}; +// from zeal_backlight.c +// we want to be able to set indicators for the spacebar stabs +// but they are not represented by a row/index. +extern zeal_backlight_config g_config; +void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led ); -#define _______ KC_TRNS -#define XXXXXXX KC_NO +void set_backlight_defaults(void) { + uint8_t space; + uint8_t caps_lock; + map_row_column_to_led(3, 12, &caps_lock); + map_row_column_to_led(4, 7, &space); + zeal_backlight_config default_values = { + .use_split_backspace = USE_SPLIT_BACKSPACE, + .use_split_left_shift = USE_SPLIT_LEFT_SHIFT, + .use_split_right_shift = USE_SPLIT_RIGHT_SHIFT, + .use_7u_spacebar = USE_7U_SPACEBAR, + .use_iso_enter = USE_ISO_ENTER, + .disable_when_usb_suspended = 1, + .disable_after_timeout = 0, + .brightness = 255, + .effect = 10, + .color_1 = solarized.base2, + .color_2 = solarized.base02, + .caps_lock_indicator = { .index = caps_lock, .color = solarized.red }, + .layer_1_indicator = { .index = space, .color = solarized.blue }, + .layer_2_indicator = { .index = space, .color = solarized.yellow }, + .layer_3_indicator = { .index = 254, .color = solarized.red }, + .alphas_mods = { + BACKLIGHT_ALPHAS_MODS_ROW_0, + BACKLIGHT_ALPHAS_MODS_ROW_1, + BACKLIGHT_ALPHAS_MODS_ROW_2, + BACKLIGHT_ALPHAS_MODS_ROW_3, + BACKLIGHT_ALPHAS_MODS_ROW_4 } + }; + memcpy(&g_config, &default_values, sizeof(zeal_backlight_config)); + backlight_config_save(); -#define NV_SPC LT(_NAV, KC_SPC) -#define AD_GRV LT(_ADJUST, KC_GRV) - -#define MO_NAV MO(_NAV) -#define MO_ADJ MO(_ADJUST) -#define MO_RST MO(_RESET) -#define TG_ADJ TG(_ADJUST) -#define TG_GAME TG(_GAME) -#define LY_QWER DF(_BASE) -#define LY_WORK DF(_WORKMAN) -#define LY_NRMN DF(_NORMAN) -#define LY_DVRK DF(_DVORAK) -#define LY_CLMK DF(_COLMAK) -#define TG_NKRO MAGIC_TOGGLE_NKRO -#define KC_PTT KC_F24 - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BASE] = KM( - 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, AD_GRV , - KC_LCTL, KC_LGUI, KC_LALT, NV_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_PTT ), - [_WORKMAN] = KM( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, KC_Q , KC_D , KC_R , KC_W , KC_B , KC_J , KC_F , KC_U , KC_P , KC_SCLN, _______, _______, _______, - _______, KC_A , KC_S , KC_H , KC_T , KC_G , KC_Y , KC_N , KC_E , KC_O , KC_I , _______, _______, - _______, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______), - [_NORMAN] = KM( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, KC_Q , KC_W , KC_D , KC_F , KC_K , KC_J , KC_U , KC_R , KC_L , KC_SCLN, _______, _______, _______, - _______, KC_A , KC_S , KC_E , KC_T , KC_G , KC_Y , KC_N , KC_I , KC_O , KC_H , _______, _______, - _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_P , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______), - [_DVORAK] = KM( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, - _______, 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_A , KC_O , KC_E , KC_U , KC_I , KC_D , KC_H , KC_T , KC_N , KC_S , KC_MINS, _______, - _______, KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z , _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______), - [_COLMAK] = KM( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, 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, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______), - [_GAME] = KM( - 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, - MO_NAV , 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_ADJ , - KC_LCTL, KC_PTT , KC_PGDN, KC_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_PTT ), - [_NAV] = KM( - KC_GRV , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_VOLU, KC_INS , KC_PGUP, KC_UP , KC_PGDN, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL , - XXXXXXX, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_MUTE, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , XXXXXXX, TG_ADJ , - KC_LSFT, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_VOLD, KC_END , KC_PGDN, XXXXXXX, XXXXXXX, XXXXXXX, KC_RSFT, XXXXXXX, - KC_LCTL, KC_LGUI, KC_LALT, _______, KC_RALT, KC_RGUI, KC_RCTL, _______), - // Adjust layer is on the split-shift key; or NAV+Enter (for non-split keyboards) - [_ADJUST] = KM( - MO_RST , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG_ADJ , - TG_NKRO, LY_QWER, LY_WORK, LY_NRMN, LY_DVRK, LY_CLMK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TG_GAME, XXXXXXX, XXXXXXX, - MO_RST , AG_NORM, AG_SWAP, BL_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, KC_CAPS), - // To Reset hit FN + ` + Esc - [_RESET] = KM( - RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX), -}; - -void matrix_scan_user(void) { - #ifdef KEYBOARD_gh60 - if (IS_LAYER_ON(_GAME)) { - gh60_wasd_leds_on(); - } else { - gh60_wasd_leds_off(); + solarized_t* S = &solarized; + HSV alphas = S->base2; + HSV custom_color_map[MATRIX_ROWS][MATRIX_COLS] = CM( + S->red, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, S->red, + S->orange, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, S->orange, + S->green, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, S->green, + S->blue, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, alphas, S->blue, S->blue, + S->violet, S->magenta, S->yellow, alphas, S->yellow, S->magenta, S->violet, S->green + ); + for (uint8_t row = 0; row < MATRIX_ROWS; ++row) { + for (uint8_t col = 0; col < MATRIX_COLS; ++col) { + backlight_set_key_color(row, col, custom_color_map[row][col]); } - #endif + } } -void matrix_init_user(void) { - if (!eeconfig_is_enabled()) { - eeconfig_init(); +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + static uint8_t last_effect; + switch (keycode) { + case DFAULTS: + if (IS_PRESSED(record->event)) set_backlight_defaults(); + return false; + case BL_TOGG: + if (IS_PRESSED(record->event)) { + if (g_config.effect) { + last_effect = g_config.effect; + g_config.effect = 0; + } else { + g_config.effect = last_effect; + } + } + return false; + case EFFECT...EFFECT_END: + if (IS_PRESSED(record->event)) { + uint8_t effect = keycode - EFFECT; + g_config.effect = effect; + backlight_config_save(); + } + return false; } -} -uint32_t default_layer_state_set_kb(uint32_t state) { - // persist changes to default layers - eeconfig_update_default_layer(state); - return state; -} \ No newline at end of file + return true; +} +#endif diff --git a/layouts/community/ortho_4x12/talljoe/config.h b/layouts/community/ortho_4x12/talljoe/config.h new file mode 100644 index 00000000000..c2a9567bb39 --- /dev/null +++ b/layouts/community/ortho_4x12/talljoe/config.h @@ -0,0 +1,22 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include QMK_KEYBOARD_CONFIG_H +#define SPACE_COUNT 3 + +#define LAYOUT( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \ +) \ +LAYOUT_ortho_4x12( \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1D, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \ + K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \ + K40, K41, K0D, K42, K44, K45, K45, K46, K48, K49, K4B, K4C \ +) + + +#endif //CONFIG_USER_H diff --git a/layouts/community/ortho_4x12/talljoe/keymap.c b/layouts/community/ortho_4x12/talljoe/keymap.c new file mode 100644 index 00000000000..7812add812b --- /dev/null +++ b/layouts/community/ortho_4x12/talljoe/keymap.c @@ -0,0 +1 @@ +// This space intentionally left blank diff --git a/users/talljoe/config.h b/users/talljoe/config.h new file mode 100644 index 00000000000..15bbde6bcd1 --- /dev/null +++ b/users/talljoe/config.h @@ -0,0 +1,9 @@ +#ifndef USERSPACE_CONFIG_H +#define USERSPACE_CONFIG_H + +#define PREVENT_STUCK_MODIFIERS +#define IGNORE_MOD_TAP_INTERRUPT + +#define RESET_LAYER 15 + +#endif // !USERSPACE_CONFIG_H diff --git a/users/talljoe/readme.md b/users/talljoe/readme.md new file mode 100644 index 00000000000..e70c5c6dc05 --- /dev/null +++ b/users/talljoe/readme.md @@ -0,0 +1,7 @@ +Copyright 2018 Joe Wasson @talljoe + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/users/talljoe/rules.mk b/users/talljoe/rules.mk new file mode 100644 index 00000000000..fa23149606e --- /dev/null +++ b/users/talljoe/rules.mk @@ -0,0 +1,3 @@ +SRC += talljoe.c + +EXTRAFLAGS+=-flto diff --git a/users/talljoe/talljoe.c b/users/talljoe/talljoe.c new file mode 100644 index 00000000000..e49a3060d29 --- /dev/null +++ b/users/talljoe/talljoe.c @@ -0,0 +1,124 @@ +#include QMK_KEYBOARD_H + +#include "talljoe.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT( + 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_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_RBRC, KC_BSPC, + US_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G , KC_H, KC_J, KC_K, KC_L, KC_SCLN, US_QUOT, US_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_ADJ , + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC2, KC_SPC1, KC_SPC3, KC_RALT, KC_APP , KC_RCTL, KC_PTT ), + [_WORKMAN] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_Q , KC_D , KC_R , KC_W , KC_B , KC_J , KC_F , KC_U , KC_P , KC_SCLN, _______, _______, _______, + _______, KC_A , KC_S , KC_H , KC_T , KC_G , KC_Y , KC_N , KC_E , KC_O , KC_I , _______, _______, + _______, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [_NORMAN] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_Q , KC_W , KC_D , KC_F , KC_K , KC_J , KC_U , KC_R , KC_L , KC_SCLN, _______, _______, _______, + _______, KC_A , KC_S , KC_E , KC_T , KC_G , KC_Y , KC_N , KC_I , KC_O , KC_H , _______, _______, + _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_P , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [_DVORAK] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, + _______, 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_A, KC_O, KC_E, KC_U, KC_I , KC_D, KC_H, KC_T, KC_N, KC_S, US_MINS, _______, + _______, KC_SCLN, KC_Q, KC_J, KC_K, KC_X , KC_B, KC_M, KC_W, KC_V, KC_Z, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + [_COLMAK] = 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 , _______, _______, + _______, KC_Z, KC_X, KC_C, KC_V, KC_B , KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + +#ifdef ENABLE_GAME_LAYER + [_GAME] = 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_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, + MO_NAV , 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_ADJ , + KC_LCTL, KC_PTT , KC_PGDN, KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_APP , KC_RCTL, KC_PTT ), +#endif + [_NAV] = LAYOUT( + KC_GRV , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_TAB , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_VOLU, KC_INS , KC_PGUP, KC_UP , KC_PGDN, KC_BTN1, KC_BTN2, KC_BTN3, KC_DEL , + US_CAPS, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_MUTE, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , KC_RCTL, TG_ADJ , + KC_LSFT, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_VOLD, KC_END , KC_PGDN, KC_WBAK, KC_WFWD, KC_WREF, KC_RSFT, XXXXXXX, + KC_LCTL, KC_LGUI, KC_LALT, NV_SPC2, NV_SPC1, NV_SPC3, KC_RALT, KC_RGUI, KC_RCTL, KC_PTT ), + [_NUM] = LAYOUT( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_GRV , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, XXXXXXX, KC_DEL , + US_CAPS, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_LBRC, KC_RBRC, KC_4, KC_5, KC_6, KC_PPLS, KC_PENT, XXXXXXX, + KC_LSFT, KC_EQL, KC_PLUS, KC_BSLS, KC_PIPE, XXXXXXX, XXXXXXX, KC_1, KC_2, KC_3, KC_PAST, KC_PSLS, XXXXXXX, + KC_LCTL, KC_LGUI, KC_LALT, NM_SPC2, NM_SPC1, NM_SPC3, KC_PDOT, KC_PCMM, KC_RCTL, KC_PTT ), + // Adjust layer is on the split-shift key; or NAV+Enter (for non-split keyboards) + [_ADJUST] = LAYOUT( + MO_RST , FX(1) , FX(2) , FX(3) , FX(4) , FX(5) , FX(6) , FX(7) , FX(8) , FX(9) , FX(10) , BR_DEC , BR_INC , XXXXXXX, MO_RST , + XXXXXXX, H1_INC , S1_INC , H2_INC , S2_INC , EF_INC , RGB_HUI, RGB_SAI, RGB_MOD, RGB_M_P, DFAULTS, RGB_VAD, RGB_VAI, KC_DEL , + XXXXXXX, H1_DEC , S1_DEC , H2_DEC , S2_DEC , EF_DEC , RGB_HUD, RGB_SAD, RGB_RMOD,RGB_M_K, RGB_M_B, RGB_M_G, TG_ADJ , + TG_NKRO, LY_QWER, LY_WORK, LY_NRMN, LY_DVRK, LY_CLMK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MAKE, KC_CAPS, XXXXXXX, + MO_RST , AG_NORM, AG_SWAP, XXXXXXX, BL_TOGG, XXXXXXX, RGB_TOG, XXXXXXX, XXXXXXX, TG_GAME), + // To Reset hit FN + ` + Esc + [_RESET] = LAYOUT( + RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET , + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + RESET , XXXXXXX, XXXXXXX, XXXXXXX, KC_SLEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX), +}; + +void matrix_scan_user(void) { + #ifdef KEYBOARD_gh60 + if (IS_LAYER_ON(_GAME)) { + gh60_wasd_leds_on(); + } else { + gh60_wasd_leds_off(); + } + #endif +} + +void matrix_init_user(void) { + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } +} + +uint32_t default_layer_state_set_kb(uint32_t state) { + // persist changes to default layers + eeconfig_update_default_layer(state); + return state; +} + +__attribute__ ((weak)) +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + return true; +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { +// If console is enabled, it will print the matrix position and status of each key pressed +#ifdef CONSOLE_ENABLE + xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.row, record->event.key.col, record->event.pressed); +#endif //CONSOLE_ENABLE + + switch (keycode) { + 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 + + #if defined(BOOTLOADER_HALFKAY) + ":teensy" + #elif defined(BOOTLOADER_CATERINA) + ":avrdude" + #else + ":dfu" + #endif + SS_TAP(X_ENTER)); + } + return false; + break; + } + return process_record_keymap(keycode, record); +} diff --git a/users/talljoe/talljoe.h b/users/talljoe/talljoe.h new file mode 100644 index 00000000000..17e54af6993 --- /dev/null +++ b/users/talljoe/talljoe.h @@ -0,0 +1,108 @@ +#ifndef USERSPACE +#define USERSPACE + +#include "quantum.h" + +enum userspace_custom_keycodes { + KC_MAKE = SAFE_RANGE, // can always be here + DFAULTS, + TOGGLE_BACKLIGHT, + EFFECT, + EFFECT_END = EFFECT + 10 +}; + +#ifndef RESET_LAYER +#define RESET_LAYER 15 +#endif + +enum layers { + _BASE = 0, + _WORKMAN, + _NORMAN, + _DVORAK, + _COLMAK, + _GAME, + _NAV, + _NUM, + _ADJUST, + _RESET = RESET_LAYER, +}; + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +#define MO_NAV MO(_NAV) +#define MO_ADJ MO(_ADJUST) +#define MO_RST MO(_RESET) +#define TG_ADJ TG(_ADJUST) +#ifdef ENABLE_GAME_LAYER + #define TG_GAME TG(_GAME) +#else + #define TG_GAME KC_NO +#endif +#define LY_QWER DF(_BASE) +#define LY_WORK DF(_WORKMAN) +#define LY_NRMN DF(_NORMAN) +#define LY_DVRK DF(_DVORAK) +#define LY_CLMK DF(_COLMAK) +#define TG_NKRO MAGIC_TOGGLE_NKRO +#define KC_PTT KC_F24 +#define MS_MID KC_MS_BTN3 +#define FX(x) (EFFECT + x) + +#define US_CAPS CTL_T(KC_ESC) +#define US_QUOT RCTL_T(KC_QUOT) +#define US_MINS RCTL_T(KC_QUOT) +#define US_ENT LT(_NUM, KC_ENT) + +#ifndef SPACE_COUNT + #define SPACE_COUNT 1 +#endif +#if (SPACE_COUNT == 1) + #define KC_SPC1 LT(_NAV, KC_SPC) + #define KC_SPC2 XXXXXXX + #define KC_SPC3 XXXXXXX + + #define NV_SPC1 _______ + #define NV_SPC2 _______ + #define NV_SPC3 _______ + + #define NM_SPC1 _______ + #define NM_SPC2 _______ + #define NM_SPC3 _______ +#elif (SPACE_COUNT == 3) + #define KC_SPC1 KC_BSPC + #define KC_SPC2 LT(_NUM,KC_ENT) + #define KC_SPC3 LT(_NAV,KC_SPC) + + #define NV_SPC1 KC_SPC + #define NV_SPC2 C_S_T(KC_ENT) + #define NV_SPC3 KC_SPC + + #define NM_SPC2 XXXXXXX + #define NM_SPC1 KC_SPC + #define NM_SPC3 KC_0 +#else + #error "Unsupported space count:" SPACE_COUNT +#endif + +#ifndef ZEAL_RGB + #define BR_INC KC_NO + #define BR_DEC KC_NO + #define EF_INC KC_NO + #define EF_DEC KC_NO + #define ES_INC KC_NO + #define ES_DEC KC_NO + #define H1_INC KC_NO + #define H1_DEC KC_NO + #define S1_INC KC_NO + #define S1_DEC KC_NO + #define H2_INC KC_NO + #define H2_DEC KC_NO + #define S2_INC KC_NO + #define S2_DEC KC_NO + #define FN_MO13 KC_NO + #define FN_MO2 KC_NO +#endif + +#endif From 3c224bffc87b90b4c676a229c8beb902c7107ea8 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 21 Apr 2018 13:37:26 -0700 Subject: [PATCH 036/152] Add personal Tada68 Keymap (#2633) * Add personal Tada68 keymaps * remove uneccessary tada68 folder * recommit with temp name * remove bad folder name * fix bullet list format * rename to fezzant * remove unnecessary config.h file --- keyboards/tada68/keymaps/fezzant/keymap.c | 124 +++++++++++++++++++++ keyboards/tada68/keymaps/fezzant/readme.md | 8 ++ keyboards/tada68/keymaps/fezzant/rules.mk | 21 ++++ 3 files changed, 153 insertions(+) create mode 100644 keyboards/tada68/keymaps/fezzant/keymap.c create mode 100644 keyboards/tada68/keymaps/fezzant/readme.md create mode 100644 keyboards/tada68/keymaps/fezzant/rules.mk diff --git a/keyboards/tada68/keymaps/fezzant/keymap.c b/keyboards/tada68/keymaps/fezzant/keymap.c new file mode 100644 index 00000000000..b151e0b67bd --- /dev/null +++ b/keyboards/tada68/keymaps/fezzant/keymap.c @@ -0,0 +1,124 @@ +#include "tada68.h" + +// Layers + +#define _BL 0 +#define _FL 1 +#define _NUM 2 +#define _BSPC 3 + +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +// Macros +// name macros here for keymap reference +enum { + EMAIL_ADD = SAFE_RANGE, + OTHER_MACRO +}; + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if(record->event.pressed){ + switch(keycode) { + // copy these lines to define new macro + case EMAIL_ADD: + SEND_STRING("email@example.com"); + return false; break; + // copy to here + case OTHER_MACRO: + SEND_STRING("The Other Macro"); + return false; break; + } + } + return true; +}; + +// Keymaps + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: (Base Layer) Default Layer + * .----------------------------------------------------------------. + * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` | + * |----------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del | + * |----------------------------------------------------------------| + * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |Home| + * |----------------------------------------------------------------| + * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |End | + * |----------------------------------------------------------------| + * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lft|Dwn|Rig | + * '----------------------------------------------------------------' + */ +[_BL] = KEYMAP_ANSI( + 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_BSPACE, KC_GRAVE, \ + 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_DELETE, \ + LT(_BSPC,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_HOME, \ + 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_END, \ + KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(_FL),KC_RCTRL, KC_LEFT,KC_DOWN,KC_RGHT), + + + /* Keymap _FL: Function Layer + * .-----------------------------------------------------------------. + * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Paus | + * |-----------------------------------------------------------------| + * | | | | | | | | | |BLB|BL-|BL |BL+|Foobr|ToNUM| + * |-----------------------------------------------------------------| + * |KC_NO | | | | | | | | | | |Mnu| |PgUp | + * |-----------------------------------------------------------------| + * | | | | | | | | | | | | | |PgDn | + * |-----------------------------------------------------------------| + * |WinUl|WinLk| | | | | |Nxt|Stp|Prev | + * '-----------------------------------------------------------------' + */ +[_FL] = KEYMAP_ANSI( + _______, 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_PAUSE , \ + _______,_______,_______,_______,_______,_______,_______,_______,_______,BL_BRTG,BL_DEC,BL_TOGG, BL_INC, KC_MAIL,TG(_NUM), \ + XXXXXXX,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_APPLICATION, _______,KC_PGUP, \ + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,KC_BTN1, KC_MS_U, KC_PGDOWN, \ + MAGIC_UNNO_GUI,MAGIC_NO_GUI,_______, _______, _______,_______,_______,KC_MPRV,KC_MSTP, KC_MNXT), + + + /* Keymap _NUM: Numpad Layer + * .----------------------------------------------------------------. + * |Esc| 1 | 2 | 3 | 4 | 5 | 6 |NP7|Np8|Np9| | - | + |Backspc|CALC| 15 + * |----------------------------------------------------------------| + * |Tab |NumL| up| | | |Np4|Np5|Np6| | | / | * | | | 15 + * |----------------------------------------------------------------| + * |To__BL|lft|dwn|rit| | |Np1|Np2|Np3| | | |Enter |Prsc| 14 + * |----------------------------------------------------------------| + * |Shift | Z | X | C | V | |Np.|Np.|Np.| | | |msU|Rclk| 14 + * |----------------------------------------------------------------| + * |Ctrl|Win |Alt | Np0 |Emal| |Lclk|msL|msD|msR | 10 + * '----------------------------------------------------------------' + */ +[_NUM] = KEYMAP_ANSI( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_P7, KC_P8, KC_P9,XXXXXXX, KC_KP_MINUS, KC_KP_PLUS, KC_BSPC,KC_CALC, \ + KC_TAB,KC_NUMLOCK, KC_UP,XXXXXXX,XXXXXXX, XXXXXXX,KC_P4,KC_P5,KC_P6,XXXXXXX,XXXXXXX,KC_PSLS,KC_PAST, XXXXXXX,_______, \ + TG(_NUM), KC_LEFT, KC_DOWN, KC_RIGHT,XXXXXXX,XXXXXXX,KC_P1,KC_P2,KC_P3,XXXXXXX,XXXXXXX,XXXXXXX, KC_KP_ENTER,KC_PSCREEN, \ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V,XXXXXXX, KC_PDOT, KC_PDOT, KC_PDOT,XXXXXXX,XXXXXXX,XXXXXXX, KC_MS_U, KC_BTN2, \ + KC_LCTL, KC_LGUI, KC_LALT,KC_P0,EMAIL_ADD,_______,KC_BTN1,KC_MS_L,KC_MS_D, KC_MS_R), + + + /* Keymap _BSPC: back_SPACE Layer + * .----------------------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | | |Up | | | | | | | + * |----------------------------------------------------------------| + * | | | | | | | |Lft|Dwn|Rig|End| | | | + * |----------------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |----------------------------------------------------------------| + * | | | | Backspace | |NO | | | | | + * '----------------------------------------------------------------' + */ +[_BSPC] = KEYMAP_ANSI( + _______, _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______,_______,_______,_______,_______,_______,_______,_______,KC_UP,_______,_______,_______, _______, _______,_______, \ + _______,_______,_______,_______,_______,_______,_______,KC_LEFT,KC_DOWN,KC_RIGHT,KC_END,_______, _______,_______, \ + _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, _______, _______, \ + _______,_______,_______, KC_BSPACE, _______,XXXXXXX,_______,_______,_______, _______) + + +}; diff --git a/keyboards/tada68/keymaps/fezzant/readme.md b/keyboards/tada68/keymaps/fezzant/readme.md new file mode 100644 index 00000000000..08a9433eebf --- /dev/null +++ b/keyboards/tada68/keymaps/fezzant/readme.md @@ -0,0 +1,8 @@ +## Fezzant's Tada68 keymap + +Includes easy copy-paste macro creation for strings or combo keypresses. + +* Layer 0: Mostly-standard base layer, with home/end replacing pgup/pgdn. +* Layer 1: Momentary function layer, with some added buttons. +* Layer 2: Toggle numpad layer, with a layout conducive to spreadsheets and calculations +* Layer 3: Momentary function layer to put backspace on spacebar, with arrow keys on right hand homerow area. diff --git a/keyboards/tada68/keymaps/fezzant/rules.mk b/keyboards/tada68/keymaps/fezzant/rules.mk new file mode 100644 index 00000000000..f2439cc7d14 --- /dev/null +++ b/keyboards/tada68/keymaps/fezzant/rules.mk @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = yes # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif From 7cb3c0e4668c7bb8858fab08f3b7df93baf5bd95 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 21 Apr 2018 14:00:43 -0700 Subject: [PATCH 037/152] Add pretty layout to all ergodox clones (#2686) * Add pretty layout to all ergodox clones * Info.json cleanup for EZ * Add info.json for ergodone * info.json cleanup --- keyboards/ergodone/ergodone.h | 22 ++++++++++++ keyboards/ergodone/info.json | 15 ++++++++ keyboards/ergodox_ez/ergodox_ez.h | 2 ++ keyboards/ergodox_ez/info.json | 15 ++++---- keyboards/ergodox_infinity/ergodox_infinity.h | 34 +++++++++++++++++++ keyboards/ergodox_infinity/info.json | 7 ++-- 6 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 keyboards/ergodone/info.json diff --git a/keyboards/ergodone/ergodone.h b/keyboards/ergodone/ergodone.h index 0826e95216a..c63afe838b8 100644 --- a/keyboards/ergodone/ergodone.h +++ b/keyboards/ergodone/ergodone.h @@ -99,6 +99,28 @@ inline void ergodox_led_all_set(uint8_t n) {} { KC_NO, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5A, k5B, k5C, KC_NO } \ } +#define KEYMAP_PRETTY( \ + /* left hand, spatial positions */ /* right hand, spatial positions */ \ + L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06, \ + L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \ + L20,L21,L22,L23,L24,L25, R21,R22,R23,R24,R25,R26, \ + L30,L31,L32,L33,L34,L35,L36, R30,R31,R32,R33,R34,R35,R36, \ + L40,L41,L42,L43,L44, R42,R43,R44,R45,R46, \ + L55,L56, R50,R51, \ + L54, R52, \ + L53,L52,L51, R55,R54,R53 ) \ + \ + /* matrix positions */ \ + { \ + { L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06 }, \ + { L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16 }, \ + { L20,L21,L22,L23,L24,L25,KC_NO, KC_NO,R21,R22,R23,R24,R25,R26 }, \ + { L30,L31,L32,L33,L34,L35,L36, R30,R31,R32,R33,R34,R35,R36 }, \ + { L40,L41,L42,L43,L44,KC_NO,KC_NO, KC_NO,KC_NO,R42,R43,R44,R45,R46 }, \ + { KC_NO,L51,L52,L53,L54,L55,L56, R50,R51,R52,R53,R54,R55,KC_NO } \ + } + #define LAYOUT_ergodox KEYMAP +#define LAYOUT_ergodox_pretty KEYMAP_PRETTY #endif diff --git a/keyboards/ergodone/info.json b/keyboards/ergodone/info.json new file mode 100644 index 00000000000..64ab0fe66ec --- /dev/null +++ b/keyboards/ergodone/info.json @@ -0,0 +1,15 @@ +{ + "keyboard_name": "Ergodone", + "maintainer": "Yu He", + "width": 19.5, + "height": 9.375, + + "layouts": { + "LAYOUT_ergodox": { + "layout": [{"x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"x":11.5, "y":0}, {"x":12.5, "y":0}, {"x":13.5, "y":0}, {"x":14.5, "y":0}, {"x":15.5, "y":0, "w":1.5}, {"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, "h":1.5}, {"x":9.5, "y":1, "h":1.5}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1}, {"x":14.5, "y":1}, {"x":15.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.5}, {"x":1.5, "y":2}, {"x":2.5, "y":2}, {"x":3.5, "y":2}, {"x":4.5, "y":2}, {"x":5.5, "y":2}, {"x":10.5, "y":2}, {"x":11.5, "y":2}, {"x":12.5, "y":2}, {"x":13.5, "y":2}, {"x":14.5, "y":2}, {"x":15.5, "y":2, "w":1.5}, {"x":6.5, "y":2.5, "h":1.5}, {"x":9.5, "y":2.5, "h":1.5}, {"x":0, "y":3, "w":1.5}, {"x":1.5, "y":3}, {"x":2.5, "y":3}, {"x":3.5, "y":3}, {"x":4.5, "y":3}, {"x":5.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}, {"x":12.5, "y":3}, {"x":13.5, "y":3}, {"x":14.5, "y":3}, {"x":15.5, "y":3, "w":1.5}, {"x":0.5, "y":4}, {"x":1.5, "y":4}, {"x":2.5, "y":4}, {"x":3.5, "y":4}, {"x":4.5, "y":4}, {"x":11.5, "y":4}, {"x":12.5, "y":4}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}, {"x":6, "y":5}, {"x":7, "y":5}, {"x":9, "y":5}, {"x":10, "y":5}, {"x":5, "y":6, "h":2}, {"x":6, "y":6, "h":2}, {"x":7, "y":6}, {"x":9, "y":6}, {"x":10, "y":6, "h":2}, {"x":11, "y":6, "h":2}, {"x":7, "y":7}, {"x":9, "y":7}] + }, + "LAYOUT_ergodox_pretty": { + "layout": [{"x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"x":11.5, "y":0}, {"x":12.5, "y":0}, {"x":13.5, "y":0}, {"x":14.5, "y":0}, {"x":15.5, "y":0, "w":1.5}, {"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, "h":1.5}, {"x":9.5, "y":1, "h":1.5}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1}, {"x":14.5, "y":1}, {"x":15.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.5}, {"x":1.5, "y":2}, {"x":2.5, "y":2}, {"x":3.5, "y":2}, {"x":4.5, "y":2}, {"x":5.5, "y":2}, {"x":10.5, "y":2}, {"x":11.5, "y":2}, {"x":12.5, "y":2}, {"x":13.5, "y":2}, {"x":14.5, "y":2}, {"x":15.5, "y":2, "w":1.5}, {"x":6.5, "y":2.5, "h":1.5}, {"x":9.5, "y":2.5, "h":1.5}, {"x":0, "y":3, "w":1.5}, {"x":1.5, "y":3}, {"x":2.5, "y":3}, {"x":3.5, "y":3}, {"x":4.5, "y":3}, {"x":5.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}, {"x":12.5, "y":3}, {"x":13.5, "y":3}, {"x":14.5, "y":3}, {"x":15.5, "y":3, "w":1.5}, {"x":0.5, "y":4}, {"x":1.5, "y":4}, {"x":2.5, "y":4}, {"x":3.5, "y":4}, {"x":4.5, "y":4}, {"x":11.5, "y":4}, {"x":12.5, "y":4}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}, {"x":6, "y":5}, {"x":7, "y":5}, {"x":9, "y":5}, {"x":10, "y":5}, {"x":5, "y":6, "h":2}, {"x":6, "y":6, "h":2}, {"x":7, "y":6}, {"x":9, "y":6}, {"x":10, "y":6, "h":2}, {"x":11, "y":6, "h":2}, {"x":7, "y":7}, {"x":9, "y":7}] + } + } +} diff --git a/keyboards/ergodox_ez/ergodox_ez.h b/keyboards/ergodox_ez/ergodox_ez.h index d6fa30bb20c..eda6d767cf2 100644 --- a/keyboards/ergodox_ez/ergodox_ez.h +++ b/keyboards/ergodox_ez/ergodox_ez.h @@ -250,5 +250,7 @@ inline void ergodox_led_all_set(uint8_t n) #define LAYOUT_ergodox KEYMAP #define LAYOUT_ergodox_pretty KEYMAP_PRETTY +#define LAYOUT_ergodox_80 KEYMAP_80 +#define LAYOUT_ergodox_pretty_80 KEYMAP_PRETTY_80 #endif diff --git a/keyboards/ergodox_ez/info.json b/keyboards/ergodox_ez/info.json index 6fdbca23624..fc39c78485f 100644 --- a/keyboards/ergodox_ez/info.json +++ b/keyboards/ergodox_ez/info.json @@ -1,9 +1,10 @@ { - "keyboard_name": "ErgoDox EZ", - "url": "ergodox-ez.com", - "maintainer": "erez", - "width": 19.5, - "height": 9.375, + "keyboard_name": "ErgoDox EZ", + "url": "ergodox-ez.com", + "maintainer": "erez", + "width": 19.5, + "height": 9.375, + "layouts": { "LAYOUT_ergodox": { "layout": [{"x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"x":11.5, "y":0}, {"x":12.5, "y":0}, {"x":13.5, "y":0}, {"x":14.5, "y":0}, {"x":15.5, "y":0, "w":1.5}, {"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, "h":1.5}, {"x":9.5, "y":1, "h":1.5}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1}, {"x":14.5, "y":1}, {"x":15.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.5}, {"x":1.5, "y":2}, {"x":2.5, "y":2}, {"x":3.5, "y":2}, {"x":4.5, "y":2}, {"x":5.5, "y":2}, {"x":10.5, "y":2}, {"x":11.5, "y":2}, {"x":12.5, "y":2}, {"x":13.5, "y":2}, {"x":14.5, "y":2}, {"x":15.5, "y":2, "w":1.5}, {"x":6.5, "y":2.5, "h":1.5}, {"x":9.5, "y":2.5, "h":1.5}, {"x":0, "y":3, "w":1.5}, {"x":1.5, "y":3}, {"x":2.5, "y":3}, {"x":3.5, "y":3}, {"x":4.5, "y":3}, {"x":5.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}, {"x":12.5, "y":3}, {"x":13.5, "y":3}, {"x":14.5, "y":3}, {"x":15.5, "y":3, "w":1.5}, {"x":0.5, "y":4}, {"x":1.5, "y":4}, {"x":2.5, "y":4}, {"x":3.5, "y":4}, {"x":4.5, "y":4}, {"x":11.5, "y":4}, {"x":12.5, "y":4}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}, {"x":6, "y":5}, {"x":7, "y":5}, {"x":9, "y":5}, {"x":10, "y":5}, {"x":5, "y":6, "h":2}, {"x":6, "y":6, "h":2}, {"x":7, "y":6}, {"x":9, "y":6}, {"x":10, "y":6, "h":2}, {"x":11, "y":6, "h":2}, {"x":7, "y":7}, {"x":9, "y":7}] @@ -11,10 +12,10 @@ "LAYOUT_ergodox_pretty": { "layout": [{"x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"x":11.5, "y":0}, {"x":12.5, "y":0}, {"x":13.5, "y":0}, {"x":14.5, "y":0}, {"x":15.5, "y":0, "w":1.5}, {"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, "h":1.5}, {"x":9.5, "y":1, "h":1.5}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1}, {"x":14.5, "y":1}, {"x":15.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.5}, {"x":1.5, "y":2}, {"x":2.5, "y":2}, {"x":3.5, "y":2}, {"x":4.5, "y":2}, {"x":5.5, "y":2}, {"x":10.5, "y":2}, {"x":11.5, "y":2}, {"x":12.5, "y":2}, {"x":13.5, "y":2}, {"x":14.5, "y":2}, {"x":15.5, "y":2, "w":1.5}, {"x":6.5, "y":2.5, "h":1.5}, {"x":9.5, "y":2.5, "h":1.5}, {"x":0, "y":3, "w":1.5}, {"x":1.5, "y":3}, {"x":2.5, "y":3}, {"x":3.5, "y":3}, {"x":4.5, "y":3}, {"x":5.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}, {"x":12.5, "y":3}, {"x":13.5, "y":3}, {"x":14.5, "y":3}, {"x":15.5, "y":3, "w":1.5}, {"x":0.5, "y":4}, {"x":1.5, "y":4}, {"x":2.5, "y":4}, {"x":3.5, "y":4}, {"x":4.5, "y":4}, {"x":11.5, "y":4}, {"x":12.5, "y":4}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}, {"x":6, "y":5}, {"x":7, "y":5}, {"x":9, "y":5}, {"x":10, "y":5}, {"x":5, "y":6, "h":2}, {"x":6, "y":6, "h":2}, {"x":7, "y":6}, {"x":9, "y":6}, {"x":10, "y":6, "h":2}, {"x":11, "y":6, "h":2}, {"x":7, "y":7}, {"x":9, "y":7}] }, - "KEYMAP_80": { + "LAYOUT_ergodox_80": { "layout": [{"x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"x":11.5, "y":0}, {"x":12.5, "y":0}, {"x":13.5, "y":0}, {"x":14.5, "y":0}, {"x":15.5, "y":0, "w":1.5}, {"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, "h":1.5}, {"x":9.5, "y":1, "h":1.5}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1}, {"x":14.5, "y":1}, {"x":15.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.5}, {"x":1.5, "y":2}, {"x":2.5, "y":2}, {"x":3.5, "y":2}, {"x":4.5, "y":2}, {"x":5.5, "y":2}, {"x":10.5, "y":2}, {"x":11.5, "y":2}, {"x":12.5, "y":2}, {"x":13.5, "y":2}, {"x":14.5, "y":2}, {"x":15.5, "y":2, "w":1.5}, {"x":6.5, "y":2.5, "h":1.5}, {"x":9.5, "y":2.5, "h":1.5}, {"x":0, "y":3, "w":1.5}, {"x":1.5, "y":3}, {"x":2.5, "y":3}, {"x":3.5, "y":3}, {"x":4.5, "y":3}, {"x":5.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}, {"x":12.5, "y":3}, {"x":13.5, "y":3}, {"x":14.5, "y":3}, {"x":15.5, "y":3, "w":1.5}, {"x":0.5, "y":4}, {"x":1.5, "y":4}, {"x":2.5, "y":4}, {"x":3.5, "y":4}, {"x":4.5, "y":4}, {"x":11.5, "y":4}, {"x":12.5, "y":4}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}, {"x":6, "y":5}, {"x":7, "y":5}, {"x":9, "y":5}, {"x":10, "y":5}, {"x":5, "y":6}, {"x":6, "y":6}, {"x":7, "y":6}, {"x":9, "y":6}, {"x":10, "y":6}, {"x":11, "y":6}, {"x":5, "y":7}, {"x":6, "y":7}, {"x":7, "y":7}, {"x":9, "y":7}, {"x":10, "y":7}, {"x":11, "y":7}] }, - "KEYMAP_PRETTY_80": { + "LAYOUT_ergodox_pretty_80": { "layout": [{"x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"x":11.5, "y":0}, {"x":12.5, "y":0}, {"x":13.5, "y":0}, {"x":14.5, "y":0}, {"x":15.5, "y":0, "w":1.5}, {"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, "h":1.5}, {"x":9.5, "y":1, "h":1.5}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1}, {"x":14.5, "y":1}, {"x":15.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.5}, {"x":1.5, "y":2}, {"x":2.5, "y":2}, {"x":3.5, "y":2}, {"x":4.5, "y":2}, {"x":5.5, "y":2}, {"x":10.5, "y":2}, {"x":11.5, "y":2}, {"x":12.5, "y":2}, {"x":13.5, "y":2}, {"x":14.5, "y":2}, {"x":15.5, "y":2, "w":1.5}, {"x":6.5, "y":2.5, "h":1.5}, {"x":9.5, "y":2.5, "h":1.5}, {"x":0, "y":3, "w":1.5}, {"x":1.5, "y":3}, {"x":2.5, "y":3}, {"x":3.5, "y":3}, {"x":4.5, "y":3}, {"x":5.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}, {"x":12.5, "y":3}, {"x":13.5, "y":3}, {"x":14.5, "y":3}, {"x":15.5, "y":3, "w":1.5}, {"x":0.5, "y":4}, {"x":1.5, "y":4}, {"x":2.5, "y":4}, {"x":3.5, "y":4}, {"x":4.5, "y":4}, {"x":11.5, "y":4}, {"x":12.5, "y":4}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}, {"x":6, "y":5}, {"x":7, "y":5}, {"x":9, "y":5}, {"x":10, "y":5}, {"x":5, "y":6}, {"x":6, "y":6}, {"x":7, "y":6}, {"x":9, "y":6}, {"x":10, "y":6}, {"x":11, "y":6}, {"x":5, "y":7}, {"x":6, "y":7}, {"x":7, "y":7}, {"x":9, "y":7}, {"x":10, "y":7}, {"x":11, "y":7}] } } diff --git a/keyboards/ergodox_infinity/ergodox_infinity.h b/keyboards/ergodox_infinity/ergodox_infinity.h index 25249c714a0..d551fde511a 100644 --- a/keyboards/ergodox_infinity/ergodox_infinity.h +++ b/keyboards/ergodox_infinity/ergodox_infinity.h @@ -118,6 +118,40 @@ inline void ergodox_led_all_set(uint8_t n) { { B80, B81, B82, B83, B84 } \ } +#define KEYMAP_PRETTY( \ + /* left hand, spatial positions */ /* right hand, spatial positions */ \ + A80, A70, A60, A50, A40, A30, A20, B20, B30, B40, B50, B60, B70, B80, \ + A81, A71, A61, A51, A41, A31, A21, B21, B31, B41, B51, B61, B71, B81, \ + A82, A72, A62, A52, A42, A32, B32, B42, B52, B62, B72, B82, \ + A83, A73, A63, A53, A43, A33, A23, B23, B33, B43, B53, B63, B73, B83, \ + A84, A74, A64, A54, A44, B44, B54, B64, B74, B84, \ + A13, A03, B03, B13, \ + A04, B04, \ + A34, A24, A14, B14, B24, B34 ) \ + \ + /* matrix positions */ \ + { \ + { KC_NO, KC_NO, KC_NO, A03, A04 }, \ + { KC_NO, KC_NO, KC_NO, A13, A14 }, \ + { A20, A21, KC_NO, A23, A24 }, \ + { A30, A31, A32, A33, A34 }, \ + { A40, A41, A42, A43, A44 }, \ + { A50, A51, A52, A53, A54 }, \ + { A60, A61, A62, A63, A64 }, \ + { A70, A71, A72, A73, A74 }, \ + { A80, A81, A82, A83, A84 }, \ + { KC_NO, KC_NO, KC_NO, B03, B04 }, \ + { KC_NO, KC_NO, KC_NO, B13, B14 }, \ + { B20, B21, KC_NO, B23, B24 }, \ + { B30, B31, B32, B33, B34 }, \ + { B40, B41, B42, B43, B44 }, \ + { B50, B51, B52, B53, B54 }, \ + { B60, B61, B62, B63, B64 }, \ + { B70, B71, B72, B73, B74 }, \ + { B80, B81, B82, B83, B84 } \ +} + #define LAYOUT_ergodox KEYMAP +#define LAYOUT_ergodox_pretty KEYMAP_PRETTY #endif /* KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_ */ diff --git a/keyboards/ergodox_infinity/info.json b/keyboards/ergodox_infinity/info.json index 5cd0fd7baa7..1022a740e2f 100644 --- a/keyboards/ergodox_infinity/info.json +++ b/keyboards/ergodox_infinity/info.json @@ -3,8 +3,11 @@ "width": 19.5, "height": 9.375, "layouts": { - "KEYMAP": { + "LAYOUT_ergodox": { "layout": [{"label":"#", "x":3.5, "y":0}, {"label":"*", "x":15, "y":0}, {"label":"@", "x":2.5, "y":0.125}, {"label":"$", "x":4.5, "y":0.125}, {"label":"&", "x":14, "y":0.125}, {"label":"(", "x":16, "y":0.125}, {"label":"%", "x":5.5, "y":0.25}, {"x":6.5, "y":0.25}, {"x":12, "y":0.25}, {"label":"^", "x":13, "y":0.25}, {"x":0, "y":0.375, "w":1.5}, {"label":"!", "x":1.5, "y":0.375}, {"label":")", "x":17, "y":0.375}, {"x":18, "y":0.375, "w":1.5}, {"label":"E", "x":3.5, "y":1}, {"label":"I", "x":15, "y":1}, {"label":"W", "x":2.5, "y":1.125}, {"label":"R", "x":4.5, "y":1.125}, {"label":"U", "x":14, "y":1.125}, {"label":"O", "x":16, "y":1.125}, {"label":"T", "x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5}, {"x":12, "y":1.25, "h":1.5}, {"label":"Y", "x":13, "y":1.25}, {"x":0, "y":1.375, "w":1.5}, {"label":"Q", "x":1.5, "y":1.375}, {"label":"P", "x":17, "y":1.375}, {"x":18, "y":1.375, "w":1.5}, {"label":"D", "x":3.5, "y":2}, {"label":"K", "x":15, "y":2}, {"label":"S", "x":2.5, "y":2.125}, {"label":"F", "x":4.5, "y":2.125}, {"label":"J", "x":14, "y":2.125}, {"label":"L", "x":16, "y":2.125}, {"label":"G", "x":5.5, "y":2.25}, {"label":"H", "x":13, "y":2.25}, {"x":0, "y":2.375, "w":1.5}, {"label":"A", "x":1.5, "y":2.375}, {"label":":", "x":17, "y":2.375}, {"x":18, "y":2.375, "w":1.5}, {"x":6.5, "y":2.75, "h":1.5}, {"x":12, "y":2.75, "h":1.5}, {"label":"C", "x":3.5, "y":3}, {"label":"<", "x":15, "y":3}, {"label":"X", "x":2.5, "y":3.125}, {"label":"V", "x":4.5, "y":3.125}, {"label":"M", "x":14, "y":3.125}, {"label":">", "x":16, "y":3.125}, {"label":"B", "x":5.5, "y":3.25}, {"label":"N", "x":13, "y":3.25}, {"x":0, "y":3.375, "w":1.5}, {"label":"Z", "x":1.5, "y":3.375}, {"label":"?", "x":17, "y":3.375}, {"x":18, "y":3.375, "w":1.5}, {"x":3.5, "y":4}, {"x":15, "y":4}, {"x":2.5, "y":4.125}, {"x":4.5, "y":4.125}, {"x":14, "y":4.125}, {"x":16, "y":4.125}, {"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":17, "y":4.375}, {"x":18, "y":4.375}, {"x":1, "y":4.375}, {"x":2, "y":4.375}, {"x":0, "y":5.375, "h":2}, {"x":1, "y":5.375, "h":2}, {"x":2, "y":5.375}, {"x":2, "y":6.375}, {"x":-3.0, "y":6.375}, {"x":-2, "y":6.375}, {"x":-3.0, "y":7.375}, {"x":-2, "y":7.375, "h":2}, {"x":-1.0, "y":7.375, "h":2}, {"x":-3.0, "y":8.375}] + }, + "LAYOUT_ergodox_pretty": { + "layout": [{"label":"#", "x":3.5, "y":0}, {"label":"*", "x":15, "y":0}, {"label":"@", "x":2.5, "y":0.125}, {"label":"$", "x":4.5, "y":0.125}, {"label":"&", "x":14, "y":0.125}, {"label":"(", "x":16, "y":0.125}, {"label":"%", "x":5.5, "y":0.25}, {"x":6.5, "y":0.25}, {"x":12, "y":0.25}, {"label":"^", "x":13, "y":0.25}, {"x":0, "y":0.375, "w":1.5}, {"label":"!", "x":1.5, "y":0.375}, {"label":")", "x":17, "y":0.375}, {"x":18, "y":0.375, "w":1.5}, {"label":"E", "x":3.5, "y":1}, {"label":"I", "x":15, "y":1}, {"label":"W", "x":2.5, "y":1.125}, {"label":"R", "x":4.5, "y":1.125}, {"label":"U", "x":14, "y":1.125}, {"label":"O", "x":16, "y":1.125}, {"label":"T", "x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5}, {"x":12, "y":1.25, "h":1.5}, {"label":"Y", "x":13, "y":1.25}, {"x":0, "y":1.375, "w":1.5}, {"label":"Q", "x":1.5, "y":1.375}, {"label":"P", "x":17, "y":1.375}, {"x":18, "y":1.375, "w":1.5}, {"label":"D", "x":3.5, "y":2}, {"label":"K", "x":15, "y":2}, {"label":"S", "x":2.5, "y":2.125}, {"label":"F", "x":4.5, "y":2.125}, {"label":"J", "x":14, "y":2.125}, {"label":"L", "x":16, "y":2.125}, {"label":"G", "x":5.5, "y":2.25}, {"label":"H", "x":13, "y":2.25}, {"x":0, "y":2.375, "w":1.5}, {"label":"A", "x":1.5, "y":2.375}, {"label":":", "x":17, "y":2.375}, {"x":18, "y":2.375, "w":1.5}, {"x":6.5, "y":2.75, "h":1.5}, {"x":12, "y":2.75, "h":1.5}, {"label":"C", "x":3.5, "y":3}, {"label":"<", "x":15, "y":3}, {"label":"X", "x":2.5, "y":3.125}, {"label":"V", "x":4.5, "y":3.125}, {"label":"M", "x":14, "y":3.125}, {"label":">", "x":16, "y":3.125}, {"label":"B", "x":5.5, "y":3.25}, {"label":"N", "x":13, "y":3.25}, {"x":0, "y":3.375, "w":1.5}, {"label":"Z", "x":1.5, "y":3.375}, {"label":"?", "x":17, "y":3.375}, {"x":18, "y":3.375, "w":1.5}, {"x":3.5, "y":4}, {"x":15, "y":4}, {"x":2.5, "y":4.125}, {"x":4.5, "y":4.125}, {"x":14, "y":4.125}, {"x":16, "y":4.125}, {"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":17, "y":4.375}, {"x":18, "y":4.375}, {"x":1, "y":4.375}, {"x":2, "y":4.375}, {"x":0, "y":5.375, "h":2}, {"x":1, "y":5.375, "h":2}, {"x":2, "y":5.375}, {"x":2, "y":6.375}, {"x":-3.0, "y":6.375}, {"x":-2, "y":6.375}, {"x":-3.0, "y":7.375}, {"x":-2, "y":7.375, "h":2}, {"x":-1.0, "y":7.375, "h":2}, {"x":-3.0, "y":8.375}] } - } + } } From 5d5b161d808cd94b1230ef08d5f7b27b2f1ab1f9 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Sat, 21 Apr 2018 17:00:46 -0700 Subject: [PATCH 038/152] ALF X2 QMK Configurator Support (#2788) * Add microswitch information for visiblity in QMK Configurator * Add info.json with layouts for ALF X2 * Add new LAYOUTs * remove that extra comma --- keyboards/alf_x2/alf_x2.h | 70 ++++++++++++++++++++++++++++++++++++++ keyboards/alf_x2/info.json | 32 +++++++++++++++++ keyboards/alf_x2/readme.md | 4 +++ 3 files changed, 106 insertions(+) create mode 100644 keyboards/alf_x2/info.json diff --git a/keyboards/alf_x2/alf_x2.h b/keyboards/alf_x2/alf_x2.h index dee10bf1bfe..a15114f0114 100644 --- a/keyboards/alf_x2/alf_x2.h +++ b/keyboards/alf_x2/alf_x2.h @@ -19,4 +19,74 @@ { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \ } +#define LAYOUT_std_ansi( \ + K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \ + K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \ + K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ + K400, K401, K403, K404, K406, K408, K410, K411, K413, K414 \ +) { \ + { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \ + { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \ + { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \ + { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \ + { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, K414 } \ +} + +#define LAYOUT_std_splits( \ + 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, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314,\ + K400, K401, K403, K404, K406, K408, K410, K411, 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, KC_NO }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \ + { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, K414 } \ +} + +#define LAYOUT_hhkb( \ + 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, \ + K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314,\ + K401, K403, K404, K406, K408, K410, K411 \ +) { \ + { 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, KC_NO }, \ + { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \ + { KC_NO, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, KC_NO, KC_NO } \ +} + +#define LAYOUT_2u_split_arrows( \ + 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, \ + 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, KC_NO }, \ + { 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 } \ +} + +#define LAYOUT_split_arrows( \ + 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, \ + K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, 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, KC_NO }, \ + { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_N), K313, K314 }, \ + { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \ +} + #endif \ No newline at end of file diff --git a/keyboards/alf_x2/info.json b/keyboards/alf_x2/info.json new file mode 100644 index 00000000000..cdec1cd965d --- /dev/null +++ b/keyboards/alf_x2/info.json @@ -0,0 +1,32 @@ +{ + "keyboard_name": "ALF X2", + "url": "", + "maintainer": "qmk", + "width": 15.0, + "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}, {"label":"Enter", "x":12.75, "y":2, "w":2.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}, {"x":12, "y":3}, {"label":"Shift", "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":4.25, "y":4, "w":1.3}, {"x":6.0, "y":4, "w":2}, {"x":8.5, "y":4, "w":1.3}, {"label":"Alt", "x":10.0, "y":4}, {"label":"Alt", "x":11.0, "y":4}, {"label":"Win", "x":12.0, "y":4}, {"label":"Menu", "x":13.0, "y":4}, {"label":"Ctrl", "x":14.0, "y":4}] + }, + + "LAYOUT_std_ansi": { + "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}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"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.25}, {"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":2.75}, {"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":4.25, "y":4}, {"x":5.5, "y":4, "w":2.75}, {"x":8.5, "y":4}, {"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}] + }, + + "LAYOUT_hhkb": { + "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}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"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":"Win", "x":1.75, "y":4, "w":1.25}, {"label":"Alt", "x":3, "y":4, "w":1.25}, {"x":4.75, "y":4}, {"x":6, "y":4, "w":2.75}, {"x":9, "y":4}, {"label":"Alt", "x":10.5, "y":4, "w":1.25}, {"label":"Win", "x":11.75, "y":4, "w":1.25}] + }, + + "LAYOUT_std_splits": { + "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}, {"label":"Enter", "x":12.75, "y":2, "w":2.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":4.25, "y":4}, {"x":5.5, "y":4, "w":2.75}, {"x":8.5, "y":4}, {"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}] + }, + + "LAYOUT_2u_split_arrows": { + "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}, {"label":"Enter", "x":12.75, "y":2, "w":2.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":4.25, "y":4}, {"x":5.5, "y":4, "w":2.75}, {"x":8.5, "y":4}, {"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_split_arrows": { + "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}, {"label":"Enter", "x":12.75, "y":2, "w":2.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":"Shift", "x":11.25, "y":3, "w":1.75}, {"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":4.25, "y":4}, {"x":5.5, "y":4, "w":2.75}, {"x":8.5, "y":4}, {"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}] + } + } +} \ No newline at end of file diff --git a/keyboards/alf_x2/readme.md b/keyboards/alf_x2/readme.md index d51cd180a25..7d63a71bafb 100644 --- a/keyboards/alf_x2/readme.md +++ b/keyboards/alf_x2/readme.md @@ -4,6 +4,10 @@ A customizable 60% keyboard. +In QMK Configurator, the two keys to the left and right of the spacebar are the microswitches at the top of the PCB. + +In the LAYOUT macros, K404 and K408 are the microswitches at the top of the PCB. + Keyboard Maintainer: QMK Community Hardware Supported: ALF X2 60% Hardware Availability: [zfrontier](https://en.zfrontier.com/products/group-buy-alf-x2-60) From 7801356bd4d098edab80543cb704e9a995e6ec4e Mon Sep 17 00:00:00 2001 From: Joe Wasson Date: Sat, 21 Apr 2018 23:16:25 -0700 Subject: [PATCH 039/152] Add layouts to 1up60rgb. (#2789) * Add layouts to 1up60rgb. * Fix build break in header file for 1up60rgb. --- keyboards/1up60rgb/1up60rgb.h | 6 +++--- keyboards/1up60rgb/info.json | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/keyboards/1up60rgb/1up60rgb.h b/keyboards/1up60rgb/1up60rgb.h index 564a82caa6d..1f7b7aabea6 100644 --- a/keyboards/1up60rgb/1up60rgb.h +++ b/keyboards/1up60rgb/1up60rgb.h @@ -19,7 +19,7 @@ /* ANSI variant. No extra keys for ISO */ -#define LAYOUT_60_ansi ( \ +#define LAYOUT_60_ansi( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \ 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, K214, \ @@ -34,7 +34,7 @@ ) /* ISO variant. Remove useless ANSI keys */ -#define LAYOUT_60_iso ( \ +#define LAYOUT_60_iso( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \ K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \ @@ -49,7 +49,7 @@ ) /* HHKB Variant */ -#define LAYOUT_60_ansi_split_bs_rshift ( \ +#define LAYOUT_60_ansi_split_bs_rshift( \ 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, K214, \ diff --git a/keyboards/1up60rgb/info.json b/keyboards/1up60rgb/info.json index d92164444d5..5af24c9b2ab 100644 --- a/keyboards/1up60rgb/info.json +++ b/keyboards/1up60rgb/info.json @@ -5,8 +5,20 @@ "width": 15, "height": 5, "layouts": { - "KEYMAP": { - "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}, {"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}, {"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}, {"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":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}] - } + "KEYMAP": { + "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}, {"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}, {"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}, {"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":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}] + }, + + "LAYOUT_60_ansi": { + "layout": [{"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":"Backspace", "w":2}, {"x":0, "y":1, "label":"Tab", "w":1.5}, {"x":1.5, "y":1, "label":"Q"}, {"x":2.5, "y":1, "label":"W"}, {"x":3.5, "y":1, "label":"E"}, {"x":4.5, "y":1, "label":"R"}, {"x":5.5, "y":1, "label":"T"}, {"x":6.5, "y":1, "label":"Y"}, {"x":7.5, "y":1, "label":"U"}, {"x":8.5, "y":1, "label":"I"}, {"x":9.5, "y":1, "label":"O"}, {"x":10.5, "y":1, "label":"P"}, {"x":11.5, "y":1, "label":"{"}, {"x":12.5, "y":1, "label":"}"}, {"x":13.5, "y":1, "label":"|", "w":1.5}, {"x":0, "y":2, "label":"Caps Lock", "w":1.75}, {"x":1.75, "y":2, "label":"A"}, {"x":2.75, "y":2, "label":"S"}, {"x":3.75, "y":2, "label":"D"}, {"x":4.75, "y":2, "label":"F"}, {"x":5.75, "y":2, "label":"G"}, {"x":6.75, "y":2, "label":"H"}, {"x":7.75, "y":2, "label":"J"}, {"x":8.75, "y":2, "label":"K"}, {"x":9.75, "y":2, "label":"L"}, {"x":10.75, "y":2, "label":":"}, {"x":11.75, "y":2, "label":"\""}, {"x":12.75, "y":2, "label":"Enter", "w":2.25}, {"x":0, "y":3, "label":"Shift", "w":2.25}, {"x":2.25, "y":3, "label":"Z"}, {"x":3.25, "y":3, "label":"X"}, {"x":4.25, "y":3, "label":"C"}, {"x":5.25, "y":3, "label":"V"}, {"x":6.25, "y":3, "label":"B"}, {"x":7.25, "y":3, "label":"N"}, {"x":8.25, "y":3, "label":"M"}, {"x":9.25, "y":3, "label":"<"}, {"x":10.25, "y":3, "label":">"}, {"x":11.25, "y":3, "label":"?"}, {"x":12.25, "y":3, "label":"Shift", "w":2.75}, {"x":0, "y":4, "label":"Ctrl", "w":1.25}, {"x":1.25, "y":4, "label":"Win", "w":1.25}, {"x":2.5, "y":4, "label":"Alt", "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "label":"Alt", "w":1.25}, {"x":11.25, "y":4, "label":"Win", "w":1.25}, {"x":12.5, "y":4, "label":"Menu", "w":1.25}, {"x":13.75, "y":4, "label":"Ctrl", "w":1.25}] + }, + + "LAYOUT_60_iso": { + "layout": [{"label":"\u00ac", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "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":"Backspace", "x":13, "y":0, "w":2}, {"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":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"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":"~", "x":12.75, "y":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "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":2.75}, {"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":"AltGr", "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}] + }, + + "LAYOUT_60_ansi_split_bs_rshift": { + "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}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"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.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"label":"Alt", "x":10, "y":4, "w":1.5}, {"label":"Win", "x":11.5, "y":4}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}] + } } } From fb5115f6cd8242788cc23a19a691c44d507ec53c Mon Sep 17 00:00:00 2001 From: Shinichi Ohki Date: Mon, 23 Apr 2018 06:19:45 +0900 Subject: [PATCH 040/152] Fix command line options prefix. (#2790) --- keyboards/chibios_test/teensy_lc_onekey/instructions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/chibios_test/teensy_lc_onekey/instructions.md b/keyboards/chibios_test/teensy_lc_onekey/instructions.md index 85698bd8418..66f73bf14b8 100644 --- a/keyboards/chibios_test/teensy_lc_onekey/instructions.md +++ b/keyboards/chibios_test/teensy_lc_onekey/instructions.md @@ -15,7 +15,7 @@ Next, you'll need ChibiOS. For Teensies, you'll need code from two repositories: ### If you’re using git -Run `git submodule sync —recursive && git submodule update --init —recursive`. This will install ChibiOS and ChibiOS-Contrib in the `/lib/` directory. +Run `git submodule sync --recursive && git submodule update --init --recursive`. This will install ChibiOS and ChibiOS-Contrib in the `/lib/` directory. ### If you’re not using Git From 70101cf6112d74d4dddcda6d2f0ae64991b7a4e6 Mon Sep 17 00:00:00 2001 From: Luciano Malavasi Date: Sun, 22 Apr 2018 20:09:52 -0700 Subject: [PATCH 041/152] Formatting changes to Alpha readme.md (#2781) * alpha with firmware added to list of keyboards, ready to push * revised according to drashna's fixes * keymap -> layout? * fixed macro and improved layout issuesOC * Update rules.mk * Update alpha.h * Update and rename keyboards/alpha/layouts/default/28_alpha/keymap.c to keyboards/alpha/keymaps/default/keymap.c * alpha/readme.md added according to qmk templateOC * resolved a careless merge conflict * bugfix * Fixed /keyboards/alpha/readme.md formatting issues --- keyboards/alpha/readme.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/keyboards/alpha/readme.md b/keyboards/alpha/readme.md index 75a9d5902b3..3a733d36581 100644 --- a/keyboards/alpha/readme.md +++ b/keyboards/alpha/readme.md @@ -1,14 +1,17 @@ # Alpha -![Alpha](https://imgur.com/a/TouJ5rH) +![Alpha](https://i.imgur.com/J6EJ30N.jpg) A 28-key, semi-ortho keyboard designed by PyroL! -Keyboard Maintainer: [PyroL](https://www.github.com/PyrooL) -Hardware Supported: Alpha PCB, Pro Micro + +Keyboard Maintainer: [PyroL](https://www.github.com/PyrooL) + +Hardware Supported: Alpha PCB, Pro Micro + Hardware Availability: on a group-buy basis for now. Pro Micros can be found on Ali or from the official Sparkfun website. Make example for Alpha (after setting up your build environment): make alpha:default - See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/faq/build-compile-qmk) for more information. +See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/faq/build-compile-qmk) for more information. \ No newline at end of file From fda23af2810b6ec5dd0c7f32dafc555681e7979f Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Tue, 24 Apr 2018 09:00:22 -0700 Subject: [PATCH 042/152] Support for new keyboard: Meme (#2797) * initial commit for meme keyboard * Fix that row by column * Fix those dimensions * work in progress commit * got that switch matrix to work * add all supported layouts * add info.json for QMK configurator support * let my name be known --- keyboards/meme/config.h | 190 +++++++++++++++++++++++ keyboards/meme/info.json | 24 +++ keyboards/meme/keymaps/default/config.h | 24 +++ keyboards/meme/keymaps/default/keymap.c | 27 ++++ keyboards/meme/keymaps/default/readme.md | 1 + keyboards/meme/meme.c | 43 +++++ keyboards/meme/meme.h | 102 ++++++++++++ keyboards/meme/readme.md | 15 ++ keyboards/meme/rules.mk | 68 ++++++++ 9 files changed, 494 insertions(+) create mode 100644 keyboards/meme/config.h create mode 100644 keyboards/meme/info.json create mode 100644 keyboards/meme/keymaps/default/config.h create mode 100644 keyboards/meme/keymaps/default/keymap.c create mode 100644 keyboards/meme/keymaps/default/readme.md create mode 100644 keyboards/meme/meme.c create mode 100644 keyboards/meme/meme.h create mode 100644 keyboards/meme/readme.md create mode 100644 keyboards/meme/rules.mk diff --git a/keyboards/meme/config.h b/keyboards/meme/config.h new file mode 100644 index 00000000000..d1e3d27a185 --- /dev/null +++ b/keyboards/meme/config.h @@ -0,0 +1,190 @@ +/* +Copyright 2018 MechMerlin + +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 0x0000 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Switchmod Keyboards +#define PRODUCT Meme +#define DESCRIPTION A custom 65% gasket mount keyboard + +/* key matrix size */ +#define MATRIX_ROWS 10 +#define MATRIX_COLS 8 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { C2, D0, D1, D4, D5, D6, B0, B1, B2, B3 } +#define MATRIX_COL_PINS { D3, D2, B5, B6, C7, C6, C5, C4 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B7 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * 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 + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +#endif diff --git a/keyboards/meme/info.json b/keyboards/meme/info.json new file mode 100644 index 00000000000..4d72d79dcbc --- /dev/null +++ b/keyboards/meme/info.json @@ -0,0 +1,24 @@ +{ + "keyboard_name": "Meme", + "url": "", + "maintainer": "qmk", + "width": 16, + "height": 5, + "layouts": { + "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}, {"x":15, "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}, {"x":15, "y":1}, {"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}, {"x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"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}, {"x":15, "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}, {"label":"Win", "x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}] + }, + + "LAYOUT_vanilla": { + "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, "w":2}, {"x":15, "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}, {"x":15, "y":1}, {"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}, {"x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"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}, {"x":15, "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}, {"label":"Win", "x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}] + }, + + "LAYOUT_aria": { + "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, "w":2}, {"x":15, "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}, {"x":15, "y":1}, {"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}, {"x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"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}, {"x":15, "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.5}, {"x":11.5, "y":4, "w":1.5}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}] + }, + + "LAYOUT_true": { + "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}, {"x":15, "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}, {"x":15, "y":1}, {"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}, {"x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"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}, {"x":15, "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.5}, {"x":11.5, "y":4, "w":1.5}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}] + } + } +} diff --git a/keyboards/meme/keymaps/default/config.h b/keyboards/meme/keymaps/default/config.h new file mode 100644 index 00000000000..2c852d18199 --- /dev/null +++ b/keyboards/meme/keymaps/default/config.h @@ -0,0 +1,24 @@ +/* Copyright 2018 MechMerlin + * + * 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/meme/keymaps/default/keymap.c b/keyboards/meme/keymaps/default/keymap.c new file mode 100644 index 00000000000..6c4cb6cf5f3 --- /dev/null +++ b/keyboards/meme/keymaps/default/keymap.c @@ -0,0 +1,27 @@ +/* Copyright 2018 MechMerlin + * + * 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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[0] = LAYOUT_all(\ + 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_BSPC, KC_INS, + 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_RCTL, 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_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, KC_SPACE, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT + ) +}; diff --git a/keyboards/meme/keymaps/default/readme.md b/keyboards/meme/keymaps/default/readme.md new file mode 100644 index 00000000000..59aa078d715 --- /dev/null +++ b/keyboards/meme/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for Meme diff --git a/keyboards/meme/meme.c b/keyboards/meme/meme.c new file mode 100644 index 00000000000..8ba421b1508 --- /dev/null +++ b/keyboards/meme/meme.c @@ -0,0 +1,43 @@ +/* Copyright 2018 MechMerlin + * + * 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 "meme.h" + +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); +} + +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); +} diff --git a/keyboards/meme/meme.h b/keyboards/meme/meme.h new file mode 100644 index 00000000000..4c55b4a8f4e --- /dev/null +++ b/keyboards/meme/meme.h @@ -0,0 +1,102 @@ +/* Copyright 2018 MechMerlin + * + * 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 MEME_H +#define MEME_H + +#include "quantum.h" + +#define LAYOUT_all( \ + K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K07, K17, \ + K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K37, \ + K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K56, K57, \ + K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K76, K67, K77, \ + K80, K90, K81, K92, K85, K95, K86, K96, K87, K97 \ +)\ +{\ + {K00, K01, K02, K03, K04, K05, K06, K07}, \ + {K10, K11, K12, K13, K14, K15, K16, K17}, \ + {K20, K21, K22, K23, K24, K25, K26, KC_NO}, \ + {K30, K31, K32, K33, K34, K35, K36, K37}, \ + {K40, K41, K42, K43, K44, K45, KC_NO, KC_NO}, \ + {K50, K51, K52, K53, K54, K55, K56, K57}, \ + {K60, K61, K62, K63, K64, K65, KC_NO, K67}, \ + {K70, K71, K72, K73, K74, KC_NO, K76, K77}, \ + {K80, K81, KC_NO, KC_NO, KC_NO, K85, K86, K87}, \ + {K90, KC_NO, K92, KC_NO, KC_NO, K95, K96, K97}, \ +} + +#define LAYOUT_vanilla( \ + K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K07, K17, \ + K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K37, \ + K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K56, K57, \ + K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K76, K67, K77, \ + K80, K90, K81, K92, K85, K95, K86, K96, K87, K97 \ +)\ +{\ + {K00, K01, K02, K03, K04, K05, K06, K07}, \ + {K10, K11, K12, K13, K14, K15, KC_NO, K17}, \ + {K20, K21, K22, K23, K24, K25, K26, KC_NO}, \ + {K30, K31, K32, K33, K34, K35, K36, K37}, \ + {K40, K41, K42, K43, K44, K45, KC_NO, KC_NO}, \ + {K50, K51, K52, K53, K54, K55, K56, K57}, \ + {K60, K61, K62, K63, K64, K65, KC_NO, K67}, \ + {K70, K71, K72, K73, K74, KC_NO, K76, K77}, \ + {K80, K81, KC_NO, KC_NO, KC_NO, K85, K86, K87}, \ + {K90, KC_NO, K92, KC_NO, KC_NO, K95, K96, K97}, \ +} + +#define LAYOUT_aria( \ + K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K07, K17, \ + K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K37, \ + K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K56, K57, \ + K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K76, K67, K77, \ + K80, K90, K81, K92, K85, K86, K96, K87, K97 \ +)\ +{\ + {K00, K01, K02, K03, K04, K05, K06, K07}, \ + {K10, K11, K12, K13, K14, K15, KC_NO, K17}, \ + {K20, K21, K22, K23, K24, K25, K26, KC_NO}, \ + {K30, K31, K32, K33, K34, K35, K36, K37}, \ + {K40, K41, K42, K43, K44, K45, KC_NO, KC_NO}, \ + {K50, K51, K52, K53, K54, K55, K56, K57}, \ + {K60, K61, K62, K63, K64, K65, KC_NO, K67}, \ + {K70, K71, K72, K73, K74, KC_NO, K76, K77}, \ + {K80, K81, KC_NO, KC_NO, KC_NO, K85, K86, K87}, \ + {K90, KC_NO, K92, KC_NO, KC_NO, KC_NO, K96, K97}, \ +} + +#define LAYOUT_true( \ + K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, K07, K17, \ + K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, K37, \ + K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K56, K57, \ + K60, K70, K61, K71, K62, K72, K63, K73, K64, K74, K65, K76, K67, K77, \ + K80, K90, K81, K92, K85, K86, K96, K87, K97 \ +)\ +{\ + {K00, K01, K02, K03, K04, K05, K06, K07}, \ + {K10, K11, K12, K13, K14, K15, K16, K17}, \ + {K20, K21, K22, K23, K24, K25, K26, KC_NO}, \ + {K30, K31, K32, K33, K34, K35, K36, K37}, \ + {K40, K41, K42, K43, K44, K45, KC_NO, KC_NO}, \ + {K50, K51, K52, K53, K54, K55, K56, K57}, \ + {K60, K61, K62, K63, K64, K65, KC_NO, K67}, \ + {K70, K71, K72, K73, K74, KC_NO, K76, K77}, \ + {K80, K81, KC_NO, KC_NO, KC_NO, K85, K86, K87}, \ + {K90, KC_NO, K92, KC_NO, KC_NO, KC_NO, K96, K97}, \ +} + + +#endif diff --git a/keyboards/meme/readme.md b/keyboards/meme/readme.md new file mode 100644 index 00000000000..9d3bce94855 --- /dev/null +++ b/keyboards/meme/readme.md @@ -0,0 +1,15 @@ +# Meme + +![meme](imgur.com image replace me!) + +65% gasket mount keyboard. + +Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin) +Hardware Supported: Meme +Hardware Availability: [Switchmod Keyboards](http://www.switchmod.net/) + +Make example for this keyboard (after setting up your build environment): + + make meme: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/meme/rules.mk b/keyboards/meme/rules.mk new file mode 100644 index 00000000000..45eb6ee3766 --- /dev/null +++ b/keyboards/meme/rules.mk @@ -0,0 +1,68 @@ +# MCU name +#MCU = at90usb1286 +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 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +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 = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches From a0a4c9102c51d9032af270920447d0d6d3bac7bc Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Tue, 24 Apr 2018 09:01:40 -0700 Subject: [PATCH 043/152] Add Generic Keymap for my boards (#2795) * add mechmerlin 60 ansi layout * put meaningful #defines * missed the backslash * add merlin split layout * rename to have a -ansi * Add appropriate readme files * rename KEYMAP to LAYOUT * support for default layout * support for the community keymaps * make sure I don't break the configurator * Don't break the configurator Merlin --- keyboards/1up60rgb/1up60rgb.h | 8 ++--- keyboards/1up60rgb/info.json | 2 +- keyboards/1up60rgb/keymaps/default/keymap.c | 4 +-- keyboards/1up60rgb/keymaps/iso/keymap.c | 4 +-- keyboards/1up60rgb/keymaps/tsangan/keymap.c | 4 +-- keyboards/eagle_viper/v2/v2.h | 2 ++ keyboards/v60_type_r/info.json | 2 +- keyboards/v60_type_r/keymaps/default/keymap.c | 4 +-- keyboards/v60_type_r/keymaps/vimouse/keymap.c | 8 ++--- keyboards/v60_type_r/v60_type_r.h | 7 ++--- .../60_ansi/mechmerlin-ansi/keymap.c | 29 +++++++++++++++++++ .../60_ansi/mechmerlin-ansi/readme.md | 18 ++++++++++++ .../mechmerlin-split/keymap.c | 29 +++++++++++++++++++ .../mechmerlin-split/readme.md | 17 +++++++++++ 14 files changed, 115 insertions(+), 23 deletions(-) create mode 100644 layouts/community/60_ansi/mechmerlin-ansi/keymap.c create mode 100644 layouts/community/60_ansi/mechmerlin-ansi/readme.md create mode 100644 layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c create mode 100644 layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/readme.md diff --git a/keyboards/1up60rgb/1up60rgb.h b/keyboards/1up60rgb/1up60rgb.h index 1f7b7aabea6..969fd5b4a96 100644 --- a/keyboards/1up60rgb/1up60rgb.h +++ b/keyboards/1up60rgb/1up60rgb.h @@ -3,7 +3,7 @@ #include "quantum.h" -#define KEYMAP( \ +#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, \ @@ -25,7 +25,7 @@ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ K400, K401, K403, K406, K410, K411, K413, K414 \ -) KEYMAP( \ +) LAYOUT_all( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K013,\ 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, K214, K214, \ @@ -40,7 +40,7 @@ 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, K313, \ K400, K401, K403, K406, K410, K411, K413, K414 \ -) KEYMAP( \ +) LAYOUT_all( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K013,\ K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K214, \ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \ @@ -55,7 +55,7 @@ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \ K400, K401, K403, K406, K410, K411, K413, K414 \ -) KEYMAP( \ +) 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, K214, K214, \ diff --git a/keyboards/1up60rgb/info.json b/keyboards/1up60rgb/info.json index 5af24c9b2ab..d662dc60d48 100644 --- a/keyboards/1up60rgb/info.json +++ b/keyboards/1up60rgb/info.json @@ -5,7 +5,7 @@ "width": 15, "height": 5, "layouts": { - "KEYMAP": { + "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}, {"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}, {"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}, {"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":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/1up60rgb/keymaps/default/keymap.c b/keyboards/1up60rgb/keymaps/default/keymap.c index 3f0f49b7245..cb372e15d73 100644 --- a/keyboards/1up60rgb/keymaps/default/keymap.c +++ b/keyboards/1up60rgb/keymaps/default/keymap.c @@ -2,14 +2,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( + LAYOUT_all( 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_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_LSFT, 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL), - KEYMAP( + LAYOUT_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, diff --git a/keyboards/1up60rgb/keymaps/iso/keymap.c b/keyboards/1up60rgb/keymaps/iso/keymap.c index 140ff63294c..42fcb6cf9bb 100644 --- a/keyboards/1up60rgb/keymaps/iso/keymap.c +++ b/keyboards/1up60rgb/keymaps/iso/keymap.c @@ -2,14 +2,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( + LAYOUT_all( 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_ENT, 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_RSFT, KC_RSFT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL), - KEYMAP( + LAYOUT_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, diff --git a/keyboards/1up60rgb/keymaps/tsangan/keymap.c b/keyboards/1up60rgb/keymaps/tsangan/keymap.c index 6b47a1a35f2..485010eef10 100644 --- a/keyboards/1up60rgb/keymaps/tsangan/keymap.c +++ b/keyboards/1up60rgb/keymaps/tsangan/keymap.c @@ -2,14 +2,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( + LAYOUT_all( 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_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_LSFT, 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(1), KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_NO, KC_RALT, KC_RGUI, KC_RCTL), - KEYMAP( + LAYOUT_all( RESET, 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_TRNS, BL_TOGG, BL_DEC, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS, diff --git a/keyboards/eagle_viper/v2/v2.h b/keyboards/eagle_viper/v2/v2.h index 63e52690fa6..5beec5bc62b 100644 --- a/keyboards/eagle_viper/v2/v2.h +++ b/keyboards/eagle_viper/v2/v2.h @@ -74,3 +74,5 @@ { KC_NO, K0B, K0C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0J, KC_NO, KC_NO, KC_NO, K0M, K0N, KC_NO } \ } #endif + +#define LAYOUT_60_ansi LAYOUT_eagle diff --git a/keyboards/v60_type_r/info.json b/keyboards/v60_type_r/info.json index 5aaf760e1e5..3bb4ff0a071 100644 --- a/keyboards/v60_type_r/info.json +++ b/keyboards/v60_type_r/info.json @@ -9,7 +9,7 @@ "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":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}, {"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":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}] }, - "LAYOUT_ansi": { + "LAYOUT_60_ansi": { "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}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"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.25}, {"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":2.75}, {"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/v60_type_r/keymaps/default/keymap.c b/keyboards/v60_type_r/keymaps/default/keymap.c index 254b3aa2994..3ba77c658cb 100644 --- a/keyboards/v60_type_r/keymaps/default/keymap.c +++ b/keyboards/v60_type_r/keymaps/default/keymap.c @@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctrl|Gui |Alt | Space |Fn0 |Gui |App|Ctrl| * `-----------------------------------------------------------' */ - [0] = LAYOUT_ansi( + [0] = LAYOUT_60_ansi( 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_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, \ @@ -54,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ - [1] = LAYOUT_ansi( + [1] = LAYOUT_60_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_DEL, \ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_INS, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, KC_TRNS, \ diff --git a/keyboards/v60_type_r/keymaps/vimouse/keymap.c b/keyboards/v60_type_r/keymaps/vimouse/keymap.c index 3deaae98c56..1e3775ab6f1 100644 --- a/keyboards/v60_type_r/keymaps/vimouse/keymap.c +++ b/keyboards/v60_type_r/keymaps/vimouse/keymap.c @@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctrl|Alt |Gui | Space/L3 |Gui |Alt |Ctrl|Fn1| * `-----------------------------------------------------------' */ - [0] = KEYMAP_ALL( + [0] = LAYOUT_all( 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, XXXXX, 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, \ LT(1, 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, \ @@ -51,7 +51,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ - [1] = KEYMAP_ALL( + [1] = LAYOUT_all( 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_PSCR, KC_SLCK, KC_PAUS, KC_INS, \ _____, _____, _____, _____, _____, _____, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_HOME, KC_PGUP, _____, \ @@ -70,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ - [2] = KEYMAP_ALL( + [2] = LAYOUT_all( _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, \ _____, _____, _____, _____, _____, _____, _____, KC_MS_WH_UP, KC_MS_WH_DOWN, _____, _____, _____, _____, _____, \ _____, _____, _____, _____, _____, _____, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, _____, _____, _____, \ @@ -89,7 +89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | * `-----------------------------------------------------------' */ - [3] = KEYMAP_ALL( + [3] = LAYOUT_all( _____, BL_TOGG, BL_STEP, RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_R, _____, _____, _____, _____, _____, _____, _____, _____, \ _____, RGB_RI, RGB_GI, RGB_BI, RGB_HUI, RGB_SAI, RGB_VAI, _____, _____, _____, _____, _____, _____, _____, \ _____, RGB_RD, RGB_GD, RGB_BD, RGB_HUD, RGB_SAD, RGB_VAD, _____, _____, _____, _____, _____, _____, \ diff --git a/keyboards/v60_type_r/v60_type_r.h b/keyboards/v60_type_r/v60_type_r.h index 37d0a573e21..d65df2b3fd1 100644 --- a/keyboards/v60_type_r/v60_type_r.h +++ b/keyboards/v60_type_r/v60_type_r.h @@ -55,7 +55,7 @@ enum my_keycodes { // KBP V60 Type R with ALL possible layouts -#define KEYMAP_ALL( \ +#define LAYOUT_all( \ 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, \ @@ -89,7 +89,7 @@ enum my_keycodes { // KBP V60 Type R with ANSI layout - #define KEYMAP_ANSI( \ + #define LAYOUT_60_ansi( \ 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, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \ @@ -106,7 +106,4 @@ enum my_keycodes { { k40, k41, k42, k43, k44, k45, k46, k47 } \ } -#define LAYOUT_all KEYMAP_ALL -#define LAYOUT_ansi KEYMAP_ANSI - #endif diff --git a/layouts/community/60_ansi/mechmerlin-ansi/keymap.c b/layouts/community/60_ansi/mechmerlin-ansi/keymap.c new file mode 100644 index 00000000000..64da6760c4b --- /dev/null +++ b/layouts/community/60_ansi/mechmerlin-ansi/keymap.c @@ -0,0 +1,29 @@ +#include QMK_KEYBOARD_H + +#define BASE 0 +#define FN 1 +#define ARROWS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[BASE] = LAYOUT_60_ansi( + 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_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_BSLASH, \ + 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, \ + KC_LCTL, KC_LALT, KC_LGUI, KC_SPACE, MO(1), KC_RALT, KC_RGUI, KC_RCTL), + +[FN] = LAYOUT_60_ansi( + 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, KC_DEL, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, TG(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +[ARROWS] = LAYOUT_60_ansi( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, 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_LEFT, KC_DOWN, KC_RIGHT) + + }; \ No newline at end of file diff --git a/layouts/community/60_ansi/mechmerlin-ansi/readme.md b/layouts/community/60_ansi/mechmerlin-ansi/readme.md new file mode 100644 index 00000000000..b845334f54f --- /dev/null +++ b/layouts/community/60_ansi/mechmerlin-ansi/readme.md @@ -0,0 +1,18 @@ +MechMerlin's Standard ANSI 60% Layout +====================== + +This is the 60% layout used by u/merlin36, host of the [MechMerlin](www.youtube.com/mechmerlin) +YouTube channel. + +It is used on his +[Duck Eagle V2](https://github.com/qmk/qmk_firmware/tree/master/keyboards/eagle_viper/v2) +[KBP V60 Type R Polestar](https://github.com/qmk/qmk_firmware/tree/master/keyboards/v60_type_r) +[NPKC KC60](https://github.com/qmk/qmk_firmware/tree/master/keyboards/kc60) + +## Keymap Notes +- Highly influenced by the KBP V60 and WKL B.Face standard layouts +- Does not support any form of inswitch or underglow lighting as Merlin hates them. +- Arrow toggle switch is FN + Space + +### Build +To build this keymap, simply run `make your_keyboard:mechmerlin-ansi`. \ No newline at end of file diff --git a/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c b/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c new file mode 100644 index 00000000000..56488fb22c4 --- /dev/null +++ b/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c @@ -0,0 +1,29 @@ +#include QMK_KEYBOARD_H + +#define BASE 0 +#define FN 1 +#define ARROWS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[BASE] = LAYOUT_60_ansi_split_bs_rshift( + 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_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_BSLASH, \ + 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, TG(2), \ + KC_LCTL, KC_LALT, KC_LGUI, KC_SPACE, MO(1), KC_RALT, KC_RGUI, KC_RCTL), + +[FN] = LAYOUT_60_ansi_split_bs_rshift( + 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, KC_NO, KC_DEL, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +[ARROWS] = LAYOUT_60_ansi_split_bs_rshift( + KC_TRNS, KC_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_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, 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_LEFT, KC_DOWN, KC_RIGHT) + + }; \ No newline at end of file diff --git a/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/readme.md b/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/readme.md new file mode 100644 index 00000000000..06a2bc241a6 --- /dev/null +++ b/layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/readme.md @@ -0,0 +1,17 @@ +MechMerlin's Split ANSI 60% Layout +====================== + +This is the 60% layout with split backspace and right shift used by u/merlin36, +host of the [MechMerlin](www.youtube.com/mechmerlin) YouTube channel. + +It is used on his +[Sentraq S60-X RGB](https://github.com/qmk/qmk_firmware/tree/master/keyboards/s60_x) +[MechanicalKeyboards.com FaceW](https://github.com/qmk/qmk_firmware/tree/master/keyboards/bfake) + +## Keymap Notes +- Highly influenced by the KBP V60 and WKL B.Face standard layouts +- Does not support any form of inswitch or underglow lighting as Merlin hates them. +- Arrow toggle switch is the 1u key by right shift + +### Build +To build this keymap, simply run `make your_keyboard:mechmerlin-split`. \ No newline at end of file From 2286cedb70e2899049d90bf9a26ce261bb74f2f5 Mon Sep 17 00:00:00 2001 From: David Rambo Date: Tue, 24 Apr 2018 12:03:02 -0400 Subject: [PATCH 044/152] Update personal colemak Iris layout and deleted redundant folders (#2794) * DRambo Planck keymap in Colemak * DRambo Planck keymap in Colemak * Satan GH60 keymap for Bri QWERTY layout with Navigation layer toggled with "Caps Lock" key. * xd75 keymap in Colemak for Mac and Win * DRambo Planck keymap in Colemak * Satan GH60 keymap for Bri QWERTY layout with Navigation layer toggled with "Caps Lock" key. * xd75 keymap in Colemak for Mac and Win * Added Iris Colemak layout for Mac, Windows, and Gaming. * changed comment text * DRambo Planck keymap in Colemak * Satan GH60 keymap for Bri QWERTY layout with Navigation layer toggled with "Caps Lock" key. * xd75 keymap in Colemak for Mac and Win * Added Iris Colemak layout for Mac, Windows, and Gaming. * changed comment text * Added Iris keymap from DavidRambo * Added planck keymap from DavidRambo * Added xd75 keymap from DavidRambo * Added readme * Deleted redundant repos in Iris, Planck, and XD75 keymaps. * Tweaked XD75 keymap * DRambo Planck keymap in Colemak * Tweaked XD75 keymap * Merge branch 'master' of https://github.com/DavidRambo/qmk_firmware Removed redundant repos with "Rambo" title. * changed iris nav layers * changed nav layers for xd75 * Updated Iris, tweaked nav on xd75 --- keyboards/iris/keymaps/davidrambo/keymap.c | 30 ++-- keyboards/iris/keymaps/dnrambo/config.h | 45 ------ keyboards/iris/keymaps/dnrambo/keymap.c | 158 --------------------- keyboards/iris/keymaps/dnrambo/readme.md | 3 - keyboards/iris/keymaps/dnrambo/rules.mk | 7 - keyboards/planck/keymaps/rambo/config.h | 9 -- keyboards/planck/keymaps/rambo/keymap.c | 98 ------------- keyboards/planck/keymaps/rambo/rules.mk | 6 - keyboards/xd75/keymaps/davidrambo/keymap.c | 14 +- keyboards/xd75/keymaps/rambo/config.h | 26 ---- keyboards/xd75/keymaps/rambo/keymap.c | 150 ------------------- keyboards/xd75/keymaps/rambo/readme.md | 4 - keyboards/xd75/keymaps/rambo/rules.mk | 2 - 13 files changed, 22 insertions(+), 530 deletions(-) delete mode 100644 keyboards/iris/keymaps/dnrambo/config.h delete mode 100644 keyboards/iris/keymaps/dnrambo/keymap.c delete mode 100644 keyboards/iris/keymaps/dnrambo/readme.md delete mode 100644 keyboards/iris/keymaps/dnrambo/rules.mk delete mode 100644 keyboards/planck/keymaps/rambo/config.h delete mode 100644 keyboards/planck/keymaps/rambo/keymap.c delete mode 100644 keyboards/planck/keymaps/rambo/rules.mk delete mode 100644 keyboards/xd75/keymaps/rambo/config.h delete mode 100644 keyboards/xd75/keymaps/rambo/keymap.c delete mode 100644 keyboards/xd75/keymaps/rambo/readme.md delete mode 100644 keyboards/xd75/keymaps/rambo/rules.mk diff --git a/keyboards/iris/keymaps/davidrambo/keymap.c b/keyboards/iris/keymaps/davidrambo/keymap.c index 31ec3eba15a..40f0d014540 100644 --- a/keyboards/iris/keymaps/davidrambo/keymap.c +++ b/keyboards/iris/keymaps/davidrambo/keymap.c @@ -5,12 +5,12 @@ extern keymap_config_t keymap_config; //keycode shorthands -#define KC____ KC_TRNS +#define KC____ KC_TRNS // three underscores "___" for transparent #define KC_SYM MO(3) #define KC_MAC TO(0) #define KC_PC TO(1) #define KC_GM TO(2) -#define KC_NAV LT(4, KC_TAB) +#define KC_NAVMAC LT(4, KC_TAB) #define KC_NAVPC LT(5, KC_TAB) //text editor shortcuts for NAV and NAVPC @@ -18,8 +18,8 @@ extern keymap_config_t keymap_config; #define KC_AR LALT(KC_RGHT) #define KC_CL LCTL(KC_LEFT) #define KC_CR LCTL(KC_RGHT) -#define KC_A_BS LALT(KC_BSPC) -#define KC_C_BS LALT(KC_BSPC) +#define KC_ABSPC LALT(KC_BSPC) +#define KC_CBSPC LCTL(KC_BSPC) //internet browser tab shortcuts and window swapping for Mac and Windows #define KC_GSL LGUI(S(KC_LEFT)) @@ -38,7 +38,7 @@ extern keymap_config_t keymap_config; #define _PC 1 #define _GAME 2 #define _SYMBOL 3 -#define _NAV 4 +#define _NAVMAC 4 #define _NAVPC 5 enum { @@ -56,13 +56,13 @@ enum { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_COLEMAK] = KC_KEYMAP( + [_COLEMAK] = LAYOUT_kc( //,----+----+----+----+----+----. ,----+----+----+----+----+----. ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS, //|----+----+----+----+----+----| |----+----+----+----+----+----| GRV , Q , W , F , P , G , J , L , U , Y ,SCLN,BSPC, //|----+----+----+----+----+----| |----+----+----+----+----+----| - NAV , A , R , S , T , D , H , N , E , I , O ,QUOT, + NAVMAC, A , R , S , T , D , H , N , E , I , O ,QUOT, //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| SFLK, Z , X , C , V , B , PC , ENT , K , M ,COMM, DOT,SLSH,RSFT, //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' @@ -70,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // `----+----+----' `----+----+----' ), - [_PC] = KC_KEYMAP( + [_PC] = LAYOUT_kc( ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , @@ -82,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LGUI , LCTL , CTBS , ___ , ___ , ___ ), - [_GAME] = KC_KEYMAP( + [_GAME] = LAYOUT_kc( ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , T , Q , W , E , R , ___ , ___ , ___ , ___ , ___ , ___ , @@ -94,7 +94,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { LALT , LALT , SPC, BSPC, MAC, ___ ), - [_SYMBOL] = KC_KEYMAP( + [_SYMBOL] = LAYOUT_kc( ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , @@ -104,10 +104,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ___ , HOME, END , VOLD, VOLU, MPLY,___, ___,___, MINS, ___ , ___ , ___ , ___ , - ___ , ___ , A_BS, ___, ___ , ___ + ___ , ___ , ___, ___, ___ , ___ ), - [_NAV] = KC_KEYMAP( + [_NAVMAC] = LAYOUT_kc( ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , @@ -115,12 +115,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ___ , ___ , ___ , ___ , ___ , ___ , GSL , LEFT, DOWN, RGHT, GSR , ___ , - ___ , ___ , ___ , ___ , ___ , ___ ,___, ___,G_TAB, ___ , ___ , ___ , ___ , ___ , + ___ , ___ , ___ , ___ , ___ , ___ ,___, ___,G_TAB,ABSPC, ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ ), - [_NAVPC] = KC_KEYMAP( + [_NAVPC] = LAYOUT_kc( ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , @@ -128,7 +128,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ___ , ___ , ___ , ___ , ___ , ___ , CPGU, LEFT, DOWN, RGHT, CPGD, ___ , - ___ , ___ , ___ , ___ , ___ , ___ ,___, ___,A_TAB, ___ , ___ , ___ , ___ , ___ , + ___ , ___ , ___ , ___ , ___ , ___ ,___, ___,A_TAB,CBSPC, ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ ), diff --git a/keyboards/iris/keymaps/dnrambo/config.h b/keyboards/iris/keymaps/dnrambo/config.h deleted file mode 100644 index 01e078e3264..00000000000 --- a/keyboards/iris/keymaps/dnrambo/config.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -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 PERMISSIVE_HOLD -#define PREVENT_STUCK_MODIFIERS -#define MASTER_LEFT -// #define MASTER_RIGHT -// #define EE_HANDS -/* -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 12 -#define RGBLIGHT_HUE_STEP 8 -#define RGBLIGHT_SAT_STEP 8 -#define RGBLIGHT_VAL_STEP 8 -*/ -#define TAPPING_TERM 200 -#include "../../config.h" - -#endif diff --git a/keyboards/iris/keymaps/dnrambo/keymap.c b/keyboards/iris/keymaps/dnrambo/keymap.c deleted file mode 100644 index 31ec3eba15a..00000000000 --- a/keyboards/iris/keymaps/dnrambo/keymap.c +++ /dev/null @@ -1,158 +0,0 @@ -#include "iris.h" -#include "action_layer.h" -#include "eeconfig.h" - -extern keymap_config_t keymap_config; - -//keycode shorthands -#define KC____ KC_TRNS -#define KC_SYM MO(3) -#define KC_MAC TO(0) -#define KC_PC TO(1) -#define KC_GM TO(2) -#define KC_NAV LT(4, KC_TAB) -#define KC_NAVPC LT(5, KC_TAB) - -//text editor shortcuts for NAV and NAVPC -#define KC_AL LALT(KC_LEFT) -#define KC_AR LALT(KC_RGHT) -#define KC_CL LCTL(KC_LEFT) -#define KC_CR LCTL(KC_RGHT) -#define KC_A_BS LALT(KC_BSPC) -#define KC_C_BS LALT(KC_BSPC) - -//internet browser tab shortcuts and window swapping for Mac and Windows -#define KC_GSL LGUI(S(KC_LEFT)) -#define KC_GSR LGUI(S(KC_RGHT)) -#define KC_CPGD LCTL(KC_PGDN) -#define KC_CPGU LCTL(KC_PGUP) - -#define KC_CMBS GUI_T(KC_BSPC) -#define KC_CTBS CTL_T(KC_BSPC) -#define KC_C_TAB LCTL(KC_TAB) -#define KC_G_TAB LGUI(KC_TAB) -#define KC_A_TAB LALT(KC_TAB) - -//layer shorthands -#define _COLEMAK 0 -#define _PC 1 -#define _GAME 2 -#define _SYMBOL 3 -#define _NAV 4 -#define _NAVPC 5 - -enum { -// SFT_LCK //tapdance declarations - COLEMAK = 0, - PC, - GAME, - SYMBOL, - NAV, //Navigation layer for Mac Colemak - NAVPC, //Navigation layer for PC Colemak - SFT_LCK //tapdance declaration -}; - -#define KC_SFLK TD(SFT_LCK) // alias for tapdance - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - [_COLEMAK] = KC_KEYMAP( - //,----+----+----+----+----+----. ,----+----+----+----+----+----. - ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - GRV , Q , W , F , P , G , J , L , U , Y ,SCLN,BSPC, - //|----+----+----+----+----+----| |----+----+----+----+----+----| - NAV , A , R , S , T , D , H , N , E , I , O ,QUOT, - //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| - SFLK, Z , X , C , V , B , PC , ENT , K , M ,COMM, DOT,SLSH,RSFT, - //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----' - LCTL,LGUI,CMBS, SPC, SYM, LALT - // `----+----+----' `----+----+----' - ), - - [_PC] = KC_KEYMAP( - ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , - - ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , - - NAVPC,___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , - - ___ , ___ , ___ , ___ , ___ , ___ , GM, ___, ___ , ___ , ___ , ___ , ___ , ___ , - - LGUI , LCTL , CTBS , ___ , ___ , ___ - ), - - [_GAME] = KC_KEYMAP( - ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , - - ___ , T , Q , W , E , R , ___ , ___ , ___ , ___ , ___ , ___ , - - TAB , LSFT, A , S , D , F , ___ , ___ , ___ , ___ , ___ , ___ , - - I , LCTL, Z , X , C , V , M, P , ___, ___ , ___ , ___ , ___ , ___ , - - LALT , LALT , SPC, BSPC, MAC, ___ - ), - - [_SYMBOL] = KC_KEYMAP( - - ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , - - LBRC, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , RBRC, - - BSLS, EXLM, AT , HASH, DLR , PERC, CIRC, AMPR, ASTR, LPRN, RPRN, EQL , - - ___ , HOME, END , VOLD, VOLU, MPLY,___, ___,___, MINS, ___ , ___ , ___ , ___ , - - ___ , ___ , A_BS, ___, ___ , ___ - ), - - [_NAV] = KC_KEYMAP( - - ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , - - ___ , ___ , ___ , ___ , ___ , ___ , C_TAB, AL , UP , AR , DEL , ___ , - - ___ , ___ , ___ , ___ , ___ , ___ , GSL , LEFT, DOWN, RGHT, GSR , ___ , - - ___ , ___ , ___ , ___ , ___ , ___ ,___, ___,G_TAB, ___ , ___ , ___ , ___ , ___ , - - ___ , ___ , ___ , ___ , ___ , ___ - ), - - [_NAVPC] = KC_KEYMAP( - - ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , - - ___ , ___ , ___ , ___ , ___ , ___ , C_TAB, CL , UP , CR , DEL , ___ , - - ___ , ___ , ___ , ___ , ___ , ___ , CPGU, LEFT, DOWN, RGHT, CPGD, ___ , - - ___ , ___ , ___ , ___ , ___ , ___ ,___, ___,A_TAB, ___ , ___ , ___ , ___ , ___ , - - ___ , ___ , ___ , ___ , ___ , ___ - ), - -}; - -// Shift vs. capslock function. From bbaserdem's Planck keymap. -void caps_tap (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_LSFT); - } else if (state->count == 2) { - unregister_code (KC_LSFT); - register_code (KC_CAPS); - } -} -void caps_tap_end (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_LSFT); - } else { - unregister_code (KC_CAPS); - } -} - -qk_tap_dance_action_t tap_dance_actions[] = { - //Tap once for Shift, twice for Caps Lock - [SFT_LCK] = ACTION_TAP_DANCE_FN_ADVANCED( caps_tap, NULL, caps_tap_end) -}; \ No newline at end of file diff --git a/keyboards/iris/keymaps/dnrambo/readme.md b/keyboards/iris/keymaps/dnrambo/readme.md deleted file mode 100644 index 4d21f37c091..00000000000 --- a/keyboards/iris/keymaps/dnrambo/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -# Colemak layout for Iris rev2.1 with Mac and Windows layers and a Gaming Layer. -# Symbol layer is based on my Planck layout, so it provides numbers, symbols, and volume controls. -# Two Navigation layers, for Mac and Windows Colemak layers respectively. \ No newline at end of file diff --git a/keyboards/iris/keymaps/dnrambo/rules.mk b/keyboards/iris/keymaps/dnrambo/rules.mk deleted file mode 100644 index 0b7e7b9057f..00000000000 --- a/keyboards/iris/keymaps/dnrambo/rules.mk +++ /dev/null @@ -1,7 +0,0 @@ -RGBLIGHT_ENABLE = no -BACKLIGHT_ENABLE = no -TAP_DANCE_ENABLE = yes - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif diff --git a/keyboards/planck/keymaps/rambo/config.h b/keyboards/planck/keymaps/rambo/config.h deleted file mode 100644 index c3bebf57990..00000000000 --- a/keyboards/planck/keymaps/rambo/config.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef CONFIG_USER_H - -#define CONFIG_USER_H -#define TAPPING_TERM 200 -#include "../../config.h" -#define PERMISSIVE_HOLD -#define PREVENT_STUCK_MODIFIERS - -#endif \ No newline at end of file diff --git a/keyboards/planck/keymaps/rambo/keymap.c b/keyboards/planck/keymaps/rambo/keymap.c deleted file mode 100644 index 37e22afb902..00000000000 --- a/keyboards/planck/keymaps/rambo/keymap.c +++ /dev/null @@ -1,98 +0,0 @@ -#include "planck.h" - -//alias for clarity in layering -#define _______ KC_TRNS -#define A_BSPC LALT(KC_BSPC) -#define A_LEFT LALT(KC_LEFT) -#define A_RGHT LALT(KC_RGHT) -#define C_TAB LCTL(KC_TAB) -#define GSL LGUI(S(KC_LEFT)) -#define GSR LGUI(S(KC_RGHT)) -#define G_TAB LGUI(KC_TAB) -#define G_GRV LGUI(KC_GRV) // MAC: switch between windows within an application -#define SftEnt SFT_T(KC_ENT) -#define NAV LT(2, KC_TAB) - -#define _COLEMAK 0 -#define _SYMBOL 1 -#define _NAVIGATION 2 - -//tapdance declarations -enum { - SFT_LCK -}; - -//alias for tapdance -#define SftLck TD(SFT_LCK) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* Colemak - * ,-----------------------------------------------------------------------------------. - * | ESC` | Q | W | F | P | G | J | L | U | Y | ; | Bksp | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Tab | A | R | S | T | D | H | N | E | I | O | " | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * |SftLck| Z | X | C | V | B | K | M | , | . | /? |SftEnt| - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | Del | GUI | Ctrl | Alt | GUI | Space |Symbol| Left | Down | Up |Right | - * `-----------------------------------------------------------------------------------' -*/ - -[_COLEMAK] = { - {KC_GESC, KC_Q , KC_W , KC_F , KC_P , KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {NAV , KC_A , KC_R , KC_S , KC_T , KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {SftLck , KC_Z , KC_X , KC_C , KC_V , KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SftEnt }, - {KC_DEL , KC_LGUI, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - }, - -/* Symbol - * ,-----------------------------------------------------------------------------------. - * | [ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ] | - * |------+------+------+------+------+-------------+------+------+------+------+------| - * | \| | ! | @ | # | $ | % | ^ | & | * | ( | ) | =+ | - * |------+------+------+------+------+------|------+------+------+------+------+------| - * | | Home | End | ScUp | ScDn | F1 | F2 | -_ |Pg Up | | / | | - * |------+------+------+------+------+------+------+------+------+------+------+------| - * | `~ | | | |Alt(Bk)| | |Pg Dn | Vol- | Vol+ | | - * `-----------------------------------------------------------------------------------' - */ -[_SYMBOL] = { - {KC_LBRC, KC_1, KC_2, KC_3, KC_4 , KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC}, - {KC_BSLS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_EQL }, - {_______, KC_HOME, KC_END, KC_WH_U, KC_WH_D,KC_F1 , KC_F2 , KC_MINS, KC_PGUP, _______, _______, _______}, - {KC_GRV, _______, _______, _______, A_BSPC, _______, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_MUTE} - }, - -/* Navigation*/ - -[_NAVIGATION] = { - {_______, _______, _______, _______, _______, _______, C_TAB , A_LEFT, KC_UP, A_RGHT , KC_DEL , _______}, - {_______, _______, _______, _______, _______, _______, GSL , KC_LEFT, KC_DOWN, KC_RGHT, GSR , _______}, - {_______, _______, _______, _______, _______, _______, G_TAB , KC_HOME, _______, KC_END, G_GRV , _______}, - {RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} -} -}; - -// Shift vs capslock function. From bbaserdem's Planck keymap. -void caps_tap (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_LSFT); - } else if (state->count == 2) { - unregister_code (KC_LSFT); - register_code (KC_CAPS); - } -} -void caps_tap_end (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_LSFT); - } else { - unregister_code (KC_CAPS); - } -} - -//Tap Dance Definitions -qk_tap_dance_action_t tap_dance_actions[] = { - //Tap once for Shift, twice for Caps Lock - [SFT_LCK] = ACTION_TAP_DANCE_FN_ADVANCED( caps_tap, NULL, caps_tap_end ) -}; \ No newline at end of file diff --git a/keyboards/planck/keymaps/rambo/rules.mk b/keyboards/planck/keymaps/rambo/rules.mk deleted file mode 100644 index ffa9b870afe..00000000000 --- a/keyboards/planck/keymaps/rambo/rules.mk +++ /dev/null @@ -1,6 +0,0 @@ -TAP_DANCE_ENABLE = yes -MOUSEKEY_ENABLE = yes - -ifndef QUANTUM_DIR - include ../../../../Makefile -endif \ No newline at end of file diff --git a/keyboards/xd75/keymaps/davidrambo/keymap.c b/keyboards/xd75/keymaps/davidrambo/keymap.c index 6e95936c845..5d09dfa27cc 100644 --- a/keyboards/xd75/keymaps/davidrambo/keymap.c +++ b/keyboards/xd75/keymaps/davidrambo/keymap.c @@ -3,7 +3,7 @@ //aliases for clarity in layering #define _______ KC_TRNS #define A_BSPC LALT(KC_BSPC) // delete whole word in Mac -#define C_BSPS LCTL(KC_BSPC) // delete whole word in PC +// #define C_BSPS LCTL(KC_BSPC) // delete whole word in PC; currently not in use #define A_LEFT LALT(KC_LEFT) #define A_RGHT LALT(KC_RGHT) #define C_RGHT LCTL(KC_RGHT) @@ -72,7 +72,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, { NAVPC , _______, _______, _______, _______, _______, _______, KC_MPLY, _______, _______, _______, _______, _______, _______, _______ }, { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, KC_LCTL, KC_LGUI, _______, KC_LCTL, CBSPC , _______, _______, _______, _______, _______, KC_RCTL, KC_RALT, KC_RGUI, _______ }, + { _______, KC_LCTL, KC_LGUI, _______, KC_LCTL, _______, _______, _______, _______, _______, _______, KC_RCTL, KC_RALT, KC_RGUI, _______ }, }, /* SYMBOL @@ -83,7 +83,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | = | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | | | | | | | | | | -_ | | | | | + * | | HOME | END | BL_OFF | BL_ON | | | | | | -_ | | | | | * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| * | | | | | | | | | | | | | | | | * '--------------------------------------------------------------------------------------------------------------------------------------' @@ -93,7 +93,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { { _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , _______, _______, _______, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , _______}, { KC_LBRC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , _______, _______, _______, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_RBRC}, { _______, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_EQL }, - { _______, BL_OFF , BL_ON , BL_DEC , BL_INC , KC_F11 , _______, _______, _______, KC_F12 , KC_MINS, _______, _______, _______, _______}, + { _______, KC_HOME, KC_END , BL_OFF , BL_ON , KC_F11 , _______, _______, _______, KC_F12 , KC_MINS, _______, _______, _______, _______}, { _______, _______, _______, _______, _______, A_BSPC , _______, _______, _______, _______, _______, _______, _______, _______, _______}, }, @@ -102,15 +102,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, { _______, _______, _______, _______, _______, _______, _______, _______, _______, C_TAB , A_LEFT, KC_UP, A_RGHT , KC_DEL , _______}, { _______, _______, _______, _______, _______, _______, _______, _______, _______, GSL , KC_LEFT, KC_DOWN, KC_RGHT, GSR , _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, G_TAB , KC_HOME, _______, KC_END , G_GRV , _______}, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, G_TAB , ABSPC , KC_HOME, KC_END , G_GRV , _______}, { RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, }, [_NAVPC] = { /* NAVIGATION FOR WINDOWS: replaces Alt with Control, GUI with Alt, and browser tab shortcuts*/ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, { _______, _______, _______, _______, _______, _______, _______, _______, _______, C_TAB , C_LEFT, KC_UP, C_RGHT , KC_DEL , _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, CTLPGDN, KC_LEFT, KC_DOWN, KC_RGHT, CTLPGUP, _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, A_TAB , KC_HOME, _______, KC_END , _______, _______}, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, CTLPGUP, KC_LEFT, KC_DOWN, KC_RGHT, CTLPGDN, _______}, + { _______, _______, _______, _______, _______, _______, _______, _______, _______, A_TAB , CBSPC , KC_HOME, KC_END , _______, _______}, { RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, } }; diff --git a/keyboards/xd75/keymaps/rambo/config.h b/keyboards/xd75/keymaps/rambo/config.h deleted file mode 100644 index e87ccde7979..00000000000 --- a/keyboards/xd75/keymaps/rambo/config.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright 2017 Benjamin Kesselring - * - * 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" - -#define TAPPING_TERM 200 -#define PERMISSIVE_HOLD -#define PREVENT_STUCK_MODIFIERS - -#endif diff --git a/keyboards/xd75/keymaps/rambo/keymap.c b/keyboards/xd75/keymaps/rambo/keymap.c deleted file mode 100644 index 6e95936c845..00000000000 --- a/keyboards/xd75/keymaps/rambo/keymap.c +++ /dev/null @@ -1,150 +0,0 @@ -#include "xd75.h" - -//aliases for clarity in layering -#define _______ KC_TRNS -#define A_BSPC LALT(KC_BSPC) // delete whole word in Mac -#define C_BSPS LCTL(KC_BSPC) // delete whole word in PC -#define A_LEFT LALT(KC_LEFT) -#define A_RGHT LALT(KC_RGHT) -#define C_RGHT LCTL(KC_RGHT) -#define C_LEFT LCTL(KC_LEFT) -#define SftEnt SFT_T(KC_ENT) -#define GBSPC LGUI_T(KC_BSPC) -#define CBSPC LCTL_T(KC_BSPC) - -//internet browser tab shortcuts and window swapping for Mac and Win -#define GSL LGUI(S(KC_LEFT)) // back one tab in Safari -#define GSR LGUI(S(KC_RGHT)) // forward one tab in Safari -#define CTLPGDN LCTL(KC_PGDN) // back one tab on Windows -#define CTLPGUP LCTL(KC_PGUP) // forward one tab on Windows -#define G_TAB LGUI(KC_TAB) // MAC: switch applications -#define G_GRV LGUI(KC_GRV) // MAC: switch between windows within an application -#define A_TAB LALT(KC_TAB) -#define C_TAB LCTL(KC_TAB) - -// -#define NAV LT(3, KC_TAB) -#define NAVPC LT(4, KC_TAB) - -// Layer shorthand -#define _COLEMAK 0 -#define _PC 1 -#define _SYMBOL 2 //Function keys, numbers, symbols, Backlighting -#define _NAV 3 //Navigation Layer on Mac -#define _NAVPC 4 //Navigation Layer on Win - -//tapdance declarations -enum { - SFT_LCK -}; - -//alias for tapdance -#define SftLck TD(SFT_LCK) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - -/* COLEMAK - * .--------------------------------------------------------------------------------------------------------------------------------------. - * | `~ | 1 | 2 | 3 | 4 | 5 | - | SWITCH | = | 6 | 7 | 8 | 9 | 0 | BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| - * | ESC/`~ | Q | W | F | P | G | [ | \ | ] | J | L | U | Y | ; | BACKSP | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------| - * | NAVTAB | A | S | D | F | G | PgUp |PlayPaus| ENTER | H | N | E | I | O | ' | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------| - * |SFT/CAPS| Z | X | C | V | B | PgDn | UP | ENTER | K | M | , | . | / | SftEnt | - * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------| - * | DEL | LGUI | LCTRL | LALT | LGUI | BKSPC | LEFT | DOWN | RIGHT | SPACE | SYMBOL | RGUI | RALT | RCTRL | BL | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [_COLEMAK] = { /* COLEMAK */ - { KC_GRV , KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, TG(1) , KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC }, - { KC_GESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_LBRC, KC_BSLS, KC_RBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC }, - { NAV , KC_A, KC_R, KC_S, KC_T, KC_D, KC_PGUP, KC_ESC , KC_ENT , KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT }, - { SftLck , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PGDN, KC_UP , KC_ENT , KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SftEnt }, - { KC_DEL , KC_LGUI, KC_LCTL, KC_LALT, KC_LGUI, GBSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_SPC, MO(2) , KC_RGUI, KC_RALT, KC_RCTL, BL_STEP }, - }, - -// Windows Layer: essentially swaps Control and GUI - - [_PC] = { /* WINDOWS */ - { _______, _______, _______, _______, _______, _______, _______, TG(0) , _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { NAVPC , _______, _______, _______, _______, _______, _______, KC_MPLY, _______, _______, _______, _______, _______, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - { _______, KC_LCTL, KC_LGUI, _______, KC_LCTL, CBSPC , _______, _______, _______, _______, _______, KC_RCTL, KC_RALT, KC_RGUI, _______ }, - }, - -/* SYMBOL - * .--------------------------------------------------------------------------------------------------------------------------------------. - * | F12 | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | [{ | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | }] | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | = | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | | | | | | | | | | -_ | | | | | - * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| - * | | | | | | | | | | | | | | | | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ - - [_SYMBOL] = { /* SYMBOL */ - { _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , _______, _______, _______, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , _______}, - { KC_LBRC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , _______, _______, _______, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_RBRC}, - { _______, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_EQL }, - { _______, BL_OFF , BL_ON , BL_DEC , BL_INC , KC_F11 , _______, _______, _______, KC_F12 , KC_MINS, _______, _______, _______, _______}, - { _______, _______, _______, _______, _______, A_BSPC , _______, _______, _______, _______, _______, _______, _______, _______, _______}, - }, - - - [_NAV] = { /* NAVIGATION for Mac */ - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, C_TAB , A_LEFT, KC_UP, A_RGHT , KC_DEL , _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, GSL , KC_LEFT, KC_DOWN, KC_RGHT, GSR , _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, G_TAB , KC_HOME, _______, KC_END , G_GRV , _______}, - { RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - }, - - [_NAVPC] = { /* NAVIGATION FOR WINDOWS: replaces Alt with Control, GUI with Alt, and browser tab shortcuts*/ - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, C_TAB , C_LEFT, KC_UP, C_RGHT , KC_DEL , _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, CTLPGDN, KC_LEFT, KC_DOWN, KC_RGHT, CTLPGUP, _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, A_TAB , KC_HOME, _______, KC_END , _______, _______}, - { RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - } -}; - -// Shift vs capslock function. From bbaserdem's Planck keymap. -void caps_tap (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - register_code (KC_LSFT); - } else if (state->count == 2) { - unregister_code (KC_LSFT); - register_code (KC_CAPS); - } -} -void caps_tap_end (qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1) { - unregister_code (KC_LSFT); - } else { - unregister_code (KC_CAPS); - } -} - -//Tap Dance Definitions -qk_tap_dance_action_t tap_dance_actions[] = { - //Tap once for Shift, twice for Caps Lock - [SFT_LCK] = ACTION_TAP_DANCE_FN_ADVANCED( caps_tap, NULL, caps_tap_end ) -}; - -/* Template for future layers - [_LAYER_NAME] = { - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, - } -}; -*/ diff --git a/keyboards/xd75/keymaps/rambo/readme.md b/keyboards/xd75/keymaps/rambo/readme.md deleted file mode 100644 index 17b928c501f..00000000000 --- a/keyboards/xd75/keymaps/rambo/readme.md +++ /dev/null @@ -1,4 +0,0 @@ -# A Colemak layout for XD75 with both Mac and Windows layers. -# These two layers share momentary toggle access to a "Symbol" layer, which is modeled after my Planck layout. -# Each of the base Colemak layers have their own Navigation layers for the right hand to use arrows and shortcuts for both text editing and web browsing. -# The rules.mk file overrides the XD75's "BACKLIGHT_ENABLE" with YES and also adds tap dance functionality. \ No newline at end of file diff --git a/keyboards/xd75/keymaps/rambo/rules.mk b/keyboards/xd75/keymaps/rambo/rules.mk deleted file mode 100644 index edc9cc6bc1f..00000000000 --- a/keyboards/xd75/keymaps/rambo/rules.mk +++ /dev/null @@ -1,2 +0,0 @@ -BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -TAP_DANCE_ENABLE = yes # Enable tap dance functionality \ No newline at end of file From 6beb9d3ac2dd7984c0a26ecb13df8e3628de1cc8 Mon Sep 17 00:00:00 2001 From: Daniel H Klein Date: Tue, 24 Apr 2018 09:25:20 -0700 Subject: [PATCH 045/152] Changes to danielhklein nyquist config (#2783) * nyquist * danielhklein nyquist setup * shift left controls * remove readme * cleanup before pr * ready for pr * updated bootmagic, arrows, and special chars * allow gui on arrows * replace arrows with right modifiers * documentation re-added * updated personal repo * fixes to layers --- .../nyquist/keymaps/danielhklein/config.h | 2 + .../nyquist/keymaps/danielhklein/keymap.c | 97 ++++++++---- .../nyquist/keymaps/danielhklein/rules.mk | 2 +- .../planck/keymaps/danielhklein/keymap.c | 142 ++++++++++++++++++ .../planck/keymaps/danielhklein/rules.mk | 14 ++ 5 files changed, 223 insertions(+), 34 deletions(-) create mode 100644 keyboards/planck/keymaps/danielhklein/keymap.c create mode 100644 keyboards/planck/keymaps/danielhklein/rules.mk diff --git a/keyboards/nyquist/keymaps/danielhklein/config.h b/keyboards/nyquist/keymaps/danielhklein/config.h index 7ed90b6cdf2..09abbccb727 100644 --- a/keyboards/nyquist/keymaps/danielhklein/config.h +++ b/keyboards/nyquist/keymaps/danielhklein/config.h @@ -19,6 +19,8 @@ along with this program. If not, see . #define TAPPING_TERM 150 #define USE_SERIAL #define EE_HANDS +#define BOOTMAGIC_KEY_SALT KC_ENT + #ifdef SUBPROJECT_rev1 #include "../../rev1/config.h" diff --git a/keyboards/nyquist/keymaps/danielhklein/keymap.c b/keyboards/nyquist/keymaps/danielhklein/keymap.c index d0801b4a16d..c7dd52a12e5 100644 --- a/keyboards/nyquist/keymaps/danielhklein/keymap.c +++ b/keyboards/nyquist/keymaps/danielhklein/keymap.c @@ -7,32 +7,41 @@ Major changes made: - DVORAK, COLEMAK, FUNCTION, MOUSE, and ADJUST layers have been removed - right 2u key performs backspace, not enter - - no right ctrl key - - direction keys added to bottom row - LOWER layer controls function keys, media controls, and underglow + - ARROW layer uses JKLI for arrow keys + - Bootmagic enabled and bootmagic initialization key changed from space to enter */ + 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. enum custom_layers { _QWERTY, _LOWER, - _RAISE + _RAISE, + _ARROW }; enum custom_keycodes { QWERTY = SAFE_RANGE, LOWER, - RAISE + RAISE, + ARROW }; // Enable these functions using FUNC(n) macro. const uint16_t PROGMEM fn_actions[] = { //ACTION_LAYER_TAP_TOGGLE requires that number of taps be defined in *config.h* - default set to 5 - [0] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC), //Hold for momentary Lower layer, Tap for Space, - [1] = ACTION_LAYER_TAP_KEY(_RAISE, KC_BSPC) //Hold for momentary Raise layer, Tap for Backspace, + [0] = LT(_LOWER, KC_SPC), //Hold for momentary Lower layer, Tap for Backspace, + [1] = LT(_RAISE, KC_BSPC), //Hold for momentary Raise layer, Tap for Space, + [2] = MO(_ARROW), //Hold for momentary Arrow }; #define SPC_LWR FUNC(0) #define BSP_RSE FUNC(1) +#define ARW FUNC(2) // Fillers to make layering more clear #define _______ KC_TRNS @@ -44,48 +53,48 @@ enum custom_keycodes { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* QWERTY +/* QWERTY * .----------------------------------------. .-----------------------------------------. - * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | [ | + * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | * |-----+------+------+------+------+------| |------+------+------+------+------+------| - * | Tab | Q | W | E | R | T | | Y | U | I | O | P | ] | + * | Tab | Q | W | E | R | T | | Y | U | I | O | P |Enter | * |-----+------+------+------+------+------| |------+------+------+------+------+------| * | Caps| A | S | D | F | G | | H | J | K | L | ; | " | * |-----+------+------+------+------+------| |------+------+------+------+------+------| - * |Lshft| Z | X | C | V | B | | N | M | , | . | / |Enter | + * |Lshft| Z | X | C | V | B | | N | M | , | . | / |Rshft | * |-----+------+------+------+------+------| |------+------+------+------+------+------| - * | | Ctrl | LAlt | LGui | Bspc/Raise | | Spc/Lower | Left | Down | Up |Right | + * |Arrow| LCtrl| LAlt | LGui | Bspc/Raise | | Spc/Lower | RGui | RAlt | RCtrl| Del | * `----------------------------------------' '-----------------------------------------' */ [_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_LBRACKET, \ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRACKET, \ - 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \ - XXXXXXX, KC_LCTL, KC_LALT, KC_LGUI, BSP_RSE, BSP_RSE, SPC_LWR, SPC_LWR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ - ), + 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT, + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + ARW, KC_LCTL, KC_LALT, KC_LGUI, BSP_RSE, BSP_RSE, SPC_LWR, SPC_LWR, KC_RGUI, KC_RALT, KC_RCTL, KC_DEL + ), /* Raise * ,-----------------------------------------. .-----------------------------------------. - * | | | | | | | | = | / | * | - | \ | Del | + * | | | | | | | | = | / | * | - | \ | ` | * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | | | | 7 | 8 | 9 | + | ` | | + * | | | | | | | | 7 | 8 | 9 | + | [ | ] | * |------+------+------+------+------+------| |------+------+------+------+------+------| * | | | | | | | | 4 | 5 | 6 | Enter| | | * |------+------+------+------+------+------| |------+------+------+------+------+------| * | Lshft| | | | | | | 1 | 2 | 3 | Space| | | * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | | | | | Bspc/Raise | | 0 | . | Bspc | | | + * | | | | LGui | | | 0 | . | Bspc | | | * `-----------------------------------------' `-----------------------------------------' */ -[_RAISE] = LAYOUT( \ - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PEQL, KC_PSLS, KC_PAST, KC_MINS, KC_BSLS, KC_DEL, \ - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_7, KC_8, KC_9, KC_PPLS, KC_GRV, XXXXXXX,\ - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_4, KC_5, KC_6, KC_PENT, XXXXXXX, XXXXXXX,\ - _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_1, KC_2, KC_3, KC_SPC, XXXXXXX, XXXXXXX,\ - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_0, KC_0, KC_DOT, KC_BSPC, XXXXXXX, XXXXXXX \ +[_RAISE] = LAYOUT( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PEQL, KC_PSLS, KC_PAST, KC_MINS, KC_BSLS, KC_GRV, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_7, KC_8, KC_9, KC_PPLS, KC_LBRC, KC_RBRC, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_4, KC_5, KC_6, KC_PENT, XXXXXXX, XXXXXXX, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_1, KC_2, KC_3, KC_SPC, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, KC_0, KC_0, KC_DOT, KC_BSPC, XXXXXXX, XXXXXXX ), /* Lower @@ -98,18 +107,40 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------| |------+------+------+------+------+------| * |RGB IO|RGB >>|RGB <<|Hue++ |Hue-- | | | | | | | | | * |------+------+------+------+------+------| |------+------+------+------+------+------| - * |Sat++ |Sat-- |Val++ |Val-- | | | Spc/Lower | | | | | + * |Sat++ |Sat-- |Val++ |Val-- | | | | | | | | * `-----------------------------------------' `-----------------------------------------' */ -[_LOWER] = LAYOUT( \ - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ - KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ - KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ - RGB_TOG, RGB_MOD, RGB_RMOD, RGB_HUI, RGB_HUD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ - RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \ +[_LOWER] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + RGB_TOG, RGB_MOD, RGB_RMOD, RGB_HUI, RGB_HUD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX ), +/* Arrow + * ,-----------------------------------------. ,----------------------------------------. + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |-----+------+------+------+------+------| + * | | | | | | | | | | Up | | | | + * |------+------+------+------+------+------| |-----+------+------+------+------+------| + * | | | | | | | | | Left | Down |Right | | | + * |------+------+------+------+------+------| |-----+------+------+------+------+------| + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |-----+------+------+------+------+------| + * | | | | Gui | | | | | | | | + * `-----------------------------------------' `----------------------------------------' + */ + +[_ARROW] = LAYOUT( + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX +), + }; void persistent_default_layer_set(uint16_t default_layer) { diff --git a/keyboards/nyquist/keymaps/danielhklein/rules.mk b/keyboards/nyquist/keymaps/danielhklein/rules.mk index ba799d47f46..0b540a47129 100644 --- a/keyboards/nyquist/keymaps/danielhklein/rules.mk +++ b/keyboards/nyquist/keymaps/danielhklein/rules.mk @@ -18,7 +18,7 @@ # 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) +BOOTMAGIC_ENABLE = yes # 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) diff --git a/keyboards/planck/keymaps/danielhklein/keymap.c b/keyboards/planck/keymaps/danielhklein/keymap.c new file mode 100644 index 00000000000..a0db05daafd --- /dev/null +++ b/keyboards/planck/keymaps/danielhklein/keymap.c @@ -0,0 +1,142 @@ +#include "planck.h" +#include "action_layer.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. +enum custom_layers { + _QWERTY, + _LOWER, + _RAISE, + _ARROW +}; + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + LOWER, + RAISE, + ARROW +}; + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* QWERTY + * .----------------------------------------------------------------------------------. + * | Esc | Q | W | E | R | T | Y | U | I | O | P |Enter | + * |-----+------+------+------+------+------|------+------+------+------+------+------| + * | Tab | A | S | D | F | G | H | J | K | L | ; | " | + * |-----+------+------+------+------+------|------+------+------+------+------+------| + * |Lshft| Z | X | C | V | B | N | M | , | . | / |Rshft | + * |-----+------+------+------+------+------|------+------+------+------+------+------| + * |Arrow| LCtrl| LAlt | LGui | Lower| Bspc | Space| Raise| RGui | RAlt |RCtrl | - | + * `----------------------------------------------------------------------------------' + */ + +[_QWERTY] = { + {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT}, + {KC_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, KC_RSFT}, + {ARROW, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_RGUI, KC_RALT, KC_RCTL, KC_MINS} +}, + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | | | | | | | 7 | 8 | 9 | / | \ | ` | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | 4 | 5 | 6 | * | ( | ) | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | Lshft| | | | | | 1 | 2 | 3 | - | [ | ] | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | LGui | | | 0 | . | = | + | { | } | + * `-----------------------------------------------------------------------------------' + */ + +[_LOWER] = { + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_7, KC_8, KC_9, KC_PSLS, KC_BSLS, KC_GRV}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_4, KC_5, KC_6, KC_PAST, KC_LPRN, KC_RPRN}, + {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_1, KC_2, KC_3, KC_MINS, KC_LBRC, KC_RBRC}, + {XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, KC_0, KC_DOT, KC_PEQL, KC_PPLS, KC_LCBR, KC_RCBR} +}, + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | | | | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | F7 | F8 | F9 | F10 | F11 | F12 | | | | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | >/|| | Mute | Vol- | Vol+ | |<< | >>| | | | | | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' +*/ + +[_RAISE] = { + {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPRV, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +/* Arrow + * ,----------------------------------------------------------------------------------. + * | | | | | | | | | Up | | | | + * |------+------+------+------+------+------|-----+------+------+------+------+------| + * | | | | | | | | Left | Down |Right | | | + * |------+------+------+------+------+------|-----+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------|-----+------+------+------+------+------| + * | | | | Gui | | | | | | | | | + * `----------------------------------------------------------------------------------' + */ + +[_ARROW] = { + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX}, + {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}, + {_______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX} +}, + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + case LOWER: + if (record->event.pressed) { + layer_on(_LOWER); + } else { + layer_off(_LOWER); + } + return false; + break; + case RAISE: + if (record->event.pressed) { + layer_on(_RAISE); + } else { + layer_off(_RAISE); + } + return false; + break; + case ARROW: + if (record->event.pressed) { + layer_on(_ARROW); + } else { + layer_off(_ARROW); + } + return false; + break; + } + return true; +} diff --git a/keyboards/planck/keymaps/danielhklein/rules.mk b/keyboards/planck/keymaps/danielhklein/rules.mk new file mode 100644 index 00000000000..a73d8518337 --- /dev/null +++ b/keyboards/planck/keymaps/danielhklein/rules.mk @@ -0,0 +1,14 @@ +BOOTMAGIC_ENABLE = yes # 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 = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +TAP_DANCE_ENABLE = no # Enable Tap Dance \ No newline at end of file From eef75b82bdba9fa7e4f19b0f4cf1ffa7afe0c005 Mon Sep 17 00:00:00 2001 From: Eric <22215921+ericywl@users.noreply.github.com> Date: Wed, 25 Apr 2018 00:27:33 +0800 Subject: [PATCH 046/152] Edited keymaps for eric/dz60 (#2793) * added hhkb eric * dz60 and hhkb * editted eric hhkb and dz60 --- keyboards/dz60/keymaps/eric/keymap.c | 81 +++++++++++++++------------- keyboards/hhkb/keymaps/eric/keymap.c | 10 ++-- 2 files changed, 48 insertions(+), 43 deletions(-) diff --git a/keyboards/dz60/keymaps/eric/keymap.c b/keyboards/dz60/keymaps/eric/keymap.c index 730d750c4a0..56abcc25fe8 100644 --- a/keyboards/dz60/keymaps/eric/keymap.c +++ b/keyboards/dz60/keymaps/eric/keymap.c @@ -10,20 +10,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |-----------------------------------------------------------------------------------------+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bkspc | * |-----------------------------------------------------------------------------------------+ -* | Caps | A | S | D | F | G | H | J | K | L | ; | ' | Enter | +* | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter | * |-----------------------------------------------------------------------------------------+ * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn | * |-----------------------------------------------------------------------------------------+ -* | Ctrl | GUI | Alt | Space | Alt | GUI | Ctrl | +* | Caps | GUI | Alt | Space | Alt | GUI | Ctrl | * `-----------------------------------------------------------------------------------------' */ - KEYMAP_2_SHIFTS( - 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_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_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, MO(1), - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, MO(2)), + 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_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_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), + KC_CAPS, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RGUI, KC_RCTL), @@ -31,23 +31,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------------. * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | INS | Del | * |-----------------------------------------------------------------------------------------+ -* | | PGUP | UP | PGDN | HOME | & | | | | | Prnt | UP | Del | Bkspc | +* | | PGUP | UP | PGDN | HOME | & | ~ | | | | Prnt | UP | Del | Bkspc | * |-----------------------------------------------------------------------------------------+ * | | LEFT | DWN | RGHT | END | * | | | PGUP | HOME | LEFT | RGHT | | * |-----------------------------------------------------------------------------------------+ -* | | _ | + | ( | ) | | | ~ | | PGDN | END | DWN | | | +* | | _ | + | ( | ) | | | | | PGDN | END | DWN | | | * |-----------------------------------------------------------------------------------------+ * | | | | | | | | * `-----------------------------------------------------------------------------------------' */ - KEYMAP_2_SHIFTS( - 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, KC_INS, KC_DEL, - KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_AMPR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_UP, KC_DEL, KC_BSPC, - KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_ASTR, KC_TRNS, KC_TRNS, KC_PGUP, KC_HOME, KC_LEFT, KC_RGHT, KC_TRNS, - KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_LPRN, KC_RPRN, KC_PIPE, KC_TILD, KC_TRNS, KC_PGDN, KC_END, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + LAYOUT( + KC_CAPS, 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_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_AMPR, KC_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_UP, KC_DEL, KC_BSPC, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_ASTR, KC_TRNS, KC_TRNS, KC_PGUP, KC_HOME, KC_LEFT, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_LPRN, KC_RPRN, KC_PIPE, KC_TRNS, KC_TRNS, KC_PGDN, KC_END, KC_DOWN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS), + + LAYOUT( + RESET, KC_A, 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_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_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_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_NO), }; enum function_id { @@ -55,31 +62,31 @@ enum function_id { }; const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_FUNCTION(SHIFT_ESC), + [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; + 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; } -} \ No newline at end of file +} diff --git a/keyboards/hhkb/keymaps/eric/keymap.c b/keyboards/hhkb/keymaps/eric/keymap.c index 17351ba01ad..496ead346ca 100644 --- a/keyboards/hhkb/keymaps/eric/keymap.c +++ b/keyboards/hhkb/keymaps/eric/keymap.c @@ -18,7 +18,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | | |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| - |------+------+-----------------------+------+------| | LAlt | LGUI | ******* Space ******* | RGUI | RAlt | |------+------+-----------------------+------+------| @@ -37,13 +36,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| | Caps | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del | |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| - | | PgU | Up | PgD | Hm | & | | | | | Psc | Up | Del | Backs | | + | | PgU | Up | PgD | Hm | & | ~ | | | | Psc | Up | Del | Backs | | |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| | | Lef | Dow | Rig | En | * | | | PgU | Hom | Lef | Rig | Enter | | | |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| - | | _ | + | ( | ) | | | ~ | | PgD | End | Dow | | | | | + | | _ | + | ( | ) | | | | | PgD | End | Dow | | | | | |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| - |------+------+----------------------+------+------+ | **** | **** | ******************** | **** | **** | |------+------+----------------------+------+------+ @@ -52,9 +50,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [HHKB] = KEYMAP( KC_CAPS, 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_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_AMPR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_UP, KC_DEL, KC_BSPC, \ + KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_AMPR, KC_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_UP, KC_DEL, KC_BSPC, \ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_ASTR, KC_TRNS, KC_TRNS, KC_PGUP, KC_HOME, KC_LEFT, KC_RGHT, KC_TRNS, \ - KC_TRNS, KC_UNDS, KC_PLUS, KC_LPRN, KC_RPRN, KC_PIPE, KC_TILD, KC_TRNS, KC_PGDN, KC_END, KC_DOWN, KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_UNDS, KC_PLUS, KC_LPRN, KC_RPRN, KC_PIPE, KC_TRNS, KC_TRNS, KC_PGDN, KC_END, KC_DOWN, KC_TRNS, KC_TRNS, \ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)}; From f440bbbc1124b18ad0cad31976558905d8c15fc0 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 24 Apr 2018 12:37:52 -0400 Subject: [PATCH 047/152] Update readme.md (#2687) --- readme.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index 0817fdcc21d..23773278e47 100644 --- a/readme.md +++ b/readme.md @@ -7,11 +7,13 @@ [![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/) -This is a keyboard firmware based on the [tmk\_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR and ARM controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). +This is a keyboard firmware based on the [tmk\_keyboard firmware](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR and ARM controllers, and more specifically, the [OLKB product line](https://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). -## Official website +## Documentation -[http://qmk.fm](http://qmk.fm) is the official website of QMK, where you can find links to this page, the documentation, and the keyboards supported by QMK. +* [See the official documentation on docs.qmk.fm](https://docs.qmk.fm) + +The docs are hosted on [Gitbook](https://www.gitbook.com/book/qmk/firmware/details) and [GitHub](/docs/) (they are synced). You can request changes by making a fork and [pull request](https://github.com/qmk/qmk_firmware/pulls), or by clicking the "suggest an edit" link on any page of the docs. ## Supported Keyboards @@ -27,6 +29,6 @@ The project also includes community support for [lots of other keyboards](/keybo QMK is developed and maintained by Jack Humbert of OLKB with contributions from the community, and of course, [Hasu](https://github.com/tmk). The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/jackhumbert), the Ergodox EZ by [Erez Zukerman](https://github.com/ezuk), and the Clueboard by [Zach White](https://github.com/skullydazed). -## Documentation +## Official website -[https://docs.qmk.fm](https://docs.qmk.fm) is hosted on [Gitbook](https://www.gitbook.com/book/qmk/firmware/details) and [GitHub](/docs/) (they are synced). You can request changes by making a fork and [pull request](https://github.com/qmk/qmk_firmware/pulls), or by clicking the "suggest an edit" link on any page of the Docs. +[http://qmk.fm](http://qmk.fm) is the official website of QMK, where you can find links to this page, the documentation, and the keyboards supported by QMK. From d1481172bc865ae42b52bbd325ff31c9a5b7e470 Mon Sep 17 00:00:00 2001 From: MakotoKurauchi Date: Wed, 25 Apr 2018 01:43:57 +0900 Subject: [PATCH 048/152] Helix oled rgb compile sw (#2606) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Helix keyboard OLED, RGBLIGHT enable/disable control integrate into rules.mk rules.mk: add 4 Variables for compile control. # Helix keyboard customize # you can edit follows 4 Variables # jp: 以下の4つの変数を必要に応じて編集します。 OLED_ENABLE = no # OLED_ENABLE LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) LED_ANIMATIONS = yes # LED animations config.h: auto set RGBLED_NUM by HELIX_ROWS and rules.mk's define * HELIX_ROWS define move from config.h to rules.mk * add readme.md * rename readme.md to readme_jp.md * add readme.md and modify readme_jp.md --- keyboards/helix/rev2/config.h | 2 +- keyboards/helix/rev2/keymaps/default/config.h | 24 ++- .../helix/rev2/keymaps/default/readme.md | 144 ++++++++++++++++-- .../helix/rev2/keymaps/default/readme_jp.md | 98 ++++++++++++ keyboards/helix/rev2/keymaps/default/rules.mk | 60 +++++++- 5 files changed, 304 insertions(+), 24 deletions(-) create mode 100644 keyboards/helix/rev2/keymaps/default/readme_jp.md diff --git a/keyboards/helix/rev2/config.h b/keyboards/helix/rev2/config.h index 5905627760f..e8ad1b9bed3 100644 --- a/keyboards/helix/rev2/config.h +++ b/keyboards/helix/rev2/config.h @@ -56,7 +56,7 @@ along with this program. If not, see . /* ws2812 RGB LED */ #define RGB_DI_PIN D3 #define RGBLIGHT_TIMER -#define RGBLED_NUM 12 // Number of LEDs +//#define RGBLED_NUM 12 // Number of LEDs. see ./keymaps/default/config.h #define ws2812_PORTREG PORTD #define ws2812_DDRREG DDRD diff --git a/keyboards/helix/rev2/keymaps/default/config.h b/keyboards/helix/rev2/keymaps/default/config.h index 53ff0b3ca81..66c9b9e8bdc 100644 --- a/keyboards/helix/rev2/keymaps/default/config.h +++ b/keyboards/helix/rev2/keymaps/default/config.h @@ -36,11 +36,14 @@ along with this program. If not, see . // #define EE_HANDS // Helix keyboard OLED support -//#define SSD1306OLED +// see ./rules.mk: OLED_ENABLE=yes or no +#ifdef OLED_ENABLE + #define SSD1306OLED +#endif /* Select rows configuration */ // Rows are 4 or 5 -#define HELIX_ROWS 5 +// #define HELIX_ROWS 5 see ./rules.mk /* key matrix size */ // Rows are doubled-up @@ -62,12 +65,19 @@ along with this program. If not, see . #define TAPPING_FORCE_HOLD #define TAPPING_TERM 100 +// Helix keyboard RGB LED support +//#define RGBLIGHT_ANIMATIONS : see ./rules.mk: LED_ANIMATIONS = yes or no +// see ./rules.mk: LED_BACK_ENABLE or LED_UNDERGLOW_ENABLE set yes +#ifdef RGBLED_BACK + #if HELIX_ROWS == 4 + #define RGBLED_NUM 25 + #elif HELIX_ROWS == 5 + #define RGBLED_NUM 32 + #endif +#else + #define RGBLED_NUM 6 +#endif -#undef RGBLED_NUM -#define RGBLIGHT_ANIMATIONS -// Helix keyboard : see ./rules.mk: RGBLIGHT_ENABLE = yes or no -// Helix keyboard : RGBLED_NUM 6 or 32 -#define RGBLED_NUM 6 #if RGBLED_NUM <= 6 #define RGBLIGHT_LIMIT_VAL 255 #else diff --git a/keyboards/helix/rev2/keymaps/default/readme.md b/keyboards/helix/rev2/keymaps/default/readme.md index 02888855b81..307e5c30b93 100644 --- a/keyboards/helix/rev2/keymaps/default/readme.md +++ b/keyboards/helix/rev2/keymaps/default/readme.md @@ -1,25 +1,141 @@ -SSD1306 OLED Display via I2C -====== +# The Default Helix Layout +## Layout -Features --------- +### Qwerty -Some features supported by the firmware: +``` + ,-----------------------------------------. ,-----------------------------------------. + | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + | Shift| Z | X | C | V | B | [ | ] | N | M | , | . | / |Enter | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right | + `-------------------------------------------------------------------------------------------------' +``` +### Colemak +``` + ,-----------------------------------------. ,-----------------------------------------. + | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + | Shift| Z | X | C | V | B | [ | ] | K | M | , | . | / |Enter | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right | + `-------------------------------------------------------------------------------------------------' +``` -* I2C connection between the two halves is required as the OLED display will use this connection as well. Note this - requires pull-up resistors on the data and clock lines. -* OLED display will connect from either side +### Dvorak +``` + ,-----------------------------------------. ,-----------------------------------------. + | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | Tab | ' | , | . | P | Y | | F | G | C | R | L | Del | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | Ctrl | A | O | E | U | I | | D | H | T | N | S | / | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + | Shift| ; | Q | J | K | X | [ | ] | B | M | W | V | Z |Enter | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right | + `-------------------------------------------------------------------------------------------------' +``` +## Layers -Wiring ------- +|Priority|number|name|description| +| ---- | ---- | --- | --- | +|high|16|Adjust|Functions| +||4|Raise|Numeric charactors| +||3|Lower|Other charactors| +||2|Dvorak|Dvorak leyout| +||1|Colemak|Colemak leyout| +|low|0|Qwerty|QWERTY leyout(base)| +### Lower +``` + ,-----------------------------------------. ,-----------------------------------------. + | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + | | F7 | F8 | F9 | F10 | F11 | ( | ) | F12 | | | Home | End | | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + | | | | | | | | | | | Next | Vol- | Vol+ | Play | + `-------------------------------------------------------------------------------------------------' +``` -Work in progress... +### Raise +``` + ,-----------------------------------------. ,-----------------------------------------. + | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + | | F7 | F8 | F9 | F10 | F11 | | | F12 | | |PageDn|PageUp| | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + | | | | | | | | | | | Next | Vol- | Vol+ | Play | + `-------------------------------------------------------------------------------------------------' +``` +### Adjust (Lower + Raise) +``` + ,-----------------------------------------. ,-----------------------------------------. + | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | | Reset|RGBRST| | | | | | | | | | Del | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | | | |Aud on|Audoff| Mac | | Win |Qwerty|Colemk|Dvorak| | | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + | | | | | | | | | | |RGB ON| HUE+ | SAT+ | VAL+ | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + | | | | | | | | | | | MODE | HUE- | SAT- | VAL- | + `-------------------------------------------------------------------------------------------------' +``` -OLED Configuration -------------------------------- +## Customize + +see `qmk_firmware/keyboards/helix/rev2/keymaps/default/rules.mk` + +``` +# Helix keyboard customize +# you can edit follows 5 Variables +# jp: 以下の5つの変数を必要に応じて編集します。 +HELIX_ROWS = 5 # Helix Rows is 4 or 5 +OLED_ENABLE = no # OLED_ENABLE +LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) +LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) +LED_ANIMATIONS = yes # LED animations + +``` +## Compile + +go to qmk top directory. +``` +$ cd qmk_firmware +``` + +build +``` +$ make helix:default +``` + +flash to keyboard +``` +$ make helix:default:avrdude +``` + +## Link +* more detail wrote in Japanese [helix/Doc/firmware_jp.md](https://github.com/MakotoKurauchi/helix/blob/master/Doc/firmware_jp.md) +* [Helix top](https://github.com/MakotoKurauchi/helix) -Work in progress... diff --git a/keyboards/helix/rev2/keymaps/default/readme_jp.md b/keyboards/helix/rev2/keymaps/default/readme_jp.md new file mode 100644 index 00000000000..88ffc02ff37 --- /dev/null +++ b/keyboards/helix/rev2/keymaps/default/readme_jp.md @@ -0,0 +1,98 @@ +# The Default Helix Layout +## 配列 + +### Qwerty配列 + +``` + ,-----------------------------------------. ,-----------------------------------------. + | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp | + |------+------+------+------+------+------| |------+------+------+------+------+------| + | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + | Shift| Z | X | C | V | B | [ | ] | N | M | , | . | / |Enter | + |------+------+------+------+------+------+------+------+------+------+------+------+------+------| + |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right | + `-------------------------------------------------------------------------------------------------' +``` + +他の配列(Colemak,Dvorak)は、[readme.md](readme.md) を参照 + +## コンパイルの仕方 + +コンパイルは、qmk_firmware のトップディレクトリで行います。 + +``` +$ cd qmk_firmware +``` +qmk_firmwareでは各キーボードのコンパイルは、`<キーボード名>:<キーマップ名>`という指定で行います。 + +``` +$ make helix:default +``` + +キーボードへの書き込みまで同時に行うには下記のように`:avrdude`を付けます。 + +``` +$ make helix:default:avrdude +``` + +コンパイル結果と中間生成物を消去したい場合は以下のようにします。 + +``` +$ make helix:default:clean +``` + +## カスタマイズ + +Helix キーボードを4行版として製作したり、オプションの OLED をつけたり、 +RGB バックライトまたは、RGB Underglow をつけた場合は、 +`qmk_firmware/keyboards/helix/rev2/keymaps/default/rules.mk` の以下の部分を編集して機能を有効化してください。 + +``` +# Helix keyboard customize +# you can edit follows 5 Variables +# jp: 以下の5つの変数を必要に応じて編集します。 +HELIX_ROWS = 5 # Helix Rows is 4 or 5 +OLED_ENABLE = no # OLED_ENABLE +LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) +LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) +LED_ANIMATIONS = yes # LED animations + +``` + +## 4行版Helix に対応する + +rules.mk の下記の部分を編集して 5 を 4 に変更してください。 + +``` +HELIX_ROWS = 4 # Helix Rows is 4 or 5 +``` + +## RGB バックライトを有効にする + +rules.mk の下記の部分を編集して no を yes に変更してください。 + +``` +LED_BACK_ENABLE = yes # LED backlight (Enable WS2812 RGB underlight.) +``` + +## RGB Underglow を有効にする + +rules.mk の下記の部分を編集して no を yes に変更してください。 +``` +LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight.) +``` + +## OLEDを有効にする + +rules.mk の下記の部分を編集して no を yes に変更してください。 +``` +OLED_ENABLE = yes # OLED_ENABLE +``` + +## リンク + +* さらに詳細は、[こちら helix/Doc/firmware_jp.md](https://github.com/MakotoKurauchi/helix/blob/master/Doc/firmware_jp.md)をご覧ください。 +* [Helix top](https://github.com/MakotoKurauchi/helix) diff --git a/keyboards/helix/rev2/keymaps/default/rules.mk b/keyboards/helix/rev2/keymaps/default/rules.mk index dc4187c0838..976529ef911 100644 --- a/keyboards/helix/rev2/keymaps/default/rules.mk +++ b/keyboards/helix/rev2/keymaps/default/rules.mk @@ -14,14 +14,70 @@ 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 -# Helix keyboard : see ./config.h: RGBLED_NUM 6 or 32 -# Helix keyboard : RGBLIGHT_ENABLE = no or yes RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. SWAP_HANDS_ENABLE = no # Enable one-hand typing +define HELIX_CUSTOMISE_MSG + $(info Helix customize) + $(info - OLED_ENABLE=$(OLED_ENABLE)) + $(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE)) + $(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE)) + $(info - LED_ANIMATION=$(LED_ANIMATIONS)) +endef + +# Helix keyboard customize +# you can edit follows 5 Variables +# jp: 以下の5つの変数を必要に応じて編集します。 +HELIX_ROWS = 5 # Helix Rows is 4 or 5 +OLED_ENABLE = no # OLED_ENABLE +LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) +LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) +LED_ANIMATIONS = yes # LED animations + +#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE. +#### Do not enable these with audio at the same time. + +# Uncomment these for checking +# jp: コンパイル時にカスタマイズの状態を表示したい時はコメントをはずします。 +# $(eval $(call HELIX_CUSTOMISE_MSG)) +# $(info ) + +ifneq ($(strip $(HELIX_ROWS)), 4) + ifneq ($(strip $(HELIX_ROWS)), 5) + $(error HELIX_ROWS = $(strip $(HELIX_ROWS)) is unexpected value) + endif +endif +OPT_DEFS += -DHELIX_ROWS=$(strip $(HELIX_ROWS)) + +ifeq ($(strip $(LED_BACK_ENABLE)), yes) + RGBLIGHT_ENABLE = yes + OPT_DEFS += -DRGBLED_BACK + ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes) + $(eval $(call HELIX_CUSTOMISE_MSG)) + $(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes') + endif +else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes) + RGBLIGHT_ENABLE = yes +else + RGBLIGHT_ENABLE = no +endif + +ifeq ($(strip $(LED_ANIMATIONS)), yes) + OPT_DEFS += -DRGBLIGHT_ANIMATIONS +endif + +ifeq ($(strip $(OLED_ENABLE)), yes) + OPT_DEFS += -DOLED_ENABLE +endif + # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend ifndef QUANTUM_DIR include ../../../../Makefile endif + +# Uncomment these for debugging +# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE)) +# $(info -- OPT_DEFS=$(OPT_DEFS)) +# $(info ) From 7d08e48c50b286a6a95bb4da4bb17912951894e8 Mon Sep 17 00:00:00 2001 From: Kurth O'Connor Date: Tue, 24 Apr 2018 11:49:34 -0500 Subject: [PATCH 049/152] Syntax update (#2660) * initial commit * init qmk keymap * update docs * update documentation consolidate readme files; update `make` instructions revise ascii keymap representation * update documentation * edit and update `make` syntax - `make` syntax update - fix typo - add link to teensy video (already linked from online configurator) * permissions restored * remove superfluous files from branch * reset idiosyncratic execute permissions * reset idiosyncratic execute permission --- keyboards/ergodox_ez/readme.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/keyboards/ergodox_ez/readme.md b/keyboards/ergodox_ez/readme.md index ffde65c88b7..bce8ff3c6ff 100644 --- a/keyboards/ergodox_ez/readme.md +++ b/keyboards/ergodox_ez/readme.md @@ -10,7 +10,8 @@ Linux page]. Some distributions provide a binary, maybe called To flash the firmware: - - Build the firmware with `make keymapname`, for example `make default` + - Build the firmware with `make :`, for example `make ergodox_ez:default` + - This will result in a hex file called `ergodox_ez_keymapname.hex`, e.g. `ergodox_ez_default.hex` @@ -19,10 +20,12 @@ To flash the firmware: - Load the .hex file into it. - Press the Reset button by inserting a paperclip gently into the reset hole - in the top right corder. + in the top right corner. - Click the button in the Teensy app to download the firmware. +See also [video demonstration](https://www.youtube.com/watch?v=9PyiGUO9_KQ) using Teensy in auto mode. + To flash with ´teensy-loader-cli´: - Build the firmware with `make keymapname`, for example `make default` From 1feb42a1088e868cb963f35cc72d180733304db4 Mon Sep 17 00:00:00 2001 From: nariox Date: Tue, 24 Apr 2018 15:43:23 -0400 Subject: [PATCH 050/152] DZ60: Add Caps Lock LED for default keymap (#2800) Commit b546da0 added better init handling, but removed Caps Lock LED handling. This re-adds it (in the right place). --- keyboards/dz60/keymaps/default/keymap.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/keyboards/dz60/keymaps/default/keymap.c b/keyboards/dz60/keymaps/default/keymap.c index ed91cc37739..8d5d1ecb397 100644 --- a/keyboards/dz60/keymaps/default/keymap.c +++ b/keyboards/dz60/keymaps/default/keymap.c @@ -59,3 +59,11 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { break; } } + +void led_set_user(uint8_t usb_led) { + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + DDRB |= (1 << 2); PORTB &= ~(1 << 2); + } else { + DDRB &= ~(1 << 2); PORTB &= ~(1 << 2); + } +} From 32446eeeb6d846da4f3d742035eed7d49f91597d Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 24 Apr 2018 14:19:04 -0600 Subject: [PATCH 051/152] UT47 layout (#2791) * Add new project files for UT47 * Copy over keymap and related files * Add LED_controls.ino * Add README instructions * Attempt sending press byte data * Disable mousekeys * Enable sending serial data to LED controller * Update LED mode names * Remove extra file * Add LED enable flag * Update READMEs with more info * Credit original author * Update copyrights * Update docs * Changed based on review * Move layout screenshot to Imgur * Append to src * Enable mousekeys to fix bad keycodes * Additional changes based on feedback * Fix fn layer keys --- keyboards/ut47/LED_controls.ino | 420 +++++++++++++++++++++++ keyboards/ut47/config.h | 87 +++++ keyboards/ut47/keymaps/default/config.h | 24 ++ keyboards/ut47/keymaps/default/keymap.c | 88 +++++ keyboards/ut47/keymaps/default/readme.md | 19 + keyboards/ut47/led.c | 38 ++ keyboards/ut47/matrix.c | 209 +++++++++++ keyboards/ut47/readme.md | 41 +++ keyboards/ut47/rules.mk | 70 ++++ keyboards/ut47/ut47.c | 50 +++ keyboards/ut47/ut47.h | 49 +++ 11 files changed, 1095 insertions(+) create mode 100644 keyboards/ut47/LED_controls.ino create mode 100644 keyboards/ut47/config.h create mode 100644 keyboards/ut47/keymaps/default/config.h create mode 100644 keyboards/ut47/keymaps/default/keymap.c create mode 100644 keyboards/ut47/keymaps/default/readme.md create mode 100644 keyboards/ut47/led.c create mode 100644 keyboards/ut47/matrix.c create mode 100644 keyboards/ut47/readme.md create mode 100644 keyboards/ut47/rules.mk create mode 100644 keyboards/ut47/ut47.c create mode 100644 keyboards/ut47/ut47.h diff --git a/keyboards/ut47/LED_controls.ino b/keyboards/ut47/LED_controls.ino new file mode 100644 index 00000000000..dd50300eb7e --- /dev/null +++ b/keyboards/ut47/LED_controls.ino @@ -0,0 +1,420 @@ +#include +#include + +int iByte; +byte col = 0; +byte leds[12][4]; +byte pass = 1; +int fadecount = 1; +const int fadelimit = 3000; +const int fadelimitshort = 1000; +byte mode = 4; +byte brightness = 2; +boolean changemode = 0; +int rain = 0; +const int rainlimit = 5000; +const int rainfade = 5000; +byte rx = 0; +byte ry = 0; + +// pin[xx] on led matrix connected to nn on Arduino (-1 is dummy to make array start at pos 1) +int pins[17] = { + -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 14, 15, 18, 19, 20, 21 +}; + +// col[xx] of leds = pin yy on led matrix +int cols[12] = { + pins[8], pins[7], pins[6], pins[5], pins[9], pins[10], pins[11], pins[12], pins[13], pins[14], pins[15], pins[16] +}; + +// row[xx] of leds = pin yy on led matrix +int rows[4] = { + pins[1], pins[2], pins[3], pins[4] +}; + + +#define DELAY 0 +extern byte leds[12][4]; + +void setup() { + Serial1.begin(9600); + setupLeds(); + for (int s = 0; s < 5; s++) { + for ( int r = 1; r < 9; r++) { + delayMicroseconds(65000); + delayMicroseconds(65000); + for (int j = 0; j < 4; j++) { + for (int i = 0; i < 12; i++) { + leds[i][j] = 1; + for (int p = 0; p < 25; p++) { + } + leds[i][j] = r; + } + } + } + for ( int r = 9; r > 0; r--) { + delayMicroseconds(65000); + delayMicroseconds(65000); + delayMicroseconds(65000); + for (int j = 0; j < 4; j++) { + for (int i = 0; i < 12; i++) { + leds[i][j] = 1; + for (int p = 0; p < 25; p++) { + } + leds[i][j] = r; + } + } + } + } +} + +void loop() { + + switch (mode) { + case 0: + //Blacklight + for (int i = 0; i < 12; i++) { + for (int j = 0; j < 4; j++) { + leds[i][j] = brightness; + } + } + checkserial(); + break; + case 1: + //Breathing + for ( int r = 1; r < 9; r++) { + checkserial(); + if (changemode == 0) { + delayMicroseconds(65000); + delayMicroseconds(65000); + delayMicroseconds(65000); + for (int j = 0; j < 4; j++) { + for (int i = 0; i < 12; i++) { + leds[i][j] = 1; + for (int p = 0; p < 25; p++) { + } + leds[i][j] = r; + } + } + } + else { + break; + } + } + for ( int r = 9; r > 0; r--) { + checkserial(); + if (changemode == 0) { + delayMicroseconds(65000); + delayMicroseconds(65000); + delayMicroseconds(65000); + delayMicroseconds(65000); + for (int j = 0; j < 4; j++) { + for (int i = 0; i < 12; i++) { + leds[i][j] = 1; + for (int p = 0; p < 25; p++) { + } + leds[i][j] = r; + } + } + } + else { + break; + } + } + for ( int r = 1; r < 30; r++) { + checkserial(); + if (changemode == 0) { + delayMicroseconds(65000); + delayMicroseconds(65000); + } + else { + break; + } + } + break; + case 2: + //Random + leds[random(12)][random(4)] = random(8); + delayMicroseconds(10000); + checkserial(); + break; + case 3: + //Rain + rain++; + if (rain > rainlimit) { + rain = 0; + rx = random(12); + ry = random(4); + if (leds[rx][ry] == 0) { + leds[rx][ry] = 18; + } + } + fadecount++; + if (fadecount > rainfade) { + fadecount = 1; + for (int i = 0; i < 12; i++) { + for (int j = 0; j < 4; j++) { + if (leds[i][j] > 0) { + leds[i][j] = leds[i][j] - 1; + } + } + } + } + checkserial(); + break; + case 4: + //Reactive + fadecount++; + if (fadecount > fadelimit) { + fadecount = 1; + for (int i = 0; i < 12; i++) { + for (int j = 0; j < 4; j++) { + if (leds[i][j] > 0) { + leds[i][j] = leds[i][j] - 1; + } + } + } + } + checkserial(); + break; + case 5: + //Reactive Target + fadecount++; + if (fadecount > fadelimitshort) { + fadecount = 1; + for (int i = 0; i < 12; i++) { + for (int j = 0; j < 4; j++) { + if (leds[i][j] > 0) { + leds[i][j] = leds[i][j] - 1; + } + } + } + } + checkserial(); + break; + default: + mode = 0; + break; + } + changemode = 0; +} + +void checkserial() { + if (Serial1.available() > 0) { + iByte = Serial1.read(); + if (iByte == 100) { + brightness++; + if (brightness > 9) { + brightness = 1; + } + } + if (iByte == 101) { + mode++; + } + if (iByte < 100) { + if (mode == 4) { + byte row = iByte / 16; + byte col = iByte % 16; + leds[col][row] = 18; + } + if (mode == 5) { + byte row = iByte / 16; + byte col = iByte % 16; + for (byte i = 0; i < 12; i++) { + leds[i][row] = 18; + } + for (byte p = 0; p < 4; p++) { + leds[col][p] = 18; + } + } + } + } +} + +void setupLeds() { + // sets the pins as output + FastGPIO::Pin<2>::setOutputLow(); + FastGPIO::Pin<3>::setOutputLow(); + FastGPIO::Pin<4>::setOutputLow(); + FastGPIO::Pin<5>::setOutputLow(); + FastGPIO::Pin<6>::setOutputLow(); + FastGPIO::Pin<7>::setOutputLow(); + FastGPIO::Pin<8>::setOutputLow(); + FastGPIO::Pin<9>::setOutputLow(); + FastGPIO::Pin<10>::setOutputLow(); + FastGPIO::Pin<16>::setOutputLow(); + FastGPIO::Pin<14>::setOutputLow(); + FastGPIO::Pin<15>::setOutputLow(); + FastGPIO::Pin<18>::setOutputLow(); + FastGPIO::Pin<19>::setOutputLow(); + FastGPIO::Pin<20>::setOutputLow(); + FastGPIO::Pin<21>::setOutputLow(); + + // set up Cols + FastGPIO::Pin<6>::setOutputValueLow(); + FastGPIO::Pin<7>::setOutputValueLow(); + FastGPIO::Pin<8>::setOutputValueLow(); + FastGPIO::Pin<9>::setOutputValueLow(); + FastGPIO::Pin<10>::setOutputValueLow(); + FastGPIO::Pin<16>::setOutputValueLow(); + FastGPIO::Pin<14>::setOutputValueLow(); + FastGPIO::Pin<15>::setOutputValueLow(); + FastGPIO::Pin<18>::setOutputValueLow(); + FastGPIO::Pin<19>::setOutputValueLow(); + FastGPIO::Pin<20>::setOutputValueLow(); + FastGPIO::Pin<21>::setOutputValueLow(); + + // set up Rows + FastGPIO::Pin<2>::setOutputValueLow(); + FastGPIO::Pin<3>::setOutputValueLow(); + FastGPIO::Pin<4>::setOutputValueLow(); + FastGPIO::Pin<5>::setOutputValueLow(); + + clearLeds(); + Timer1.initialize(25); + Timer1.attachInterrupt(display); + +} + +void clearLeds() { + // Clear display array + for (int i = 0; i < 12; i++) { + for (int j = 0; j < 4; j++) { + leds[i][j] = 0; + } + } +} + +void onLeds() { + // Clear display array + for (int i = 0; i < 12; i++) { + for (int j = 0; j < 4; j++) { + leds[i][j] = 7; + } + } +} + +// Interrupt routine +void display() { + + switch (col) { // Turn whole previous column off + case 0: + FastGPIO::Pin<6>::setOutputValueLow(); + break; + case 1: + FastGPIO::Pin<7>::setOutputValueLow(); + break; + case 2: + FastGPIO::Pin<8>::setOutputValueLow(); + break; + case 3: + FastGPIO::Pin<9>::setOutputValueLow(); + break; + case 4: + FastGPIO::Pin<10>::setOutputValueLow(); + break; + case 5: + FastGPIO::Pin<16>::setOutputValueLow(); + break; + case 6: + FastGPIO::Pin<14>::setOutputValueLow(); + break; + case 7: + FastGPIO::Pin<15>::setOutputValueLow(); + break; + case 8: + FastGPIO::Pin<18>::setOutputValueLow(); + break; + case 9: + FastGPIO::Pin<19>::setOutputValueLow(); + break; + case 10: + FastGPIO::Pin<20>::setOutputValueLow(); + break; + case 11: + FastGPIO::Pin<21>::setOutputValueLow(); + break; + } + + col++; + if (col == 12) { + col = 0; + pass++; + if (pass > 8) { + pass = 1; + } + } + for (int row = 0; row < 4; row++) { + if (leds[col][row] > pass) { + switch (row) { // Turn on this led + case 0: + FastGPIO::Pin<2>::setOutputValueLow(); + break; + case 1: + FastGPIO::Pin<3>::setOutputValueLow(); + break; + case 2: + FastGPIO::Pin<4>::setOutputValueLow(); + break; + case 3: + FastGPIO::Pin<5>::setOutputValueLow(); + break; + } + } + else { + switch (row) { // Turn off this led + case 0: + FastGPIO::Pin<2>::setOutputValueHigh(); + break; + case 1: + FastGPIO::Pin<3>::setOutputValueHigh(); + break; + case 2: + FastGPIO::Pin<4>::setOutputValueHigh(); + break; + case 3: + FastGPIO::Pin<5>::setOutputValueHigh(); + break; + } + } + } + switch (col) { // Turn column on + case 0: + FastGPIO::Pin<6>::setOutputValueHigh(); + break; + case 1: + FastGPIO::Pin<7>::setOutputValueHigh(); + break; + case 2: + FastGPIO::Pin<8>::setOutputValueHigh(); + break; + case 3: + FastGPIO::Pin<9>::setOutputValueHigh(); + break; + case 4: + FastGPIO::Pin<10>::setOutputValueHigh(); + break; + case 5: + FastGPIO::Pin<16>::setOutputValueHigh(); + break; + case 6: + FastGPIO::Pin<14>::setOutputValueHigh(); + break; + case 7: + FastGPIO::Pin<15>::setOutputValueHigh(); + break; + case 8: + FastGPIO::Pin<18>::setOutputValueHigh(); + break; + case 9: + FastGPIO::Pin<19>::setOutputValueHigh(); + break; + case 10: + FastGPIO::Pin<20>::setOutputValueHigh(); + break; + case 11: + FastGPIO::Pin<21>::setOutputValueHigh(); + break; + } + +} diff --git a/keyboards/ut47/config.h b/keyboards/ut47/config.h new file mode 100644 index 00000000000..4335e3edd50 --- /dev/null +++ b/keyboards/ut47/config.h @@ -0,0 +1,87 @@ +/* +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_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0000 +#define DEVICE_VER 0x0001 +#define MANUFACTURER 40percent.club +#define PRODUCT ut47 +#define DESCRIPTION An awesome 40% keyboard + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 12 + +#define MATRIX_ROW_PINS { D1, D0, D4, C6 } +#define MATRIX_COL_PINS { D7, E6, B4, B5, B6, B2, B3, B1, F7, F6, F5, F4 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* 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 magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* Enable GNAP matrix serial output */ +#define GNAP_ENABLE + +/* USART configuration */ +#ifdef __AVR_ATmega32U4__ +# define SERIAL_UART_BAUD 9600 +# define SERIAL_UART_DATA UDR1 +# define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1) +# define SERIAL_UART_RXD_VECT USART1_RX_vect +# define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1)) +# define SERIAL_UART_INIT() do { \ + /* baud rate */ \ + UBRR1L = SERIAL_UART_UBRR; \ + /* baud rate */ \ + UBRR1H = SERIAL_UART_UBRR >> 8; \ + /* enable TX */ \ + UCSR1B = _BV(TXEN1); \ + /* 8-bit data */ \ + UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \ + sei(); \ + } while(0) +# else +# error "USART configuration is needed." +#endif + +#endif diff --git a/keyboards/ut47/keymaps/default/config.h b/keyboards/ut47/keymaps/default/config.h new file mode 100644 index 00000000000..46098a22fb2 --- /dev/null +++ b/keyboards/ut47/keymaps/default/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/default/keymap.c b/keyboards/ut47/keymaps/default/keymap.c new file mode 100644 index 00000000000..a02543dacb8 --- /dev/null +++ b/keyboards/ut47/keymaps/default/keymap.c @@ -0,0 +1,88 @@ +/* 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] = { + +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 +), + +LAYOUT( + 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_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, 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 +), + +LAYOUT( + 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_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 +), + +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/default/readme.md b/keyboards/ut47/keymaps/default/readme.md new file mode 100644 index 00000000000..e09dc73fab8 --- /dev/null +++ b/keyboards/ut47/keymaps/default/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 diff --git a/keyboards/ut47/led.c b/keyboards/ut47/led.c new file mode 100644 index 00000000000..9458c038fef --- /dev/null +++ b/keyboards/ut47/led.c @@ -0,0 +1,38 @@ +/* +Copyright 2012 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 . +*/ + +#include +#include "stdint.h" +#include "led.h" + + +void led_set(uint8_t usb_led) +{ + if (usb_led & (1<. +*/ + +/* + * scan matrix + */ +#include +#include +#include +#include +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "protocol/serial.h" + + +#ifndef DEBOUNCE +# define DEBOUNCE 5 +#endif +static uint8_t debouncing = DEBOUNCE; + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static matrix_row_t read_cols(void); +static void init_cols(void); +static void unselect_rows(void); +static void select_row(uint8_t row); + + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + // initialize row and col + unselect_rows(); + init_cols(); + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + + serial_init(); +} + +uint8_t matrix_scan(void) +{ + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + select_row(i); + _delay_us(30); // without this wait read unstable value. + matrix_row_t cols = read_cols(); + if (matrix_debouncing[i] != cols) { + matrix_debouncing[i] = cols; + if (debouncing) { + debug("bounce!: "); debug_hex(debouncing); debug("\n"); + } + debouncing = DEBOUNCE; + } + unselect_rows(); + } + + if (debouncing) { + if (--debouncing) { + _delay_ms(1); + } else { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debouncing[i]; + } + } + } + + return 1; +} + +bool matrix_is_modified(void) +{ + if (debouncing) return false; + return true; +} + +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & ((matrix_row_t)1<The reason this is an "opt-in" feature is to prevent sending serial communication over the pin, in case it ends up being used for something else (like RGB underglow). + +### Layout + +Go to the [default layout README](keymaps/default/readme.md) for more information. + +### Additional info + +Credit: Forked from [di0ib TMK version](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/gnap) + +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. + +### Build Guide + +[u/network_operations' build guide thread](https://www.reddit.com/r/MechanicalKeyboards/comments/7wqktu/gnap_the_cheap_40/) diff --git a/keyboards/ut47/rules.mk b/keyboards/ut47/rules.mk new file mode 100644 index 00000000000..b0465986698 --- /dev/null +++ b/keyboards/ut47/rules.mk @@ -0,0 +1,70 @@ +# MCU name +#MCU = at90usb1286 +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 + +# Bootloader +BOOTLOADER = caterina + +# custom matrix setup +CUSTOM_MATRIX = yes +SRC += matrix.c protocol/serial_uart.c + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = yes # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches + +ifeq ($(strip $(LED_ENABLE)), yes) + OPT_DEFS += -DLED_ENABLE + SRC += led.c +endif diff --git a/keyboards/ut47/ut47.c b/keyboards/ut47/ut47.c new file mode 100644 index 00000000000..f467fd130ab --- /dev/null +++ b/keyboards/ut47/ut47.c @@ -0,0 +1,50 @@ +/* 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 "ut47.h" +#ifdef LED_ENABLE + #include "protocol/serial.h" +#endif + +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 + if (record->event.pressed) { + #ifdef LED_ENABLE + serial_send((record->event.key.row*16)+record->event.key.col); + #endif + } + return process_record_user(keycode, record); +} + +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); +} diff --git a/keyboards/ut47/ut47.h b/keyboards/ut47/ut47.h new file mode 100644 index 00000000000..fa9493f1180 --- /dev/null +++ b/keyboards/ut47/ut47.h @@ -0,0 +1,49 @@ +/* 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 UT47_H +#define UT47_H + +#include "quantum.h" + +#define LAYOUT( \ + 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, 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, K37, K38, K39, K3a, K3b } \ + } + +#define LAYOUT_kc( \ + 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, K37, K38, K39, K3a, K3b \ +) \ + LAYOUT( \ + KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0a, KC_##K0b, \ + KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1a, KC_##K1b, \ + KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2a, KC_##K2b, \ + KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K37, KC_##K38, KC_##K39, KC_##K3a, KC_##K3b \ + ) + +#define LAYOUT_kc_ut47 LAYOUT_kc + +#endif From 4674664c4a85295f93d32260079135f8cef244b1 Mon Sep 17 00:00:00 2001 From: yiancar Date: Tue, 24 Apr 2018 21:19:34 +0100 Subject: [PATCH 052/152] Cu75 iso fix (#2801) * Added Modular keyboards L,R and NUM Created code modules for the 3 modules of the modular keyboard. Original idea by MechboardsUK. Uses i2c implementation similar to lets split * Remove modular from master This is to fix incorrect branching * CU75 keymap fix Incorrect keymap now fixed --- keyboards/cu75/cu75.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/cu75/cu75.h b/keyboards/cu75/cu75.h index 250217d9db0..eaa22a3866c 100644 --- a/keyboards/cu75/cu75.h +++ b/keyboards/cu75/cu75.h @@ -110,8 +110,8 @@ void click(uint16_t freq, uint16_t duration); #define LAYOUT_iso( \ k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k0F, k0G, \ k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1G, \ - k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k3D, k2F, \ - k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k2E, k3F, \ + k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, \ + k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3F, \ k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, \ k51, k52, k53, k54, k57, k59, k5A, k5B, k5C, k5D, k5E, k5F \ ) { \ From 4ad37331d31d7f4e734e51f2b38fde9732c47d98 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 24 Apr 2018 20:37:05 -0600 Subject: [PATCH 053/152] Fix missed key assignment (#2803) --- keyboards/ut47/ut47.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/ut47/ut47.h b/keyboards/ut47/ut47.h index fa9493f1180..b915e8dac0f 100644 --- a/keyboards/ut47/ut47.h +++ b/keyboards/ut47/ut47.h @@ -28,7 +28,7 @@ { 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, K37, K38, K39, K3a, K3b } \ + { K30, K31, K32, K33, K34, KC_NO, K35, K37, K38, K39, K3a, K3b } \ } #define LAYOUT_kc( \ @@ -41,7 +41,7 @@ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0a, KC_##K0b, \ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1a, KC_##K1b, \ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2a, KC_##K2b, \ - KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K37, KC_##K38, KC_##K39, KC_##K3a, KC_##K3b \ + KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_NO,KC_##K35, KC_##K37, KC_##K38, KC_##K39, KC_##K3a, KC_##K3b \ ) #define LAYOUT_kc_ut47 LAYOUT_kc From 1c6b9323b25f8ec38f86addd4ba249faa5986cb3 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Wed, 25 Apr 2018 07:44:37 -0700 Subject: [PATCH 054/152] Fix QMK Configurator bug with rendering the Eagle layout (#2806) --- keyboards/eagle_viper/v2/v2.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/eagle_viper/v2/v2.h b/keyboards/eagle_viper/v2/v2.h index 5beec5bc62b..ce8ca028f19 100644 --- a/keyboards/eagle_viper/v2/v2.h +++ b/keyboards/eagle_viper/v2/v2.h @@ -32,7 +32,7 @@ { K0A, K0B, K0C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0J, KC_NO, K0K, K0L, K0M, K0N, K0O } \ } -#define LAYOUT_eagle( \ +#define LAYOUT_60_ansi( \ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4O, \ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, \ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2O, \ @@ -75,4 +75,4 @@ } #endif -#define LAYOUT_60_ansi LAYOUT_eagle +#define LAYOUT_eagle LAYOUT_60_ansi From eb89a372ec8950a853aef9e2730339465dc3dc2a Mon Sep 17 00:00:00 2001 From: Danny Date: Wed, 25 Apr 2018 13:47:13 -0400 Subject: [PATCH 055/152] Add BFO-9000 keyboard (#2807) --- keyboards/bfo9000/bfo9000.c | 1 + keyboards/bfo9000/bfo9000.h | 37 +++ keyboards/bfo9000/config.h | 78 +++++ keyboards/bfo9000/i2c.c | 162 ++++++++++ keyboards/bfo9000/i2c.h | 49 +++ keyboards/bfo9000/keymaps/default/config.h | 37 +++ keyboards/bfo9000/keymaps/default/keymap.c | 19 ++ keyboards/bfo9000/matrix.c | 342 +++++++++++++++++++++ keyboards/bfo9000/readme.md | 18 ++ keyboards/bfo9000/rules.mk | 70 +++++ keyboards/bfo9000/serial.c | 230 ++++++++++++++ keyboards/bfo9000/serial.h | 27 ++ keyboards/bfo9000/split_util.c | 86 ++++++ keyboards/bfo9000/split_util.h | 20 ++ 14 files changed, 1176 insertions(+) create mode 100644 keyboards/bfo9000/bfo9000.c create mode 100644 keyboards/bfo9000/bfo9000.h create mode 100644 keyboards/bfo9000/config.h create mode 100644 keyboards/bfo9000/i2c.c create mode 100644 keyboards/bfo9000/i2c.h create mode 100644 keyboards/bfo9000/keymaps/default/config.h create mode 100644 keyboards/bfo9000/keymaps/default/keymap.c create mode 100644 keyboards/bfo9000/matrix.c create mode 100644 keyboards/bfo9000/readme.md create mode 100644 keyboards/bfo9000/rules.mk create mode 100644 keyboards/bfo9000/serial.c create mode 100644 keyboards/bfo9000/serial.h create mode 100644 keyboards/bfo9000/split_util.c create mode 100644 keyboards/bfo9000/split_util.h diff --git a/keyboards/bfo9000/bfo9000.c b/keyboards/bfo9000/bfo9000.c new file mode 100644 index 00000000000..2ae778e32b3 --- /dev/null +++ b/keyboards/bfo9000/bfo9000.c @@ -0,0 +1 @@ +#include "bfo9000.h" diff --git a/keyboards/bfo9000/bfo9000.h b/keyboards/bfo9000/bfo9000.h new file mode 100644 index 00000000000..c3bd2236cef --- /dev/null +++ b/keyboards/bfo9000/bfo9000.h @@ -0,0 +1,37 @@ +#ifndef BFO9000_H +#define BFO9000_H + +#include "quantum.h" + +#ifdef USE_I2C +#include +#ifdef __AVR__ + #include + #include +#endif +#endif + +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, L06, L07, L08, R00, R01, R02, R03, R04, R05, R06, R07, R08, \ + L10, L11, L12, L13, L14, L15, L16, L17, L18, R10, R11, R12, R13, R14, R15, R16, R17, R18, \ + L20, L21, L22, L23, L24, L25, L26, L27, L28, R20, R21, R22, R23, R24, R25, R26, R27, R28, \ + L30, L31, L32, L33, L34, L35, L36, L37, L38, R30, R31, R32, R33, R34, R35, R36, R37, R38, \ + L40, L41, L42, L43, L44, L45, L46, L47, L48, R40, R41, R42, R43, R44, R45, R46, R47, R48, \ + L50, L51, L52, L53, L54, L55, L56, L57, L58, R50, R51, R52, R53, R54, R55, R56, R57, R58 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05, L06, L07, L08 }, \ + { L10, L11, L12, L13, L14, L15, L16, L17, L18 }, \ + { L20, L21, L22, L23, L24, L25, L26, L27, L28 }, \ + { L30, L31, L32, L33, L34, L35, L36, L37, L38 }, \ + { L40, L41, L42, L43, L44, L45, L46, L47, L48 }, \ + { L50, L51, L52, L53, L54, L55, L56, L57, L58 }, \ + { R00, R01, R02, R03, R04, R05, R06, R07, R08 }, \ + { R10, R11, R12, R13, R14, R15, R16, R17, R18 }, \ + { R20, R21, R22, R23, R24, R25, R26, R27, R28 }, \ + { R30, R31, R32, R33, R34, R35, R36, R37, R38 }, \ + { R40, R41, R42, R43, R44, R45, R46, R47, R48 }, \ + { R50, R51, R52, R53, R54, R55, R56, R57, R58 } \ + } + +#endif diff --git a/keyboards/bfo9000/config.h b/keyboards/bfo9000/config.h new file mode 100644 index 00000000000..561d2d11468 --- /dev/null +++ b/keyboards/bfo9000/config.h @@ -0,0 +1,78 @@ +/* +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_H +#define CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xCEEB +#define PRODUCT_ID 0x1169 +#define DEVICE_VER 0x0100 +#define MANUFACTURER Keebio +#define PRODUCT BFO-9000 +#define DESCRIPTION Really big split ortholinear keyboard + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 12 +#define MATRIX_COLS 9 + +// wiring of each half +#define MATRIX_ROW_PINS { D3, D2, D4, C6, D7, E6 } +#define MATRIX_COL_PINS { B5, B6, B2, B3, B1, F7, F6, F5, F4 } + +/* 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)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN B4 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 20 // Number of LEDs + +/* + * 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/bfo9000/i2c.c b/keyboards/bfo9000/i2c.c new file mode 100644 index 00000000000..084c890c405 --- /dev/null +++ b/keyboards/bfo9000/i2c.c @@ -0,0 +1,162 @@ +#include +#include +#include +#include +#include +#include +#include "i2c.h" + +#ifdef USE_I2C + +// Limits the amount of we wait for any one i2c transaction. +// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is +// 9 bits, a single transaction will take around 90μs to complete. +// +// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit +// poll loop takes at least 8 clock cycles to execute +#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8 + +#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE) + +volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; + +static volatile uint8_t slave_buffer_pos; +static volatile bool slave_has_register_set = false; + +// Wait for an i2c operation to finish +inline static +void i2c_delay(void) { + uint16_t lim = 0; + while(!(TWCR & (1<10. + // Check datasheets for more info. + TWBR = ((F_CPU/SCL_CLOCK)-16)/2; +} + +// Start a transaction with the given i2c slave address. The direction of the +// transfer is set with I2C_READ and I2C_WRITE. +// returns: 0 => success +// 1 => error +uint8_t i2c_master_start(uint8_t address) { + TWCR = (1< slave ACK +// 1 => slave NACK +uint8_t i2c_master_write(uint8_t data) { + TWDR = data; + TWCR = (1<= SLAVE_BUFFER_SIZE ) { + ack = 0; + slave_buffer_pos = 0; + } + slave_has_register_set = true; + } else { + i2c_slave_buffer[slave_buffer_pos] = TWDR; + BUFFER_POS_INC(); + } + break; + + case TW_ST_SLA_ACK: + case TW_ST_DATA_ACK: + // master has addressed this device as a slave transmitter and is + // requesting data. + TWDR = i2c_slave_buffer[slave_buffer_pos]; + BUFFER_POS_INC(); + break; + + case TW_BUS_ERROR: // something went wrong, reset twi state + TWCR = 0; + default: + break; + } + // Reset everything, so we are ready for the next TWI interrupt + TWCR |= (1< + +#ifndef F_CPU +#define F_CPU 16000000UL +#endif + +#define I2C_READ 1 +#define I2C_WRITE 0 + +#define I2C_ACK 1 +#define I2C_NACK 0 + +#define SLAVE_BUFFER_SIZE 0x10 + +// i2c SCL clock frequency +#define SCL_CLOCK 400000L + +extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; + +void i2c_master_init(void); +uint8_t i2c_master_start(uint8_t address); +void i2c_master_stop(void); +uint8_t i2c_master_write(uint8_t data); +uint8_t i2c_master_read(int); +void i2c_reset_state(void); +void i2c_slave_init(uint8_t address); + + +static inline unsigned char i2c_start_read(unsigned char addr) { + return i2c_master_start((addr << 1) | I2C_READ); +} + +static inline unsigned char i2c_start_write(unsigned char addr) { + return i2c_master_start((addr << 1) | I2C_WRITE); +} + +// from SSD1306 scrips +extern unsigned char i2c_rep_start(unsigned char addr); +extern void i2c_start_wait(unsigned char addr); +extern unsigned char i2c_readAck(void); +extern unsigned char i2c_readNak(void); +extern unsigned char i2c_read(unsigned char ack); + +#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); + +#endif diff --git a/keyboards/bfo9000/keymaps/default/config.h b/keyboards/bfo9000/keymaps/default/config.h new file mode 100644 index 00000000000..6b31e8d14ee --- /dev/null +++ b/keyboards/bfo9000/keymaps/default/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_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 + +#endif diff --git a/keyboards/bfo9000/keymaps/default/keymap.c b/keyboards/bfo9000/keymaps/default/keymap.c new file mode 100644 index 00000000000..5de5e123e50 --- /dev/null +++ b/keyboards/bfo9000/keymaps/default/keymap.c @@ -0,0 +1,19 @@ +#include QMK_KEYBOARD_H + +#define _BASE 0 + +// Fillers to make layering more clear +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_BASE] = LAYOUT( \ + KC_ESC, KC_VOLU, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ + KC_HOME, KC_VOLD, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ + KC_END, KC_TAB, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ + KC_PGUP, KC_CAPS, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, \ + KC_PGDN, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, XXXXXXX, \ + KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_ENT, KC_BSPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ +) +}; diff --git a/keyboards/bfo9000/matrix.c b/keyboards/bfo9000/matrix.c new file mode 100644 index 00000000000..2ca5f4d87ab --- /dev/null +++ b/keyboards/bfo9000/matrix.c @@ -0,0 +1,342 @@ +/* +Copyright 2012 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 . +*/ + +/* + * scan matrix + */ +#include +#include +#ifdef USE_I2C +// provides memcpy for copying TWI slave buffer +// #include +#endif +#include +#include +#include +#include +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "split_util.h" +#include "pro_micro.h" +#include "config.h" + +#ifdef USE_I2C +# include "i2c.h" +#else // USE_SERIAL +# include "serial.h" +#endif + +#ifndef DEBOUNCE +# define DEBOUNCE 5 +#endif + +#define ERROR_DISCONNECT_COUNT 5 + +static uint8_t debouncing = DEBOUNCE; +static const int ROWS_PER_HAND = MATRIX_ROWS/2; +static uint8_t error_count = 0; + +static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; +static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +static matrix_row_t read_cols(void); +static void init_cols(void); +static void unselect_rows(void); +static void select_row(uint8_t row); + + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + debug_enable = true; + debug_matrix = true; + debug_mouse = true; + // initialize row and col + unselect_rows(); + init_cols(); + + TX_RX_LED_INIT; + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + + matrix_init_quantum(); +} + +uint8_t _matrix_scan(void) +{ + // Right hand is stored after the left in the matrix so, we need to offset it + int offset = isLeftHand ? 0 : (ROWS_PER_HAND); + + for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { + select_row(i); + _delay_us(30); // without this wait read unstable value. + matrix_row_t cols = read_cols(); + if (matrix_debouncing[i+offset] != cols) { + matrix_debouncing[i+offset] = cols; + debouncing = DEBOUNCE; + } + unselect_rows(); + } + + if (debouncing) { + if (--debouncing) { + _delay_ms(1); + } else { + for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { + matrix[i+offset] = matrix_debouncing[i+offset]; + } + } + } + + return 1; +} + +#ifdef USE_I2C + +// Get rows from other half over i2c +int i2c_transaction(void) { + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + + int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE); + if (err) goto i2c_error; + + // start of matrix stored at 0x00 + err = i2c_master_write(0x00); + if (err) goto i2c_error; + + // Start read + err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ); + if (err) goto i2c_error; + + if (!err) { + /* + // read from TWI byte-by-byte into matrix_row_t memory space + size_t i; + for (i = 0; i < SLAVE_BUFFER_SIZE-1; ++i) { + *((uint8_t*)&matrix[slaveOffset]+i) = i2c_master_read(I2C_ACK); + } + // last byte to be read / end of chunk + *((uint8_t*)&matrix[slaveOffset]+i) = i2c_master_read(I2C_NACK); + */ + + // kludge for column #9: unpack bits for keys (2,9) and (3,9) from (1,7) and (1,8) + // i2c_master_read(I2C_ACK); + matrix[slaveOffset+0] = i2c_master_read(I2C_ACK); + // i2c_master_read(I2C_ACK); + matrix[slaveOffset+1] = (matrix_row_t)i2c_master_read(I2C_ACK)\ + | (matrix[slaveOffset+0]&0x40U)<<2; + // i2c_master_read(I2C_ACK); + matrix[slaveOffset+2] = (matrix_row_t)i2c_master_read(I2C_NACK)\ + | (matrix[slaveOffset+0]&0x80U)<<1; + // clear highest two bits on row 1, where the col9 bits were transported + matrix[slaveOffset+0] &= 0x3F; + + i2c_master_stop(); + } else { +i2c_error: // the cable is disconnected, or something else went wrong + i2c_reset_state(); + return err; + } + + return 0; +} + +#else // USE_SERIAL + +int serial_transaction(void) { + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + + if (serial_update_buffers()) { + return 1; + } + + for (int i = 0; i < ROWS_PER_HAND; ++i) { + matrix[slaveOffset+i] = serial_slave_buffer[i]; + } + return 0; +} +#endif + +uint8_t matrix_scan(void) +{ + int ret = _matrix_scan(); + + + +#ifdef USE_I2C + if( i2c_transaction() ) { +#else // USE_SERIAL + if( serial_transaction() ) { +#endif + // turn on the indicator led when halves are disconnected + TXLED1; + + error_count++; + + if (error_count > ERROR_DISCONNECT_COUNT) { + // reset other half if disconnected + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + for (int i = 0; i < ROWS_PER_HAND; ++i) { + matrix[slaveOffset+i] = 0; + } + } + } else { + // turn off the indicator led on no error + TXLED0; + error_count = 0; + } + matrix_scan_quantum(); + return ret; +} + +void matrix_slave_scan(void) { + _matrix_scan(); + + int offset = (isLeftHand) ? 0 : ROWS_PER_HAND; + +#ifdef USE_I2C + // SLAVE_BUFFER_SIZE is from i2c.h + // (MATRIX_ROWS/2*sizeof(matrix_row_t)) + // memcpy((void*)i2c_slave_buffer, (const void*)&matrix[offset], (ROWS_PER_HAND*sizeof(matrix_row_t))); + + // kludge for column #9: put bits for keys (2,9) and (3,9) into (1,7) and (1,8) + i2c_slave_buffer[0] = (uint8_t)(matrix[offset+0])\ + | (matrix[offset+1]&0x100U)>>2\ + | (matrix[offset+2]&0x100U)>>1; + i2c_slave_buffer[1] = (uint8_t)(matrix[offset+1]); + i2c_slave_buffer[2] = (uint8_t)(matrix[offset+2]); + // note: looks like a possible operator-precedence bug here, in last version? + /* + i2c_slave_buffer[1] = (uint8_t)matrix[offset+0]; + i2c_slave_buffer[2] = (uint8_t)(matrix[offset+1]>>8); + i2c_slave_buffer[3] = (uint8_t)(matrix[offset+1]>>8); + i2c_slave_buffer[4] = (uint8_t)(matrix[offset+2]>>8); + i2c_slave_buffer[5] = (uint8_t)matrix[offset+2]; + */ +#else // USE_SERIAL + for (int i = 0; i < ROWS_PER_HAND; ++i) { + serial_slave_buffer[i] = matrix[offset+i]; + } +#endif +} + +bool matrix_is_modified(void) +{ + if (debouncing) return false; + return true; +} + +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & ((matrix_row_t)1<> 4) + 1) &= ~_BV(col_pins[x] & 0xF); + _SFR_IO8((col_pins[x] >> 4) + 2) |= _BV(col_pins[x] & 0xF); + } +} + +static matrix_row_t read_cols(void) +{ + matrix_row_t result = 0; + for(int x = 0; x < MATRIX_COLS; x++) { + result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x); + } + return result; +} + +static void unselect_rows(void) +{ + for(int x = 0; x < ROWS_PER_HAND; x++) { + _SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF); + _SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF); + } +} + +static void select_row(uint8_t row) +{ + _SFR_IO8((row_pins[row] >> 4) + 1) |= _BV(row_pins[row] & 0xF); + _SFR_IO8((row_pins[row] >> 4) + 2) &= ~_BV(row_pins[row] & 0xF); +} diff --git a/keyboards/bfo9000/readme.md b/keyboards/bfo9000/readme.md new file mode 100644 index 00000000000..20c9b2ff793 --- /dev/null +++ b/keyboards/bfo9000/readme.md @@ -0,0 +1,18 @@ +BFO-9000 +======== + +A split full-size ortholinear keyboard made and sold by Keebio. Each half is a 6x9 arrangement, with breakable pieces to allow the number of rows to be customized between 4 to 6, and the number of columns to be between 7 to 9. [More info at Keebio](https://keeb.io). + +Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges) +Hardware Supported: Pro Micro +Hardware Availability: [Keebio](https://keeb.io) + +Make example for this keyboard (after setting up your build environment): + + make bfo9000:default + +Example of flashing this keyboard: + + make bfo9000:default:avrdude + +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/bfo9000/rules.mk b/keyboards/bfo9000/rules.mk new file mode 100644 index 00000000000..8a7e56f462d --- /dev/null +++ b/keyboards/bfo9000/rules.mk @@ -0,0 +1,70 @@ +SRC += matrix.c \ + i2c.c \ + split_util.c \ + serial.c + +# MCU name +#MCU = at90usb1287 +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) + +# Bootloader +# This definition is optional, and if your keyboard supports multiple bootloaders of +# different sizes, comment this out, and the correct address will be loaded +# automatically (+60). See bootloader.mk for all options. +BOOTLOADER = caterina + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +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. +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +CUSTOM_MATRIX = yes diff --git a/keyboards/bfo9000/serial.c b/keyboards/bfo9000/serial.c new file mode 100644 index 00000000000..4936e4249f0 --- /dev/null +++ b/keyboards/bfo9000/serial.c @@ -0,0 +1,230 @@ +/* + * WARNING: be careful changing this code, it is very timing dependent + */ + +#ifndef F_CPU +#define F_CPU 16000000 +#endif + +#include +#include +#include +#include +#include "serial.h" + +#ifdef USE_SERIAL + +// Serial pulse period in microseconds. Its probably a bad idea to lower this +// value. +#define SERIAL_DELAY 24 + +matrix_row_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; +matrix_row_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; + +#define ROW_MASK (((matrix_row_t)0-1)>>(8*sizeof(matrix_row_t)-MATRIX_COLS)) + +#define SLAVE_DATA_CORRUPT (1<<0) +volatile uint8_t status = 0; + +inline static +void serial_delay(void) { + _delay_us(SERIAL_DELAY); +} + +inline static +void serial_output(void) { + SERIAL_PIN_DDR |= SERIAL_PIN_MASK; +} + +// make the serial pin an input with pull-up resistor +inline static +void serial_input(void) { + SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK; + SERIAL_PIN_PORT |= SERIAL_PIN_MASK; +} + +inline static +matrix_row_t serial_read_pin(void) { + return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); +} + +inline static +void serial_low(void) { + SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; +} + +inline static +void serial_high(void) { + SERIAL_PIN_PORT |= SERIAL_PIN_MASK; +} + +void serial_master_init(void) { + serial_output(); + serial_high(); +} + +void serial_slave_init(void) { + serial_input(); + + // Enable INT0 + EIMSK |= _BV(INT0); + // Trigger on falling edge of INT0 + EICRA &= ~(_BV(ISC00) | _BV(ISC01)); +} + +// Used by the master to synchronize timing with the slave. +static +void sync_recv(void) { + serial_input(); + // This shouldn't hang if the slave disconnects because the + // serial line will float to high if the slave does disconnect. + while (!serial_read_pin()); + serial_delay(); +} + +// Used by the slave to send a synchronization signal to the master. +static +void sync_send(void) { + serial_output(); + + serial_low(); + serial_delay(); + + serial_high(); +} + +// Reads a byte from the serial line +static +matrix_row_t serial_read_byte(void) { + matrix_row_t byte = 0; + serial_input(); + for ( uint8_t i = 0; i < MATRIX_COLS; ++i) { + byte = (byte << 1) | serial_read_pin(); + serial_delay(); + _delay_us(1); + } + + return byte; +} + +// Sends a byte with MSB ordering +static +void serial_write_byte(matrix_row_t data) { + matrix_row_t b = MATRIX_COLS; + serial_output(); + while( b-- ) { + if(data & (1UL << b)) { + serial_high(); + } else { + serial_low(); + } + serial_delay(); + } +} + +// interrupt handle to be used by the slave device +ISR(SERIAL_PIN_INTERRUPT) { + sync_send(); + + matrix_row_t checksum = 0; + for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { + serial_write_byte(serial_slave_buffer[i]); + sync_send(); + checksum += ROW_MASK & serial_slave_buffer[i]; + } + serial_write_byte(checksum); + sync_send(); + + // wait for the sync to finish sending + serial_delay(); + + // read the middle of pulses + _delay_us(SERIAL_DELAY/2); + + matrix_row_t checksum_computed = 0; + for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { + serial_master_buffer[i] = serial_read_byte(); + sync_send(); + checksum_computed += ROW_MASK & serial_master_buffer[i]; + } + matrix_row_t checksum_received = serial_read_byte(); + sync_send(); + + serial_input(); // end transaction + + if ( checksum_computed != checksum_received ) { + status |= SLAVE_DATA_CORRUPT; + } else { + status &= ~SLAVE_DATA_CORRUPT; + } +} + +inline +bool serial_slave_DATA_CORRUPT(void) { + return status & SLAVE_DATA_CORRUPT; +} + +// Copies the serial_slave_buffer to the master and sends the +// serial_master_buffer to the slave. +// +// Returns: +// 0 => no error +// 1 => slave did not respond +int serial_update_buffers(void) { + // this code is very time dependent, so we need to disable interrupts + cli(); + + // signal to the slave that we want to start a transaction + serial_output(); + serial_low(); + _delay_us(1); + + // wait for the slaves response + serial_input(); + serial_high(); + _delay_us(SERIAL_DELAY); + + // check if the slave is present + if (serial_read_pin()) { + // slave failed to pull the line low, assume not present + sei(); + return 1; + } + + // if the slave is present syncronize with it + sync_recv(); + + matrix_row_t checksum_computed = 0; + // receive data from the slave + for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { + serial_slave_buffer[i] = serial_read_byte(); + sync_recv(); + checksum_computed += ROW_MASK & serial_slave_buffer[i]; + } + matrix_row_t checksum_received = serial_read_byte(); + sync_recv(); + + if (checksum_computed != checksum_received) { + sei(); + return 1; + } + + matrix_row_t checksum = 0; + // send data to the slave + for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { + serial_write_byte(serial_master_buffer[i]); + sync_recv(); + checksum += ROW_MASK & serial_master_buffer[i]; + } + serial_write_byte(checksum); + sync_recv(); + + // always, release the line when not in use + serial_output(); + serial_high(); + + sei(); + return 0; +} + +#endif diff --git a/keyboards/bfo9000/serial.h b/keyboards/bfo9000/serial.h new file mode 100644 index 00000000000..62761945721 --- /dev/null +++ b/keyboards/bfo9000/serial.h @@ -0,0 +1,27 @@ +#ifndef MY_SERIAL_H +#define MY_SERIAL_H + +#include "config.h" +#include "matrix.h" +#include + +/* TODO: some defines for interrupt setup */ +#define SERIAL_PIN_DDR DDRD +#define SERIAL_PIN_PORT PORTD +#define SERIAL_PIN_INPUT PIND +#define SERIAL_PIN_MASK _BV(PD0) +#define SERIAL_PIN_INTERRUPT INT0_vect + +#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 +#define SERIAL_MASTER_BUFFER_LENGTH 1 + +// Buffers for master - slave communication +extern volatile matrix_row_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; +extern volatile matrix_row_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; + +void serial_master_init(void); +void serial_slave_init(void); +int serial_update_buffers(void); +bool serial_slave_data_corrupt(void); + +#endif diff --git a/keyboards/bfo9000/split_util.c b/keyboards/bfo9000/split_util.c new file mode 100644 index 00000000000..7f200e6c942 --- /dev/null +++ b/keyboards/bfo9000/split_util.c @@ -0,0 +1,86 @@ +#include +#include +#include +#include +#include +#include +#include "split_util.h" +#include "matrix.h" +#include "keyboard.h" +#include "config.h" +#include "timer.h" + +#ifdef USE_I2C +# include "i2c.h" +#else +# include "serial.h" +#endif + +volatile bool isLeftHand = true; + +static void setup_handedness(void) { + #ifdef EE_HANDS + isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); + #else + // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c + #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT) + isLeftHand = !has_usb(); + #else + isLeftHand = has_usb(); + #endif + #endif +} + +static void keyboard_master_setup(void) { +#ifdef USE_I2C + i2c_master_init(); +#ifdef SSD1306OLED + matrix_master_OLED_init(); +#endif +#else + serial_master_init(); +#endif +} + +static void keyboard_slave_setup(void) { + timer_init(); +#ifdef USE_I2C + i2c_slave_init(SLAVE_I2C_ADDRESS); +#else + serial_slave_init(); +#endif +} + +bool has_usb(void) { + USBCON |= (1 << OTGPADE); //enables VBUS pad + _delay_us(5); + return (USBSTA & (1< +#include "eeconfig.h" + +#define SLAVE_I2C_ADDRESS 0x32 + +extern volatile bool isLeftHand; + +// slave version of matix scan, defined in matrix.c +void matrix_slave_scan(void); + +void split_keyboard_setup(void); +bool has_usb(void); +void keyboard_slave_loop(void); + +void matrix_master_OLED_init (void); + +#endif From 10d287d1aa0340db369bc676d78eaa948e5dd650 Mon Sep 17 00:00:00 2001 From: muffinlynx Date: Thu, 26 Apr 2018 10:30:05 -0400 Subject: [PATCH 056/152] ScrabblePad updates (#2809) * Update config.h Matrix pinout updated to current revision. * Add updated matrix, define RGB pin Matrix updated to current pinout, pin for WS2812 defined. --- keyboards/scrabblepad/config.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/keyboards/scrabblepad/config.h b/keyboards/scrabblepad/config.h index 01f847dd47e..7039ea24f71 100644 --- a/keyboards/scrabblepad/config.h +++ b/keyboards/scrabblepad/config.h @@ -42,8 +42,8 @@ along with this program. If not, see . * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) * */ -#define MATRIX_ROW_PINS { D3, F1, C7, F2, C6, F3, C5, F4, C4, F5, C3, F6, C2, F7, C1 } -#define MATRIX_COL_PINS { D4, D5, D7, B7, D0, D1, D2, C0, F0, B4, B5, B6, E1, E7, E0 } +#define MATRIX_ROW_PINS { D5, F1, C7, F2, C6, F3, C5, F4, C4, F5, C3, F6, C2, F7, C1 } +#define MATRIX_COL_PINS { D6, D7, E0, B7, D2, D3, D4, E6, F0, B4, B5, B6, C0, E7, E1 } #define UNUSED_PINS /* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ @@ -53,6 +53,14 @@ along with this program. If not, see . // #define BACKLIGHT_BREATHING // #define BACKLIGHT_LEVELS 3 +// ws2812 options +//#define RGB_DI_PIN A0 // pin the DI on the ws2812 is hooked-up to +//#define RGBLIGHT_ANIMATIONS // run RGB animations +//#define RGBLED_NUM 6 // number of LEDs +//#define RGBLIGHT_HUE_STEP 12 // units to step when in/decreasing hue +//#define RGBLIGHT_SAT_STEP 25 // units to step when in/decresing saturation +//#define RGBLIGHT_VAL_STEP 12 // units to step when in/decreasing value (brightness) + /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ #define DEBOUNCING_DELAY 5 From 644efe48bf893a61597114d6d1953a2905c4e6a4 Mon Sep 17 00:00:00 2001 From: David Wen Riccardi-Zhu Date: Thu, 26 Apr 2018 14:51:58 +0000 Subject: [PATCH 057/152] Update piemod keymap (#2786) Add RGB control, fix keymap to work with latest QMK. Squashed commit of the following: commit 3c5d95e4809d446fe5304aab9274d527182835e6 Author: dwrz Date: Sat Apr 21 18:26:58 2018 +0000 Make rules.mk for Let's Split piemod commit 0cc5fc135220f0eb48509d2b027e4cad033d74a5 Author: dwrz Date: Sat Apr 21 18:26:25 2018 +0000 Add RGB control keys to function layer commit d1b6bfa5f34123658534f99c97471b779b971ffb Author: dwrz Date: Sat Apr 21 18:26:03 2018 +0000 Refactor MACROS to COMBOS MACROS was conflicting with existing code. commit ce2f47b13fb3bfab9d63292ddba466879d300051 Author: dwrz Date: Sat Apr 21 18:25:26 2018 +0000 Add typing options to config.h commit cb0aa62b81a17aaaee1f9843138495b9ca14b6d4 Author: dwrz Date: Sat Apr 21 18:25:10 2018 +0000 Add RGB options to config.h --- keyboards/lets_split/keymaps/piemod/config.h | 12 +++++ keyboards/lets_split/keymaps/piemod/keymap.c | 47 ++++++-------------- keyboards/lets_split/keymaps/piemod/rules.mk | 13 ++++++ 3 files changed, 38 insertions(+), 34 deletions(-) create mode 100644 keyboards/lets_split/keymaps/piemod/rules.mk diff --git a/keyboards/lets_split/keymaps/piemod/config.h b/keyboards/lets_split/keymaps/piemod/config.h index 5a6261c4f7c..001b62e41bb 100644 --- a/keyboards/lets_split/keymaps/piemod/config.h +++ b/keyboards/lets_split/keymaps/piemod/config.h @@ -34,4 +34,16 @@ along with this program. If not, see . // #define MASTER_RIGHT // #define EE_HANDS +// RGB Options +#undef RGBLED_NUM +#define RGBLED_NUM 10 +#define RGBLIGHT_SLEEP +#define RGBLIGHT_ANIMATIONS +#define RGBLIGHT_EFFECT_SNAKE_LENGTH 1 +#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 1 + +// Typing Options +#define PREVENT_STUCK_MODIFIERS +#define QMK_KEYS_PER_SCAN 4 + #endif diff --git a/keyboards/lets_split/keymaps/piemod/keymap.c b/keyboards/lets_split/keymaps/piemod/keymap.c index 762d8c2742a..fca96bf39a6 100644 --- a/keyboards/lets_split/keymaps/piemod/keymap.c +++ b/keyboards/lets_split/keymaps/piemod/keymap.c @@ -10,7 +10,7 @@ extern keymap_config_t keymap_config; #define _NUMBER 3 // F(3) #define _FUNCTION 4 // F(4) #define _EMACS 5 // F(5) -#define _MACROS 6 // F(6) +#define _COMBOS 6 // F(6) #define _MOUSE 7 // F(7) enum custom_keycodes { @@ -20,17 +20,17 @@ enum custom_keycodes { NUMBER, FUNCTION, EMACS, - MACROS, + COMBOS, MOUSE, }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_DVORAK] = LAYOUT( \ - KC_ESC, KC_QUOTE, F(7), KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DELETE, \ - KC_TAB, F(1), F(2), F(3), F(4), KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENTER, \ - KC_LSHIFT, KC_SCOLON, F(5), KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_MINUS, \ - F(10), F(6), KC_MENU, KC_LALT, KC_LGUI, KC_BSPACE, KC_SPACE, KC_RCTRL, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \ + KC_ESC, KC_QUOTE, LT(7, KC_COMMA), KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DELETE, \ + KC_TAB, LT(1, KC_A), LT(2, KC_O), LT(3, KC_E), LT(4, KC_U), KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENTER, \ + KC_LSHIFT, KC_SCOLON, LT(5, KC_Q), KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_MINUS, \ + F(1), LT(6, KC_LCTRL), KC_MENU, KC_LALT, KC_LGUI, KC_BSPACE, KC_SPACE, KC_RCTRL, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \ ), [_ARROW] = LAYOUT( \ @@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_SYMBOL] = LAYOUT( \ KC_TILD, KC_GRAVE, KC_NO, KC_EQUAL, KC_PLUS, KC_NO, KC_LBRACKET, KC_RBRACKET, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, \ - KC_NO, KC_NO, KC_TRNS, KC_SCOLON, KC_COLN, KC_NO, KC_LCBR, KC_RCBR, KC_DLR, KC_PERC, KC_CIRC, F(21), \ + KC_NO, KC_NO, KC_TRNS, KC_SCOLON, KC_COLN, KC_NO, KC_LCBR, KC_RCBR, KC_DLR, KC_PERC, KC_CIRC, F(2), \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BSLASH, KC_SLASH, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, \ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_ASTR, KC_SLASH, KC_MINUS, KC_PLUS, KC_EQUAL \ ), @@ -56,9 +56,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FUNCTION] = LAYOUT( \ KC_PSCREEN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ - KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, \ - RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DELETE, KC_INSERT, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ + KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \ + KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_NO, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, \ + RESET, RGB_TOG, RGB_MOD, KC_NO, KC_NO, KC_NO, KC_DELETE, KC_INSERT, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ ), [_EMACS] = LAYOUT( \ @@ -68,7 +68,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO \ ), -[_MACROS] = LAYOUT( \ +[_COMBOS] = LAYOUT( \ 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_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_NO, KC_NO, KC_NO, KC_NO, \ @@ -93,29 +93,8 @@ enum function_id { int CAPSLOCKED = 0; const uint16_t PROGMEM fn_actions[] = { - - // DVORAK 0 - // ARROW 1, F(1) - // SYMBOL 2, F(2) - // NUMBER 3, F(3) - // FUNCTION 4, F(4) - // EMACS 5, F(5) - // MACROS 6, F(6) - // MOUSE 7, F(7) - - // Layers - [1] = ACTION_LAYER_TAP_KEY(1, KC_A), // FN1 = Momentary Arrow layer on A. - [2] = ACTION_LAYER_TAP_KEY(2, KC_O), // FN2 = Momentary symbOl layer on O. - [3] = ACTION_LAYER_TAP_KEY(3, KC_E), // FN3 = Momentary numbEr layer on E. - [4] = ACTION_LAYER_TAP_KEY(4, KC_U), // FN4 = Momentary fUnction layer on U. - [5] = ACTION_LAYER_TAP_KEY(5, KC_Q), // FN5 = Momentary emaQs layer on Q. - [6] = ACTION_LAYER_TAP_KEY(6, KC_LCTRL), // FN6 = Momentary MACROS on ??? key. - [7] = ACTION_LAYER_TAP_KEY(7, KC_COMMA), // FN7 = Momentary MOUSE on , key. - // Special Keys - [10] = ACTION_MODS_KEY(KC_LCTRL, KC_LALT), // FN10 = Ctrl + Alt. - + [1] = ACTION_MODS_KEY(KC_LCTRL, KC_LALT), // FN10 = Ctrl + Alt. // Symbols - [21] = ACTION_MODS_KEY(MOD_LSFT, KC_SLASH), // FN21 = Question mark. - + [2] = ACTION_MODS_KEY(MOD_LSFT, KC_SLASH), // FN21 = Question mark. }; diff --git a/keyboards/lets_split/keymaps/piemod/rules.mk b/keyboards/lets_split/keymaps/piemod/rules.mk new file mode 100644 index 00000000000..027ea977e71 --- /dev/null +++ b/keyboards/lets_split/keymaps/piemod/rules.mk @@ -0,0 +1,13 @@ +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = yes # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SUBPROJECT_rev1 = no From 80ccbc7b547d07236f302af830be75e646b7848f Mon Sep 17 00:00:00 2001 From: James Date: Thu, 26 Apr 2018 11:06:59 -0700 Subject: [PATCH 058/152] QMK Configurator update for the Pearl 40% (#2810) * QMK Configurator updates for the Pearl 40% Attempt to get the physical layout as displayed in the Configurator more true-to-life. * Bugfixes per mechmerlin "By changing KEYMAP to LAYOUT in the .h file, all the keymaps who rely on KEYMAP are now broken. You need to go into the keymap directory and fix all the keymaps affected by this change. Should just be an issue of renaming KEYMAP to LAYOUT." * Merge pull request #2 from noroadsleft/noroadsleft-patch-20180425 Bugfixes per mechmerlin * keymap.c updates for Pearl -#include "pearl.h" +#QMK_KEYBOARD_H --- keyboards/pearl/info.json | 13 +++++++++++++ keyboards/pearl/keymaps/default/keymap.c | 6 +++--- keyboards/pearl/keymaps/jetpacktuxedo/keymap.c | 10 +++++----- keyboards/pearl/keymaps/phil/keymap.c | 14 +++++++------- keyboards/pearl/keymaps/rask/keymap.c | 12 ++++++------ keyboards/pearl/pearl.h | 2 +- 6 files changed, 35 insertions(+), 22 deletions(-) create mode 100644 keyboards/pearl/info.json diff --git a/keyboards/pearl/info.json b/keyboards/pearl/info.json new file mode 100644 index 00000000000..300af0ecdf5 --- /dev/null +++ b/keyboards/pearl/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "Pearl", + "url": "", + "maintainer": "qmk", + "bootloader": "", + "width": 13, + "height": 4, + "layouts": { + "LAYOUT": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"{", "x":11, "y":0}, {"label":"Backspace", "x":12, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"A", "x":1.5, "y":1}, {"label":"S", "x":2.5, "y":1}, {"label":"D", "x":3.5, "y":1}, {"label":"F", "x":4.5, "y":1}, {"label":"G", "x":5.5, "y":1}, {"label":"H", "x":6.5, "y":1}, {"label":"J", "x":7.5, "y":1}, {"label":"K", "x":8.5, "y":1}, {"label":"L", "x":9.5, "y":1}, {"label":":", "x":10.5, "y":1}, {"label":"\\", "x":11.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"Z", "x":1.75, "y":2}, {"label":"X", "x":2.75, "y":2}, {"label":"C", "x":3.75, "y":2}, {"label":"V", "x":4.75, "y":2}, {"label":"B", "x":5.75, "y":2}, {"label":"N", "x":6.75, "y":2}, {"label":"M", "x":7.75, "y":2}, {"label":"<", "x":8.75, "y":2}, {"label":">", "x":9.75, "y":2}, {"label":"?", "x":10.75, "y":2}, {"label":"Shift", "x":11.75, "y":2, "w":1.25}, {"label":"Alt", "x":1.13, "y":3}, {"label":"Ctrl", "x":2.13, "y":3, "w":1.25}, {"label":"Win", "x":3.375, "y":3, "w":1.25}, {"label":"Shift", "x":4.625, "y":3, "w":2.25}, {"x":6.875, "y":3, "w":1.25}, {"x":8.125, "y":3, "w":1.5}, {"label":"Menu", "x":9.625, "y":3}, {"label":"Fn", "x":10.63, "y":3, "w":1.25}] + } + } +} \ No newline at end of file diff --git a/keyboards/pearl/keymaps/default/keymap.c b/keyboards/pearl/keymaps/default/keymap.c index 5efb6499b57..94b82c9a1a3 100644 --- a/keyboards/pearl/keymaps/default/keymap.c +++ b/keyboards/pearl/keymaps/default/keymap.c @@ -15,16 +15,16 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "pearl.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = KEYMAP( + [0] = LAYOUT( KC_GESC, 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_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, MT(MOD_LSFT, KC_CAPS), 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_LALT, KC_LGUI, KC_LSFT, KC_SPC, KC_SPC, KC_APP, MO(1) ), - [1] = KEYMAP( + [1] = LAYOUT( KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, KC_SLEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_QUOT, KC_BSLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, diff --git a/keyboards/pearl/keymaps/jetpacktuxedo/keymap.c b/keyboards/pearl/keymaps/jetpacktuxedo/keymap.c index d8e96f1a04e..300663e507e 100644 --- a/keyboards/pearl/keymaps/jetpacktuxedo/keymap.c +++ b/keyboards/pearl/keymaps/jetpacktuxedo/keymap.c @@ -1,25 +1,25 @@ -#include "pearl.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = KEYMAP( + [0] = LAYOUT( KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, LT(2, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(2,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, KC_BSPC, KC_NO, LT(1, KC_SPC), MO(3), KC_RALT ), - [1] = KEYMAP( + [1] = LAYOUT( 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_QUOT, KC_TRNS, KC_TRNS, RGB_TOG, RGB_SMOD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), - [2] = KEYMAP( + [2] = LAYOUT( KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS, KC_PLUS, KC_TRNS, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_DQUO, KC_TRNS, KC_TRNS, RGB_HUI, RGB_HUD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PIPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), - [3] = KEYMAP( + [3] = LAYOUT( KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, 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, BL_TOGG, KC_TRNS, BL_INC, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, diff --git a/keyboards/pearl/keymaps/phil/keymap.c b/keyboards/pearl/keymaps/phil/keymap.c index a28fecd2621..80a39dd2ad6 100755 --- a/keyboards/pearl/keymaps/phil/keymap.c +++ b/keyboards/pearl/keymaps/phil/keymap.c @@ -23,40 +23,40 @@ along with this program. If not, see . #define _FN2 4 #define LIGHT 5 -#include "pearl.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [COLEMAK] = KEYMAP( + [COLEMAK] = LAYOUT( KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_NO, KC_BSPC, LGUI_T(KC_ESC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, LSFT_T(KC_DEL), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT), KC_LCTL, KC_LGUI, KC_LALT, LT(_FN1, KC_SPC), KC_NO, LT(_FN2, KC_SPC), TG(QWERTY), TG(WIN) ), - [QWERTY] = KEYMAP( + [QWERTY] = LAYOUT( KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_NO, KC_TRNS, KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_TRNS, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS ), - [WIN] = KEYMAP( + [WIN] = LAYOUT( 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_TRNS, LCTL_T(KC_ESC), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LGUI, KC_LALT, KC_LCTL, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS ), - [_FN1] = KEYMAP( + [_FN1] = LAYOUT( KC_GRV, KC_MNXT, KC_NO, KC_PIPE, KC_PLUS, KC_LBRC, KC_RBRC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_TRNS, KC_TRNS, KC_MPLY, KC_SPC, KC_UNDS, KC_EQUAL, KC_LPRN, KC_RPRN, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDOWN, KC_TRNS, KC_TRNS, KC_MPRV, KC_NO, KC_BSLS, KC_MINUS, KC_LCBR, KC_RCBR, KC_NO, KC_MUTE, KC_VOLU, KC_VOLD, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS ), - [_FN2] = KEYMAP( + [_FN2] = LAYOUT( KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC, KC_NO, KC_TRNS, KC_TRNS, 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_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_CAPS, TG(LIGHT), KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS ), - [LIGHT] = KEYMAP( + [LIGHT] = LAYOUT( RESET, KC_NO, BL_ON, BL_INC, BL_BRTG, RGB_M_P, RGB_M_B, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, KC_NO, BL_TOGG, BL_STEP, KC_NO, RGB_M_SN, RGB_M_K, RGB_TOG, RGB_HUD, RGB_SAD, RGB_VAD, KC_NO, KC_NO, KC_NO, BL_OFF, BL_DEC, KC_NO, KC_NO, KC_NO, RGB_RMOD, RGB_M_SW, RGB_M_R, RGB_M_G, KC_NO, diff --git a/keyboards/pearl/keymaps/rask/keymap.c b/keyboards/pearl/keymaps/rask/keymap.c index b9f1350939b..ae633f45d8a 100644 --- a/keyboards/pearl/keymaps/rask/keymap.c +++ b/keyboards/pearl/keymaps/rask/keymap.c @@ -1,38 +1,38 @@ -#include "pearl.h" +#include QMK_KEYBOARD_H #define ____ KC_TRNS const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // BASE LAYER - [0] = KEYMAP( + [0] = LAYOUT( 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, MO(2), 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(3), KC_LCTL, KC_LALT, KC_BSPC, MO(1), MO(1), KC_SPC, KC_RALT, KC_LGUI ), // BASE LAYER TWO (Fn1) - [1] = KEYMAP( + [1] = LAYOUT( 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_QUOT, KC_BSLS, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_RSFT, ____, ____, ____, ____, ____, ____, ____, ____ ), // FROW LAYER AND ARROWS (Fn2) - [2] = KEYMAP( + [2] = 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_UP, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_LEFT, KC_DOWN,KC_RGHT, MO(4), ____, ____, ____, ____, ____, ____, ____, ____ ), // MEDIA AND RGB (Fn3) - [3] = KEYMAP( + [3] = LAYOUT( ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_MPRV,KC_MPLY, KC_MNXT, KC_DEL, ____, ____, ____, RGB_HUI, RGB_SAI,RGB_VAI,____, ____, ____, ____, ____, ____, ____, RGB_MOD, RGB_TOG, RGB_HUD, RGB_SAD,RGB_VAD,____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____ ), // UTIL (Fn1+Fn3) - [4] = KEYMAP( + [4] = LAYOUT( ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_PSCR, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_PGUP,____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_HOME, KC_PGDN,KC_END, ____, diff --git a/keyboards/pearl/pearl.h b/keyboards/pearl/pearl.h index 4ead4cedf91..4c3f0cb6fe1 100644 --- a/keyboards/pearl/pearl.h +++ b/keyboards/pearl/pearl.h @@ -21,7 +21,7 @@ along with this program. If not, see . #include "quantum.h" #include "pearl.h" -#define KEYMAP( \ +#define LAYOUT( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C,\ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,\ From 66e40529aa9271c76d207fb8190ad76bb5cf8d6b Mon Sep 17 00:00:00 2001 From: Martin Sandiford Date: Fri, 27 Apr 2018 05:40:03 +0930 Subject: [PATCH 059/152] Change handling of adjust layer to make it more LT(...) friendly. (#1625) * Change handling of adjust layer to make it more LT(...) friendly. * Update based on feedback from drashna. * Change handling of adjust layer to make it more LT(...) friendly. This reworks handling to make it a little more friendly to include in keymaps. --- keyboards/planck/keymaps/default/keymap.c | 29 ++++++----------------- quantum/quantum.c | 12 ++++++---- quantum/quantum.h | 1 + 3 files changed, 15 insertions(+), 27 deletions(-) diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c index 04fc33640d1..b13557eee25 100644 --- a/keyboards/planck/keymaps/default/keymap.c +++ b/keyboards/planck/keymaps/default/keymap.c @@ -34,12 +34,13 @@ enum planck_keycodes { COLEMAK, DVORAK, PLOVER, - LOWER, - RAISE, BACKLIT, EXT_PLV }; +#define LOWER MO(_LOWER) +#define RAISE MO(_RAISE) + const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Qwerty @@ -177,6 +178,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND); #endif +uint32_t layer_state_set_user(uint32_t state) { + return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); +} + bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QWERTY: @@ -198,26 +203,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } 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 BACKLIT: if (record->event.pressed) { register_code(KC_RSFT); diff --git a/quantum/quantum.c b/quantum/quantum.c index 5a2a73d4a2b..2662e5ef1c5 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -780,12 +780,14 @@ void set_single_persistent_default_layer(uint8_t default_layer) { default_layer_set(1U< Date: Thu, 26 Apr 2018 13:51:19 -0700 Subject: [PATCH 060/152] Keymap Fixes for 7U layout, RGB and Audio support (#2779) - confused KC_COMM, KC_SLSH, KC_DOT order - KC_INS -> KC_DEL - Document audio on C4 and B7, set default RGB to pin C6 --- keyboards/clueboard/2x1800/config.h | 7 ++++++ .../2x1800/keymaps/default_7u/keymap.c | 25 +++++++++++++++++-- keyboards/clueboard/2x1800/rules.mk | 3 ++- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/keyboards/clueboard/2x1800/config.h b/keyboards/clueboard/2x1800/config.h index 0aff939701b..ea3c7a6e975 100644 --- a/keyboards/clueboard/2x1800/config.h +++ b/keyboards/clueboard/2x1800/config.h @@ -69,6 +69,13 @@ along with this program. If not, see . /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE +#define RGB_DI_PIN C6 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 16 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 + /* If defined, GRAVE_ESC will always act as ESC when CTRL is held. * This is userful for the Windows task manager shortcut (ctrl+shift+esc). */ diff --git a/keyboards/clueboard/2x1800/keymaps/default_7u/keymap.c b/keyboards/clueboard/2x1800/keymaps/default_7u/keymap.c index 5df6fe0fbf6..74a35c27b5b 100644 --- a/keyboards/clueboard/2x1800/keymaps/default_7u/keymap.c +++ b/keyboards/clueboard/2x1800/keymaps/default_7u/keymap.c @@ -17,12 +17,33 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT_7U_SPACE( - KC_HOME, KC_END, KC_PGUP, KC_PGDN, 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, KC_INS, \ + KC_HOME, KC_END, KC_PGUP, KC_PGDN, 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, KC_DEL, \ \ KC_PMNS, KC_NLCK, KC_PSLS, KC_PAST, 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_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \ KC_PPLS, KC_P7, KC_P8, KC_P9, 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_P7, KC_P8, KC_P9, KC_PSLS, \ KC_P4, KC_P5, KC_P6, 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_P4, KC_P5, KC_P6, \ - KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_SLSH, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \ + KC_PENT, KC_P1, KC_P2, KC_P3, KC_UP, 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_P1, KC_P2, KC_P3, KC_PENT, \ KC_P0, KC_PDOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \ ) }; + + +#ifdef AUDIO_ENABLE + float song_one_up[][2] = SONG(ONE_UP_SOUND); +#endif + +volatile uint8_t runonce = true; +static uint16_t my_timer; + +void matrix_init_user(void) { + my_timer = timer_read(); +} + +void matrix_scan_user(void) { + if (runonce && timer_elapsed(my_timer) > 500) { + runonce = false; +#ifdef AUDIO_ENABLE + PLAY_SONG(song_one_up); +#endif + } +} diff --git a/keyboards/clueboard/2x1800/rules.mk b/keyboards/clueboard/2x1800/rules.mk index 2f09f9b9ca6..516a536f6b1 100644 --- a/keyboards/clueboard/2x1800/rules.mk +++ b/keyboards/clueboard/2x1800/rules.mk @@ -59,5 +59,6 @@ COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = yes # USB Nkey Rollover MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) UNICODE_ENABLE = no # Unicode -AUDIO_ENABLE = no # Audio output on port C6 +RGBLIGHT_ENABLE = no # RGB on port C6 +AUDIO_ENABLE = no # Audio output on port C4 and B7 FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches From 8d65d69b8d1ab4e45d0b42dd4e9e6d9a0bedc9a0 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Thu, 26 Apr 2018 17:19:42 -0700 Subject: [PATCH 061/152] More QMK Configurator Support for Pearl (#2814) * Rename LAYOUT to LAYOUT_all Add additional layouts for the pearl with all splits and the pearl with splits but a 6.25u spacebar. * add new layouts to info.json --- keyboards/pearl/info.json | 25 +++++++++++------ keyboards/pearl/keymaps/default/keymap.c | 4 +-- .../pearl/keymaps/jetpacktuxedo/keymap.c | 8 +++--- keyboards/pearl/keymaps/phil/keymap.c | 14 +++++----- keyboards/pearl/keymaps/rask/keymap.c | 10 +++---- keyboards/pearl/pearl.h | 27 ++++++++++++++++++- 6 files changed, 61 insertions(+), 27 deletions(-) diff --git a/keyboards/pearl/info.json b/keyboards/pearl/info.json index 300af0ecdf5..5bc4e049402 100644 --- a/keyboards/pearl/info.json +++ b/keyboards/pearl/info.json @@ -1,13 +1,22 @@ { - "keyboard_name": "Pearl", - "url": "", - "maintainer": "qmk", - "bootloader": "", - "width": 13, - "height": 4, + "keyboard_name": "Pearl", + "url": "", + "maintainer": "qmk", + "bootloader": "", + "width": 13, + "height": 4, "layouts": { - "LAYOUT": { + "LAYOUT_all": { "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"{", "x":11, "y":0}, {"label":"Backspace", "x":12, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"A", "x":1.5, "y":1}, {"label":"S", "x":2.5, "y":1}, {"label":"D", "x":3.5, "y":1}, {"label":"F", "x":4.5, "y":1}, {"label":"G", "x":5.5, "y":1}, {"label":"H", "x":6.5, "y":1}, {"label":"J", "x":7.5, "y":1}, {"label":"K", "x":8.5, "y":1}, {"label":"L", "x":9.5, "y":1}, {"label":":", "x":10.5, "y":1}, {"label":"\\", "x":11.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"Z", "x":1.75, "y":2}, {"label":"X", "x":2.75, "y":2}, {"label":"C", "x":3.75, "y":2}, {"label":"V", "x":4.75, "y":2}, {"label":"B", "x":5.75, "y":2}, {"label":"N", "x":6.75, "y":2}, {"label":"M", "x":7.75, "y":2}, {"label":"<", "x":8.75, "y":2}, {"label":">", "x":9.75, "y":2}, {"label":"?", "x":10.75, "y":2}, {"label":"Shift", "x":11.75, "y":2, "w":1.25}, {"label":"Alt", "x":1.13, "y":3}, {"label":"Ctrl", "x":2.13, "y":3, "w":1.25}, {"label":"Win", "x":3.375, "y":3, "w":1.25}, {"label":"Shift", "x":4.625, "y":3, "w":2.25}, {"x":6.875, "y":3, "w":1.25}, {"x":8.125, "y":3, "w":1.5}, {"label":"Menu", "x":9.625, "y":3}, {"label":"Fn", "x":10.63, "y":3, "w":1.25}] + }, + + "LAYOUT_splits": { + "layout": [{"label":"Tab", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"{", "x":11, "y":0}, {"label":"}", "x":12, "y":0}, {"label":"Caps Lock", "x":0, "y":1, "w":1.5}, {"label":"A", "x":1.5, "y":1}, {"label":"S", "x":2.5, "y":1}, {"label":"D", "x":3.5, "y":1}, {"label":"F", "x":4.5, "y":1}, {"label":"G", "x":5.5, "y":1}, {"label":"H", "x":6.5, "y":1}, {"label":"J", "x":7.5, "y":1}, {"label":"K", "x":8.5, "y":1}, {"label":"L", "x":9.5, "y":1}, {"label":":", "x":10.5, "y":1}, {"label":"Enter", "x":11.5, "y":1, "w":1.5}, {"label":"Shift", "x":0, "y":2, "w":1.75}, {"label":"Z", "x":1.75, "y":2}, {"label":"X", "x":2.75, "y":2}, {"label":"C", "x":3.75, "y":2}, {"label":"V", "x":4.75, "y":2}, {"label":"B", "x":5.75, "y":2}, {"label":"N", "x":6.75, "y":2}, {"label":"M", "x":7.75, "y":2}, {"label":"<", "x":8.75, "y":2}, {"label":">", "x":9.75, "y":2}, {"label":"?", "x":10.75, "y":2}, {"label":"Shift", "x":11.75, "y":2, "w":1.25}, {"label":"Ctrl", "x":1, "y":3}, {"label":"Win", "x":2, "y":3, "w":1.25}, {"label":"Alt", "x":3.25, "y":3, "w":1.25}, {"x":4.5, "y":3, "w":2.25}, {"label":"Alt", "x":6.75, "y":3, "w":2.75}, {"label":"Win", "x":9.5, "y":3, "w":1.25}, {"label":"Menu", "x":10.75, "y":3}] + }, + + "LAYOUT_spacebar": { + "layout": [{"label":"Tab", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"{", "x":11, "y":0}, {"label":"}", "x":12, "y":0}, {"label":"Caps Lock", "x":0, "y":1, "w":1.5}, {"label":"A", "x":1.5, "y":1}, {"label":"S", "x":2.5, "y":1}, {"label":"D", "x":3.5, "y":1}, {"label":"F", "x":4.5, "y":1}, {"label":"G", "x":5.5, "y":1}, {"label":"H", "x":6.5, "y":1}, {"label":"J", "x":7.5, "y":1}, {"label":"K", "x":8.5, "y":1}, {"label":"L", "x":9.5, "y":1}, {"label":":", "x":10.5, "y":1}, {"label":"Enter", "x":11.5, "y":1, "w":1.5}, {"label":"Shift", "x":0, "y":2, "w":1.75}, {"label":"Z", "x":1.75, "y":2}, {"label":"X", "x":2.75, "y":2}, {"label":"C", "x":3.75, "y":2}, {"label":"V", "x":4.75, "y":2}, {"label":"B", "x":5.75, "y":2}, {"label":"N", "x":6.75, "y":2}, {"label":"M", "x":7.75, "y":2}, {"label":"<", "x":8.75, "y":2}, {"label":">", "x":9.75, "y":2}, {"label":"?", "x":10.75, "y":2}, {"label":"Shift", "x":11.75, "y":2, "w":1.25}, {"label":"Ctrl", "x":1, "y":3}, {"label":"Win", "x":2, "y":3, "w":1.25}, {"x":3.25, "y":3, "w":6.25}, {"label":"Win", "x":9.5, "y":3, "w":1.25}, {"label":"Menu", "x":10.75, "y":3}] } + } -} \ No newline at end of file +} diff --git a/keyboards/pearl/keymaps/default/keymap.c b/keyboards/pearl/keymaps/default/keymap.c index 94b82c9a1a3..bffa9b14f15 100644 --- a/keyboards/pearl/keymaps/default/keymap.c +++ b/keyboards/pearl/keymaps/default/keymap.c @@ -18,13 +18,13 @@ along with this program. If not, see . #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( + [0] = LAYOUT_all( KC_GESC, 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_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, MT(MOD_LSFT, KC_CAPS), 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_LALT, KC_LGUI, KC_LSFT, KC_SPC, KC_SPC, KC_APP, MO(1) ), - [1] = LAYOUT( + [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_EQL, KC_SLEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_QUOT, KC_BSLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, diff --git a/keyboards/pearl/keymaps/jetpacktuxedo/keymap.c b/keyboards/pearl/keymaps/jetpacktuxedo/keymap.c index 300663e507e..b94fb673ff8 100644 --- a/keyboards/pearl/keymaps/jetpacktuxedo/keymap.c +++ b/keyboards/pearl/keymaps/jetpacktuxedo/keymap.c @@ -1,25 +1,25 @@ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( + [0] = LAYOUT_all( KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, LT(2, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(2,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, KC_BSPC, KC_NO, LT(1, KC_SPC), MO(3), KC_RALT ), - [1] = LAYOUT( + [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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_QUOT, KC_TRNS, KC_TRNS, RGB_TOG, RGB_SMOD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), - [2] = LAYOUT( + [2] = LAYOUT_all( KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS, KC_PLUS, KC_TRNS, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_DQUO, KC_TRNS, KC_TRNS, RGB_HUI, RGB_HUD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PIPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), - [3] = LAYOUT( + [3] = LAYOUT_all( KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, 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, BL_TOGG, KC_TRNS, BL_INC, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, diff --git a/keyboards/pearl/keymaps/phil/keymap.c b/keyboards/pearl/keymaps/phil/keymap.c index 80a39dd2ad6..56326d423fb 100755 --- a/keyboards/pearl/keymaps/phil/keymap.c +++ b/keyboards/pearl/keymaps/phil/keymap.c @@ -26,37 +26,37 @@ along with this program. If not, see . #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [COLEMAK] = LAYOUT( + [COLEMAK] = LAYOUT_all( KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_NO, KC_BSPC, LGUI_T(KC_ESC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, LSFT_T(KC_DEL), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT), KC_LCTL, KC_LGUI, KC_LALT, LT(_FN1, KC_SPC), KC_NO, LT(_FN2, KC_SPC), TG(QWERTY), TG(WIN) ), - [QWERTY] = LAYOUT( + [QWERTY] = LAYOUT_all( KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_NO, KC_TRNS, KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_TRNS, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS ), - [WIN] = LAYOUT( + [WIN] = LAYOUT_all( 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_TRNS, LCTL_T(KC_ESC), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LGUI, KC_LALT, KC_LCTL, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS ), - [_FN1] = LAYOUT( + [_FN1] = LAYOUT_all( KC_GRV, KC_MNXT, KC_NO, KC_PIPE, KC_PLUS, KC_LBRC, KC_RBRC, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_TRNS, KC_TRNS, KC_MPLY, KC_SPC, KC_UNDS, KC_EQUAL, KC_LPRN, KC_RPRN, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDOWN, KC_TRNS, KC_TRNS, KC_MPRV, KC_NO, KC_BSLS, KC_MINUS, KC_LCBR, KC_RCBR, KC_NO, KC_MUTE, KC_VOLU, KC_VOLD, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS ), - [_FN2] = LAYOUT( + [_FN2] = LAYOUT_all( KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC, KC_NO, KC_TRNS, KC_TRNS, 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_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, KC_CAPS, TG(LIGHT), KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS ), - [LIGHT] = LAYOUT( + [LIGHT] = LAYOUT_all( RESET, KC_NO, BL_ON, BL_INC, BL_BRTG, RGB_M_P, RGB_M_B, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, KC_NO, BL_TOGG, BL_STEP, KC_NO, RGB_M_SN, RGB_M_K, RGB_TOG, RGB_HUD, RGB_SAD, RGB_VAD, KC_NO, KC_NO, KC_NO, BL_OFF, BL_DEC, KC_NO, KC_NO, KC_NO, RGB_RMOD, RGB_M_SW, RGB_M_R, RGB_M_G, KC_NO, @@ -85,4 +85,4 @@ uint32_t layer_state_set_kb(uint32_t state) { PORTD |= (1 << PD6); } return state; -} \ No newline at end of file +} diff --git a/keyboards/pearl/keymaps/rask/keymap.c b/keyboards/pearl/keymaps/rask/keymap.c index ae633f45d8a..bafb2b97387 100644 --- a/keyboards/pearl/keymaps/rask/keymap.c +++ b/keyboards/pearl/keymaps/rask/keymap.c @@ -4,35 +4,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // BASE LAYER - [0] = LAYOUT( + [0] = LAYOUT_all( 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, MO(2), 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(3), KC_LCTL, KC_LALT, KC_BSPC, MO(1), MO(1), KC_SPC, KC_RALT, KC_LGUI ), // BASE LAYER TWO (Fn1) - [1] = LAYOUT( + [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_QUOT, KC_BSLS, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_RSFT, ____, ____, ____, ____, ____, ____, ____, ____ ), // FROW LAYER AND ARROWS (Fn2) - [2] = LAYOUT( + [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_UP, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_LEFT, KC_DOWN,KC_RGHT, MO(4), ____, ____, ____, ____, ____, ____, ____, ____ ), // MEDIA AND RGB (Fn3) - [3] = LAYOUT( + [3] = LAYOUT_all( ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_MPRV,KC_MPLY, KC_MNXT, KC_DEL, ____, ____, ____, RGB_HUI, RGB_SAI,RGB_VAI,____, ____, ____, ____, ____, ____, ____, RGB_MOD, RGB_TOG, RGB_HUD, RGB_SAD,RGB_VAD,____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____ ), // UTIL (Fn1+Fn3) - [4] = LAYOUT( + [4] = LAYOUT_all( ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_PSCR, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_PGUP,____, ____, ____, ____, ____, ____, ____, ____, ____, ____, KC_HOME, KC_PGDN,KC_END, ____, diff --git a/keyboards/pearl/pearl.h b/keyboards/pearl/pearl.h index 4c3f0cb6fe1..900d4817a2f 100644 --- a/keyboards/pearl/pearl.h +++ b/keyboards/pearl/pearl.h @@ -21,7 +21,7 @@ along with this program. If not, see . #include "quantum.h" #include "pearl.h" -#define LAYOUT( \ +#define LAYOUT_all( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C,\ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,\ @@ -33,4 +33,29 @@ along with this program. If not, see . { K30, K31, K32, KC_NO, K34, K35, KC_NO, K37, KC_NO, K39, K3A, KC_NO, KC_NO}, \ } +#define LAYOUT_splits( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C,\ + 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, K34, K37, K39, K3A\ +){ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C}, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, KC_NO}, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO}, \ + { K30, K31, K32, KC_NO, K34, KC_NO, KC_NO, K37, KC_NO, K39, K3A, KC_NO, KC_NO}, \ +} + +#define LAYOUT_spacebar( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C,\ + 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, K35, K39, K3A\ +){ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C}, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, KC_NO}, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO}, \ + { K30, K31, KC_NO, KC_NO, K34, K35, KC_NO, KC_NO, KC_NO, K39, K3A, KC_NO, KC_NO}, \ +} + + #endif From 6b45e8aec19de8224e3a8cf8afd084f87c471076 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Thu, 26 Apr 2018 20:28:22 -0700 Subject: [PATCH 062/152] QMK Configurator Support MF68 (#2815) * Add QMK Configurator support for MF68 * Add QMK Configurator support for MF68 BLE * change to QMK_KEYBOARD_H in keymaps --- keyboards/mf68/info.json | 12 ++++++++++++ keyboards/mf68/keymaps/default/keymap.c | 8 ++++---- keyboards/mf68/keymaps/factory/keymap.c | 10 +++++----- keyboards/mf68/mf68.h | 6 +++--- keyboards/mf68_ble/info.json | 12 ++++++++++++ keyboards/mf68_ble/keymaps/default/keymap.c | 2 +- 6 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 keyboards/mf68/info.json create mode 100644 keyboards/mf68_ble/info.json diff --git a/keyboards/mf68/info.json b/keyboards/mf68/info.json new file mode 100644 index 00000000000..d41c2176a9b --- /dev/null +++ b/keyboards/mf68/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "MF68", + "url": "", + "maintainer": "qmk", + "width": 17.25, + "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}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.25, "y":0}, {"x":16.25, "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}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"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.25}, {"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":2.75}, {"x":15.25, "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}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}] + } + } +} diff --git a/keyboards/mf68/keymaps/default/keymap.c b/keyboards/mf68/keymaps/default/keymap.c index fd8810d5281..73045f3107a 100644 --- a/keyboards/mf68/keymaps/default/keymap.c +++ b/keyboards/mf68/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "mf68.h" +#include QMK_KEYBOARD_H #define _QWERTY 0 #define _FN1 1 @@ -9,7 +9,7 @@ #define KC_X2 BL_STEP const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = KC_KEYMAP( + [_QWERTY] = LAYOUT_kc( /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */ ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL , BSPC , INS ,PGUP, /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------| |----`----| */ @@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*`-----+-----+-----+------------------------------+------+-----+-----' `----+----+----' */ ), - [_FN1] = KC_KEYMAP( + [_FN1] = LAYOUT_kc( /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */ GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME, /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */ @@ -37,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */ ), - [_FN2] = KC_KEYMAP( + [_FN2] = LAYOUT_kc( /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */ GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME, /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */ diff --git a/keyboards/mf68/keymaps/factory/keymap.c b/keyboards/mf68/keymaps/factory/keymap.c index ffd857a89fc..0c5305e5191 100644 --- a/keyboards/mf68/keymaps/factory/keymap.c +++ b/keyboards/mf68/keymaps/factory/keymap.c @@ -1,4 +1,4 @@ -#include "mf68.h" +#include QMK_KEYBOARD_H #define _QWERTY 0 #define _FN1 1 @@ -15,7 +15,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = KC_KEYMAP( + [_QWERTY] = LAYOUT_kc( /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */ ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL , BSPC , INS ,PGUP, /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------| |----`----| */ @@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*`-----+-----+-----+------------------------------+------+-----+-----' `----+----+----' */ ), - [_FN1] = KC_KEYMAP( + [_FN1] = LAYOUT_kc( /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */ GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , ,HOME, /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */ @@ -39,11 +39,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */ , ,MPLY,MSTP,MPRV,MNXT,VOLD,VOLU,MUTE, ,END , , X5 , /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */ - , , , , , , , X3 , X6 , X4 + , , , , , , , X3 , X6 , X4 /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */ ), - [_FN2] = KC_KEYMAP( + [_FN2] = LAYOUT_kc( /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */ GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME, /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */ diff --git a/keyboards/mf68/mf68.h b/keyboards/mf68/mf68.h index 316e3b87fcf..a7aefc64792 100644 --- a/keyboards/mf68/mf68.h +++ b/keyboards/mf68/mf68.h @@ -3,7 +3,7 @@ #include "quantum.h" -#define KEYMAP( \ +#define LAYOUT( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, K12, K13, K14, K15, K16, \ K17, K18, K20, K21, K22, K23, K24, K25, K26, K27, K28, K30, K31, K32, K33, K34, \ K35, K36, K37, K38, K40, K41, K42, K43, K44, K45, K46, K47, K48, \ @@ -20,13 +20,13 @@ { K70, K71, K72, K73, K74 } \ } -#define KC_KEYMAP( \ +#define LAYOUT_kc( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, K12, K13, K14, K15, K16, \ K17, K18, K20, K21, K22, K23, K24, K25, K26, K27, K28, K30, K31, K32, K33, K34, \ K35, K36, K37, K38, K40, K41, K42, K43, K44, K45, K46, K47, K48, \ K50, K51, K52, K53, K54, K55, K56, K57, K58, K60, K61, K62, K63, \ K64, K65, K66, K67, K68, K70, K71, K72, K73, K74 \ -) KEYMAP( \ +) LAYOUT( \ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, \ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, \ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, \ diff --git a/keyboards/mf68_ble/info.json b/keyboards/mf68_ble/info.json new file mode 100644 index 00000000000..1f8aaed9246 --- /dev/null +++ b/keyboards/mf68_ble/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "MF68 BLE", + "url": "", + "maintainer": "qmk", + "width": 17.25, + "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}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.25, "y":0}, {"x":16.25, "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}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"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.25}, {"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":2.75}, {"x":15.25, "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}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}] + } + } +} diff --git a/keyboards/mf68_ble/keymaps/default/keymap.c b/keyboards/mf68_ble/keymaps/default/keymap.c index 9c7cecc2da1..73045f3107a 100644 --- a/keyboards/mf68_ble/keymaps/default/keymap.c +++ b/keyboards/mf68_ble/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "mf68_ble.h" +#include QMK_KEYBOARD_H #define _QWERTY 0 #define _FN1 1 From 510510e9db23a1bdfdc97920c0e442a5ec516349 Mon Sep 17 00:00:00 2001 From: Nick Choi Date: Thu, 26 Apr 2018 23:28:54 -0400 Subject: [PATCH 063/152] avocado toast change (#2816) --- keyboards/frosty_flake/keymaps/nikchi/keymap.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c index fbabb482a5c..f9cff0b84a0 100644 --- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c +++ b/keyboards/frosty_flake/keymaps/nikchi/keymap.c @@ -27,7 +27,8 @@ enum taps{ EMOJIS, ANIMAL, HAND, - MEMES + MEMES, + COPA }; enum unicode_name { // split every five emojis @@ -50,8 +51,8 @@ enum unicode_name { // split every five emojis THDN, // 👎 BBB, // dat B 🅱 - POO, // poop 💩 - HUNDR, // 100 💯 + AVO, // avocado 🥑 + BRED, // unicode consortium pls make toast 🍞 EGGPL, // EGGPLANT 🍆 WATER, // wet 💦 @@ -71,6 +72,7 @@ enum my_macros { qk_tap_dance_action_t tap_dance_actions[] = { // Tap once for CTRL, twice for Caps Lock [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS), + [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), @@ -110,8 +112,8 @@ const uint32_t PROGMEM unicode_map[] = { [THINK] = 0x1F914, [GRIN] = 0x1F600, [BBB] = 0x1F171, - [POO] = 0x1F4A9, - [HUNDR] = 0x1F4AF, + [AVO] = 0x1F951, + [BRED] = 0x1F35E, [SMRK] = 0x1F60F, [WEARY] = 0x1F629, [EGGPL] = 0x1F346, @@ -143,7 +145,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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, X(HUNDR), X(BBB), X(POO), KC_M,KC_COMM, KC_DOT,KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \ + 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, \ 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, \ From 642bf00bafefdda243e98c1f04202fcfc5aba88e Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Thu, 26 Apr 2018 20:31:05 -0700 Subject: [PATCH 064/152] FC660C Configurator Support (#2817) * Change KEYMAP to LAYOUT * Add info.json for configurator support --- keyboards/fc660c/fc660c.h | 2 +- keyboards/fc660c/info.json | 12 ++++++++++++ keyboards/fc660c/keymaps/default/keymap.c | 6 +++--- 3 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 keyboards/fc660c/info.json diff --git a/keyboards/fc660c/fc660c.h b/keyboards/fc660c/fc660c.h index 6139dee015d..63c4029c0dd 100644 --- a/keyboards/fc660c/fc660c.h +++ b/keyboards/fc660c/fc660c.h @@ -20,7 +20,7 @@ along with this program. If not, see . #include "quantum.h" -#define KEYMAP( \ +#define LAYOUT( \ K13, K10, K11, K12, K14, K16, K17, K15, K1B, K18, K19, K1A, K1C, K1E, K1F, \ K03, K00, K01, K02, K04, K06, K07, K05, K0B, K08, K09, K0A, K0C, K0E, K0F, \ K43, K40, K41, K42, K44, K46, K47, K45, K4B, K48, K49, K4A, K4E, \ diff --git a/keyboards/fc660c/info.json b/keyboards/fc660c/info.json new file mode 100644 index 00000000000..9ed48aad153 --- /dev/null +++ b/keyboards/fc660c/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "fc660c", + "url": "", + "maintainer": "qmk", + "width": 16.5, + "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}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.5, "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}, {"x":15.5, "y":1}, {"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.25}, {"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":2.25}, {"x":14.5, "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}, {"label":"Alt", "x":9.75, "y":4, "w":1.25}, {"label":"Win", "x":11, "y":4, "w":1.25}, {"label":"Menu", "x":12.25, "y":4, "w":1.25}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}] + } + } +} \ No newline at end of file diff --git a/keyboards/fc660c/keymaps/default/keymap.c b/keyboards/fc660c/keymaps/default/keymap.c index 02f57532ba8..eae07c08b17 100644 --- a/keyboards/fc660c/keymaps/default/keymap.c +++ b/keyboards/fc660c/keymaps/default/keymap.c @@ -14,17 +14,17 @@ 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 "fc660c.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = KEYMAP( + [0] = 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_BSPC, KC_INS, 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_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_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL,MO(1), KC_LEFT,KC_DOWN,KC_RGHT ), - [1] = KEYMAP( + [1] = 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_PSCR,KC_SLCK,KC_PAUS,_______,_______,_______, _______, _______,_______,_______,_______,_______,_______,_______,_______,KC_HOME,KC_PGUP,_______,_______, _______, From 050c21d35f01d4d59d2e1e89eaded2616257f148 Mon Sep 17 00:00:00 2001 From: Erin Call Date: Fri, 27 Apr 2018 11:47:41 -0700 Subject: [PATCH 065/152] Bring dactyl/matrix.c in line with quantum/matrix.c (#2613) * Use the new debounce algorithm in dactyl/matrix.c [#2065] This incorporates the fixed/optimized debounce code added to quantum/matrix.c in: * 508eddf8ba8548d3f71e1c09a404839beb49f45c * 4c6960835c0a6e29670dabdc27117d7d3c7f99f5 * 32f88c07173b795c6981c779057dceba00aeb1cb * f4030289744fc6dc82dd85c955070c0845813cc5 * a06115df19a74d39b08758472b221e630c3680d3 * Fix the row/column swap in dactyl [#2065] With a column-driven keyboard, reading from the mcp23081 returns a column-state, which takes some extra work to translate into the row-state used in the actual matrix. The ergodox_ez code sidestepped that problem by calling rows "columns" and columns "rows." With this change, the dactyl now calls rows "rows" and columns "columns." * Cleanup: variable names, documentation [#2065] * Support MATRIX_MASKED in dactyl/matrix.c [#2065] * Only unselect one col in unselect_col [#2065] Bonus: saves one i2c transaction per matrix_scan! * Implement COL2ROW in dactyl/matrix.c [#2065] * Fix a typo in dactyl/matrix.c This entirely doesn't matter. The PORT values are set during init_keyboard and never change. They're repeatedly set to the same thing. These PORT lines shouldn't even exist, but since they do, they should at least look right. * Implement COL_PINS/ROW_PINS for dactyl [#2065] * Rename "mcp23018" to "expander" [#2065] I honestly don't know whether/how well this code works with other I/O expanders, but at least in theory, it should be generic enough to work with others. Given that, the variable names shouldn't refer to a specific model of expander. * Remove matrix_power_up from dactyl/matrix.c [#2065] It's commented out in quantum/matrix.c, and the dactyl has no power up/down behavior beyond being unplugged (which goes to matrix_init), so there's no sense keeping it around. * Only initialize expander_input_mask once [#2065] ...and rename input_mask to expander_input_mask, since now that it isn't scoped to init_expander it isn't clear that it's only for the expander. --- keyboards/handwired/dactyl/config.h | 15 +- keyboards/handwired/dactyl/dactyl.c | 77 +--- keyboards/handwired/dactyl/dactyl.h | 75 ++-- keyboards/handwired/dactyl/matrix.c | 555 ++++++++++++++++++---------- 4 files changed, 401 insertions(+), 321 deletions(-) diff --git a/keyboards/handwired/dactyl/config.h b/keyboards/handwired/dactyl/config.h index 8129b0a6703..a990cc72080 100644 --- a/keyboards/handwired/dactyl/config.h +++ b/keyboards/handwired/dactyl/config.h @@ -30,12 +30,15 @@ along with this program. If not, see . #define PRODUCT Dactyl #define DESCRIPTION An ortholinear, split, 3D-curved keyboard with thumb clusters. -/* key matrix size - * At this time, "row" in the dactyl's code actually means "column" on the - * physical keyboard. It's confusing. I'm sorry. Blame Jack Humbert :P - */ -#define MATRIX_ROWS 12 -#define MATRIX_COLS 6 +#define DIODE_DIRECTION ROW2COL +#define MATRIX_ROWS 6 +#define MATRIX_COLS 12 +#define COL_EXPANDED { true, true, true, true, true, true, false, false, false, false, false, false} +#define MATRIX_ONBOARD_ROW_PINS { F0, F1, F4, F5, F6, F7 } +#define MATRIX_ONBOARD_COL_PINS { 0, 0, 0, 0, 0, 0, B1, B2, B3, D2, D3, C6 } +#define EXPANDER_COL_REGISTER 0 +#define MATRIX_EXPANDER_COL_PINS {0, 1, 2, 3, 4, 5} +#define MATRIX_EXPANDER_ROW_PINS {0, 1, 2, 3, 4, 5} #define MOUSEKEY_INTERVAL 20 #define MOUSEKEY_DELAY 0 diff --git a/keyboards/handwired/dactyl/dactyl.c b/keyboards/handwired/dactyl/dactyl.c index abe3d9d603b..81b9dce0f93 100644 --- a/keyboards/handwired/dactyl/dactyl.c +++ b/keyboards/handwired/dactyl/dactyl.c @@ -1,80 +1,15 @@ #include "dactyl.h" #include "i2cmaster.h" - -bool i2c_initialized = 0; -uint8_t mcp23018_status = 0x20; - -void matrix_init_kb(void) { - DDRB &= ~(1<<4); // set B(4) as input - PORTB &= ~(1<<4); // set B(4) internal pull-up disabled - - // unused pins - C7, D4, D5, D7, E6 - // set as input with internal pull-up enabled - DDRC &= ~(1<<7); - DDRD &= ~(1<<5 | 1<<4); - DDRE &= ~(1<<6); - PORTC |= (1<<7); - PORTD |= (1<<5 | 1<<4); - PORTE |= (1<<6); - - matrix_init_user(); -} - -uint8_t init_mcp23018(void) { - mcp23018_status = 0x20; - - // I2C subsystem - - if (i2c_initialized == 0) { - i2c_init(); // on pins D(1,0) - i2c_initialized = true; - _delay_ms(1000); - } - - // set pin direction - // - unused : input : 1 - // - input : input : 1 - // - driving : output : 0 - mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; - i2c_stop(); - - // set pull-up - // - unused : on : 1 - // - input : on : 1 - // - driving : off : 0 - mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; - -out: - i2c_stop(); - - return mcp23018_status; -} - #ifdef SWAP_HANDS_ENABLE __attribute__ ((weak)) // swap-hands action needs a matrix to define the swap const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { - /* Left hand, matrix positions */ - {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}}, - {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}}, - {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}}, - {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}}, - {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}}, - {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}}, - - /* Right hand, matrix positions */ - {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}}, - {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}}, - {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}}, - {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}}, - {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}}, - {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}}, + {{0,11}, {0,10}, {0,9}, {0,8}, {0,7}, {0,6}, {0,5}, {0,4}, {0,3}, {0,2}, {0,1}, {0,0}}, + {{1,11}, {1,11}, {1,9}, {1,8}, {1,7}, {1,6}, {1,5}, {1,4}, {1,3}, {1,2}, {1,1}, {1,0}}, + {{2,11}, {2,12}, {2,9}, {2,8}, {2,7}, {2,6}, {2,5}, {2,4}, {2,3}, {2,2}, {2,1}, {2,0}}, + {{3,11}, {3,13}, {3,9}, {3,8}, {3,7}, {3,6}, {3,5}, {3,4}, {3,3}, {3,2}, {3,1}, {3,0}}, + {{4,11}, {4,14}, {4,9}, {4,8}, {4,7}, {4,6}, {4,5}, {4,4}, {4,3}, {4,2}, {4,1}, {4,0}}, + {{5,11}, {5,15}, {5,9}, {5,8}, {5,7}, {5,6}, {5,5}, {5,4}, {5,3}, {5,2}, {5,1}, {5,0}}, }; #endif diff --git a/keyboards/handwired/dactyl/dactyl.h b/keyboards/handwired/dactyl/dactyl.h index aa573ebd2ab..3e33930e32a 100644 --- a/keyboards/handwired/dactyl/dactyl.h +++ b/keyboards/handwired/dactyl/dactyl.h @@ -10,7 +10,6 @@ #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) #define CPU_16MHz 0x00 -// I2C aliases and register addresses (see "mcp23018.md") #define I2C_ADDR 0b0100000 #define I2C_ADDR_WRITE ( (I2C_ADDR<<1) | I2C_WRITE ) #define I2C_ADDR_READ ( (I2C_ADDR<<1) | I2C_READ ) @@ -23,52 +22,46 @@ #define OLATA 0x14 // output latch register #define OLATB 0x15 -extern uint8_t mcp23018_status; +extern uint8_t expander_status; +extern uint8_t expander_input_pin_mask; +extern bool i2c_initialized; void init_dactyl(void); -uint8_t init_mcp23018(void); +void init_expander(void); -#define KEYMAP( \ - \ - /* left hand, spatial positions */ \ - k00,k01,k02,k03,k04,k05, \ - k10,k11,k12,k13,k14,k15, \ - k20,k21,k22,k23,k24,k25, \ - k30,k31,k32,k33,k34,k35, \ - k40,k41,k42,k43,k44, \ - k55,k50, \ - k54, \ - k53,k52,k51, \ - \ - /* right hand, spatial positions */ \ - k06,k07,k08,k09,k0A,k0B, \ - k16,k17,k18,k19,k1A,k1B, \ - k26,k27,k28,k29,k2A,k2B, \ - k36,k37,k38,k39,k3A,k3B, \ - k47,k48,k49,k4A,k4B, \ - k5B,k56, \ - k57, \ - k5A,k59,k58 ) \ - \ - /* matrix positions */ \ - { \ - { k00, k10, k20, k30, k40, k50 }, \ - { k01, k11, k21, k31, k41, k51 }, \ - { k02, k12, k22, k32, k42, k52 }, \ - { k03, k13, k23, k33, k43, k53 }, \ - { k04, k14, k24, k34, k44, k54 }, \ - { k05, k15, k25, k35, KC_NO, k55 }, \ - \ - { k06, k16, k26, k36, KC_NO, k56 }, \ - { k07, k17, k27, k37, k47, k57 }, \ - { k08, k18, k28, k38, k48, k58 }, \ - { k09, k19, k29, k39, k49, k59 }, \ - { k0A, k1A, k2A, k3A, k4A, k5A }, \ - { k0B, k1B, k2B, k3B, k4B, k5B } \ +#define KEYMAP( \ + \ + /* left hand, spatial positions */ \ + k00,k01,k02,k03,k04,k05, \ + k10,k11,k12,k13,k14,k15, \ + k20,k21,k22,k23,k24,k25, \ + k30,k31,k32,k33,k34,k35, \ + k40,k41,k42,k43,k44, \ + k55,k50, \ + k54, \ + k53,k52,k51, \ + \ + /* right hand, spatial positions */ \ + k06,k07,k08,k09,k0A,k0B, \ + k16,k17,k18,k19,k1A,k1B, \ + k26,k27,k28,k29,k2A,k2B, \ + k36,k37,k38,k39,k3A,k3B, \ + k47,k48,k49,k4A,k4B, \ + k5B,k56, \ + k57, \ + k5A,k59,k58 ) \ + \ + /* matrix positions */ \ + { \ + { 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, k36, k37, k38, k39, k3A, k3B }, \ + { k40, k41, k42, k43, k44, KC_NO, KC_NO, k47, k48, k49, k4A, k4B }, \ + { k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5A, k5B }, \ } - #define LAYOUT_dactyl KEYMAP #endif diff --git a/keyboards/handwired/dactyl/matrix.c b/keyboards/handwired/dactyl/matrix.c index 0626f93d7f6..52c76fadd49 100644 --- a/keyboards/handwired/dactyl/matrix.c +++ b/keyboards/handwired/dactyl/matrix.c @@ -1,5 +1,4 @@ /* - Copyright 2013 Oleg Kostyuk Copyright 2017 Erin Call @@ -16,10 +15,6 @@ 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 . */ - -/* - * scan matrix - */ #include #include #include @@ -31,47 +26,66 @@ along with this program. If not, see . #include "matrix.h" #include "dactyl.h" #include "i2cmaster.h" -#ifdef DEBUG_MATRIX_SCAN_RATE -#include "timer.h" +#include "timer.h" + + +/* Set 0 if debouncing isn't needed */ + +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 #endif -/* - * This constant define not debouncing time in msecs, but amount of matrix - * scan loops which should be made to get stable debounced results. - * - * On the Dactyl, the matrix scan rate is relatively low, because - * communicating with the left hand's I/O expander is slower than simply - * selecting local pins. - * Now it's only 317 scans/second, or about 3.15 msec/scan. - * According to Cherry specs, debouncing time is 5 msec. - * - * And so, there is no sense to have DEBOUNCE higher than 2. - */ - -#ifndef DEBOUNCE -# define DEBOUNCE 5 +#if (DEBOUNCING_DELAY > 0) + static uint16_t debouncing_time; + static bool debouncing = false; +#endif + +#ifdef MATRIX_MASKED + extern const matrix_row_t matrix_mask[]; +#endif + +#if (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW) +static const uint8_t onboard_row_pins[MATRIX_ROWS] = MATRIX_ONBOARD_ROW_PINS; +static const uint8_t onboard_col_pins[MATRIX_COLS] = MATRIX_ONBOARD_COL_PINS; +static const bool col_expanded[MATRIX_COLS] = COL_EXPANDED; +static const uint8_t expander_row_pins[MATRIX_ROWS] = MATRIX_EXPANDER_ROW_PINS; +static const uint8_t expander_col_pins[MATRIX_COLS] = MATRIX_EXPANDER_COL_PINS; #endif /* matrix state(1:on, 0:off) */ static matrix_row_t matrix[MATRIX_ROWS]; -// Debouncing: store for each key the number of scans until it's eligible to -// change. When scanning the matrix, ignore any changes in keys that have -// already changed in the last DEBOUNCE scans. -static uint8_t debounce_matrix[MATRIX_ROWS * MATRIX_COLS]; - -static matrix_row_t read_cols(uint8_t row); -static void init_cols(void); -static void unselect_rows(void); -static void select_row(uint8_t row); +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +#if (DIODE_DIRECTION == COL2ROW) + static void init_cols(void); + static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row); + static void unselect_rows(void); + static void select_row(uint8_t row); + static void unselect_row(uint8_t row); +#elif (DIODE_DIRECTION == ROW2COL) + static void init_rows(void); + static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col); + static void unselect_cols(void); + static void select_col(uint8_t col); + static void unselect_col(uint8_t col); +#endif -static uint8_t mcp23018_reset_loop; +static uint8_t expander_reset_loop; +uint8_t expander_status; +uint8_t expander_input_pin_mask; +bool i2c_initialized = false; #ifdef DEBUG_MATRIX_SCAN_RATE uint32_t matrix_timer; uint32_t matrix_scan_count; #endif +#define ROW_SHIFTER ((matrix_row_t)1) +#if (DIODE_DIRECTION == COL2ROW) +// bitmask to ensure the row state from the expander only applies to its columns +#define EXPANDER_MASK ((matrix_row_t)0b00111111) +#endif __attribute__ ((weak)) void matrix_init_user(void) {} @@ -103,20 +117,20 @@ uint8_t matrix_cols(void) void matrix_init(void) { - // initialize row and col - - mcp23018_status = init_mcp23018(); - + init_expander(); +#if (DIODE_DIRECTION == COL2ROW) unselect_rows(); init_cols(); +#elif (DIODE_DIRECTION == ROW2COL) + unselect_cols(); + init_rows(); +#endif // initialize matrix state: all keys off for (uint8_t i=0; i < MATRIX_ROWS; i++) { matrix[i] = 0; - for (uint8_t j=0; j < MATRIX_COLS; ++j) { - debounce_matrix[i * MATRIX_COLS + j] = 0; - } + matrix_debouncing[i] = 0; } #ifdef DEBUG_MATRIX_SCAN_RATE @@ -125,59 +139,100 @@ void matrix_init(void) #endif matrix_init_quantum(); - } -void matrix_power_up(void) { - mcp23018_status = init_mcp23018(); - - unselect_rows(); - init_cols(); +void init_expander(void) { + if (! i2c_initialized) { + i2c_init(); + wait_us(1000000); + } - // initialize matrix state: all keys off - for (uint8_t i=0; i < MATRIX_ROWS; i++) { - matrix[i] = 0; + if (! expander_input_pin_mask) { +#if (DIODE_DIRECTION == COL2ROW) + for (int col = 0; col < MATRIX_COLS; col++) { + if (col_expanded[col]) { + expander_input_pin_mask |= (1 << expander_col_pins[col]); + } + } +#elif (DIODE_DIRECTION == ROW2COL) + for (int row = 0; row < MATRIX_ROWS; row++) { + expander_input_pin_mask |= (1 << expander_row_pins[row]); + } +#endif } -#ifdef DEBUG_MATRIX_SCAN_RATE - matrix_timer = timer_read32(); - matrix_scan_count = 0; + expander_status = i2c_start(I2C_ADDR_WRITE); if (expander_status) goto out; + expander_status = i2c_write(IODIRA); if (expander_status) goto out; + + /* + Pin direction and pull-up depends on both the diode direction + and on whether the column register is 0 ("A") or 1 ("B"): + +-------+---------------+---------------+ + | | ROW2COL | COL2ROW | + +-------+---------------+---------------+ + | Reg 0 | input, output | output, input | + +-------+---------------+---------------+ + | Reg 1 | output, input | input, output | + +-------+---------------+---------------+ + */ + +#if (EXPANDER_COLUMN_REGISTER == 0) +# if (DIODE_DIRECTION == COL2ROW) + expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out; + expander_status = i2c_write(0); if (expander_status) goto out; +# elif (DIODE_DIRECTION == ROW2COL) + expander_status = i2c_write(0); if (expander_status) goto out; + expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out; +# endif +#elif (EXPANDER_COLUMN_REGISTER == 1) +# if (DIODE_DIRECTION == COL2ROW) + expander_status = i2c_write(0); if (expander_status) goto out; + expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out; +# elif (DIODE_DIRECTION == ROW2COL) + expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out; + expander_status = i2c_write(0); if (expander_status) goto out; +# endif #endif -} -// Returns a matrix_row_t whose bits are set if the corresponding key should be -// eligible to change in this scan. -matrix_row_t debounce_mask(uint8_t row) { - matrix_row_t result = 0; - for (uint8_t j=0; j < MATRIX_COLS; ++j) { - if (debounce_matrix[row * MATRIX_COLS + j]) { - --debounce_matrix[row * MATRIX_COLS + j]; - } else { - result |= (1 << j); - } - } - return result; -} + i2c_stop(); + + // set pull-up + // - unused : off : 0 + // - input : on : 1 + // - driving : off : 0 + expander_status = i2c_start(I2C_ADDR_WRITE); if (expander_status) goto out; + expander_status = i2c_write(GPPUA); if (expander_status) goto out; +#if (EXPANDER_COLUMN_REGISTER == 0) +# if (DIODE_DIRECTION == COL2ROW) + expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out; + expander_status = i2c_write(0); if (expander_status) goto out; +# elif (DIODE_DIRECTION == ROW2COL) + expander_status = i2c_write(0); if (expander_status) goto out; + expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out; +# endif +#elif (EXPANDER_COLUMN_REGISTER == 1) +# if (DIODE_DIRECTION == COL2ROW) + expander_status = i2c_write(0); if (expander_status) goto out; + expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out; +# elif (DIODE_DIRECTION == ROW2COL) + expander_status = i2c_write(expander_input_pin_mask); if (expander_status) goto out; + expander_status = i2c_write(0); if (expander_status) goto out; +# endif +#endif -// Report changed keys in the given row. Resets the debounce countdowns -// corresponding to each set bit in 'change' to DEBOUNCE. -void debounce_report(matrix_row_t change, uint8_t row) { - for (uint8_t i = 0; i < MATRIX_COLS; ++i) { - if (change & (1 << i)) { - debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE; - } - } +out: + i2c_stop(); } uint8_t matrix_scan(void) { - if (mcp23018_status) { // if there was an error - if (++mcp23018_reset_loop == 0) { - // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans + if (expander_status) { // if there was an error + if (++expander_reset_loop == 0) { + // since expander_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans // this will be approx bit more frequent than once per second - print("trying to reset mcp23018\n"); - mcp23018_status = init_mcp23018(); - if (mcp23018_status) { + print("trying to reset expander\n"); + init_expander(); + if (expander_status) { print("left side not responding\n"); } else { print("left side attached\n"); @@ -199,37 +254,71 @@ uint8_t matrix_scan(void) } #endif - for (uint8_t i = 0; i < MATRIX_ROWS; i++) { - select_row(i); - wait_us(30); // without this wait read unstable value. - matrix_row_t mask = debounce_mask(i); - matrix_row_t cols = (read_cols(i) & mask) | (matrix[i] & ~mask); - debounce_report(cols ^ matrix[i], i); - matrix[i] = cols; - - unselect_rows(); +#if (DIODE_DIRECTION == COL2ROW) + for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { +# if (DEBOUNCING_DELAY > 0) + bool matrix_changed = read_cols_on_row(matrix_debouncing, current_row); + + if (matrix_changed) { + debouncing = true; + debouncing_time = timer_read(); + } +# else + read_cols_on_row(matrix, current_row); +# endif } - matrix_scan_quantum(); +#elif (DIODE_DIRECTION == ROW2COL) + for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { +# if (DEBOUNCING_DELAY > 0) + bool matrix_changed = read_rows_on_col(matrix_debouncing, current_col); + + if (matrix_changed) { + debouncing = true; + debouncing_time = timer_read(); + } +# else + read_rows_on_col(matrix, current_col); +# endif + + } +#endif +# if (DEBOUNCING_DELAY > 0) + if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { + for (uint8_t i = 0; i < MATRIX_ROWS; i++) { + matrix[i] = matrix_debouncing[i]; + } + debouncing = false; + } +# endif + + matrix_scan_quantum(); return 1; } bool matrix_is_modified(void) // deprecated and evidently not called. { +#if (DEBOUNCING_DELAY > 0) + if (debouncing) return false; +#endif return true; } inline bool matrix_is_on(uint8_t row, uint8_t col) { - return (matrix[row] & ((matrix_row_t)1<> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } + } } -static matrix_row_t read_cols(uint8_t row) -{ - if (row < 6) { - if (mcp23018_status) { // if there was an error - return 0; - } else { - uint8_t data = 0; - mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(GPIOB); if (mcp23018_status) goto out; - mcp23018_status = i2c_start(I2C_ADDR_READ); if (mcp23018_status) goto out; - data = i2c_readNak(); - data = ~data; +static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) { + // Store last value of row prior to reading + matrix_row_t last_row_value = current_matrix[current_row]; + + // Clear data in matrix row + current_matrix[current_row] = 0; + + // Select row and wait for row selection to stabilize + select_row(current_row); + wait_us(30); + + // Read columns from expander, unless it's in an error state + if (! expander_status) { + expander_status = i2c_start(I2C_ADDR_WRITE); if (expander_status) goto out; + expander_status = i2c_write(GPIOA); if (expander_status) goto out; + expander_status = i2c_start(I2C_ADDR_READ); if (expander_status) goto out; + + current_matrix[current_row] |= (~i2c_readNak()) & EXPANDER_MASK; + out: i2c_stop(); - return data; + } + + // Read columns from onboard pins + for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { + if (! col_expanded[col_index]) { + uint8_t pin = onboard_col_pins[col_index]; + uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)); + current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index); } - } else { - // read from teensy - return - (PINF&(1<<0) ? 0 : (1<<0)) | - (PINF&(1<<1) ? 0 : (1<<1)) | - (PINF&(1<<4) ? 0 : (1<<2)) | - (PINF&(1<<5) ? 0 : (1<<3)) | - (PINF&(1<<6) ? 0 : (1<<4)) | - (PINF&(1<<7) ? 0 : (1<<5)) ; } + + unselect_row(current_row); + + return (last_row_value != current_matrix[current_row]); } -/* Row pin configuration - * - * Teensy - * row: 6 7 8 9 10 11 - * pin: B1 B2 B3 D2 D3 C6 - * - * MCP23018 - * row: 0 1 2 3 4 5 - * pin: A0 A1 A2 A3 A4 A5 - */ -static void unselect_rows(void) -{ - // unselect on mcp23018 - if (mcp23018_status) { // if there was an error - // do nothing - } else { - // set all rows hi-Z : 1 - mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(GPIOA); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0xFF); if (mcp23018_status) goto out; +static void select_row(uint8_t row) { + // select on expander, unless it's in an error state + if (! expander_status) { + // set active row low : 0 + // set other rows hi-Z : 1 + expander_status = i2c_start(I2C_ADDR_WRITE); if (expander_status) goto out; + expander_status = i2c_write(GPIOB); if (expander_status) goto out; + expander_status = i2c_write(0xFF & ~(1<> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static void unselect_row(uint8_t row) +{ + // No need to explicitly unselect expander pins--their I/O state is + // set simultaneously, with a single bitmask sent to i2c_write. When + // select_row selects a single pin, it implicitly unselects all the + // other ones. + // unselect on teensy - // Hi-Z(DDR:0, PORT:0) to unselect - DDRB &= ~(1<<1 | 1<<2 | 1<<3); - PORTB &= ~(1<<1 | 1<<2 | 1<<3); - DDRD &= ~(1<<2 | 1<<3); - PORTD &= ~(1<<2 | 1<<3); - DDRC &= ~(1<<6); - PORTC &= ~(1<<6); + uint8_t pin = onboard_row_pins[row]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // LOW +} + +static void unselect_rows(void) { + for (uint8_t x = 0; x < MATRIX_ROWS; x++) { + unselect_row(x); + } } -/* Row pin configuration - * - * Teensy - * row: 6 7 8 9 10 11 - * pin: B1 B2 B3 D2 D3 C6 - * - * MCP23018 - * row: 0 1 2 3 4 5 - * pin: A0 A1 A2 A3 A4 A5 - */ -static void select_row(uint8_t row) +#elif (DIODE_DIRECTION == ROW2COL) + +static void init_rows(void) { - if (row < 6) { - // select on mcp23018 - if (mcp23018_status) { // if there was an error + for (uint8_t x = 0; x < MATRIX_ROWS; x++) { + uint8_t pin = onboard_row_pins[x]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } +} + +static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) +{ + bool matrix_changed = false; + + uint8_t column_state = 0; + + //select col and wait for selection to stabilize + select_col(current_col); + wait_us(30); + + if (current_col < 6) { + // read rows from expander + if (expander_status) { + // it's already in an error state; nothing we can do + return false; + } + + expander_status = i2c_start(I2C_ADDR_WRITE); if (expander_status) goto out; + expander_status = i2c_write(GPIOB); if (expander_status) goto out; + expander_status = i2c_start(I2C_ADDR_READ); if (expander_status) goto out; + column_state = i2c_readNak(); + + out: + i2c_stop(); + + column_state = ~column_state; + } else { + for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { + if ((_SFR_IO8(onboard_row_pins[current_row] >> 4) & _BV(onboard_row_pins[current_row] & 0xF)) == 0) { + column_state |= (1 << current_row); + } + } + } + + for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { + // Store last value of row prior to reading + matrix_row_t last_row_value = current_matrix[current_row]; + + if (column_state & (1 << current_row)) { + // key closed; set state bit in matrix + current_matrix[current_row] |= (ROW_SHIFTER << current_col); + } else { + // key open; clear state bit in matrix + current_matrix[current_row] &= ~(ROW_SHIFTER << current_col); + } + + // Determine whether the matrix changed state + if ((last_row_value != current_matrix[current_row]) && !(matrix_changed)) + { + matrix_changed = true; + } + } + + unselect_col(current_col); + + return matrix_changed; +} + +static void select_col(uint8_t col) +{ + if (col_expanded[col]) { + // select on expander + if (expander_status) { // if there was an error // do nothing } else { - // set active row low : 0 - // set other rows hi-Z : 1 - mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(GPIOA); if (mcp23018_status) goto out; - mcp23018_status = i2c_write(0xFF & ~(1<> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW + } +} + +static void unselect_col(uint8_t col) +{ + if (col_expanded[col]) { + // No need to explicitly unselect expander pins--their I/O state is + // set simultaneously, with a single bitmask sent to i2c_write. When + // select_col selects a single pin, it implicitly unselects all the + // other ones. + } else { + // unselect on teensy + uint8_t pin = onboard_col_pins[col]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI } } +static void unselect_cols(void) +{ + for(uint8_t x = 0; x < MATRIX_COLS; x++) { + unselect_col(x); + } +} +#endif From 33671e5cd17db5387d17009a50c3fe86d76e5671 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Fri, 27 Apr 2018 15:13:03 -0700 Subject: [PATCH 066/152] New Numpad Support: naKey from ckeys.org (#2828) * Add naKey on behalf of ckeys * Update James's code to more modern QMK standards * Add info.json for QMK Configurator support * Fix that build breakage * Rename naKey.c to nakey.c * Rename naKey.h to nakey.h --- keyboards/nakey/config.h | 190 ++++++++++++++++++++++ keyboards/nakey/info.json | 12 ++ keyboards/nakey/keymaps/default/keymap.c | 62 +++++++ keyboards/nakey/keymaps/default/readme.md | 1 + keyboards/nakey/nakey.c | 42 +++++ keyboards/nakey/nakey.h | 40 +++++ keyboards/nakey/readme.md | 47 ++++++ keyboards/nakey/rules.mk | 68 ++++++++ 8 files changed, 462 insertions(+) create mode 100644 keyboards/nakey/config.h create mode 100644 keyboards/nakey/info.json create mode 100644 keyboards/nakey/keymaps/default/keymap.c create mode 100644 keyboards/nakey/keymaps/default/readme.md create mode 100644 keyboards/nakey/nakey.c create mode 100644 keyboards/nakey/nakey.h create mode 100644 keyboards/nakey/readme.md create mode 100644 keyboards/nakey/rules.mk diff --git a/keyboards/nakey/config.h b/keyboards/nakey/config.h new file mode 100644 index 00000000000..38fed297efb --- /dev/null +++ b/keyboards/nakey/config.h @@ -0,0 +1,190 @@ +/* +Copyright 2018 James Underwood + +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 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER cKeys +#define PRODUCT naKey +#define DESCRIPTION The cKeys through hole ten key pad + +/* key matrix size */ +#define MATRIX_ROWS 5 +#define MATRIX_COLS 4 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { F1, F4, F5, F6, F7 } +#define MATRIX_COL_PINS { B0, B1, B2, B3 } +#define UNUSED_PINS { D0, D1, D2, D3, D4, D5, D6, D7, C6, C7, B4, B5, B6, B7 } + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +// #define BACKLIGHT_PIN B7 +// #define BACKLIGHT_BREATHING +// #define BACKLIGHT_LEVELS 3 + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * 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 + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +#endif diff --git a/keyboards/nakey/info.json b/keyboards/nakey/info.json new file mode 100644 index 00000000000..b44d0daf741 --- /dev/null +++ b/keyboards/nakey/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "naKey", + "url": "", + "maintainer": "qmk", + "width": 4, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [{"label":"Num Lock", "x":0, "y":0}, {"label":"/", "x":1, "y":0}, {"label":"*", "x":2, "y":0}, {"label":"-", "x":3, "y":0}, {"label":"7", "x":0, "y":1}, {"label":"8", "x":1, "y":1}, {"label":"9", "x":2, "y":1}, {"label":"+", "x":3, "y":1, "h":2}, {"label":"4", "x":0, "y":2}, {"label":"5", "x":1, "y":2}, {"label":"6", "x":2, "y":2}, {"label":"1", "x":0, "y":3}, {"label":"2", "x":1, "y":3}, {"label":"3", "x":2, "y":3}, {"label":"Enter", "x":3, "y":3, "h":2}, {"label":"0", "x":0, "y":4, "w":2}, {"label":".", "x":2, "y":4}] + } + } +} diff --git a/keyboards/nakey/keymaps/default/keymap.c b/keyboards/nakey/keymaps/default/keymap.c new file mode 100644 index 00000000000..ebbb128bd27 --- /dev/null +++ b/keyboards/nakey/keymaps/default/keymap.c @@ -0,0 +1,62 @@ +/* Copyright 2018 James Underwood + * + * 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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = LAYOUT( /* Base */ + KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \ + KC_P7, KC_P8, KC_P9, KC_PPLS, \ + KC_P4, KC_P5, KC_P6, \ + KC_P1, KC_P2, KC_P3, KC_PENT, \ + KC_P0, KC_PDOT \ +), +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +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; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/nakey/keymaps/default/readme.md b/keyboards/nakey/keymaps/default/readme.md new file mode 100644 index 00000000000..c842dc99a76 --- /dev/null +++ b/keyboards/nakey/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for naKey diff --git a/keyboards/nakey/nakey.c b/keyboards/nakey/nakey.c new file mode 100644 index 00000000000..ba2fb90ebe4 --- /dev/null +++ b/keyboards/nakey/nakey.c @@ -0,0 +1,42 @@ +/* Copyright 2018 James Underwood + * 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 "nakey.h" + +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); +} + +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); +} diff --git a/keyboards/nakey/nakey.h b/keyboards/nakey/nakey.h new file mode 100644 index 00000000000..3cbfda844de --- /dev/null +++ b/keyboards/nakey/nakey.h @@ -0,0 +1,40 @@ +/* Copyright 2018 James Underwood + * + * 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 NAKEY_H +#define NAKEY_H + +#include "quantum.h" + +// This a shortcut to help you visually see your layout. +// The following is an example using the Planck MIT layout +// The first section contains all of the arguments +// The second converts the arguments into a two-dimensional array +#define LAYOUT( \ + k00, k01, k02, k03, \ + k10, k11, k12, k13, \ + k20, k21, k22, \ + k30, k31, k32, k33, \ + k40, k41 \ +) \ +{ \ + { k00, k01, k02, k03 }, \ + { k10, k11, k12, k13 }, \ + { k20, k21, k22, KC_NO }, \ + { k30, k31, k32, k33 }, \ + { k40, KC_NO, k41, KC_NO }, \ +} + +#endif diff --git a/keyboards/nakey/readme.md b/keyboards/nakey/readme.md new file mode 100644 index 00000000000..62688c1aeb9 --- /dev/null +++ b/keyboards/nakey/readme.md @@ -0,0 +1,47 @@ +# naKey + +Firmware for custom keyboard + +Keyboard Maintainer: [James Underwood](https://github.com/ju0) +Hardware Supported: naKey +Hardware Availability: [ckeys.org](https://ckeys.org) + +Make example for this keyboard (after setting up your build environment): + + make nakey: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. + +## Quantum MK Firmware + +For the full Quantum feature list, see [the parent readme](/). + +## Building + +Download or clone the whole firmware and navigate to the root folder. Once your dev env is setup, you'll be able to type `make naKey-default` to generate your .hex - you can then use the Teensy Loader to program your .hex file. + +(Note: replace naKey with the name of your keyboard.) + +Depending on which keymap you would like to use, you will have to compile slightly differently. + +### Default + +To build with the default keymap, simply run `make naKey-default`. + +### Other Keymaps + +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder. Create a `readme.md` and a `keymap.c` file to complete your new keymap. When you are done your file tree should look like this: + +* `qmk_firmware/` + * `keyboard/` + * `keymaps/` + * `config.h` (optional) + * `keymap.c` + * `readme.md` + * `rules.mk` (optional) + +To build the firmware binary hex file with a keymap just do `make` with a keymap like this: + +``` +$ make naKey-[default|jack|] +``` diff --git a/keyboards/nakey/rules.mk b/keyboards/nakey/rules.mk new file mode 100644 index 00000000000..a3571e8deb0 --- /dev/null +++ b/keyboards/nakey/rules.mk @@ -0,0 +1,68 @@ +# MCU name +#MCU = at90usb1286 +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 +OPT_DEFS += -DBOOTLOADER_SIZE=512 + + +# Build Options +# change yes to no to disable +# +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 ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE ?= no # USB Nkey Rollover +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 +FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches From 17223166ce11cc3f5492735679dda2846c27ded6 Mon Sep 17 00:00:00 2001 From: Yan-Fa Li Date: Fri, 27 Apr 2018 15:14:58 -0700 Subject: [PATCH 067/152] Add missing 7U and 4U layouts to 2x1800 (#2829) This prevents the layouts from loading in configurator --- keyboards/clueboard/2x1800/info.json | 1932 +++++++++++++++++++++++++- 1 file changed, 1924 insertions(+), 8 deletions(-) diff --git a/keyboards/clueboard/2x1800/info.json b/keyboards/clueboard/2x1800/info.json index 74afec8232e..81ff138d930 100644 --- a/keyboards/clueboard/2x1800/info.json +++ b/keyboards/clueboard/2x1800/info.json @@ -1,12 +1,1928 @@ { - "keyboard_name": "CB 2x1800", - "url": "", - "maintainer": "skullydazed", - "width": 24, - "height": 6.5, - "layouts": { - "LAYOUT": { - "layout": [{"label":"Home", "x":0, "y":0}, {"label":"End", "x":1, "y":0}, {"label":"PgUp", "x":2, "y":0}, {"label":"PgDn", "x":3, "y":0}, {"label":"Esc", "x":4.75, "y":0}, {"label":"F1", "x":6.25, "y":0}, {"label":"F2", "x":7.25, "y":0}, {"label":"F3", "x":8.25, "y":0}, {"label":"F4", "x":9.25, "y":0}, {"label":"F5", "x":10.75, "y":0}, {"label":"F6", "x":11.75, "y":0}, {"label":"F7", "x":12.75, "y":0}, {"label":"F8", "x":13.75, "y":0}, {"label":"F9", "x":15.25, "y":0}, {"label":"F10", "x":16.25, "y":0}, {"label":"F11", "x":17.25, "y":0}, {"label":"F12", "x":18.25, "y":0}, {"label":"PrtSc", "x":20, "y":0}, {"label":"Scroll Lock", "x":21, "y":0}, {"label":"Pause", "x":22, "y":0}, {"label":"Insert", "x":23, "y":0}, {"label":"-", "x":0, "y":1.25}, {"label":"Num Lock", "x":1, "y":1.25}, {"label":"/", "x":2, "y":1.25}, {"label":"*", "x":3, "y":1.25}, {"label":"~", "x":4.5, "y":1.25}, {"label":"!", "x":5.5, "y":1.25}, {"label":"@", "x":6.5, "y":1.25}, {"label":"#", "x":7.5, "y":1.25}, {"label":"$", "x":8.5, "y":1.25}, {"label":"%", "x":9.5, "y":1.25}, {"label":"^", "x":10.5, "y":1.25}, {"label":"&", "x":11.5, "y":1.25}, {"label":"*", "x":12.5, "y":1.25}, {"label":"(", "x":13.5, "y":1.25}, {"label":")", "x":14.5, "y":1.25}, {"label":"_", "x":15.5, "y":1.25}, {"label":"+", "x":16.5, "y":1.25}, {"label":"Backspace", "x":17.5, "y":1.25, "w":2}, {"label":"Num Lock", "x":20, "y":1.25}, {"label":"/", "x":21, "y":1.25}, {"label":"*", "x":22, "y":1.25}, {"label":"-", "x":23, "y":1.25}, {"label":"+", "x":0, "y":2.25, "h":2}, {"label":"7", "x":1, "y":2.25}, {"label":"8", "x":2, "y":2.25}, {"label":"9", "x":3, "y":2.25}, {"label":"Tab", "x":4.5, "y":2.25, "w":1.5}, {"label":"Q", "x":6, "y":2.25}, {"label":"W", "x":7, "y":2.25}, {"label":"E", "x":8, "y":2.25}, {"label":"R", "x":9, "y":2.25}, {"label":"T", "x":10, "y":2.25}, {"label":"Y", "x":11, "y":2.25}, {"label":"U", "x":12, "y":2.25}, {"label":"I", "x":13, "y":2.25}, {"label":"O", "x":14, "y":2.25}, {"label":"P", "x":15, "y":2.25}, {"label":"{", "x":16, "y":2.25}, {"label":"}", "x":17, "y":2.25}, {"label":"|", "x":18, "y":2.25, "w":1.5}, {"label":"7", "x":20, "y":2.25}, {"label":"8", "x":21, "y":2.25}, {"label":"9", "x":22, "y":2.25}, {"label":"+", "x":23, "y":2.25, "h":2}, {"label":"4", "x":1, "y":3.25}, {"label":"5", "x":2, "y":3.25}, {"label":"6", "x":3, "y":3.25}, {"label":"Caps Lock", "x":4.5, "y":3.25, "w":1.75}, {"label":"A", "x":6.25, "y":3.25}, {"label":"S", "x":7.25, "y":3.25}, {"label":"D", "x":8.25, "y":3.25}, {"label":"F", "x":9.25, "y":3.25}, {"label":"G", "x":10.25, "y":3.25}, {"label":"H", "x":11.25, "y":3.25}, {"label":"J", "x":12.25, "y":3.25}, {"label":"K", "x":13.25, "y":3.25}, {"label":"L", "x":14.25, "y":3.25}, {"label":":", "x":15.25, "y":3.25}, {"label":"\"", "x":16.25, "y":3.25}, {"label":"Enter", "x":17.25, "y":3.25, "w":2.25}, {"label":"4", "x":20, "y":3.25}, {"label":"5", "x":21, "y":3.25}, {"label":"6", "x":22, "y":3.25}, {"label":"Enter", "x":0, "y":4.25, "h":2}, {"label":"1", "x":1, "y":4.25}, {"label":"2", "x":2, "y":4.25}, {"label":"3", "x":3, "y":4.25}, {"label":"\u2191", "x":4.25, "y":4.5}, {"label":"Shift", "x":5.5, "y":4.25, "w":1.25}, {"label":"Z", "x":6.75, "y":4.25}, {"label":"X", "x":7.75, "y":4.25}, {"label":"C", "x":8.75, "y":4.25}, {"label":"V", "x":9.75, "y":4.25}, {"label":"B", "x":10.75, "y":4.25}, {"label":"N", "x":11.75, "y":4.25}, {"label":"M", "x":12.75, "y":4.25}, {"label":"<", "x":13.75, "y":4.25}, {"label":">", "x":14.75, "y":4.25}, {"label":"?", "x":15.75, "y":4.25}, {"label":"Shift", "x":16.75, "y":4.25, "w":1.75}, {"label":"\u2191", "x":18.75, "y":4.5}, {"label":"1", "x":20, "y":4.25}, {"label":"2", "x":21, "y":4.25}, {"label":"3", "x":22, "y":4.25}, {"label":"Enter", "x":23, "y":4.25, "h":2}, {"label":"0", "x":1, "y":5.25}, {"label":".", "x":2, "y":5.25}, {"label":"\u2190", "x":3.25, "y":5.5}, {"label":"\u2193", "x":4.25, "y":5.5}, {"label":"\u2192", "x":5.25, "y":5.5}, {"label":"Ctrl", "x":6.5, "y":5.25}, {"label":"Win", "x":7.5, "y":5.25}, {"label":"Alt", "x":8.5, "y":5.25}, {"label":"7u", "x":8.5, "y":5.25, "w":7}, {"label":"1u", "x":9.5, "y":5.25}, {"label":"4u", "x":9.5, "y":5.25, "w":4}, {"label":"1u", "x":10.5, "y":5.25}, {"label":"1u", "x":11.5, "y":5.25}, {"label":"1u", "x":12.5, "y":5.25}, {"label":"Alt", "x":13.5, "y":5.25}, {"label":"Win", "x":14.5, "y":5.25}, {"label":"Menu", "x":15.5, "y":5.25}, {"label":"Ctrl", "x":16.5, "y":5.25}, {"label":"\u2190", "x":17.75, "y":5.5}, {"label":"\u2193", "x":18.75, "y":5.5}, {"label":"\u2192", "x":19.75, "y":5.5}, {"label":"0", "x":21, "y":5.25}, {"label":".", "x":22, "y":5.25}] + "keyboard_name": "CB 2x1800", + "url": "", + "maintainer": "skullydazed", + "width": 24, + "height": 6.5, + "layouts": { + "LAYOUT": { + "layout": [ + { + "label": "Home", + "x": 0, + "y": 0 + }, + { + "label": "End", + "x": 1, + "y": 0 + }, + { + "label": "PgUp", + "x": 2, + "y": 0 + }, + { + "label": "PgDn", + "x": 3, + "y": 0 + }, + { + "label": "Esc", + "x": 4.75, + "y": 0 + }, + { + "label": "F1", + "x": 6.25, + "y": 0 + }, + { + "label": "F2", + "x": 7.25, + "y": 0 + }, + { + "label": "F3", + "x": 8.25, + "y": 0 + }, + { + "label": "F4", + "x": 9.25, + "y": 0 + }, + { + "label": "F5", + "x": 10.75, + "y": 0 + }, + { + "label": "F6", + "x": 11.75, + "y": 0 + }, + { + "label": "F7", + "x": 12.75, + "y": 0 + }, + { + "label": "F8", + "x": 13.75, + "y": 0 + }, + { + "label": "F9", + "x": 15.25, + "y": 0 + }, + { + "label": "F10", + "x": 16.25, + "y": 0 + }, + { + "label": "F11", + "x": 17.25, + "y": 0 + }, + { + "label": "F12", + "x": 18.25, + "y": 0 + }, + { + "label": "PrtSc", + "x": 20, + "y": 0 + }, + { + "label": "Scroll Lock", + "x": 21, + "y": 0 + }, + { + "label": "Pause", + "x": 22, + "y": 0 + }, + { + "label": "Insert", + "x": 23, + "y": 0 + }, + { + "label": "-", + "x": 0, + "y": 1.25 + }, + { + "label": "Num Lock", + "x": 1, + "y": 1.25 + }, + { + "label": "/", + "x": 2, + "y": 1.25 + }, + { + "label": "*", + "x": 3, + "y": 1.25 + }, + { + "label": "~", + "x": 4.5, + "y": 1.25 + }, + { + "label": "!", + "x": 5.5, + "y": 1.25 + }, + { + "label": "@", + "x": 6.5, + "y": 1.25 + }, + { + "label": "#", + "x": 7.5, + "y": 1.25 + }, + { + "label": "$", + "x": 8.5, + "y": 1.25 + }, + { + "label": "%", + "x": 9.5, + "y": 1.25 + }, + { + "label": "^", + "x": 10.5, + "y": 1.25 + }, + { + "label": "&", + "x": 11.5, + "y": 1.25 + }, + { + "label": "*", + "x": 12.5, + "y": 1.25 + }, + { + "label": "(", + "x": 13.5, + "y": 1.25 + }, + { + "label": ")", + "x": 14.5, + "y": 1.25 + }, + { + "label": "_", + "x": 15.5, + "y": 1.25 + }, + { + "label": "+", + "x": 16.5, + "y": 1.25 + }, + { + "label": "Backspace", + "x": 17.5, + "y": 1.25, + "w": 2 + }, + { + "label": "Num Lock", + "x": 20, + "y": 1.25 + }, + { + "label": "/", + "x": 21, + "y": 1.25 + }, + { + "label": "*", + "x": 22, + "y": 1.25 + }, + { + "label": "-", + "x": 23, + "y": 1.25 + }, + { + "label": "+", + "x": 0, + "y": 2.25, + "h": 2 + }, + { + "label": "7", + "x": 1, + "y": 2.25 + }, + { + "label": "8", + "x": 2, + "y": 2.25 + }, + { + "label": "9", + "x": 3, + "y": 2.25 + }, + { + "label": "Tab", + "x": 4.5, + "y": 2.25, + "w": 1.5 + }, + { + "label": "Q", + "x": 6, + "y": 2.25 + }, + { + "label": "W", + "x": 7, + "y": 2.25 + }, + { + "label": "E", + "x": 8, + "y": 2.25 + }, + { + "label": "R", + "x": 9, + "y": 2.25 + }, + { + "label": "T", + "x": 10, + "y": 2.25 + }, + { + "label": "Y", + "x": 11, + "y": 2.25 + }, + { + "label": "U", + "x": 12, + "y": 2.25 + }, + { + "label": "I", + "x": 13, + "y": 2.25 + }, + { + "label": "O", + "x": 14, + "y": 2.25 + }, + { + "label": "P", + "x": 15, + "y": 2.25 + }, + { + "label": "{", + "x": 16, + "y": 2.25 + }, + { + "label": "}", + "x": 17, + "y": 2.25 + }, + { + "label": "|", + "x": 18, + "y": 2.25, + "w": 1.5 + }, + { + "label": "7", + "x": 20, + "y": 2.25 + }, + { + "label": "8", + "x": 21, + "y": 2.25 + }, + { + "label": "9", + "x": 22, + "y": 2.25 + }, + { + "label": "+", + "x": 23, + "y": 2.25, + "h": 2 + }, + { + "label": "4", + "x": 1, + "y": 3.25 + }, + { + "label": "5", + "x": 2, + "y": 3.25 + }, + { + "label": "6", + "x": 3, + "y": 3.25 + }, + { + "label": "Caps Lock", + "x": 4.5, + "y": 3.25, + "w": 1.75 + }, + { + "label": "A", + "x": 6.25, + "y": 3.25 + }, + { + "label": "S", + "x": 7.25, + "y": 3.25 + }, + { + "label": "D", + "x": 8.25, + "y": 3.25 + }, + { + "label": "F", + "x": 9.25, + "y": 3.25 + }, + { + "label": "G", + "x": 10.25, + "y": 3.25 + }, + { + "label": "H", + "x": 11.25, + "y": 3.25 + }, + { + "label": "J", + "x": 12.25, + "y": 3.25 + }, + { + "label": "K", + "x": 13.25, + "y": 3.25 + }, + { + "label": "L", + "x": 14.25, + "y": 3.25 + }, + { + "label": ":", + "x": 15.25, + "y": 3.25 + }, + { + "label": "\"", + "x": 16.25, + "y": 3.25 + }, + { + "label": "Enter", + "x": 17.25, + "y": 3.25, + "w": 2.25 + }, + { + "label": "4", + "x": 20, + "y": 3.25 + }, + { + "label": "5", + "x": 21, + "y": 3.25 + }, + { + "label": "6", + "x": 22, + "y": 3.25 + }, + { + "label": "Enter", + "x": 0, + "y": 4.25, + "h": 2 + }, + { + "label": "1", + "x": 1, + "y": 4.25 + }, + { + "label": "2", + "x": 2, + "y": 4.25 + }, + { + "label": "3", + "x": 3, + "y": 4.25 + }, + { + "label": "\\u2191", + "x": 4.25, + "y": 4.5 + }, + { + "label": "Shift", + "x": 5.5, + "y": 4.25, + "w": 1.25 + }, + { + "label": "Z", + "x": 6.75, + "y": 4.25 + }, + { + "label": "X", + "x": 7.75, + "y": 4.25 + }, + { + "label": "C", + "x": 8.75, + "y": 4.25 + }, + { + "label": "V", + "x": 9.75, + "y": 4.25 + }, + { + "label": "B", + "x": 10.75, + "y": 4.25 + }, + { + "label": "N", + "x": 11.75, + "y": 4.25 + }, + { + "label": "M", + "x": 12.75, + "y": 4.25 + }, + { + "label": "<", + "x": 13.75, + "y": 4.25 + }, + { + "label": ">", + "x": 14.75, + "y": 4.25 + }, + { + "label": "?", + "x": 15.75, + "y": 4.25 + }, + { + "label": "Shift", + "x": 16.75, + "y": 4.25, + "w": 1.75 + }, + { + "label": "\\u2191", + "x": 18.75, + "y": 4.5 + }, + { + "label": "1", + "x": 20, + "y": 4.25 + }, + { + "label": "2", + "x": 21, + "y": 4.25 + }, + { + "label": "3", + "x": 22, + "y": 4.25 + }, + { + "label": "Enter", + "x": 23, + "y": 4.25, + "h": 2 + }, + { + "label": "0", + "x": 1, + "y": 5.25 + }, + { + "label": ".", + "x": 2, + "y": 5.25 + }, + { + "label": "\\u2190", + "x": 3.25, + "y": 5.5 + }, + { + "label": "\\u2193", + "x": 4.25, + "y": 5.5 + }, + { + "label": "\\u2192", + "x": 5.25, + "y": 5.5 + }, + { + "label": "Ctrl", + "x": 6.5, + "y": 5.25 + }, + { + "label": "Win", + "x": 7.5, + "y": 5.25 + }, + { + "label": "Alt", + "x": 8.5, + "y": 5.25 + }, + { + "label": "7u", + "x": 8.5, + "y": 5.25, + "w": 7 + }, + { + "label": "1u", + "x": 9.5, + "y": 5.25 + }, + { + "label": "4u", + "x": 9.5, + "y": 5.25, + "w": 4 + }, + { + "label": "1u", + "x": 10.5, + "y": 5.25 + }, + { + "label": "1u", + "x": 11.5, + "y": 5.25 + }, + { + "label": "1u", + "x": 12.5, + "y": 5.25 + }, + { + "label": "Alt", + "x": 13.5, + "y": 5.25 + }, + { + "label": "Win", + "x": 14.5, + "y": 5.25 + }, + { + "label": "Menu", + "x": 15.5, + "y": 5.25 + }, + { + "label": "Ctrl", + "x": 16.5, + "y": 5.25 + }, + { + "label": "\\u2190", + "x": 17.75, + "y": 5.5 + }, + { + "label": "\\u2193", + "x": 18.75, + "y": 5.5 + }, + { + "label": "\\u2192", + "x": 19.75, + "y": 5.5 + }, + { + "label": "0", + "x": 21, + "y": 5.25 + }, + { + "label": ".", + "x": 22, + "y": 5.25 } + ] + }, + "LAYOUT_7U_SPACE": { + "layout": [ + { + "label": "k00", + "x": 0, + "y": 0 + }, + { + "label": "k01", + "x": 1, + "y": 0 + }, + { + "label": "k02", + "x": 2, + "y": 0 + }, + { + "label": "k03", + "x": 3, + "y": 0 + }, + { + "label": "k04", + "x": 4.75, + "y": 0 + }, + { + "label": "k06", + "x": 6.25, + "y": 0 + }, + { + "label": "k07", + "x": 7.25, + "y": 0 + }, + { + "label": "k08", + "x": 8.25, + "y": 0 + }, + { + "label": "k09", + "x": 9.25, + "y": 0 + }, + { + "label": "k0a", + "x": 10.75, + "y": 0 + }, + { + "label": "k60", + "x": 11.75, + "y": 0 + }, + { + "label": "k61", + "x": 12.75, + "y": 0 + }, + { + "label": "k62", + "x": 13.75, + "y": 0 + }, + { + "label": "k63", + "x": 15.25, + "y": 0 + }, + { + "label": "k64", + "x": 16.25, + "y": 0 + }, + { + "label": "k65", + "x": 17.25, + "y": 0 + }, + { + "label": "k66", + "x": 18.25, + "y": 0 + }, + { + "label": "k67", + "x": 20, + "y": 0 + }, + { + "label": "k68", + "x": 21, + "y": 0 + }, + { + "label": "k69", + "x": 22, + "y": 0 + }, + { + "label": "k6a", + "x": 23, + "y": 0 + }, + { + "label": "k10", + "x": 0, + "y": 1.25 + }, + { + "label": "k11", + "x": 1, + "y": 1.25 + }, + { + "label": "k12", + "x": 2, + "y": 1.25 + }, + { + "label": "k13", + "x": 3, + "y": 1.25 + }, + { + "label": "k14", + "x": 4.5, + "y": 1.25 + }, + { + "label": "k15", + "x": 5.5, + "y": 1.25 + }, + { + "label": "k16", + "x": 6.5, + "y": 1.25 + }, + { + "label": "k17", + "x": 7.5, + "y": 1.25 + }, + { + "label": "k18", + "x": 8.5, + "y": 1.25 + }, + { + "label": "k19", + "x": 9.5, + "y": 1.25 + }, + { + "label": "k0a", + "x": 10.5, + "y": 1.25 + }, + { + "label": "k70", + "x": 11.5, + "y": 1.25 + }, + { + "label": "k71", + "x": 12.5, + "y": 1.25 + }, + { + "label": "k72", + "x": 13.5, + "y": 1.25 + }, + { + "label": "k73", + "x": 14.5, + "y": 1.25 + }, + { + "label": "k74", + "x": 15.5, + "y": 1.25 + }, + { + "label": "k75", + "x": 16.5, + "y": 1.25 + }, + { + "label": "k76", + "x": 17.5, + "y": 1.25, + "w": 2 + }, + { + "label": "k77", + "x": 20, + "y": 1.25 + }, + { + "label": "k78", + "x": 21, + "y": 1.25 + }, + { + "label": "k79", + "x": 22, + "y": 1.25 + }, + { + "label": "k7a", + "x": 23, + "y": 1.25 + }, + { + "label": "k20", + "x": 0, + "y": 2.25, + "h": 2 + }, + { + "label": "k21", + "x": 1, + "y": 2.25 + }, + { + "label": "k22", + "x": 2, + "y": 2.25 + }, + { + "label": "k23", + "x": 3, + "y": 2.25 + }, + { + "label": "k24", + "x": 4.5, + "y": 2.25, + "w": 1.5 + }, + { + "label": "k25", + "x": 6, + "y": 2.25 + }, + { + "label": "k26", + "x": 7, + "y": 2.25 + }, + { + "label": "k27", + "x": 8, + "y": 2.25 + }, + { + "label": "k28", + "x": 9, + "y": 2.25 + }, + { + "label": "k29", + "x": 10, + "y": 2.25 + }, + { + "label": "k2a", + "x": 11, + "y": 2.25 + }, + { + "label": "k80", + "x": 12, + "y": 2.25 + }, + { + "label": "k81", + "x": 13, + "y": 2.25 + }, + { + "label": "k82", + "x": 14, + "y": 2.25 + }, + { + "label": "k83", + "x": 15, + "y": 2.25 + }, + { + "label": "k84", + "x": 16, + "y": 2.25 + }, + { + "label": "k85", + "x": 17, + "y": 2.25 + }, + { + "label": "k86", + "x": 18, + "y": 2.25, + "w": 1.5 + }, + { + "label": "k87", + "x": 20, + "y": 2.25 + }, + { + "label": "k88", + "x": 21, + "y": 2.25 + }, + { + "label": "k89", + "x": 22, + "y": 2.25 + }, + { + "label": "k8a", + "x": 23, + "y": 2.25, + "h": 2 + }, + { + "label": "k31", + "x": 1, + "y": 3.25 + }, + { + "label": "k32", + "x": 2, + "y": 3.25 + }, + { + "label": "k33", + "x": 3, + "y": 3.25 + }, + { + "label": "k34", + "x": 4.5, + "y": 3.25, + "w": 1.75 + }, + { + "label": "k35", + "x": 6.25, + "y": 3.25 + }, + { + "label": "k36", + "x": 7.25, + "y": 3.25 + }, + { + "label": "k37", + "x": 8.25, + "y": 3.25 + }, + { + "label": "k38", + "x": 9.25, + "y": 3.25 + }, + { + "label": "k39", + "x": 10.25, + "y": 3.25 + }, + { + "label": "k3a", + "x": 11.25, + "y": 3.25 + }, + { + "label": "k90", + "x": 12.25, + "y": 3.25 + }, + { + "label": "k91", + "x": 13.25, + "y": 3.25 + }, + { + "label": "k92", + "x": 14.25, + "y": 3.25 + }, + { + "label": "k93", + "x": 15.25, + "y": 3.25 + }, + { + "label": "k94", + "x": 16.25, + "y": 3.25 + }, + { + "label": "k95", + "x": 17.25, + "y": 3.25, + "w": 2.25 + }, + { + "label": "k97", + "x": 20, + "y": 3.25 + }, + { + "label": "k98", + "x": 21, + "y": 3.25 + }, + { + "label": "k99", + "x": 22, + "y": 3.25 + }, + { + "label": "k40", + "x": 0, + "y": 4.25, + "h": 2 + }, + { + "label": "k41", + "x": 1, + "y": 4.25 + }, + { + "label": "k42", + "x": 2, + "y": 4.25 + }, + { + "label": "k43", + "x": 3, + "y": 4.25 + }, + { + "label": "k45", + "x": 5.5, + "y": 4.25, + "w": 1.25 + }, + { + "label": "k46", + "x": 6.75, + "y": 4.25 + }, + { + "label": "k47", + "x": 7.75, + "y": 4.25 + }, + { + "label": "k48", + "x": 8.75, + "y": 4.25 + }, + { + "label": "k49", + "x": 9.75, + "y": 4.25 + }, + { + "label": "k4a", + "x": 10.75, + "y": 4.25 + }, + { + "label": "ka0", + "x": 11.75, + "y": 4.25 + }, + { + "label": "ka1", + "x": 12.75, + "y": 4.25 + }, + { + "label": "ka2", + "x": 13.75, + "y": 4.25 + }, + { + "label": "ka3", + "x": 14.75, + "y": 4.25 + }, + { + "label": "ka4", + "x": 15.75, + "y": 4.25 + }, + { + "label": "ka5", + "x": 16.75, + "y": 4.25, + "w": 1.75 + }, + { + "label": "ka7", + "x": 20, + "y": 4.25 + }, + { + "label": "ka8", + "x": 21, + "y": 4.25 + }, + { + "label": "ka9", + "x": 22, + "y": 4.25 + }, + { + "label": "kaa", + "x": 23, + "y": 4.25, + "h": 2 + }, + { + "label": "k44", + "x": 4.25, + "y": 4.5 + }, + { + "label": "k96", + "x": 18.75, + "y": 4.5 + }, + { + "label": "k51", + "x": 1, + "y": 5.25 + }, + { + "label": "k52", + "x": 2, + "y": 5.25 + }, + { + "label": "k56", + "x": 6.5, + "y": 5.25 + }, + { + "label": "k57", + "x": 7.5, + "y": 5.25 + }, + { + "label": "kb0", + "x": 8.5, + "y": 5.25, + "w": 7 + }, + { + "label": "kb4", + "x": 15.5, + "y": 5.25 + }, + { + "label": "kb5", + "x": 16.5, + "y": 5.25 + }, + { + "label": "kb8", + "x": 21, + "y": 5.25 + }, + { + "label": "kb9", + "x": 22, + "y": 5.25 + }, + { + "label": "k53", + "x": 3.25, + "y": 5.5 + }, + { + "label": "k54", + "x": 4.25, + "y": 5.5 + }, + { + "label": "k55", + "x": 5.25, + "y": 5.5 + }, + { + "label": "ka6", + "x": 17.75, + "y": 5.5 + }, + { + "label": "kb6", + "x": 18.75, + "y": 5.5 + }, + { + "label": "kb7", + "x": 19.75, + "y": 5.5 + } + ] + }, + "LAYOUT_4U_SPACE": { + "layout": [ + { + "label": "k00", + "x": 0, + "y": 0 + }, + { + "label": "k01", + "x": 1, + "y": 0 + }, + { + "label": "k02", + "x": 2, + "y": 0 + }, + { + "label": "k03", + "x": 3, + "y": 0 + }, + { + "label": "k04", + "x": 4.75, + "y": 0 + }, + { + "label": "k06", + "x": 6.25, + "y": 0 + }, + { + "label": "k07", + "x": 7.25, + "y": 0 + }, + { + "label": "k08", + "x": 8.25, + "y": 0 + }, + { + "label": "k09", + "x": 9.25, + "y": 0 + }, + { + "label": "k0a", + "x": 10.75, + "y": 0 + }, + { + "label": "k60", + "x": 11.75, + "y": 0 + }, + { + "label": "k61", + "x": 12.75, + "y": 0 + }, + { + "label": "k62", + "x": 13.75, + "y": 0 + }, + { + "label": "k63", + "x": 15.25, + "y": 0 + }, + { + "label": "k64", + "x": 16.25, + "y": 0 + }, + { + "label": "k65", + "x": 17.25, + "y": 0 + }, + { + "label": "k66", + "x": 18.25, + "y": 0 + }, + { + "label": "k67", + "x": 20, + "y": 0 + }, + { + "label": "k68", + "x": 21, + "y": 0 + }, + { + "label": "k69", + "x": 22, + "y": 0 + }, + { + "label": "k6a", + "x": 23, + "y": 0 + }, + { + "label": "k10", + "x": 0, + "y": 1.25 + }, + { + "label": "k11", + "x": 1, + "y": 1.25 + }, + { + "label": "k12", + "x": 2, + "y": 1.25 + }, + { + "label": "k13", + "x": 3, + "y": 1.25 + }, + { + "label": "k14", + "x": 4.5, + "y": 1.25 + }, + { + "label": "k15", + "x": 5.5, + "y": 1.25 + }, + { + "label": "k16", + "x": 6.5, + "y": 1.25 + }, + { + "label": "k17", + "x": 7.5, + "y": 1.25 + }, + { + "label": "k18", + "x": 8.5, + "y": 1.25 + }, + { + "label": "k19", + "x": 9.5, + "y": 1.25 + }, + { + "label": "k0a", + "x": 10.5, + "y": 1.25 + }, + { + "label": "k70", + "x": 11.5, + "y": 1.25 + }, + { + "label": "k71", + "x": 12.5, + "y": 1.25 + }, + { + "label": "k72", + "x": 13.5, + "y": 1.25 + }, + { + "label": "k73", + "x": 14.5, + "y": 1.25 + }, + { + "label": "k74", + "x": 15.5, + "y": 1.25 + }, + { + "label": "k75", + "x": 16.5, + "y": 1.25 + }, + { + "label": "k76", + "x": 17.5, + "y": 1.25, + "w": 2 + }, + { + "label": "k77", + "x": 20, + "y": 1.25 + }, + { + "label": "k78", + "x": 21, + "y": 1.25 + }, + { + "label": "k79", + "x": 22, + "y": 1.25 + }, + { + "label": "k7a", + "x": 23, + "y": 1.25 + }, + { + "label": "k20", + "x": 0, + "y": 2.25, + "h": 2 + }, + { + "label": "k21", + "x": 1, + "y": 2.25 + }, + { + "label": "k22", + "x": 2, + "y": 2.25 + }, + { + "label": "k23", + "x": 3, + "y": 2.25 + }, + { + "label": "k24", + "x": 4.5, + "y": 2.25, + "w": 1.5 + }, + { + "label": "k25", + "x": 6, + "y": 2.25 + }, + { + "label": "k26", + "x": 7, + "y": 2.25 + }, + { + "label": "k27", + "x": 8, + "y": 2.25 + }, + { + "label": "k28", + "x": 9, + "y": 2.25 + }, + { + "label": "k29", + "x": 10, + "y": 2.25 + }, + { + "label": "k2a", + "x": 11, + "y": 2.25 + }, + { + "label": "k80", + "x": 12, + "y": 2.25 + }, + { + "label": "k81", + "x": 13, + "y": 2.25 + }, + { + "label": "k82", + "x": 14, + "y": 2.25 + }, + { + "label": "k83", + "x": 15, + "y": 2.25 + }, + { + "label": "k84", + "x": 16, + "y": 2.25 + }, + { + "label": "k85", + "x": 17, + "y": 2.25 + }, + { + "label": "k86", + "x": 18, + "y": 2.25, + "w": 1.5 + }, + { + "label": "k87", + "x": 20, + "y": 2.25 + }, + { + "label": "k88", + "x": 21, + "y": 2.25 + }, + { + "label": "k89", + "x": 22, + "y": 2.25 + }, + { + "label": "k8a", + "x": 23, + "y": 2.25, + "h": 2 + }, + { + "label": "k31", + "x": 1, + "y": 3.25 + }, + { + "label": "k32", + "x": 2, + "y": 3.25 + }, + { + "label": "k33", + "x": 3, + "y": 3.25 + }, + { + "label": "k34", + "x": 4.5, + "y": 3.25, + "w": 1.75 + }, + { + "label": "k35", + "x": 6.25, + "y": 3.25 + }, + { + "label": "k36", + "x": 7.25, + "y": 3.25 + }, + { + "label": "k37", + "x": 8.25, + "y": 3.25 + }, + { + "label": "k38", + "x": 9.25, + "y": 3.25 + }, + { + "label": "k39", + "x": 10.25, + "y": 3.25 + }, + { + "label": "k3a", + "x": 11.25, + "y": 3.25 + }, + { + "label": "k90", + "x": 12.25, + "y": 3.25 + }, + { + "label": "k91", + "x": 13.25, + "y": 3.25 + }, + { + "label": "k92", + "x": 14.25, + "y": 3.25 + }, + { + "label": "k93", + "x": 15.25, + "y": 3.25 + }, + { + "label": "k94", + "x": 16.25, + "y": 3.25 + }, + { + "label": "k95", + "x": 17.25, + "y": 3.25, + "w": 2.25 + }, + { + "label": "k97", + "x": 20, + "y": 3.25 + }, + { + "label": "k98", + "x": 21, + "y": 3.25 + }, + { + "label": "k99", + "x": 22, + "y": 3.25 + }, + { + "label": "k40", + "x": 0, + "y": 4.25, + "h": 2 + }, + { + "label": "k41", + "x": 1, + "y": 4.25 + }, + { + "label": "k42", + "x": 2, + "y": 4.25 + }, + { + "label": "k43", + "x": 3, + "y": 4.25 + }, + { + "label": "k45", + "x": 5.5, + "y": 4.25, + "w": 1.25 + }, + { + "label": "k46", + "x": 6.75, + "y": 4.25 + }, + { + "label": "k47", + "x": 7.75, + "y": 4.25 + }, + { + "label": "k48", + "x": 8.75, + "y": 4.25 + }, + { + "label": "k49", + "x": 9.75, + "y": 4.25 + }, + { + "label": "k4a", + "x": 10.75, + "y": 4.25 + }, + { + "label": "ka0", + "x": 11.75, + "y": 4.25 + }, + { + "label": "ka1", + "x": 12.75, + "y": 4.25 + }, + { + "label": "ka2", + "x": 13.75, + "y": 4.25 + }, + { + "label": "ka3", + "x": 14.75, + "y": 4.25 + }, + { + "label": "ka4", + "x": 15.75, + "y": 4.25 + }, + { + "label": "ka5", + "x": 16.75, + "y": 4.25, + "w": 1.75 + }, + { + "label": "ka7", + "x": 20, + "y": 4.25 + }, + { + "label": "ka8", + "x": 21, + "y": 4.25 + }, + { + "label": "ka9", + "x": 22, + "y": 4.25 + }, + { + "label": "kaa", + "x": 23, + "y": 4.25, + "h": 2 + }, + { + "label": "k44", + "x": 4.25, + "y": 4.5 + }, + { + "label": "k96", + "x": 18.75, + "y": 4.5 + }, + { + "label": "k51", + "x": 1, + "y": 5.25 + }, + { + "label": "k52", + "x": 2, + "y": 5.25 + }, + { + "label": "k56", + "x": 6.5, + "y": 5.25 + }, + { + "label": "k57", + "x": 7.5, + "y": 5.25 + }, + { + "label": "k58", + "x": 8.5, + "y": 5.25 + }, + { + "label": "kb0", + "x": 9.5, + "y": 5.25, + "w": 4 + }, + { + "label": "kb2", + "x": 13.5, + "y": 5.25 + }, + { + "label": "kb3", + "x": 14.5, + "y": 5.25 + }, + { + "label": "kb4", + "x": 15.5, + "y": 5.25 + }, + { + "label": "kb5", + "x": 16.5, + "y": 5.25 + }, + { + "label": "kb8", + "x": 21, + "y": 5.25 + }, + { + "label": "kb9", + "x": 22, + "y": 5.25 + }, + { + "label": "k53", + "x": 3.25, + "y": 5.5 + }, + { + "label": "k54", + "x": 4.25, + "y": 5.5 + }, + { + "label": "k55", + "x": 5.25, + "y": 5.5 + }, + { + "label": "ka6", + "x": 17.75, + "y": 5.5 + }, + { + "label": "kb6", + "x": 18.75, + "y": 5.5 + }, + { + "label": "kb7", + "x": 19.75, + "y": 5.5 + } + ] } + } } From 34ce1ed016eeac130a05765a6753d62692055bae Mon Sep 17 00:00:00 2001 From: Salt-Peanuts Date: Fri, 27 Apr 2018 18:16:13 -0400 Subject: [PATCH 068/152] Updated tri-layer block in keymap file. (#2827) * Updated info and fixed minor errors * Updated folder name; overdue updates to keymap and readme files Updated folder name; overdue updates to keymap and readme files * Updated tri-layer feature * Revert "Updated tri-layer feature" This reverts commit 59b8b85761740e24f671e10fceea869f06a33ade. * Updated tri-layer on keymap * Fixed typos --- .../keymaps/insertsnideremarks/keymap.c | 22 ++++--------------- .../keymaps/insertsnideremarks/readme.md | 4 ++-- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/keyboards/kinesis/keymaps/insertsnideremarks/keymap.c b/keyboards/kinesis/keymaps/insertsnideremarks/keymap.c index 8885867ee87..999e76ca3f9 100644 --- a/keyboards/kinesis/keymaps/insertsnideremarks/keymap.c +++ b/keyboards/kinesis/keymaps/insertsnideremarks/keymap.c @@ -571,6 +571,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; +uint32_t layer_state_set_user(uint32_t state) { + return update_tri_layer_state(state, _NUMBERS, _NUMBERS2, _ADJUST); +} + void persistent_default_layer_set(uint16_t default_layer) { eeconfig_update_default_layer(default_layer); default_layer_set(default_layer); @@ -658,24 +662,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; - case ENTNS: - if (record->event.pressed) { - layer_on(_NUMBERS); - update_tri_layer(_NUMBERS, _NUMBERS2, _ADJUST); - } else { - layer_off(_NUMBERS); - update_tri_layer(_NUMBERS, _NUMBERS2, _ADJUST); - } - break; - case DELNS: - if (record->event.pressed) { - layer_on(_NUMBERS2); - update_tri_layer(_NUMBERS, _NUMBERS2, _ADJUST); - } else { - layer_off(_NUMBERS2); - update_tri_layer(_NUMBERS, _NUMBERS2, _ADJUST); - } - break; } return true; } \ No newline at end of file diff --git a/keyboards/kinesis/keymaps/insertsnideremarks/readme.md b/keyboards/kinesis/keymaps/insertsnideremarks/readme.md index 1920d4f9b81..b3c573b6259 100644 --- a/keyboards/kinesis/keymaps/insertsnideremarks/readme.md +++ b/keyboards/kinesis/keymaps/insertsnideremarks/readme.md @@ -10,9 +10,9 @@ Changes to the thumb clusters include: * Backspace have been duplicated on both clusters. * The 2u keys serve dual function as momentary layer switchers. -I've largely left the function keys untouched, with the intension of not using them. They are neither easy to use nor reach due to their locations and size, and, prior to Advantage2, particularly terrible rubber domes were used for them. They have since updated the keys with Cherry ML switches on Advantage2, but did not resolve the issues of size or location. Additionally, leaving the function keys unused here makes it easier for me to adapt the keymaps to my other keyboards, most of which do not have physical function keys. +I've largely left the function keys untouched, with the intension of not using them. They are neither easy to use nor reach due to their locations and size, and, prior to Advantage2, particularly terrible rubber domes were used. They have since updated the keys with Cherry ML switches on Advantage2, but did not resolve the issues of size or location. Additionally, leaving the function keys unused here makes it easier for me to adapt the keymaps to my other keyboards, most of which do not have physical function keys. -I use Colemak Mod-DH Matrix as my default layout. There QWERTY and Colemak layouts as well. +I use Colemak Mod-DH Matrix as my default layout. There are QWERTY and regular Colemak layouts as well. Additionally, I've added gaming/vanilla version of Colemak Mod-DH Matrix and QWERTY layouts. These layouts have no access to the Function or Numbers layers, thus no dual-role keys with layer access, and are mainly used for gaming. From 376a384b232022853898e4582e504640a0e78237 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 27 Apr 2018 15:16:42 -0700 Subject: [PATCH 069/152] Fix UT47 matrix (#2824) * Fix UT47 matrix * Use both spots in the matrix for the space bar --- keyboards/ut47/ut47.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/keyboards/ut47/ut47.h b/keyboards/ut47/ut47.h index b915e8dac0f..a4507dd34d7 100644 --- a/keyboards/ut47/ut47.h +++ b/keyboards/ut47/ut47.h @@ -24,12 +24,12 @@ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, \ 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, KC_NO, K35, K37, K38, K39, K3a, K3b } \ - } + { K30, K31, K32, K33, K34, K35, K35, K37, K38, K39, K3a, K3b } \ + } #define LAYOUT_kc( \ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, \ @@ -41,7 +41,7 @@ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0a, KC_##K0b, \ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1a, KC_##K1b, \ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2a, KC_##K2b, \ - KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_NO,KC_##K35, KC_##K37, KC_##K38, KC_##K39, KC_##K3a, KC_##K3b \ + KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K37, KC_##K38, KC_##K39, KC_##K3a, KC_##K3b \ ) #define LAYOUT_kc_ut47 LAYOUT_kc From 102433d8bc40143060f82ff46b9a5777d41fa245 Mon Sep 17 00:00:00 2001 From: Eric <22215921+ericywl@users.noreply.github.com> Date: Sat, 28 Apr 2018 06:17:10 +0800 Subject: [PATCH 070/152] QMK Configurator Support for HHKB and Staryu (#2823) * added hhkb eric * dz60 and hhkb * editted eric hhkb and dz60 * Added HHKB Config * Removed HHKB Config * Added HHKB Config * Changed the legends on HHKB info.json * Added Tada68 ISO Config and Staryu * Removed Tada68 ISO Config --- keyboards/hhkb/info.json | 16 ++++++++++++++++ keyboards/staryu/info.json | 12 ++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 keyboards/hhkb/info.json create mode 100644 keyboards/staryu/info.json diff --git a/keyboards/hhkb/info.json b/keyboards/hhkb/info.json new file mode 100644 index 00000000000..bce1bfce18b --- /dev/null +++ b/keyboards/hhkb/info.json @@ -0,0 +1,16 @@ +{ + "keyboard_name": "hhkb", + "url": "", + "maintainer": "qmk", + "width": 15, + "height": 5, + "layouts": { + "KEYMAP": { + "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":"~", "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":"Delete", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "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":"Return", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"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}, {"label":"Fn", "x":14, "y":3}, {"label":"", "x":1.5, "y":4}, {"label":"", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"label":"", "x":10, "y":4, "w":1.5}, {"label":"", "x":11.5, "y":4}] + }, + + "KEYMAP_JP": { + "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":"BS", "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":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Control", "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":"}", "x":12.75, "y":2}, {"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":"_", "x":12, "y":3}, {"label":"\u2191", "x":13, "y":3}, {"label":"Shift", "x":14, "y":3}, {"label":"Fn", "x":0, "y":4}, {"label":"HH", "x":1.25, "y":4}, {"label":"\u2662", "x":2.25, "y":4}, {"label":"", "x":3.25, "y":4}, {"label":"NN", "x":4.25, "y":4}, {"x":5.25, "y":4, "w":2.5}, {"label":"\u25cc", "x":7.75, "y":4}, {"label":"Kana", "x":8.75, "y":4}, {"label":"", "x":9.75, "y":4}, {"label":"Fn", "x":10.75, "y":4}, {"label":"\u2190", "x":12, "y":4}, {"label":"\u2193", "x":13, "y":4}, {"label":"\u2192", "x":14, "y":4}] + } + } +} diff --git a/keyboards/staryu/info.json b/keyboards/staryu/info.json new file mode 100644 index 00000000000..baac7dfc296 --- /dev/null +++ b/keyboards/staryu/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "staryu", + "url": "", + "maintainer": "qmk", + "width": 3, + "height": 2, + "layouts": { + "LAYOUT": { + "layout": [{"x":1, "y":0}, {"x":2, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}] + } + } +} From 0d98822144975c96f93eb5557924282ad981fa24 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Fri, 27 Apr 2018 15:17:39 -0700 Subject: [PATCH 071/152] QMK Configurator Support (#2821) - Change all KEYMAP to LAYOUT - Add info.json - Add QMK_KEYBOARD_H --- keyboards/bfake/bfake.h | 2 +- keyboards/bfake/info.json | 12 ++++++++++++ keyboards/bfake/keymaps/default/keymap.c | 8 ++++---- keyboards/bfake/keymaps/mechmerlin/keymap.c | 10 +++++----- 4 files changed, 22 insertions(+), 10 deletions(-) create mode 100644 keyboards/bfake/info.json diff --git a/keyboards/bfake/bfake.h b/keyboards/bfake/bfake.h index fa5c8ee2984..a5b2d8078a6 100644 --- a/keyboards/bfake/bfake.h +++ b/keyboards/bfake/bfake.h @@ -20,7 +20,7 @@ along with this program. If not, see . #include "quantum.h" -#define KEYMAP( \ +#define LAYOUT_all( \ K61, K71, K72, K73, K74, K64, K65, K75, K76, K77, K78, K68, K66, K10, K60,\ K11, K01, K02, K03, K04, K14, K15, K05, K06, K07, K08, K18, K16, K20, \ K12, K21, K22, K23, K24, K34, K35, K25, K26, K27, K28, K38, K40, \ diff --git a/keyboards/bfake/info.json b/keyboards/bfake/info.json new file mode 100644 index 00000000000..541d1edaf19 --- /dev/null +++ b/keyboards/bfake/info.json @@ -0,0 +1,12 @@ +{ + "keyboard_name": "b.fake", + "url": "", + "maintainer": "qmk", + "width": 15, + "height": 5, + "layouts": { + "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}, {"label":"Enter", "x":12.75, "y":2, "w":2.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/bfake/keymaps/default/keymap.c b/keyboards/bfake/keymaps/default/keymap.c index 239fdf427f9..a237f8489e7 100644 --- a/keyboards/bfake/keymaps/default/keymap.c +++ b/keyboards/bfake/keymaps/default/keymap.c @@ -15,24 +15,24 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "bfake.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = KEYMAP( + [0] = LAYOUT_all( 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_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, 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_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, MO(1), KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL ), - [1] = KEYMAP( + [1] = LAYOUT_all( 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_DEL, MO(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), - [2] = KEYMAP( + [2] = LAYOUT_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, 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, MO(1), 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/bfake/keymaps/mechmerlin/keymap.c b/keyboards/bfake/keymaps/mechmerlin/keymap.c index 705339b9939..35b59e6a42f 100644 --- a/keyboards/bfake/keymaps/mechmerlin/keymap.c +++ b/keyboards/bfake/keymaps/mechmerlin/keymap.c @@ -15,24 +15,24 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "bfake.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = KEYMAP( + [0] = LAYOUT_all( 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_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_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_RSFT, TG(2), KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(1), KC_RALT, KC_RGUI, KC_RCTL ), - [1] = KEYMAP( + [1] = LAYOUT_all( 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_NO, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), - [2] = KEYMAP( + [2] = LAYOUT_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, @@ -40,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT ), - [3] = KEYMAP( + [3] = LAYOUT_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, 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, From 625a243be86c0fa2bbb8d708e5f6c84bca1863d3 Mon Sep 17 00:00:00 2001 From: noroadsleft <18669334+noroadsleft@users.noreply.github.com> Date: Fri, 27 Apr 2018 15:19:15 -0700 Subject: [PATCH 072/152] QMK Configurator updates for Mechmini v2 (#2820) * Mechmini 2 updates for QMK Configurator * Update info.json --- keyboards/mechmini/v2/info.json | 22 +++++++++++++++++++ .../v2/keymaps/2u_space_ortho/keymap.c | 8 +++---- .../mechmini/v2/keymaps/625_space/keymap.c | 8 +++---- .../mechmini/v2/keymaps/default/keymap.c | 8 +++---- keyboards/mechmini/v2/keymaps/ortho/keymap.c | 8 +++---- .../mechmini/v2/keymaps/split_space/keymap.c | 8 +++---- keyboards/mechmini/v2/v2.h | 8 +++---- 7 files changed, 46 insertions(+), 24 deletions(-) create mode 100644 keyboards/mechmini/v2/info.json diff --git a/keyboards/mechmini/v2/info.json b/keyboards/mechmini/v2/info.json new file mode 100644 index 00000000000..c69771c1f85 --- /dev/null +++ b/keyboards/mechmini/v2/info.json @@ -0,0 +1,22 @@ +{ + "keyboard_name": "MechMini 2", + "url": "https://mechkeys.ca/pages/mechmini-2-guide", + "maintainer": "qmk", + "bootloader": "", + "width": 12, + "height": 4, + "layouts": { + "LAYOUT_ortho": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"Back Space", "x":11, "y":0}, {"label":"Tab", "x":0, "y":1}, {"label":"A", "x":1, "y":1}, {"label":"S", "x":2, "y":1}, {"label":"D", "x":3, "y":1}, {"label":"F", "x":4, "y":1}, {"label":"G", "x":5, "y":1}, {"label":"H", "x":6, "y":1}, {"label":"J", "x":7, "y":1}, {"label":"K", "x":8, "y":1}, {"label":"L", "x":9, "y":1}, {"label":";", "x":10, "y":1}, {"label":"'", "x":11, "y":1}, {"label":"Shift", "x":0, "y":2}, {"label":"Z", "x":1, "y":2}, {"label":"X", "x":2, "y":2}, {"label":"C", "x":3, "y":2}, {"label":"V", "x":4, "y":2}, {"label":"B", "x":5, "y":2}, {"label":"N", "x":6, "y":2}, {"label":"M", "x":7, "y":2}, {"label":",", "x":8, "y":2}, {"label":".", "x":9, "y":2}, {"label":"/", "x":10, "y":2}, {"label":"Return", "x":11, "y":2}, {"label":"Caps", "x":0, "y":3}, {"label":"Ctrl", "x":1, "y":3}, {"label":"Alt", "x":2, "y":3}, {"label":"GUI", "x":3, "y":3}, {"label":"MO(1)", "x":4, "y":3}, {"label":"Space", "x":5, "y":3}, {"label":"Space", "x":6, "y":3}, {"label":"MO(2)", "x":7, "y":3}, {"label":"←", "x":8, "y":3}, {"label":"↓", "x":9, "y":3}, {"label":"↑", "x":10, "y":3}, {"label":"→", "x":11, "y":3}] + }, + "LAYOUT_2u_space_ortho": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"Back Space", "x":11, "y":0}, {"label":"Tab", "x":0, "y":1}, {"label":"A", "x":1, "y":1}, {"label":"S", "x":2, "y":1}, {"label":"D", "x":3, "y":1}, {"label":"F", "x":4, "y":1}, {"label":"G", "x":5, "y":1}, {"label":"H", "x":6, "y":1}, {"label":"J", "x":7, "y":1}, {"label":"K", "x":8, "y":1}, {"label":"L", "x":9, "y":1}, {"label":";", "x":10, "y":1}, {"label":"'", "x":11, "y":1}, {"label":"Shift", "x":0, "y":2}, {"label":"Z", "x":1, "y":2}, {"label":"X", "x":2, "y":2}, {"label":"C", "x":3, "y":2}, {"label":"V", "x":4, "y":2}, {"label":"B", "x":5, "y":2}, {"label":"N", "x":6, "y":2}, {"label":"M", "x":7, "y":2}, {"label":",", "x":8, "y":2}, {"label":".", "x":9, "y":2}, {"label":"/", "x":10, "y":2}, {"label":"Return", "x":11, "y":2}, {"label":"Caps", "x":0, "y":3}, {"label":"Ctrl", "x":1, "y":3}, {"label":"Alt", "x":2, "y":3}, {"label":"GUI", "x":3, "y":3}, {"label":"MO(1)", "x":4, "y":3}, {"label":"Space", "x":5, "y":3, "w":2}, {"label":"MO(2)", "x":7, "y":3}, {"label":"←", "x":8, "y":3}, {"label":"↓", "x":9, "y":3}, {"label":"↑", "x":10, "y":3}, {"label":"→", "x":11, "y":3}] + }, + "LAYOUT_625_space": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"Back
Space", "x":11, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.25}, {"label":"A", "x":1.25, "y":1}, {"label":"S", "x":2.25, "y":1}, {"label":"D", "x":3.25, "y":1}, {"label":"F", "x":4.25, "y":1}, {"label":"G", "x":5.25, "y":1}, {"label":"H", "x":6.25, "y":1}, {"label":"J", "x":7.25, "y":1}, {"label":"K", "x":8.25, "y":1}, {"label":"L", "x":9.25, "y":1}, {"label":"Enter", "x":10.25, "y":1, "w":1.75}, {"label":"Shift", "x":0, "y":2, "w":1.75}, {"label":"Z", "x":1.75, "y":2}, {"label":"X", "x":2.75, "y":2}, {"label":"C", "x":3.75, "y":2}, {"label":"V", "x":4.75, "y":2}, {"label":"B", "x":5.75, "y":2}, {"label":"N", "x":6.75, "y":2}, {"label":"M", "x":7.75, "y":2}, {"label":"<", "x":8.75, "y":2}, {"label":"Shift", "x":9.75, "y":2, "w":1.25}, {"label":">", "x":11, "y":2}, {"label":"Control", "x":0, "y":3, "w":1.25}, {"label":"Alt", "x":1.25, "y":3}, {"label":"GUI", "x":2.25, "y":3}, {"x":3.25, "y":3, "w":6.25}, {"label":"MO(1)", "x":9.5, "y":3, "w":1.25}, {"label":"MO(2)", "x":10.75, "y":3, "w":1.25}] + }, + "LAYOUT_split_space": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"Back
Space", "x":11, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.25}, {"label":"A", "x":1.25, "y":1}, {"label":"S", "x":2.25, "y":1}, {"label":"D", "x":3.25, "y":1}, {"label":"F", "x":4.25, "y":1}, {"label":"G", "x":5.25, "y":1}, {"label":"H", "x":6.25, "y":1}, {"label":"J", "x":7.25, "y":1}, {"label":"K", "x":8.25, "y":1}, {"label":"L", "x":9.25, "y":1}, {"label":"Enter", "x":10.25, "y":1, "w":1.75}, {"label":"Shift", "x":0, "y":2, "w":1.75}, {"label":"Z", "x":1.75, "y":2}, {"label":"X", "x":2.75, "y":2}, {"label":"C", "x":3.75, "y":2}, {"label":"V", "x":4.75, "y":2}, {"label":"B", "x":5.75, "y":2}, {"label":"N", "x":6.75, "y":2}, {"label":"M", "x":7.75, "y":2}, {"label":"<", "x":8.75, "y":2}, {"label":"Shift", "x":9.75, "y":2, "w":1.25}, {"label":">", "x":11, "y":2}, {"label":"Control", "x":0, "y":3, "w":1.25}, {"label":"Alt", "x":1.25, "y":3}, {"label":"GUI", "x":2.25, "y":3, "w":1.25}, {"label":"Space", "x":3.5, "y":3, "w":2.75}, {"label":"Space", "x":6.25, "y":3, "w":2.25}, {"label":"Control", "x":8.5, "y":3, "w":1.25}, {"label":"MO(1)", "x":9.75, "y":3}, {"label":"MO(2)", "x":10.75, "y":3, "w":1.25}] + } + } +} diff --git a/keyboards/mechmini/v2/keymaps/2u_space_ortho/keymap.c b/keyboards/mechmini/v2/keymaps/2u_space_ortho/keymap.c index 1b098333143..1b21750035e 100644 --- a/keyboards/mechmini/v2/keymaps/2u_space_ortho/keymap.c +++ b/keyboards/mechmini/v2/keymaps/2u_space_ortho/keymap.c @@ -1,4 +1,4 @@ -#include "mechmini.h" +#include QMK_KEYBOARD_H #define _BL 0 #define _FN1 1 @@ -7,19 +7,19 @@ #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BL] = KEYMAP_2U_SPACE_ORTHO( + [_BL] = LAYOUT_2u_space_ortho( F(0), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, 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_QUOT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, KC_CAPS, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT), - [_FN1] = KEYMAP_2U_SPACE_ORTHO( + [_FN1] = LAYOUT_2u_space_ortho( 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, M(1), M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY), - [_FN2] = KEYMAP_2U_SPACE_ORTHO( + [_FN2] = LAYOUT_2u_space_ortho( KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, KC_TRNS, BL_TOGG, BL_STEP, BL_INC, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_HOME, KC_END, KC_TRNS, diff --git a/keyboards/mechmini/v2/keymaps/625_space/keymap.c b/keyboards/mechmini/v2/keymaps/625_space/keymap.c index 4c9f6011ebc..60d4d32d12b 100755 --- a/keyboards/mechmini/v2/keymaps/625_space/keymap.c +++ b/keyboards/mechmini/v2/keymaps/625_space/keymap.c @@ -1,4 +1,4 @@ -#include "mechmini.h" +#include QMK_KEYBOARD_H #define _BL 0 #define _FN1 1 @@ -7,19 +7,19 @@ #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BL] = KEYMAP_625_SPACE( + [_BL] = LAYOUT_625_space( F(0), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_LSFT, KC_DOT, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, MO(1), MO(2)), - [_FN1] = KEYMAP_625_SPACE( + [_FN1] = LAYOUT_625_space( 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_TRNS, KC_PGUP, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_TRNS, KC_LSFT, KC_PGDN, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_SCLN, KC_QUOT, KC_SLSH, KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - [_FN2] = KEYMAP_625_SPACE( + [_FN2] = LAYOUT_625_space( KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET, KC_TRNS, BL_TOGG, BL_STEP, BL_INC, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_END, diff --git a/keyboards/mechmini/v2/keymaps/default/keymap.c b/keyboards/mechmini/v2/keymaps/default/keymap.c index f9c792e5563..e35f25ee401 100755 --- a/keyboards/mechmini/v2/keymaps/default/keymap.c +++ b/keyboards/mechmini/v2/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "mechmini.h" +#include QMK_KEYBOARD_H #define _BL 0 #define _FN1 1 @@ -7,19 +7,19 @@ #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BL] = KEYMAP_SPLIT_SPACE( + [_BL] = LAYOUT_split_space( F(0), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_RSFT, KC_DOT, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_RCTL, MO(1), MO(2)), - [_FN1] = KEYMAP_SPLIT_SPACE( + [_FN1] = LAYOUT_split_space( 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_TRNS, KC_PGUP, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_TRNS, KC_LSFT, KC_PGDN, KC_VOLD, KC_TRNS, KC_TRNS, KC_SCLN, KC_QUOT, KC_SLSH, KC_COMM, KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - [_FN2] = KEYMAP_SPLIT_SPACE( + [_FN2] = LAYOUT_split_space( KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET, KC_TRNS, BL_TOGG, BL_STEP, BL_INC, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_END, diff --git a/keyboards/mechmini/v2/keymaps/ortho/keymap.c b/keyboards/mechmini/v2/keymaps/ortho/keymap.c index fb33e17759c..3b8fbb168f5 100755 --- a/keyboards/mechmini/v2/keymaps/ortho/keymap.c +++ b/keyboards/mechmini/v2/keymaps/ortho/keymap.c @@ -1,4 +1,4 @@ -#include "mechmini.h" +#include QMK_KEYBOARD_H #define _BL 0 #define _FN1 1 @@ -7,19 +7,19 @@ #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BL] = KEYMAP_ORTHO( + [_BL] = LAYOUT_ortho( F(0), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, 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_QUOT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, KC_CAPS, KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT), - [_FN1] = KEYMAP_ORTHO( + [_FN1] = LAYOUT_ortho( 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, M(1), M(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY), - [_FN2] = KEYMAP_ORTHO( + [_FN2] = LAYOUT_ortho( KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, KC_TRNS, BL_TOGG, BL_STEP, BL_INC, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_HOME, KC_END, KC_TRNS, diff --git a/keyboards/mechmini/v2/keymaps/split_space/keymap.c b/keyboards/mechmini/v2/keymaps/split_space/keymap.c index f9c792e5563..e35f25ee401 100755 --- a/keyboards/mechmini/v2/keymaps/split_space/keymap.c +++ b/keyboards/mechmini/v2/keymaps/split_space/keymap.c @@ -1,4 +1,4 @@ -#include "mechmini.h" +#include QMK_KEYBOARD_H #define _BL 0 #define _FN1 1 @@ -7,19 +7,19 @@ #define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BL] = KEYMAP_SPLIT_SPACE( + [_BL] = LAYOUT_split_space( F(0), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_RSFT, KC_DOT, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_RCTL, MO(1), MO(2)), - [_FN1] = KEYMAP_SPLIT_SPACE( + [_FN1] = LAYOUT_split_space( 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_TRNS, KC_PGUP, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_TRNS, KC_LSFT, KC_PGDN, KC_VOLD, KC_TRNS, KC_TRNS, KC_SCLN, KC_QUOT, KC_SLSH, KC_COMM, KC_TRNS, KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - [_FN2] = KEYMAP_SPLIT_SPACE( + [_FN2] = LAYOUT_split_space( KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET, KC_TRNS, BL_TOGG, BL_STEP, BL_INC, BL_DEC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_END, diff --git a/keyboards/mechmini/v2/v2.h b/keyboards/mechmini/v2/v2.h index 5ed9a9c28b7..67a13abbb5d 100755 --- a/keyboards/mechmini/v2/v2.h +++ b/keyboards/mechmini/v2/v2.h @@ -18,7 +18,7 @@ #include "../mechmini.h" -#define KEYMAP_ORTHO( \ +#define LAYOUT_ortho( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ @@ -30,7 +30,7 @@ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 } \ } -#define KEYMAP_625_SPACE( \ +#define LAYOUT_625_space( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K111, \ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ @@ -42,7 +42,7 @@ { K300, K301, K302, KC_NO, KC_NO, KC_NO, K306, KC_NO, KC_NO, KC_NO, K310, K311 } \ } -#define KEYMAP_SPLIT_SPACE( \ +#define LAYOUT_split_space( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K111, \ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ @@ -54,7 +54,7 @@ { K300, K301, K302, KC_NO, K304, KC_NO, KC_NO, K307, KC_NO, K309, K310, K311 } \ } -#define KEYMAP_2U_SPACE_ORTHO( \ +#define LAYOUT_2u_space_ortho( \ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ From c17d15a305ba68a72593a8e93335d3f0074fb7b7 Mon Sep 17 00:00:00 2001 From: Evan Date: Fri, 27 Apr 2018 15:20:03 -0700 Subject: [PATCH 073/152] Add keymap diagram (#2819) * Add personal Tada68 keymaps * remove uneccessary tada68 folder * recommit with temp name * remove bad folder name * fix bullet list format * rename to fezzant * remove unnecessary config.h file * Add info.json add QMK Configurator .json file * Delete helix_rev_2.json * add diagram to UT47 keymap file * add remaining keymap diagrams for ut47 keymap --- keyboards/ut47/keymaps/default/keymap.c | 52 ++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/keyboards/ut47/keymaps/default/keymap.c b/keyboards/ut47/keymaps/default/keymap.c index a02543dacb8..3f065b615f7 100644 --- a/keyboards/ut47/keymaps/default/keymap.c +++ b/keyboards/ut47/keymaps/default/keymap.c @@ -29,6 +29,18 @@ enum custom_keycodes { 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, @@ -36,20 +48,56 @@ LAYOUT( KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(2), KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT ), -LAYOUT( + /* 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_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______, 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 ), -LAYOUT( + /* FN Layer 2 + * ,-------------------------------------------------------------------------. + * | FN6 | FN7 | FN8 | FN9 | FN9 | FN10| FN11| FN12| FN13| FN14| FN15| Delete| + * |-------------------------------------------------------------------------+ + * | | | | | | | | FN17| FN18| FN19| FN20| FN21| + * |-------------------------------------------------------------------------+ + * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | | + * |-------------------------------------------------------------------------+ + * | | | |Capsl| | | | Home| PgDn| PgUp| End | + * `-------------------------------------------------------------------------' + */ + +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_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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, From 4afd970dc4345bdae95211d541cca5f203218578 Mon Sep 17 00:00:00 2001 From: Eric <22215921+ericywl@users.noreply.github.com> Date: Sat, 28 Apr 2018 06:44:33 +0800 Subject: [PATCH 074/152] QMK Configurator updates to Tada68 (#2825) * Added Tada68 ISO Config * Fixed missing up-arrow on Tada68 info.json --- keyboards/tada68/info.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/keyboards/tada68/info.json b/keyboards/tada68/info.json index 7d0c77c442a..5fb60b1fb0e 100644 --- a/keyboards/tada68/info.json +++ b/keyboards/tada68/info.json @@ -7,6 +7,10 @@ "layouts": { "KEYMAP_ANSI": { "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}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15, "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}, {"x":15, "y":1}, {"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}, {"x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"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}, {"x":15, "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}, {"label":"Win", "x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}] + }, + + "KEYMAP_ISO": { + "layout": [{"label":"\u00ac", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "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":"Backspace", "x":13, "y":0, "w":2}, {"x":15, "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":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"x":15, "y":1}, {"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":"~", "x":12.75, "y":2}, {"x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"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}, {"x":15, "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":"AltGr", "x":10, "y":4}, {"label":"Win", "x":11, "y":4}, {"label":"Menu", "x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}] } } } From 01a85b780c3cea3ca2f585e547f376a82859712f Mon Sep 17 00:00:00 2001 From: bspsbee <38793669+bspsbee@users.noreply.github.com> Date: Sat, 28 Apr 2018 04:52:15 -1000 Subject: [PATCH 075/152] Add RGB keymap to UT47 (#2826) * Create readme.md * RGB keymap * Update matrix.c Remove serial when not used. --- keyboards/ut47/keymaps/rgb/config.h | 27 +++++++++ keyboards/ut47/keymaps/rgb/keymap.c | 88 ++++++++++++++++++++++++++++ keyboards/ut47/keymaps/rgb/readme.md | 1 + keyboards/ut47/keymaps/rgb/rules.mk | 1 + keyboards/ut47/matrix.c | 8 ++- 5 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 keyboards/ut47/keymaps/rgb/config.h create mode 100644 keyboards/ut47/keymaps/rgb/keymap.c create mode 100644 keyboards/ut47/keymaps/rgb/readme.md create mode 100644 keyboards/ut47/keymaps/rgb/rules.mk diff --git a/keyboards/ut47/keymaps/rgb/config.h b/keyboards/ut47/keymaps/rgb/config.h new file mode 100644 index 00000000000..0eb010a3ae2 --- /dev/null +++ b/keyboards/ut47/keymaps/rgb/config.h @@ -0,0 +1,27 @@ +/* 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 +#define RGBLIGHT_ANIMATIONS +#define RGB_DI_PIN D3 // The pin the LED strip is connected to +#define RGBLED_NUM 7 // Number of LEDs in your strip + +#endif diff --git a/keyboards/ut47/keymaps/rgb/keymap.c b/keyboards/ut47/keymaps/rgb/keymap.c new file mode 100644 index 00000000000..58d11031ad1 --- /dev/null +++ b/keyboards/ut47/keymaps/rgb/keymap.c @@ -0,0 +1,88 @@ +/* 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] = { + +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 +), + +LAYOUT( + 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_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, 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 +), + +LAYOUT( + 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_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 +), + +LAYOUT( /* Tab */ + KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, 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/rgb/readme.md b/keyboards/ut47/keymaps/rgb/readme.md new file mode 100644 index 00000000000..00076bfc497 --- /dev/null +++ b/keyboards/ut47/keymaps/rgb/readme.md @@ -0,0 +1 @@ +WS2812B LED added and connected to pin D3 as described here: https://www.40percent.club/2018/04/gnap-underglow.html diff --git a/keyboards/ut47/keymaps/rgb/rules.mk b/keyboards/ut47/keymaps/rgb/rules.mk new file mode 100644 index 00000000000..1e3cebb1451 --- /dev/null +++ b/keyboards/ut47/keymaps/rgb/rules.mk @@ -0,0 +1 @@ +RGBLIGHT_ENABLE = yes diff --git a/keyboards/ut47/matrix.c b/keyboards/ut47/matrix.c index 18d420dbbb1..921bc9ed5e7 100644 --- a/keyboards/ut47/matrix.c +++ b/keyboards/ut47/matrix.c @@ -26,7 +26,9 @@ along with this program. If not, see . #include "debug.h" #include "util.h" #include "matrix.h" -#include "protocol/serial.h" +#ifdef LED_ENABLE + #include "protocol/serial.h" +#endif #ifndef DEBOUNCE @@ -67,8 +69,10 @@ void matrix_init(void) matrix[i] = 0; matrix_debouncing[i] = 0; } - + +#ifdef LED_ENABLE serial_init(); +#endif } uint8_t matrix_scan(void) From 5dc60c06a9f513b177e3f432648265953fa14cd4 Mon Sep 17 00:00:00 2001 From: Pawnerd Date: Sat, 28 Apr 2018 17:06:07 +0200 Subject: [PATCH 076/152] Add knops mini info json and implemented latest QMK standards (#2832) * added info.json to knops mini keypad. * updated the keyboard to follow the latest qmk standards. --- keyboards/knops/mini/info.json | 13 +++++++ keyboards/knops/mini/keymaps/default/keymap.c | 34 +++++++++---------- keyboards/knops/mini/mini.h | 2 +- 3 files changed, 31 insertions(+), 18 deletions(-) create mode 100644 keyboards/knops/mini/info.json diff --git a/keyboards/knops/mini/info.json b/keyboards/knops/mini/info.json new file mode 100644 index 00000000000..88fb88c29ab --- /dev/null +++ b/keyboards/knops/mini/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "Knops Mini", + "url": "http://www.knops.io/knopsmini.html", + "maintainer": "Pawnerd", + "bootloader": "lufa-dfu", + "width": 3, + "height": 2, + "layouts": { + "KEYMAP": { + "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}] + } + } +} \ No newline at end of file diff --git a/keyboards/knops/mini/keymaps/default/keymap.c b/keyboards/knops/mini/keymaps/default/keymap.c index 40714c8a511..a5a701c88d7 100644 --- a/keyboards/knops/mini/keymaps/default/keymap.c +++ b/keyboards/knops/mini/keymaps/default/keymap.c @@ -1,53 +1,53 @@ -#include "mini.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( + LAYOUT( LT(3, KC_MSTP), KC_VOLU, KC_MPLY, KC_MPRV, KC_VOLD, KC_MNXT), - KEYMAP( + LAYOUT( LT(3, KC_ESC), M(3), M(4), M(5), M(6), M(7)), - KEYMAP( + LAYOUT( LT(3, KC_1), KC_2, KC_3, KC_4, M(0), M(1)), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, RESET, TO(0), TO(1), TO(2)), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - KEYMAP( + LAYOUT( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) }; diff --git a/keyboards/knops/mini/mini.h b/keyboards/knops/mini/mini.h index c9f74711b86..e2d6c546b07 100644 --- a/keyboards/knops/mini/mini.h +++ b/keyboards/knops/mini/mini.h @@ -22,7 +22,7 @@ // The following is an example using the Planck MIT layout // The first section contains all of the arguments // The second converts the arguments into a two-dimensional array -#define KEYMAP( \ +#define LAYOUT( \ K00, K01, K02, K03, K04, K05 \ ) { \ { K00, K01, K02, K03, K04, K05 }, \ From 3d6119856acf6cdcaca575d285970f336d208794 Mon Sep 17 00:00:00 2001 From: krasmaralde Date: Sat, 28 Apr 2018 17:10:30 +0200 Subject: [PATCH 077/152] Addkeymap/tada fakb (#2830) * edited keymap and fitted for tada68 * edited rules to make mouse work * filled config.h to make mouse cursor move more smooth * added descriptive readme --- keyboards/tada68/keymaps/fakb/config.h | 6 +++ keyboards/tada68/keymaps/fakb/keymap.c | 38 ++++++++++++++++ keyboards/tada68/keymaps/fakb/readme.md | 58 +++++++++++++++++++++++++ keyboards/tada68/keymaps/fakb/rules.mk | 21 +++++++++ 4 files changed, 123 insertions(+) create mode 100644 keyboards/tada68/keymaps/fakb/config.h create mode 100755 keyboards/tada68/keymaps/fakb/keymap.c create mode 100755 keyboards/tada68/keymaps/fakb/readme.md create mode 100644 keyboards/tada68/keymaps/fakb/rules.mk diff --git a/keyboards/tada68/keymaps/fakb/config.h b/keyboards/tada68/keymaps/fakb/config.h new file mode 100644 index 00000000000..b0b5394644b --- /dev/null +++ b/keyboards/tada68/keymaps/fakb/config.h @@ -0,0 +1,6 @@ +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_INTERVAL 4 +#define MOUSEKEY_MAX_SPEED 5 +#define MOUSEKEY_TIME_TO_MAX 77 +#define MOUSEKEY_WHEEL_MAX_SPEED 8 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 diff --git a/keyboards/tada68/keymaps/fakb/keymap.c b/keyboards/tada68/keymaps/fakb/keymap.c new file mode 100755 index 00000000000..0cdd6a9b6d9 --- /dev/null +++ b/keyboards/tada68/keymaps/fakb/keymap.c @@ -0,0 +1,38 @@ +#include "tada68.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. +// 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 _______ 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_UP) +#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_ANSI( + 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, KC_ENT ,_______,\ + LSFT_MA,KC_Z ,KC_X ,KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, RSFT_MA,MO(1) ,_______,\ + KC_LCTL,KC_LALT,KC_LGUI, SPCE_MA, KC_RGUI,KC_RALT,_______,_______,_______,_______), + +[1] = KEYMAP_ANSI( + 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_ANSI( + _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,\ + 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/tada68/keymaps/fakb/readme.md b/keyboards/tada68/keymaps/fakb/readme.md new file mode 100755 index 00000000000..563d5bbbaff --- /dev/null +++ b/keyboards/tada68/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 TAB+CTRL + +## 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/tada68/keymaps/fakb/rules.mk b/keyboards/tada68/keymaps/fakb/rules.mk new file mode 100644 index 00000000000..54b79fc9d4f --- /dev/null +++ b/keyboards/tada68/keymaps/fakb/rules.mk @@ -0,0 +1,21 @@ +# Build Options +# change to "no" to disable the options, or define them in the Makefile in +# the appropriate keymap folder that will get included automatically +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI controls +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif From 6f37bd6678d6e27251647f1bea6d7746bdf7c79d Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 28 Apr 2018 02:12:25 -0700 Subject: [PATCH 078/152] Fix Clicky Down code --- quantum/process_keycode/process_clicky.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quantum/process_keycode/process_clicky.c b/quantum/process_keycode/process_clicky.c index 2b9d8a0f76a..f445751e0f1 100644 --- a/quantum/process_keycode/process_clicky.c +++ b/quantum/process_keycode/process_clicky.c @@ -52,7 +52,7 @@ bool process_clicky(uint16_t keycode, keyrecord_t *record) { clicky_freq = new_freq; } } - if (keycode == CLICKY_TOGGLE && record->event.pressed) { + if (keycode == CLICKY_DOWN && record->event.pressed) { float new_freq = clicky_freq / AUDIO_CLICKY_FREQ_FACTOR; if (new_freq > AUDIO_CLICKY_FREQ_MIN) { clicky_freq = new_freq; From 19aa2c34e859946edae24108fe7df69c949b124e Mon Sep 17 00:00:00 2001 From: Andy Date: Sat, 28 Apr 2018 17:57:53 +0200 Subject: [PATCH 079/152] Add dz60 iso layout with vim-style arrows (#2837) --- .../dz60/keymaps/iso_vim_arrow/README.md | 6 ++ keyboards/dz60/keymaps/iso_vim_arrow/keymap.c | 68 +++++++++++++++++++ keyboards/dz60/keymaps/iso_vim_arrow/rules.mk | 15 ++++ 3 files changed, 89 insertions(+) create mode 100644 keyboards/dz60/keymaps/iso_vim_arrow/README.md create mode 100644 keyboards/dz60/keymaps/iso_vim_arrow/keymap.c create mode 100644 keyboards/dz60/keymaps/iso_vim_arrow/rules.mk diff --git a/keyboards/dz60/keymaps/iso_vim_arrow/README.md b/keyboards/dz60/keymaps/iso_vim_arrow/README.md new file mode 100644 index 00000000000..7e4ea7e6cc1 --- /dev/null +++ b/keyboards/dz60/keymaps/iso_vim_arrow/README.md @@ -0,0 +1,6 @@ +# ISO layout with VIM style arrow cluster + +This layout is ISO-DE and similar to a standard 60 ISO layout. There are vim style arrow keys on the function layer and in the bottom right corner of the main layer. + +![Layout](https://i.imgur.com/Wu8VT43.png) + diff --git a/keyboards/dz60/keymaps/iso_vim_arrow/keymap.c b/keyboards/dz60/keymaps/iso_vim_arrow/keymap.c new file mode 100644 index 00000000000..4cdb505607a --- /dev/null +++ b/keyboards/dz60/keymaps/iso_vim_arrow/keymap.c @@ -0,0 +1,68 @@ +#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] = { +/* ISO VIM arrow +* ,-----------------------------------------------------------------------------------------. +* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ß | ´ | BSPC | +* |-----------------------------------------------------------------------------------------+ +* | Tab | Q | W | E | R | T | Z | U | I | O | P | P | Ü | * | | +* |-------------------------------------------------------------------------------------| + +* | Layer_1 | A | S | D | F | G | H | J | K | L | Ö | Ä | # |Enter | +* |-----------------------------------------------------------------------------------------+ +* | Shift| < | Y | X | C | V | B | N | M | , | . | . | - | RShift | +* |-----------------------------------------------------------------------------------------+ +* | LCtrl | LGUI | LAlt | Space | RAlt | Left | Down | Up | Right | +* `-----------------------------------------------------------------------------------------' +*/ + 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, + 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_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_SPC, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT), + + + 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_NO, KC_DEL, + KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_PSCR, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_END, KC_DEL, KC_NO, + KC_LSFT, BL_TOGG, KC_APP, KC_PAUS, KC_INS, KC_NO, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_RSFT, KC_NO, + KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_BSPC, KC_BSPC, KC_DEL, KC_HOME, KC_PGDN, KC_PGUP, KC_END), + +}; + +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; + } +} diff --git a/keyboards/dz60/keymaps/iso_vim_arrow/rules.mk b/keyboards/dz60/keymaps/iso_vim_arrow/rules.mk new file mode 100644 index 00000000000..b5f45d7aa89 --- /dev/null +++ b/keyboards/dz60/keymaps/iso_vim_arrow/rules.mk @@ -0,0 +1,15 @@ +# 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 +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +AUDIO_ENABLE = no +RGBLIGHT_ENABLE = no +AUTO_SHIFT_ENABLE = no # If the time depressed is greater than or equal to the AUTO_SHIFT_TIMEOUT, then a shifted version of the key is emitted. If the time is less than the AUTO_SHIFT_TIMEOUT time, then the normal state is emitted +TAP_DANCE_ENABLE = no From 3b7b1994cd9e3e61fdee84eff78875135642aa6c Mon Sep 17 00:00:00 2001 From: Mattia Dal Ben Date: Sun, 29 Apr 2018 22:01:33 +0200 Subject: [PATCH 080/152] Redox keyboard code (#2843) * Added Redox keyboard with default keymap (IT layout) * Updated manufacturer url * Applied requested changes --- keyboards/redox/config.h | 23 ++ keyboards/redox/i2c.c | 162 ++++++++ keyboards/redox/i2c.h | 49 +++ keyboards/redox/keymaps/default/config.h | 41 ++ keyboards/redox/keymaps/default/keymap.c | 117 ++++++ keyboards/redox/keymaps/default/readme.md | 1 + keyboards/redox/keymaps/default/rules.mk | 5 + keyboards/redox/matrix.c | 455 ++++++++++++++++++++++ keyboards/redox/readme.md | 25 ++ keyboards/redox/redox.c | 16 + keyboards/redox/redox.h | 41 ++ keyboards/redox/rev1/config.h | 88 +++++ keyboards/redox/rev1/rev1.c | 22 ++ keyboards/redox/rev1/rev1.h | 66 ++++ keyboards/redox/rev1/rules.mk | 1 + keyboards/redox/rules.mk | 80 ++++ keyboards/redox/serial.c | 228 +++++++++++ keyboards/redox/serial.h | 26 ++ keyboards/redox/split_util.c | 86 ++++ keyboards/redox/split_util.h | 21 + 20 files changed, 1553 insertions(+) create mode 100644 keyboards/redox/config.h create mode 100644 keyboards/redox/i2c.c create mode 100644 keyboards/redox/i2c.h create mode 100644 keyboards/redox/keymaps/default/config.h create mode 100644 keyboards/redox/keymaps/default/keymap.c create mode 100644 keyboards/redox/keymaps/default/readme.md create mode 100644 keyboards/redox/keymaps/default/rules.mk create mode 100644 keyboards/redox/matrix.c create mode 100644 keyboards/redox/readme.md create mode 100644 keyboards/redox/redox.c create mode 100644 keyboards/redox/redox.h create mode 100644 keyboards/redox/rev1/config.h create mode 100644 keyboards/redox/rev1/rev1.c create mode 100644 keyboards/redox/rev1/rev1.h create mode 100644 keyboards/redox/rev1/rules.mk create mode 100644 keyboards/redox/rules.mk create mode 100644 keyboards/redox/serial.c create mode 100644 keyboards/redox/serial.h create mode 100644 keyboards/redox/split_util.c create mode 100644 keyboards/redox/split_util.h diff --git a/keyboards/redox/config.h b/keyboards/redox/config.h new file mode 100644 index 00000000000..1083ff5f59a --- /dev/null +++ b/keyboards/redox/config.h @@ -0,0 +1,23 @@ +/* +Copyright 2018 Mattia Dal Ben + +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" + +#endif diff --git a/keyboards/redox/i2c.c b/keyboards/redox/i2c.c new file mode 100644 index 00000000000..084c890c405 --- /dev/null +++ b/keyboards/redox/i2c.c @@ -0,0 +1,162 @@ +#include +#include +#include +#include +#include +#include +#include "i2c.h" + +#ifdef USE_I2C + +// Limits the amount of we wait for any one i2c transaction. +// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is +// 9 bits, a single transaction will take around 90μs to complete. +// +// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit +// poll loop takes at least 8 clock cycles to execute +#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8 + +#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE) + +volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; + +static volatile uint8_t slave_buffer_pos; +static volatile bool slave_has_register_set = false; + +// Wait for an i2c operation to finish +inline static +void i2c_delay(void) { + uint16_t lim = 0; + while(!(TWCR & (1<10. + // Check datasheets for more info. + TWBR = ((F_CPU/SCL_CLOCK)-16)/2; +} + +// Start a transaction with the given i2c slave address. The direction of the +// transfer is set with I2C_READ and I2C_WRITE. +// returns: 0 => success +// 1 => error +uint8_t i2c_master_start(uint8_t address) { + TWCR = (1< slave ACK +// 1 => slave NACK +uint8_t i2c_master_write(uint8_t data) { + TWDR = data; + TWCR = (1<= SLAVE_BUFFER_SIZE ) { + ack = 0; + slave_buffer_pos = 0; + } + slave_has_register_set = true; + } else { + i2c_slave_buffer[slave_buffer_pos] = TWDR; + BUFFER_POS_INC(); + } + break; + + case TW_ST_SLA_ACK: + case TW_ST_DATA_ACK: + // master has addressed this device as a slave transmitter and is + // requesting data. + TWDR = i2c_slave_buffer[slave_buffer_pos]; + BUFFER_POS_INC(); + break; + + case TW_BUS_ERROR: // something went wrong, reset twi state + TWCR = 0; + default: + break; + } + // Reset everything, so we are ready for the next TWI interrupt + TWCR |= (1< + +#ifndef F_CPU +#define F_CPU 16000000UL +#endif + +#define I2C_READ 1 +#define I2C_WRITE 0 + +#define I2C_ACK 1 +#define I2C_NACK 0 + +#define SLAVE_BUFFER_SIZE 0x10 + +// i2c SCL clock frequency +#define SCL_CLOCK 100000L + +extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE]; + +void i2c_master_init(void); +uint8_t i2c_master_start(uint8_t address); +void i2c_master_stop(void); +uint8_t i2c_master_write(uint8_t data); +uint8_t i2c_master_read(int); +void i2c_reset_state(void); +void i2c_slave_init(uint8_t address); + + +static inline unsigned char i2c_start_read(unsigned char addr) { + return i2c_master_start((addr << 1) | I2C_READ); +} + +static inline unsigned char i2c_start_write(unsigned char addr) { + return i2c_master_start((addr << 1) | I2C_WRITE); +} + +// from SSD1306 scrips +extern unsigned char i2c_rep_start(unsigned char addr); +extern void i2c_start_wait(unsigned char addr); +extern unsigned char i2c_readAck(void); +extern unsigned char i2c_readNak(void); +extern unsigned char i2c_read(unsigned char ack); + +#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak(); + +#endif diff --git a/keyboards/redox/keymaps/default/config.h b/keyboards/redox/keymaps/default/config.h new file mode 100644 index 00000000000..ef1b4d944fa --- /dev/null +++ b/keyboards/redox/keymaps/default/config.h @@ -0,0 +1,41 @@ +/* +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.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 + +#undef RGBLED_NUM +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 14 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 + +#endif diff --git a/keyboards/redox/keymaps/default/keymap.c b/keyboards/redox/keymaps/default/keymap.c new file mode 100644 index 00000000000..d8fd76d0217 --- /dev/null +++ b/keyboards/redox/keymaps/default/keymap.c @@ -0,0 +1,117 @@ +#include QMK_KEYBOARD_H + +extern keymap_config_t keymap_config; +extern rgblight_config_t rgblight_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 _SYMB 1 +#define _NAV 2 +#define _ADJUST 3 + +enum custom_keycodes { + QWERTY = SAFE_RANGE, + SYMB, + NAV, + ADJUST, +}; + +// Fillers to make layering more clear +#define KC_ KC_TRNS +#define _______ KC_TRNS +#define XXXXXXX KC_NO + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* QWERTY + * ,------------------------------------------------. ,------------------------------------------------. + * |\-Lyr2| 1 | 2 | 3 | 4 | 5 | Lyr1 | | Lyr1 | 6 | 7 | 8 | 9 | 0 |'-Lyr2| + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | è | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Esc | A | S | D | F | G | PgUp | | End | H | J | K | L | ò | à | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | PgDn | | Home | N | M | , | . | ù |-(Sft)| + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * |<(Gui)| + | - |*(Alt)|/(Ctr)|Bcksp | Del | |Enter |Space |ì(AlG)| Left | Down | Up | Right| + * `------------------------------------------------' `------------------------------------------------' + */ + [_QWERTY] = LAYOUT( + //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----. + LT(_NAV, KC_GRV) , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 ,MO(_SYMB), MO(_SYMB), KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,LT(_NAV, KC_MINS), + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T ,RALT(KC_LBRC), RALT(KC_RBRC) , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_LBRC, + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + KC_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , LT(_ADJUST, KC_PGUP), LT( _ADJUST, KC_END) , 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_PGDN, KC_HOME , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_BSLASH,RSFT_T(KC_SLSH), + //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----| + LGUI_T(KC_NONUS_BSLASH),KC_PPLS,KC_PMNS,LALT_T(KC_PAST),LCTL_T(KC_PSLS),KC_BSPC,KC_DEL , KC_ENT , KC_SPC, RALT_T(KC_EQL),KC_LEFT,KC_DOWN, KC_UP ,KC_RGHT + //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----' + ), + +/* Symbols + * ,------------------------------------------------. ,------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | ! | @ | { | } | | | | | | | 7 | 8 | 9 | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | # | $ | [ | ] | ~ | | | | | 4 | 5 | 6 | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | % | ^ | ( | ) | ` | | | | | 1 | 2 | 3 | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | | | | | | | | | | 0 | 0 | . | | | + * `------------------------------------------------' `------------------------------------------------' + */ + + [_SYMB] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, + _______, KC_EXLM, RALT(KC_SCLN), RALT(KC_LCBR), RALT(KC_RCBR), KC_TILD, _______, _______, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, XXXXXXX, XXXXXXX, + _______, RALT(KC_QUOT), KC_DLR , RALT(KC_LBRC), RALT(KC_RBRC), RALT(KC_EQL), _______, _______, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, XXXXXXX, XXXXXXX, + _______, KC_PERC, LSFT(KC_EQL) , LSFT(KC_8), LSFT(KC_9), RALT(KC_MINS), _______, _______, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, KC_PDOT, XXXXXXX, XXXXXXX + ), + +/* Navigation + * ,------------------------------------------------. ,------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | |MOUS_U| |WHEL_U| | | | | | | | | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | |MOUS_L|MOUS_D|MOUS_R|WHEL_D| | | | | LEFT | DOWN | UP |RIGHT | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | | | | | | | | | | | | | | | + * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + * | | | | |MOUS_1|MOUS_2| | | | | | | | | | + * `------------------------------------------------' `------------------------------------------------' + */ + [_NAV] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + XXXXXXX, XXXXXXX, KC_MS_U, XXXXXXX, KC_WH_U, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP , KC_RIGHT,XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX + ), + + [_ADJUST] = LAYOUT( + XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, + XXXXXXX, RESET , RGB_M_P, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, KC_DEL, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX + ) + +}; + +#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); +} + diff --git a/keyboards/redox/keymaps/default/readme.md b/keyboards/redox/keymaps/default/readme.md new file mode 100644 index 00000000000..7f086f6e12b --- /dev/null +++ b/keyboards/redox/keymaps/default/readme.md @@ -0,0 +1 @@ +# The default keymap for redox \ No newline at end of file diff --git a/keyboards/redox/keymaps/default/rules.mk b/keyboards/redox/keymaps/default/rules.mk new file mode 100644 index 00000000000..1e576127880 --- /dev/null +++ b/keyboards/redox/keymaps/default/rules.mk @@ -0,0 +1,5 @@ +RGBLIGHT_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/keyboards/redox/matrix.c b/keyboards/redox/matrix.c new file mode 100644 index 00000000000..20c0f1d3493 --- /dev/null +++ b/keyboards/redox/matrix.c @@ -0,0 +1,455 @@ +/* +Copyright 2018 Mattia Dal Ben + +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 . +*/ + +/* + * scan matrix + */ +#include +#include +#include +#include "wait.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "split_util.h" +#include "pro_micro.h" +#include "config.h" +#include "timer.h" + +#ifdef USE_I2C +# include "i2c.h" +#else // USE_SERIAL +# include "serial.h" +#endif + +#ifndef DEBOUNCING_DELAY +# define DEBOUNCING_DELAY 5 +#endif + +#if (DEBOUNCING_DELAY > 0) + static uint16_t debouncing_time; + static bool debouncing = false; +#endif + +#if (MATRIX_COLS <= 8) +# define print_matrix_header() print("\nr/c 01234567\n") +# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row)) +# define matrix_bitpop(i) bitpop(matrix[i]) +# define ROW_SHIFTER ((uint8_t)1) +#else +# error "Currently only supports 8 COLS" +#endif +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +#define ERROR_DISCONNECT_COUNT 5 + +#define ROWS_PER_HAND (MATRIX_ROWS/2) + +static uint8_t error_count = 0; + +static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; +static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS; + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; +static matrix_row_t matrix_debouncing[MATRIX_ROWS]; + +#if (DIODE_DIRECTION == COL2ROW) + static void init_cols(void); + static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row); + static void unselect_rows(void); + static void select_row(uint8_t row); + static void unselect_row(uint8_t row); +#elif (DIODE_DIRECTION == ROW2COL) + static void init_rows(void); + static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col); + static void unselect_cols(void); + static void unselect_col(uint8_t col); + static void select_col(uint8_t col); +#endif + +__attribute__ ((weak)) +void matrix_init_kb(void) { + matrix_init_user(); +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { + matrix_scan_user(); +} + +__attribute__ ((weak)) +void matrix_init_user(void) { +} + +__attribute__ ((weak)) +void matrix_scan_user(void) { +} + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + debug_enable = true; + debug_matrix = true; + debug_mouse = true; + // initialize row and col + unselect_rows(); + init_cols(); + + TX_RX_LED_INIT; + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + matrix_debouncing[i] = 0; + } + + matrix_init_quantum(); + +} + +uint8_t _matrix_scan(void) +{ + int offset = isLeftHand ? 0 : (ROWS_PER_HAND); +#if (DIODE_DIRECTION == COL2ROW) + // Set row, read cols + for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) { +# if (DEBOUNCING_DELAY > 0) + bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row); + + if (matrix_changed) { + debouncing = true; + debouncing_time = timer_read(); + PORTD ^= (1 << 2); + } + +# else + read_cols_on_row(matrix+offset, current_row); +# endif + + } + +#elif (DIODE_DIRECTION == ROW2COL) + // Set col, read rows + for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) { +# if (DEBOUNCING_DELAY > 0) + bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col); + if (matrix_changed) { + debouncing = true; + debouncing_time = timer_read(); + } +# else + read_rows_on_col(matrix+offset, current_col); +# endif + + } +#endif + +# if (DEBOUNCING_DELAY > 0) + if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) { + for (uint8_t i = 0; i < ROWS_PER_HAND; i++) { + matrix[i+offset] = matrix_debouncing[i+offset]; + } + debouncing = false; + } +# endif + + return 1; +} + +#ifdef USE_I2C + +// Get rows from other half over i2c +int i2c_transaction(void) { + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + + int err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE); + if (err) goto i2c_error; + + // start of matrix stored at 0x00 + err = i2c_master_write(0x00); + if (err) goto i2c_error; + + // Start read + err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ); + if (err) goto i2c_error; + + if (!err) { + int i; + for (i = 0; i < ROWS_PER_HAND-1; ++i) { + matrix[slaveOffset+i] = i2c_master_read(I2C_ACK); + } + matrix[slaveOffset+i] = i2c_master_read(I2C_NACK); + i2c_master_stop(); + } else { +i2c_error: // the cable is disconnceted, or something else went wrong + i2c_reset_state(); + return err; + } + + return 0; +} + +#else // USE_SERIAL + +int serial_transaction(void) { + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + + if (serial_update_buffers()) { + return 1; + } + + for (int i = 0; i < ROWS_PER_HAND; ++i) { + matrix[slaveOffset+i] = serial_slave_buffer[i]; + } + return 0; +} +#endif + +uint8_t matrix_scan(void) +{ + uint8_t ret = _matrix_scan(); + +#ifdef USE_I2C + if( i2c_transaction() ) { +#else // USE_SERIAL + if( serial_transaction() ) { +#endif + // turn on the indicator led when halves are disconnected + TXLED1; + + error_count++; + + if (error_count > ERROR_DISCONNECT_COUNT) { + // reset other half if disconnected + int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0; + for (int i = 0; i < ROWS_PER_HAND; ++i) { + matrix[slaveOffset+i] = 0; + } + } + } else { + // turn off the indicator led on no error + TXLED0; + error_count = 0; + } + matrix_scan_quantum(); + return ret; +} + +void matrix_slave_scan(void) { + _matrix_scan(); + + int offset = (isLeftHand) ? 0 : ROWS_PER_HAND; + +#ifdef USE_I2C + for (int i = 0; i < ROWS_PER_HAND; ++i) { + i2c_slave_buffer[i] = matrix[offset+i]; + } +#else // USE_SERIAL + for (int i = 0; i < ROWS_PER_HAND; ++i) { + serial_slave_buffer[i] = matrix[offset+i]; + } +#endif +} + +bool matrix_is_modified(void) +{ + if (debouncing) return false; + return true; +} + +inline +bool matrix_is_on(uint8_t row, uint8_t col) +{ + return (matrix[row] & ((matrix_row_t)1<> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } +} + +static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) +{ + // Store last value of row prior to reading + matrix_row_t last_row_value = current_matrix[current_row]; + + // Clear data in matrix row + current_matrix[current_row] = 0; + + // Select row and wait for row selecton to stabilize + select_row(current_row); + wait_us(30); + + // For each col... + for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { + + // Select the col pin to read (active low) + uint8_t pin = col_pins[col_index]; + uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)); + + // Populate the matrix row with the state of the col pin + current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index); + } + + // Unselect row + unselect_row(current_row); + + return (last_row_value != current_matrix[current_row]); +} + +static void select_row(uint8_t row) +{ + uint8_t pin = row_pins[row]; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static void unselect_row(uint8_t row) +{ + uint8_t pin = row_pins[row]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI +} + +static void unselect_rows(void) +{ + for(uint8_t x = 0; x < ROWS_PER_HAND; x++) { + uint8_t pin = row_pins[x]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } +} + +#elif (DIODE_DIRECTION == ROW2COL) + +static void init_rows(void) +{ + for(uint8_t x = 0; x < ROWS_PER_HAND; x++) { + uint8_t pin = row_pins[x]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } +} + +static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) +{ + bool matrix_changed = false; + + // Select col and wait for col selecton to stabilize + select_col(current_col); + wait_us(30); + + // For each row... + for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++) + { + + // Store last value of row prior to reading + matrix_row_t last_row_value = current_matrix[row_index]; + + // Check row pin state + if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0) + { + // Pin LO, set col bit + current_matrix[row_index] |= (ROW_SHIFTER << current_col); + } + else + { + // Pin HI, clear col bit + current_matrix[row_index] &= ~(ROW_SHIFTER << current_col); + } + + // Determine if the matrix changed state + if ((last_row_value != current_matrix[row_index]) && !(matrix_changed)) + { + matrix_changed = true; + } + } + + // Unselect col + unselect_col(current_col); + + return matrix_changed; +} + +static void select_col(uint8_t col) +{ + uint8_t pin = col_pins[col]; + _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT + _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW +} + +static void unselect_col(uint8_t col) +{ + uint8_t pin = col_pins[col]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI +} + +static void unselect_cols(void) +{ + for(uint8_t x = 0; x < MATRIX_COLS; x++) { + uint8_t pin = col_pins[x]; + _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN + _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI + } +} + +#endif diff --git a/keyboards/redox/readme.md b/keyboards/redox/readme.md new file mode 100644 index 00000000000..6e1d980a7ae --- /dev/null +++ b/keyboards/redox/readme.md @@ -0,0 +1,25 @@ +# The Redox keyboard + +

+Redox logo +

+ +

+Redox PCB rev1.0 +

+ +**Redox**: the **R**educed **E**rgo**dox** project. More information and building instruction [here](https://github.com/mattdibi/redox-keyboard). + +- Keyboard Maintainer: [Mattia Dal Ben](https://github.com/mattdibi) +- Hardware Supported: Redox PCB rev1.0 w/ Pro Micro +- Hardware Availability: [Falbatech](https://falba.tech/product-category/keyboard-parts/redox-parts/) + +Make example for this keyboard (after setting up your build environment): + + make redox/rev1:default + +Example of flashing this keyboard: + + make redox/rev1:default:avrdude + +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/redox/redox.c b/keyboards/redox/redox.c new file mode 100644 index 00000000000..7fa3545a47c --- /dev/null +++ b/keyboards/redox/redox.c @@ -0,0 +1,16 @@ +/* Copyright 2017 REPLACE_WITH_YOUR_NAME + * + * 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 "redox.h" diff --git a/keyboards/redox/redox.h b/keyboards/redox/redox.h new file mode 100644 index 00000000000..73f5ab85aea --- /dev/null +++ b/keyboards/redox/redox.h @@ -0,0 +1,41 @@ +/* Copyright 2017 REPLACE_WITH_YOUR_NAME + * + * 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 REDOX_H +#define REDOX_H + +#ifdef KEYBOARD_redox_rev1 + #include "rev1.h" +#endif + +// Used to create a keymap using only KC_ prefixed keys +#define LAYOUT_kc( \ + L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \ + L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \ + L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \ + L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \ + L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \ + ) \ + KEYMAP( \ + KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##L06, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, KC_##R06, \ + KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##L16, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, KC_##R16, \ + KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##L26, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, KC_##R26, \ + KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L36, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, KC_##R36, \ + KC_##L40, KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##L45, KC_##L46, KC_##R40, KC_##R41, KC_##R42, KC_##R43, KC_##R44, KC_##R45, KC_##R46 \ + ) + +#include "quantum.h" + +#endif diff --git a/keyboards/redox/rev1/config.h b/keyboards/redox/rev1/config.h new file mode 100644 index 00000000000..f8041f23567 --- /dev/null +++ b/keyboards/redox/rev1/config.h @@ -0,0 +1,88 @@ +/* +Copyright 2018 Mattia Dal Ben + +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 REV1_CONFIG_H +#define REV1_CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x0000 +#define DEVICE_VER 0x0100 +#define MANUFACTURER Falbatech +#define PRODUCT The Redox Keyboard +#define DESCRIPTION Split Ergodox-like 5x7 custom keyboard + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 10 +#define MATRIX_COLS 7 + +// wiring of each half +#define MATRIX_ROW_PINS { D4, D7, E6, B4, B5 } +#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6 } +// #define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, F5} //uncomment this line and comment line above if you need to reverse left-to-right key order + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* define if matrix has ghost */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ +// #define BACKLIGHT_LEVELS 3 + +/* 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)) \ +) + +/* ws2812 RGB LED */ +#define RGB_DI_PIN D3 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 14 // Number of LEDs +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD + +/* + * 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/redox/rev1/rev1.c b/keyboards/redox/rev1/rev1.c new file mode 100644 index 00000000000..2eb7c7c0e83 --- /dev/null +++ b/keyboards/redox/rev1/rev1.c @@ -0,0 +1,22 @@ +#include "redox.h" + + +#ifdef SSD1306OLED +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); +} +#endif + +void matrix_init_kb(void) { + + // // green led on + // DDRD |= (1<<5); + // PORTD &= ~(1<<5); + + // // orange led on + // DDRB |= (1<<0); + // PORTB &= ~(1<<0); + + matrix_init_user(); +}; diff --git a/keyboards/redox/rev1/rev1.h b/keyboards/redox/rev1/rev1.h new file mode 100644 index 00000000000..be62247500b --- /dev/null +++ b/keyboards/redox/rev1/rev1.h @@ -0,0 +1,66 @@ +#ifndef REV1_H +#define REV1_H + +#include "../redox.h" + +//void promicro_bootloader_jmp(bool program); +#include "quantum.h" + + +#ifdef USE_I2C +#include +#ifdef __AVR__ + #include + #include +#endif +#endif + +//void promicro_bootloader_jmp(bool program); + +#ifndef FLIP_HALF +// Standard Keymap +// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left) +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \ + L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \ + L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \ + L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \ + L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05, L06 }, \ + { L10, L11, L12, L13, L14, L15, L16 }, \ + { L20, L21, L22, L23, L24, L25, L26 }, \ + { L30, L31, L32, L33, L34, L35, L36 }, \ + { L40, L41, L42, L43, L44, L45, L46 }, \ + { R06, R05, R04, R03, R02, R01, R00 }, \ + { R16, R15, R14, R13, R12, R11, R10 }, \ + { R26, R25, R24, R23, R22, R21, R20 }, \ + { R36, R35, R34, R33, R32, R31, R30 }, \ + { R46, R45, R44, R43, R42, R41, R40 } \ + } +#else +// Keymap with right side flipped +// (TRRS jack on both halves are to the right) +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \ + L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \ + L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \ + L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \ + L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05, L06 }, \ + { L10, L11, L12, L13, L14, L15, L16 }, \ + { L20, L21, L22, L23, L24, L25, L26 }, \ + { L30, L31, L32, L33, L34, L35, L36 }, \ + { L40, L41, L42, L43, L44, L45, L46 }, \ + { R00, R01, R02, R03, R04, R05, R06 }, \ + { R10, R11, R12, R13, R14, R15, R16 }, \ + { R20, R21, R22, R23, R24, R25, R26 }, \ + { R30, R31, R32, R33, R34, R35, R36 }, \ + { R40, R41, R42, R43, R44, R45, R46 } \ + } +#endif + +#endif diff --git a/keyboards/redox/rev1/rules.mk b/keyboards/redox/rev1/rules.mk new file mode 100644 index 00000000000..f845616741c --- /dev/null +++ b/keyboards/redox/rev1/rules.mk @@ -0,0 +1 @@ +BACKLIGHT_ENABLE = no \ No newline at end of file diff --git a/keyboards/redox/rules.mk b/keyboards/redox/rules.mk new file mode 100644 index 00000000000..3e79bf1fe9d --- /dev/null +++ b/keyboards/redox/rules.mk @@ -0,0 +1,80 @@ +SRC += matrix.c \ + i2c.c \ + split_util.c \ + serial.c + +# MCU name +#MCU = at90usb1286 +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 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 + + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = yes # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +SUBPROJECT_rev1 = yes +USE_I2C = yes + +CUSTOM_MATRIX = yes + +DEFAULT_FOLDER = redox/rev1 diff --git a/keyboards/redox/serial.c b/keyboards/redox/serial.c new file mode 100644 index 00000000000..6faed09ce07 --- /dev/null +++ b/keyboards/redox/serial.c @@ -0,0 +1,228 @@ +/* + * WARNING: be careful changing this code, it is very timing dependent + */ + +#ifndef F_CPU +#define F_CPU 16000000 +#endif + +#include +#include +#include +#include +#include "serial.h" + +#ifdef USE_SERIAL + +// Serial pulse period in microseconds. Its probably a bad idea to lower this +// value. +#define SERIAL_DELAY 24 + +uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0}; +uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0}; + +#define SLAVE_DATA_CORRUPT (1<<0) +volatile uint8_t status = 0; + +inline static +void serial_delay(void) { + _delay_us(SERIAL_DELAY); +} + +inline static +void serial_output(void) { + SERIAL_PIN_DDR |= SERIAL_PIN_MASK; +} + +// make the serial pin an input with pull-up resistor +inline static +void serial_input(void) { + SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK; + SERIAL_PIN_PORT |= SERIAL_PIN_MASK; +} + +inline static +uint8_t serial_read_pin(void) { + return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK); +} + +inline static +void serial_low(void) { + SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK; +} + +inline static +void serial_high(void) { + SERIAL_PIN_PORT |= SERIAL_PIN_MASK; +} + +void serial_master_init(void) { + serial_output(); + serial_high(); +} + +void serial_slave_init(void) { + serial_input(); + + // Enable INT0 + EIMSK |= _BV(INT0); + // Trigger on falling edge of INT0 + EICRA &= ~(_BV(ISC00) | _BV(ISC01)); +} + +// Used by the master to synchronize timing with the slave. +static +void sync_recv(void) { + serial_input(); + // This shouldn't hang if the slave disconnects because the + // serial line will float to high if the slave does disconnect. + while (!serial_read_pin()); + serial_delay(); +} + +// Used by the slave to send a synchronization signal to the master. +static +void sync_send(void) { + serial_output(); + + serial_low(); + serial_delay(); + + serial_high(); +} + +// Reads a byte from the serial line +static +uint8_t serial_read_byte(void) { + uint8_t byte = 0; + serial_input(); + for ( uint8_t i = 0; i < 8; ++i) { + byte = (byte << 1) | serial_read_pin(); + serial_delay(); + _delay_us(1); + } + + return byte; +} + +// Sends a byte with MSB ordering +static +void serial_write_byte(uint8_t data) { + uint8_t b = 8; + serial_output(); + while( b-- ) { + if(data & (1 << b)) { + serial_high(); + } else { + serial_low(); + } + serial_delay(); + } +} + +// interrupt handle to be used by the slave device +ISR(SERIAL_PIN_INTERRUPT) { + sync_send(); + + uint8_t checksum = 0; + for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { + serial_write_byte(serial_slave_buffer[i]); + sync_send(); + checksum += serial_slave_buffer[i]; + } + serial_write_byte(checksum); + sync_send(); + + // wait for the sync to finish sending + serial_delay(); + + // read the middle of pulses + _delay_us(SERIAL_DELAY/2); + + uint8_t checksum_computed = 0; + for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { + serial_master_buffer[i] = serial_read_byte(); + sync_send(); + checksum_computed += serial_master_buffer[i]; + } + uint8_t checksum_received = serial_read_byte(); + sync_send(); + + serial_input(); // end transaction + + if ( checksum_computed != checksum_received ) { + status |= SLAVE_DATA_CORRUPT; + } else { + status &= ~SLAVE_DATA_CORRUPT; + } +} + +inline +bool serial_slave_DATA_CORRUPT(void) { + return status & SLAVE_DATA_CORRUPT; +} + +// Copies the serial_slave_buffer to the master and sends the +// serial_master_buffer to the slave. +// +// Returns: +// 0 => no error +// 1 => slave did not respond +int serial_update_buffers(void) { + // this code is very time dependent, so we need to disable interrupts + cli(); + + // signal to the slave that we want to start a transaction + serial_output(); + serial_low(); + _delay_us(1); + + // wait for the slaves response + serial_input(); + serial_high(); + _delay_us(SERIAL_DELAY); + + // check if the slave is present + if (serial_read_pin()) { + // slave failed to pull the line low, assume not present + sei(); + return 1; + } + + // if the slave is present syncronize with it + sync_recv(); + + uint8_t checksum_computed = 0; + // receive data from the slave + for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) { + serial_slave_buffer[i] = serial_read_byte(); + sync_recv(); + checksum_computed += serial_slave_buffer[i]; + } + uint8_t checksum_received = serial_read_byte(); + sync_recv(); + + if (checksum_computed != checksum_received) { + sei(); + return 1; + } + + uint8_t checksum = 0; + // send data to the slave + for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) { + serial_write_byte(serial_master_buffer[i]); + sync_recv(); + checksum += serial_master_buffer[i]; + } + serial_write_byte(checksum); + sync_recv(); + + // always, release the line when not in use + serial_output(); + serial_high(); + + sei(); + return 0; +} + +#endif diff --git a/keyboards/redox/serial.h b/keyboards/redox/serial.h new file mode 100644 index 00000000000..15fe4db7b4c --- /dev/null +++ b/keyboards/redox/serial.h @@ -0,0 +1,26 @@ +#ifndef MY_SERIAL_H +#define MY_SERIAL_H + +#include "config.h" +#include + +/* TODO: some defines for interrupt setup */ +#define SERIAL_PIN_DDR DDRD +#define SERIAL_PIN_PORT PORTD +#define SERIAL_PIN_INPUT PIND +#define SERIAL_PIN_MASK _BV(PD0) +#define SERIAL_PIN_INTERRUPT INT0_vect + +#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2 +#define SERIAL_MASTER_BUFFER_LENGTH 1 + +// Buffers for master - slave communication +extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH]; +extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH]; + +void serial_master_init(void); +void serial_slave_init(void); +int serial_update_buffers(void); +bool serial_slave_data_corrupt(void); + +#endif diff --git a/keyboards/redox/split_util.c b/keyboards/redox/split_util.c new file mode 100644 index 00000000000..346cbc90894 --- /dev/null +++ b/keyboards/redox/split_util.c @@ -0,0 +1,86 @@ +#include +#include +#include +#include +#include +#include +#include "split_util.h" +#include "matrix.h" +#include "keyboard.h" +#include "config.h" +#include "timer.h" + +#ifdef USE_I2C +# include "i2c.h" +#else +# include "serial.h" +#endif + +volatile bool isLeftHand = true; + +static void setup_handedness(void) { + #ifdef EE_HANDS + isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS); + #else + // I2C_MASTER_RIGHT is deprecated, use MASTER_RIGHT instead, since this works for both serial and i2c + #if defined(I2C_MASTER_RIGHT) || defined(MASTER_RIGHT) + isLeftHand = !has_usb(); + #else + isLeftHand = has_usb(); + #endif + #endif +} + +static void keyboard_master_setup(void) { +#ifdef USE_I2C + i2c_master_init(); +#ifdef SSD1306OLED + matrix_master_OLED_init (); +#endif +#else + serial_master_init(); +#endif +} + +static void keyboard_slave_setup(void) { + timer_init(); +#ifdef USE_I2C + i2c_slave_init(SLAVE_I2C_ADDRESS); +#else + serial_slave_init(); +#endif +} + +bool has_usb(void) { + USBCON |= (1 << OTGPADE); //enables VBUS pad + _delay_us(5); + return (USBSTA & (1< +#include "eeconfig.h" + + +#define SLAVE_I2C_ADDRESS 0x32 + +extern volatile bool isLeftHand; + +// slave version of matix scan, defined in matrix.c +void matrix_slave_scan(void); + +void split_keyboard_setup(void); +bool has_usb(void); +void keyboard_slave_loop(void); + +void matrix_master_OLED_init (void); + +#endif From 7216fd0f47bb41d0a49432095767aef6ead33da2 Mon Sep 17 00:00:00 2001 From: zer09 Date: Mon, 30 Apr 2018 04:02:37 +0800 Subject: [PATCH 081/152] My userspace and lets_split keymap (#2842) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * copied lets_slit to splinter * initial splinter layout * remove unused keymaps * implemented second half of the keyboard * initial definition of tap dance * the tap dance is working now tap dance for right hand 4c 2r hold - shift single tap - n double tap - ñ triple tap - Ñ * clear the keymap.c * put the tap state on to array * the n tilde tap dance should produce right shift if hold * add esc grv tap dance * remove the defined SS_LSFT on tap_dance.h because it was added on the quantum.h * minor cleanup for the keymap * use the X_* on tap dance * added super alt tap dance * use the NO_TAP on tap dance reset * allow track what rows and cols pressed * added the RGUI_ALT * keymap arrangement * use i2c * initial rgb * layer colors * initial rgb pressed key * set the layers led * SUCCESS!!! * cleaning * improve shifted layer * led brightness * initial caps rainbow * rename SET_LED_RGB to SET_LED_RGB_HEX * clean the SET_LED_RGB_HEX and added SET_LED_RGB * clean format * caps lock rainbow * rename key_led to set_key_led * caps lock rainbow enhanced * make varibiables static * change back the loop max value to 360 for the rainbow * add scroll lock to the rainbow led * fix pos calculation of right hand board * add ative keys and make rainbow color can override by key press * remove the TOTAL_MATRIX_POINTS * some improvments for the rgb * call the rgblight_set on the process_record_user * some enhancement for the leds * pass the dim value to set_layer_led and limit the brightness on _VL set the brightness to 2 if the dim value is less than 2 because their is not enought power for the leds. * remove the rgb steps on the config * use the non rev config * remove all the revisions * favor i2c instead of serial and remove all the ref for the serial * clang formatting * allow to save to eeprom the brightness value * add bootloader caterina this will enable soft reset key * initial commit for the userspace * added my own keymap for splinter * first working userspace * move splinter to handwired keyboards * handwired splinter default keymap * move some config to my keymap * cleanup some headers on the keymap * move the EECONFIG_RGB_DIM to the user space * I fix remove the GUI on SPC and ENT * remove the default include on tap_dance.c * add lights.c and refactoring * fix wrong source for led index * seperate the variable on set_layer_led for readabilty. * set the usb max power consumption to 50 * fix led lighting * add new enums for tap dance * use romeve path avr on eeprom.h * fix wrong spelling on TP names * changed the tap dance * allow to set rainbow on some pressed key * add reset key * fix error on matrix.c if ROW2COL is used * add extraflags -flto * See e2352d4 * Got no love from i2c, serial to the rescue * Fix the led will lit up to color red after boot * Trial if the power can handle yellow color at full * Add comment * Use EE_HANDS * add config.h in the use space * KC_N on BL should wrap in SFT_T * See d13567d, put it back but increase 1 level * Fix led soldering mistake * set the tapping_term to 100 * Use TT for the changing the layer * Remove the changing space to enter and vice version on BL and UL * Increate the tapping term * Use tap dance on changing layer * Add assorted layer * propery way to tapdance * Remove DA_EGRV This also fix the wrong placement of the reset and dance lspr should register the KC_LGUI on finished not unregistered. * Remove the media control to the up and down layer * Remove the interrupted state of the tap dance * swapt the space and enter on to th caps * Shorthand * Keymap update * My keymap for lets_split * cleaning --- keyboards/lets_split/keymaps/zer09/config.h | 59 ++++++ keyboards/lets_split/keymaps/zer09/keymap.c | 38 ++++ keyboards/lets_split/keymaps/zer09/keymap.h | 32 ++++ keyboards/lets_split/keymaps/zer09/rules.mk | 6 + users/zer09/config.h | 32 ++++ users/zer09/lights.c | 189 ++++++++++++++++++++ users/zer09/lights.h | 45 +++++ users/zer09/rules.mk | 2 + users/zer09/tap_dance.c | 182 +++++++++++++++++++ users/zer09/tap_dance.h | 55 ++++++ users/zer09/zer09.c | 88 +++++++++ users/zer09/zer09.h | 18 ++ 12 files changed, 746 insertions(+) create mode 100644 keyboards/lets_split/keymaps/zer09/config.h create mode 100644 keyboards/lets_split/keymaps/zer09/keymap.c create mode 100644 keyboards/lets_split/keymaps/zer09/keymap.h create mode 100644 keyboards/lets_split/keymaps/zer09/rules.mk create mode 100644 users/zer09/config.h create mode 100644 users/zer09/lights.c create mode 100644 users/zer09/lights.h create mode 100644 users/zer09/rules.mk create mode 100644 users/zer09/tap_dance.c create mode 100644 users/zer09/tap_dance.h create mode 100644 users/zer09/zer09.c create mode 100644 users/zer09/zer09.h diff --git a/keyboards/lets_split/keymaps/zer09/config.h b/keyboards/lets_split/keymaps/zer09/config.h new file mode 100644 index 00000000000..73438d8a939 --- /dev/null +++ b/keyboards/lets_split/keymaps/zer09/config.h @@ -0,0 +1,59 @@ +/* +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" + +/* key matrix size */ +/* Rows are doubled-up */ +#undef MATRIX_ROWS +#undef MATRIX_COLS +#define MATRIX_ROWS 10 +#define MATRIX_COLS 5 + +#undef MATRIX_ROW_PINS +#undef MATRIX_COL_PINS +#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 } +#define MATRIX_COL_PINS { F7, B1, B3, B2, B6 } + +#define CATERINA_BOOTLOADER +#define USB_MAX_POWER_CONSUMPTION 50 + +/* Use I2C or Serial, not both */ + +#define USE_SERIAL +// #define USE_I2C + +/* Select hand configuration */ + +/* #define MASTER_LEFT */ +// #define MASTER_RIGHT +#define EE_HANDS + +/* ws2812 RGB LED */ +#undef RGBLED_NUM +#define RGB_DI_PIN D3 +#define RGBLIGHT_TIMER +#define RGBLED_NUM 50 +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD +#endif diff --git a/keyboards/lets_split/keymaps/zer09/keymap.c b/keyboards/lets_split/keymaps/zer09/keymap.c new file mode 100644 index 00000000000..8d0eaf14116 --- /dev/null +++ b/keyboards/lets_split/keymaps/zer09/keymap.c @@ -0,0 +1,38 @@ +#include "keymap.h" + +extern keymap_config_t keymap_config; + +#define _baseLayer LAYOUT( \ + KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, /**/KC_F, KC_G, KC_C, KC_R, KC_L, \ + CTL_T(KC_A), SFT_T(KC_O), ALT_T(KC_E), KC_U, KC_I, /**/KC_D, KC_H, ALT_T(KC_T), SFT_T(KC_N), CTL_T(KC_S), \ + KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, /**/KC_B, KC_M, KC_W, KC_V, KC_Z, \ + TD(DA_UPLY), MO(_VL), KC_TAB, KC_BSPACE, KC_ESC, /**/KC_INS, KC_HOME, KC_PGUP, MO(_VL), TD(DA_UPLY), \ + TD(DA_DWLY), TD(DA_LCTL), KC_SPC, TD(DA_LSPR), LSFT_T(KC_CAPS),/**/SFT_T(KC_CAPS), TD(DA_RALT), KC_ENT, TD(DA_RCTL), TD(DA_DWLY)) + +#define _upLayer LAYOUT( \ + KC_4, KC_5, KC_6, _______, _______,/**/ _______, KC_RBRC, _______, _______, _______, \ + LCTL_T(KC_1), LSFT_T(KC_2), LALT_T(KC_3), _______, _______,/**/ KC_LBRC, KC_BSLS, _______, _______, _______, \ + KC_7, KC_8, KC_9, KC_0, KC_GRV, /**/ KC_SLSH, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______,/**/ KC_DEL, KC_END, KC_PGDN, _______, _______, \ + _______, _______, _______, _______, _______,/**/ _______, _______, _______, _______, _______) + +#define _downLayer LAYOUT( \ + KC_F4, KC_F5, KC_F6, KC_F12, _______,/**/ _______, KC_RPRN, _______, _______, _______, \ + LCTL_T(KC_F1), LSFT_T(KC_F2), LALT_T(KC_F3), KC_F11, _______,/**/ KC_LPRN, KC_EQUAL, KC_LEFT, KC_UP, KC_RIGHT, \ + KC_F7, KC_F8, KC_F9, KC_F10, _______,/**/ KC_MINUS, _______, _______, KC_DOWN, _______, \ + _______, _______, _______, _______, _______,/**/ KC_PSCR, KC_SLCK, KC_PAUSE, _______, _______, \ + _______, _______, _______, _______, _______,/**/ _______, _______, _______, _______, _______) + +#define _astdLayer LAYOUT( \ + KC_MPRV, KC_MUTE, _______, _______, _______,/**/KC_PSCR, KC_SLCK, KC_PAUSE, _______, KC_RGUP, \ + KC_MPLY, KC_VOLD, _______, _______, _______,/**/_______, _______, _______, _______, KC_RGDWN, \ + KC_MNXT, KC_VOLU, RESET, _______, _______,/**/_______, _______, RESET, _______, _______, \ + _______, _______, _______, _______, _______,/**/_______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______,/**/_______, _______, _______, _______, _______) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BL] = _baseLayer, + [_UL] = _upLayer, + [_DL] = _downLayer, + [_VL] = _upLayer, + [_AL] = _astdLayer}; diff --git a/keyboards/lets_split/keymaps/zer09/keymap.h b/keyboards/lets_split/keymaps/zer09/keymap.h new file mode 100644 index 00000000000..03f8f480afe --- /dev/null +++ b/keyboards/lets_split/keymaps/zer09/keymap.h @@ -0,0 +1,32 @@ +#include "lets_split.h" +#include "action_layer.h" +#include "eeconfig.h" +#include "tap_dance.h" +#include "zer09.h" + +#ifdef LAYOUT_ortho_4x12 +#undef LAYOUT_ortho_4x12 +#endif + +#ifdef LAYOUT +#undef LAYOUT +#define LAYOUT( \ + L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \ + L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \ + L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \ + L30, L31, L32, L33, L34, R30, R31, R32, R33, R34, \ + L40, L41, L42, L43, L44, R40, R41, R42, R43, R44 \ +) \ + { \ + { L00, L01, L02, L03, L04 }, \ + { L10, L11, L12, L13, L14 }, \ + { L20, L21, L22, L23, L24 }, \ + { L30, L31, L32, L33, L34 }, \ + { L40, L41, L42, L43, L44 }, \ + { R00, R01, R02, R03, R04 }, \ + { R10, R11, R12, R13, R14 }, \ + { R20, R21, R22, R23, R24 }, \ + { R30, R31, R32, R33, R34 }, \ + { R40, R41, R42, R43, R44 } \ + } +#endif diff --git a/keyboards/lets_split/keymaps/zer09/rules.mk b/keyboards/lets_split/keymaps/zer09/rules.mk new file mode 100644 index 00000000000..d8adc708826 --- /dev/null +++ b/keyboards/lets_split/keymaps/zer09/rules.mk @@ -0,0 +1,6 @@ +RGBLIGHT_ENABLE = yes +TAP_DANCE_ENABLE = yes + +ifndef QUANTUM_DIR + include ../../../../Makefile +endif diff --git a/users/zer09/config.h b/users/zer09/config.h new file mode 100644 index 00000000000..76680646225 --- /dev/null +++ b/users/zer09/config.h @@ -0,0 +1,32 @@ +#ifndef USERSPACE_CONFIG_H +#define USERSPACE_CONFIG_H + +#ifndef QMK_KEYS_PER_SCAN +#define QMK_KEYS_PER_SCAN 4 +#endif // !QMK_KEYS_PER_SCAN + +// this makes it possible to do rolling combos (zx) with keys that +// convert to other keys on hold (z becomes ctrl when you hold it, +// and when this option isn't enabled, z rapidly followed by x +// actually sends Ctrl-x. That's bad.) +#define IGNORE_MOD_TAP_INTERRUPT +#undef PERMISSIVE_HOLD +#undef PREVENT_STUCK_MODIFIERS + +#define FORCE_NKRO + +#ifndef TAPPING_TOGGLE +#define TAPPING_TOGGLE 1 +#endif + +#ifdef TAPPING_TERM +#undef TAPPING_TERM +#endif +#define TAPPING_TERM 120 + +// Disable action_get_macro and fn_actions, since we don't use these +// and it saves on space in the firmware. +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION + +#endif diff --git a/users/zer09/lights.c b/users/zer09/lights.c new file mode 100644 index 00000000000..448ef494e81 --- /dev/null +++ b/users/zer09/lights.c @@ -0,0 +1,189 @@ +#include "lights.h" + +static bool active_key_pos[50] = {}; +static uint8_t led_dim = 0; + +volatile led_key rbw_led_keys[RBW] = { + [RBW_LCTL] = {DEFAULT, 21, true}, [RBW_LCAP] = {DEFAULT, 24, false}, + [RBW_LSPR] = {DEFAULT, 23, true}, [RBW_RCTL] = {DEFAULT, 48, true}, + [RBW_RCAP] = {DEFAULT, 45, false}, [RBW_RALT] = {DEFAULT, 46, true}, + [RBW_SCRL] = {DEFAULT, 42, true}}; + +/* Pressed led color. */ +const uint32_t _PC[3] = {0xFF, 0x00, 0x00}; + +/* Layer color. */ +const uint8_t _LC[5][3] = {[_BL] = {0x00, 0x00, 0x00}, + [_UL] = {0x00, 0x00, 0xFF}, + [_VL] = {0xFF, 0xFF, 0x00}, + [_DL] = {0x00, 0xFF, 0x00}, + [_AL] = {0xFF, 0x00, 0x00}}; + +/* Color table by sine wave */ +const uint8_t _LIGHTS[360] = { + 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 4, 5, 6, 7, 8, + 11, 12, 9, 13, 15, 17, 18, 20, 22, 24, 26, 28, 30, 32, 35, + 37, 39, 42, 44, 47, 49, 52, 55, 58, 60, 63, 66, 69, 72, 75, + 78, 81, 85, 88, 91, 94, 97, 101, 104, 107, 111, 114, 117, 121, 124, + 127, 131, 134, 137, 141, 144, 147, 150, 154, 157, 160, 163, 167, 170, 173, + 176, 179, 182, 185, 188, 191, 194, 197, 200, 202, 205, 208, 210, 213, 215, + 217, 220, 222, 224, 226, 229, 231, 232, 234, 236, 238, 239, 241, 242, 244, + 245, 246, 248, 249, 250, 251, 251, 252, 253, 253, 254, 254, 255, 255, 255, + 255, 255, 255, 255, 254, 254, 253, 253, 252, 251, 251, 250, 249, 248, 246, + 245, 244, 242, 241, 239, 238, 236, 234, 232, 231, 229, 226, 224, 222, 220, + 217, 215, 213, 210, 208, 205, 202, 200, 197, 194, 191, 188, 185, 182, 179, + 176, 173, 170, 167, 163, 160, 157, 154, 150, 147, 144, 141, 137, 134, 131, + 127, 124, 121, 117, 114, 111, 107, 104, 101, 97, 94, 91, 88, 85, 81, + 78, 75, 72, 69, 66, 63, 60, 58, 55, 52, 49, 47, 44, 42, 39, + 37, 35, 32, 30, 28, 26, 24, 22, 20, 18, 17, 15, 13, 12, 11, + 9, 8, 7, 6, 5, 4, 3, 2, 2, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + +void set_key_led(keyrecord_t *record, uint8_t lyr) { + static uint8_t base = 5; + + uint8_t r = record->event.key.row; + uint8_t c = record->event.key.col; + uint8_t pos; + + // This was the result of my soldering. + // Lesson of the day: always check. + if (r < 5) { + pos = r % 2 == 0 ? r * base + c : r * base + (base - (c + 1)); + } else { + pos = r % 2 == 0 ? r * base + (base - (c + 1)) : r * base + c; + } + + if (record->event.pressed) { + active_key_pos[pos] = true; + SET_LED_RGB(_PC[0], _PC[1], _PC[2], led_dim, pos); + } else { + active_key_pos[pos] = false; + SET_LED_RGB(_LC[lyr][0], _LC[lyr][1], _LC[lyr][2], led_dim, pos); + } +} + +/* Fix for unknown reason after testin flash the eeprom handedness, + the leds will ligth up after boot. + This should be call in the set layer led.*/ +bool is_first_run(void) { + static uint8_t run = 0; + + if (run == 0) { + run++; + return true; + } else { + return false; + } +} + +bool set_layer_led(uint8_t lyr) { + static uint8_t p_lyr = 0; // Previous layer. + static uint8_t p_dim = 0; // Previous dim. + + if (p_lyr == lyr && p_dim == led_dim && !is_first_run()) { + return false; + } + + p_lyr = lyr; + p_dim = led_dim; + const uint8_t r = _LC[lyr][0]; + const uint8_t g = _LC[lyr][1]; + const uint8_t b = _LC[lyr][2]; + const uint8_t d = (p_lyr == _VL && p_dim < 1) ? 1 : p_dim; + + for (uint8_t i = 0; i < RGBLED_NUM; i++) { + SET_LED_RGB(r, g, b, d, i); + } + + return true; +} + +bool rainbow_loop(uint8_t lyr) { + static uint16_t last_timer = 0; + static uint16_t i = 0; + static uint8_t r, g, b, pos; + + if (timer_elapsed(last_timer) < 8) { + return false; + } + + if (i >= 360) { + i = 0; + } + + last_timer = timer_read(); + r = _LIGHTS[(i + 120) % 360]; + g = _LIGHTS[i]; + b = _LIGHTS[(i + 240) % 360]; + + i++; + + bool set_rbw = false; + + for (uint8_t j = 0; j < RBW; j++) { + pos = rbw_led_keys[j].pos; + + switch (rbw_led_keys[j].status) { + case ENABLED: + if (!active_key_pos[pos] || rbw_led_keys[j].forced) { + SET_LED_RGB(r, g, b, led_dim, pos); + set_rbw = true; + } + + break; + case DISABLED: + if (!active_key_pos[pos] || rbw_led_keys[j].forced) { + SET_LED_RGB(_LC[lyr][0], _LC[lyr][1], _LC[lyr][2], led_dim, pos); + set_rbw = true; + } + + rbw_led_keys[j].status = DEFAULT; + break; + default: + break; + } + } + + return set_rbw; +} + +bool led_brightness(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case RGUP: + if (record->event.pressed && led_dim > 0) { + led_dim--; + eeprom_write_byte(EECONFIG_LED_DIM_LVL, led_dim); + } + + return true; + break; + case RGDWN: + if (record->event.pressed && led_dim < 8) { + led_dim++; + eeprom_write_byte(EECONFIG_LED_DIM_LVL, led_dim); + } + + return true; + break; + default: + return false; + break; + } +} + +void eeprom_read_led_dim_lvl(void) { + led_dim = eeprom_read_byte(EECONFIG_LED_DIM_LVL); + + if (led_dim > 8 || led_dim < 0) { + led_dim = 0; + eeprom_write_byte(EECONFIG_LED_DIM_LVL, led_dim); + } +} diff --git a/users/zer09/lights.h b/users/zer09/lights.h new file mode 100644 index 00000000000..f1bd7245d51 --- /dev/null +++ b/users/zer09/lights.h @@ -0,0 +1,45 @@ +#ifndef LIGHTS_H +#define LIGHTS_H + +#include "eeprom.h" +#include "tap_dance.h" +#include "zer09.h" + +/* Will hold the RGB brightness level */ +#define EECONFIG_LED_DIM_LVL (uint8_t *)15 + +#define SET_LED_RGB(r, g, b, led_dim, pos) \ + setrgb(r >> led_dim, g >> led_dim, b >> led_dim, (LED_TYPE *)&led[pos]) + +typedef enum { + DEFAULT, + ENABLED, + DISABLED, +} led_status; + +typedef struct { + led_status status; + uint8_t pos; + bool forced; +} led_key; + +enum rbw_keys { + RBW_LCTL, + RBW_LCAP, + RBW_LSPR, + RBW_RCTL, + RBW_RCAP, + RBW_RALT, + RBW_SCRL, + RBW +}; + +extern volatile led_key rbw_led_keys[RBW]; + +void set_key_led(keyrecord_t *record, uint8_t lyr); +bool set_layer_led(uint8_t lyr); +bool rainbow_loop(uint8_t lyr); +bool led_brightness(uint16_t keycode, keyrecord_t *record); +void eeprom_read_led_dim_lvl(void); + +#endif diff --git a/users/zer09/rules.mk b/users/zer09/rules.mk new file mode 100644 index 00000000000..43b409eca75 --- /dev/null +++ b/users/zer09/rules.mk @@ -0,0 +1,2 @@ +SRC += zer09.c tap_dance.c lights.c +EXTRAFLAGS += -flto diff --git a/users/zer09/tap_dance.c b/users/zer09/tap_dance.c new file mode 100644 index 00000000000..a23705ad8b5 --- /dev/null +++ b/users/zer09/tap_dance.c @@ -0,0 +1,182 @@ +#include "tap_dance.h" +#include "lights.h" + +qk_tap_dance_action_t tap_dance_actions[] = { + [DA_LCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_lctl_finished, + dance_lctl_reset), + [DA_LSPR] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_lspr_finished, + dance_lspr_reset), + [DA_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_rctl_finished, + dance_rctl_reset), + [DA_RALT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_ralt_finished, + dance_ralt_reset), + [DA_UPLY] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_uply_finished, + dance_uply_reset), + [DA_DWLY] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_dwly_finished, + dance_dwly_reset), +}; + +volatile uint8_t active_layer = _BL; +static tap upltap_state = {.state = 0}; +static tap dwltap_state = {.state = 0}; +static tap lsprtap_state = {.state = 0}; +static tap ralttap_state = {.state = 0}; + +void layer_switcher_tap(uint8_t new_layer) { + layer_off(active_layer); + layer_on(new_layer); + active_layer = new_layer; +} + +int cur_dance(qk_tap_dance_state_t *state) { + switch (state->count) { + case 1: + return state->pressed == 0 ? SINGLE_TAP : SINGLE_HOLD; + case 2: + return state->pressed == 0 ? DOUBLE_TAP : DOUBLE_HOLD; + case 3: + return state->pressed == 0 ? TRIPLE_TAP : TRIPLE_HOLD; + default: + return state->pressed == 0 ? DEFAULT_TAP : DEFAULT_HOLD; + } +} + +void dance_lctl_finished(qk_tap_dance_state_t *state, void *user_data) { + rbw_led_keys[RBW_LCTL].status = ENABLED; + register_code(KC_LCTRL); +}; + +void dance_lctl_reset(qk_tap_dance_state_t *state, void *user_data) { + unregister_code(KC_LCTRL); + rbw_led_keys[RBW_LCTL].status = DISABLED; +}; + +void dance_lspr_finished(qk_tap_dance_state_t *state, void *user_data) { + lsprtap_state.state = cur_dance(state); + + switch (lsprtap_state.state) { + case DOUBLE_HOLD: + rbw_led_keys[RBW_LSPR].status = ENABLED; + register_code(KC_LALT); + break; + default: + register_code(KC_LGUI); + break; + } +}; + +void dance_lspr_reset(qk_tap_dance_state_t *state, void *user_data) { + switch (lsprtap_state.state) { + case DOUBLE_HOLD: + unregister_code(KC_LALT); + rbw_led_keys[RBW_LSPR].status = DISABLED; + break; + default: + unregister_code(KC_LGUI); + break; + } +}; + +void dance_rctl_finished(qk_tap_dance_state_t *state, void *user_data) { + rbw_led_keys[RBW_RCTL].status = ENABLED; + register_code(KC_RCTRL); +}; + +void dance_rctl_reset(qk_tap_dance_state_t *state, void *user_data) { + unregister_code(KC_RCTRL); + rbw_led_keys[RBW_RCTL].status = DISABLED; +}; + +void dance_ralt_finished(qk_tap_dance_state_t *state, void *user_data) { + ralttap_state.state = cur_dance(state); + + switch (ralttap_state.state) { + case DOUBLE_HOLD: + rbw_led_keys[RBW_RALT].status = ENABLED; + unregister_code(KC_LGUI); + break; + default: + register_code(KC_RALT); + break; + } +}; + +void dance_ralt_reset(qk_tap_dance_state_t *state, void *user_data) { + switch (ralttap_state.state) { + case DOUBLE_HOLD: + unregister_code(KC_RGUI); + rbw_led_keys[RBW_RALT].status = DISABLED; + break; + default: + unregister_code(KC_RALT); + break; + } +}; + +void dance_uply_finished(qk_tap_dance_state_t *state, void *user_data) { + upltap_state.state = cur_dance(state); + + switch (upltap_state.state) { + case SINGLE_TAP: + if (active_layer == _UL) { + layer_switcher_tap(_BL); + } else { + layer_switcher_tap(_UL); + } + break; + case SINGLE_HOLD: + layer_switcher_tap(_UL); + break; + default: + layer_switcher_tap(_BL); + break; + } +} + +void dance_uply_reset(qk_tap_dance_state_t *state, void *user_data) { + switch (upltap_state.state) { + case SINGLE_TAP: + break; + case SINGLE_HOLD: + default: + layer_switcher_tap(_BL); + break; + } + upltap_state.state = 0; +} + +void dance_dwly_finished(qk_tap_dance_state_t *state, void *user_data) { + dwltap_state.state = cur_dance(state); + + switch (dwltap_state.state) { + case SINGLE_TAP: + if (active_layer == _DL) { + layer_switcher_tap(_BL); + } else { + layer_switcher_tap(_DL); + } + break; + case SINGLE_HOLD: + layer_switcher_tap(_DL); + break; + case DOUBLE_HOLD: + layer_switcher_tap(_AL); + break; + default: + layer_switcher_tap(_BL); + break; + } +} + +void dance_dwly_reset(qk_tap_dance_state_t *state, void *user_data) { + switch (dwltap_state.state) { + case SINGLE_TAP: + break; + case SINGLE_HOLD: + case DOUBLE_HOLD: + default: + layer_switcher_tap(_BL); + break; + } + dwltap_state.state = 0; +} diff --git a/users/zer09/tap_dance.h b/users/zer09/tap_dance.h new file mode 100644 index 00000000000..555c1592485 --- /dev/null +++ b/users/zer09/tap_dance.h @@ -0,0 +1,55 @@ +#ifndef TAP_DANCE_H +#define TAP_DANCE_H + +#include "zer09.h" + +typedef struct { + int state; +} tap; + +enum { + DEFAULT_TAP, + DEFAULT_HOLD, + SINGLE_TAP, + SINGLE_HOLD, + DOUBLE_TAP, + DOUBLE_HOLD, + TRIPLE_TAP, + TRIPLE_HOLD +}; + +enum { + DA_SAFE_START, + DA_LCTL, + DA_LSPR, + DA_RCTL, + DA_RALT, + DA_UPLY, + DA_DWLY, + DA_SAFE_END +}; + +extern volatile uint8_t active_layer; + +void layer_switcher_tap(uint8_t); +int cur_dance(qk_tap_dance_state_t *); + +void dance_lctl_finished(qk_tap_dance_state_t *, void *); +void dance_lctl_reset(qk_tap_dance_state_t *, void *); + +void dance_lspr_finished(qk_tap_dance_state_t *, void *); +void dance_lspr_reset(qk_tap_dance_state_t *, void *); + +void dance_rctl_finished(qk_tap_dance_state_t *, void *); +void dance_rctl_reset(qk_tap_dance_state_t *, void *); + +void dance_ralt_finished(qk_tap_dance_state_t *, void *); +void dance_ralt_reset(qk_tap_dance_state_t *, void *); + +void dance_uply_finished(qk_tap_dance_state_t *, void *); +void dance_uply_reset(qk_tap_dance_state_t *, void *); + +void dance_dwly_finished(qk_tap_dance_state_t *, void *); +void dance_dwly_reset(qk_tap_dance_state_t *, void *); + +#endif diff --git a/users/zer09/zer09.c b/users/zer09/zer09.c new file mode 100644 index 00000000000..a6768f0a1a7 --- /dev/null +++ b/users/zer09/zer09.c @@ -0,0 +1,88 @@ +#include "zer09.h" +#include "lights.h" +#include "tap_dance.h" + +__attribute__((weak)) void matrix_init_keymap(void) {} + +__attribute__((weak)) void matrix_scan_keymap(void) {} + +__attribute__((weak)) bool process_record_keymap(uint16_t keycode, + keyrecord_t *record) { + return true; +} + +__attribute__((weak)) void led_set_keymap(uint8_t usb_led) {} + +static uint8_t c_lyr = 0; // current layer. + +bool shifted_layer(void) { + static bool is_shifted = false; + + if (c_lyr == _VL) { + if (!is_shifted) { + register_code(KC_LSFT); + is_shifted = true; + return true; + } + } else { + if (is_shifted) { + unregister_code(KC_LSFT); + is_shifted = false; + return true; + } + } + + return false; +} + +void matrix_init_user(void) { + eeprom_read_led_dim_lvl(); + + matrix_init_keymap(); +} + +void matrix_scan_user(void) { + static uint8_t is_leds_changes = 1; + c_lyr = biton32(layer_state); + + is_leds_changes = is_leds_changes << set_layer_led(c_lyr); + is_leds_changes = is_leds_changes << shifted_layer(); + is_leds_changes = is_leds_changes << rainbow_loop(c_lyr); + + if (is_leds_changes > 1) { + rgblight_set(); + is_leds_changes = 1; + } + + matrix_scan_keymap(); +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + set_key_led(record, c_lyr); + + if (led_brightness(keycode, record)) { + rgblight_set(); + return false; + } + + rgblight_set(); + return process_record_keymap(keycode, record); +} + +void led_set_user(uint8_t usb_led) { + if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + rbw_led_keys[RBW_LCAP].status = ENABLED; + rbw_led_keys[RBW_RCAP].status = ENABLED; + } else { + rbw_led_keys[RBW_LCAP].status = DISABLED; + rbw_led_keys[RBW_RCAP].status = DISABLED; + } + + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { + rbw_led_keys[RBW_SCRL].status = ENABLED; + } else { + rbw_led_keys[RBW_SCRL].status = DISABLED; + } + + led_set_keymap(usb_led); +} diff --git a/users/zer09/zer09.h b/users/zer09/zer09.h new file mode 100644 index 00000000000..75c1d3cad49 --- /dev/null +++ b/users/zer09/zer09.h @@ -0,0 +1,18 @@ +#ifndef USERSPACE +#define USERSPACE + +#include "quantum.h" + +enum custom_keycodes { CK_SAFE = SAFE_RANGE, RGUP, RGDWN, NEWPLACEHOLDER }; + +#define _______ KC_TRNS +#define KC_RGUP RGUP +#define KC_RGDWN RGDWN + +#define _BL 0 // The base layer +#define _UL 1 // The up layer +#define _DL 2 // The down layer +#define _VL 3 // The shifted up layer +#define _AL 4 // The assorted layer + +#endif From c7d3f31f641a0cc6d1a6e1555efb22217b334f2f Mon Sep 17 00:00:00 2001 From: Louis Orleans Date: Mon, 30 Apr 2018 07:37:47 -0700 Subject: [PATCH 082/152] board(whitefox): add layout (#2845) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✨ add base layout * ✨ add mouse keys * 🔥 remove unwanted keys * 📝 add readme --- .../whitefox/keymaps/dudeofawesome/keymap.c | 150 ++++++++++++++++++ .../whitefox/keymaps/dudeofawesome/readme.md | 20 +++ 2 files changed, 170 insertions(+) create mode 100644 keyboards/whitefox/keymaps/dudeofawesome/keymap.c create mode 100644 keyboards/whitefox/keymaps/dudeofawesome/readme.md diff --git a/keyboards/whitefox/keymaps/dudeofawesome/keymap.c b/keyboards/whitefox/keymaps/dudeofawesome/keymap.c new file mode 100644 index 00000000000..59102c3ebe3 --- /dev/null +++ b/keyboards/whitefox/keymaps/dudeofawesome/keymap.c @@ -0,0 +1,150 @@ +#include "whitefox.h" + +enum whitefox_layers { + _QWERTY, + _WORKMAN, + _COLEMAK, + _DVORAK, + _FUNC, +}; + +enum whitefox_keycodes { + QWERTY = SAFE_RANGE, + WORKMAN, + COLEMAK, + DVORAK, + FUNC, +}; + +const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* QWERTY (Default Layer) + * ,---------------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|Prt| + * |---------------------------------------------------------------| + * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Backs|Del| + * |---------------------------------------------------------------| + * |Fn/CL | A| S| D| F| G| H| J| K| L| ;| '|Enter |PgU| + * |---------------------------------------------------------------| + * |Shif| | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD| + * |---------------------------------------------------------------| + * |Ctrl|Alt |Gui | Space |Gui |Alt |Ctrl| |Lef|Dow|Rig| + * `---------------------------------------------------------------' + */ + [_QWERTY] = KEYMAP( \ + 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_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_BSPC, KC_DEL, \ + LT(_FUNC,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_PGUP,\ + 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_PGDN,\ + KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RGUI,KC_RALT,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \ + ), + /* Workman + * ,---------------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|Prt| + * |---------------------------------------------------------------| + * |Tab | Q| D| R| W| B| J| F| U| P| ;| [| ]|Backs|Del| + * |---------------------------------------------------------------| + * |Fn/CL | A| S| H| T| G| Y| N| E| O| I| '|Enter |PgU| + * |---------------------------------------------------------------| + * |Shif| | Z| X| M| C| V| K| L| ,| .| /|Shift |Up |PgD| + * |---------------------------------------------------------------| + * |Ctrl|Alt |Gui | Space |Gui |Alt |Ctrl| |Lef|Dow|Rig| + * `---------------------------------------------------------------' + */ + [_WORKMAN] = KEYMAP( \ + 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_PSCR, \ + KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN,KC_LBRC,KC_RBRC,KC_BSPC, KC_DEL, \ + LT(_FUNC,KC_CAPS),KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT,KC_NUHS,KC_ENT, KC_PGUP,\ + KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN,\ + KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RGUI,KC_RALT,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \ + ), + /* Dvorak + * ,---------------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]| `| \|Prt| + * |---------------------------------------------------------------| + * |Tab | '| ,| .| P| Y| F| G| C| R| L| /| =|Backs|Del| + * |---------------------------------------------------------------| + * |Fn/CL | A| O| E| U| I| D| H| T| N| S| -|Enter |PgU| + * |---------------------------------------------------------------| + * |Shif| | ;| Q| J| K| X| B| M| W| V| Z|Shift |Up |PgD| + * |---------------------------------------------------------------| + * |Ctrl|Alt |Gui | Space |Gui |Alt |Ctrl| |Lef|Dow|Rig| + * `---------------------------------------------------------------' + */ + [_DVORAK] = KEYMAP( \ + 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_PSCR, \ + 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, KC_DEL, \ + LT(_FUNC,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_NUHS,KC_ENT, KC_PGUP,\ + KC_LSFT, KC_NUBS,KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z,KC_RSFT, KC_UP, KC_PGDN,\ + KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RGUI,KC_RALT,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \ + ), + /* Colemak + * ,---------------------------------------------------------------. + * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| +| `| \|Prt| + * |---------------------------------------------------------------| + * |Tab | Q| W| F| P| G| J| L| U| Y| ;| [| ]|Backs|Del| + * |---------------------------------------------------------------| + * |Fn/CL | A| R| S| T| D| H| N| E| I| O| '|Enter |PgU| + * |---------------------------------------------------------------| + * |Shif| | Z| X| C| V| B| K| M| ,| .| /|Shift |Up |PgD| + * |---------------------------------------------------------------| + * |Ctrl|Alt |Gui | Space |Gui |Alt |Ctrl| |Lef|Dow|Rig| + * `---------------------------------------------------------------' + */ + [_COLEMAK] = KEYMAP( \ + 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_PSCR, \ + 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_BSPC, KC_DEL, \ + LT(_FUNC,KC_CAPS),KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,KC_NUHS,KC_ENT, KC_PGUP,\ + KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN,\ + KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RGUI,KC_RALT,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \ + ), + /* Function + * ,---------------------------------------------------------------. + * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| | | | + * |---------------------------------------------------------------| + * | | | | | | | | | | | | | | | | + * |---------------------------------------------------------------| + * | | | | | | | | | | | | | | | + * |---------------------------------------------------------------| + * | | | | | | | | | | | | | | | | + * |---------------------------------------------------------------| + * | | | | | | | | | | | | + * `---------------------------------------------------------------' + */ + [_FUNC] = KEYMAP( \ + RESET, 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_WH_D,KC_BTN2,KC_MS_U,KC_BTN1,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,\ + _______,KC_WH_U,KC_MS_L,KC_MS_D,KC_MS_R,AG_NORM,AG_SWAP,QWERTY, WORKMAN,DVORAK, COLEMAK,_______,_______,_______, _______,\ + _______,_______,KC_WH_L,KC_BTN3,KC_WH_R,_______,_______,_______,_______,_______,_______,_______,_______, KC_VOLU,_______,\ + _______,_______,_______, KC_MPLY, _______,_______,_______, KC_MPRV,KC_VOLD,KC_MNXT \ + ), +}; + +// const uint16_t fn_actions[] = { +// [0] = ACTION_LAYER_MOMENTARY(1), +// }; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + case WORKMAN: + if (record->event.pressed) { + set_single_persistent_default_layer(_WORKMAN); + } + return false; + case DVORAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_DVORAK); + } + return false; + case COLEMAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_COLEMAK); + } + return false; + } + return true; +} diff --git a/keyboards/whitefox/keymaps/dudeofawesome/readme.md b/keyboards/whitefox/keymaps/dudeofawesome/readme.md new file mode 100644 index 00000000000..b5a33e74f6f --- /dev/null +++ b/keyboards/whitefox/keymaps/dudeofawesome/readme.md @@ -0,0 +1,20 @@ +# DudeOfAwesome's WhiteFox layout + +![WhiteFox Layout](https://i.imgur.com/TYYqJbP.png) + +## Features + +- Base Layers + - QWERTY + - Workman + - Dvorak + - Colemak +- Mouse Keys + +## Building and flashing + +1. Put your board in DFU mode with either the button on the bottom, or with a software key in your current firmware +1. Flash: + ```bash + $ make whitefox:dudeofawesome:dfu-util + ``` From 2054f20b69f7806943a95956c8f13c03f1f1a3ea Mon Sep 17 00:00:00 2001 From: Tobias O <109529+tobsn@users.noreply.github.com> Date: Mon, 30 Apr 2018 16:39:19 +0200 Subject: [PATCH 083/152] image fix (#2846) --- keyboards/dz60/keymaps/model42/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/dz60/keymaps/model42/readme.md b/keyboards/dz60/keymaps/model42/readme.md index af840750684..04fa11aad57 100644 --- a/keyboards/dz60/keymaps/model42/readme.md +++ b/keyboards/dz60/keymaps/model42/readme.md @@ -4,7 +4,7 @@ ### Layer 0 -![layer 0](https://imgur.com/bOiQI69.png) +![layer 0](https://imgur.com/gELh7Se.png) Conventional ANSI layout. Except: - Backspace has been replaced with 2 keys @@ -27,7 +27,7 @@ RGB underglow and backlight controls, Reset ### Layer 2 -![layer 1](https://imgur.com/gELh7Se.png) +![layer 2](https://imgur.com/bOiQI69.png) F1-F12, PGUP -> HOME, PGDN -> END ### Layer 3 From bc89c4f104a9066a6d5eb80c92c504724a976cd5 Mon Sep 17 00:00:00 2001 From: Eric <22215921+ericywl@users.noreply.github.com> Date: Mon, 30 Apr 2018 22:45:38 +0800 Subject: [PATCH 084/152] QMK Configurator Support for KBD66 and RAMA M6-A (#2849) * Added KBD66 Config * Added RAMA M6-A Config * Changed KEYMAP to LAYOUT for KBD66 and M6-A --- keyboards/kbd66/info.json | 84 +++ keyboards/kbd66/kbd66.h | 2 +- keyboards/kbd66/keymaps/ansi/keymap.c | 6 +- keyboards/kbd66/keymaps/default/keymap.c | 6 +- keyboards/kbd66/keymaps/iso/keymap.c | 6 +- keyboards/kbd66/keymaps/maartenwut/keymap.c | 10 +- keyboards/rama/m6_a/info.json | 19 + keyboards/rama/m6_a/keymaps/default/keymap.c | 542 ++++++++++--------- keyboards/rama/m6_a/keymaps/knops/keymap.c | 173 +++--- keyboards/rama/m6_a/keymaps/krusli/README.md | 10 +- keyboards/rama/m6_a/keymaps/krusli/keymap.c | 100 ++-- keyboards/rama/m6_a/keymaps/naut/keymap.c | 21 +- keyboards/rama/m6_a/m6_a.h | 10 +- 13 files changed, 565 insertions(+), 424 deletions(-) create mode 100644 keyboards/kbd66/info.json create mode 100644 keyboards/rama/m6_a/info.json diff --git a/keyboards/kbd66/info.json b/keyboards/kbd66/info.json new file mode 100644 index 00000000000..c242abb9f0a --- /dev/null +++ b/keyboards/kbd66/info.json @@ -0,0 +1,84 @@ +{ + "keyboard_name": "kbd66", + "url": "", + "maintainer": "qmk", + "width": 16.5, + "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 }, + { "label": "Bkspc", "x": 13, "y": 0 }, + { "label": "Bkspc", "x": 14, "y": 0 }, + { "x": 15.5, "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 }, + { "x": 15.5, "y": 1 }, + { "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.25 }, + { "label": "Fn", "x": 13.5, "y": 3 }, + { "label": "Up", "x": 14.5, "y": 3 }, + { "label": "Ctrl", "x": 0, "y": 4, "w": 1.5 }, + { "label": "Win", "x": 1.5, "y": 4, "w": 1.25 }, + { "label": "Alt", "x": 2.75, "y": 4, "w": 1.25 }, + { "x": 4, "y": 4, "w": 2.75 }, + { "x": 6.75, "y": 4, "w": 2.75 }, + { "label": "Alt", "x": 9.5, "y": 4, "w": 1.25 }, + { "label": "Win", "x": 10.75, "y": 4, "w": 1.25 }, + { "label": "Menu", "x": 12, "y": 4, "w": 1.5 }, + { "label": "Left", "x": 13.5, "y": 4 }, + { "label": "Down", "x": 14.5, "y": 4 }, + { "label": "Right", "x": 15.5, "y": 4 } + ] + } + } +} diff --git a/keyboards/kbd66/kbd66.h b/keyboards/kbd66/kbd66.h index af1156e5e4d..784e8e493e9 100644 --- a/keyboards/kbd66/kbd66.h +++ b/keyboards/kbd66/kbd66.h @@ -19,7 +19,7 @@ #include "quantum.h" // This a shortcut to help you visually see your layout. -#define KEYMAP( \ +#define LAYOUT( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D,k0E, k0F, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1F, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2D, \ diff --git a/keyboards/kbd66/keymaps/ansi/keymap.c b/keyboards/kbd66/keymaps/ansi/keymap.c index f5ffa7b75d1..253d8d5db34 100644 --- a/keyboards/kbd66/keymaps/ansi/keymap.c +++ b/keyboards/kbd66/keymaps/ansi/keymap.c @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "kbd66.h" +#include QMK_KEYBOARD_H #define _____ KC_TRNS #define XXXXX KC_NO @@ -35,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctl |OS |Alt | Space |Alt | Fn |Ctl |LFT|DWN|RIG| * `-------------------------------------------------------------------' */ -[_L0] = KEYMAP( +[_L0] = 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, XXXXX, KC_BSPC, KC_INS, 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, @@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | |PDn|SLk| * `-------------------------------------------------------------------' */ -[_L1] = KEYMAP( +[_L1] = 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_HOME, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, KC_PSCR, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, RESET, _____, _____, _____, _____, _____, _____, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, _____, _____, diff --git a/keyboards/kbd66/keymaps/default/keymap.c b/keyboards/kbd66/keymaps/default/keymap.c index 551df14185b..3e8a90ee55e 100644 --- a/keyboards/kbd66/keymaps/default/keymap.c +++ b/keyboards/kbd66/keymaps/default/keymap.c @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "kbd66.h" +#include QMK_KEYBOARD_H #define _____ KC_TRNS #define XXXXX KC_NO @@ -35,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctl |OS |Alt | Space |Alt | Fn |Ctl |LFT|DWN|RIG| * `-------------------------------------------------------------------' */ -[_L0] = KEYMAP( +[_L0] = 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_GRV, KC_BSPC, KC_INS, 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, @@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | |PDn|SLk| * `-------------------------------------------------------------------' */ -[_L1] = KEYMAP( +[_L1] = 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_HOME, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, KC_PSCR, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, RESET, _____, _____, _____, _____, _____, _____, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, _____, _____, diff --git a/keyboards/kbd66/keymaps/iso/keymap.c b/keyboards/kbd66/keymaps/iso/keymap.c index fa9202cadcf..6b9b7ac4d45 100644 --- a/keyboards/kbd66/keymaps/iso/keymap.c +++ b/keyboards/kbd66/keymaps/iso/keymap.c @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "kbd66.h" +#include QMK_KEYBOARD_H #define _____ KC_TRNS #define XXXXX KC_NO @@ -35,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |Ctl |OS |Alt | Space |Alt | Fn |Ctl |LFT|DWN|RIG| * `-------------------------------------------------------------------' */ -[_L0] = KEYMAP( +[_L0] = 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_GRV, KC_BSPC, KC_INS, 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_NUHS, 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, @@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | |PDn|SLk| * `-------------------------------------------------------------------' */ -[_L1] = KEYMAP( +[_L1] = 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_HOME, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, KC_PSCR, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, RESET, _____, _____, _____, _____, _____, _____, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, _____, _____, diff --git a/keyboards/kbd66/keymaps/maartenwut/keymap.c b/keyboards/kbd66/keymaps/maartenwut/keymap.c index 4ca794c96e6..da438022e6a 100755 --- a/keyboards/kbd66/keymaps/maartenwut/keymap.c +++ b/keyboards/kbd66/keymaps/maartenwut/keymap.c @@ -1,4 +1,4 @@ -#include "kbd66.h" +#include QMK_KEYBOARD_H #define _MA 0 #define _GA 1 @@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Main Layer -[_MA] = KEYMAP( +[_MA] = 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_MPLY, 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, @@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LGUI, KC_LALT, SPACE, SPACE, KC_RALT, KC_RCTRL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT), //Function Layer -[_FL] = KEYMAP( +[_FL] = 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, TRNS, RESET, KC_PSCR, TRNS, ______, ______, ______, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, ______, TRNS, ______, ______, ______, TRNS, TG(_GA), TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, @@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, ______, KC_PGDN, ______), //Arrow keys layer (space bar) -[_AR] = KEYMAP( +[_AR] = 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, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, @@ -38,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), //Game layer (fn + g) -[_GA] = KEYMAP( +[_GA] = LAYOUT( TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, diff --git a/keyboards/rama/m6_a/info.json b/keyboards/rama/m6_a/info.json new file mode 100644 index 00000000000..28dd733dac2 --- /dev/null +++ b/keyboards/rama/m6_a/info.json @@ -0,0 +1,19 @@ +{ + "keyboard_name": "m6-a", + "url": "", + "maintainer": "qmk", + "width": 3, + "height": 2, + "layouts": { + "LAYOUT": { + "layout": [ + { "x": 0, "y": 0 }, + { "x": 1, "y": 0 }, + { "x": 2, "y": 0 }, + { "x": 0, "y": 1 }, + { "x": 1, "y": 1 }, + { "x": 2, "y": 1 } + ] + } + } +} diff --git a/keyboards/rama/m6_a/keymaps/default/keymap.c b/keyboards/rama/m6_a/keymaps/default/keymap.c index 1323ba6f2a0..6b15f3cd102 100644 --- a/keyboards/rama/m6_a/keymaps/default/keymap.c +++ b/keyboards/rama/m6_a/keymaps/default/keymap.c @@ -1,298 +1,324 @@ -#include "../../m6_a.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - KEYMAP( - TO(1), KC_A, KC_B, KC_C, KC_D, KC_E), + LAYOUT( + TO(1), KC_A, KC_B, KC_C, KC_D, KC_E), - KEYMAP( - TO(2), KC_F, KC_G, KC_H, KC_I, KC_J), + LAYOUT( + TO(2), KC_F, KC_G, KC_H, KC_I, KC_J), - KEYMAP( - TO(3), KC_K, KC_L, KC_M, KC_N, KC_O), + LAYOUT( + TO(3), KC_K, KC_L, KC_M, KC_N, KC_O), - KEYMAP( - TO(4), KC_P, KC_Q, KC_R, KC_S, KC_T), + LAYOUT( + TO(4), KC_P, KC_Q, KC_R, KC_S, KC_T), - KEYMAP( - TO(5), KC_U, KC_V, KC_W, KC_X, KC_Y), + LAYOUT( + TO(5), KC_U, KC_V, KC_W, KC_X, KC_Y), - KEYMAP( - TO(0), KC_Z, KC_1, KC_2, KC_3, KC_4) -}; + LAYOUT( + TO(0), KC_Z, KC_1, KC_2, KC_3, KC_4)}; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - //keyevent_t event = record->event; +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + //keyevent_t event = record->event; - switch (id) { - case 0: - if (record->event.pressed) { - return MACRO( T(T), T(G), T(L), T(H), T(F), T(ENT), END ); - } - break; - case 1: - if (record->event.pressed) { - return MACRO( T(T), T(G), T(G), T(ENT), END ); - } - break; - case 2: - if (record->event.pressed) { - return MACRO( D(NO), T(L), U(NO), END ); - } - break; - case 3: - if (record->event.pressed) { - return MACRO( D(LCTL), T(Z), U(LCTL), END ); - } - break; - case 4: - if (record->event.pressed) { - return MACRO( D(LCTL), D(LSFT), T(Z), U(LSFT), U(LCTL), END ); - } - break; - case 5: - if (record->event.pressed) { - return MACRO( D(LCTL), T(X), U(LCTL), END ); - } - break; - case 6: - if (record->event.pressed) { - return MACRO( D(LCTL), T(C), U(LCTL), END ); - } - break; - case 7: - if (record->event.pressed) { - return MACRO( D(LCTL), T(V), U(LCTL), END ); - } - break; - } - return MACRO_NONE; + switch (id) + { + case 0: + if (record->event.pressed) + { + return MACRO(T(T), T(G), T(L), T(H), T(F), T(ENT), END); + } + break; + case 1: + if (record->event.pressed) + { + return MACRO(T(T), T(G), T(G), T(ENT), END); + } + break; + case 2: + if (record->event.pressed) + { + return MACRO(D(NO), T(L), U(NO), END); + } + break; + case 3: + if (record->event.pressed) + { + return MACRO(D(LCTL), T(Z), U(LCTL), END); + } + break; + case 4: + if (record->event.pressed) + { + return MACRO(D(LCTL), D(LSFT), T(Z), U(LSFT), U(LCTL), END); + } + break; + case 5: + if (record->event.pressed) + { + return MACRO(D(LCTL), T(X), U(LCTL), END); + } + break; + case 6: + if (record->event.pressed) + { + return MACRO(D(LCTL), T(C), U(LCTL), END); + } + break; + case 7: + if (record->event.pressed) + { + return MACRO(D(LCTL), T(V), U(LCTL), END); + } + break; + } + return MACRO_NONE; } // M6-A LEDs are connected to D6, B6, F5, B4, C7, F7 // This is 1-based because I copied it from Knops code. -void set_switch_led(int ledId, bool state) { - if(state) { - switch(ledId) { - case 1: - PORTD |= (1<<6); - break; - case 2: - PORTB |= (1<<6); - break; - case 3: - PORTF |= (1<<5); - break; - case 4: - PORTB |= (1<<4); - break; - case 5: - PORTC |= (1<<7); - break; - case 6: - PORTF |= (1<<7); - break; - } - } else { - switch(ledId) { - case 1: - PORTD &= ~(1<<6); - break; - case 2: - PORTB &= ~(1<<6); - break; - case 3: - PORTF &= ~(1<<5); - break; - case 4: - PORTB &= ~(1<<4); - break; - case 5: - PORTC &= ~(1<<7); - break; - case 6: - PORTF &= ~(1<<7); - break; - } - } +void set_switch_led(int ledId, bool state) +{ + if (state) + { + switch (ledId) + { + case 1: + PORTD |= (1 << 6); + break; + case 2: + PORTB |= (1 << 6); + break; + case 3: + PORTF |= (1 << 5); + break; + case 4: + PORTB |= (1 << 4); + break; + case 5: + PORTC |= (1 << 7); + break; + case 6: + PORTF |= (1 << 7); + break; + } + } + else + { + switch (ledId) + { + case 1: + PORTD &= ~(1 << 6); + break; + case 2: + PORTB &= ~(1 << 6); + break; + case 3: + PORTF &= ~(1 << 5); + break; + case 4: + PORTB &= ~(1 << 4); + break; + case 5: + PORTC &= ~(1 << 7); + break; + case 6: + PORTF &= ~(1 << 7); + break; + } + } } - -void set_layer_led(int layerId) { - // UNUSED +void set_layer_led(int layerId) +{ + // UNUSED } void led_set_layer(int layer); -void matrix_init_user(void) { - led_init_ports(); - led_set_layer(0); +void matrix_init_user(void) +{ + led_init_ports(); + led_set_layer(0); } -void matrix_scan_user(void) { +void matrix_scan_user(void) +{ } // M6-A LEDs are connected to D6, B6, F5, B4, C7, F7 -void led_init_ports() { - // Switch #1 - DDRD |= (1<<6); - PORTD &= ~(1<<6); - - // Switch #2 - DDRB |= (1<<6); - PORTB &= ~(1<<6); - - // Switch #3 - DDRF |= (1<<5); - PORTF &= ~(1<<5); - - // Switch #4 - DDRB |= (1<<4); - PORTB &= ~(1<<4); +void led_init_ports() +{ + // Switch #1 + DDRD |= (1 << 6); + PORTD &= ~(1 << 6); - // Switch #5 - DDRC |= (1<<7); - PORTC &= ~(1<<7); - - // Switch #6 - DDRF |= (1<<7); - PORTF &= ~(1<<7); -} + // Switch #2 + DDRB |= (1 << 6); + PORTB &= ~(1 << 6); -void led_set_user(uint8_t usb_led) { + // Switch #3 + DDRF |= (1 << 5); + PORTF &= ~(1 << 5); - if (usb_led & (1 << USB_LED_NUM_LOCK)) { - - } else { - - } + // Switch #4 + DDRB |= (1 << 4); + PORTB &= ~(1 << 4); - if (usb_led & (1 << USB_LED_CAPS_LOCK)) { + // Switch #5 + DDRC |= (1 << 7); + PORTC &= ~(1 << 7); + + // Switch #6 + DDRF |= (1 << 7); + PORTF &= ~(1 << 7); +} - } else { +void led_set_user(uint8_t usb_led) +{ - } + if (usb_led & (1 << USB_LED_NUM_LOCK)) + { + } + else + { + } - if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { - - } else { - - } + if (usb_led & (1 << USB_LED_CAPS_LOCK)) + { + } + else + { + } - if (usb_led & (1 << USB_LED_COMPOSE)) { - - } else { - - } + if (usb_led & (1 << USB_LED_SCROLL_LOCK)) + { + } + else + { + } - if (usb_led & (1 << USB_LED_KANA)) { - - } else { - - } + if (usb_led & (1 << USB_LED_COMPOSE)) + { + } + else + { + } + if (usb_led & (1 << USB_LED_KANA)) + { + } + else + { + } } -void led_set_layer(int layer) { - switch(layer) { - case 0: - set_switch_led(1, true); - set_switch_led(2, false); - set_switch_led(3, false); - set_switch_led(4, false); - set_switch_led(5, false); - set_switch_led(6, false); - break; - case 1: - set_switch_led(1, false); - set_switch_led(2, true); - set_switch_led(3, false); - set_switch_led(4, false); - set_switch_led(5, false); - set_switch_led(6, false); - break; - case 2: - set_switch_led(1, false); - set_switch_led(2, false); - set_switch_led(3, true); - set_switch_led(4, false); - set_switch_led(5, false); - set_switch_led(6, false); - break; - case 3: - set_switch_led(1, false); - set_switch_led(2, false); - set_switch_led(3, false); - set_switch_led(4, true); - set_switch_led(5, false); - set_switch_led(6, false); - break; - case 4: - set_switch_led(1, false); - set_switch_led(2, false); - set_switch_led(3, false); - set_switch_led(4, false); - set_switch_led(5, true); - set_switch_led(6, false); - break; - case 5: - set_switch_led(1, false); - set_switch_led(2, false); - set_switch_led(3, false); - set_switch_led(4, false); - set_switch_led(5, false); - set_switch_led(6, true); - break; - default: - set_switch_led(1, true); - set_switch_led(2, true); - set_switch_led(3, true); - set_switch_led(4, true); - set_switch_led(5, true); - set_switch_led(6, true); - break; - } +void led_set_layer(int layer) +{ + switch (layer) + { + case 0: + set_switch_led(1, true); + set_switch_led(2, false); + set_switch_led(3, false); + set_switch_led(4, false); + set_switch_led(5, false); + set_switch_led(6, false); + break; + case 1: + set_switch_led(1, false); + set_switch_led(2, true); + set_switch_led(3, false); + set_switch_led(4, false); + set_switch_led(5, false); + set_switch_led(6, false); + break; + case 2: + set_switch_led(1, false); + set_switch_led(2, false); + set_switch_led(3, true); + set_switch_led(4, false); + set_switch_led(5, false); + set_switch_led(6, false); + break; + case 3: + set_switch_led(1, false); + set_switch_led(2, false); + set_switch_led(3, false); + set_switch_led(4, true); + set_switch_led(5, false); + set_switch_led(6, false); + break; + case 4: + set_switch_led(1, false); + set_switch_led(2, false); + set_switch_led(3, false); + set_switch_led(4, false); + set_switch_led(5, true); + set_switch_led(6, false); + break; + case 5: + set_switch_led(1, false); + set_switch_led(2, false); + set_switch_led(3, false); + set_switch_led(4, false); + set_switch_led(5, false); + set_switch_led(6, true); + break; + default: + set_switch_led(1, true); + set_switch_led(2, true); + set_switch_led(3, true); + set_switch_led(4, true); + set_switch_led(5, true); + set_switch_led(6, true); + break; + } } -bool process_record_user (uint16_t keycode, keyrecord_t *record) { - switch ( keycode ) - { - case TO( 0 ): - if ( record->event.pressed ) - { - led_set_layer( 0 ); - } - break; - case TO( 1 ): - if ( record->event.pressed ) - { - led_set_layer( 1 ); - } - break; - case TO( 2 ): - if ( record->event.pressed ) - { - led_set_layer( 2 ); - } - break; - case TO( 3 ): - if ( record->event.pressed ) - { - led_set_layer( 3 ); - } - break; - case TO( 4 ): - if ( record->event.pressed ) - { - led_set_layer( 4 ); - } - break; - case TO( 5 ): - if ( record->event.pressed ) - { - led_set_layer( 5 ); - } - break; - } - return true; +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + switch (keycode) + { + case TO(0): + if (record->event.pressed) + { + led_set_layer(0); + } + break; + case TO(1): + if (record->event.pressed) + { + led_set_layer(1); + } + break; + case TO(2): + if (record->event.pressed) + { + led_set_layer(2); + } + break; + case TO(3): + if (record->event.pressed) + { + led_set_layer(3); + } + break; + case TO(4): + if (record->event.pressed) + { + led_set_layer(4); + } + break; + case TO(5): + if (record->event.pressed) + { + led_set_layer(5); + } + break; + } + return true; } diff --git a/keyboards/rama/m6_a/keymaps/knops/keymap.c b/keyboards/rama/m6_a/keymaps/knops/keymap.c index 912147f4b4b..d687fe85166 100644 --- a/keyboards/rama/m6_a/keymaps/knops/keymap.c +++ b/keyboards/rama/m6_a/keymaps/knops/keymap.c @@ -1,92 +1,100 @@ -#include "../../m6_a.h" +#include QMK_KEYBOARD_H /*KNOPS_MISC*/ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /*KNOPS_KEYMAP*/ + /*KNOPS_LAYOUT*/ }; -void set_led_state(int ledId, bool state) { - if(state) { - switch(ledId) { - case 0: - PORTD |= (1<<6); - break; - case 1: - PORTB |= (1<<6); - break; - case 2: - PORTF |= (1<<5); - break; - case 3: - PORTB |= (1<<4); - break; - case 4: - PORTC |= (1<<7); - break; - case 5: - PORTF |= (1<<7); - break; - } - } else { - switch(ledId) { - case 0: - PORTD &= ~(1<<6); - break; - case 1: - PORTB &= ~(1<<6); - break; - case 2: - PORTF &= ~(1<<5); - break; - case 3: - PORTB &= ~(1<<4); - break; - case 4: - PORTC &= ~(1<<7); - break; - case 5: - PORTF &= ~(1<<7); - break; - } - } +void set_led_state(int ledId, bool state) +{ + if (state) + { + switch (ledId) + { + case 0: + PORTD |= (1 << 6); + break; + case 1: + PORTB |= (1 << 6); + break; + case 2: + PORTF |= (1 << 5); + break; + case 3: + PORTB |= (1 << 4); + break; + case 4: + PORTC |= (1 << 7); + break; + case 5: + PORTF |= (1 << 7); + break; + } + } + else + { + switch (ledId) + { + case 0: + PORTD &= ~(1 << 6); + break; + case 1: + PORTB &= ~(1 << 6); + break; + case 2: + PORTF &= ~(1 << 5); + break; + case 3: + PORTB &= ~(1 << 4); + break; + case 4: + PORTC &= ~(1 << 7); + break; + case 5: + PORTF &= ~(1 << 7); + break; + } + } } -void led_init_ports() { - // Switch #1 - DDRD |= (1<<6); - PORTD &= ~(1<<6); - - // Switch #2 - DDRB |= (1<<6); - PORTB &= ~(1<<6); - - // Switch #3 - DDRF |= (1<<5); - PORTF &= ~(1<<5); - - // Switch #4 - DDRB |= (1<<4); - PORTB &= ~(1<<4); - - // Switch #5 - DDRC |= (1<<7); - PORTC &= ~(1<<7); - - // Switch #6 - DDRF |= (1<<7); - PORTF &= ~(1<<7); +void led_init_ports() +{ + // Switch #1 + DDRD |= (1 << 6); + PORTD &= ~(1 << 6); + + // Switch #2 + DDRB |= (1 << 6); + PORTB &= ~(1 << 6); + + // Switch #3 + DDRF |= (1 << 5); + PORTF &= ~(1 << 5); + + // Switch #4 + DDRB |= (1 << 4); + PORTB &= ~(1 << 4); + + // Switch #5 + DDRC |= (1 << 7); + PORTC &= ~(1 << 7); + + // Switch #6 + DDRF |= (1 << 7); + PORTF &= ~(1 << 7); } -void led_set_layer(int layer) { +void led_set_layer(int layer) +{ /*KNOPS_SIMPLELED_STATES*/ - } -void matrix_init_user(void) { +void matrix_init_user(void) +{ led_init_ports(); led_set_layer(0); @@ -94,27 +102,28 @@ void matrix_init_user(void) { /*KNOPS_INIT*/ } -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) +{ //keyevent_t event = record->event; /*KNOPS_MACRO*/ - return NULL; + return NULL; } -void matrix_scan_user(void) { +void matrix_scan_user(void) +{ /*KNOPS_SCAN*/ } -void led_set_user(uint8_t usb_led) { +void led_set_user(uint8_t usb_led) +{ /*KNOPS_FUNCTIONALLED_STATES*/ - } -bool process_record_user(uint16_t keycode, keyrecord_t *record) { +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ /*KNOPS_PROCESS_STATE*/ - return NULL; + return NULL; } - - diff --git a/keyboards/rama/m6_a/keymaps/krusli/README.md b/keyboards/rama/m6_a/keymaps/krusli/README.md index 771b47a475f..7c1fa38fcbb 100644 --- a/keyboards/rama/m6_a/keymaps/krusli/README.md +++ b/keyboards/rama/m6_a/keymaps/krusli/README.md @@ -6,12 +6,14 @@ Keymap was from my own port for the M6-A before official support was added, thus Top-right button acts as a "toggle between layers" button. Layer 0 -> Layer 1 -> Layer 2 -> Layer 0 -> ... -- Layer 0: Git and Discord shortcuts -- Layer 1: Media playback and volume controls -- Layer 2: Osu! gamepad layer +* Layer 0: Git and Discord shortcuts +* Layer 1: Media playback and volume controls +* Layer 2: Osu! gamepad layer ## Helpful alternative keymaps (WIP) + ### Arrow cluster + Use [karabiner-elements](https://github.com/tekezo/Karabiner-Elements) on macOS so that the state of the modifiers (shift, caps lock) are synchronised between keyboards (for shift + arrow key text selection, for example). It's also a handy tool for customising keyboard behaviour on a Mac. On Windows/Linux modifier state should be shared between all keyboards by default. @@ -19,7 +21,7 @@ On Windows/Linux modifier state should be shared between all keyboards by defaul Installation: install [homebrew](https://brew.sh) and run `brew install Caskroom/cask/karabiner-elements`. ```C -KEYMAP( +LAYOUT( KC_ESC, KC_UP, TO(_LAYER0), KC_LEFT, KC_DOWN, KC_RIGHT ) diff --git a/keyboards/rama/m6_a/keymaps/krusli/keymap.c b/keyboards/rama/m6_a/keymaps/krusli/keymap.c index 679d0bc43ba..c8775f4eae5 100644 --- a/keyboards/rama/m6_a/keymaps/krusli/keymap.c +++ b/keyboards/rama/m6_a/keymaps/krusli/keymap.c @@ -1,4 +1,4 @@ -#include "../../m6_a.h" +#include QMK_KEYBOARD_H #include "action_layer.h" #include "eeconfig.h" @@ -9,64 +9,66 @@ extern keymap_config_t keymap_config; // Layer names don't all need to be of the same length, obviously, and you can also skip them // entirely and just use numbers. -enum layers { - _LAYER0, - _LAYER1, - _LAYER2 +enum layers +{ + _LAYER0, + _LAYER1, + _LAYER2 }; -enum custom_keycodes { - GIT_ADD = SAFE_RANGE, - GIT_COMMIT, - GIT_PUSH, - MUTE, - DEAFEN +enum custom_keycodes +{ + GIT_ADD = SAFE_RANGE, + GIT_COMMIT, + GIT_PUSH, + MUTE, + DEAFEN }; -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (record->event.pressed) { - switch(keycode) { - case GIT_ADD: - SEND_STRING("git add ."SS_TAP(X_ENTER)); - break; - case GIT_COMMIT: - SEND_STRING("git commit -m "SS_DOWN(X_LSHIFT)SS_TAP(X_QUOTE)SS_UP(X_LSHIFT)); - break; - case GIT_PUSH: - SEND_STRING("git push"SS_TAP(X_ENTER)); - break; - case MUTE: - SEND_STRING(SS_LGUI(SS_LSFT("M"))); - break; - case DEAFEN: - SEND_STRING(SS_LGUI(SS_LSFT("D"))); - break; - return false; - } - } - return true; +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + if (record->event.pressed) + { + switch (keycode) + { + case GIT_ADD: + SEND_STRING("git add ." SS_TAP(X_ENTER)); + break; + case GIT_COMMIT: + SEND_STRING("git commit -m " SS_DOWN(X_LSHIFT) SS_TAP(X_QUOTE) SS_UP(X_LSHIFT)); + break; + case GIT_PUSH: + SEND_STRING("git push" SS_TAP(X_ENTER)); + break; + case MUTE: + SEND_STRING(SS_LGUI(SS_LSFT("M"))); + break; + case DEAFEN: + SEND_STRING(SS_LGUI(SS_LSFT("D"))); + break; + return false; + } + } + return true; }; #define _______ KC_TRNS #define XXXXXXX KC_NO const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_LAYER0] = KEYMAP( - MUTE, DEAFEN, TO(_LAYER1), - GIT_ADD, GIT_COMMIT, GIT_PUSH - ), - [_LAYER1] = KEYMAP( - KC_VOLD, KC_VOLU, TO(_LAYER2), - KC_MRWD, KC_MPLY, KC_MNXT - ), - [_LAYER2] = KEYMAP( - KC_ESC, KC_UP, TO(_LAYER0), - KC_Z, KC_X, KC_SPACE - ) -}; + [_LAYER0] = LAYOUT( + MUTE, DEAFEN, TO(_LAYER1), + GIT_ADD, GIT_COMMIT, GIT_PUSH), + [_LAYER1] = LAYOUT( + KC_VOLD, KC_VOLU, TO(_LAYER2), + KC_MRWD, KC_MPLY, KC_MNXT), + [_LAYER2] = LAYOUT( + KC_ESC, KC_UP, TO(_LAYER0), + KC_Z, KC_X, KC_SPACE)}; -void matrix_init_user(void) { - #ifdef BACKLIGHT_ENABLE +void matrix_init_user(void) +{ +#ifdef BACKLIGHT_ENABLE backlight_level(0); - #endif +#endif } diff --git a/keyboards/rama/m6_a/keymaps/naut/keymap.c b/keyboards/rama/m6_a/keymaps/naut/keymap.c index 6ef59e01a92..df4cf9be373 100644 --- a/keyboards/rama/m6_a/keymaps/naut/keymap.c +++ b/keyboards/rama/m6_a/keymaps/naut/keymap.c @@ -1,18 +1,17 @@ -#include "../../m6_a.h" +#include QMK_KEYBOARD_H // Define Layers #define _BASE 0 -#define _FNX 1 +#define _FNX 1 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -// Base Layer - [_BASE] = KEYMAP( - TO(1), KC_UP, KC_PGDN, - KC_LEFT,KC_DOWN,KC_RGHT), + // Base Layer + [_BASE] = LAYOUT( + TO(1), KC_UP, KC_PGDN, + KC_LEFT, KC_DOWN, KC_RGHT), -// Fn Layer - [_FNX] = KEYMAP( - TO(0),KC_VOLU,KC_MPLY, - KC_MRWD,KC_VOLD,KC_MFFD) -}; \ No newline at end of file + // Fn Layer + [_FNX] = LAYOUT( + TO(0), KC_VOLU, KC_MPLY, + KC_MRWD, KC_VOLD, KC_MFFD)}; \ No newline at end of file diff --git a/keyboards/rama/m6_a/m6_a.h b/keyboards/rama/m6_a/m6_a.h index 6809c2cc92f..d3c7bad3323 100644 --- a/keyboards/rama/m6_a/m6_a.h +++ b/keyboards/rama/m6_a/m6_a.h @@ -21,9 +21,9 @@ // This a shortcut to help you visually see your layout. // The first section contains all of the arguments // The second converts the arguments into a two-dimensional array -#define KEYMAP( \ - K00, K01, K02, K03, K04, K05 \ -) { \ - { K00, K01, K02, K03, K04, K05 }, \ -} +#define LAYOUT( \ + K00, K01, K02, K03, K04, K05) \ + { \ + {K00, K01, K02, K03, K04, K05}, \ + } #endif // RAMA_M6_A From de97c560f5b731f45f70b92d82509cc3ba97b9e9 Mon Sep 17 00:00:00 2001 From: Eric <22215921+ericywl@users.noreply.github.com> Date: Mon, 30 Apr 2018 22:46:23 +0800 Subject: [PATCH 085/152] Added FC980C Config (#2850) --- keyboards/fc980c/fc980c.h | 54 +++++---- keyboards/fc980c/info.json | 111 ++++++++++++++++++ .../keymaps/actuation-point-example/keymap.c | 93 ++++++++------- .../fc980c/keymaps/coloneljesus/keymap.c | 35 +++--- keyboards/fc980c/keymaps/default/keymap.c | 35 +++--- keyboards/fc980c/matrix.c | 2 +- 6 files changed, 222 insertions(+), 108 deletions(-) create mode 100644 keyboards/fc980c/info.json diff --git a/keyboards/fc980c/fc980c.h b/keyboards/fc980c/fc980c.h index c3992bbed8f..74c46806131 100644 --- a/keyboards/fc980c/fc980c.h +++ b/keyboards/fc980c/fc980c.h @@ -37,33 +37,35 @@ along with this program. If not, see . ---------------------------------------------------------------------------------------------------------------------- */ -#define KEYMAP( \ - K0D, K2D,K5D,K3D,K6D,K7D,K7F,K7E,K7C,K72,K71,K70,K73, K74,K76,K77,K75, \ - K0A,K69,K59,K58,K5B,K6F,K5F,K5E,K6C,K5C,K52,K51,K50,K55, K54,K56,K57,K65, \ - K6A,K39,K68,K6B,K3B,K3F,K6E,K3E,K3C,K62,K61,K60,K33,K53, K64,K66,K67,K25, \ - K3A,K29,K38,K28,K2B,K2F,K2E,K2C,K1C,K32,K31,K20, K63, K24,K26,K27, \ - K2A, K18,K08,K1B,K0B,K1F,K1E,K0E,K22,K11,K21, K30, K34, K14,K16,K17,K15, \ - K1A,K09,K19, K0F, K02,K01,K10, K00,K04,K06, K07,K05 \ -) { \ - { K00, K01, K02, KC_NO,K04, K05, K06, K07 , \ - K08, K09, K0A, K0B, KC_NO,K0D, K0E, K0F }, \ - { K10, K11, KC_NO,KC_NO,K14, K15, K16, K17 , \ - K18, K19, K1A, K1B, K1C, KC_NO,K1E, K1F }, \ - { K20, K21, K22, KC_NO,K24, K25, K26, K27 , \ - K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \ - { K30, K31, K32, K33, K34, KC_NO,KC_NO,KC_NO , \ - K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \ - { 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 }, \ - { K50, K51, K52, K53, K54, K55, K56, K57 , \ - K58, K59, KC_NO,K5B, K5C, K5D, K5E, K5F }, \ - { K60, K61, K62, K63, K64, K65, K66, K67 , \ - K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \ - { K70, K71, K72, K73, K74, K75, K76, K77 , \ - KC_NO,KC_NO,KC_NO,KC_NO,K7C, K7D, K7E, K7F } \ -} +#define LAYOUT( \ + K0D, K2D, K5D, K3D, K6D, K7D, K7F, K7E, K7C, K72, K71, K70, K73, K74, K76, K77, K75, \ + K0A, K69, K59, K58, K5B, K6F, K5F, K5E, K6C, K5C, K52, K51, K50, K55, K54, K56, K57, K65, \ + K6A, K39, K68, K6B, K3B, K3F, K6E, K3E, K3C, K62, K61, K60, K33, K53, K64, K66, K67, K25, \ + K3A, K29, K38, K28, K2B, K2F, K2E, K2C, K1C, K32, K31, K20, K63, K24, K26, K27, \ + K2A, K18, K08, K1B, K0B, K1F, K1E, K0E, K22, K11, K21, K30, K34, K14, K16, K17, K15, \ + K1A, K09, K19, K0F, K02, K01, K10, K00, K04, K06, K07, K05) \ + { \ + {K00, K01, K02, KC_NO, K04, K05, K06, K07, \ + K08, K09, K0A, K0B, KC_NO, K0D, K0E, K0F}, \ + {K10, K11, KC_NO, KC_NO, K14, K15, K16, K17, \ + K18, K19, K1A, K1B, K1C, KC_NO, K1E, K1F}, \ + {K20, K21, K22, KC_NO, K24, K25, K26, K27, \ + K28, K29, K2A, K2B, K2C, K2D, K2E, K2F}, \ + {K30, K31, K32, K33, K34, KC_NO, KC_NO, KC_NO, \ + K38, K39, K3A, K3B, K3C, K3D, K3E, K3F}, \ + {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}, \ + {K50, K51, K52, K53, K54, K55, K56, K57, \ + K58, K59, KC_NO, K5B, K5C, K5D, K5E, K5F}, \ + {K60, K61, K62, K63, K64, K65, K66, K67, \ + K68, K69, K6A, K6B, K6C, K6D, K6E, K6F}, \ + { \ + K70, K71, K72, K73, K74, K75, K76, K77, \ + KC_NO, KC_NO, KC_NO, KC_NO, K7C, K7D, K7E, K7F \ + } \ + } /* -KEYMAP( +LAYOUT( _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______, diff --git a/keyboards/fc980c/info.json b/keyboards/fc980c/info.json new file mode 100644 index 00000000000..f3007f2f848 --- /dev/null +++ b/keyboards/fc980c/info.json @@ -0,0 +1,111 @@ +{ + "keyboard_name": "fc980c", + "url": "", + "maintainer": "qmk", + "width": 19.5, + "height": 6.75, + "layouts": { + "LAYOUT": { + "layout": [ + { "label": "Esc", "x": 0, "y": 0 }, + { "label": "F1", "x": 2, "y": 0 }, + { "label": "F2", "x": 3, "y": 0 }, + { "label": "F3", "x": 4, "y": 0 }, + { "label": "F4", "x": 5, "y": 0 }, + { "label": "F5", "x": 6.5, "y": 0 }, + { "label": "F6", "x": 7.5, "y": 0 }, + { "label": "F7", "x": 8.5, "y": 0 }, + { "label": "F8", "x": 9.5, "y": 0 }, + { "label": "F9", "x": 11, "y": 0 }, + { "label": "F10", "x": 12, "y": 0 }, + { "label": "F11", "x": 13, "y": 0 }, + { "label": "F12", "x": 14, "y": 0 }, + { "label": "Delete", "x": 15.5, "y": 0 }, + { "label": "Insert", "x": 16.5, "y": 0 }, + { "label": "Pg Up", "x": 17.5, "y": 0 }, + { "label": "Pg Dn", "x": 18.5, "y": 0 }, + { "label": "~", "x": 0, "y": 1.5 }, + { "label": "!", "x": 1, "y": 1.5 }, + { "label": "@", "x": 2, "y": 1.5 }, + { "label": "#", "x": 3, "y": 1.5 }, + { "label": "$", "x": 4, "y": 1.5 }, + { "label": "%", "x": 5, "y": 1.5 }, + { "label": "^", "x": 6, "y": 1.5 }, + { "label": "&", "x": 7, "y": 1.5 }, + { "label": "*", "x": 8, "y": 1.5 }, + { "label": "(", "x": 9, "y": 1.5 }, + { "label": ")", "x": 10, "y": 1.5 }, + { "label": "_", "x": 11, "y": 1.5 }, + { "label": "+", "x": 12, "y": 1.5 }, + { "label": "Backspace", "x": 13, "y": 1.5, "w": 2 }, + { "label": "Num Lock", "x": 15.5, "y": 1.5 }, + { "label": "/", "x": 16.5, "y": 1.5 }, + { "label": "*", "x": 17.5, "y": 1.5 }, + { "label": "-", "x": 18.5, "y": 1.5 }, + { "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 }, + { "label": "Q", "x": 1.5, "y": 2.5 }, + { "label": "W", "x": 2.5, "y": 2.5 }, + { "label": "E", "x": 3.5, "y": 2.5 }, + { "label": "R", "x": 4.5, "y": 2.5 }, + { "label": "T", "x": 5.5, "y": 2.5 }, + { "label": "Y", "x": 6.5, "y": 2.5 }, + { "label": "U", "x": 7.5, "y": 2.5 }, + { "label": "I", "x": 8.5, "y": 2.5 }, + { "label": "O", "x": 9.5, "y": 2.5 }, + { "label": "P", "x": 10.5, "y": 2.5 }, + { "label": "{", "x": 11.5, "y": 2.5 }, + { "label": "}", "x": 12.5, "y": 2.5 }, + { "label": "|", "x": 13.5, "y": 2.5, "w": 1.5 }, + { "label": "7", "x": 15.5, "y": 2.5 }, + { "label": "8", "x": 16.5, "y": 2.5 }, + { "label": "9", "x": 17.5, "y": 2.5 }, + { "label": "+", "x": 18.5, "y": 2.5, "h": 2 }, + { "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 }, + { "label": "A", "x": 1.75, "y": 3.5 }, + { "label": "S", "x": 2.75, "y": 3.5 }, + { "label": "D", "x": 3.75, "y": 3.5 }, + { "label": "F", "x": 4.75, "y": 3.5 }, + { "label": "G", "x": 5.75, "y": 3.5 }, + { "label": "H", "x": 6.75, "y": 3.5 }, + { "label": "J", "x": 7.75, "y": 3.5 }, + { "label": "K", "x": 8.75, "y": 3.5 }, + { "label": "L", "x": 9.75, "y": 3.5 }, + { "label": ":", "x": 10.75, "y": 3.5 }, + { "label": "\"", "x": 11.75, "y": 3.5 }, + { "label": "Enter", "x": 12.75, "y": 3.5, "w": 2.25 }, + { "label": "4", "x": 15.5, "y": 3.5 }, + { "label": "5", "x": 16.5, "y": 3.5 }, + { "label": "6", "x": 17.5, "y": 3.5 }, + { "label": "Shift", "x": 0, "y": 4.5, "w": 2.25 }, + { "label": "Z", "x": 2.25, "y": 4.5 }, + { "label": "X", "x": 3.25, "y": 4.5 }, + { "label": "C", "x": 4.25, "y": 4.5 }, + { "label": "V", "x": 5.25, "y": 4.5 }, + { "label": "B", "x": 6.25, "y": 4.5 }, + { "label": "N", "x": 7.25, "y": 4.5 }, + { "label": "M", "x": 8.25, "y": 4.5 }, + { "label": "<", "x": 9.25, "y": 4.5 }, + { "label": ">", "x": 10.25, "y": 4.5 }, + { "label": "?", "x": 11.25, "y": 4.5 }, + { "label": "Shift", "x": 12.25, "y": 4.5, "w": 1.75 }, + { "label": "1", "x": 15.5, "y": 4.5 }, + { "label": "2", "x": 16.5, "y": 4.5 }, + { "label": "3", "x": 17.5, "y": 4.5 }, + { "label": "Enter", "x": 18.5, "y": 4.5, "h": 2 }, + { "label": "\u2191", "x": 14.25, "y": 4.75 }, + { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 }, + { "label": "Win", "x": 1.25, "y": 5.5 }, + { "label": "Alt", "x": 2.25, "y": 5.5, "w": 1.25 }, + { "x": 3.5, "y": 5.5, "w": 6 }, + { "label": "Alt", "x": 9.5, "y": 5.5, "w": 1.25 }, + { "label": "Ctrl", "x": 10.75, "y": 5.5 }, + { "label": "Fn", "x": 11.75, "y": 5.5, "w": 1.25 }, + { "label": "0", "x": 16.5, "y": 5.5 }, + { "label": ".", "x": 17.5, "y": 5.5 }, + { "label": "\u2190", "x": 13.25, "y": 5.75 }, + { "label": "\u2193", "x": 14.25, "y": 5.75 }, + { "label": "\u2192", "x": 15.25, "y": 5.75 } + ] + } + } +} diff --git a/keyboards/fc980c/keymaps/actuation-point-example/keymap.c b/keyboards/fc980c/keymaps/actuation-point-example/keymap.c index dcecd86b967..ac993ae6baa 100644 --- a/keyboards/fc980c/keymaps/actuation-point-example/keymap.c +++ b/keyboards/fc980c/keymaps/actuation-point-example/keymap.c @@ -14,10 +14,11 @@ 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 "fc980c.h" +#include QMK_KEYBOARD_H #include "actuation_point.h" -enum custom_keycodes { +enum custom_keycodes +{ AP_UP = SAFE_RANGE, // Higher actuation point, more sensitive AP_DN, // Lower actuation point, less sensitive AP_READ_RDAC, // Prints current RDAC value to console @@ -25,53 +26,59 @@ enum custom_keycodes { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = 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_DEL, KC_INS, KC_PGUP,KC_PGDN, - 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_NLCK,KC_PSLS,KC_PAST,KC_PMNS, - 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_P7, KC_P8, KC_P9, KC_PPLS, - 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_P4, KC_P5, KC_P6, - 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_P1, KC_P2, KC_P3, KC_PENT, - KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL,MO(1), KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT - ), - [1] = KEYMAP( - _______, _______,_______,_______,_______,_______,_______, _______, _______,AP_READ_RDAC,AP_READ_EEPROM,AP_DN,AP_UP, _______,_______,KC_HOME,KC_END, - _______,_______,_______,_______,_______,_______,_______,_______, _______, _______,_______,_______,_______,_______, _______,_______,_______,_______, - KC_CAPS,KC_MPRV,KC_VOLU,KC_MNXT,KC_PGUP,KC_INS,KC_HOME, LCTL(KC_LEFT),LCTL(KC_RGHT),KC_END, KC_PSCR,KC_SLCK,KC_PAUS,_______, _______,_______,_______,_______, - _______,KC_MUTE,KC_VOLD,KC_MPLY,KC_PGDN,KC_DEL,KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,_______,_______, _______, _______,_______,_______, - _______, _______,_______,_______,_______,_______,LCTL(KC_BSPC),LCTL(KC_DEL), _______,_______,_______, _______, KC_PGUP, _______,_______,_______,_______, - _______,_______,_______, _______, _______,KC_APP, _______, KC_HOME,KC_PGDN,KC_END, _______,_______ - ), + [0] = 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_DEL, KC_INS, KC_PGUP, KC_PGDN, + 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_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + 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_P7, KC_P8, KC_P9, KC_PPLS, + 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_P4, KC_P5, KC_P6, + 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_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT), + [1] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, AP_READ_RDAC, AP_READ_EEPROM, AP_DN, AP_UP, _______, _______, KC_HOME, KC_END, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_CAPS, KC_MPRV, KC_VOLU, KC_MNXT, KC_PGUP, KC_INS, KC_HOME, LCTL(KC_LEFT), LCTL(KC_RGHT), KC_END, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, _______, + _______, KC_MUTE, KC_VOLD, KC_MPLY, KC_PGDN, KC_DEL, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, LCTL(KC_BSPC), LCTL(KC_DEL), _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______, + _______, _______, _______, _______, _______, KC_APP, _______, KC_HOME, KC_PGDN, KC_END, _______, _______), }; -void matrix_init_user(void) { -}; +void matrix_init_user(void){}; -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (record->event.pressed) { - switch(keycode) { - case AP_UP: { - actuation_point_up(); - return false; - } - case AP_DN: { - actuation_point_down(); - return false; - } - case AP_READ_RDAC: { - xprintf("RDAC: %d", read_rdac()); - return false; - } - case AP_READ_EEPROM: { - xprintf("EEPROM: %d", read_eeprom()); - return false; - } +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + if (record->event.pressed) + { + switch (keycode) + { + case AP_UP: + { + actuation_point_up(); + return false; + } + case AP_DN: + { + actuation_point_down(); + return false; + } + case AP_READ_RDAC: + { + xprintf("RDAC: %d", read_rdac()); + return false; + } + case AP_READ_EEPROM: + { + xprintf("EEPROM: %d", read_eeprom()); + return false; + } - default: return true; + default: + return true; } - } else { + } + else + { return true; } }; -const uint16_t PROGMEM fn_actions[] = { -}; +const uint16_t PROGMEM fn_actions[] = {}; diff --git a/keyboards/fc980c/keymaps/coloneljesus/keymap.c b/keyboards/fc980c/keymaps/coloneljesus/keymap.c index d82a616ebb1..26d476ab614 100644 --- a/keyboards/fc980c/keymaps/coloneljesus/keymap.c +++ b/keyboards/fc980c/keymaps/coloneljesus/keymap.c @@ -14,26 +14,23 @@ 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 "fc980c.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = 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_DEL, KC_INS, KC_PGUP,KC_PGDN, - 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_NLCK,KC_PSLS,KC_PAST,KC_PMNS, - 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_P7, KC_P8, KC_P9, KC_PPLS, - 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_P4, KC_P5, KC_P6, - 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_P1, KC_P2, KC_P3, KC_PENT, - KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL,MO(1), KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT - ), - [1] = KEYMAP( - _______, _______,_______,_______,_______,_______,_______, _______, _______,_______,_______,_______,_______, _______,_______,KC_HOME,KC_END, - _______,_______,_______,_______,_______,_______,_______,_______, _______, _______,_______,_______,_______,_______, _______,_______,_______,_______, - KC_CAPS,KC_MPRV,KC_VOLU,KC_MNXT,KC_PGUP,KC_INS,KC_HOME, LCTL(KC_LEFT),LCTL(KC_RGHT),KC_END, KC_PSCR,KC_SLCK,KC_PAUS,_______, _______,_______,_______,_______, - _______,KC_MUTE,KC_VOLD,KC_MPLY,KC_PGDN,KC_DEL,KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,_______,_______, _______, _______,_______,_______, - _______, _______,_______,_______,_______,_______,LCTL(KC_BSPC),LCTL(KC_DEL), _______,_______,_______, _______, KC_PGUP, _______,_______,_______,_______, - _______,_______,_______, _______, _______,KC_APP, _______, KC_HOME,KC_PGDN,KC_END, _______,_______ - ), + [0] = 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_DEL, KC_INS, KC_PGUP, KC_PGDN, + 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_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + 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_P7, KC_P8, KC_P9, KC_PPLS, + 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_P4, KC_P5, KC_P6, + 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_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT), + [1] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_CAPS, KC_MPRV, KC_VOLU, KC_MNXT, KC_PGUP, KC_INS, KC_HOME, LCTL(KC_LEFT), LCTL(KC_RGHT), KC_END, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, _______, + _______, KC_MUTE, KC_VOLD, KC_MPLY, KC_PGDN, KC_DEL, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, LCTL(KC_BSPC), LCTL(KC_DEL), _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______, + _______, _______, _______, _______, _______, KC_APP, _______, KC_HOME, KC_PGDN, KC_END, _______, _______), }; -const uint16_t PROGMEM fn_actions[] = { -}; +const uint16_t PROGMEM fn_actions[] = {}; diff --git a/keyboards/fc980c/keymaps/default/keymap.c b/keyboards/fc980c/keymaps/default/keymap.c index 4a1872ad0b4..b3f7bb7b114 100644 --- a/keyboards/fc980c/keymaps/default/keymap.c +++ b/keyboards/fc980c/keymaps/default/keymap.c @@ -14,26 +14,23 @@ 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 "fc980c.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = 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_DEL, KC_INS, KC_PGUP,KC_PGDN, - 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_NLCK,KC_PSLS,KC_PAST,KC_PMNS, - 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_P7, KC_P8, KC_P9, KC_PPLS, - 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_P4, KC_P5, KC_P6, - 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_P1, KC_P2, KC_P3, KC_PENT, - KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL,MO(1), KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT - ), - [1] = KEYMAP( - _______, _______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______,_______, _______,_______,KC_HOME,KC_END, - _______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______,_______, _______,_______,_______,_______, - _______,_______,_______,_______,_______,_______,_______,_______,KC_PSCR, KC_SLCK, KC_PAUS, _______,_______,_______, _______,_______,_______,_______, - _______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, _______,_______,_______, - _______, _______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, _______,_______,_______,_______, - _______,_______,_______, _______, _______,KC_APP, _______, KC_HOME,KC_PGDN,KC_END, _______,_______ - ), + [0] = 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_DEL, KC_INS, KC_PGUP, KC_PGDN, + 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_NLCK, KC_PSLS, KC_PAST, KC_PMNS, + 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_P7, KC_P8, KC_P9, KC_PPLS, + 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_P4, KC_P5, KC_P6, + 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_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT), + [1] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______, + _______, _______, _______, _______, _______, KC_APP, _______, KC_HOME, KC_PGDN, KC_END, _______, _______), }; -const uint16_t PROGMEM fn_actions[] = { -}; +const uint16_t PROGMEM fn_actions[] = {}; diff --git a/keyboards/fc980c/matrix.c b/keyboards/fc980c/matrix.c index bde0f3c139e..1126f3047ae 100644 --- a/keyboards/fc980c/matrix.c +++ b/keyboards/fc980c/matrix.c @@ -28,7 +28,7 @@ along with this program. If not, see . #include "timer.h" #include "matrix.h" #include "led.h" -// #include "fc980c.h" +// #include QMK_KEYBOARD_H // Timer resolution check From 1ff7473ce4fa53f1ea28edfa16ae68ea5cc74d47 Mon Sep 17 00:00:00 2001 From: MakotoKurauchi Date: Tue, 1 May 2018 00:15:49 +0900 Subject: [PATCH 086/152] Add LOCAL_GLCDFONT option (#2854) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add some comment about Helix customize and auto-setup RGBLIGHT_LIMIT_VAL * add define USB_MAX_POWER_CONSUMPTION * Helix keyboard OLED, RGBLIGHT enable/disable control integrate into rules.mk rules.mk: add 4 Variables for compile control. # Helix keyboard customize # you can edit follows 4 Variables # jp: 以下の4つの変数を必要に応じて編集します。 OLED_ENABLE = no # OLED_ENABLE LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) LED_ANIMATIONS = yes # LED animations config.h: auto set RGBLED_NUM by HELIX_ROWS and rules.mk's define * HELIX_ROWS define move from config.h to rules.mk * add readme.md * rename readme.md to readme_jp.md * add readme.md and modify readme_jp.md * change helix/ssd1306.c for select glcdfont.c position * add variable LOCAL_GLCDFONT into each keymaps rules.mk --- keyboards/helix/rev2/keymaps/default/rules.mk | 9 +++++++-- keyboards/helix/rev2/keymaps/five_rows/rules.mk | 9 +++++++-- keyboards/helix/ssd1306.c | 4 ++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/keyboards/helix/rev2/keymaps/default/rules.mk b/keyboards/helix/rev2/keymaps/default/rules.mk index 976529ef911..d407dfb5eb9 100644 --- a/keyboards/helix/rev2/keymaps/default/rules.mk +++ b/keyboards/helix/rev2/keymaps/default/rules.mk @@ -26,10 +26,11 @@ define HELIX_CUSTOMISE_MSG endef # Helix keyboard customize -# you can edit follows 5 Variables -# jp: 以下の5つの変数を必要に応じて編集します。 +# you can edit follows 6 Variables +# jp: 以下の6つの変数を必要に応じて編集します。 HELIX_ROWS = 5 # Helix Rows is 4 or 5 OLED_ENABLE = no # OLED_ENABLE +LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c" LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) LED_ANIMATIONS = yes # LED animations @@ -70,6 +71,10 @@ ifeq ($(strip $(OLED_ENABLE)), yes) OPT_DEFS += -DOLED_ENABLE endif +ifeq ($(strip $(LOCAL_GLCDFONT)), yes) + OPT_DEFS += -DLOCAL_GLCDFONT +endif + # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/helix/rev2/keymaps/five_rows/rules.mk b/keyboards/helix/rev2/keymaps/five_rows/rules.mk index 67344f94f03..53a581ec256 100644 --- a/keyboards/helix/rev2/keymaps/five_rows/rules.mk +++ b/keyboards/helix/rev2/keymaps/five_rows/rules.mk @@ -27,9 +27,10 @@ define HELIX_CUSTOMISE_MSG endef # Helix keyboard customize -# you can edit follows 5 Variables -# jp: 以下の5つの変数を必要に応じて編集します。 +# you can edit follows 6 Variables +# jp: 以下の6つの変数を必要に応じて編集します。 OLED_ENABLE = no # OLED_ENABLE +LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c" LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.) LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.) LED_ANIMATIONS = yes # LED animations @@ -97,6 +98,10 @@ ifeq ($(strip $(OLED_ENABLE)), yes) OPT_DEFS += -DOLED_ENABLE endif +ifeq ($(strip $(LOCAL_GLCDFONT)), yes) + OPT_DEFS += -DLOCAL_GLCDFONT +endif + # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend diff --git a/keyboards/helix/ssd1306.c b/keyboards/helix/ssd1306.c index 80efc3d1668..b13060ef733 100644 --- a/keyboards/helix/ssd1306.c +++ b/keyboards/helix/ssd1306.c @@ -4,7 +4,11 @@ #include "i2c.h" #include #include "print.h" +#ifndef LOCAL_GLCDFONT #include "common/glcdfont.c" +#else +#include +#endif #ifdef ADAFRUIT_BLE_ENABLE #include "adafruit_ble.h" #endif From 3aeaf4e3ea6c590ea2c75946d2d0b04f1dfa59a9 Mon Sep 17 00:00:00 2001 From: Eric <22215921+ericywl@users.noreply.github.com> Date: Mon, 30 Apr 2018 23:17:07 +0800 Subject: [PATCH 087/152] QMK Configurator Support for Lightsaver V3 (#2856) * Added Lightsaver Config * Changed KEYMAP to LAYOUT * Missed out one KEYMAP * Changed lightsaver.h to QMK_KEYBOARD_H * Missed out one lightsaver.h --- keyboards/lightsaver/info.json | 13 +++++++++++++ keyboards/lightsaver/keymaps/default/keymap.c | 6 +++--- keyboards/lightsaver/keymaps/rasmus/keymap.c | 8 ++++---- keyboards/lightsaver/lightsaver.h | 2 +- 4 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 keyboards/lightsaver/info.json diff --git a/keyboards/lightsaver/info.json b/keyboards/lightsaver/info.json new file mode 100644 index 00000000000..e29b039b1c9 --- /dev/null +++ b/keyboards/lightsaver/info.json @@ -0,0 +1,13 @@ +{ + "keyboard_name": "lightsaver_v3", + "url": "", + "maintainer": "qmk", + "bootloader": "", + "width": 19, + "height": 6, + "layouts": { + "LAYOUT": { + "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}, {"x":16, "y":0}, {"x":17, "y":0}, {"x":18, "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}, {"label":"Bkspc", "x":13, "y":1}, {"label":"Bkspc", "x":14, "y":1}, {"label":"Num
Lock", "x":15, "y":1}, {"label":"/", "x":16, "y":1}, {"label":"*", "x":17, "y":1}, {"label":"-", "x":18, "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":"7", "x":15, "y":2}, {"label":"8", "x":16, "y":2}, {"label":"9", "x":17, "y":2}, {"label":"+", "x":18, "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}, {"x":12.75, "y":3}, {"label":"Enter", "x":13.75, "y":3, "w":1.25}, {"label":"4", "x":15, "y":3}, {"label":"5", "x":16, "y":3}, {"label":"6", "x":17, "y":3}, {"label":"+", "x":18, "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":"1", "x":15, "y":4}, {"label":"2", "x":16, "y":4}, {"label":"3", "x":17, "y":4}, {"label":"Enter", "x":18, "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.25}, {"label":"Alt", "x":10, "y":5, "w":1.5}, {"label":"Fn", "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}, {"x":16, "y":5}, {"x":17, "y":5}, {"label":"Enter", "x":18, "y":5}] + } + } +} diff --git a/keyboards/lightsaver/keymaps/default/keymap.c b/keyboards/lightsaver/keymaps/default/keymap.c index fd188bd3445..d945ada24da 100644 --- a/keyboards/lightsaver/keymaps/default/keymap.c +++ b/keyboards/lightsaver/keymaps/default/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 "lightsaver.h" +#include QMK_KEYBOARD_H #define KC_F1GL TD(TD_F1_GAME) #define KC_CLFN TD(TD_CAPS_FN) @@ -25,7 +25,7 @@ enum custom_layers { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[BASE] = KEYMAP(\ +[BASE] = 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_NLCK, KC_INS, KC_HOME, KC_PGUP, KC_PSLS, \ 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_DEL, KC_END, KC_PGDN, KC_PAST, \ 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_P7, KC_P8, KC_P9, KC_PMNS, \ @@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_P1, KC_P2, KC_P3, KC_PENT, \ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT), \ -[FN] = KEYMAP(\ +[FN] = LAYOUT(\ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PAUS, KC_SLCK, RGB_TOG, RGB_MOD, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_CAPS, BL_TOGG, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, _______, _______, _______, _______, _______, \ diff --git a/keyboards/lightsaver/keymaps/rasmus/keymap.c b/keyboards/lightsaver/keymaps/rasmus/keymap.c index acdfe9394e7..518ba2d21a7 100644 --- a/keyboards/lightsaver/keymaps/rasmus/keymap.c +++ b/keyboards/lightsaver/keymaps/rasmus/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 "lightsaver.h" +#include QMK_KEYBOARD_H #define KC_F1GL TD(TD_F1_GAME) #define KC_CLFN TD(TD_CAPS_FN) @@ -65,7 +65,7 @@ enum macro_id { ) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[BASE] = KEYMAP(\ +[BASE] = LAYOUT(\ KC_ESC, KC_F1GL, 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_NLCK, KC_INS, KC_HOME, KC_PGUP, KC_PSLS, \ 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_DEL, KC_END, KC_PGDN, KC_PAST, \ 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_P7, KC_P8, KC_P9, KC_PMNS, \ @@ -73,7 +73,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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_P1, KC_P2, KC_P3, KC_PENT, \ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT), \ -[GAME] = KEYMAP(\ +[GAME] = LAYOUT(\ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LOCK, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ @@ -81,7 +81,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ _______, KC_LGUI, KC_LALT, _______, KC_RALT, _______, _______, _______, _______, _______, _______ ), \ -[FN] = KEYMAP(\ +[FN] = LAYOUT(\ _______, M(SHRG), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PAUS, KC_SLCK, RGB_TOG, RGB_MOD, _______, _______, \ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, _______, _______, _______, \ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, _______, _______, _______, _______, _______, \ diff --git a/keyboards/lightsaver/lightsaver.h b/keyboards/lightsaver/lightsaver.h index 5b80dbabb6f..19fcf36bacb 100644 --- a/keyboards/lightsaver/lightsaver.h +++ b/keyboards/lightsaver/lightsaver.h @@ -20,7 +20,7 @@ #define NO KC_NO -#define KEYMAP( \ +#define LAYOUT( \ K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, K5Q, K5R, K5S, \ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4O, K4P, K4Q, K4R, K4S, \ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, K3P, K3Q, K3R, K3S, \ From c76ab936c859d7da1e87d6f6ad4bbec2740fe57f Mon Sep 17 00:00:00 2001 From: Eric <22215921+ericywl@users.noreply.github.com> Date: Mon, 30 Apr 2018 23:19:12 +0800 Subject: [PATCH 088/152] Changed KEYMAP to LAYOUT for HHKB (#2857) --- keyboards/hhkb/hhkb.h | 4 +- keyboards/hhkb/info.json | 155 +++++++++++++++++-- keyboards/hhkb/keymaps/blakedietz/keymap.c | 69 +++++---- keyboards/hhkb/keymaps/cinaeco/keymap.c | 104 ++++++------- keyboards/hhkb/keymaps/dbroqua/keymap.c | 126 +++++++-------- keyboards/hhkb/keymaps/dbroqua/readme.md | 8 +- keyboards/hhkb/keymaps/default/keymap.c | 47 +++--- keyboards/hhkb/keymaps/enoch_jp/keymap.c | 35 ++--- keyboards/hhkb/keymaps/eric/keymap.c | 47 +++--- keyboards/hhkb/keymaps/jp/keymap.c | 39 +++-- keyboards/hhkb/keymaps/jp_mac/keymap.c | 39 +++-- keyboards/hhkb/keymaps/krusli/keymap.c | 47 +++--- keyboards/hhkb/keymaps/lxol/keymap.c | 114 +++++++------- keyboards/hhkb/keymaps/mjt/keymap.c | 85 +++++----- keyboards/hhkb/keymaps/rdg_jp/keymap.c | 64 ++++---- keyboards/hhkb/keymaps/sh_jp/keymap.c | 94 ++++++----- keyboards/hhkb/keymaps/shela/keymap.c | 90 ++++++----- keyboards/hhkb/keymaps/shela/keymap_jis2us.h | 4 +- keyboards/hhkb/keymaps/smt/keymap.c | 144 ++++++++--------- 19 files changed, 722 insertions(+), 593 deletions(-) diff --git a/keyboards/hhkb/hhkb.h b/keyboards/hhkb/hhkb.h index e95125efcb2..30dc039a4c1 100644 --- a/keyboards/hhkb/hhkb.h +++ b/keyboards/hhkb/hhkb.h @@ -3,7 +3,7 @@ #include "quantum.h" -#define KEYMAP( \ +#define LAYOUT( \ K31, K30, K00, K10, K11, K20, K21, K40, K41, K60, K61, K70, K71, K50, K51, \ K32, K01, K02, K13, K12, K23, K22, K42, K43, K62, K63, K73, K72, K52, \ K33, K04, K03, K14, K15, K24, K25, K45, K44, K65, K64, K74, K53, \ @@ -22,7 +22,7 @@ } -#define KEYMAP_JP( \ +#define LAYOUT_JP( \ K02, K32, K62, K22, K12, K52, K72, KA2, K92, K82, KB2, KE2, KF2, KD2, KC2, \ K03, K63, K23, K13, K53, K73, KA3, K93, K83, KB3, KE3, KF3, KD3, \ K06, K66, K26, K16, K56, K76, KA6, K96, K86, KB6, KE6, KF6, KD6, KC6, \ diff --git a/keyboards/hhkb/info.json b/keyboards/hhkb/info.json index bce1bfce18b..3beaff83da9 100644 --- a/keyboards/hhkb/info.json +++ b/keyboards/hhkb/info.json @@ -1,16 +1,147 @@ { - "keyboard_name": "hhkb", - "url": "", - "maintainer": "qmk", - "width": 15, - "height": 5, - "layouts": { - "KEYMAP": { - "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":"~", "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":"Delete", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "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":"Return", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"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}, {"label":"Fn", "x":14, "y":3}, {"label":"", "x":1.5, "y":4}, {"label":"", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"label":"", "x":10, "y":4, "w":1.5}, {"label":"", "x":11.5, "y":4}] - }, + "keyboard_name": "hhkb", + "url": "", + "maintainer": "qmk", + "width": 15, + "height": 5, + "layouts": { + "LAYOUT": { + "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": "~", "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": "Delete", "x": 13.5, "y": 1, "w": 1.5 }, + { "label": "Control", "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": "Return", "x": 12.75, "y": 2, "w": 2.25 }, + { "label": "Shift", "x": 0, "y": 3, "w": 2.25 }, + { "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 }, + { "label": "Fn", "x": 14, "y": 3 }, + { "label": "", "x": 1.5, "y": 4 }, + { "label": "", "x": 2.5, "y": 4, "w": 1.5 }, + { "x": 4, "y": 4, "w": 6 }, + { "label": "", "x": 10, "y": 4, "w": 1.5 }, + { "label": "", "x": 11.5, "y": 4 } + ] + }, - "KEYMAP_JP": { - "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":"BS", "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":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Control", "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":"}", "x":12.75, "y":2}, {"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":"_", "x":12, "y":3}, {"label":"\u2191", "x":13, "y":3}, {"label":"Shift", "x":14, "y":3}, {"label":"Fn", "x":0, "y":4}, {"label":"HH", "x":1.25, "y":4}, {"label":"\u2662", "x":2.25, "y":4}, {"label":"", "x":3.25, "y":4}, {"label":"NN", "x":4.25, "y":4}, {"x":5.25, "y":4, "w":2.5}, {"label":"\u25cc", "x":7.75, "y":4}, {"label":"Kana", "x":8.75, "y":4}, {"label":"", "x":9.75, "y":4}, {"label":"Fn", "x":10.75, "y":4}, {"label":"\u2190", "x":12, "y":4}, {"label":"\u2193", "x":13, "y":4}, {"label":"\u2192", "x":14, "y":4}] - } + "LAYOUT_JP": { + "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": "BS", "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": "Enter", "x": 13.75, "y": 1, "w": 1.25, "h": 2 }, + { "label": "Control", "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": "}", "x": 12.75, "y": 2 }, + { "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": "_", "x": 12, "y": 3 }, + { "label": "\u2191", "x": 13, "y": 3 }, + { "label": "Shift", "x": 14, "y": 3 }, + { "label": "Fn", "x": 0, "y": 4 }, + { "label": "HH", "x": 1.25, "y": 4 }, + { "label": "\u2662", "x": 2.25, "y": 4 }, + { "label": "", "x": 3.25, "y": 4 }, + { "label": "NN", "x": 4.25, "y": 4 }, + { "x": 5.25, "y": 4, "w": 2.5 }, + { "label": "\u25cc", "x": 7.75, "y": 4 }, + { "label": "Kana", "x": 8.75, "y": 4 }, + { "label": "", "x": 9.75, "y": 4 }, + { "label": "Fn", "x": 10.75, "y": 4 }, + { "label": "\u2190", "x": 12, "y": 4 }, + { "label": "\u2193", "x": 13, "y": 4 }, + { "label": "\u2192", "x": 14, "y": 4 } + ] } + } } diff --git a/keyboards/hhkb/keymaps/blakedietz/keymap.c b/keyboards/hhkb/keymaps/blakedietz/keymap.c index ef29a5c80df..a9146a4a08e 100644 --- a/keyboards/hhkb/keymaps/blakedietz/keymap.c +++ b/keyboards/hhkb/keymaps/blakedietz/keymap.c @@ -1,4 +1,4 @@ -#include "hhkb.h" +#include QMK_KEYBOARD_H // Layer names #define BASE 0 @@ -27,12 +27,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-----------------------+------+------| */ - [BASE] = KEYMAP( // default layer - 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_LEAD, \ - 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, \ - ALL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(MEDIA, KC_SCLN), KC_QUOT, ALL_T(KC_ENT), \ - KC_LSFT, CTL_T(KC_Z), ALT_T(KC_X), GUI_T(KC_C), KC_V, KC_B, KC_N, KC_M, GUI_T(KC_COMM), ALT_T(KC_DOT), CTL_T(KC_SLSH), KC_RSFT, TG(DEV), \ - TG(DEV), TG(MOUSE), LT(DEV, KC_SPC), TG(MOUSE), TG(DEV)), + [BASE] = LAYOUT( // default layer + 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_LEAD, + 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, + ALL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(MEDIA, KC_SCLN), KC_QUOT, ALL_T(KC_ENT), + KC_LSFT, CTL_T(KC_Z), ALT_T(KC_X), GUI_T(KC_C), KC_V, KC_B, KC_N, KC_M, GUI_T(KC_COMM), ALT_T(KC_DOT), CTL_T(KC_SLSH), KC_RSFT, TG(DEV), + TG(DEV), TG(MOUSE), LT(DEV, KC_SPC), TG(MOUSE), TG(DEV)), /* Layer DEV: DEV mode (DEV Fn) TODO: Add a cmd/tab function to the developer layer for quick switching between different applications when debugging @@ -51,12 +51,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+----------------------+------+------+ */ - [DEV] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG(DEV), \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + [DEV] = 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG(DEV), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), /* Layer MOUSE: MOUSE mode (MOUSE Fn) |------+-----+-----+-----+----+----+--------+----------------+--------------+-----------+-------------+-----+-------+-------+-----| @@ -74,12 +74,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+----------------------+------+------+ */ - [MOUSE] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_D, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG(DEV), \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + [MOUSE] = 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_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_D, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG(DEV), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), /* Layer MEDIA: mode (Hold Semi-colon) |------+-----+-----+-----+----+----+----+----------------+--------------+-----------+-------------+-----+-------+-------+-----| @@ -98,25 +98,28 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ - [MEDIA] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_MUTE, KC_TRNS, KC_MPLY, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, TG(DEV), \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) -}; + [MEDIA] = 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_MPRV, KC_MNXT, KC_MUTE, KC_TRNS, KC_MPLY, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, TG(DEV), + 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) { - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { + // MACRODOWN only works in this function + switch (id) + { + case 0: + if (record->event.pressed) + { register_code(KC_RSFT); - } else { + } + else + { unregister_code(KC_RSFT); - } + } break; - } + } return MACRO_NONE; }; diff --git a/keyboards/hhkb/keymaps/cinaeco/keymap.c b/keyboards/hhkb/keymaps/cinaeco/keymap.c index 0b204600d15..f50f90a8437 100644 --- a/keyboards/hhkb/keymaps/cinaeco/keymap.c +++ b/keyboards/hhkb/keymaps/cinaeco/keymap.c @@ -1,7 +1,7 @@ /* -*- eval: (turn-on-orgtbl); -*- * cinaeco's HHKB Layout */ -#include "hhkb.h" +#include QMK_KEYBOARD_H // Layers. #define QWER 0 @@ -14,15 +14,15 @@ // Easier-to-read Layer Arrays. #define ____ KC_TRNS -enum hhkb_keycodes { - DYNAMIC_MACRO_RANGE = SAFE_RANGE, +enum hhkb_keycodes +{ + DYNAMIC_MACRO_RANGE = SAFE_RANGE, }; #include "dynamic_macro.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* QWER Layer: Qwerty Default * * ,--------------------------------------------------------------. @@ -39,13 +39,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * */ - [QWER] = KEYMAP( - 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, LT(MREC, 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, CTL_T(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(HHKB), \ - KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT), - + [QWER] = 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_BSLS, KC_GRV, + KC_TAB, LT(MREC, 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, CTL_T(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(HHKB), + KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT), /* COLE Layer: Colemak * @@ -63,13 +62,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * */ - [COLE] = KEYMAP( - 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, LT(MREC, 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_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, CTL_T(KC_ENT), \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_K, KC_B, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), \ - KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT), - + [COLE] = 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_BSLS, KC_GRV, + KC_TAB, LT(MREC, 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_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, CTL_T(KC_ENT), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_K, KC_B, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB), + KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT), /* DVOR Layer: Dvorak * @@ -87,13 +85,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * */ - [DVOR] = KEYMAP( - 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, LT(MREC, 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_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, CTL_T(KC_ENT), \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(HHKB), \ - KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT), - + [DVOR] = LAYOUT( + 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, LT(MREC, 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_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, CTL_T(KC_ENT), + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(HHKB), + KC_LALT, KC_LGUI, LT(UTIL, KC_SPC), KC_RGUI, KC_RALT), /* HHKB Layer: HHKB mode (HHKB Fn) * @@ -110,13 +107,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-------------------------------------------' */ - [HHKB] = KEYMAP( - KC_PWR, 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_MPLY, KC_MPRV, KC_MNXT, ____, ____, ____, ____, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ____, KC_BSPC, \ - ____, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, ____, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ - ____, ____, ____, ____, ____, ____, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ____, ____, \ - ____, ____, ____, KC_MSTP, ____), - + [HHKB] = LAYOUT( + KC_PWR, 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_MPLY, KC_MPRV, KC_MNXT, ____, ____, ____, ____, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ____, KC_BSPC, + ____, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, ____, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, + ____, ____, ____, ____, ____, ____, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ____, ____, + ____, ____, ____, KC_MSTP, ____), /* UTIL Layer: Extra utilities * @@ -134,13 +130,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * */ - [UTIL] = KEYMAP( - RESET, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, ____, ____, ____, ____, ____, ____, ____, ____, DF(QWER), DF(COLE), DF(DVOR), DEBUG, \ - ____, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, ____, KC_HOME, KC_PGDN, KC_PGUP, KC_END, ____, ____, ____, ____, \ - ____, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, ____, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, ____, ____, ____, \ - ____, ____, ____, ____, ____, KC_SPC, ____, ____, ____, ____, ____, ____, ____, \ - ____, ____, ____, ____, ____), - + [UTIL] = LAYOUT( + RESET, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, ____, ____, ____, ____, ____, ____, ____, ____, DF(QWER), DF(COLE), DF(DVOR), DEBUG, + ____, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, ____, KC_HOME, KC_PGDN, KC_PGUP, KC_END, ____, ____, ____, ____, + ____, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, ____, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, ____, ____, ____, + ____, ____, ____, ____, ____, KC_SPC, ____, ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____, ____), /* MREC Layer: Record macros with `q` * @@ -158,29 +153,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * */ - [MREC] = KEYMAP( - ____, DYN_REC_START1, DYN_REC_START2, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ - ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ - ____, ____, DYN_REC_STOP, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ - ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \ - ____, ____, ____, ____, ____) + [MREC] = LAYOUT( + ____, DYN_REC_START1, DYN_REC_START2, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, + ____, ____, DYN_REC_STOP, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, + ____, ____, ____, ____, ____) }; - - const uint16_t PROGMEM fn_actions[] = { }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - return MACRO_NONE; +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + return MACRO_NONE; }; // For Dynamic Macros. -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - if (!process_record_dynamic_macro(keycode, record)) { - return false; - } - return true; +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + if (!process_record_dynamic_macro(keycode, record)) + { + return false; + } + return true; } diff --git a/keyboards/hhkb/keymaps/dbroqua/keymap.c b/keyboards/hhkb/keymaps/dbroqua/keymap.c index 91faea942cc..666471a03b3 100644 --- a/keyboards/hhkb/keymaps/dbroqua/keymap.c +++ b/keyboards/hhkb/keymaps/dbroqua/keymap.c @@ -1,18 +1,20 @@ /* * dbroqua HHKB Layout */ -#include "hhkb.h" +#include QMK_KEYBOARD_H -enum planck_layers { - _DEFAULT, - _ALTERNATE, - _FN, - _ADJUST +enum planck_layers +{ + _DEFAULT, + _ALTERNATE, + _FN, + _ADJUST }; -enum planck_keycodes { - DEF = SAFE_RANGE, - ALT +enum planck_keycodes +{ + DEF = SAFE_RANGE, + ALT }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -29,13 +31,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Alt | Gui | Space | Gui | Alt | * `----------------------------------------------------------------´ */ - [_DEFAULT] = KEYMAP( - 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_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT - ), + [_DEFAULT] = 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_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_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), /* Alternamte layer: swap alt/gui * ,-----------------------------------------------------------------------------------------. * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` | @@ -49,13 +50,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Gui | Alt | Space | AltGr | RGui| * `----------------------------------------------------------------´ */ - [_ALTERNATE] = KEYMAP( - 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_LGUI, KC_LALT, /* */ KC_SPC, KC_RALT, KC_RGUI - ), + [_ALTERNATE] = 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_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_LGUI, KC_LALT, /* */ KC_SPC, KC_RALT, KC_RGUI), /* FN Layer * ,-----------------------------------------------------------------------------------------. @@ -70,13 +70,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | Adjust | Stop | | * `----------------------------------------------------------------´ */ - [_FN] = KEYMAP( - KC_PWR, 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_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_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, \ - KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, TG(_ADJUST), KC_MSTP, KC_TRNS - ), + [_FN] = LAYOUT( + KC_PWR, 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_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_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, + KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, TG(_ADJUST), KC_MSTP, KC_TRNS), /* SWITCH LAYOUT * ,-----------------------------------------------------------------------------------------. @@ -91,14 +90,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | * `----------------------------------------------------------------´ */ - [_ADJUST] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ - DEF, ALT, KC_TRNS, KC_TRNS, KC_TRNS - ) -}; + [_ADJUST] = 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + DEF, ALT, KC_TRNS, KC_TRNS, KC_TRNS)}; const uint16_t PROGMEM fn_actions[] = { @@ -106,35 +103,42 @@ const uint16_t PROGMEM fn_actions[] = { 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) { + // MACRODOWN only works in this function + switch (id) + { + case 0: + if (record->event.pressed) + { register_code(KC_RSFT); - } else { + } + else + { unregister_code(KC_RSFT); - } + } break; - } + } return MACRO_NONE; }; - -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + switch (keycode) + { case DEF: - if (record->event.pressed) { - print("mode just switched to qwerty and this is a huge string\n"); - set_single_persistent_default_layer(_DEFAULT); - } - return false; - break; + if (record->event.pressed) + { + print("mode just switched to qwerty and this is a huge string\n"); + set_single_persistent_default_layer(_DEFAULT); + } + return false; + break; case ALT: - if (record->event.pressed) { - set_single_persistent_default_layer(_ALTERNATE); - } - return false; - break; - } - return true; + if (record->event.pressed) + { + set_single_persistent_default_layer(_ALTERNATE); + } + return false; + break; + } + return true; } diff --git a/keyboards/hhkb/keymaps/dbroqua/readme.md b/keyboards/hhkb/keymaps/dbroqua/readme.md index 0afebc84c87..05ae9ff4276 100644 --- a/keyboards/hhkb/keymaps/dbroqua/readme.md +++ b/keyboards/hhkb/keymaps/dbroqua/readme.md @@ -1,9 +1,11 @@ # Dbroqua Layout -* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/78eaf35e80bb714eea80cb4049dedb01 +* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/78eaf35e80bb714eea80cb4049dedb01 # Programming Instructions: + Enter into programming mode and run the following command. + +``` +$ sudo LAYOUT=dbroqua make dfu ``` -$ sudo KEYMAP=dbroqua make dfu -``` \ No newline at end of file diff --git a/keyboards/hhkb/keymaps/default/keymap.c b/keyboards/hhkb/keymaps/default/keymap.c index bd5dd8372d5..3a01fd80205 100644 --- a/keyboards/hhkb/keymaps/default/keymap.c +++ b/keyboards/hhkb/keymaps/default/keymap.c @@ -1,7 +1,7 @@ /* -*- eval: (turn-on-orgtbl); -*- * default HHKB Layout */ -#include "hhkb.h" +#include QMK_KEYBOARD_H #define BASE 0 #define HHKB 1 @@ -24,14 +24,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-----------------------+------+------| */ - [BASE] = KEYMAP( // default layer - 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(HHKB), \ - KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), - - + [BASE] = LAYOUT( // default layer + 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(HHKB), + KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), /* Layer HHKB: HHKB mode (HHKB Fn) |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| @@ -50,13 +48,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ - [HHKB] = KEYMAP( - KC_PWR, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ - KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ - 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)}; - + [HHKB] = LAYOUT( + KC_PWR, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, + 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)}; const uint16_t PROGMEM fn_actions[] = { @@ -64,15 +61,19 @@ const uint16_t PROGMEM fn_actions[] = { 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) { + // MACRODOWN only works in this function + switch (id) + { + case 0: + if (record->event.pressed) + { register_code(KC_RSFT); - } else { + } + else + { unregister_code(KC_RSFT); - } + } break; - } + } return MACRO_NONE; }; diff --git a/keyboards/hhkb/keymaps/enoch_jp/keymap.c b/keyboards/hhkb/keymaps/enoch_jp/keymap.c index 4068e579c9e..60bf832a741 100644 --- a/keyboards/hhkb/keymaps/enoch_jp/keymap.c +++ b/keyboards/hhkb/keymaps/enoch_jp/keymap.c @@ -1,7 +1,6 @@ -#include "hhkb.h" +#include QMK_KEYBOARD_H #define _______ KC_TRNS - /* Layer 0: HHKB JP * ,-----------------------------------------------------------. * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| -| =|Yen|Bsp| @@ -31,29 +30,27 @@ */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = KEYMAP_JP( - 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_GRAVE, 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_DEL, 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_BSLS, - KC_BSPC, KC_ZKHK, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_BSPC, KC_RSFT, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT - ), + [0] = LAYOUT_JP( + 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_GRAVE, 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_DEL, 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_BSLS, + KC_BSPC, KC_ZKHK, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_BSPC, KC_RSFT, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), - [1] = KEYMAP_JP( - _______, 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_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, - _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PSCR, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_LEFT, KC_RGHT, _______, KC_PENT, - _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, - _______, _______, _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______ - ) -}; + [1] = LAYOUT_JP( + _______, 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_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, + _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PSCR, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_LEFT, KC_RGHT, _______, KC_PENT, + _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)}; const uint16_t PROGMEM fn_actions[] = { }; -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - return MACRO_NONE; +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + return MACRO_NONE; }; /*void matrix_scan_user(void) { diff --git a/keyboards/hhkb/keymaps/eric/keymap.c b/keyboards/hhkb/keymaps/eric/keymap.c index 496ead346ca..46dcd95c03a 100644 --- a/keyboards/hhkb/keymaps/eric/keymap.c +++ b/keyboards/hhkb/keymaps/eric/keymap.c @@ -1,7 +1,7 @@ /* -*- eval: (turn-on-orgtbl); -*- * default HHKB Layout */ -#include "hhkb.h" +#include QMK_KEYBOARD_H #define BASE 0 #define HHKB 1 @@ -23,14 +23,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-----------------------+------+------| */ - [BASE] = KEYMAP( // default layer - 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(HHKB), \ - KC_LGUI, KC_LALT, /* */ KC_SPC, KC_RALT, KC_RGUI), - - + [BASE] = LAYOUT( // default layer + 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(HHKB), + KC_LGUI, KC_LALT, /* */ KC_SPC, KC_RALT, KC_RGUI), /* Layer HHKB: HHKB mode (HHKB Fn) |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| @@ -48,13 +46,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ - [HHKB] = KEYMAP( - KC_CAPS, 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_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_AMPR, KC_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_UP, KC_DEL, KC_BSPC, \ - KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_ASTR, KC_TRNS, KC_TRNS, KC_PGUP, KC_HOME, KC_LEFT, KC_RGHT, KC_TRNS, \ - KC_TRNS, KC_UNDS, KC_PLUS, KC_LPRN, KC_RPRN, KC_PIPE, KC_TRNS, KC_TRNS, KC_PGDN, KC_END, KC_DOWN, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)}; - + [HHKB] = LAYOUT( + KC_CAPS, 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_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_HOME, KC_AMPR, KC_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_UP, KC_DEL, KC_BSPC, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_ASTR, KC_TRNS, KC_TRNS, KC_PGUP, KC_HOME, KC_LEFT, KC_RGHT, KC_TRNS, + KC_TRNS, KC_UNDS, KC_PLUS, KC_LPRN, KC_RPRN, KC_PIPE, KC_TRNS, KC_TRNS, KC_PGDN, KC_END, KC_DOWN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)}; const uint16_t PROGMEM fn_actions[] = { @@ -62,15 +59,19 @@ const uint16_t PROGMEM fn_actions[] = { 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) { + // MACRODOWN only works in this function + switch (id) + { + case 0: + if (record->event.pressed) + { register_code(KC_RSFT); - } else { + } + else + { unregister_code(KC_RSFT); - } + } break; - } + } return MACRO_NONE; }; diff --git a/keyboards/hhkb/keymaps/jp/keymap.c b/keyboards/hhkb/keymaps/jp/keymap.c index 8525adce59d..24e4a04a53d 100644 --- a/keyboards/hhkb/keymaps/jp/keymap.c +++ b/keyboards/hhkb/keymaps/jp/keymap.c @@ -1,8 +1,7 @@ -#include "hhkb.h" +#include QMK_KEYBOARD_H #define _______ KC_TRNS - /* Layer 0: HHKB JP * ,-----------------------------------------------------------. * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| -| =|Yen|Bsp| @@ -32,25 +31,23 @@ */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = KEYMAP_JP( - 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_JYEN, 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_UP, KC_RSFT, - MO(1), KC_ZKHK, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC, KC_HENK, KC_KANA, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT - ), - - [1] = KEYMAP_JP( - KC_PWR, 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_PWR, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT, - _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, - _______, _______, _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______ - ) -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) { - return MACRO_NONE; + [0] = LAYOUT_JP( + 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_JYEN, 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_UP, KC_RSFT, + MO(1), KC_ZKHK, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC, KC_HENK, KC_KANA, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), + + [1] = LAYOUT_JP( + KC_PWR, 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_PWR, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT, + _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) +{ + return MACRO_NONE; } const uint16_t PROGMEM fn_actions[] = { diff --git a/keyboards/hhkb/keymaps/jp_mac/keymap.c b/keyboards/hhkb/keymaps/jp_mac/keymap.c index e08bf33df11..326f22cd123 100644 --- a/keyboards/hhkb/keymaps/jp_mac/keymap.c +++ b/keyboards/hhkb/keymaps/jp_mac/keymap.c @@ -1,8 +1,7 @@ -#include "hhkb.h" +#include QMK_KEYBOARD_H #define _______ KC_TRNS - /* Layer 0: HHKB JP * ,-----------------------------------------------------------. * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| -| =|Yen|Bsp| @@ -32,25 +31,23 @@ */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = KEYMAP_JP( - 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_JYEN, 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_UP, KC_RSFT, - MO(1), KC_GRV, KC_LALT, KC_LGUI, KC_MHEN, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT - ), - - [1] = KEYMAP_JP( - KC_PWR, 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_PWR, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT, - _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, - _______, _______, _______, _______, _______, _______ , _______, _______, _______, _______, KC_DEL, _______, _______ - ) -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) { - return MACRO_NONE; + [0] = LAYOUT_JP( + 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_JYEN, 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_UP, KC_RSFT, + MO(1), KC_GRV, KC_LALT, KC_LGUI, KC_MHEN, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT), + + [1] = LAYOUT_JP( + KC_PWR, 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_PWR, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT, + _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, _______)}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) +{ + return MACRO_NONE; } const uint16_t PROGMEM fn_actions[] = { diff --git a/keyboards/hhkb/keymaps/krusli/keymap.c b/keyboards/hhkb/keymaps/krusli/keymap.c index bd5dd8372d5..3a01fd80205 100644 --- a/keyboards/hhkb/keymaps/krusli/keymap.c +++ b/keyboards/hhkb/keymaps/krusli/keymap.c @@ -1,7 +1,7 @@ /* -*- eval: (turn-on-orgtbl); -*- * default HHKB Layout */ -#include "hhkb.h" +#include QMK_KEYBOARD_H #define BASE 0 #define HHKB 1 @@ -24,14 +24,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-----------------------+------+------| */ - [BASE] = KEYMAP( // default layer - 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(HHKB), \ - KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), - - + [BASE] = LAYOUT( // default layer + 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(HHKB), + KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), /* Layer HHKB: HHKB mode (HHKB Fn) |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| @@ -50,13 +48,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ - [HHKB] = KEYMAP( - KC_PWR, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ - KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ - 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)}; - + [HHKB] = LAYOUT( + KC_PWR, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, + 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)}; const uint16_t PROGMEM fn_actions[] = { @@ -64,15 +61,19 @@ const uint16_t PROGMEM fn_actions[] = { 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) { + // MACRODOWN only works in this function + switch (id) + { + case 0: + if (record->event.pressed) + { register_code(KC_RSFT); - } else { + } + else + { unregister_code(KC_RSFT); - } + } break; - } + } return MACRO_NONE; }; diff --git a/keyboards/hhkb/keymaps/lxol/keymap.c b/keyboards/hhkb/keymaps/lxol/keymap.c index ccf1e07042f..3e3b3d2ed0c 100644 --- a/keyboards/hhkb/keymaps/lxol/keymap.c +++ b/keyboards/hhkb/keymaps/lxol/keymap.c @@ -1,7 +1,7 @@ /* -*- eval: (turn-on-orgtbl); -*- * lxol HHKB Layout */ -#include "hhkb.h" +#include QMK_KEYBOARD_H #define BASE 0 #define WIN 1 @@ -11,7 +11,6 @@ #define RALTLEV 5 #define LALTLEV 6 - const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Layer 0: Default Layer @@ -30,16 +29,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-------+------+------| */ - [BASE] = KEYMAP( // layer 0 : default - - - 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, LT(LALTLEV,KC_A), LT(LGUILEV,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RGUILEV,KC_L), LT(RALTLEV,KC_SCLN), KC_QUOT, KC_FN0, \ - 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(HHKB), \ - KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT), - + [BASE] = LAYOUT( // layer 0 : default + 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, LT(LALTLEV, KC_A), LT(LGUILEV, KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RGUILEV, KC_L), LT(RALTLEV, KC_SCLN), KC_QUOT, KC_FN0, + 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(HHKB), + KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT), /* Layer 1: HHKB mode (HHKB Fn) |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| @@ -57,13 +53,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |---+---+---+---+---| */ - [HHKB] = KEYMAP( - KC_PWR, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ - KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ - 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), - + [HHKB] = LAYOUT( + KC_PWR, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, + 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), /* Layer LGUI: All keys with RGUI modifier |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| @@ -81,13 +76,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-------+------+------| */ - [RGUILEV] = KEYMAP( // Right GUI layer by KC_L + [RGUILEV] = LAYOUT( // Right GUI layer by KC_L - RGUI(KC_ESC), RGUI(KC_1), RGUI(KC_2), RGUI(KC_3), RGUI(KC_4), RGUI(KC_5), RGUI(KC_6), RGUI(KC_7), RGUI(KC_8), RGUI(KC_9), RGUI(KC_0), RGUI(KC_MINS), RGUI(KC_EQL), RGUI(KC_BSLS), RGUI(KC_GRV), \ - RGUI(KC_TAB), RGUI(KC_Q), RGUI(KC_W), RGUI(KC_E), RGUI(KC_R), RGUI(KC_T), RGUI(KC_Y), RGUI(KC_U), RGUI(KC_I), RGUI(KC_O), RGUI(KC_P), RGUI(KC_LBRC), RGUI(KC_RBRC), RGUI(KC_BSPC), \ - RGUI(KC_LCTL), RGUI(KC_A), RGUI(KC_S), RGUI(KC_D), RGUI(KC_F), RGUI(KC_G), RGUI(KC_H), RGUI(KC_J), RGUI(KC_K), KC_TRNS, KC_TRNS, RGUI(KC_QUOT), KC_FN0, \ - RGUI(KC_LSFT), RGUI(KC_Z), RGUI(KC_X), RGUI(KC_C), RGUI(KC_V), RGUI(KC_B), RGUI(KC_N), RGUI(KC_M), RGUI(KC_COMM), RGUI(KC_DOT), RGUI(KC_SLSH), RGUI(KC_RSFT), KC_TRNS, \ - KC_LALT, KC_LGUI, RGUI(KC_SPC), KC_RGUI, KC_RALT), + RGUI(KC_ESC), RGUI(KC_1), RGUI(KC_2), RGUI(KC_3), RGUI(KC_4), RGUI(KC_5), RGUI(KC_6), RGUI(KC_7), RGUI(KC_8), RGUI(KC_9), RGUI(KC_0), RGUI(KC_MINS), RGUI(KC_EQL), RGUI(KC_BSLS), RGUI(KC_GRV), + RGUI(KC_TAB), RGUI(KC_Q), RGUI(KC_W), RGUI(KC_E), RGUI(KC_R), RGUI(KC_T), RGUI(KC_Y), RGUI(KC_U), RGUI(KC_I), RGUI(KC_O), RGUI(KC_P), RGUI(KC_LBRC), RGUI(KC_RBRC), RGUI(KC_BSPC), + RGUI(KC_LCTL), RGUI(KC_A), RGUI(KC_S), RGUI(KC_D), RGUI(KC_F), RGUI(KC_G), RGUI(KC_H), RGUI(KC_J), RGUI(KC_K), KC_TRNS, KC_TRNS, RGUI(KC_QUOT), KC_FN0, + RGUI(KC_LSFT), RGUI(KC_Z), RGUI(KC_X), RGUI(KC_C), RGUI(KC_V), RGUI(KC_B), RGUI(KC_N), RGUI(KC_M), RGUI(KC_COMM), RGUI(KC_DOT), RGUI(KC_SLSH), RGUI(KC_RSFT), KC_TRNS, + KC_LALT, KC_LGUI, RGUI(KC_SPC), KC_RGUI, KC_RALT), /* Layer LGUI: All keys with LGUI modifier |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| @@ -105,13 +100,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-------+------+------| */ - [LGUILEV] = KEYMAP( // Right GUI layer by KC_L + [LGUILEV] = LAYOUT( // Right GUI layer by KC_L - LGUI(KC_ESC), LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LGUI(KC_MINS), LGUI(KC_EQL), LGUI(KC_BSLS), LGUI(KC_GRV), \ - LGUI(KC_TAB), LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), LGUI(KC_BSPC), \ - LGUI(KC_LCTL), KC_TRNS, KC_TRNS, LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), LGUI(KC_SCLN), LGUI(KC_QUOT), KC_FN0, \ - KC_LSFT, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), KC_RSFT, KC_TRNS, \ - KC_LALT, KC_LGUI, LGUI(KC_SPC), KC_LGUI, KC_RALT), + LGUI(KC_ESC), LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LGUI(KC_MINS), LGUI(KC_EQL), LGUI(KC_BSLS), LGUI(KC_GRV), + LGUI(KC_TAB), LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), LGUI(KC_BSPC), + LGUI(KC_LCTL), KC_TRNS, KC_TRNS, LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), LGUI(KC_SCLN), LGUI(KC_QUOT), KC_FN0, + KC_LSFT, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), KC_RSFT, KC_TRNS, + KC_LALT, KC_LGUI, LGUI(KC_SPC), KC_LGUI, KC_RALT), /* Layer LALT: All keys with RALT modifier |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| @@ -129,13 +124,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-------+------+------| */ - [RALTLEV] = KEYMAP( // Right ALT layer by KC_L + [RALTLEV] = LAYOUT( // Right ALT layer by KC_L - RALT(KC_ESC), RALT(KC_1), RALT(KC_2), RALT(KC_3), RALT(KC_4), RALT(KC_5), RALT(KC_6), RALT(KC_7), RALT(KC_8), RALT(KC_9), RALT(KC_0), RALT(KC_MINS), RALT(KC_EQL), RALT(KC_BSLS), RALT(KC_GRV), \ - RALT(KC_TAB), RALT(KC_Q), RALT(KC_W), RALT(KC_E), RALT(KC_R), RALT(KC_T), RALT(KC_Y), RALT(KC_U), RALT(KC_I), RALT(KC_O), RALT(KC_P), RALT(KC_LBRC), RALT(KC_RBRC), RALT(KC_BSPC), \ - RALT(KC_LCTL), RALT(KC_A), RALT(KC_S), RALT(KC_D), RALT(KC_F), RALT(KC_G), RALT(KC_H), RALT(KC_J), RALT(KC_K), KC_TRNS, KC_TRNS, RALT(KC_QUOT), KC_FN0, \ - RALT(KC_LSFT), RALT(KC_Z), RALT(KC_X), RALT(KC_C), RALT(KC_V), RALT(KC_B), RALT(KC_N), RALT(KC_M), RALT(KC_COMM), RALT(KC_DOT), RALT(KC_SLSH), RALT(KC_RSFT), KC_TRNS, \ - KC_LALT, KC_LGUI, RALT(KC_SPC), KC_RGUI, KC_RALT), + RALT(KC_ESC), RALT(KC_1), RALT(KC_2), RALT(KC_3), RALT(KC_4), RALT(KC_5), RALT(KC_6), RALT(KC_7), RALT(KC_8), RALT(KC_9), RALT(KC_0), RALT(KC_MINS), RALT(KC_EQL), RALT(KC_BSLS), RALT(KC_GRV), + RALT(KC_TAB), RALT(KC_Q), RALT(KC_W), RALT(KC_E), RALT(KC_R), RALT(KC_T), RALT(KC_Y), RALT(KC_U), RALT(KC_I), RALT(KC_O), RALT(KC_P), RALT(KC_LBRC), RALT(KC_RBRC), RALT(KC_BSPC), + RALT(KC_LCTL), RALT(KC_A), RALT(KC_S), RALT(KC_D), RALT(KC_F), RALT(KC_G), RALT(KC_H), RALT(KC_J), RALT(KC_K), KC_TRNS, KC_TRNS, RALT(KC_QUOT), KC_FN0, + RALT(KC_LSFT), RALT(KC_Z), RALT(KC_X), RALT(KC_C), RALT(KC_V), RALT(KC_B), RALT(KC_N), RALT(KC_M), RALT(KC_COMM), RALT(KC_DOT), RALT(KC_SLSH), RALT(KC_RSFT), KC_TRNS, + KC_LALT, KC_LGUI, RALT(KC_SPC), KC_RGUI, KC_RALT), /* Layer LALT: All keys with LALT modifier |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---| @@ -153,14 +148,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-------+------+------| */ - [LALTLEV] = KEYMAP( // Right ALT layer by KC_L - - LALT(KC_ESC), LALT(KC_1), LALT(KC_2), LALT(KC_3), LALT(KC_4), LALT(KC_5), LALT(KC_6), LALT(KC_7), LALT(KC_8), LALT(KC_9), LALT(KC_0), LALT(KC_MINS), LALT(KC_EQL), LALT(KC_BSLS), LALT(KC_GRV), \ - LALT(KC_TAB), LALT(KC_Q), LALT(KC_W), LALT(KC_E), LALT(KC_R), LALT(KC_T), LALT(KC_Y), LALT(KC_U), LALT(KC_I), LALT(KC_O), LALT(KC_P), LALT(KC_LBRC), LALT(KC_RBRC), LALT(KC_BSPC), \ - LALT(KC_LCTL), KC_TRNS, KC_TRNS, LALT(KC_D), LALT(KC_F), LALT(KC_G), LALT(KC_H), LALT(KC_J), LALT(KC_K), LALT(KC_L), LALT(KC_SCLN), LALT(KC_QUOT), KC_FN0, \ - KC_LSFT, LALT(KC_Z), LALT(KC_X), LALT(KC_C), LALT(KC_V), LALT(KC_B), LALT(KC_N), LALT(KC_M), LALT(KC_COMM), LALT(KC_DOT), LALT(KC_SLSH), KC_RSFT, KC_TRNS, \ - KC_LALT, KC_LGUI, LALT(KC_SPC), KC_LGUI, KC_RALT), + [LALTLEV] = LAYOUT( // Right ALT layer by KC_L + LALT(KC_ESC), LALT(KC_1), LALT(KC_2), LALT(KC_3), LALT(KC_4), LALT(KC_5), LALT(KC_6), LALT(KC_7), LALT(KC_8), LALT(KC_9), LALT(KC_0), LALT(KC_MINS), LALT(KC_EQL), LALT(KC_BSLS), LALT(KC_GRV), + LALT(KC_TAB), LALT(KC_Q), LALT(KC_W), LALT(KC_E), LALT(KC_R), LALT(KC_T), LALT(KC_Y), LALT(KC_U), LALT(KC_I), LALT(KC_O), LALT(KC_P), LALT(KC_LBRC), LALT(KC_RBRC), LALT(KC_BSPC), + LALT(KC_LCTL), KC_TRNS, KC_TRNS, LALT(KC_D), LALT(KC_F), LALT(KC_G), LALT(KC_H), LALT(KC_J), LALT(KC_K), LALT(KC_L), LALT(KC_SCLN), LALT(KC_QUOT), KC_FN0, + KC_LSFT, LALT(KC_Z), LALT(KC_X), LALT(KC_C), LALT(KC_V), LALT(KC_B), LALT(KC_N), LALT(KC_M), LALT(KC_COMM), LALT(KC_DOT), LALT(KC_SLSH), KC_RSFT, KC_TRNS, + KC_LALT, KC_LGUI, LALT(KC_SPC), KC_LGUI, KC_RALT), /* Layer WIN: Win layer |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---| @@ -178,31 +172,33 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-------+------+------| */ - [WIN] = KEYMAP( // BASE level with swapped GUI/ALT - - - 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, LT(LGUILEV,KC_A), LT(LALTLEV,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RALTLEV,KC_L), LT(RGUILEV,KC_SCLN), KC_QUOT, KC_FN0, \ - 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(HHKB), \ - KC_RGUI, KC_RALT, KC_SPC, KC_RALT, KC_RGUI)}; + [WIN] = LAYOUT( // BASE level with swapped GUI/ALT + 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, LT(LGUILEV, KC_A), LT(LALTLEV, KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RALTLEV, KC_L), LT(RGUILEV, KC_SCLN), KC_QUOT, KC_FN0, + 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(HHKB), + KC_RGUI, KC_RALT, KC_SPC, KC_RALT, KC_RGUI)}; const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT) // RControl with tap Enter* + [0] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT) // RControl with tap Enter* }; 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) { + // MACRODOWN only works in this function + switch (id) + { + case 0: + if (record->event.pressed) + { register_code(KC_RSFT); - } else { + } + else + { unregister_code(KC_RSFT); - } + } break; - } + } return MACRO_NONE; }; diff --git a/keyboards/hhkb/keymaps/mjt/keymap.c b/keyboards/hhkb/keymaps/mjt/keymap.c index b5cd9971488..d1725f5c75a 100644 --- a/keyboards/hhkb/keymaps/mjt/keymap.c +++ b/keyboards/hhkb/keymaps/mjt/keymap.c @@ -1,7 +1,7 @@ /* -*- eval: (turn-on-orgtbl); -*- * default HHKB Layout */ -#include "hhkb.h" +#include QMK_KEYBOARD_H #define BASE 0 #define HHKB 1 @@ -10,10 +10,11 @@ #define CTL_ESC CTL_T(KC_ESC) #define MACSLEEP LCTL(LSFT(KC_POWER)) -enum hhkb_keycodes { - QWERTY = SAFE_RANGE, - DYNKEY, - DYNAMIC_MACRO_RANGE, +enum hhkb_keycodes +{ + QWERTY = SAFE_RANGE, + DYNKEY, + DYNAMIC_MACRO_RANGE, }; #include "dynamic_macro.h" @@ -36,14 +37,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-----------------------+------+------| */ - [BASE] = KEYMAP( // default layer - 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_DEL, \ - 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, \ - CTL_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), TT(FUNK), \ - KC_LALT, KC_LGUI, /* */ KC_SPC, MO(DYN), KC_RALT), - - + [BASE] = LAYOUT( // default layer + 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_DEL, + 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, + CTL_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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), TT(FUNK), + KC_LALT, KC_LGUI, /* */ KC_SPC, MO(DYN), KC_RALT), /* Layer HHKB: HHKB mode (HHKB Fn) |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----| @@ -62,7 +61,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [HHKB] = KEYMAP( + [HHKB] = LAYOUT( KC_PWR, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ @@ -70,20 +69,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), */ - [FUNK] = KEYMAP( - KC_PWR, 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_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \ - KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ - 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), -[DYN] = KEYMAP( -KC_TRNS, DYN_REC_START1, DYN_REC_START2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, \ -KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, \ -KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MACSLEEP, KC_HOME, KC_END , KC_TRNS, \ -KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_TRNS, \ - KC_TRNS, KC_TRNS, DYN_REC_STOP, KC_TRNS, KC_TRNS) - }; - + [FUNK] = LAYOUT( + KC_PWR, 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_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, + 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), + [DYN] = LAYOUT( + KC_TRNS, DYN_REC_START1, DYN_REC_START2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MACSLEEP, KC_HOME, KC_END, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, DYN_REC_STOP, KC_TRNS, KC_TRNS)}; const uint16_t PROGMEM fn_actions[] = { @@ -91,24 +88,30 @@ const uint16_t PROGMEM fn_actions[] = { 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) { + // MACRODOWN only works in this function + switch (id) + { + case 0: + if (record->event.pressed) + { register_code(KC_RSFT); - } else { + } + else + { unregister_code(KC_RSFT); - } + } break; - } + } return MACRO_NONE; }; -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - uint16_t macro_kc = (keycode == MO(DYN) ? DYN_REC_STOP : keycode); - if (!process_record_dynamic_macro(macro_kc, record)) { - return false; - } +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + uint16_t macro_kc = (keycode == MO(DYN) ? DYN_REC_STOP : keycode); + if (!process_record_dynamic_macro(macro_kc, record)) + { + return false; + } - return true; + return true; } diff --git a/keyboards/hhkb/keymaps/rdg_jp/keymap.c b/keyboards/hhkb/keymaps/rdg_jp/keymap.c index 700ba3a0b76..2afac7a0b0e 100644 --- a/keyboards/hhkb/keymaps/rdg_jp/keymap.c +++ b/keyboards/hhkb/keymaps/rdg_jp/keymap.c @@ -1,21 +1,20 @@ -#include "hhkb.h" +#include QMK_KEYBOARD_H #define _______ KC_TRNS -enum { - ZER, - HDN, - OSY +enum +{ + ZER, + HDN, + OSY }; - #define CTL_ESC CTL_T(KC_ESC) #define SFT_BSP SFT_T(KC_BSPC) #define SCRNS3 LGUI(LCTL(LSFT(KC_3))) #define SCRNS4 LGUI(LCTL(LSFT(KC_4))) - /* hhkb jp ~ layout * ,-----------------------------------------------------------. * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| -| =|Yen|Bsp| @@ -31,33 +30,30 @@ enum { */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [ZER] = KEYMAP_JP( - 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_INS, 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, - CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_GRV, 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_BSLS, KC_UP, KC_RSFT, - MO(HDN), KC_LCTL, KC_LALT, KC_LGUI, MO(HDN), KC_SPC, SFT_BSP, MO(HDN), MO(OSY), KC_NO, KC_LEFT, KC_DOWN, KC_RGHT - ), - - [HDN] = KEYMAP_JP( - 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_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, - _______, KC_TILD, KC_GRV, KC_BSLS, KC_PIPE, KC_MINS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TILD, KC_GRV, _______, _______, - _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, _______, _______, KC_ENT, _______, _______, _______, _______, KC_PGUP, _______, - _______, _______, _______, _______, _______, KC_UNDS , KC_DEL, _______, _______, _______, KC_HOME, KC_PGDN, KC_END - ), - - [OSY] = KEYMAP_JP( - _______, _______, _______, SCRNS3, SCRNS4, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______ - ) -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) { - return MACRO_NONE; + [ZER] = LAYOUT_JP( + 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_INS, 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, + CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_GRV, 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_BSLS, KC_UP, KC_RSFT, + MO(HDN), KC_LCTL, KC_LALT, KC_LGUI, MO(HDN), KC_SPC, SFT_BSP, MO(HDN), MO(OSY), KC_NO, KC_LEFT, KC_DOWN, KC_RGHT), + + [HDN] = LAYOUT_JP( + 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_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, + _______, KC_TILD, KC_GRV, KC_BSLS, KC_PIPE, KC_MINS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TILD, KC_GRV, _______, _______, + _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, _______, _______, KC_ENT, _______, _______, _______, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, KC_UNDS, KC_DEL, _______, _______, _______, KC_HOME, KC_PGDN, KC_END), + + [OSY] = LAYOUT_JP( + _______, _______, _______, SCRNS3, SCRNS4, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) +{ + return MACRO_NONE; } const uint16_t PROGMEM fn_actions[] = { diff --git a/keyboards/hhkb/keymaps/sh_jp/keymap.c b/keyboards/hhkb/keymaps/sh_jp/keymap.c index d4cb3b04188..39710a65428 100644 --- a/keyboards/hhkb/keymaps/sh_jp/keymap.c +++ b/keyboards/hhkb/keymaps/sh_jp/keymap.c @@ -1,58 +1,54 @@ -#include "hhkb.h" +#include QMK_KEYBOARD_H #define _______ KC_TRNS -enum { - DVOR, - QWER, - NEW_CMD, - SYMB, - FUNC +enum +{ + DVOR, + QWER, + NEW_CMD, + SYMB, + FUNC }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [DVOR] = KEYMAP_JP( - 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_JYEN, 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_SLSH, KC_EQL, - KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_BSLS, KC_ENT, - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RO, KC_UP, KC_RSFT, - MO(FUNC), KC_ZKHK, KC_LALT, MO(NEW_CMD), MO(SYMB), MT(MOD_LSFT, KC_SPC), MO(SYMB), KC_TAB, KC_RGUI, TG(QWER), KC_LEFT, KC_DOWN, KC_RGHT - ), - [QWER] = KEYMAP_JP( - 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_JYEN, 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_UP, KC_RSFT, - MO(FUNC), KC_ZKHK, KC_LALT, MO(NEW_CMD), MO(SYMB), MT(MOD_LSFT, KC_SPC), MO(SYMB), KC_TAB, KC_RGUI, _______, KC_LEFT, KC_DOWN, KC_RGHT - ), - - [NEW_CMD] = KEYMAP_JP( - _______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), _______, _______, _______, LGUI(KC_BSPC), - _______, LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), - _______, LGUI(KC_A), LGUI(KC_S), LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), _______, _______, _______, _______, - LGUI(KC_LSFT), LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), _______, _______, _______, - _______, _______, _______, _______, _______, LGUI(KC_SPC), _______, _______, _______, _______, LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT) - ), - - [SYMB] = KEYMAP_JP( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, LSFT(KC_LBRC), LSFT(KC_RBRC), _______, _______,_______, _______, - _______, LSFT(KC_1),LSFT(KC_2),LSFT(KC_3),LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - [FUNC] = KEYMAP_JP( - KC_PWR, 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_PWR, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT, - _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, - _______, _______, _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______ - ) -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) { - return MACRO_NONE; + [DVOR] = LAYOUT_JP( + 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_JYEN, 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_SLSH, KC_EQL, + KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_BSLS, KC_ENT, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RO, KC_UP, KC_RSFT, + MO(FUNC), KC_ZKHK, KC_LALT, MO(NEW_CMD), MO(SYMB), MT(MOD_LSFT, KC_SPC), MO(SYMB), KC_TAB, KC_RGUI, TG(QWER), KC_LEFT, KC_DOWN, KC_RGHT), + [QWER] = LAYOUT_JP( + 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_JYEN, 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_UP, KC_RSFT, + MO(FUNC), KC_ZKHK, KC_LALT, MO(NEW_CMD), MO(SYMB), MT(MOD_LSFT, KC_SPC), MO(SYMB), KC_TAB, KC_RGUI, _______, KC_LEFT, KC_DOWN, KC_RGHT), + + [NEW_CMD] = LAYOUT_JP( + _______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), _______, _______, _______, LGUI(KC_BSPC), + _______, LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), + _______, LGUI(KC_A), LGUI(KC_S), LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), _______, _______, _______, _______, + LGUI(KC_LSFT), LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), _______, _______, _______, + _______, _______, _______, _______, _______, LGUI(KC_SPC), _______, _______, _______, _______, LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT)), + + [SYMB] = LAYOUT_JP( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, LSFT(KC_LBRC), LSFT(KC_RBRC), _______, _______, _______, _______, + _______, LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [FUNC] = LAYOUT_JP( + KC_PWR, 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_PWR, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT, + _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)}; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) +{ + return MACRO_NONE; } const uint16_t PROGMEM fn_actions[] = { diff --git a/keyboards/hhkb/keymaps/shela/keymap.c b/keyboards/hhkb/keymaps/shela/keymap.c index f0700d7ba13..5f3881539a4 100644 --- a/keyboards/hhkb/keymaps/shela/keymap.c +++ b/keyboards/hhkb/keymaps/shela/keymap.c @@ -1,11 +1,12 @@ /* * HHKB Pro 2 US Layout for shela */ -#include "hhkb.h" +#include QMK_KEYBOARD_H #include "keymap_jis2us.h" #include "action_pseudo_lut.h" -enum keymap_layout { +enum keymap_layout +{ BASE = 0, PSEUDO_US, DVORAK, @@ -31,11 +32,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------' */ [BASE] = - KEYMAP(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_GRV, 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_ENT, \ - OSM(MOD_LSFT),KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_FN0, \ - KC_LALT,KC_LGUI, KC_FN2, KC_RGUI,KC_RALT), + 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_GRV, 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_ENT, + OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_FN0, + KC_LALT, KC_LGUI, KC_FN2, KC_RGUI, KC_RALT), /* Layer 1: Pseudo US Layout Layer * ,-----------------------------------------------------------------------------------------. @@ -51,11 +52,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------' */ [PSEUDO_US] = - KEYMAP(KC_ESC, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_BSPC, \ - KC_TAB, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, \ - KC_LCTL,KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_ENT, \ - KC_LSFT,KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_RSFT,KC_FN0, \ - KC_LGUI,KC_FN3, KC_FN2, KC_FN4 ,KC_RGUI), + LAYOUT(KC_ESC, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_BSPC, + KC_TAB, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, + KC_LCTL, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_ENT, + KC_LSFT, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_RSFT, KC_FN0, + KC_LGUI, KC_FN3, KC_FN2, KC_FN4, KC_RGUI), /* Layer 2: Dvorak Layer * ,-----------------------------------------------------------------------------------------. @@ -71,11 +72,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------' */ [DVORAK] = - KEYMAP(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_GRV, 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_SLSH,KC_EQL, KC_BSLS, \ - KC_LCTL,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_LSFT,KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,KC_FN0, \ - KC_LALT,KC_LGUI, KC_FN2, KC_RGUI,KC_RALT), + LAYOUT(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_GRV, 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_SLSH, KC_EQL, KC_BSLS, + KC_LCTL, 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_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_FN0, + KC_LALT, KC_LGUI, KC_FN2, KC_RGUI, KC_RALT), /* Layer 3: Mouse layer * ,-----------------------------------------------------------------------------------------. @@ -91,11 +92,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------' */ [MOUSE] = - 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_NO, KC_TRNS, \ - KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_WH_U,KC_WH_R,KC_NO, KC_NO, KC_NO, KC_NO, \ - KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,KC_NO, KC_NO, KC_TRNS, \ - KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1,KC_BTN2,KC_BTN3,KC_NO, KC_NO, KC_TRNS,KC_FN0, \ - KC_TRNS,KC_TRNS, KC_BTN1, KC_TRNS,KC_TRNS), + 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_NO, KC_TRNS, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NO, KC_NO, KC_TRNS, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_BTN2, KC_BTN3, KC_NO, KC_NO, KC_TRNS, KC_FN0, + KC_TRNS, KC_TRNS, KC_BTN1, KC_TRNS, KC_TRNS), /* Layer 4: Tenkey layer * ,-----------------------------------------------------------------------------------------. @@ -111,11 +112,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------' */ [TENKEY] = - KEYMAP(KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSLS,KC_PAST,KC_PMNS,KC_NO, KC_BSPC, \ - KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_7,KC_KP_8,KC_KP_9,KC_PPLS,KC_NO, \ - KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_4,KC_KP_5,KC_KP_6,KC_PENT, \ - KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_1,KC_KP_2,KC_KP_3,KC_PPLS,KC_FN0, \ - KC_TRNS,KC_TRNS, KC_FN2, KC_KP_0,KC_PDOT), + LAYOUT(KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, KC_NO, KC_BSPC, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_NO, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_PENT, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_PPLS, KC_FN0, + KC_TRNS, KC_TRNS, KC_FN2, KC_KP_0, KC_PDOT), /* Layer 5: HHKB mode (HHKB Fn) * ,-----------------------------------------------------------------------------------------. @@ -131,11 +132,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------' */ [HHKB] = - KEYMAP(KC_PWR, 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_FN5, KC_FN6, KC_FN7, KC_FN8, KC_FN9, KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS,KC_UP, KC_TRNS,KC_BSPC, \ - KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_PENT, \ - 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), + LAYOUT(KC_PWR, 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_FN5, KC_FN6, KC_FN7, KC_FN8, KC_FN9, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, + KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, + 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), /* Layer 6: SpaceFN * ,-----------------------------------------------------------------------------------------. @@ -151,26 +152,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-----------------------------------------------------------------' */ [SPACE_FN] = - KEYMAP(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, KC_NO, KC_DEL, \ - KC_TRNS,KC_HOME,KC_UP, KC_END, KC_NO, KC_NO, KC_NO, KC_HOME,KC_END, KC_NO, KC_PSCR,KC_SLCK,KC_PAUS,KC_INS, \ - KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_PGUP,KC_NO, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,KC_NO, KC_NO, KC_TRNS, \ - KC_TRNS,KC_NO, KC_NO, KC_PGDN,KC_NO, KC_SPC, KC_NO, KC_PGDN,KC_PGUP,KC_NO, KC_NO, KC_TRNS,KC_NO, \ - KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS), + 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, KC_NO, KC_DEL, + KC_TRNS, KC_HOME, KC_UP, KC_END, KC_NO, KC_NO, KC_NO, KC_HOME, KC_END, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGUP, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO, KC_TRNS, + KC_TRNS, KC_NO, KC_NO, KC_PGDN, KC_NO, KC_SPC, KC_NO, KC_PGDN, KC_PGUP, KC_NO, KC_NO, KC_TRNS, KC_NO, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), }; /* * user defined action function */ -enum function_id { +enum function_id +{ PSEUDO_US_FUNCTION, }; -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) +{ - switch (id) { - case PSEUDO_US_FUNCTION: - action_pseudo_lut(record, BASE, keymap_jis2us); - break; + switch (id) + { + case PSEUDO_US_FUNCTION: + action_pseudo_lut(record, BASE, keymap_jis2us); + break; } } diff --git a/keyboards/hhkb/keymaps/shela/keymap_jis2us.h b/keyboards/hhkb/keymaps/shela/keymap_jis2us.h index cf2bd4f0e84..edc1e6d869b 100644 --- a/keyboards/hhkb/keymaps/shela/keymap_jis2us.h +++ b/keyboards/hhkb/keymaps/shela/keymap_jis2us.h @@ -1,5 +1,5 @@ -#ifndef KEYMAP_JIS2US_H -#define KEYMAP_JIS2US_H +#ifndef LAYOUT_JIS2US_H +#define LAYOUT_JIS2US_H /* keymap for convert from JIS to US */ const uint16_t PROGMEM keymap_jis2us[][2] = { diff --git a/keyboards/hhkb/keymaps/smt/keymap.c b/keyboards/hhkb/keymaps/smt/keymap.c index 484df851a52..428861640fc 100644 --- a/keyboards/hhkb/keymaps/smt/keymap.c +++ b/keyboards/hhkb/keymaps/smt/keymap.c @@ -1,18 +1,19 @@ /* -*- eval: (turn-on-orgtbl); -*- * default HHKB Layout */ -#include "hhkb.h" +#include QMK_KEYBOARD_H #define _QWERTY 0 #define _COLEMAK 1 #define _DVORAK 2 #define _HHKB 3 -enum planck_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - HHKB +enum planck_keycodes +{ + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + HHKB }; // Fillers to make layering more clear @@ -20,10 +21,10 @@ enum planck_keycodes { #define XXXXXXX KC_NO // Custom macros -#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl -#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift -#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift) -#define MEH_GRV MEH_T(KC_GRV) // Tap for Backtick, hold for Meh (Ctrl+Alt+Shift) +#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift) +#define MEH_GRV MEH_T(KC_GRV) // Tap for Backtick, hold for Meh (Ctrl+Alt+Shift) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -43,14 +44,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-----------------------+------+------| */ - [_QWERTY] = KEYMAP( // Qwerty layer - 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, MEH_GRV, \ - 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, \ - CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, SFT_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(_HHKB), \ - KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), - - + [_QWERTY] = LAYOUT( // Qwerty layer + 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, MEH_GRV, + 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, + CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, SFT_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(_HHKB), + KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), /* Layer COLEMAK: Colemak Layer |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| @@ -68,14 +67,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-----------------------+------+------| */ - [_COLEMAK] = KEYMAP( // Colemak layer - 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, MEH_GRV, \ - 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, \ - CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, SFT_ENT, \ - KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_HHKB), \ - KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), - - + [_COLEMAK] = LAYOUT( // Colemak layer + 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, MEH_GRV, + 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, + CTL_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, SFT_ENT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_HHKB), + KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), /* Layer DVORAK: Dvorak Layer |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---| @@ -93,14 +90,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |------+------+-----------------------+------+------| */ - [_DVORAK] = KEYMAP( // Dvorak layer - 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, MEH_GRV, \ - 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, \ - CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, SFT_ENT, \ - KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(_HHKB), \ - KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), - - + [_DVORAK] = LAYOUT( // Dvorak layer + 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, MEH_GRV, + 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, + CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, SFT_ENT, + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(_HHKB), + KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT), /* Layer HHKB: HHKB mode (HHKB Fn) |------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-------+-------+-----| @@ -119,13 +114,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ - [_HHKB] = KEYMAP( - KC_PWR, 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_BSPC, \ - _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \ - _______, _______, QWERTY, COLEMAK, DVORAK, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, \ - _______, _______, _______, _______, _______)}; - + [_HHKB] = LAYOUT( + KC_PWR, 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_BSPC, + _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, + _______, _______, QWERTY, COLEMAK, DVORAK, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, + _______, _______, _______, _______, _______)}; const uint16_t PROGMEM fn_actions[] = { @@ -133,44 +127,54 @@ const uint16_t PROGMEM fn_actions[] = { 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) { + // MACRODOWN only works in this function + switch (id) + { + case 0: + if (record->event.pressed) + { register_code(KC_RSFT); - } else { + } + else + { unregister_code(KC_RSFT); - } + } break; - } + } return MACRO_NONE; }; -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); } -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { +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; + 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; + 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; - } - return true; + if (record->event.pressed) + { + persistent_default_layer_set(1UL << _DVORAK); + } + return false; + break; + } + return true; } From 43e589aa02379ec932ce530fa7c3e7e918eae7cb Mon Sep 17 00:00:00 2001 From: Fig Date: Mon, 30 Apr 2018 17:20:05 +0200 Subject: [PATCH 089/152] Add the fig-r layout to the preonic (#2858) --- keyboards/preonic/keymaps/fig-r/config.h | 42 +++++ keyboards/preonic/keymaps/fig-r/keymap.c | 210 ++++++++++++++++++++++ keyboards/preonic/keymaps/fig-r/readme.md | 9 + keyboards/preonic/keymaps/fig-r/rules.mk | 0 4 files changed, 261 insertions(+) create mode 100644 keyboards/preonic/keymaps/fig-r/config.h create mode 100644 keyboards/preonic/keymaps/fig-r/keymap.c create mode 100644 keyboards/preonic/keymaps/fig-r/readme.md create mode 100644 keyboards/preonic/keymaps/fig-r/rules.mk diff --git a/keyboards/preonic/keymaps/fig-r/config.h b/keyboards/preonic/keymaps/fig-r/config.h new file mode 100644 index 00000000000..dc3a7ba261b --- /dev/null +++ b/keyboards/preonic/keymaps/fig-r/config.h @@ -0,0 +1,42 @@ +#ifndef CONFIG_USER_H +#define CONFIG_USER_H + +#include "config_common.h" + +#ifdef AUDIO_ENABLE + #define STARTUP_SONG SONG(PREONIC_SOUND) + // #define STARTUP_SONG SONG(NO_SOUND) + + #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ + SONG(COLEMAK_SOUND), \ + SONG(DVORAK_SOUND) \ + } +#endif + +#define MUSIC_MASK (keycode != KC_NO) + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ + +#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 2 + +#endif diff --git a/keyboards/preonic/keymaps/fig-r/keymap.c b/keyboards/preonic/keymaps/fig-r/keymap.c new file mode 100644 index 00000000000..86c87b0aca1 --- /dev/null +++ b/keyboards/preonic/keymaps/fig-r/keymap.c @@ -0,0 +1,210 @@ +/* Copyright 2015-2017 Fig + * + * 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 + +enum preonic_layers { + _DVORAK, + _QWERTY, + _LOWER, + _RAISE, + _ADJUST, + _COMMAND +}; + +enum preonic_keycodes { + DVORAK = SAFE_RANGE, + QWERTY, + LOWER, + RAISE, + COMMAND +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Dvorak + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Esc | A | O | E | U | I | D | H | T | N | S | / | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Cmd | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_DVORAK] = LAYOUT_preonic_grid( \ + 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_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \ + 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_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT, \ + COMMAND, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Qwerty + * ,-----------------------------------------------------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Esc | A | S | D | F | G | H | J | K | L | ; | ' | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | Cmd | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | + * `-----------------------------------------------------------------------------------' + */ +[_QWERTY] = LAYOUT_preonic_grid( \ + 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ + 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \ + COMMAND, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ +), + +/* Lower + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ` | |CtrlS |CtrlY |CtrlZ | | | _ | + | { | } | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | |CtrlX |CtrlC |CtrlV | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Home | Down | Up | End | + * `-----------------------------------------------------------------------------------' + */ +[_LOWER] = LAYOUT_preonic_grid( \ + 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_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ + KC_GRV, _______, LCTL(KC_S), LCTL(KC_Y), LCTL(KC_Z), _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \ + _______, _______, LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDOWN, KC_PGUP, KC_END \ +), + +/* Raise + * ,-----------------------------------------------------------------------------------. + * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | ` | | | | | | | - | = | [ | ] | \ | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | Next | Vol- | Vol+ | Play | + * `-----------------------------------------------------------------------------------' + */ +[_RAISE] = LAYOUT_preonic_grid( \ + 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_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \ + KC_GRV, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \ +), + +/* Adjust (Lower + Raise) + * ,-----------------------------------------------------------------------------------. + * | | | | | | | | | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | |Reset |Debug | | | | | | | | | | + * |------+------+------+------+------+-------------+------+------+------+------+------| + * | | |MusMod|AudOn |AudOff|AGNorm|AGSwap|Qwerty|Dvorak| | | | + * |------+------+------+------+------+------|------+------+------+------+------+------| + * | |Voice-|Voice+|MusOn |MusOff|MidOn |MidOff| | | | | | + * |------+------+------+------+------+------+------+------+------+------+------+------| + * | | | | | | | | | | | | + * `-----------------------------------------------------------------------------------' + */ +[_ADJUST] = LAYOUT_preonic_grid( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, DVORAK, _______, _______, _______, \ + _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +), + +/* Cmd +* ,-----------------------------------------------------------------------------------. +* | | | | | | | | | | | | | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | | | | | | | | | | | | | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | | | | | | | | | | | | | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | | | | | | | | | | | | | +* |------+------+------+------+------+------+------+------+------+------+------+------| +* | | | | | | | | | | | | +* `-----------------------------------------------------------------------------------' + */ +[_COMMAND] = LAYOUT_preonic_grid( \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ +) + +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case DVORAK: + if (record->event.pressed) { + set_single_persistent_default_layer(_DVORAK); + } + return false; + break; + case QWERTY: + if (record->event.pressed) { + set_single_persistent_default_layer(_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 COMMAND: + if (record->event.pressed) { + layer_on(_COMMAND); + } else { + layer_off(_COMMAND); + } + return false; + break; + } + return true; +}; diff --git a/keyboards/preonic/keymaps/fig-r/readme.md b/keyboards/preonic/keymaps/fig-r/readme.md new file mode 100644 index 00000000000..16d752b79db --- /dev/null +++ b/keyboards/preonic/keymaps/fig-r/readme.md @@ -0,0 +1,9 @@ +# Fig-r Preonic layout. + +Not designed! + +Version 1: + +Use Dvorak layout by default. + +_COMMAND layout is to work with sxhkd. diff --git a/keyboards/preonic/keymaps/fig-r/rules.mk b/keyboards/preonic/keymaps/fig-r/rules.mk new file mode 100644 index 00000000000..e69de29bb2d From 187d76476ec8bbf066b367956dc3d4f9fdba69a9 Mon Sep 17 00:00:00 2001 From: Eric <22215921+ericywl@users.noreply.github.com> Date: Mon, 30 Apr 2018 23:22:02 +0800 Subject: [PATCH 090/152] QMK Configurator Support for JD45 and JD40 (#2851) * Added JD45 Config * Added JD40 Config * Changed KEYMAP to LAYOUT for JD40 and JD45 --- keyboards/jd40/info.json | 57 +++ keyboards/jd40/jd40.h | 2 +- keyboards/jd40/keymaps/default/keymap.c | 205 ++++---- keyboards/jd40/keymaps/vanagon/config.h | 2 +- keyboards/jd40/keymaps/vanagon/keymap.c | 45 +- keyboards/jd45/info.json | 60 +++ keyboards/jd45/jd45.h | 2 +- keyboards/jd45/keymaps/blakedietz/config.h | 2 +- keyboards/jd45/keymaps/blakedietz/keymap.c | 409 ++++++++-------- keyboards/jd45/keymaps/default/keymap.c | 12 +- keyboards/jd45/keymaps/jeebak/config.h | 2 +- keyboards/jd45/keymaps/jeebak/keymap.c | 539 +++++++++++---------- keyboards/jd45/keymaps/justin/keymap.c | 94 ++-- keyboards/jd45/keymaps/mjt/keymap.c | 105 ++-- keyboards/jd45/keymaps/mjt6u/keymap.c | 198 ++++---- 15 files changed, 956 insertions(+), 778 deletions(-) create mode 100644 keyboards/jd40/info.json create mode 100644 keyboards/jd45/info.json diff --git a/keyboards/jd40/info.json b/keyboards/jd40/info.json new file mode 100644 index 00000000000..4d321ee3562 --- /dev/null +++ b/keyboards/jd40/info.json @@ -0,0 +1,57 @@ +{ + "keyboard_name": "jd40", + "url": "", + "maintainer": "qmk", + "width": 12, + "height": 4, + "layouts": { + "LAYOUT": { + "layout": [ + { "label": "Esc", "x": 0, "y": 0 }, + { "label": "Q", "x": 1, "y": 0 }, + { "label": "W", "x": 2, "y": 0 }, + { "label": "E", "x": 3, "y": 0 }, + { "label": "R", "x": 4, "y": 0 }, + { "label": "T", "x": 5, "y": 0 }, + { "label": "Y", "x": 6, "y": 0 }, + { "label": "U", "x": 7, "y": 0 }, + { "label": "I", "x": 8, "y": 0 }, + { "label": "O", "x": 9, "y": 0 }, + { "label": "P", "x": 10, "y": 0 }, + { "label": "Back
Space", "x": 11, "y": 0 }, + { "label": "Tab", "x": 0, "y": 1, "w": 1.25 }, + { "label": "A", "x": 1.25, "y": 1 }, + { "label": "S", "x": 2.25, "y": 1 }, + { "label": "D", "x": 3.25, "y": 1 }, + { "label": "F", "x": 4.25, "y": 1 }, + { "label": "G", "x": 5.25, "y": 1 }, + { "label": "H", "x": 6.25, "y": 1 }, + { "label": "J", "x": 7.25, "y": 1 }, + { "label": "K", "x": 8.25, "y": 1 }, + { "label": "L", "x": 9.25, "y": 1 }, + { "label": "Enter", "x": 10.25, "y": 1, "w": 1.75 }, + { "label": "Shift", "x": 0, "y": 2, "w": 1.75 }, + { "label": "Z", "x": 1.75, "y": 2 }, + { "label": "X", "x": 2.75, "y": 2 }, + { "label": "C", "x": 3.75, "y": 2 }, + { "label": "V", "x": 4.75, "y": 2 }, + { "label": "B", "x": 5.75, "y": 2 }, + { "label": "N", "x": 6.75, "y": 2 }, + { "label": "M", "x": 7.75, "y": 2 }, + { "label": "<", "x": 8.75, "y": 2 }, + { "label": "Shift", "x": 9.75, "y": 2, "w": 1.25 }, + { "label": ">", "x": 11, "y": 2 }, + { "label": "Ctrl", "x": 0, "y": 3 }, + { "label": "Fn", "x": 1, "y": 3 }, + { "label": "Alt", "x": 2, "y": 3 }, + { "label": "Super", "x": 3, "y": 3, "w": 1.25 }, + { "x": 4.25, "y": 3, "w": 1.75 }, + { "x": 6, "y": 3, "w": 1.75 }, + { "label": "Menu", "x": 7.75, "y": 3, "w": 1.25 }, + { "label": "Alt", "x": 9, "y": 3 }, + { "label": "Fn2", "x": 10, "y": 3 }, + { "label": "Ctrl", "x": 11, "y": 3 } + ] + } + } +} diff --git a/keyboards/jd40/jd40.h b/keyboards/jd40/jd40.h index 77a12229939..0000bc7ed9e 100644 --- a/keyboards/jd40/jd40.h +++ b/keyboards/jd40/jd40.h @@ -30,7 +30,7 @@ inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); } /* JD40 MKII keymap definition macro */ -#define KEYMAP( \ +#define LAYOUT( \ 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, K30, K31, K32, K33, K34, \ diff --git a/keyboards/jd40/keymaps/default/keymap.c b/keyboards/jd40/keymaps/default/keymap.c index 79ac146c9eb..b8cff95ac46 100644 --- a/keyboards/jd40/keymaps/default/keymap.c +++ b/keyboards/jd40/keymaps/default/keymap.c @@ -1,4 +1,4 @@ -#include "jd40.h" +#include QMK_KEYBOARD_H #include "action_layer.h" #define _BL 0 @@ -7,32 +7,33 @@ #define _UL 3 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BL] = KEYMAP( - F12, Q, W, E, R, T, Y, U, I, O, P, BSPC, - TAB, A, S, D, F, G, H, J, K, L, ENT, - LSFT, Z, X, C, V, B, N, M, COMM, UP, DOT, - LCTL, LGUI, LALT, FN0, SPC, SPC, FN0, LEFT, DOWN, RIGHT ), - - [_AL] = KEYMAP( - GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, DEL, - CAPS, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, SCLN, PGUP, QUOT, - TRNS, TRNS, TRNS, TRNS, FN3, FN3, TRNS, HOME, PGDN, END ), + [_BL] = LAYOUT( + F12, Q, W, E, R, T, Y, U, I, O, P, BSPC, + TAB, A, S, D, F, G, H, J, K, L, ENT, + LSFT, Z, X, C, V, B, N, M, COMM, UP, DOT, + LCTL, LGUI, LALT, FN0, SPC, SPC, FN0, LEFT, DOWN, RIGHT), - [_FL] = KEYMAP( - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS ), - - [_UL] = KEYMAP( - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - TRNS, FN4, FN5, FN11, FN10, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS ), + [_AL] = LAYOUT( + GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, DEL, + CAPS, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, SCLN, PGUP, QUOT, + TRNS, TRNS, TRNS, TRNS, FN3, FN3, TRNS, HOME, PGDN, END), + + [_FL] = LAYOUT( + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), + + [_UL] = LAYOUT( + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, FN4, FN5, FN11, FN10, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), }; -enum function_id { +enum function_id +{ RGBLED_TOGGLE, RGBLED_STEP_MODE, RGBLED_INCREASE_HUE, @@ -41,20 +42,20 @@ enum function_id { RGBLED_DECREASE_SAT, RGBLED_INCREASE_VAL, RGBLED_DECREASE_VAL, - SHIFT_ESC, + SHIFT_ESC, }; const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_LAYER_MOMENTARY(1), // Momentary Fn overlay - [1] = ACTION_LAYER_TOGGLE(2), // Toggle Arrow Layer overlay - [2] = ACTION_LAYER_TAP_KEY(2, KC_CAPS), // Tap to toggle caps lock and hold to activate function layer - [3] = ACTION_LAYER_TOGGLE(3), // Toggle Underglow Layer overlay - [4] = ACTION_FUNCTION(RGBLED_TOGGLE), //Turn on/off underglow - [5] = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode - [6] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), - [7] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), - [8] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), - [9] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), + [0] = ACTION_LAYER_MOMENTARY(1), // Momentary Fn overlay + [1] = ACTION_LAYER_TOGGLE(2), // Toggle Arrow Layer overlay + [2] = ACTION_LAYER_TAP_KEY(2, KC_CAPS), // Tap to toggle caps lock and hold to activate function layer + [3] = ACTION_LAYER_TOGGLE(3), // Toggle Underglow Layer overlay + [4] = ACTION_FUNCTION(RGBLED_TOGGLE), //Turn on/off underglow + [5] = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode + [6] = ACTION_FUNCTION(RGBLED_INCREASE_HUE), + [7] = ACTION_FUNCTION(RGBLED_DECREASE_HUE), + [8] = ACTION_FUNCTION(RGBLED_INCREASE_SAT), + [9] = ACTION_FUNCTION(RGBLED_DECREASE_SAT), [10] = ACTION_FUNCTION(RGBLED_INCREASE_VAL), [11] = ACTION_FUNCTION(RGBLED_DECREASE_VAL), [12] = ACTION_FUNCTION(SHIFT_ESC), @@ -62,103 +63,133 @@ const uint16_t PROGMEM fn_actions[] = { 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) { + // MACRODOWN only works in this function + switch (id) + { + case 0: + if (record->event.pressed) + { register_code(KC_RSFT); - } else { + } + else + { unregister_code(KC_RSFT); - } + } break; - } + } return MACRO_NONE; }; -void matrix_scan_user(void) { +void matrix_scan_user(void) +{ -// Layer LED indicators -// ESC led on when in function layer, WASD cluster leds enabled when on arrow cluster + // Layer LED indicators + // ESC led on when in function layer, WASD cluster leds enabled when on arrow cluster uint32_t layer = layer_state; - if (layer & (1<<1)) { + if (layer & (1 << 1)) + { //gh60_wasd_leds_on(); - } else { + } + else + { //gh60_wasd_leds_off(); } - if (layer & (1<<2)) { + if (layer & (1 << 2)) + { //gh60_esc_led_on(); - } else { + } + else + { //gh60_esc_led_off(); } }; -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) +#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { - switch (id) { +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch (id) + { case RGBLED_TOGGLE: - //led operations - if (record->event.pressed) { - rgblight_toggle(); + //led operations + if (record->event.pressed) + { + rgblight_toggle(); } break; case RGBLED_INCREASE_HUE: - if (record->event.pressed) { - rgblight_increase_hue(); + if (record->event.pressed) + { + rgblight_increase_hue(); } break; case RGBLED_DECREASE_HUE: - if (record->event.pressed) { - rgblight_decrease_hue(); + if (record->event.pressed) + { + rgblight_decrease_hue(); } break; case RGBLED_INCREASE_SAT: - if (record->event.pressed) { - rgblight_increase_sat(); + if (record->event.pressed) + { + rgblight_increase_sat(); } break; case RGBLED_DECREASE_SAT: - if (record->event.pressed) { - rgblight_decrease_sat(); + if (record->event.pressed) + { + rgblight_decrease_sat(); } break; case RGBLED_INCREASE_VAL: - if (record->event.pressed) { - rgblight_increase_val(); + if (record->event.pressed) + { + rgblight_increase_val(); } break; case RGBLED_DECREASE_VAL: - if (record->event.pressed) { - rgblight_decrease_val(); + if (record->event.pressed) + { + rgblight_decrease_val(); } break; case RGBLED_STEP_MODE: - if (record->event.pressed) { - rgblight_step(); + if (record->event.pressed) + { + rgblight_step(); } break; - static uint8_t shift_esc_shift_mask; + static uint8_t shift_esc_shift_mask; // Shift + ESC = ~ 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(); + 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(); + else + { + if (shift_esc_shift_mask) + { + del_key(KC_GRV); + send_keyboard_report(); + } + else + { + del_key(KC_ESC); + send_keyboard_report(); + } } - } - break; + break; } }; diff --git a/keyboards/jd40/keymaps/vanagon/config.h b/keyboards/jd40/keymaps/vanagon/config.h index 65d2fe6f987..ed09b50ee4d 100644 --- a/keyboards/jd40/keymaps/vanagon/config.h +++ b/keyboards/jd40/keymaps/vanagon/config.h @@ -1,6 +1,6 @@ #include "../../config.h" -#define KEYMAP_VANAGON(\ +#define LAYOUT_VANAGON(\ 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, K30, K31, K32, K33, K34, \ diff --git a/keyboards/jd40/keymaps/vanagon/keymap.c b/keyboards/jd40/keymaps/vanagon/keymap.c index 34314614c64..e16a44af336 100644 --- a/keyboards/jd40/keymaps/vanagon/keymap.c +++ b/keyboards/jd40/keymaps/vanagon/keymap.c @@ -1,29 +1,26 @@ -#include "jd40.h" +#include QMK_KEYBOARD_H #include "action_layer.h" -enum { - _BL = 0, - _AL1, - _AL2, +enum +{ + _BL = 0, + _AL1, + _AL2, }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BL] = KEYMAP_VANAGON( - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, - MO(_AL1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, MO(_AL1), - KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, - MO(_AL2), KC_LCTL, KC_LALT, KC_LGUI, KC_ENT, KC_SPC, KC_RGUI, KC_RALT, KC_RSPC, MO(_AL2) - ), - [_AL1] = KEYMAP_VANAGON( - KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC, KC_TRNS, - KC_TRNS, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_COLN, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_TRNS, - KC_TRNS, KC_ESC, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS - ), - [_AL2] = KEYMAP_VANAGON( - KC_TILD, 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_PIPE, KC_DQT, KC_UNDS, KC_PLUS, KC_SCLN, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_1, KC_2, KC_3, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS - ) -}; + [_BL] = LAYOUT_VANAGON( + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + MO(_AL1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, MO(_AL1), + KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + MO(_AL2), KC_LCTL, KC_LALT, KC_LGUI, KC_ENT, KC_SPC, KC_RGUI, KC_RALT, KC_RSPC, MO(_AL2)), + [_AL1] = LAYOUT_VANAGON( + KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC, KC_TRNS, + KC_TRNS, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_COLN, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_TRNS, + KC_TRNS, KC_ESC, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + [_AL2] = LAYOUT_VANAGON( + KC_TILD, 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_PIPE, KC_DQT, KC_UNDS, KC_PLUS, KC_SCLN, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_1, KC_2, KC_3, 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/jd45/info.json b/keyboards/jd45/info.json new file mode 100644 index 00000000000..77ad23a4bee --- /dev/null +++ b/keyboards/jd45/info.json @@ -0,0 +1,60 @@ +{ + "keyboard_name": "jd45", + "url": "", + "maintainer": "qmk", + "width": 13, + "height": 4, + "layouts": { + "LAYOUT": { + "layout": [ + { "label": "Tab", "x": 0, "y": 0 }, + { "label": "Q", "x": 1, "y": 0 }, + { "label": "W", "x": 2, "y": 0 }, + { "label": "E", "x": 3, "y": 0 }, + { "label": "R", "x": 4, "y": 0 }, + { "label": "T", "x": 5, "y": 0 }, + { "label": "Y", "x": 6, "y": 0 }, + { "label": "U", "x": 7, "y": 0 }, + { "label": "I", "x": 8, "y": 0 }, + { "label": "O", "x": 9, "y": 0 }, + { "label": "P", "x": 10, "y": 0 }, + { "label": "Back
Space", "x": 11, "y": 0 }, + { "x": 12, "y": 0 }, + { "label": "Caps", "x": 0, "y": 1, "w": 1.25 }, + { "label": "A", "x": 1.25, "y": 1 }, + { "label": "S", "x": 2.25, "y": 1 }, + { "label": "D", "x": 3.25, "y": 1 }, + { "label": "F", "x": 4.25, "y": 1 }, + { "label": "G", "x": 5.25, "y": 1 }, + { "label": "H", "x": 6.25, "y": 1 }, + { "label": "J", "x": 7.25, "y": 1 }, + { "label": "K", "x": 8.25, "y": 1 }, + { "label": "L", "x": 9.25, "y": 1 }, + { "label": ":", "x": 10.25, "y": 1 }, + { "label": "Enter", "x": 11.25, "y": 1, "w": 1.75 }, + { "label": "Shift", "x": 0, "y": 2, "w": 1.75 }, + { "label": "Z", "x": 1.75, "y": 2 }, + { "label": "X", "x": 2.75, "y": 2 }, + { "label": "C", "x": 3.75, "y": 2 }, + { "label": "V", "x": 4.75, "y": 2 }, + { "label": "B", "x": 5.75, "y": 2 }, + { "label": "N", "x": 6.75, "y": 2 }, + { "label": "M", "x": 7.75, "y": 2 }, + { "label": "<", "x": 8.75, "y": 2 }, + { "label": ">", "x": 9.75, "y": 2 }, + { "label": "?", "x": 10.75, "y": 2 }, + { "label": "Shift", "x": 11.75, "y": 2, "w": 1.25 }, + { "label": "Hyper", "x": 0, "y": 3, "w": 1.25 }, + { "label": "Super", "x": 1.25, "y": 3 }, + { "label": "Meta", "x": 2.25, "y": 3, "w": 1.25 }, + { "label": "Alt", "x": 3.5, "y": 3, "w": 1.25 }, + { "x": 4.75, "y": 3, "w": 1.75 }, + { "x": 6.5, "y": 3, "w": 1.75 }, + { "label": "Meta", "x": 8.25, "y": 3, "w": 1.25 }, + { "label": "Super", "x": 9.5, "y": 3, "w": 1.25 }, + { "label": "Fn2", "x": 10.75, "y": 3 }, + { "label": "Ctrl", "x": 11.75, "y": 3, "w": 1.25 } + ] + } + } +} diff --git a/keyboards/jd45/jd45.h b/keyboards/jd45/jd45.h index 04ac6649e7a..48641c199ad 100644 --- a/keyboards/jd45/jd45.h +++ b/keyboards/jd45/jd45.h @@ -5,7 +5,7 @@ /* JD45 keymap definition macro */ -#define KEYMAP( \ +#define LAYOUT( \ 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, K30, K31, K32, K33, K34, K35, K36, K37, \ diff --git a/keyboards/jd45/keymaps/blakedietz/config.h b/keyboards/jd45/keymaps/blakedietz/config.h index 6667d6fa1d4..38d850ef6ea 100644 --- a/keyboards/jd45/keymaps/blakedietz/config.h +++ b/keyboards/jd45/keymaps/blakedietz/config.h @@ -3,7 +3,7 @@ /** *JD45 keymap definition macro */ -#define KEYMAP_JD45( \ +#define LAYOUT_JD45( \ 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, K30, K31, K32, K33, K34, K35, K36, K37, \ diff --git a/keyboards/jd45/keymaps/blakedietz/keymap.c b/keyboards/jd45/keymaps/blakedietz/keymap.c index 1b1d0817e6c..bde760a2238 100644 --- a/keyboards/jd45/keymaps/blakedietz/keymap.c +++ b/keyboards/jd45/keymaps/blakedietz/keymap.c @@ -1,4 +1,4 @@ -#include "jd45.h" +#include QMK_KEYBOARD_H extern keymap_config_t keymap_config; @@ -19,28 +19,30 @@ extern keymap_config_t keymap_config; // TODO: (bdietz) - make a symbol layer for greek symbols // Keycodes -enum planck_keycodes { - QWERTY = SAFE_RANGE, - LOWER, - RAISE, +enum planck_keycodes +{ + QWERTY = SAFE_RANGE, + LOWER, + RAISE, }; -enum macro_keycodes { - KC_ALT_TAB, - KC_CMD_TAB, - KC_CTL_TAB, - KC_CMD_SLSH, - KC_AG_FIND, - KC_AG_AGAIN, - KC_AG_UNDO, - KC_AG_CUT, - KC_AG_COPY, - KC_AG_PASTE, - KC_AG_DESK_L, - KC_AG_DESK_R, - KC_AG_TAB_C, - KC_AG_TAB_N, - KC_AG_TAB_R, +enum macro_keycodes +{ + KC_ALT_TAB, + KC_CMD_TAB, + KC_CTL_TAB, + KC_CMD_SLSH, + KC_AG_FIND, + KC_AG_AGAIN, + KC_AG_UNDO, + KC_AG_CUT, + KC_AG_COPY, + KC_AG_PASTE, + KC_AG_DESK_L, + KC_AG_DESK_R, + KC_AG_TAB_C, + KC_AG_TAB_N, + KC_AG_TAB_R, }; // Fillers to make layering more clear @@ -55,36 +57,36 @@ enum macro_keycodes { * - will fire z if tapped * - will fire cmd/super/win if held */ -#define ALT_DOT ALT_T(KC_DOT) -#define ALT_X ALT_T(KC_X) -#define CTL_SLSH CTL_T(KC_SLSH) -#define CTL_Z CTL_T(KC_Z) -#define GUI_C GUI_T(KC_C) -#define GUI_COMM GUI_T(KC_COMM) -#define HPR_ESC ALL_T(KC_ESC) -#define HPR_QUO ALL_T(KC_QUOT) +#define ALT_DOT ALT_T(KC_DOT) +#define ALT_X ALT_T(KC_X) +#define CTL_SLSH CTL_T(KC_SLSH) +#define CTL_Z CTL_T(KC_Z) +#define GUI_C GUI_T(KC_C) +#define GUI_COMM GUI_T(KC_COMM) +#define HPR_ESC ALL_T(KC_ESC) +#define HPR_QUO ALL_T(KC_QUOT) // Toggle to VIM when left space button is held, emit space keycode when left space is tapped -#define TGL_VIM LT(_VIM, KC_SPC) +#define TGL_VIM LT(_VIM, KC_SPC) // Toggle to the mouse layer when the right space button is held and emit enter when right space is tapped -#define TGL_MOUSE LT(_MOUSECURSOR, KC_ENT) +#define TGL_MOUSE LT(_MOUSECURSOR, KC_ENT) // TODO: (bdietz) - need to audit these keycodes to see what sort of cool things the default layout was doing. -#define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab -#define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab -#define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab -#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility) -#define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings -#define AG_AGAIN M(KC_AG_AGAIN) -#define AG_UNDO M(KC_AG_UNDO) -#define AG_CUT M(KC_AG_CUT) -#define AG_COPY M(KC_AG_COPY) -#define AG_PASTE M(KC_AG_PASTE) -#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and -#define AG_D_R M(KC_AG_DESK_R) // Right -#define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close, -#define AG_T_N M(KC_AG_TAB_N) // Tab New, and -#define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed +#define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab +#define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab +#define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab +#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility) +#define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings +#define AG_AGAIN M(KC_AG_AGAIN) +#define AG_UNDO M(KC_AG_UNDO) +#define AG_CUT M(KC_AG_CUT) +#define AG_COPY M(KC_AG_COPY) +#define AG_PASTE M(KC_AG_PASTE) +#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and +#define AG_D_R M(KC_AG_DESK_R) // Right +#define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close, +#define AG_T_N M(KC_AG_TAB_N) // Tab New, and +#define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed /* Qwerty * @@ -99,19 +101,19 @@ enum macro_keycodes { * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QWERTY] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, ALL_T(KC_NO), -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - HPR_ESC , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MEDIA, KC_SCLN), HPR_QUO, -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - KC_LSFT, CTL_Z, ALT_X, GUI_C, KC_V, KC_B, KC_N, KC_M,GUI_COMM, ALT_DOT, CTL_SLSH, KC_RSFT , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - _______ , _______ , _______ , LOWER , TGL_VIM , TGL_MOUSE , RAISE , _______ , _______ , _______), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_QWERTY] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, ALL_T(KC_NO), + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + HPR_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MEDIA, KC_SCLN), HPR_QUO, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_LSFT, CTL_Z, ALT_X, GUI_C, KC_V, KC_B, KC_N, KC_M, GUI_COMM, ALT_DOT, CTL_SLSH, KC_RSFT, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______, _______, _______, LOWER, TGL_VIM, TGL_MOUSE, RAISE, _______, _______, _______), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -// TODO: (bdietz) - update the keymap documentation to include the modifier keys on the third row -/* Lower + // TODO: (bdietz) - update the keymap documentation to include the modifier keys on the third row + /* Lower * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * | ` | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | Bksp | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -122,18 +124,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | Prev | Next | Mute | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_LOWER] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - KC_GRV,KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_BSPC, -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - KC_LBRC , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - KC_RBRC , CTL_T(KC_F7), ALT_T(KC_F8),GUI_T(KC_F9), KC_F10, KC_F11, KC_F12, KC_MINS, GUI_T(KC_EQL) , ALT_T(KC_LBRC), CTL_T(KC_RBRC), KC_BSLS , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - _______ , _______, _______, _______, _______ , _______ , _______, KC_MPRV, KC_MNXT, KC_MUTE), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_LOWER] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_BSPC, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + KC_LBRC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_RBRC, CTL_T(KC_F7), ALT_T(KC_F8), GUI_T(KC_F9), KC_F10, KC_F11, KC_F12, KC_MINS, GUI_T(KC_EQL), ALT_T(KC_LBRC), CTL_T(KC_RBRC), KC_BSLS, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* Raise + /* Raise * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | Bksp | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -144,18 +146,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | Prev | Next | Mute | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_RAISE] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC, -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - KC_DLR , KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - KC_EQL , CTL_T(KC_7), ALT_T(KC_8), GUI_T(KC_9), KC_0, KC_MINS, KC_DOT, KC_1 ,GUI_T(KC_2), ALT_T(KC_3), CTL_T(KC_SLSH), KC_BSLS , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - _______ , _______, _______, _______, _______ , _______ , _______, KC_MPRV, KC_MNXT, KC_MUTE), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_RAISE] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + KC_DLR, KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_EQL, CTL_T(KC_7), ALT_T(KC_8), GUI_T(KC_9), KC_0, KC_MINS, KC_DOT, KC_1, GUI_T(KC_2), ALT_T(KC_3), CTL_T(KC_SLSH), KC_BSLS, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* Mouse Layer + /* Mouse Layer * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | | | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -167,18 +169,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_MOUSECURSOR] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - _______,_______, _______, KC_MS_U, _______, _______, _______, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______, -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - _______ ,_______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______ , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - _______ , _______, _______, _______, _______, _______, _______, _______, _______, _______), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_MOUSECURSOR] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + _______, _______, _______, KC_MS_U, _______, _______, _______, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* Adjust (Lower + Raise) + /* Adjust (Lower + Raise) * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * | | | | | | | | | | | | | Del | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -189,19 +191,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | Reset | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_ADJUST] = KEYMAP_JD45( + [_ADJUST] = LAYOUT_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL , -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______ , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - _______ , _______, _______, _______, _______ , _______ , _______, _______, _______, RESET), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + _______, _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* VIM + /* VIM * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * | | | | | | | | | | | | | | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -212,18 +214,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_VIM] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - _______ ,_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______ , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - _______ , _______, _______, _______, _______ , _______ , _______, _______, _______,_______), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_VIM] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* Media + /* Media * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * | | | | | | | | | | | | | | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -234,53 +236,63 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_MEDIA] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - _______ ,_______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE, _______, KC_MPLY , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - _______ ,_______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______ , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - _______ , _______, _______, _______, _______ , _______ , _______, _______, _______, _______) -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_MEDIA] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE, _______, KC_MPLY, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ }; -void persistant_default_layer_set(uint16_t default_layer) { - eeconfig_update_default_layer(default_layer); - default_layer_set(default_layer); +void persistant_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) { +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + switch (keycode) + { case QWERTY: - if (record->event.pressed) { - default_layer_set(1UL<<_QWERTY); - } - return false; - break; + if (record->event.pressed) + { + 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; + 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; + 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; } /* @@ -288,54 +300,69 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { */ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - if (!eeconfig_is_enabled()) { - eeconfig_init(); + if (!eeconfig_is_enabled()) + { + eeconfig_init(); } - bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc. + bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc. // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in: // quantum/quantum.c - if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) { - use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc. + if (keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) + { + use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc. } - switch (id) { - case KC_ALT_TAB: - if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } - else { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } - case KC_CMD_TAB: - if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } - else { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } + switch (id) + { + case KC_ALT_TAB: + if (use_cmd) + { + return (record->event.pressed ? MACRO(D(LALT), D(TAB), END) : MACRO(U(TAB), END)); + } + else + { + return (record->event.pressed ? MACRO(D(LGUI), D(TAB), END) : MACRO(U(TAB), END)); + } + case KC_CMD_TAB: + if (use_cmd) + { + return (record->event.pressed ? MACRO(D(LGUI), D(TAB), END) : MACRO(U(TAB), END)); + } + else + { + return (record->event.pressed ? MACRO(D(LALT), D(TAB), END) : MACRO(U(TAB), END)); + } - case KC_CTL_TAB: - return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END )); - case KC_CMD_SLSH: - return (record->event.pressed ? MACRO( D(LGUI), D(SLSH),END ) : MACRO( U(SLSH),END )); + case KC_CTL_TAB: + return (record->event.pressed ? MACRO(D(LCTRL), D(TAB), END) : MACRO(U(TAB), END)); + case KC_CMD_SLSH: + return (record->event.pressed ? MACRO(D(LGUI), D(SLSH), END) : MACRO(U(SLSH), END)); - case KC_AG_FIND: - return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END ); - case KC_AG_AGAIN: - return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END ); - case KC_AG_UNDO: - return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END ); - case KC_AG_CUT: - return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END ); - case KC_AG_COPY: - return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END ); - case KC_AG_PASTE: - return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END ); + case KC_AG_FIND: + return use_cmd ? MACRODOWN(D(LGUI), T(F), END) : MACRODOWN(D(LCTRL), T(F), END); + case KC_AG_AGAIN: + return use_cmd ? MACRODOWN(D(LGUI), T(G), END) : MACRODOWN(D(LCTRL), T(G), END); + case KC_AG_UNDO: + return use_cmd ? MACRODOWN(D(LGUI), T(Z), END) : MACRODOWN(D(LCTRL), T(Z), END); + case KC_AG_CUT: + return use_cmd ? MACRODOWN(D(LGUI), T(X), END) : MACRODOWN(D(LCTRL), T(X), END); + case KC_AG_COPY: + return use_cmd ? MACRODOWN(D(LGUI), T(C), END) : MACRODOWN(D(LCTRL), T(C), END); + case KC_AG_PASTE: + return use_cmd ? MACRODOWN(D(LGUI), T(V), END) : MACRODOWN(D(LCTRL), T(V), END); - case KC_AG_DESK_L: - return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END ); - case KC_AG_DESK_R: - return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END ); + case KC_AG_DESK_L: + return use_cmd ? MACRODOWN(D(LGUI), D(LCTRL), T(SCLN), END) : MACRODOWN(D(LALT), D(LCTRL), T(SCLN), END); + case KC_AG_DESK_R: + return use_cmd ? MACRODOWN(D(LGUI), D(LCTRL), T(QUOT), END) : MACRODOWN(D(LALT), D(LCTRL), T(QUOT), END); - case KC_AG_TAB_C: - return use_cmd ? MACRODOWN( D(LGUI), T(W), END ) : MACRODOWN( D(LCTRL), T(W), END ); - case KC_AG_TAB_N: - return use_cmd ? MACRODOWN( D(LGUI), T(T), END ) : MACRODOWN( D(LCTRL), T(T), END ); - case KC_AG_TAB_R: - return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END ); + case KC_AG_TAB_C: + return use_cmd ? MACRODOWN(D(LGUI), T(W), END) : MACRODOWN(D(LCTRL), T(W), END); + case KC_AG_TAB_N: + return use_cmd ? MACRODOWN(D(LGUI), T(T), END) : MACRODOWN(D(LCTRL), T(T), END); + case KC_AG_TAB_R: + return use_cmd ? MACRODOWN(D(LGUI), D(LSHIFT), T(T), END) : MACRODOWN(D(LCTRL), D(LSHIFT), T(T), END); } return MACRO_NONE; diff --git a/keyboards/jd45/keymaps/default/keymap.c b/keyboards/jd45/keymaps/default/keymap.c index 95abb1505c2..0bb519f5fc3 100644 --- a/keyboards/jd45/keymaps/default/keymap.c +++ b/keyboards/jd45/keymaps/default/keymap.c @@ -1,15 +1,15 @@ -#include "jd45.h" +#include QMK_KEYBOARD_H /* this keymap is to provide a basic keyboard layout for testing the matrix * for more practical and complicated keymap refer to other keymaps in the same folder */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = KEYMAP( - ESC, Q, W, E, R, T, Y, U, I, O, P, QUOT, BSPC, - TAB, A, S, D, F, G, H, J, K, L, SCLN, ENT, - LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, - PAUSE, LCTL, LALT, DEL, SPC, DEL, LEFT, UP, DOWN, RIGHT ), + [0] = LAYOUT( + ESC, Q, W, E, R, T, Y, U, I, O, P, QUOT, BSPC, + TAB, A, S, D, F, G, H, J, K, L, SCLN, ENT, + LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, + PAUSE, LCTL, LALT, DEL, SPC, DEL, LEFT, UP, DOWN, RIGHT), }; const uint16_t PROGMEM fn_actions[] = { diff --git a/keyboards/jd45/keymaps/jeebak/config.h b/keyboards/jd45/keymaps/jeebak/config.h index 53a1f0a3078..bfaa128937e 100644 --- a/keyboards/jd45/keymaps/jeebak/config.h +++ b/keyboards/jd45/keymaps/jeebak/config.h @@ -3,7 +3,7 @@ /** *JD45 keymap definition macro */ -#define KEYMAP_JD45( \ +#define LAYOUT_JD45( \ 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, K30, K31, K32, K33, K34, K35, K36, K37, \ diff --git a/keyboards/jd45/keymaps/jeebak/keymap.c b/keyboards/jd45/keymaps/jeebak/keymap.c index 0da114a1edc..c711939fcf7 100644 --- a/keyboards/jd45/keymaps/jeebak/keymap.c +++ b/keyboards/jd45/keymaps/jeebak/keymap.c @@ -1,4 +1,4 @@ -#include "jd45.h" +#include QMK_KEYBOARD_H extern keymap_config_t keymap_config; @@ -17,33 +17,35 @@ extern keymap_config_t keymap_config; #define _ADJUST 16 // Keycodes -enum planck_keycodes { - QWERTY = SAFE_RANGE, - COLEMAK, - DVORAK, - PLOVER, - LOWER, - RAISE, - BACKLIT, - EXT_PLV +enum planck_keycodes +{ + QWERTY = SAFE_RANGE, + COLEMAK, + DVORAK, + PLOVER, + LOWER, + RAISE, + BACKLIT, + EXT_PLV }; -enum macro_keycodes { - KC_ALT_TAB, - KC_CMD_TAB, - KC_CTL_TAB, - KC_CMD_SLSH, - KC_AG_FIND, - KC_AG_AGAIN, - KC_AG_UNDO, - KC_AG_CUT, - KC_AG_COPY, - KC_AG_PASTE, - KC_AG_DESK_L, - KC_AG_DESK_R, - KC_AG_TAB_C, - KC_AG_TAB_N, - KC_AG_TAB_R, +enum macro_keycodes +{ + KC_ALT_TAB, + KC_CMD_TAB, + KC_CTL_TAB, + KC_CMD_SLSH, + KC_AG_FIND, + KC_AG_AGAIN, + KC_AG_UNDO, + KC_AG_CUT, + KC_AG_COPY, + KC_AG_PASTE, + KC_AG_DESK_L, + KC_AG_DESK_R, + KC_AG_TAB_C, + KC_AG_TAB_N, + KC_AG_TAB_R, }; // Fillers to make layering more clear @@ -51,29 +53,29 @@ enum macro_keycodes { #define XXXXXXX KC_NO // Custom macros -#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl -#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift -#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper -#define GUI_SEM GUI_T(KC_SCLN) // Tap for Semicolon, hold for GUI -#define ALT_QUO ALT_T(KC_QUOT) // Tap for Quote, hold for Alt +#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl +#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift +#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper +#define GUI_SEM GUI_T(KC_SCLN) // Tap for Semicolon, hold for GUI +#define ALT_QUO ALT_T(KC_QUOT) // Tap for Quote, hold for Alt // Requires KC_TRNS/_______ for the trigger key in the destination layer -#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor -#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor -#define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab -#define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab -#define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab -#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility) -#define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings -#define AG_AGAIN M(KC_AG_AGAIN) -#define AG_UNDO M(KC_AG_UNDO) -#define AG_CUT M(KC_AG_CUT) -#define AG_COPY M(KC_AG_COPY) -#define AG_PASTE M(KC_AG_PASTE) -#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and -#define AG_D_R M(KC_AG_DESK_R) // Right -#define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close, -#define AG_T_N M(KC_AG_TAB_N) // Tab New, and -#define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed +#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor +#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor +#define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab +#define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab +#define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab +#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility) +#define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings +#define AG_AGAIN M(KC_AG_AGAIN) +#define AG_UNDO M(KC_AG_UNDO) +#define AG_CUT M(KC_AG_CUT) +#define AG_COPY M(KC_AG_COPY) +#define AG_PASTE M(KC_AG_PASTE) +#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and +#define AG_D_R M(KC_AG_DESK_R) // Right +#define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close, +#define AG_T_N M(KC_AG_TAB_N) // Tab New, and +#define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed /* Qwerty * @@ -89,18 +91,18 @@ enum macro_keycodes { */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_QWERTY] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_BSPC, -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - CTL_ESC , KC_A, KC_S,LT_MC(KC_D), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, GUI_SEM, ALT_QUO , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - KC_RGUI , KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLD , KC_VOLU , KC_MPLY), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_QWERTY] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_BSPC, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + CTL_ESC, KC_A, KC_S, LT_MC(KC_D), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, GUI_SEM, ALT_QUO, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_VOLD, KC_VOLU, KC_MPLY), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* Colemak + /* Colemak * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * |Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp | Bksp | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -111,18 +113,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_COLEMAK] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, KC_BSPC, -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - CTL_ESC , KC_A, KC_R,LT_MC(KC_S), KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - KC_RGUI , KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLD , KC_VOLU , KC_MPLY), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_COLEMAK] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, KC_BSPC, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + CTL_ESC, KC_A, KC_R, LT_MC(KC_S), KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_VOLD, KC_VOLU, KC_MPLY), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* Dvorak + /* Dvorak * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * |Hyper/Tab| " | , | . | P | Y | F | G | C | R | L | Bksp | Bksp | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -133,18 +135,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_DVORAK] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, KC_BSPC, -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - CTL_ESC , KC_A, KC_O,LT_MC(KC_E), KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - KC_LSFT , KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - KC_RGUI , KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLD , KC_VOLU , KC_MPLY), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_DVORAK] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, KC_BSPC, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + CTL_ESC, KC_A, KC_O, LT_MC(KC_E), KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_VOLD, KC_VOLU, KC_MPLY), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* Lower + /* Lower * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | Bksp | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -155,18 +157,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Brite | | | | | | | Prev | Next | Mute | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_LOWER] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - 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_BSPC, -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - KC_LBRC , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - KC_RBRC , KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - BACKLIT , _______, _______, _______, _______ , _______ , _______, KC_MPRV, KC_MNXT, KC_MUTE), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_LOWER] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + 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_BSPC, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + KC_LBRC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_RBRC, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + BACKLIT, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* Raise + /* Raise * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | Bksp | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -177,18 +179,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | Brite | | | | | | | Prev | Next | Mute | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_RAISE] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC, -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - KC_DLR , KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - KC_EQL , KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_DOT, KC_1, KC_2, KC_3, KC_SLSH, KC_BSLS , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - BACKLIT , _______, _______, _______, _______ , _______ , _______, KC_MPRV, KC_MNXT, KC_MUTE), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_RAISE] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + KC_DLR, KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + KC_EQL, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_DOT, KC_1, KC_2, KC_3, KC_SLSH, KC_BSLS, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + BACKLIT, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations + /* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * | AltTab |CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -203,18 +205,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * seem to work on Mac. Presumably they'll work under Windows. */ -[_TOUCHCURSOR] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______, _______, -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - _______ ,KC_LALT, KC_SPC, AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - _______ ,AG_UNDO, AG_CUT, AG_COPY,AG_PASTE, KC_GRV, KC_PGDN, KC_DEL, AG_T_N, AG_T_R,CMD_SLSH, _______ , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - _______ , _______, _______, _______, _______ , _______ , _______, _______, _______, _______), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_TOUCHCURSOR] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + ALT_TAB, CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______, _______, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + _______, KC_LALT, KC_SPC, AG_T_C, AG_FIND, AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______, AG_UNDO, AG_CUT, AG_COPY, AG_PASTE, KC_GRV, KC_PGDN, KC_DEL, AG_T_N, AG_T_R, CMD_SLSH, _______, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* Mouse Layer + /* Mouse Layer * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | | | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -226,18 +228,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_MOUSECURSOR] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - _______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______, _______, -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - _______ ,KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5 , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - _______ ,_______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______ , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - _______ , _______, _______, _______, _______, _______, _______, _______, _______, _______), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_MOUSECURSOR] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + _______, _______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______, _______, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + _______, KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______, _______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* Plover layer (http://opensteno.org) + /* Plover layer (http://opensteno.org) * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * | # | # | # | # | # | # | # | # | # | # | # | # | # | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -249,18 +251,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_PLOVER] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - KC_1 , KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 , -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - XXXXXXX , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - XXXXXXX , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - EXT_PLV , XXXXXXX, KC_C, KC_V, XXXXXXX , XXXXXXX , KC_N, KC_M, XXXXXXX, XXXXXXX), -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_PLOVER] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + EXT_PLV, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX), + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ -/* Adjust (Lower + Raise) + /* Adjust (Lower + Raise) * ,---------+------+------+------+------+------+------+------+------+------+------+------+------. * | | | | | | | | | | | | | Del | * |---------`------`------`------`------`------`------`------`------`------`------`------`------| @@ -271,97 +273,115 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | Reset | * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------' */ -[_ADJUST] = KEYMAP_JD45( -/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ - _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL , -/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ - _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______ , -/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ - _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ , -/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ - _______ , _______, _______, _______, _______ , _______ , _______, _______, _______, RESET) -/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ + [_ADJUST] = LAYOUT_JD45( + /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, + /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/ + _______, _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______, + /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/ + _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET) + /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/ }; -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); } -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + switch (keycode) + { case QWERTY: - if (record->event.pressed) { - default_layer_set(1UL<<_QWERTY); - } - return false; - break; + if (record->event.pressed) + { + default_layer_set(1UL << _QWERTY); + } + return false; + break; case COLEMAK: - if (record->event.pressed) { - default_layer_set(1UL<<_COLEMAK); - } - return false; - break; + if (record->event.pressed) + { + default_layer_set(1UL << _COLEMAK); + } + return false; + break; case DVORAK: - if (record->event.pressed) { - default_layer_set(1UL<<_DVORAK); - } - return false; - break; + if (record->event.pressed) + { + default_layer_set(1UL << _DVORAK); + } + 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; + 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; + 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 BACKLIT: - if (record->event.pressed) { - register_code(KC_RSFT); - #ifdef BACKLIGHT_ENABLE - backlight_step(); - #endif - } else { - unregister_code(KC_RSFT); - } - return false; - break; + if (record->event.pressed) + { + register_code(KC_RSFT); +#ifdef BACKLIGHT_ENABLE + backlight_step(); +#endif + } + else + { + unregister_code(KC_RSFT); + } + return false; + break; case PLOVER: - if (record->event.pressed) { - layer_off(_RAISE); - layer_off(_LOWER); - layer_off(_ADJUST); - layer_on(_PLOVER); - if (!eeconfig_is_enabled()) { - eeconfig_init(); + if (record->event.pressed) + { + layer_off(_RAISE); + layer_off(_LOWER); + layer_off(_ADJUST); + 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); } - keymap_config.raw = eeconfig_read_keymap(); - keymap_config.nkro = 1; - eeconfig_update_keymap(keymap_config.raw); - } - return false; - break; + return false; + break; case EXT_PLV: - if (record->event.pressed) { - layer_off(_PLOVER); - } - return false; - break; - } - return true; + if (record->event.pressed) + { + layer_off(_PLOVER); + } + return false; + break; + } + return true; } /* @@ -369,54 +389,69 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { */ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - if (!eeconfig_is_enabled()) { - eeconfig_init(); + if (!eeconfig_is_enabled()) + { + eeconfig_init(); } - bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc. + bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc. // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in: // quantum/quantum.c - if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) { - use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc. + if (keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) + { + use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc. } - switch (id) { - case KC_ALT_TAB: - if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } - else { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } - case KC_CMD_TAB: - if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); } - else { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); } + switch (id) + { + case KC_ALT_TAB: + if (use_cmd) + { + return (record->event.pressed ? MACRO(D(LALT), D(TAB), END) : MACRO(U(TAB), END)); + } + else + { + return (record->event.pressed ? MACRO(D(LGUI), D(TAB), END) : MACRO(U(TAB), END)); + } + case KC_CMD_TAB: + if (use_cmd) + { + return (record->event.pressed ? MACRO(D(LGUI), D(TAB), END) : MACRO(U(TAB), END)); + } + else + { + return (record->event.pressed ? MACRO(D(LALT), D(TAB), END) : MACRO(U(TAB), END)); + } - case KC_CTL_TAB: - return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END )); - case KC_CMD_SLSH: - return (record->event.pressed ? MACRO( D(LGUI), D(SLSH),END ) : MACRO( U(SLSH),END )); + case KC_CTL_TAB: + return (record->event.pressed ? MACRO(D(LCTRL), D(TAB), END) : MACRO(U(TAB), END)); + case KC_CMD_SLSH: + return (record->event.pressed ? MACRO(D(LGUI), D(SLSH), END) : MACRO(U(SLSH), END)); - case KC_AG_FIND: - return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END ); - case KC_AG_AGAIN: - return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END ); - case KC_AG_UNDO: - return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END ); - case KC_AG_CUT: - return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END ); - case KC_AG_COPY: - return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END ); - case KC_AG_PASTE: - return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END ); + case KC_AG_FIND: + return use_cmd ? MACRODOWN(D(LGUI), T(F), END) : MACRODOWN(D(LCTRL), T(F), END); + case KC_AG_AGAIN: + return use_cmd ? MACRODOWN(D(LGUI), T(G), END) : MACRODOWN(D(LCTRL), T(G), END); + case KC_AG_UNDO: + return use_cmd ? MACRODOWN(D(LGUI), T(Z), END) : MACRODOWN(D(LCTRL), T(Z), END); + case KC_AG_CUT: + return use_cmd ? MACRODOWN(D(LGUI), T(X), END) : MACRODOWN(D(LCTRL), T(X), END); + case KC_AG_COPY: + return use_cmd ? MACRODOWN(D(LGUI), T(C), END) : MACRODOWN(D(LCTRL), T(C), END); + case KC_AG_PASTE: + return use_cmd ? MACRODOWN(D(LGUI), T(V), END) : MACRODOWN(D(LCTRL), T(V), END); - case KC_AG_DESK_L: - return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END ); - case KC_AG_DESK_R: - return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END ); + case KC_AG_DESK_L: + return use_cmd ? MACRODOWN(D(LGUI), D(LCTRL), T(SCLN), END) : MACRODOWN(D(LALT), D(LCTRL), T(SCLN), END); + case KC_AG_DESK_R: + return use_cmd ? MACRODOWN(D(LGUI), D(LCTRL), T(QUOT), END) : MACRODOWN(D(LALT), D(LCTRL), T(QUOT), END); - case KC_AG_TAB_C: - return use_cmd ? MACRODOWN( D(LGUI), T(W), END ) : MACRODOWN( D(LCTRL), T(W), END ); - case KC_AG_TAB_N: - return use_cmd ? MACRODOWN( D(LGUI), T(T), END ) : MACRODOWN( D(LCTRL), T(T), END ); - case KC_AG_TAB_R: - return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END ); + case KC_AG_TAB_C: + return use_cmd ? MACRODOWN(D(LGUI), T(W), END) : MACRODOWN(D(LCTRL), T(W), END); + case KC_AG_TAB_N: + return use_cmd ? MACRODOWN(D(LGUI), T(T), END) : MACRODOWN(D(LCTRL), T(T), END); + case KC_AG_TAB_R: + return use_cmd ? MACRODOWN(D(LGUI), D(LSHIFT), T(T), END) : MACRODOWN(D(LCTRL), D(LSHIFT), T(T), END); } return MACRO_NONE; diff --git a/keyboards/jd45/keymaps/justin/keymap.c b/keyboards/jd45/keymaps/justin/keymap.c index c278abba55b..a797582b072 100644 --- a/keyboards/jd45/keymaps/justin/keymap.c +++ b/keyboards/jd45/keymaps/justin/keymap.c @@ -1,58 +1,59 @@ -#include "jd45.h" +#include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = KEYMAP( - ESC, Q, W, F, P, G, J, L, U, Y, SCLN, QUOT, BSPC, - FN8, A, R, S, T, D, H, N, E, I, O, ENT, - LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, FN6, - FN4, LGUI, FN7, FN2, FN1, SPC, FN5, RALT, FN3, FN0 ), -[1] = KEYMAP( - TRNS, FN10, FN11, FN12, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, DEL, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGUP, LEFT, RGHT, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, END, PGDN, DOWN, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS ), -[2] = KEYMAP( - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, 7, 8, 9, 0, TRNS, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC, 4, 5, 6, DOT, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC, 1, 2, 3, BSLS, TRNS, - TRNS,FN29, TRNS, TRNS, TRNS, PAUSE, EQL, MINS, TRNS, TRNS ), -[3] = KEYMAP( - TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS ), -[4] = KEYMAP( - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, 7, 8, 9, 0, TRNS, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC, 4, 5, 6, DOT, TRNS, - TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC, 1, 2, 3, BSLS, TRNS, - TRNS,FN29, TRNS, TRNS, TRNS, PAUSE, EQL, MINS, TRNS, TRNS ), + [0] = LAYOUT( + ESC, Q, W, F, P, G, J, L, U, Y, SCLN, QUOT, BSPC, + FN8, A, R, S, T, D, H, N, E, I, O, ENT, + LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, FN6, + FN4, LGUI, FN7, FN2, FN1, SPC, FN5, RALT, FN3, FN0), + [1] = LAYOUT( + TRNS, FN10, FN11, FN12, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, DEL, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGUP, LEFT, RGHT, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, END, PGDN, DOWN, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), + [2] = LAYOUT( + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, 7, 8, 9, 0, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC, 4, 5, 6, DOT, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC, 1, 2, 3, BSLS, TRNS, + TRNS, FN29, TRNS, TRNS, TRNS, PAUSE, EQL, MINS, TRNS, TRNS), + [3] = LAYOUT( + TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS), + [4] = LAYOUT( + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, 7, 8, 9, 0, TRNS, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC, 4, 5, 6, DOT, TRNS, + TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC, 1, 2, 3, BSLS, TRNS, + TRNS, FN29, TRNS, TRNS, TRNS, PAUSE, EQL, MINS, TRNS, TRNS), }; -enum macro_id { - PSWD1, - PSWD2, - PSWD3, +enum macro_id +{ + PSWD1, + PSWD2, + PSWD3, }; const uint16_t PROGMEM fn_actions[] = { [0] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_MINS), - [1] = ACTION_LAYER_MOMENTARY(1), // FN1 - [2] = ACTION_LAYER_MOMENTARY(2), // FN2 - [3] = ACTION_LAYER_MOMENTARY(3), // FN3 + [1] = ACTION_LAYER_MOMENTARY(1), // FN1 + [2] = ACTION_LAYER_MOMENTARY(2), // FN2 + [3] = ACTION_LAYER_MOMENTARY(3), // FN3 [4] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_GRV), [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_RGUI), [6] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_CAPS), - [7] = ACTION_LAYER_MODS(4, MOD_LSFT), // FN4 + [7] = ACTION_LAYER_MODS(4, MOD_LSFT), // FN4 [8] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_TAB), [10] = ACTION_MACRO(PSWD1), [11] = ACTION_MACRO(PSWD2), [12] = ACTION_MACRO(PSWD3), - + [29] = ACTION_BACKLIGHT_TOGGLE(), [30] = ACTION_BACKLIGHT_INCREASE(), [31] = ACTION_BACKLIGHT_DECREASE() - + }; /* @@ -60,19 +61,14 @@ const uint16_t PROGMEM fn_actions[] = { */ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - switch (id) { - case PSWD1: - return (record->event.pressed ? - MACRO( I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END ) : - MACRO_NONE ); - case PSWD2: - return (record->event.pressed ? - MACRO( I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END ) : - MACRO_NONE ); - case PSWD3: - return (record->event.pressed ? - MACRO( I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END ) : - MACRO_NONE ); + switch (id) + { + case PSWD1: + return (record->event.pressed ? MACRO(I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END) : MACRO_NONE); + case PSWD2: + return (record->event.pressed ? MACRO(I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END) : MACRO_NONE); + case PSWD3: + return (record->event.pressed ? MACRO(I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END) : MACRO_NONE); //case VOLUP: // return (record->event.pressed ? // MACRO( D(VOLU), U(VOLU), END ) : diff --git a/keyboards/jd45/keymaps/mjt/keymap.c b/keyboards/jd45/keymaps/mjt/keymap.c index 610552ecfaa..a53b09642a7 100644 --- a/keyboards/jd45/keymaps/mjt/keymap.c +++ b/keyboards/jd45/keymaps/mjt/keymap.c @@ -1,33 +1,34 @@ -#include "jd45.h" +#include QMK_KEYBOARD_H /* Mike's Layout for JD45 with backlight LEDs acting as layer indicator */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = KEYMAP( - TAB, Q, W, E, R, T, Y, U, I, O, P, MINS, BSLS, - FN1, A, S, D, F, G, H, J, K, L, QUOT, ENT, - FN0, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, - NO, LCTL, LALT, LGUI, SPC, BSPC, APP, FN2, ESC, NO ), -[1] = KEYMAP( -GRV, TRNS, UP, TRNS, 7, 8, 9, 0, MINS, EQL, PSCR, LBRC, RBRC, -TRNS, LEFT, DOWN, RGHT, 4, 5, 6, INS, HOME, PGUP, SCLN, TRNS, -TRNS, TRNS, TRNS, TRNS, 1, 2, 3, DEL, END, PGDN, TRNS, TRNS, -TRNS, TRNS, TRNS, SPC, TRNS, DEL, TRNS, FN3, TRNS, TRNS ), -[2] = KEYMAP( -TRNS, TRNS, VOLU, TRNS, F7, F8, F9, F10, F11, F12, PSCR, FN3, FN4, -TRNS, MPRV, VOLD, MNXT, F4, F5, F6, J, K, L, SCLN, TRNS, -TRNS, TRNS, TRNS, TRNS, F1, F2, F3, MUTE, MPRV, MNXT, MSTP, TRNS, -TRNS, TRNS, TRNS, LGUI, TRNS, TRNS, TRNS, TRNS, PAUS, TRNS ) -/* , -[3] = KEYMAP( + [0] = LAYOUT( + TAB, Q, W, E, R, T, Y, U, I, O, P, MINS, BSLS, + FN1, A, S, D, F, G, H, J, K, L, QUOT, ENT, + FN0, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, + NO, LCTL, LALT, LGUI, SPC, BSPC, APP, FN2, ESC, NO), + [1] = LAYOUT( + GRV, TRNS, UP, TRNS, 7, 8, 9, 0, MINS, EQL, PSCR, LBRC, RBRC, + TRNS, LEFT, DOWN, RGHT, 4, 5, 6, INS, HOME, PGUP, SCLN, TRNS, + TRNS, TRNS, TRNS, TRNS, 1, 2, 3, DEL, END, PGDN, TRNS, TRNS, + TRNS, TRNS, TRNS, SPC, TRNS, DEL, TRNS, FN3, TRNS, TRNS), + [2] = LAYOUT( + TRNS, TRNS, VOLU, TRNS, F7, F8, F9, F10, F11, F12, PSCR, FN3, FN4, + TRNS, MPRV, VOLD, MNXT, F4, F5, F6, J, K, L, SCLN, TRNS, + TRNS, TRNS, TRNS, TRNS, F1, F2, F3, MUTE, MPRV, MNXT, MSTP, TRNS, + TRNS, TRNS, TRNS, LGUI, TRNS, TRNS, TRNS, TRNS, PAUS, TRNS) + /* , +[3] = LAYOUT( TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, BTLD, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS )*/ }; -enum macro_id { +enum macro_id +{ M_LAYER1, M_LAYER2 }; @@ -38,43 +39,43 @@ const uint16_t PROGMEM fn_actions[] = { [1] = ACTION_MACRO(M_LAYER1), [2] = ACTION_LAYER_TAP_TOGGLE(2), [3] = ACTION_BACKLIGHT_STEP(), - [4] = ACTION_BACKLIGHT_TOGGLE() -}; + [4] = ACTION_BACKLIGHT_TOGGLE()}; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - // MACRODOWN only works in this function - switch(id) { - case M_LAYER1: - // need to add a timer for doubletap: https://github.com/jackhumbert/qmk_firmware/wiki#timer-functionality - // action_function_tap may also handle this... - if (record->event.pressed) - { - breathing_period_set(3); - breathing_enable(); - layer_on(1); - } - else - { - breathing_period_set(1); - breathing_self_disable(); - layer_off(1); - } + // MACRODOWN only works in this function + switch (id) + { + case M_LAYER1: + // need to add a timer for doubletap: https://github.com/jackhumbert/qmk_firmware/wiki#timer-functionality + // action_function_tap may also handle this... + if (record->event.pressed) + { + breathing_period_set(3); + breathing_enable(); + layer_on(1); + } + else + { + breathing_period_set(1); + breathing_self_disable(); + layer_off(1); + } break; - case M_LAYER2: - if (record->event.pressed) - { - breathing_period_set(2); - breathing_pulse(); - layer_on(2); - } - else - { - breathing_period_set(1); - breathing_self_disable(); - layer_off(2); - } + case M_LAYER2: + if (record->event.pressed) + { + breathing_period_set(2); + breathing_pulse(); + layer_on(2); + } + else + { + breathing_period_set(1); + breathing_self_disable(); + layer_off(2); + } break; - } + } return MACRO_NONE; }; diff --git a/keyboards/jd45/keymaps/mjt6u/keymap.c b/keyboards/jd45/keymaps/mjt6u/keymap.c index 44f0c31db3b..c17a07fd04e 100644 --- a/keyboards/jd45/keymaps/mjt6u/keymap.c +++ b/keyboards/jd45/keymaps/mjt6u/keymap.c @@ -1,23 +1,23 @@ -#include "jd45.h" +#include QMK_KEYBOARD_H enum jd45_layers { - _QWERTY, - _QWERTYNUMMODS, - _NUMSYM, - _FUNCTION, - _NUMPAD, - _FKEYNUMPAD, - _ADJUST + _QWERTY, + _QWERTYNUMMODS, + _NUMSYM, + _FUNCTION, + _NUMPAD, + _FKEYNUMPAD, + _ADJUST }; enum jd45_keycodes { - NUMSYM = SAFE_RANGE, - MACSLEEP, - USEFNMODS, - USENUMMODS, - DYNAMIC_MACRO_RANGE, + NUMSYM = SAFE_RANGE, + MACSLEEP, + USEFNMODS, + USENUMMODS, + DYNAMIC_MACRO_RANGE, }; #include "dynamic_macro.h" @@ -33,117 +33,91 @@ enum jd45_keycodes #define F_FNTAB F(2) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_QWERTY] = { - {F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC}, - {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT)}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, - { XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, F_FNSPC, XXXXXXX, XXXXXXX, MO(_FUNCTION), MO(_ADJUST) } -}, -[_QWERTYNUMMODS] = { - {F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC}, - {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT)}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, - {XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, F_NUMSPC, XXXXXXX, XXXXXXX, MO(_FKEYNUMPAD), MO(_ADJUST) } -}, -[_NUMSYM] = { -{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, KC_DEL}, - {__MOD__, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______}, - {_______, _______, _______, _______, _______, KC_SPC, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______}, -{XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__} -}, -[_FUNCTION] = { -{__MOD__, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, -{__MOD__, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______}, -{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, -{XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__ , __MOD__} -}, -[_NUMPAD] = { -{KC_GRV, _______, KC_UP, _______, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_PSCR, KC_LBRC, KC_RBRC}, -{_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_4, KC_5, KC_6, KC_INS, KC_HOME, KC_PGUP, _______, _______}, -{_______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DEL, KC_END, KC_PGDN, _______, _______}, -{XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__} -}, -[_FKEYNUMPAD] = { -{_______, _______, KC_VOLU, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, _______, _______}, -{_______, KC_MPRV, KC_VOLD, KC_MNXT, KC_F4, KC_F5, KC_F6, KC_J, KC_K, KC_L, KC_SCLN, _______}, -{_______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_MUTE, KC_MPRV, KC_MNXT, KC_MSTP, _______}, -{XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__ } -}, -[_ADJUST] = { - {_______, RESET, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, KC_PSCR, _______, _______}, - { _______, _______, _______, _______, USEFNMODS, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, MACSLEEP, _______, _______}, - { _______, _______, _______, _______, _______, _______, USENUMMODS, _______, _______, _______, _______, _______}, - {XXXXXXX, _______, _______,XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__} - } -}; - + [_QWERTY] = { + {F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC}, + {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT)}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, + {XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, F_FNSPC, XXXXXXX, XXXXXXX, MO(_FUNCTION), MO(_ADJUST)}}, + [_QWERTYNUMMODS] = {{F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC}, {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT)}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, {XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, F_NUMSPC, XXXXXXX, XXXXXXX, MO(_FKEYNUMPAD), MO(_ADJUST)}}, + [_NUMSYM] = {{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, KC_DEL}, {__MOD__, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______}, {_______, _______, _______, _______, _______, KC_SPC, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______}, {XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}}, + [_FUNCTION] = {{__MOD__, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, {__MOD__, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, {XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}}, + [_NUMPAD] = {{KC_GRV, _______, KC_UP, _______, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_PSCR, KC_LBRC, KC_RBRC}, {_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_4, KC_5, KC_6, KC_INS, KC_HOME, KC_PGUP, _______, _______}, {_______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DEL, KC_END, KC_PGDN, _______, _______}, {XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}}, + [_FKEYNUMPAD] = {{_______, _______, KC_VOLU, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, _______, _______}, {_______, KC_MPRV, KC_VOLD, KC_MNXT, KC_F4, KC_F5, KC_F6, KC_J, KC_K, KC_L, KC_SCLN, _______}, {_______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_MUTE, KC_MPRV, KC_MNXT, KC_MSTP, _______}, {XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}}, + [_ADJUST] = {{_______, RESET, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, KC_PSCR, _______, _______}, {_______, _______, _______, _______, USEFNMODS, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, MACSLEEP, _______, _______}, {_______, _______, _______, _______, _______, _______, USENUMMODS, _______, _______, _______, _______, _______}, {XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}}}; const uint16_t PROGMEM fn_actions[] = { - [0] = ACTION_LAYER_TAP_KEY(_NUMSYM, KC_SPC), - [1] = ACTION_LAYER_TAP_KEY(_NUMPAD, KC_SPC), - [2] = ACTION_LAYER_TAP_KEY(_FUNCTION, KC_TAB), + [0] = ACTION_LAYER_TAP_KEY(_NUMSYM, KC_SPC), + [1] = ACTION_LAYER_TAP_KEY(_NUMPAD, KC_SPC), + [2] = ACTION_LAYER_TAP_KEY(_FUNCTION, KC_TAB), }; -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); } static bool singular_key = false; -bool process_record_user(uint16_t keycode, keyrecord_t *record) { - uint16_t macro_kc = (keycode == MO(_ADJUST) ? DYN_REC_STOP : keycode); - if (!process_record_dynamic_macro(macro_kc, record)) { - return false; - } - println(" "); - print("process record"); - - switch (keycode) { - case MACSLEEP: - if (record->event.pressed) { - // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER); - register_code(KC_RSFT); - register_code(KC_RCTL); - register_code(KC_POWER); - unregister_code(KC_POWER); - unregister_code(KC_RCTL); - unregister_code(KC_RSFT); - } - return false; - break; - case USEFNMODS: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_QWERTY); - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_fnpc, false, 0); - #endif - print("Space-FN"); +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ + uint16_t macro_kc = (keycode == MO(_ADJUST) ? DYN_REC_STOP : keycode); + if (!process_record_dynamic_macro(macro_kc, record)) + { + return false; } - return false; - break; - case USENUMMODS: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_QWERTYNUMMODS); - #ifdef AUDIO_ENABLE - PLAY_NOTE_ARRAY(tone_fnmac, false, 0); - #endif - print("Space-Numpad"); + println(" "); + print("process record"); + + switch (keycode) + { + case MACSLEEP: + if (record->event.pressed) + { + // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER); + register_code(KC_RSFT); + register_code(KC_RCTL); + register_code(KC_POWER); + unregister_code(KC_POWER); + unregister_code(KC_RCTL); + unregister_code(KC_RSFT); + } + return false; + break; + case USEFNMODS: + if (record->event.pressed) + { + persistent_default_layer_set(1UL << _QWERTY); +#ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_fnpc, false, 0); +#endif + print("Space-FN"); + } + return false; + break; + case USENUMMODS: + if (record->event.pressed) + { + persistent_default_layer_set(1UL << _QWERTYNUMMODS); +#ifdef AUDIO_ENABLE + PLAY_NOTE_ARRAY(tone_fnmac, false, 0); +#endif + print("Space-Numpad"); + } + return false; + break; + default: + singular_key = false; + break; } - return false; - break; - default: - singular_key = false; - break; - } - return true; + return true; }; - -void matrix_init_user(void) { - #ifdef AUDIO_ENABLE - startup_user(); - #endif +void matrix_init_user(void) +{ +#ifdef AUDIO_ENABLE + startup_user(); +#endif // debug_enable = true; } From aade625054643a8b76d58b980fe09087db0fcebd Mon Sep 17 00:00:00 2001 From: Eric <22215921+ericywl@users.noreply.github.com> Date: Mon, 30 Apr 2018 23:22:35 +0800 Subject: [PATCH 091/152] QMK Configurator Support for KMAC (#2852) * Added KMAC Config * Removed .vscode --- keyboards/kmac/info.json | 192 +++++++++++++++++++++ keyboards/kmac/keymaps/default/keymap.c | 101 +++++------ keyboards/kmac/keymaps/winkeyless/keymap.c | 101 +++++------ keyboards/kmac/kmac.h | 59 +++---- keyboards/kmac/readme.md | 11 +- 5 files changed, 329 insertions(+), 135 deletions(-) create mode 100644 keyboards/kmac/info.json diff --git a/keyboards/kmac/info.json b/keyboards/kmac/info.json new file mode 100644 index 00000000000..f86cfdde59d --- /dev/null +++ b/keyboards/kmac/info.json @@ -0,0 +1,192 @@ +{ + "keyboard_name": "kmac", + "url": "", + "maintainer": "qmk", + "bootloader": "", + "width": 18.25, + "height": 6.5, + "layouts": { + "LAYOUT": { + "layout": [ + { "label": "Esc", "x": 0, "y": 0 }, + { "label": "F1", "x": 2, "y": 0 }, + { "label": "F2", "x": 3, "y": 0 }, + { "label": "F3", "x": 4, "y": 0 }, + { "label": "F4", "x": 5, "y": 0 }, + { "label": "F5", "x": 6.5, "y": 0 }, + { "label": "F6", "x": 7.5, "y": 0 }, + { "label": "F7", "x": 8.5, "y": 0 }, + { "label": "F8", "x": 9.5, "y": 0 }, + { "label": "F9", "x": 11, "y": 0 }, + { "label": "F10", "x": 12, "y": 0 }, + { "label": "F11", "x": 13, "y": 0 }, + { "label": "F12", "x": 14, "y": 0 }, + { "label": "PrtSc", "x": 15.25, "y": 0 }, + { "label": "Scroll Lock", "x": 16.25, "y": 0 }, + { "label": "Pause", "x": 17.25, "y": 0 }, + { "label": "~", "x": 0, "y": 1.5 }, + { "label": "!", "x": 1, "y": 1.5 }, + { "label": "@", "x": 2, "y": 1.5 }, + { "label": "#", "x": 3, "y": 1.5 }, + { "label": "$", "x": 4, "y": 1.5 }, + { "label": "%", "x": 5, "y": 1.5 }, + { "label": "^", "x": 6, "y": 1.5 }, + { "label": "&", "x": 7, "y": 1.5 }, + { "label": "*", "x": 8, "y": 1.5 }, + { "label": "(", "x": 9, "y": 1.5 }, + { "label": ")", "x": 10, "y": 1.5 }, + { "label": "_", "x": 11, "y": 1.5 }, + { "label": "+", "x": 12, "y": 1.5 }, + { "label": "Backspace", "x": 13, "y": 1.5, "w": 2 }, + { "label": "Insert", "x": 15.25, "y": 1.5 }, + { "label": "Home", "x": 16.25, "y": 1.5 }, + { "label": "PgUp", "x": 17.25, "y": 1.5 }, + { "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 }, + { "label": "Q", "x": 1.5, "y": 2.5 }, + { "label": "W", "x": 2.5, "y": 2.5 }, + { "label": "E", "x": 3.5, "y": 2.5 }, + { "label": "R", "x": 4.5, "y": 2.5 }, + { "label": "T", "x": 5.5, "y": 2.5 }, + { "label": "Y", "x": 6.5, "y": 2.5 }, + { "label": "U", "x": 7.5, "y": 2.5 }, + { "label": "I", "x": 8.5, "y": 2.5 }, + { "label": "O", "x": 9.5, "y": 2.5 }, + { "label": "P", "x": 10.5, "y": 2.5 }, + { "label": "{", "x": 11.5, "y": 2.5 }, + { "label": "}", "x": 12.5, "y": 2.5 }, + { "label": "|", "x": 13.5, "y": 2.5, "w": 1.5 }, + { "label": "Delete", "x": 15.25, "y": 2.5 }, + { "label": "End", "x": 16.25, "y": 2.5 }, + { "label": "PgDn", "x": 17.25, "y": 2.5 }, + { "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 }, + { "label": "A", "x": 1.75, "y": 3.5 }, + { "label": "S", "x": 2.75, "y": 3.5 }, + { "label": "D", "x": 3.75, "y": 3.5 }, + { "label": "F", "x": 4.75, "y": 3.5 }, + { "label": "G", "x": 5.75, "y": 3.5 }, + { "label": "H", "x": 6.75, "y": 3.5 }, + { "label": "J", "x": 7.75, "y": 3.5 }, + { "label": "K", "x": 8.75, "y": 3.5 }, + { "label": "L", "x": 9.75, "y": 3.5 }, + { "label": ":", "x": 10.75, "y": 3.5 }, + { "label": "\"", "x": 11.75, "y": 3.5 }, + { "label": "Enter", "x": 12.75, "y": 3.5, "w": 2.25 }, + { "label": "Shift", "x": 0, "y": 4.5, "w": 2.25 }, + { "label": "Z", "x": 2.25, "y": 4.5 }, + { "label": "X", "x": 3.25, "y": 4.5 }, + { "label": "C", "x": 4.25, "y": 4.5 }, + { "label": "V", "x": 5.25, "y": 4.5 }, + { "label": "B", "x": 6.25, "y": 4.5 }, + { "label": "N", "x": 7.25, "y": 4.5 }, + { "label": "M", "x": 8.25, "y": 4.5 }, + { "label": "<", "x": 9.25, "y": 4.5 }, + { "label": ">", "x": 10.25, "y": 4.5 }, + { "label": "?", "x": 11.25, "y": 4.5 }, + { "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 }, + { "label": "\u2191", "x": 16.25, "y": 4.5 }, + { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 }, + { "label": "Win", "x": 1.25, "y": 5.5, "w": 1.25 }, + { "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.25 }, + { "x": 3.75, "y": 5.5, "w": 6.25 }, + { "label": "Alt", "x": 10, "y": 5.5, "w": 1.25 }, + { "label": "Win", "x": 11.25, "y": 5.5, "w": 1.25 }, + { "label": "Menu", "x": 12.5, "y": 5.5, "w": 1.25 }, + { "label": "Ctrl", "x": 13.75, "y": 5.5, "w": 1.25 }, + { "label": "\u2190", "x": 15.25, "y": 5.5 }, + { "label": "\u2193", "x": 16.25, "y": 5.5 }, + { "label": "\u2192", "x": 17.25, "y": 5.5 } + ] + }, + + "LAYOUT_WKL": { + "layout": [ + { "label": "Esc", "x": 0, "y": 0 }, + { "label": "F1", "x": 2, "y": 0 }, + { "label": "F2", "x": 3, "y": 0 }, + { "label": "F3", "x": 4, "y": 0 }, + { "label": "F4", "x": 5, "y": 0 }, + { "label": "F5", "x": 6.5, "y": 0 }, + { "label": "F6", "x": 7.5, "y": 0 }, + { "label": "F7", "x": 8.5, "y": 0 }, + { "label": "F8", "x": 9.5, "y": 0 }, + { "label": "F9", "x": 11, "y": 0 }, + { "label": "F10", "x": 12, "y": 0 }, + { "label": "F11", "x": 13, "y": 0 }, + { "label": "F12", "x": 14, "y": 0 }, + { "label": "PrtSc", "x": 15.25, "y": 0 }, + { "label": "Scroll Lock", "x": 16.25, "y": 0 }, + { "label": "Pause", "x": 17.25, "y": 0 }, + { "label": "~", "x": 0, "y": 1.5 }, + { "label": "!", "x": 1, "y": 1.5 }, + { "label": "@", "x": 2, "y": 1.5 }, + { "label": "#", "x": 3, "y": 1.5 }, + { "label": "$", "x": 4, "y": 1.5 }, + { "label": "%", "x": 5, "y": 1.5 }, + { "label": "^", "x": 6, "y": 1.5 }, + { "label": "&", "x": 7, "y": 1.5 }, + { "label": "*", "x": 8, "y": 1.5 }, + { "label": "(", "x": 9, "y": 1.5 }, + { "label": ")", "x": 10, "y": 1.5 }, + { "label": "_", "x": 11, "y": 1.5 }, + { "label": "+", "x": 12, "y": 1.5 }, + { "label": "Backspace", "x": 13, "y": 1.5, "w": 2 }, + { "label": "Insert", "x": 15.25, "y": 1.5 }, + { "label": "Home", "x": 16.25, "y": 1.5 }, + { "label": "PgUp", "x": 17.25, "y": 1.5 }, + { "label": "Tab", "x": 0, "y": 2.5, "w": 1.5 }, + { "label": "Q", "x": 1.5, "y": 2.5 }, + { "label": "W", "x": 2.5, "y": 2.5 }, + { "label": "E", "x": 3.5, "y": 2.5 }, + { "label": "R", "x": 4.5, "y": 2.5 }, + { "label": "T", "x": 5.5, "y": 2.5 }, + { "label": "Y", "x": 6.5, "y": 2.5 }, + { "label": "U", "x": 7.5, "y": 2.5 }, + { "label": "I", "x": 8.5, "y": 2.5 }, + { "label": "O", "x": 9.5, "y": 2.5 }, + { "label": "P", "x": 10.5, "y": 2.5 }, + { "label": "{", "x": 11.5, "y": 2.5 }, + { "label": "}", "x": 12.5, "y": 2.5 }, + { "label": "|", "x": 13.5, "y": 2.5, "w": 1.5 }, + { "label": "Delete", "x": 15.25, "y": 2.5 }, + { "label": "End", "x": 16.25, "y": 2.5 }, + { "label": "PgDn", "x": 17.25, "y": 2.5 }, + { "label": "Caps Lock", "x": 0, "y": 3.5, "w": 1.75 }, + { "label": "A", "x": 1.75, "y": 3.5 }, + { "label": "S", "x": 2.75, "y": 3.5 }, + { "label": "D", "x": 3.75, "y": 3.5 }, + { "label": "F", "x": 4.75, "y": 3.5 }, + { "label": "G", "x": 5.75, "y": 3.5 }, + { "label": "H", "x": 6.75, "y": 3.5 }, + { "label": "J", "x": 7.75, "y": 3.5 }, + { "label": "K", "x": 8.75, "y": 3.5 }, + { "label": "L", "x": 9.75, "y": 3.5 }, + { "label": ":", "x": 10.75, "y": 3.5 }, + { "label": "\"", "x": 11.75, "y": 3.5 }, + { "label": "Enter", "x": 12.75, "y": 3.5, "w": 2.25 }, + { "label": "Shift", "x": 0, "y": 4.5, "w": 2.25 }, + { "label": "Z", "x": 2.25, "y": 4.5 }, + { "label": "X", "x": 3.25, "y": 4.5 }, + { "label": "C", "x": 4.25, "y": 4.5 }, + { "label": "V", "x": 5.25, "y": 4.5 }, + { "label": "B", "x": 6.25, "y": 4.5 }, + { "label": "N", "x": 7.25, "y": 4.5 }, + { "label": "M", "x": 8.25, "y": 4.5 }, + { "label": "<", "x": 9.25, "y": 4.5 }, + { "label": ">", "x": 10.25, "y": 4.5 }, + { "label": "?", "x": 11.25, "y": 4.5 }, + { "label": "Shift", "x": 12.25, "y": 4.5, "w": 2.75 }, + { "label": "\u2191", "x": 16.25, "y": 4.5 }, + { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.5 }, + { "label": "Win", "x": 1.5, "y": 5.5 }, + { "label": "Alt", "x": 2.5, "y": 5.5, "w": 1.5 }, + { "x": 4, "y": 5.5, "w": 7 }, + { "label": "Alt", "x": 11, "y": 5.5, "w": 1.5 }, + { "label": "Win", "x": 12.5, "y": 5.5 }, + { "label": "Ctrl", "x": 13.5, "y": 5.5, "w": 1.5 }, + { "label": "\u2190", "x": 15.25, "y": 5.5 }, + { "label": "\u2193", "x": 16.25, "y": 5.5 }, + { "label": "\u2192", "x": 17.25, "y": 5.5 } + ] + } + } +} diff --git a/keyboards/kmac/keymaps/default/keymap.c b/keyboards/kmac/keymaps/default/keymap.c index f3ac93abf74..8ae8627a06f 100644 --- a/keyboards/kmac/keymaps/default/keymap.c +++ b/keyboards/kmac/keymaps/default/keymap.c @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "kmac.h" +#include QMK_KEYBOARD_H // Helpful defines #define _______ KC_TRNS @@ -26,22 +26,20 @@ #define _FL 1 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BL] = 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_BRK, \ - 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_INS, KC_HOME, KC_PGUP, \ - 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_END, KC_PGDN, \ - 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ - ), - [_FL] = KEYMAP( - BL_STEP, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ - ), + [_BL] = 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_BRK, + 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + [_FL] = LAYOUT( + BL_STEP, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), }; const uint16_t PROGMEM fn_actions[] = { @@ -51,47 +49,52 @@ const uint16_t PROGMEM fn_actions[] = { 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) { - SEND_STRING("The"); - return false; - } - break; - case 1: - if (record->event.pressed) { - SEND_STRING("Custom"); - return false; - } - break; - case 2: - if (record->event.pressed) { - SEND_STRING("Keyboard"); - return false; - } - break; - case 3: - if (record->event.pressed) { - return MACRO( D(LCTL), T(C), U(LCTL), T(RGHT), D(LCTL), T(V), U(LCTL), END ); - } - break; + switch (id) + { + case 0: + if (record->event.pressed) + { + SEND_STRING("The"); + return false; + } + break; + case 1: + if (record->event.pressed) + { + SEND_STRING("Custom"); + return false; + } + break; + case 2: + if (record->event.pressed) + { + SEND_STRING("Keyboard"); + return false; + } + break; + case 3: + if (record->event.pressed) + { + return MACRO(D(LCTL), T(C), U(LCTL), T(RGHT), D(LCTL), T(V), U(LCTL), END); + } + break; } return MACRO_NONE; }; - -void matrix_init_user(void) { - +void matrix_init_user(void) +{ } -void matrix_scan_user(void) { - +void matrix_scan_user(void) +{ } -bool process_record_user(uint16_t keycode, keyrecord_t *record) { +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ return true; } -void led_set_user(uint8_t usb_led) { - +void led_set_user(uint8_t usb_led) +{ } diff --git a/keyboards/kmac/keymaps/winkeyless/keymap.c b/keyboards/kmac/keymaps/winkeyless/keymap.c index e3d66ea0838..985d5a89fb2 100644 --- a/keyboards/kmac/keymaps/winkeyless/keymap.c +++ b/keyboards/kmac/keymaps/winkeyless/keymap.c @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "kmac.h" +#include QMK_KEYBOARD_H // Helpful defines #define _______ KC_TRNS @@ -26,22 +26,20 @@ #define _FL 1 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BL] = KEYMAP_WINKEYLESS( - 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_BRK, \ - 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_INS, KC_HOME, KC_PGUP, \ - 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_END, KC_PGDN, \ - 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ - ), - [_FL] = KEYMAP_WINKEYLESS( - BL_STEP, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ - ), + [_BL] = LAYOUT_WKL( + 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_BRK, + 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_INS, KC_HOME, KC_PGUP, + 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_END, KC_PGDN, + 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + [_FL] = LAYOUT_WKL( + BL_STEP, M(0), M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), }; const uint16_t PROGMEM fn_actions[] = { @@ -51,47 +49,52 @@ const uint16_t PROGMEM fn_actions[] = { 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) { - SEND_STRING("The"); - return false; - } - break; - case 1: - if (record->event.pressed) { - SEND_STRING("Custom"); - return false; - } - break; - case 2: - if (record->event.pressed) { - SEND_STRING("Keyboard"); - return false; - } - break; - case 3: - if (record->event.pressed) { - return MACRO( D(LCTL), T(C), U(LCTL), T(RGHT), D(LCTL), T(V), U(LCTL), END ); - } - break; + switch (id) + { + case 0: + if (record->event.pressed) + { + SEND_STRING("The"); + return false; + } + break; + case 1: + if (record->event.pressed) + { + SEND_STRING("Custom"); + return false; + } + break; + case 2: + if (record->event.pressed) + { + SEND_STRING("Keyboard"); + return false; + } + break; + case 3: + if (record->event.pressed) + { + return MACRO(D(LCTL), T(C), U(LCTL), T(RGHT), D(LCTL), T(V), U(LCTL), END); + } + break; } return MACRO_NONE; }; - -void matrix_init_user(void) { - +void matrix_init_user(void) +{ } -void matrix_scan_user(void) { - +void matrix_scan_user(void) +{ } -bool process_record_user(uint16_t keycode, keyrecord_t *record) { +bool process_record_user(uint16_t keycode, keyrecord_t *record) +{ return true; } -void led_set_user(uint8_t usb_led) { - +void led_set_user(uint8_t usb_led) +{ } diff --git a/keyboards/kmac/kmac.h b/keyboards/kmac/kmac.h index 1d9d8e36be6..44de8914af5 100644 --- a/keyboards/kmac/kmac.h +++ b/keyboards/kmac/kmac.h @@ -19,38 +19,35 @@ #include "quantum.h" // Keymap for the winkey version of the PCB. -#define KEYMAP( \ - K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ - K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4F, \ - K50, K51, K52, K55, K58, K5A, K5C, K5D, K5E, K5F, K5G \ -) { \ -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F G */ \ -/* 0 */ { K00, KC_NO, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \ -/* 1 */ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \ -/* 2 */ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G }, \ -/* 3 */ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, KC_NO, KC_NO, KC_NO }, \ -/* 4 */ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, KC_NO, KC_NO, K4D, KC_NO, K4F, KC_NO }, \ -/* 5 */ { K50, K51, K52, KC_NO, KC_NO, K55, KC_NO, KC_NO, K58, KC_NO, K5A, KC_NO, K5C, K5D, K5E, K5F, K5G } \ -} +#define LAYOUT( \ + K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4F, \ + K50, K51, K52, K55, K58, K5A, K5C, K5D, K5E, K5F, K5G) \ + { \ + /* 0 1 2 3 4 5 6 7 8 9 A B C D E F G */ \ + /* 0 */ {K00, KC_NO, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G}, \ + /* 1 */ {K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G}, \ + /* 2 */ {K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G}, \ + /* 3 */ {K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, KC_NO, KC_NO, KC_NO}, \ + /* 4 */ {K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, KC_NO, KC_NO, K4D, KC_NO, K4F, KC_NO}, \ + /* 5 */ { K50, K51, K52, KC_NO, KC_NO, K55, KC_NO, KC_NO, K58, KC_NO, K5A, KC_NO, K5C, K5D, K5E, K5F, K5G } \ + } // Keymap for the winkeyless version of the PCB. -#define KEYMAP_WINKEYLESS( \ - K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ - K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4F, \ - K50, K51, K52, K55, K58, K5A, K5D, K5E, K5F, K5G \ -) KEYMAP( \ - K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ - K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \ - K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ - K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ - K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4F, \ - K50, K51, K52, K55, K58, K5A, KC_NO, K5D, K5E, K5F, K5G \ -) +#define LAYOUT_WKL( \ + K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4F, \ + K50, K51, K52, K55, K58, K5A, K5D, K5E, K5F, K5G) LAYOUT(K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4D, K4F, \ + K50, K51, K52, K55, K58, K5A, KC_NO, K5D, K5E, K5F, K5G) #endif diff --git a/keyboards/kmac/readme.md b/keyboards/kmac/readme.md index fccf902cab0..ec36c0a5c9b 100644 --- a/keyboards/kmac/readme.md +++ b/keyboards/kmac/readme.md @@ -1,5 +1,4 @@ -KMAC keyboard firmware -====================== +# KMAC keyboard firmware A Korean custom keyboard designed by Byungho Kim and the KBDMania community. @@ -37,9 +36,9 @@ To define your own keymap, copy one of the [existing keymap](keymaps) folders an To make it easy to define keymaps for the different versions of the PCB two macros are provided. -| PCB | Macro | -| -------------- | --------------------- | -| Winkey PCB | `KEYMAP()` | -| Winkeyless PCB | `KEYMAP_WINKEYLESS()` | +| PCB | Macro | +| -------------- | -------------- | +| Winkey PCB | `LAYOUT()` | +| Winkeyless PCB | `LAYOUT_WKL()` | To build the firmware with a custom keymap, run `make ` From 9689944c16a5cda459801c9d77a34dc8a6be01b3 Mon Sep 17 00:00:00 2001 From: WillyPillow Date: Mon, 30 Apr 2018 23:40:34 +0800 Subject: [PATCH 092/152] 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 093/152] 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 094/152] 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 095/152] 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 096/152] 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 5112af887ae59c9c54eabaec5c1ae2f5a53de180 Mon Sep 17 00:00:00 2001 From: M1K Date: Tue, 1 May 2018 18:39:46 +0100 Subject: [PATCH 098/152] 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 099/152] 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 100/152] 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------' - _______, _______, _______, _______, _______, _______ - // `--------+--------+--------' `--------+--------+--------' - ) - -}; - -#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); -} + [_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, + _______ ,_______,_______, _______,_______,_______ + ), -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 101/152] 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 102/152] 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 103/152] 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 104/152] 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 | 318 ++++++++++--------- users/drashna/drashna.h | 125 +++----- users/drashna/drashna_unicode.h | 71 +++++ users/drashna/readme.md | 28 ++ 16 files changed, 622 insertions(+), 267 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,31 +163,32 @@ 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(); +#endif // 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); - } + 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); @@ -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 105/152] 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 106/152] 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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

+ + + + + + + + + + diff --git a/docs/qmk.css b/docs/qmk.css new file mode 100644 index 00000000000..591dd291aef --- /dev/null +++ b/docs/qmk.css @@ -0,0 +1,862 @@ +* { + -webkit-font-smoothing: antialiased; + -webkit-overflow-scrolling: touch; + -webkit-tap-highlight-color: rgba(0,0,0,0); + -webkit-text-size-adjust: none; + -webkit-touch-callout: none; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +body:not(.ready) { + overflow: hidden; +} +body:not(.ready) [data-cloak], +body:not(.ready) .app-nav, +body:not(.ready) > nav { + display: none; +} +div#app { + font-size: 30px; + font-weight: lighter; + margin: 40vh auto; + text-align: center; +} +div#app:empty::before { + content: 'Loading...'; +} +.emoji { + height: 1.2rem; + vertical-align: middle; +} +.progress { + background-color: var(--theme-color, #ea6f5a); + height: 2px; + left: 0px; + position: fixed; + right: 0px; + top: 0px; + -webkit-transition: width 0.2s, opacity 0.4s; + transition: width 0.2s, opacity 0.4s; + width: 0%; + z-index: 999999; +} +.search a:hover { + color: var(--theme-color, #ea6f5a); +} +.search .search-keyword { + color: var(--theme-color, #ea6f5a); + font-style: normal; + font-weight: bold; +} +html, +body { + height: 100%; +} +body { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + color: #efefef; + font-family: 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif; + font-size: 15px; + letter-spacing: 0; + margin: 0; + overflow-x: hidden; +} +img { + max-width: 100%; +} +a[disabled] { + cursor: not-allowed; + opacity: 0.6; +} +kbd { + border: solid 1px #ccc; + border-radius: 3px; + display: inline-block; + font-size: 12px !important; + line-height: 12px; + margin-bottom: 3px; + padding: 3px 5px; + vertical-align: middle; +} +.task-list-item { + list-style-type: none; +} +li input[type='checkbox'] { + margin: 0 0.2em 0.25em -1.6em; + vertical-align: middle; +} +.app-nav { + margin: 25px 60px 0 0; + position: absolute; + right: 0; + text-align: right; + z-index: 10; +/* navbar dropdown */ +} +.app-nav.no-badge { + margin-right: 25px; +} +.app-nav p { + margin: 0; +} +.app-nav > a { + margin: 0 1rem; + padding: 5px 0; +} +.app-nav ul, +.app-nav li { + display: inline-block; + list-style: none; + margin: 0; +} +.app-nav a { + color: inherit; + font-size: 16px; + text-decoration: none; + -webkit-transition: color 0.3s; + transition: color 0.3s; +} +.app-nav a:hover { + color: var(--theme-color, #ea6f5a); +} +.app-nav a.active { + border-bottom: 2px solid var(--theme-color, #ea6f5a); + color: var(--theme-color, #ea6f5a); +} +.app-nav li { + display: inline-block; + margin: 0 1rem; + padding: 5px 0; + position: relative; +} +.app-nav li ul { + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: #ccc; + border-radius: 4px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: none; + max-height: calc(100vh - 61px); + overflow-y: auto; + padding: 10px 0; + position: absolute; + right: -15px; + text-align: left; + top: 100%; + white-space: nowrap; +} +.app-nav li ul li { + display: block; + font-size: 14px; + line-height: 1rem; + margin: 0; + margin: 8px 14px; + white-space: nowrap; +} +.app-nav li ul a { + display: block; + font-size: inherit; + margin: 0; + padding: 0; +} +.app-nav li ul a.active { + border-bottom: 0; +} +.app-nav li:hover ul { + display: block; +} +.github-corner { + border-bottom: 0; + position: fixed; + right: 0; + text-decoration: none; + top: 0; + z-index: 1; +} +.github-corner:hover .octo-arm { + -webkit-animation: octocat-wave 560ms ease-in-out; + animation: octocat-wave 560ms ease-in-out; +} +.github-corner svg { + color: #3f3f3f; + fill: var(--theme-color, #ea6f5a); + height: 80px; + width: 80px; +} +main { + display: block; + position: relative; + width: 100vw; + height: 100%; + z-index: 0; +} +main.hidden { + display: none; +} +.anchor { + display: inline-block; + text-decoration: none; + -webkit-transition: all 0.3s; + transition: all 0.3s; +} +.anchor span { + color: #c8c8c8; +} +.anchor:hover { + text-decoration: underline; +} +.sidebar { + border-right: 1px solid rgba(0,0,0,0.07); + overflow-y: auto; + padding: 40px 0 0; + position: absolute; + top: 0; + bottom: 0; + left: 0; + -webkit-transition: -webkit-transform 250ms ease-out; + transition: -webkit-transform 250ms ease-out; + transition: transform 250ms ease-out; + transition: transform 250ms ease-out, -webkit-transform 250ms ease-out; + width: 300px; + z-index: 20; +} +.sidebar > h1 { + margin: 0 auto 1rem; + font-size: 1.5rem; + font-weight: 300; + text-align: center; +} +.sidebar > h1 a { + color: inherit; + text-decoration: none; +} +.sidebar > h1 .app-nav { + display: block; + position: static; +} +.sidebar .sidebar-nav { + line-height: 2em; + padding-bottom: 40px; +} +.sidebar li.collapse .app-sub-sidebar { + display: none; +} +.sidebar ul { + margin: 0; + padding: 0; +} +.sidebar li > p { + font-weight: 700; + margin: 0; +} +.sidebar ul, +.sidebar ul li { + list-style: none; +} +.sidebar ul li a { + border-bottom: none; + display: block; +} +.sidebar ul li ul { + padding-left: 20px; +} +.sidebar::-webkit-scrollbar { + width: 4px; +} +.sidebar::-webkit-scrollbar-thumb { + background: transparent; + border-radius: 4px; +} +.sidebar:hover::-webkit-scrollbar-thumb { + background: rgba(136,136,136,0.4); +} +.sidebar:hover::-webkit-scrollbar-track { + background: rgba(136,136,136,0.1); +} +.sidebar-toggle { + background-color: transparent; + background-color: rgba(63,63,63,0.8); + border: 0; + outline: none; + padding: 10px; + position: absolute; + bottom: 0; + left: 0; + text-align: center; + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; + width: 284px; + z-index: 30; +} +.sidebar-toggle .sidebar-toggle-button:hover { + opacity: 0.4; +} +.sidebar-toggle span { + background-color: var(--theme-color, #ea6f5a); + display: block; + margin-bottom: 4px; + width: 16px; + height: 2px; +} +body.sticky .sidebar, +body.sticky .sidebar-toggle { + position: fixed; +} +.content { + padding-top: 60px; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 300px; + -webkit-transition: left 250ms ease; + transition: left 250ms ease; +} +.markdown-section { + margin: 0 auto; + max-width: 800px; + padding: 30px 15px 40px 15px; + position: relative; +} +.markdown-section > * { + -webkit-box-sizing: border-box; + box-sizing: border-box; + font-size: inherit; +} +.markdown-section > :first-child { + margin-top: 0 !important; +} +.markdown-section hr { + border: none; + border-bottom: 1px solid #eee; + margin: 2em 0; +} +.markdown-section iframe { + border: 1px solid #eee; +} +.markdown-section table { + border-collapse: collapse; + border-spacing: 0; + display: block; + margin-bottom: 1rem; + overflow: auto; + width: 100%; +} +.markdown-section th { + border: 1px solid #ddd; + font-weight: bold; + padding: 6px 13px; +} +.markdown-section td { + border: 1px solid #ddd; + padding: 6px 13px; +} +.markdown-section tr { + border-top: 1px solid #ccc; +} +.markdown-section tr:nth-child(2n) { + background-color: #f8f8f8; +} +.markdown-section p.tip { + background-color: #f8f8f8; + border-bottom-right-radius: 2px; + border-left: 4px solid #f66; + border-top-right-radius: 2px; + margin: 2em 0; + padding: 12px 24px 12px 30px; + position: relative; +} +.markdown-section p.tip:before { + background-color: #f66; + border-radius: 100%; + color: #3f3f3f; + content: '!'; + font-family: 'Dosis', 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif; + font-size: 14px; + font-weight: bold; + left: -12px; + line-height: 20px; + position: absolute; + height: 20px; + width: 20px; + text-align: center; + top: 14px; +} +.markdown-section p.tip code { + background-color: #efefef; +} +.markdown-section p.tip em { + color: #c8c8c8; +} +.markdown-section p.warn { + background: rgba(234,111,90,0.1); + border-radius: 2px; + padding: 1rem; +} +body.close .sidebar { + -webkit-transform: translateX(-300px); + transform: translateX(-300px); +} +body.close .sidebar-toggle { + width: auto; +} +body.close .content { + left: 0; +} +@media print { + .github-corner, + .sidebar-toggle, + .sidebar, + .app-nav { + display: none; + } +} +@media screen and (max-width: 768px) { + .github-corner, + .sidebar-toggle, + .sidebar { + position: fixed; + } + .app-nav { + margin-top: 16px; + } + .app-nav li ul { + top: 30px; + } + main { + height: auto; + overflow-x: hidden; + } + .sidebar { + left: -300px; + -webkit-transition: -webkit-transform 250ms ease-out; + transition: -webkit-transform 250ms ease-out; + transition: transform 250ms ease-out; + transition: transform 250ms ease-out, -webkit-transform 250ms ease-out; + } + .content { + left: 0; + max-width: 100vw; + position: static; + padding-top: 20px; + -webkit-transition: -webkit-transform 250ms ease; + transition: -webkit-transform 250ms ease; + transition: transform 250ms ease; + transition: transform 250ms ease, -webkit-transform 250ms ease; + } + .app-nav, + .github-corner { + -webkit-transition: -webkit-transform 250ms ease-out; + transition: -webkit-transform 250ms ease-out; + transition: transform 250ms ease-out; + transition: transform 250ms ease-out, -webkit-transform 250ms ease-out; + } + .sidebar-toggle { + background-color: transparent; + width: auto; + padding: 30px 30px 10px 10px; + } + body.close .sidebar { + -webkit-transform: translateX(300px); + transform: translateX(300px); + } + body.close .sidebar-toggle { + background-color: rgba(63,63,63,0.8); + -webkit-transition: 1s background-color; + transition: 1s background-color; + width: 284px; + padding: 10px; + } + body.close .content { + -webkit-transform: translateX(300px); + transform: translateX(300px); + } + body.close .app-nav, + body.close .github-corner { + display: none; + } + .github-corner:hover .octo-arm { + -webkit-animation: none; + animation: none; + } + .github-corner .octo-arm { + -webkit-animation: octocat-wave 560ms ease-in-out; + animation: octocat-wave 560ms ease-in-out; + } +} +@-webkit-keyframes octocat-wave { + 0%, 100% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 20%, 60% { + -webkit-transform: rotate(-25deg); + transform: rotate(-25deg); + } + 40%, 80% { + -webkit-transform: rotate(10deg); + transform: rotate(10deg); + } +} +@keyframes octocat-wave { + 0%, 100% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 20%, 60% { + -webkit-transform: rotate(-25deg); + transform: rotate(-25deg); + } + 40%, 80% { + -webkit-transform: rotate(10deg); + transform: rotate(10deg); + } +} +section.cover { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + height: 100vh; + display: none; +} +section.cover.show { + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} +section.cover.has-mask .mask { + background-color: #3f3f3f; + opacity: 0.8; + position: absolute; + top: 0; + height: 100%; + width: 100%; +} +section.cover .cover-main { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + margin: -20px 16px 0; + text-align: center; + z-index: 1; +} +section.cover a { + color: inherit; + text-decoration: none; +} +section.cover a:hover { + text-decoration: none; +} +section.cover p { + line-height: 1.5rem; + margin: 1em 0; +} +section.cover h1 { + color: inherit; + font-size: 2.5rem; + font-weight: 300; + margin: 0.625rem 0 2.5rem; + position: relative; + text-align: center; +} +section.cover h1 a { + display: block; +} +section.cover h1 small { + bottom: -0.4375rem; + font-size: 1rem; + position: absolute; +} +section.cover blockquote { + font-size: 1.5rem; + text-align: center; +} +section.cover ul { + line-height: 1.8; + list-style-type: none; + margin: 1em auto; + max-width: 500px; + padding: 0; +} +section.cover .cover-main > p:last-child a { + border-color: var(--theme-color, #ea6f5a); + border-radius: 2rem; + border-style: solid; + border-width: 1px; + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: var(--theme-color, #ea6f5a); + display: inline-block; + font-size: 1.05rem; + letter-spacing: 0.1rem; + margin: 0.5rem 1rem; + padding: 0.75em 2rem; + text-decoration: none; + -webkit-transition: all 0.15s ease; + transition: all 0.15s ease; +} +section.cover .cover-main > p:last-child a:last-child { + background-color: var(--theme-color, #ea6f5a); + color: #fff; +} +section.cover .cover-main > p:last-child a:last-child:hover { + color: inherit; + opacity: 0.8; +} +section.cover .cover-main > p:last-child a:hover { + color: inherit; +} +section.cover blockquote > p > a { + border-bottom: 2px solid var(--theme-color, #ea6f5a); + -webkit-transition: color 0.3s; + transition: color 0.3s; +} +section.cover blockquote > p > a:hover { + color: var(--theme-color, #ea6f5a); +} +body { + background-color: #3f3f3f; +} +/* sidebar */ +.sidebar { + background-color: #3f3f3f; + color: #c8c8c8; +} +.sidebar li { + margin: 6px 15px; +} +.sidebar ul li a { + color: #c8c8c8; + font-size: 14px; + overflow: hidden; + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap; +} +.sidebar ul li a:hover { + text-decoration: underline; +} +.sidebar ul li ul { + padding: 0; +} +.sidebar ul li.active > a { + color: var(--theme-color, #ea6f5a); + font-weight: 600; +} +/* markdown content found on pages */ +.markdown-section h1, +.markdown-section h2, +.markdown-section h3, +.markdown-section h4, +.markdown-section strong { + color: #657b83; + font-weight: 600; +} +.markdown-section a { + color: var(--theme-color, #ea6f5a); + font-weight: 600; +} +.markdown-section h1 { + font-size: 2rem; + margin: 0 0 1rem; +} +.markdown-section h2 { + font-size: 1.75rem; + margin: 45px 0 0.8rem; +} +.markdown-section h3 { + font-size: 1.5rem; + margin: 40px 0 0.6rem; +} +.markdown-section h4 { + font-size: 1.25rem; +} +.markdown-section h5 { + font-size: 1rem; +} +.markdown-section h6 { + color: #777; + font-size: 1rem; +} +.markdown-section figure, +.markdown-section p, +.markdown-section ul, +.markdown-section ol { + margin: 1.2em 0; +} +.markdown-section p, +.markdown-section ul, +.markdown-section ol { + line-height: 1.6rem; + word-spacing: 0.05rem; +} +.markdown-section ul, +.markdown-section ol { + padding-left: 1.5rem; +} +.markdown-section blockquote { + border-left: 4px solid var(--theme-color, #ea6f5a); + color: #858585; + margin: 2em 0; + padding-left: 20px; +} +.markdown-section blockquote p { + font-weight: 600; + margin-left: 0; +} +.markdown-section iframe { + margin: 1em 0; +} +.markdown-section em { + color: #7f8c8d; +} +.markdown-section code { + background-color: #282828; + border-radius: 2px; + color: #aaaaaa; + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.8rem; + margin: 0 2px; + padding: 3px 5px; + white-space: pre-wrap; +} +.markdown-section pre { + -moz-osx-font-smoothing: initial; + -webkit-font-smoothing: initial; + background-color: #282828; + font-family: 'Roboto Mono', Monaco, courier, monospace; + line-height: 1.5rem; + margin: 1.2em 0; + overflow: auto; + padding: 0 1.4rem; + position: relative; + word-wrap: normal; +} +/* code highlight */ +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #8e908c; +} +.token.namespace { + opacity: 0.7; +} +.token.boolean, +.token.number { + color: #c76b29; +} +.token.punctuation { + color: #525252; +} +.token.property { + color: #c08b30; +} +.token.tag { + color: #2973b7; +} +.token.string { + color: var(--theme-color, #ea6f5a); +} +.token.selector { + color: #6679cc; +} +.token.attr-name { + color: #2973b7; +} +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #22a2c9; +} +.token.attr-value, +.token.control, +.token.directive, +.token.unit { + color: var(--theme-color, #ea6f5a); +} +.token.keyword { + color: #e96900; +} +.token.statement, +.token.regex, +.token.atrule { + color: #22a2c9; +} +.token.placeholder, +.token.variable { + color: #3d8fd1; +} +.token.deleted { + text-decoration: line-through; +} +.token.inserted { + border-bottom: 1px dotted #202746; + text-decoration: none; +} +.token.italic { + font-style: italic; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.important { + color: #c94922; +} +.token.entity { + cursor: help; +} +.markdown-section pre > code { + -moz-osx-font-smoothing: initial; + -webkit-font-smoothing: initial; + background-color: #282828; + border-radius: 2px; + color: #657b83; + display: block; + font-family: 'Roboto Mono', Monaco, courier, monospace; + font-size: 0.8rem; + line-height: inherit; + margin: 0 2px; + max-width: inherit; + overflow: inherit; + padding: 2.2em 5px; + white-space: inherit; +} +.markdown-section code::after, +.markdown-section code::before { + letter-spacing: 0.05rem; +} +code .token { + -moz-osx-font-smoothing: initial; + -webkit-font-smoothing: initial; + min-height: 1.5rem; +} +pre::after { + color: #ccc; + content: attr(data-lang); + font-size: 0.6rem; + font-weight: 600; + height: 15px; + line-height: 15px; + padding: 5px 10px 0; + position: absolute; + right: 0; + text-align: right; + top: 0; +} +.markdown-section p.tip { + background-color: #282828; + color: #657b83; +} +input[type='search'] { + background: #4f4f4f; + border-color: #4f4f4f; + color: #c8c8c8; +} From 303f425c6b4f9ab6056f863e515c71c9325f2bfa Mon Sep 17 00:00:00 2001 From: skullY Date: Mon, 7 May 2018 22:40:57 -0700 Subject: [PATCH 127/152] Fix up info boxes. --- docs/documentation_best_practices.md | 55 ++++-------------- docs/feature_advanced_keycodes.md | 6 +- docs/feature_auto_shift.md | 5 +- docs/feature_macros.md | 8 +-- docs/getting_started_github.md | 4 +- docs/hardware_avr.md | 4 +- docs/index.html | 5 ++ docs/newbs_building_firmware.md | 16 ++---- docs/newbs_flashing.md | 8 +-- docs/newbs_getting_started.md | 16 ++---- docs/sw.js | 83 ++++++++++++++++++++++++++++ 11 files changed, 119 insertions(+), 91 deletions(-) create mode 100644 docs/sw.js diff --git a/docs/documentation_best_practices.md b/docs/documentation_best_practices.md index 80de8c039a9..77c226117c2 100644 --- a/docs/documentation_best_practices.md +++ b/docs/documentation_best_practices.md @@ -22,59 +22,26 @@ Your page should generally have multiple "H1" headings. Only H1 and H2 headings You can have styled hint blocks drawn around text to draw attention to it. +### Important + ``` -{% hint style='info' %} -This uses `hint style='info'` -{% endhint %} +!> This is important ``` -### Examples: - -{% hint style='info' %} -This uses `hint style='info'` -{% endhint %} - -{% hint style='tip' %} -This uses `hint style='tip'` -{% endhint %} - -{% hint style='danger' %} -This uses `hint style='danger'` -{% endhint %} +Renders as: -{% hint style='working' %} -This uses `hint style='working'` -{% endhint %} +!> This is important -# Styled Terminal Blocks - -You can present styled terminal blocks by including special tokens inside your text block. +### General Tips ``` -\`\`\` -**[terminal] -**[prompt foo@joe]**[path ~]**[delimiter $ ]**[command ./myscript] -Normal output line. Nothing special here... -But... -You can add some colors. What about a warning message? -**[warning [WARNING] The color depends on the theme. Could look normal too] -What about an error message? -**[error [ERROR] This is not the error you are looking for] -\`\`\` +?> This is a helpful tip. ``` -### Example +Renders as: + +?> This is a helpful tip. -``` -**[terminal] -**[prompt foo@joe]**[path ~]**[delimiter $ ]**[command ./myscript] -Normal output line. Nothing special here... -But... -You can add some colors. What about a warning message? -**[warning [WARNING] The color depends on the theme. Could look normal too] -What about an error message? -**[error [ERROR] This is not the error you are looking for] -``` # Documenting Features @@ -94,4 +61,4 @@ This page describes my cool feature. You can use my cool feature to make coffee |KC_SUGAR||Order Sugar| ``` -Place your documentation into `docs/feature_.md`, and add that file to the appropriate place in `docs/_summary.md`. If you have added any keycodes be sure to add them to `docs/keycodes.md` with a link back to your feature page. +Place your documentation into `docs/feature_.md`, and add that file to the appropriate place in `docs/_sidebar.md`. If you have added any keycodes be sure to add them to `docs/keycodes.md` with a link back to your feature page. diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md index 89d0ae8fcf5..aeb7ce1bf48 100644 --- a/docs/feature_advanced_keycodes.md +++ b/docs/feature_advanced_keycodes.md @@ -131,11 +131,9 @@ We've added shortcuts to make common modifier/tap (mod-tap) mappings more compac * `LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped * `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift. -{% hint style='info' %} -Due to the way that keycodes are structured, any modifiers specified as part of `kc`, such as `LCTL()` or `KC_LPRN`, will only activate when held instead of tapped. +?> Due to the way that keycodes are structured, any modifiers specified as part of `kc`, such as `LCTL()` or `KC_LPRN`, will only activate when held instead of tapped. -Additionally, if there is at least one right modifier, any other modifiers will turn into their right equivalents, so it is not possible to "mix and match" the two. -{% endhint %} +?> Additionally, if there is at least one right modifier, any other modifiers will turn into their right equivalents, so it is not possible to "mix and match" the two. # One Shot Keys diff --git a/docs/feature_auto_shift.md b/docs/feature_auto_shift.md index 484c506f13c..9b4b2962490 100644 --- a/docs/feature_auto_shift.md +++ b/docs/feature_auto_shift.md @@ -88,10 +88,7 @@ occasion. This is simply due to habit and holding some keys a little longer than others. Once you find this value, work on tapping your problem keys a little quicker than normal and you will be set. -{% hint style='info' %} -Auto Shift has three special keys that can help you get this value right very -quick. See "Auto Shift Setup" for more details! -{% endhint %} +?> Auto Shift has three special keys that can help you get this value right very quick. See "Auto Shift Setup" for more details! ### NO_AUTO_SHIFT_SPECIAL (simple define) diff --git a/docs/feature_macros.md b/docs/feature_macros.md index 006fa04bca9..67315308127 100644 --- a/docs/feature_macros.md +++ b/docs/feature_macros.md @@ -2,9 +2,7 @@ Macros allow you to send multiple keystrokes when pressing just one key. QMK has a number of ways to define and use macros. These can do anything you want: type common phrases for you, copypasta, repetitive game movements, or even help you code. -{% hint style='danger' %} -**Security Note**: While it is possible to use macros to send passwords, credit card numbers, and other sensitive information it is a supremely bad idea to do so. Anyone who gets a hold of your keyboard will be able to access that information by opening a text editor. -{% endhint %} +!> **Security Note**: While it is possible to use macros to send passwords, credit card numbers, and other sensitive information it is a supremely bad idea to do so. Anyone who gets a hold of your keyboard will be able to access that information by opening a text editor. ## The New Way: `SEND_STRING()` & `process_record_user` @@ -132,9 +130,7 @@ SEND_STRING(".."SS_TAP(X_END)); ## The Old Way: `MACRO()` & `action_get_macro` -{% hint style='info' %} -This is inherited from TMK, and hasn't been updated - it's recommend that you use `SEND_STRING` and `process_record_user` instead. -{% endhint %} +?> This is inherited from TMK, and hasn't been updated - it's recommend that you use `SEND_STRING` and `process_record_user` instead. By default QMK assumes you don't have any macros. To define your macros you create an `action_get_macro()` function. For example: diff --git a/docs/getting_started_github.md b/docs/getting_started_github.md index f01ae6d011a..7ce65e210eb 100644 --- a/docs/getting_started_github.md +++ b/docs/getting_started_github.md @@ -2,9 +2,7 @@ Github can be a little tricky to those that aren't familiar with it - this guide will walk through each step of forking, cloning, and submitting a pull request with QMK. -{% hint style='info' %} -This guide assumes you're somewhat comfortable with running things at the command line, and have git installed on your system. -{% endhint %} +?> This guide assumes you're somewhat comfortable with running things at the command line, and have git installed on your system. Start on the [QMK Github page](https://github.com/qmk/qmk_firmware), and you'll see a button in the upper right that says "Fork": diff --git a/docs/hardware_avr.md b/docs/hardware_avr.md index 77081704504..be693240620 100644 --- a/docs/hardware_avr.md +++ b/docs/hardware_avr.md @@ -66,9 +66,7 @@ Do change the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` lines to accurately r #define DESCRIPTION A custom keyboard ``` -{% hint style='info' %} -Note: On Windows and macOS the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` fields will be displayed in the list of USB devices. On Linux these values will not be visible in `lsusb`, since Linux takes that information from the list published by the USB-IF. -{% endhint %} +?> Note: On Windows and macOS the `MANUFACTURER`, `PRODUCT`, and `DESCRIPTION` fields will be displayed in the list of USB devices. On Linux these values will not be visible in `lsusb`, since Linux takes that information from the list published by the USB-IF. ### Keyboard Matrix Configuration diff --git a/docs/index.html b/docs/index.html index c890b95ae7f..7955e47c292 100644 --- a/docs/index.html +++ b/docs/index.html @@ -28,5 +28,10 @@ + diff --git a/docs/newbs_building_firmware.md b/docs/newbs_building_firmware.md index ea01a1a6266..f227d623f01 100644 --- a/docs/newbs_building_firmware.md +++ b/docs/newbs_building_firmware.md @@ -8,17 +8,15 @@ If you have closed and reopened your terminal window since following the first p Start by navigating to the `keymaps` folder for your keyboard. -{% hint style='info' %} -If you are on macOS or Windows there are commands you can use to easily open the keymaps folder. +?> If you are on macOS or Windows there are commands you can use to easily open the keymaps folder. -macOS: +?> macOS: open keyboards//keymaps -Windows: +?> Windows: start keyboards//keymaps -{% endhint %} ## Create a Copy Of The `default` Keymap @@ -32,9 +30,7 @@ Open up your `keymap.c`. Inside this file you'll find the structure that control This line indicates the start of the list of Layers. Below that you'll find lines containing either `LAYOUT` or `KEYMAP`, and these lines indicate the start of a layer. Below that line is the list of keys that comprise a that particular layer. -{% hint style='danger' %} -When editing your keymap file be careful not to add or remove any commas. If you do you will prevent your firmware from compiling and it may not be easy to figure out where the extra, or missing, comma is. -{% endhint %} +!> When editing your keymap file be careful not to add or remove any commas. If you do you will prevent your firmware from compiling and it may not be easy to figure out where the extra, or missing, comma is. ## Customize The Layout To Your Liking @@ -44,9 +40,7 @@ How to complete this step is entirely up to you. Make the one change that's been * [Features](features.md) * [FAQ](faq.md) -{% hint style='info' %} -While you get a feel for how keymaps work, keep each change small. Bigger changes make it harder to debug any problems that arise. -{% endhint %} +?> While you get a feel for how keymaps work, keep each change small. Bigger changes make it harder to debug any problems that arise. ## Build Your Firmware diff --git a/docs/newbs_flashing.md b/docs/newbs_flashing.md index 4cd7c5c44a1..0b0ede37c4e 100644 --- a/docs/newbs_flashing.md +++ b/docs/newbs_flashing.md @@ -12,17 +12,15 @@ However, the QMK Toolbox is only available for Windows and macOS currently. If Begin by opening the QMK Toolbox application. You'll want to locate the firmware file in Finder or Explorer. Your keyboard firmware may be in one of two formats- `.hex` or `.bin`. QMK tries to copy the appropriate one for your keyboard into the root `qmk_firmware` directory. -{% hint style='info' %} -If you are on Windows or macOS there are commands you can use to easily open the current firmware folder in Explorer or Finder. +?> If you are on Windows or macOS there are commands you can use to easily open the current firmware folder in Explorer or Finder. -Windows: +?> Windows: start . -macOS: +?> macOS: open . -{% endhint %} The firmware file always follows this naming format: diff --git a/docs/newbs_getting_started.md b/docs/newbs_getting_started.md index 60b94b01236..8ada417eacb 100644 --- a/docs/newbs_getting_started.md +++ b/docs/newbs_getting_started.md @@ -14,9 +14,7 @@ Before you can build keymaps you need to install some software and setup your bu You'll need a program that can edit and save **plain text** files. If you are on Windows you can make due with Notepad, and on Linux you can use Gedit, both of which are simple but functional text editors. On macOS you can not use TextEdit.app, it will not save plain text files. You will need to install another program such as Sublime Text. -{% hint style='info' %} -Not sure which text editor to use? Laurence Bradford wrote [a great introduction](https://learntocodewith.me/programming/basics/text-editors/) to the subject. -{% endhint %} +?> Not sure which text editor to use? Laurence Bradford wrote [a great introduction](https://learntocodewith.me/programming/basics/text-editors/) to the subject. ### QMK Toolbox @@ -29,12 +27,10 @@ QMK Toolbox is a Windows and macOS program that allows you to both program and d We've tried to make QMK as easy to setup as possible. You only have to prepare your Linux or Unix environment and let QMK install the rest. -{% hint style="info" %} -If you haven't worked with the Linux/Unix command line before there are a few basic concepts and commands you should learn. These resources will teach you enough to work with QMK: +?> If you haven't worked with the Linux/Unix command line before there are a few basic concepts and commands you should learn. These resources will teach you enough to work with QMK: -* [Must Know Linux Commands](https://www.guru99.com/must-know-linux-commands.html) -* [Some Basic Unix Commands](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html) -{% endhint %} +?> * [Must Know Linux Commands](https://www.guru99.com/must-know-linux-commands.html) +?> * [Some Basic Unix Commands](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html) ### Windows @@ -63,9 +59,7 @@ Once you have setup your Linux/Unix environment you are ready to download QMK. W git clone https://github.com/qmk/qmk_firmware.git cd qmk_firmware -{% hint style='info' %} -If you already know [how to use GitHub](getting_started_github.md) we recommend you create and clone your own fork instead. If you don't know what that means you can safely ignore this message. -{% endhint %} +?> If you already know [how to use GitHub](getting_started_github.md) we recommend you create and clone your own fork instead. If you don't know what that means you can safely ignore this message. ## Setup QMK diff --git a/docs/sw.js b/docs/sw.js new file mode 100644 index 00000000000..1e4aaeb7621 --- /dev/null +++ b/docs/sw.js @@ -0,0 +1,83 @@ +/* =========================================================== + * docsify sw.js + * =========================================================== + * Copyright 2016 @huxpro + * Licensed under Apache 2.0 + * Register service worker. + * ========================================================== */ + +const RUNTIME = 'docsify' +const HOSTNAME_WHITELIST = [ + self.location.hostname, + 'fonts.gstatic.com', + 'fonts.googleapis.com', + 'unpkg.com' +] + +// The Util Function to hack URLs of intercepted requests +const getFixedUrl = (req) => { + var now = Date.now() + var url = new URL(req.url) + + // 1. fixed http URL + // Just keep syncing with location.protocol + // fetch(httpURL) belongs to active mixed content. + // And fetch(httpRequest) is not supported yet. + url.protocol = self.location.protocol + + // 2. add query for caching-busting. + // Github Pages served with Cache-Control: max-age=600 + // max-age on mutable content is error-prone, with SW life of bugs can even extend. + // Until cache mode of Fetch API landed, we have to workaround cache-busting with query string. + // Cache-Control-Bug: https://bugs.chromium.org/p/chromium/issues/detail?id=453190 + if (url.hostname === self.location.hostname) { + url.search += (url.search ? '&' : '?') + 'cache-bust=' + now + } + return url.href +} + +/** + * @Lifecycle Activate + * New one activated when old isnt being used. + * + * waitUntil(): activating ====> activated + */ +self.addEventListener('activate', event => { + event.waitUntil(self.clients.claim()) +}) + +/** + * @Functional Fetch + * All network requests are being intercepted here. + * + * void respondWith(Promise r) + */ +self.addEventListener('fetch', event => { + // Skip some of cross-origin requests, like those for Google Analytics. + if (HOSTNAME_WHITELIST.indexOf(new URL(event.request.url).hostname) > -1) { + // Stale-while-revalidate + // similar to HTTP's stale-while-revalidate: https://www.mnot.net/blog/2007/12/12/stale + // Upgrade from Jake's to Surma's: https://gist.github.com/surma/eb441223daaedf880801ad80006389f1 + const cached = caches.match(event.request) + const fixedUrl = getFixedUrl(event.request) + const fetched = fetch(fixedUrl, { cache: 'no-store' }) + const fetchedCopy = fetched.then(resp => resp.clone()) + + // Call respondWith() with whatever we get first. + // If the fetch fails (e.g disconnected), wait for the cache. + // If there’s nothing in cache, wait for the fetch. + // If neither yields a response, return offline pages. + event.respondWith( + Promise.race([fetched.catch(_ => cached), cached]) + .then(resp => resp || fetched) + .catch(_ => { /* eat any errors */ }) + ) + + // Update the cache with the version we fetched (only for ok status) + event.waitUntil( + Promise.all([fetchedCopy, caches.open(RUNTIME)]) + .then(([response, cache]) => response.ok && cache.put(event.request, response)) + .catch(_ => { /* eat any errors */ }) + ) + } +}) From ccc87421e77f554cac08d2f8b2c3cbcb04f6181c Mon Sep 17 00:00:00 2001 From: skullY Date: Mon, 7 May 2018 23:37:21 -0700 Subject: [PATCH 128/152] Some more tweaks to make everything look nice --- docs/_sidebar.md | 3 ++- docs/index.html | 1 - docs/newbs_getting_started.md | 7 +++---- docs/qmk.css | 4 ++-- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 318c526a854..00aeb805777 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -43,7 +43,8 @@ * [Pointing Device](feature_pointing_device.md) * [PS/2 Mouse](feature_ps2_mouse.md) * [RGB Lighting](feature_rgblight.md) - * [Space Cadet](feature_space_cadet.md) + * [Space Cadet Shift](feature_space_cadet.md) + * [Space Cadet Shift Enter](feature_space_shift_cadet.md) * [Stenography](feature_stenography.md) * [Swap Hands](feature_swap_hands.md) * [Tap Dance](feature_tap_dance.md) diff --git a/docs/index.html b/docs/index.html index 7955e47c292..9fddda840d7 100644 --- a/docs/index.html +++ b/docs/index.html @@ -16,7 +16,6 @@ nameLink: 'https://qmk.fm/', repo: 'qmk/qmk_firmware', loadSidebar: true, - subMaxLevel: 2, auto2top: true, formatUpdated: '{YYYY}/{MM}/{DD} {HH}:{mm}', } diff --git a/docs/newbs_getting_started.md b/docs/newbs_getting_started.md index 8ada417eacb..162d7066b52 100644 --- a/docs/newbs_getting_started.md +++ b/docs/newbs_getting_started.md @@ -27,10 +27,9 @@ QMK Toolbox is a Windows and macOS program that allows you to both program and d We've tried to make QMK as easy to setup as possible. You only have to prepare your Linux or Unix environment and let QMK install the rest. -?> If you haven't worked with the Linux/Unix command line before there are a few basic concepts and commands you should learn. These resources will teach you enough to work with QMK: - -?> * [Must Know Linux Commands](https://www.guru99.com/must-know-linux-commands.html) -?> * [Some Basic Unix Commands](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html) +?> If you haven't worked with the Linux/Unix command line before there are a few basic concepts and commands you should learn. These resources will teach you enough to work with QMK:
+[Must Know Linux Commands](https://www.guru99.com/must-know-linux-commands.html)
+[Some Basic Unix Commands](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html) ### Windows diff --git a/docs/qmk.css b/docs/qmk.css index 591dd291aef..543cd7f28d4 100644 --- a/docs/qmk.css +++ b/docs/qmk.css @@ -357,10 +357,10 @@ body.sticky .sidebar-toggle { border-top: 1px solid #ccc; } .markdown-section tr:nth-child(2n) { - background-color: #f8f8f8; + background-color: #555555; } .markdown-section p.tip { - background-color: #f8f8f8; + background-color: #555555; border-bottom-right-radius: 2px; border-left: 4px solid #f66; border-top-right-radius: 2px; From 1b4ad6b4ae55a873cbe13ffde87544bae88f2b19 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Tue, 8 May 2018 11:38:11 -0700 Subject: [PATCH 129/152] KBD8X QMK Support (#2915) * initial commit * add row/column and pin info * Add first part of switch matrix * documentation and additional config items * map out the non confusing part of the matrix * map out the top row * ok I think I got it * fix some stupid compile errors * put in a default keymap * rename LAYOUT to LAYOUT_all * add a standard layout and info.json file * Fix up readme for default keymap * Add toggle key LED functionality * changes based on review feedback --- keyboards/kbd8x/config.h | 199 ++++++++++++++++++++++ keyboards/kbd8x/info.json | 16 ++ keyboards/kbd8x/kbd8x.c | 43 +++++ keyboards/kbd8x/kbd8x.h | 71 ++++++++ keyboards/kbd8x/keymaps/default/config.h | 24 +++ keyboards/kbd8x/keymaps/default/keymap.c | 64 +++++++ keyboards/kbd8x/keymaps/default/readme.md | 3 + keyboards/kbd8x/readme.md | 15 ++ keyboards/kbd8x/rules.mk | 69 ++++++++ 9 files changed, 504 insertions(+) create mode 100644 keyboards/kbd8x/config.h create mode 100644 keyboards/kbd8x/info.json create mode 100644 keyboards/kbd8x/kbd8x.c create mode 100644 keyboards/kbd8x/kbd8x.h create mode 100644 keyboards/kbd8x/keymaps/default/config.h create mode 100644 keyboards/kbd8x/keymaps/default/keymap.c create mode 100644 keyboards/kbd8x/keymaps/default/readme.md create mode 100644 keyboards/kbd8x/readme.md create mode 100644 keyboards/kbd8x/rules.mk diff --git a/keyboards/kbd8x/config.h b/keyboards/kbd8x/config.h new file mode 100644 index 00000000000..c021fb40b50 --- /dev/null +++ b/keyboards/kbd8x/config.h @@ -0,0 +1,199 @@ +/* +Copyright 2017 MechMerlin + +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 0x0000 +#define DEVICE_VER 0x0001 +#define MANUFACTURER KBDFans +#define PRODUCT kbd8x +#define DESCRIPTION Custom TKL Keyboard + +/* key matrix size */ +#define MATRIX_ROWS 6 +#define MATRIX_COLS 15 + +/* + * Keyboard Matrix Assignments + * + * Change this to how you wired your keyboard + * COLS: AVR pins used for columns, left to right + * ROWS: AVR pins used for rows, top to bottom + * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode) + * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode) + * +*/ +#define MATRIX_ROW_PINS { E6, B7, D4, F0, D6, D7 } +#define MATRIX_COL_PINS { D1, D0, F7, F6, F5, D5, D3, D2, C7, C6, B5, F4, F1, B4, B0 } +#define UNUSED_PINS + +/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */ +#define DIODE_DIRECTION COL2ROW + +#define BACKLIGHT_PIN B6 +#define BACKLIGHT_BREATHING +#define BACKLIGHT_LEVELS 3 + +#define RGB_DI_PIN E2 +#ifdef RGB_DI_PIN +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 20 +#define RGBLIGHT_HUE_STEP 8 +#define RGBLIGHT_SAT_STEP 8 +#define RGBLIGHT_VAL_STEP 8 +#endif + + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCING_DELAY 5 + +/* define if matrix has ghost (lacks anti-ghosting diodes) */ +//#define MATRIX_HAS_GHOST + +/* number of backlight levels */ + +/* 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 + +/* If defined, GRAVE_ESC will always act as ESC when CTRL is held. + * This is userful for the Windows task manager shortcut (ctrl+shift+esc). + */ +// #define GRAVE_ESC_CTRL_OVERRIDE + +/* + * Force NKRO + * + * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved + * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the + * makefile for this to work.) + * + * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N) + * until the next keyboard reset. + * + * NKRO may prevent your keystrokes from being detected in the BIOS, but it is + * fully operational during normal computer usage. + * + * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N) + * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by + * bootmagic, NKRO mode will always be enabled until it is toggled again during a + * power-up. + * + */ +//#define FORCE_NKRO + +/* + * Magic Key Options + * + * Magic keys are hotkey commands that allow control over firmware functions of + * the keyboard. They are best used in combination with the HID Listen program, + * found here: https://www.pjrc.com/teensy/hid_listen.html + * + * The options below allow the magic key functionality to be changed. This is + * useful if your keyboard/keypad is missing keys and you want magic key support. + * + */ + +/* key combination for magic key command */ +#define IS_COMMAND() ( \ + keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ +) + +/* control how magic key switches layers */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false + +/* override magic key keymap */ +//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS +//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM +//#define MAGIC_KEY_HELP1 H +//#define MAGIC_KEY_HELP2 SLASH +//#define MAGIC_KEY_DEBUG D +//#define MAGIC_KEY_DEBUG_MATRIX X +//#define MAGIC_KEY_DEBUG_KBD K +//#define MAGIC_KEY_DEBUG_MOUSE M +//#define MAGIC_KEY_VERSION V +//#define MAGIC_KEY_STATUS S +//#define MAGIC_KEY_CONSOLE C +//#define MAGIC_KEY_LAYER0_ALT1 ESC +//#define MAGIC_KEY_LAYER0_ALT2 GRAVE +//#define MAGIC_KEY_LAYER0 0 +//#define MAGIC_KEY_LAYER1 1 +//#define MAGIC_KEY_LAYER2 2 +//#define MAGIC_KEY_LAYER3 3 +//#define MAGIC_KEY_LAYER4 4 +//#define MAGIC_KEY_LAYER5 5 +//#define MAGIC_KEY_LAYER6 6 +//#define MAGIC_KEY_LAYER7 7 +//#define MAGIC_KEY_LAYER8 8 +//#define MAGIC_KEY_LAYER9 9 +//#define MAGIC_KEY_BOOTLOADER PAUSE +//#define MAGIC_KEY_LOCK CAPS +//#define MAGIC_KEY_EEPROM E +//#define MAGIC_KEY_NKRO N +//#define MAGIC_KEY_SLEEP_LED Z + +/* + * 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 + +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + +#endif diff --git a/keyboards/kbd8x/info.json b/keyboards/kbd8x/info.json new file mode 100644 index 00000000000..fe94f1b3ac3 --- /dev/null +++ b/keyboards/kbd8x/info.json @@ -0,0 +1,16 @@ +{ + "keyboard_name": "KBD 8X", + "url": "", + "maintainer": "qmk", + "width": 18.25, + "height": 6.5, + "layouts": { + "LAYOUT_all": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"x":13, "y":1.5}, {"x":14, "y":1.5}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"Shift", "x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":1.75}, {"x":14, "y":4.5}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}] + }, + + "LAYOUT_tkl_ansi": { + "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5, "w":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":2.75}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}] + } + } +} diff --git a/keyboards/kbd8x/kbd8x.c b/keyboards/kbd8x/kbd8x.c new file mode 100644 index 00000000000..51e7852412f --- /dev/null +++ b/keyboards/kbd8x/kbd8x.c @@ -0,0 +1,43 @@ +/* Copyright 2017 MechMerlin + * + * 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 "kbd8x.h" + +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); +} + +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); +} diff --git a/keyboards/kbd8x/kbd8x.h b/keyboards/kbd8x/kbd8x.h new file mode 100644 index 00000000000..02a7436446a --- /dev/null +++ b/keyboards/kbd8x/kbd8x.h @@ -0,0 +1,71 @@ +/* Copyright 2017 MechMerlin + * + * 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 KBD8X_H +#define KBD8X_H + +#include "quantum.h" +#include "led.h" + +// Functions for setting LEDs on toggle keys +inline void caps_led_on(void) { DDRB |= (1<<3); PORTB &= ~(1<<3); } +inline void caps_led_off(void) { DDRB &= ~(1<<3); PORTB &= ~(1<<3); } + +inline void num_led_on(void) { DDRB |= (1<<1); PORTB &= ~(1<<1); } +inline void num_led_off(void) { DDRB &= ~(1<<1); PORTB &= ~(1<<1); } + +inline void scroll_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); } +inline void scroll_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); } + + +// LAYOUT depicting all possible switch positions. +// LAYOUT_all supports ISO, split backspace and split left/right shift. +#define LAYOUT_all( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K3D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K5B, K5C, K3E, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K5D, K5E, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, \ + K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A \ +) \ +{ \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \ + { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \ + { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E } \ +} + +// LAYOUT depicting only switch positions for a standard TKL ANSI keyboard. +// TODO: Double check location of backspace key for 2u layout (It's either K1D or K1C). +#define LAYOUT_tkl_ansi( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K3D, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, K5B, K5C, K3E, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K5D, K5E, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4E, \ + K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A \ +) \ +{ \ + { 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, KC_NO, K1E }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \ + { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \ + { K40, KC_NO, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, KC_NO, K4E }, \ + { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E } \ +} + +#endif diff --git a/keyboards/kbd8x/keymaps/default/config.h b/keyboards/kbd8x/keymaps/default/config.h new file mode 100644 index 00000000000..63bef2a735b --- /dev/null +++ b/keyboards/kbd8x/keymaps/default/config.h @@ -0,0 +1,24 @@ +/* Copyright 2017 MechMerlin + * + * 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/kbd8x/keymaps/default/keymap.c b/keyboards/kbd8x/keymaps/default/keymap.c new file mode 100644 index 00000000000..bfbc841d58f --- /dev/null +++ b/keyboards/kbd8x/keymaps/default/keymap.c @@ -0,0 +1,64 @@ +/* Copyright 2017 MechMerlin + * + * 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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = 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_PSCR, KC_SLCK, KC_PAUS, \ + 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_BSPC, KC_INS, KC_HOME, KC_PGUP, \ + 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_END, KC_PGDN, \ + 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_NUBS, 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + +}; + +const uint16_t PROGMEM fn_actions[] = { + +}; + +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; +}; + + +void matrix_init_user(void) { + +} + +void matrix_scan_user(void) { + +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + +} diff --git a/keyboards/kbd8x/keymaps/default/readme.md b/keyboards/kbd8x/keymaps/default/readme.md new file mode 100644 index 00000000000..773a3dfbaee --- /dev/null +++ b/keyboards/kbd8x/keymaps/default/readme.md @@ -0,0 +1,3 @@ +# The default keymap for kbd8x + +This keymap uses the LAYOUT_all macro when creating its keymap. \ No newline at end of file diff --git a/keyboards/kbd8x/readme.md b/keyboards/kbd8x/readme.md new file mode 100644 index 00000000000..fe49819753b --- /dev/null +++ b/keyboards/kbd8x/readme.md @@ -0,0 +1,15 @@ +# KBD 8X + +![kbd8x](imgur.com image replace me!) + +TKL Keyboard from KBDFans + +Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin) +Hardware Supported: kbd8x +Hardware Availability: [KBDFans](https://kbdfans.cn/blogs/updates/kbd-8x-update-40) + +Make example for this keyboard (after setting up your build environment): + + make kbd8x: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/kbd8x/rules.mk b/keyboards/kbd8x/rules.mk new file mode 100644 index 00000000000..3bb473ba8f0 --- /dev/null +++ b/keyboards/kbd8x/rules.mk @@ -0,0 +1,69 @@ +# MCU name +#MCU = at90usb1286 +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 +OPT_DEFS += -DBOOTLOADER_SIZE=4096 +BOOTLOADER = atmel-dfu + + +# Build Options +# change yes to no to disable +# +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 = yes # Console for debug(+400) +COMMAND_ENABLE = yes # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches From 46dca121fd2f51c4f5b87e48af37f43340591433 Mon Sep 17 00:00:00 2001 From: Hannes Egler Date: Tue, 8 May 2018 20:39:18 +0200 Subject: [PATCH 130/152] kbd75 fixes for the configurator (#2908) fixed the info.json --- keyboards/kbd75/info.json | 179 +++++++++++++++++++------------------- 1 file changed, 90 insertions(+), 89 deletions(-) diff --git a/keyboards/kbd75/info.json b/keyboards/kbd75/info.json index 2eb1412f2ab..e1d578f6378 100644 --- a/keyboards/kbd75/info.json +++ b/keyboards/kbd75/info.json @@ -178,7 +178,7 @@ {"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}, + {"x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5}, {"label":"Fn", "x":11, "y":5}, {"label":"Ctrl", "x":12, "y":5}, @@ -188,92 +188,93 @@ }, "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}] + "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.25}, + {"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": { @@ -356,7 +357,7 @@ {"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}, + {"x":3.75, "y":5, "w":6.25}, {"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}, @@ -445,7 +446,7 @@ {"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}, + {"x":3.75, "y":5, "w":6.25}, {"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}, From 14b7602a65dedaf51db1c9288144765d43a83a15 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Tue, 8 May 2018 15:24:18 -0400 Subject: [PATCH 131/152] Adds IS31FL3731 RGB Matrix Implementation (#2910) * adds is31fl3731 rgb matrix implementation * fix build script for force pushes * allow bootloader size to be overwritten * adds planck light implementation * split led config into 2 arrays * idk * betterize register handling * update planck implementation * update planck * refine rgb interface * cleanup names, rgb matrix * start documentation * finish up docs * add effects list * clean-up merge * add RGB_MATRIX_SKIP_FRAMES * add support for at90usb1286 to bootloader options --- bootloader.mk | 23 +- common_features.mk | 9 + docs/feature_rgb_matrix.md | 141 ++++++ drivers/avr/TWIlib.c | 232 +++++++++ drivers/avr/TWIlib.h | 82 +++ drivers/avr/is31fl3731.c | 258 ++++++++++ drivers/avr/is31fl3731.h | 214 ++++++++ keyboards/planck/light/config.h | 19 +- keyboards/planck/light/light.c | 141 +++++- keyboards/planck/light/light.h | 4 +- keyboards/planck/light/rules.mk | 4 +- keyboards/planck/rules.mk | 2 +- quantum/color.c | 87 ++++ quantum/color.h | 55 ++ quantum/quantum.c | 23 +- quantum/quantum.h | 6 + quantum/rgb.h | 47 ++ quantum/rgb_matrix.c | 873 ++++++++++++++++++++++++++++++++ quantum/rgb_matrix.h | 135 +++++ 19 files changed, 2336 insertions(+), 19 deletions(-) create mode 100644 docs/feature_rgb_matrix.md create mode 100644 drivers/avr/TWIlib.c create mode 100644 drivers/avr/TWIlib.h create mode 100644 drivers/avr/is31fl3731.c create mode 100644 drivers/avr/is31fl3731.h create mode 100644 quantum/color.c create mode 100644 quantum/color.h create mode 100644 quantum/rgb.h create mode 100644 quantum/rgb_matrix.c create mode 100644 quantum/rgb_matrix.h diff --git a/bootloader.mk b/bootloader.mk index 55352f3d426..f30e38dd05b 100644 --- a/bootloader.mk +++ b/bootloader.mk @@ -32,17 +32,32 @@ ifeq ($(strip $(BOOTLOADER)), atmel-dfu) OPT_DEFS += -DBOOTLOADER_ATMEL_DFU OPT_DEFS += -DBOOTLOADER_DFU - BOOTLOADER_SIZE = 4096 + ifeq ($(strip $(MCU)), atmega32u4) + BOOTLOADER_SIZE = 4096 + endif + ifeq ($(strip $(MCU)), at90usb1286) + BOOTLOADER_SIZE = 8192 + endif endif ifeq ($(strip $(BOOTLOADER)), lufa-dfu) OPT_DEFS += -DBOOTLOADER_LUFA_DFU OPT_DEFS += -DBOOTLOADER_DFU - BOOTLOADER_SIZE = 4096 + ifeq ($(strip $(MCU)), atmega32u4) + BOOTLOADER_SIZE = 4096 + endif + ifeq ($(strip $(MCU)), at90usb1286) + BOOTLOADER_SIZE = 8192 + endif endif ifeq ($(strip $(BOOTLOADER)), qmk-dfu) OPT_DEFS += -DBOOTLOADER_QMK_DFU OPT_DEFS += -DBOOTLOADER_DFU - BOOTLOADER_SIZE = 4096 + ifeq ($(strip $(MCU)), atmega32u4) + BOOTLOADER_SIZE = 4096 + endif + ifeq ($(strip $(MCU)), at90usb1286) + BOOTLOADER_SIZE = 8192 + endif endif ifeq ($(strip $(BOOTLOADER)), halfkay) OPT_DEFS += -DBOOTLOADER_HALFKAY @@ -59,4 +74,4 @@ endif ifdef BOOTLOADER_SIZE OPT_DEFS += -DBOOTLOADER_SIZE=$(strip $(BOOTLOADER_SIZE)) -endif \ No newline at end of file +endif diff --git a/common_features.mk b/common_features.mk index 7bd43afdbaf..7ba7d48154d 100644 --- a/common_features.mk +++ b/common_features.mk @@ -114,6 +114,15 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) endif endif +ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) + OPT_DEFS += -DRGB_MATRIX_ENABLE + SRC += is31fl3731.c + SRC += TWIlib.c + SRC += $(QUANTUM_DIR)/color.c + SRC += $(QUANTUM_DIR)/rgb_matrix.c + CIE1931_CURVE = yes +endif + ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) OPT_DEFS += -DTAP_DANCE_ENABLE SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md new file mode 100644 index 00000000000..dfc103247ac --- /dev/null +++ b/docs/feature_rgb_matrix.md @@ -0,0 +1,141 @@ +# RGB Matrix Lighting + +There is basic support for addressable RGB matrix lighting with the I2C IS31FL3731 RGB controller. To enable it, add this to your `rules.mk`: + + RGB_MATRIX_ENABLE = yes + +Configure the hardware via your `config.h`: + + // This is a 7-bit address, that gets left-shifted and bit 0 + // set to 0 for write, 1 for read (as per I2C protocol) + // The address will vary depending on your wiring: + // 0b1110100 AD <-> GND + // 0b1110111 AD <-> VCC + // 0b1110101 AD <-> SCL + // 0b1110110 AD <-> SDA + #define DRIVER_ADDR_1 0b1110100 + #define DRIVER_ADDR_2 0b1110110 + + #define DRIVER_COUNT 2 + #define DRIVER_1_LED_TOTAL 25 + #define DRIVER_2_LED_TOTAL 24 + #define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL + +Currently only 2 drivers are supported, but it would be trivial to support all 4 combinations. + +Define these arrays listing all the LEDs in your `.c`: + + const is31_led g_is31_leds[DRIVER_LED_TOTAL] = { + /* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, C1_3, C2_3, C3_3}, + .... + } + +Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](http://www.issi.com/WW/pdf/31FL3731.pdf). The `driver` is the index of the driver you defined in your `config.h` (`0` or `1` right now). + + const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = { + /* {row | col << 4} + * | {x=0..224, y=0..64} + * | | modifier + * | | | */ + {{0|(0<<4)}, {20.36*0, 21.33*0}, 1}, + {{0|(1<<4)}, {20.36*1, 21.33*0}, 1}, + .... + } + +The format for the matrix position used in this array is `{row | (col << 4)}`. The `x` is between (inclusive) 0-224, and `y` is between (inclusive) 0-64. The easiest way to calculate these positions is: + + x = 224 / ( NUMBER_OF_ROWS - 1 ) * ROW_POSITION + y = 64 / (NUMBER_OF_COLS - 1 ) * COL_POSITION + +Where all variables are decimels/floats. + +`modifier` is a boolean, whether or not a certain key is considered a modifier (used in some effects). + +## Keycodes + +All RGB keycodes are currently shared with the RGBLIGHT system: + + * `RGB_TOG` - toggle + * `RGB_MOD` - cycle through modes + * `RGB_HUI` - increase hue + * `RGB_HUD` - decrease hue + * `RGB_SAI` - increase saturation + * `RGB_SAD` - decrease saturation + * `RGB_VAI` - increase value + * `RGB_VAD` - decrease value + + + * `RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system + +## RGB Matrix Effects + +These are the effects that are currently available: + + enum rgb_matrix_effects { + RGB_MATRIX_SOLID_COLOR = 1, + RGB_MATRIX_SOLID_REACTIVE, + RGB_MATRIX_ALPHAS_MODS, + RGB_MATRIX_DUAL_BEACON, + RGB_MATRIX_GRADIENT_UP_DOWN, + RGB_MATRIX_RAINDROPS, + RGB_MATRIX_CYCLE_ALL, + RGB_MATRIX_CYCLE_LEFT_RIGHT, + RGB_MATRIX_CYCLE_UP_DOWN, + RGB_MATRIX_RAINBOW_BEACON, + RGB_MATRIX_RAINBOW_PINWHEELS, + RGB_MATRIX_RAINBOW_MOVING_CHEVRON, + RGB_MATRIX_JELLYBEAN_RAINDROPS, + #ifdef RGB_MATRIX_KEYPRESSES + RGB_MATRIX_SPLASH, + RGB_MATRIX_MULTISPLASH, + RGB_MATRIX_SOLID_SPLASH, + RGB_MATRIX_SOLID_MULTISPLASH, + #endif + RGB_MATRIX_EFFECT_MAX + }; + +## Custom layer effects + +Custom layer effects can be done by defining this in your `.c`: + + void rgb_matrix_indicators_kb(void) { + // rgb_matrix_set_color(index, red, green, blue); + } + +A similar function works in the keymap as `rgb_matrix_indicators_user`. + +## Additional `config.h` Options + + #define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot) + #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened) + #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects + #define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended + #define RGB_MATRIX_SKIP_FRAMES 1 // number of frames to skip when displaying animations (0 is full effect) + +## EEPROM storage + +The EEPROM for it is currently shared with the RGBLIGHT system (it's generally assumed only one RGB would be used at a time), but could be configured to use its own 32bit address with: + + #define EECONFIG_RGB_MATRIX (uint32_t *)16 + +Where `16` is an unused index from `eeconfig.h`. + +## Suspended state + +To use the suspend feature, add this to your `.c`: + + void suspend_power_down_kb(void) + { + rgb_matrix_set_suspend_state(true); + } + + void suspend_wakeup_init_kb(void) + { + rgb_matrix_set_suspend_state(false); + } diff --git a/drivers/avr/TWIlib.c b/drivers/avr/TWIlib.c new file mode 100644 index 00000000000..b39e3054a5c --- /dev/null +++ b/drivers/avr/TWIlib.c @@ -0,0 +1,232 @@ +/* + * TWIlib.c + * + * Created: 6/01/2014 10:41:33 PM + * Author: Chris Herring + * http://www.chrisherring.net/all/tutorial-interrupt-driven-twi-interface-for-avr-part1/ + */ + +#include +#include +#include "TWIlib.h" +#include "util/delay.h" + +void TWIInit() +{ + TWIInfo.mode = Ready; + TWIInfo.errorCode = 0xFF; + TWIInfo.repStart = 0; + // Set pre-scalers (no pre-scaling) + TWSR = 0; + // Set bit rate + TWBR = ((F_CPU / TWI_FREQ) - 16) / 2; + // Enable TWI and interrupt + TWCR = (1 << TWIE) | (1 << TWEN); +} + +uint8_t isTWIReady() +{ + if ( (TWIInfo.mode == Ready) | (TWIInfo.mode == RepeatedStartSent) ) + { + return 1; + } + else + { + return 0; + } +} + +uint8_t TWITransmitData(void *const TXdata, uint8_t dataLen, uint8_t repStart) +{ + if (dataLen <= TXMAXBUFLEN) + { + // Wait until ready + while (!isTWIReady()) {_delay_us(1);} + // Set repeated start mode + TWIInfo.repStart = repStart; + // Copy data into the transmit buffer + uint8_t *data = (uint8_t *)TXdata; + for (int i = 0; i < dataLen; i++) + { + TWITransmitBuffer[i] = data[i]; + } + // Copy transmit info to global variables + TXBuffLen = dataLen; + TXBuffIndex = 0; + + // If a repeated start has been sent, then devices are already listening for an address + // and another start does not need to be sent. + if (TWIInfo.mode == RepeatedStartSent) + { + TWIInfo.mode = Initializing; + TWDR = TWITransmitBuffer[TXBuffIndex++]; // Load data to transmit buffer + TWISendTransmit(); // Send the data + } + else // Otherwise, just send the normal start signal to begin transmission. + { + TWIInfo.mode = Initializing; + TWISendStart(); + } + + } + else + { + return 1; // return an error if data length is longer than buffer + } + return 0; +} + +uint8_t TWIReadData(uint8_t TWIaddr, uint8_t bytesToRead, uint8_t repStart) +{ + // Check if number of bytes to read can fit in the RXbuffer + if (bytesToRead < RXMAXBUFLEN) + { + // Reset buffer index and set RXBuffLen to the number of bytes to read + RXBuffIndex = 0; + RXBuffLen = bytesToRead; + // Create the one value array for the address to be transmitted + uint8_t TXdata[1]; + // Shift the address and AND a 1 into the read write bit (set to write mode) + TXdata[0] = (TWIaddr << 1) | 0x01; + // Use the TWITransmitData function to initialize the transfer and address the slave + TWITransmitData(TXdata, 1, repStart); + } + else + { + return 0; + } + return 1; +} + +ISR (TWI_vect) +{ + switch (TWI_STATUS) + { + // ----\/ ---- MASTER TRANSMITTER OR WRITING ADDRESS ----\/ ---- // + case TWI_MT_SLAW_ACK: // SLA+W transmitted and ACK received + // Set mode to Master Transmitter + TWIInfo.mode = MasterTransmitter; + case TWI_START_SENT: // Start condition has been transmitted + case TWI_MT_DATA_ACK: // Data byte has been transmitted, ACK received + if (TXBuffIndex < TXBuffLen) // If there is more data to send + { + TWDR = TWITransmitBuffer[TXBuffIndex++]; // Load data to transmit buffer + TWIInfo.errorCode = TWI_NO_RELEVANT_INFO; + TWISendTransmit(); // Send the data + } + // This transmission is complete however do not release bus yet + else if (TWIInfo.repStart) + { + TWIInfo.errorCode = 0xFF; + TWISendStart(); + } + // All transmissions are complete, exit + else + { + TWIInfo.mode = Ready; + TWIInfo.errorCode = 0xFF; + TWISendStop(); + } + break; + + // ----\/ ---- MASTER RECEIVER ----\/ ---- // + + case TWI_MR_SLAR_ACK: // SLA+R has been transmitted, ACK has been received + // Switch to Master Receiver mode + TWIInfo.mode = MasterReceiver; + // If there is more than one byte to be read, receive data byte and return an ACK + if (RXBuffIndex < RXBuffLen-1) + { + TWIInfo.errorCode = TWI_NO_RELEVANT_INFO; + TWISendACK(); + } + // Otherwise when a data byte (the only data byte) is received, return NACK + else + { + TWIInfo.errorCode = TWI_NO_RELEVANT_INFO; + TWISendNACK(); + } + break; + + case TWI_MR_DATA_ACK: // Data has been received, ACK has been transmitted. + + /// -- HANDLE DATA BYTE --- /// + TWIReceiveBuffer[RXBuffIndex++] = TWDR; + // If there is more than one byte to be read, receive data byte and return an ACK + if (RXBuffIndex < RXBuffLen-1) + { + TWIInfo.errorCode = TWI_NO_RELEVANT_INFO; + TWISendACK(); + } + // Otherwise when a data byte (the only data byte) is received, return NACK + else + { + TWIInfo.errorCode = TWI_NO_RELEVANT_INFO; + TWISendNACK(); + } + break; + + case TWI_MR_DATA_NACK: // Data byte has been received, NACK has been transmitted. End of transmission. + + /// -- HANDLE DATA BYTE --- /// + TWIReceiveBuffer[RXBuffIndex++] = TWDR; + // This transmission is complete however do not release bus yet + if (TWIInfo.repStart) + { + TWIInfo.errorCode = 0xFF; + TWISendStart(); + } + // All transmissions are complete, exit + else + { + TWIInfo.mode = Ready; + TWIInfo.errorCode = 0xFF; + TWISendStop(); + } + break; + + // ----\/ ---- MT and MR common ----\/ ---- // + + case TWI_MR_SLAR_NACK: // SLA+R transmitted, NACK received + case TWI_MT_SLAW_NACK: // SLA+W transmitted, NACK received + case TWI_MT_DATA_NACK: // Data byte has been transmitted, NACK received + case TWI_LOST_ARBIT: // Arbitration has been lost + // Return error and send stop and set mode to ready + if (TWIInfo.repStart) + { + TWIInfo.errorCode = TWI_STATUS; + TWISendStart(); + } + // All transmissions are complete, exit + else + { + TWIInfo.mode = Ready; + TWIInfo.errorCode = TWI_STATUS; + TWISendStop(); + } + break; + case TWI_REP_START_SENT: // Repeated start has been transmitted + // Set the mode but DO NOT clear TWINT as the next data is not yet ready + TWIInfo.mode = RepeatedStartSent; + break; + + // ----\/ ---- SLAVE RECEIVER ----\/ ---- // + + // TODO IMPLEMENT SLAVE RECEIVER FUNCTIONALITY + + // ----\/ ---- SLAVE TRANSMITTER ----\/ ---- // + + // TODO IMPLEMENT SLAVE TRANSMITTER FUNCTIONALITY + + // ----\/ ---- MISCELLANEOUS STATES ----\/ ---- // + case TWI_NO_RELEVANT_INFO: // It is not really possible to get into this ISR on this condition + // Rather, it is there to be manually set between operations + break; + case TWI_ILLEGAL_START_STOP: // Illegal START/STOP, abort and return error + TWIInfo.errorCode = TWI_ILLEGAL_START_STOP; + TWIInfo.mode = Ready; + TWISendStop(); + break; + } + +} diff --git a/drivers/avr/TWIlib.h b/drivers/avr/TWIlib.h new file mode 100644 index 00000000000..23fd1f09aa9 --- /dev/null +++ b/drivers/avr/TWIlib.h @@ -0,0 +1,82 @@ +/* + * TWIlib.h + * + * Created: 6/01/2014 10:38:42 PM + * Author: Chris Herring + * http://www.chrisherring.net/all/tutorial-interrupt-driven-twi-interface-for-avr-part1/ + */ + + +#ifndef TWILIB_H_ +#define TWILIB_H_ +// TWI bit rate (was 100000) +#define TWI_FREQ 400000 +// Get TWI status +#define TWI_STATUS (TWSR & 0xF8) +// Transmit buffer length +#define TXMAXBUFLEN 20 +// Receive buffer length +#define RXMAXBUFLEN 20 +// Global transmit buffer +uint8_t TWITransmitBuffer[TXMAXBUFLEN]; +// Global receive buffer +volatile uint8_t TWIReceiveBuffer[RXMAXBUFLEN]; +// Buffer indexes +volatile int TXBuffIndex; // Index of the transmit buffer. Is volatile, can change at any time. +int RXBuffIndex; // Current index in the receive buffer +// Buffer lengths +int TXBuffLen; // The total length of the transmit buffer +int RXBuffLen; // The total number of bytes to read (should be less than RXMAXBUFFLEN) + +typedef enum { + Ready, + Initializing, + RepeatedStartSent, + MasterTransmitter, + MasterReceiver, + SlaceTransmitter, + SlaveReciever + } TWIMode; + + typedef struct TWIInfoStruct{ + TWIMode mode; + uint8_t errorCode; + uint8_t repStart; + }TWIInfoStruct; +TWIInfoStruct TWIInfo; + + +// TWI Status Codes +#define TWI_START_SENT 0x08 // Start sent +#define TWI_REP_START_SENT 0x10 // Repeated Start sent +// Master Transmitter Mode +#define TWI_MT_SLAW_ACK 0x18 // SLA+W sent and ACK received +#define TWI_MT_SLAW_NACK 0x20 // SLA+W sent and NACK received +#define TWI_MT_DATA_ACK 0x28 // DATA sent and ACK received +#define TWI_MT_DATA_NACK 0x30 // DATA sent and NACK received +// Master Receiver Mode +#define TWI_MR_SLAR_ACK 0x40 // SLA+R sent, ACK received +#define TWI_MR_SLAR_NACK 0x48 // SLA+R sent, NACK received +#define TWI_MR_DATA_ACK 0x50 // Data received, ACK returned +#define TWI_MR_DATA_NACK 0x58 // Data received, NACK returned + +// Miscellaneous States +#define TWI_LOST_ARBIT 0x38 // Arbitration has been lost +#define TWI_NO_RELEVANT_INFO 0xF8 // No relevant information available +#define TWI_ILLEGAL_START_STOP 0x00 // Illegal START or STOP condition has been detected +#define TWI_SUCCESS 0xFF // Successful transfer, this state is impossible from TWSR as bit2 is 0 and read only + + +#define TWISendStart() (TWCR = (1<. + */ + +#include "is31fl3731.h" +#include +#include +#include +#include +#include "TWIlib.h" +#include "progmem.h" + +// This is a 7-bit address, that gets left-shifted and bit 0 +// set to 0 for write, 1 for read (as per I2C protocol) +// The address will vary depending on your wiring: +// 0b1110100 AD <-> GND +// 0b1110111 AD <-> VCC +// 0b1110101 AD <-> SCL +// 0b1110110 AD <-> SDA +#define ISSI_ADDR_DEFAULT 0x74 + +#define ISSI_REG_CONFIG 0x00 +#define ISSI_REG_CONFIG_PICTUREMODE 0x00 +#define ISSI_REG_CONFIG_AUTOPLAYMODE 0x08 +#define ISSI_REG_CONFIG_AUDIOPLAYMODE 0x18 + +#define ISSI_CONF_PICTUREMODE 0x00 +#define ISSI_CONF_AUTOFRAMEMODE 0x04 +#define ISSI_CONF_AUDIOMODE 0x08 + +#define ISSI_REG_PICTUREFRAME 0x01 + +#define ISSI_REG_SHUTDOWN 0x0A +#define ISSI_REG_AUDIOSYNC 0x06 + +#define ISSI_COMMANDREGISTER 0xFD +#define ISSI_BANK_FUNCTIONREG 0x0B // helpfully called 'page nine' + +// Transfer buffer for TWITransmitData() +uint8_t g_twi_transfer_buffer[TXMAXBUFLEN]; + +// These buffers match the IS31FL3731 PWM registers 0x24-0xB3. +// Storing them like this is optimal for I2C transfers to the registers. +// We could optimize this and take out the unused registers from these +// buffers and the transfers in IS31FL3731_write_pwm_buffer() but it's +// probably not worth the extra complexity. +uint8_t g_pwm_buffer[DRIVER_COUNT][144]; +bool g_pwm_buffer_update_required = false; + +uint8_t g_led_control_registers[DRIVER_COUNT][18] = { { 0 }, { 0 } }; +bool g_led_control_registers_update_required = false; + +// This is the bit pattern in the LED control registers +// (for matrix A, add one to register for matrix B) +// +// reg - b7 b6 b5 b4 b3 b2 b1 b0 +// 0x00 - R08,R07,R06,R05,R04,R03,R02,R01 +// 0x02 - G08,G07,G06,G05,G04,G03,G02,R00 +// 0x04 - B08,B07,B06,B05,B04,B03,G01,G00 +// 0x06 - - , - , - , - , - ,B02,B01,B00 +// 0x08 - - , - , - , - , - , - , - , - +// 0x0A - B17,B16,B15, - , - , - , - , - +// 0x0C - G17,G16,B14,B13,B12,B11,B10,B09 +// 0x0E - R17,G15,G14,G13,G12,G11,G10,G09 +// 0x10 - R16,R15,R14,R13,R12,R11,R10,R09 + + +void IS31FL3731_write_register( uint8_t addr, uint8_t reg, uint8_t data ) +{ + g_twi_transfer_buffer[0] = (addr << 1) | 0x00; + g_twi_transfer_buffer[1] = reg; + g_twi_transfer_buffer[2] = data; + + // Set the error code to have no relevant information + TWIInfo.errorCode = TWI_NO_RELEVANT_INFO; + // Continuously attempt to transmit data until a successful transmission occurs + //while ( TWIInfo.errorCode != 0xFF ) + //{ + TWITransmitData( g_twi_transfer_buffer, 3, 0 ); + //} +} + +void IS31FL3731_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer ) +{ + // assumes bank is already selected + + // transmit PWM registers in 9 transfers of 16 bytes + // g_twi_transfer_buffer[] is 20 bytes + + // set the I2C address + g_twi_transfer_buffer[0] = (addr << 1) | 0x00; + + // iterate over the pwm_buffer contents at 16 byte intervals + for ( int i = 0; i < 144; i += 16 ) + { + // set the first register, e.g. 0x24, 0x34, 0x44, etc. + g_twi_transfer_buffer[1] = 0x24 + i; + // copy the data from i to i+15 + // device will auto-increment register for data after the first byte + // thus this sets registers 0x24-0x33, 0x34-0x43, etc. in one transfer + for ( int j = 0; j < 16; j++ ) + { + g_twi_transfer_buffer[2 + j] = pwm_buffer[i + j]; + } + + // Set the error code to have no relevant information + TWIInfo.errorCode = TWI_NO_RELEVANT_INFO; + // Continuously attempt to transmit data until a successful transmission occurs + while ( TWIInfo.errorCode != 0xFF ) + { + TWITransmitData( g_twi_transfer_buffer, 16 + 2, 0 ); + } + } +} + +void IS31FL3731_init( uint8_t addr ) +{ + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, first enable software shutdown, + // then set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + // select "function register" bank + IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG ); + + // enable software shutdown + IS31FL3731_write_register( addr, ISSI_REG_SHUTDOWN, 0x00 ); + // this delay was copied from other drivers, might not be needed + _delay_ms( 10 ); + + // picture mode + IS31FL3731_write_register( addr, ISSI_REG_CONFIG, ISSI_REG_CONFIG_PICTUREMODE ); + // display frame 0 + IS31FL3731_write_register( addr, ISSI_REG_PICTUREFRAME, 0x00 ); + // audio sync off + IS31FL3731_write_register( addr, ISSI_REG_AUDIOSYNC, 0x00 ); + + // select bank 0 + IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, 0 ); + + // turn off all LEDs in the LED control register + for ( int i = 0x00; i <= 0x11; i++ ) + { + IS31FL3731_write_register( addr, i, 0x00 ); + } + + // turn off all LEDs in the blink control register (not really needed) + for ( int i = 0x12; i <= 0x23; i++ ) + { + IS31FL3731_write_register( addr, i, 0x00 ); + } + + // set PWM on all LEDs to 0 + for ( int i = 0x24; i <= 0xB3; i++ ) + { + IS31FL3731_write_register( addr, i, 0x00 ); + } + + // select "function register" bank + IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, ISSI_BANK_FUNCTIONREG ); + + // disable software shutdown + IS31FL3731_write_register( addr, ISSI_REG_SHUTDOWN, 0x01 ); + + // select bank 0 and leave it selected. + // most usage after initialization is just writing PWM buffers in bank 0 + // as there's not much point in double-buffering + IS31FL3731_write_register( addr, ISSI_COMMANDREGISTER, 0 ); +} + +void IS31FL3731_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) +{ + if ( index >= 0 && index < DRIVER_LED_TOTAL ) { + is31_led led = g_is31_leds[index]; + + // Subtract 0x24 to get the second index of g_pwm_buffer + g_pwm_buffer[led.driver][led.r - 0x24] = red; + g_pwm_buffer[led.driver][led.g - 0x24] = green; + g_pwm_buffer[led.driver][led.b - 0x24] = blue; + g_pwm_buffer_update_required = true; + } +} + +void IS31FL3731_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) +{ + for ( int i = 0; i < DRIVER_LED_TOTAL; i++ ) + { + IS31FL3731_set_color( i, red, green, blue ); + } +} + +void IS31FL3731_set_led_control_register( uint8_t index, bool red, bool green, bool blue ) +{ + is31_led led = g_is31_leds[index]; + + uint8_t control_register_r = (led.r - 0x24) / 8; + uint8_t control_register_g = (led.g - 0x24) / 8; + uint8_t control_register_b = (led.b - 0x24) / 8; + uint8_t bit_r = (led.r - 0x24) % 8; + uint8_t bit_g = (led.g - 0x24) % 8; + uint8_t bit_b = (led.b - 0x24) % 8; + + if ( red ) { + g_led_control_registers[led.driver][control_register_r] |= (1 << bit_r); + } else { + g_led_control_registers[led.driver][control_register_r] &= ~(1 << bit_r); + } + if ( green ) { + g_led_control_registers[led.driver][control_register_g] |= (1 << bit_g); + } else { + g_led_control_registers[led.driver][control_register_g] &= ~(1 << bit_g); + } + if ( blue ) { + g_led_control_registers[led.driver][control_register_b] |= (1 << bit_b); + } else { + g_led_control_registers[led.driver][control_register_b] &= ~(1 << bit_b); + } + + g_led_control_registers_update_required = true; + + +} + +void IS31FL3731_update_pwm_buffers( uint8_t addr1, uint8_t addr2 ) +{ + if ( g_pwm_buffer_update_required ) + { + IS31FL3731_write_pwm_buffer( addr1, g_pwm_buffer[0] ); + IS31FL3731_write_pwm_buffer( addr2, g_pwm_buffer[1] ); + } + g_pwm_buffer_update_required = false; +} + +void IS31FL3731_update_led_control_registers( uint8_t addr1, uint8_t addr2 ) +{ + if ( g_led_control_registers_update_required ) + { + for ( int i=0; i<18; i++ ) + { + IS31FL3731_write_register(addr1, i, g_led_control_registers[0][i] ); + IS31FL3731_write_register(addr2, i, g_led_control_registers[1][i] ); + } + } +} + diff --git a/drivers/avr/is31fl3731.h b/drivers/avr/is31fl3731.h new file mode 100644 index 00000000000..3d30fc67b75 --- /dev/null +++ b/drivers/avr/is31fl3731.h @@ -0,0 +1,214 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 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 IS31FL3731_DRIVER_H +#define IS31FL3731_DRIVER_H + +#include +#include + +typedef struct is31_led { + uint8_t driver:2; + uint8_t r; + uint8_t g; + uint8_t b; +} __attribute__((packed)) is31_led; + +extern const is31_led g_is31_leds[DRIVER_LED_TOTAL]; + +void IS31FL3731_init( uint8_t addr ); +void IS31FL3731_write_register( uint8_t addr, uint8_t reg, uint8_t data ); +void IS31FL3731_write_pwm_buffer( uint8_t addr, uint8_t *pwm_buffer ); + +void IS31FL3731_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ); +void IS31FL3731_set_color_all( uint8_t red, uint8_t green, uint8_t blue ); + +void IS31FL3731_set_led_control_register( uint8_t index, bool red, bool green, bool blue ); + +// This should not be called from an interrupt +// (eg. from a timer interrupt). +// Call this while idle (in between matrix scans). +// If the buffer is dirty, it will update the driver with the buffer. +void IS31FL3731_update_pwm_buffers( uint8_t addr1, uint8_t addr2 ); +void IS31FL3731_update_led_control_registers( uint8_t addr1, uint8_t addr2 ); + +#define C1_1 0x24 +#define C1_2 0x25 +#define C1_3 0x26 +#define C1_4 0x27 +#define C1_5 0x28 +#define C1_6 0x29 +#define C1_7 0x2A +#define C1_8 0x2B + +#define C1_9 0x2C +#define C1_10 0x2D +#define C1_11 0x2E +#define C1_12 0x2F +#define C1_13 0x30 +#define C1_14 0x31 +#define C1_15 0x32 +#define C1_16 0x33 + +#define C2_1 0x34 +#define C2_2 0x35 +#define C2_3 0x36 +#define C2_4 0x37 +#define C2_5 0x38 +#define C2_6 0x39 +#define C2_7 0x3A +#define C2_8 0x3B + +#define C2_9 0x3C +#define C2_10 0x3D +#define C2_11 0x3E +#define C2_12 0x3F +#define C2_13 0x40 +#define C2_14 0x41 +#define C2_15 0x42 +#define C2_16 0x43 + +#define C3_1 0x44 +#define C3_2 0x45 +#define C3_3 0x46 +#define C3_4 0x47 +#define C3_5 0x48 +#define C3_6 0x49 +#define C3_7 0x4A +#define C3_8 0x4B + +#define C3_9 0x4C +#define C3_10 0x4D +#define C3_11 0x4E +#define C3_12 0x4F +#define C3_13 0x50 +#define C3_14 0x51 +#define C3_15 0x52 +#define C3_16 0x53 + +#define C4_1 0x54 +#define C4_2 0x55 +#define C4_3 0x56 +#define C4_4 0x57 +#define C4_5 0x58 +#define C4_6 0x59 +#define C4_7 0x5A +#define C4_8 0x5B + +#define C4_9 0x5C +#define C4_10 0x5D +#define C4_11 0x5E +#define C4_12 0x5F +#define C4_13 0x60 +#define C4_14 0x61 +#define C4_15 0x62 +#define C4_16 0x63 + +#define C5_1 0x64 +#define C5_2 0x65 +#define C5_3 0x66 +#define C5_4 0x67 +#define C5_5 0x68 +#define C5_6 0x69 +#define C5_7 0x6A +#define C5_8 0x6B + +#define C5_9 0x6C +#define C5_10 0x6D +#define C5_11 0x6E +#define C5_12 0x6F +#define C5_13 0x70 +#define C5_14 0x71 +#define C5_15 0x72 +#define C5_16 0x73 + +#define C6_1 0x74 +#define C6_2 0x75 +#define C6_3 0x76 +#define C6_4 0x77 +#define C6_5 0x78 +#define C6_6 0x79 +#define C6_7 0x7A +#define C6_8 0x7B + +#define C6_9 0x7C +#define C6_10 0x7D +#define C6_11 0x7E +#define C6_12 0x7F +#define C6_13 0x80 +#define C6_14 0x81 +#define C6_15 0x82 +#define C6_16 0x83 + +#define C7_1 0x84 +#define C7_2 0x85 +#define C7_3 0x86 +#define C7_4 0x87 +#define C7_5 0x88 +#define C7_6 0x89 +#define C7_7 0x8A +#define C7_8 0x8B + +#define C7_9 0x8C +#define C7_10 0x8D +#define C7_11 0x8E +#define C7_12 0x8F +#define C7_13 0x90 +#define C7_14 0x91 +#define C7_15 0x92 +#define C7_16 0x93 + +#define C8_1 0x94 +#define C8_2 0x95 +#define C8_3 0x96 +#define C8_4 0x97 +#define C8_5 0x98 +#define C8_6 0x99 +#define C8_7 0x9A +#define C8_8 0x9B + +#define C8_9 0x9C +#define C8_10 0x9D +#define C8_11 0x9E +#define C8_12 0x9F +#define C8_13 0xA0 +#define C8_14 0xA1 +#define C8_15 0xA2 +#define C8_16 0xA3 + +#define C9_1 0xA4 +#define C9_2 0xA5 +#define C9_3 0xA6 +#define C9_4 0xA7 +#define C9_5 0xA8 +#define C9_6 0xA9 +#define C9_7 0xAA +#define C9_8 0xAB + +#define C9_9 0xAC +#define C9_10 0xAD +#define C9_11 0xAE +#define C9_12 0xAF +#define C9_13 0xB0 +#define C9_14 0xB1 +#define C9_15 0xB2 +#define C9_16 0xB3 + + + +#endif // IS31FL3731_DRIVER_H diff --git a/keyboards/planck/light/config.h b/keyboards/planck/light/config.h index 71c924904d6..17c015ed0fd 100644 --- a/keyboards/planck/light/config.h +++ b/keyboards/planck/light/config.h @@ -24,5 +24,22 @@ #define NO_USB_STARTUP_CHECK +#define PLANCK_MIT_LAYOUT -#endif \ No newline at end of file +// This is a 7-bit address, that gets left-shifted and bit 0 +// set to 0 for write, 1 for read (as per I2C protocol) +// The address will vary depending on your wiring: +// 0b1110100 AD <-> GND +// 0b1110111 AD <-> VCC +// 0b1110101 AD <-> SCL +// 0b1110110 AD <-> SDA +#define DRIVER_ADDR_1 0b1110100 +#define DRIVER_ADDR_2 0b1110110 + +#define DRIVER_COUNT 2 +#define DRIVER_1_LED_TOTAL 25 +#define DRIVER_2_LED_TOTAL 24 +#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL + + +#endif diff --git a/keyboards/planck/light/light.c b/keyboards/planck/light/light.c index 96261616c3c..cef57c5e69f 100644 --- a/keyboards/planck/light/light.c +++ b/keyboards/planck/light/light.c @@ -1,5 +1,4 @@ -/* Copyright 2017 Jason Williams - * Copyright 2017 Jack Humbert +/* Copyright 2017 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 @@ -17,6 +16,127 @@ #include "light.h" +const is31_led g_is31_leds[DRIVER_LED_TOTAL] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, C1_3, C2_3, C3_3}, + {0, C1_4, C2_4, C3_4}, + {0, C1_5, C2_5, C3_5}, + {0, C1_11, C2_11, C3_11}, + {0, C1_12, C2_12, C3_12}, + {0, C1_13, C2_13, C3_13}, + {1, C1_3, C2_3, C3_3}, + {1, C1_4, C2_4, C3_4}, + {1, C1_5, C2_5, C3_5}, + {1, C1_11, C2_11, C3_11}, + {1, C1_12, C2_12, C3_12}, + {1, C1_13, C2_13, C3_13}, + + {0, C1_6, C2_6, C3_6}, + {0, C1_7, C2_7, C3_7}, + {0, C1_8, C2_8, C3_8}, + {0, C1_14, C2_14, C3_14}, + {0, C1_15, C2_15, C3_15}, + {0, C1_16, C2_16, C3_16}, + {1, C1_6, C2_6, C3_6}, + {1, C1_7, C2_7, C3_7}, + {1, C1_8, C2_8, C3_8}, + {1, C1_14, C2_14, C3_14}, + {1, C1_15, C2_15, C3_15}, + {1, C1_16, C2_16, C3_16}, + + {0, C9_1, C8_1, C7_1}, + {0, C9_2, C8_2, C7_2}, + {0, C9_3, C8_3, C7_3}, + {0, C9_9, C8_9, C7_9}, + {0, C9_10, C8_10, C7_10}, + {0, C9_11, C8_11, C7_11}, + {1, C9_1, C8_1, C7_1}, + {1, C9_2, C8_2, C7_2}, + {1, C9_3, C8_3, C7_3}, + {1, C9_9, C8_9, C7_9}, + {1, C9_10, C8_10, C7_10}, + {1, C9_11, C8_11, C7_11}, + + {0, C9_4, C8_4, C7_4}, + {0, C9_5, C8_5, C7_5}, + {0, C9_6, C8_6, C7_6}, + {0, C9_12, C8_12, C7_12}, + {0, C9_13, C8_13, C7_13}, + {0, C9_14, C8_14, C7_14}, + {0, C9_15, C8_15, C6_14}, // middle 2u switch + {1, C9_4, C8_4, C7_4}, + {1, C9_5, C8_5, C7_5}, + {1, C9_6, C8_6, C7_6}, + {1, C9_12, C8_12, C7_12}, + {1, C9_13, C8_13, C7_13}, + {1, C9_14, C8_14, C7_14} +}; + +const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = { + + /*{row | col << 4} + | {x=0..224, y=0..64} + | | modifier + | | | */ + {{0|(0<<4)}, {20.36*0, 21.33*0}, 1}, + {{0|(1<<4)}, {20.36*1, 21.33*0}, 0}, + {{0|(2<<4)}, {20.36*2, 21.33*0}, 0}, + {{0|(3<<4)}, {20.36*3, 21.33*0}, 0}, + {{0|(4<<4)}, {20.36*4, 21.33*0}, 0}, + {{0|(5<<4)}, {20.36*5, 21.33*0}, 0}, + {{0|(6<<4)}, {20.36*6, 21.33*0}, 0}, + {{0|(7<<4)}, {20.36*7, 21.33*0}, 0}, + {{0|(8<<4)}, {20.36*8, 21.33*0}, 0}, + {{0|(9<<4)}, {20.36*9, 21.33*0}, 0}, + {{0|(10<<4)}, {20.36*10,21.33*0}, 0}, + {{0|(11<<4)}, {20.36*11,21.33*0}, 1}, + + {{1|(0<<4)}, {20.36*0, 21.33*1}, 1}, + {{1|(1<<4)}, {20.36*1, 21.33*1}, 0}, + {{1|(2<<4)}, {20.36*2, 21.33*1}, 0}, + {{1|(3<<4)}, {20.36*3, 21.33*1}, 0}, + {{1|(4<<4)}, {20.36*4, 21.33*1}, 0}, + {{1|(5<<4)}, {20.36*5, 21.33*1}, 0}, + {{1|(6<<4)}, {20.36*6, 21.33*1}, 0}, + {{1|(7<<4)}, {20.36*7, 21.33*1}, 0}, + {{1|(8<<4)}, {20.36*8, 21.33*1}, 0}, + {{1|(9<<4)}, {20.36*9, 21.33*1}, 0}, + {{1|(10<<4)}, {20.36*10,21.33*1}, 0}, + {{1|(11<<4)}, {20.36*11,21.33*1}, 1}, + + {{2|(0<<4)}, {20.36*0, 21.33*2}, 1}, + {{2|(1<<4)}, {20.36*1, 21.33*2}, 0}, + {{2|(2<<4)}, {20.36*2, 21.33*2}, 0}, + {{2|(3<<4)}, {20.36*3, 21.33*2}, 0}, + {{2|(4<<4)}, {20.36*4, 21.33*2}, 0}, + {{2|(5<<4)}, {20.36*5, 21.33*2}, 0}, + {{2|(6<<4)}, {20.36*6, 21.33*2}, 0}, + {{2|(7<<4)}, {20.36*7, 21.33*2}, 0}, + {{2|(8<<4)}, {20.36*8, 21.33*2}, 0}, + {{2|(9<<4)}, {20.36*9, 21.33*2}, 0}, + {{2|(10<<4)}, {20.36*10,21.33*2}, 0}, + {{2|(11<<4)}, {20.36*11,21.33*2}, 1}, + + {{3|(0<<4)}, {20.36*0, 21.33*3}, 1}, + {{3|(1<<4)}, {20.36*1, 21.33*3}, 1}, + {{3|(2<<4)}, {20.36*2, 21.33*3}, 1}, + {{3|(3<<4)}, {20.36*3, 21.33*3}, 1}, + {{3|(4<<4)}, {20.36*4, 21.33*3}, 1}, + {{3|(5<<4)}, {20.36*5, 21.33*3}, 0}, + {{3|(5<<4)}, {20.36*5.5,21.33*3}, 0}, + {{3|(6<<4)}, {20.36*6, 21.33*3}, 0}, + {{3|(7<<4)}, {20.36*7, 21.33*3}, 1}, + {{3|(8<<4)}, {20.36*8, 21.33*3}, 1}, + {{3|(9<<4)}, {20.36*9, 21.33*3}, 1}, + {{3|(10<<4)}, {20.36*10,21.33*3}, 1}, + {{3|(11<<4)}, {20.36*11,21.33*3}, 1} +}; + void matrix_init_kb(void) { // Turn status LED on @@ -27,13 +147,22 @@ void matrix_init_kb(void) { } bool process_record_kb(uint16_t keycode, keyrecord_t *record) -{ +{ return process_record_user(keycode, record); } -uint16_t backlight_task_counter = 0; - void matrix_scan_kb(void) { matrix_scan_user(); -} \ No newline at end of file +} + +void suspend_power_down_kb(void) +{ + rgb_matrix_set_suspend_state(true); +} + +void suspend_wakeup_init_kb(void) +{ + rgb_matrix_set_suspend_state(false); +} + diff --git a/keyboards/planck/light/light.h b/keyboards/planck/light/light.h index 111f1986543..a395f30e887 100644 --- a/keyboards/planck/light/light.h +++ b/keyboards/planck/light/light.h @@ -1,5 +1,4 @@ -/* Copyright 2017 Jason Williams - * Copyright 2017 Jack Humbert +/* Copyright 2017 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 @@ -19,5 +18,6 @@ #define LIGHT_H #include "planck.h" +#include "rgb_matrix.h" #endif \ No newline at end of file diff --git a/keyboards/planck/light/rules.mk b/keyboards/planck/light/rules.mk index 3d7006b526c..c10b8fd1da5 100644 --- a/keyboards/planck/light/rules.mk +++ b/keyboards/planck/light/rules.mk @@ -1,7 +1,5 @@ MIDI_ENABLE = yes AUDIO_ENABLE = yes # Audio output on port C6 -MOUSEKEY_ENABLE = no # Mouse keys(+4700) -NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work -BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality +RGB_MATRIX_ENABLE = yes MCU = at90usb1286 \ No newline at end of file diff --git a/keyboards/planck/rules.mk b/keyboards/planck/rules.mk index 511c06d7086..e194dcd5111 100644 --- a/keyboards/planck/rules.mk +++ b/keyboards/planck/rules.mk @@ -48,7 +48,7 @@ ifeq ($(strip $(KEYBOARD)), planck/rev5) BOOTLOADER = qmk-dfu endif ifeq ($(strip $(KEYBOARD)), planck/light) - BOOTLOADER = qmk-dfu + BOOTLOADER = atmel-dfu endif # Interrupt driven control endpoint task(+60) diff --git a/quantum/color.c b/quantum/color.c new file mode 100644 index 00000000000..8ede053e711 --- /dev/null +++ b/quantum/color.c @@ -0,0 +1,87 @@ +/* Copyright 2017 Jason Williams + * + * 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 "color.h" +#include "led_tables.h" +#include "progmem.h" + +RGB hsv_to_rgb( HSV hsv ) +{ + RGB rgb; + uint8_t region, p, q, t; + uint16_t h, s, v, remainder; + + if ( hsv.s == 0 ) + { + rgb.r = hsv.v; + rgb.g = hsv.v; + rgb.b = hsv.v; + return rgb; + } + + h = hsv.h; + s = hsv.s; + v = hsv.v; + + region = h / 43; + remainder = (h - (region * 43)) * 6; + + p = (v * (255 - s)) >> 8; + q = (v * (255 - ((s * remainder) >> 8))) >> 8; + t = (v * (255 - ((s * (255 - remainder)) >> 8))) >> 8; + + switch ( region ) + { + case 0: + rgb.r = v; + rgb.g = t; + rgb.b = p; + break; + case 1: + rgb.r = q; + rgb.g = v; + rgb.b = p; + break; + case 2: + rgb.r = p; + rgb.g = v; + rgb.b = t; + break; + case 3: + rgb.r = p; + rgb.g = q; + rgb.b = v; + break; + case 4: + rgb.r = t; + rgb.g = p; + rgb.b = v; + break; + default: + rgb.r = v; + rgb.g = p; + rgb.b = q; + break; + } + + rgb.r = pgm_read_byte( &CIE1931_CURVE[rgb.r] ); + rgb.g = pgm_read_byte( &CIE1931_CURVE[rgb.g] ); + rgb.b = pgm_read_byte( &CIE1931_CURVE[rgb.b] ); + + return rgb; +} + diff --git a/quantum/color.h b/quantum/color.h new file mode 100644 index 00000000000..9d51d45adb2 --- /dev/null +++ b/quantum/color.h @@ -0,0 +1,55 @@ +/* Copyright 2017 Jason Williams + * + * 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 COLOR_H +#define COLOR_H + +#include +#include + + +#if defined(__GNUC__) +#define PACKED __attribute__ ((__packed__)) +#else +#define PACKED +#endif + +#if defined(_MSC_VER) +#pragma pack( push, 1 ) +#endif + +typedef struct PACKED +{ + uint8_t r; + uint8_t g; + uint8_t b; +} RGB; + +typedef struct PACKED +{ + uint8_t h; + uint8_t s; + uint8_t v; +} HSV; + +#if defined(_MSC_VER) +#pragma pack( pop ) +#endif + +RGB hsv_to_rgb( HSV hsv ); + +#endif // COLOR_H diff --git a/quantum/quantum.c b/quantum/quantum.c index 2662e5ef1c5..e1bc8b242eb 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -230,6 +230,9 @@ bool process_record_quantum(keyrecord_t *record) { process_clicky(keycode, record) && #endif //AUDIO_CLICKY process_record_kb(keycode, record) && + #if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_KEYPRESSES) + process_rgb_matrix(keycode, record) && + #endif #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) process_midi(keycode, record) && #endif @@ -307,7 +310,7 @@ bool process_record_quantum(keyrecord_t *record) { } return false; #endif - #ifdef RGBLIGHT_ENABLE + #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) case RGB_TOG: if (record->event.pressed) { rgblight_toggle(); @@ -835,9 +838,18 @@ void matrix_init_quantum() { #ifdef AUDIO_ENABLE audio_init(); #endif + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_init_drivers(); + #endif matrix_init_kb(); } +uint8_t rgb_matrix_task_counter = 0; + +#ifndef RGB_MATRIX_SKIP_FRAMES + #define RGB_MATRIX_SKIP_FRAMES 1 +#endif + void matrix_scan_quantum() { #if defined(AUDIO_ENABLE) matrix_scan_music(); @@ -855,9 +867,16 @@ void matrix_scan_quantum() { backlight_task(); #endif + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_task(); + if (rgb_matrix_task_counter == 0) { + rgb_matrix_update_pwm_buffers(); + } + rgb_matrix_task_counter = ((rgb_matrix_task_counter + 1) % (RGB_MATRIX_SKIP_FRAMES + 1)); + #endif + matrix_scan_kb(); } - #if defined(BACKLIGHT_ENABLE) && defined(BACKLIGHT_PIN) static const uint8_t backlight_pin = BACKLIGHT_PIN; diff --git a/quantum/quantum.h b/quantum/quantum.h index 195f578de9d..2958a0abd09 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -27,9 +27,15 @@ #ifdef BACKLIGHT_ENABLE #include "backlight.h" #endif +#if !defined(RGBLIGHT_ENABLE) && !defined(RGB_MATRIX_ENABLE) + #include "rgb.h" +#endif #ifdef RGBLIGHT_ENABLE #include "rgblight.h" #endif +#ifdef RGB_MATRIX_ENABLE + #include "rgb_matrix.h" +#endif #include "action_layer.h" #include "eeconfig.h" #include diff --git a/quantum/rgb.h b/quantum/rgb.h new file mode 100644 index 00000000000..fbdda293f47 --- /dev/null +++ b/quantum/rgb.h @@ -0,0 +1,47 @@ +/* Copyright 2017 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 RGB_H +#define RGB_H + +__attribute__((weak)) +void rgblight_toggle(void) {}; + +__attribute__((weak)) +void rgblight_step(void) {}; + +__attribute__((weak)) +void rgblight_step_reverse(void) {}; + +__attribute__((weak)) +void rgblight_increase_hue(void) {}; + +__attribute__((weak)) +void rgblight_decrease_hue(void) {}; + +__attribute__((weak)) +void rgblight_increase_sat(void) {}; + +__attribute__((weak)) +void rgblight_decrease_sat(void) {}; + +__attribute__((weak)) +void rgblight_increase_val(void) {}; + +__attribute__((weak)) +void rgblight_decrease_val(void) {}; + +#endif \ No newline at end of file diff --git a/quantum/rgb_matrix.c b/quantum/rgb_matrix.c new file mode 100644 index 00000000000..6cb0478f71e --- /dev/null +++ b/quantum/rgb_matrix.c @@ -0,0 +1,873 @@ +/* Copyright 2017 Jason Williams + * Copyright 2017 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 . + */ + + +#include "rgb_matrix.h" +#include +#include "TWIlib.h" +#include +#include +#include "progmem.h" +#include "config.h" +#include "eeprom.h" +#include "lufa.h" +#include + +rgb_config_t rgb_matrix_config; + +#ifndef RGB_DISABLE_AFTER_TIMEOUT + #define RGB_DISABLE_AFTER_TIMEOUT 0 +#endif + +#ifndef RGB_DISABLE_WHEN_USB_SUSPENDED + #define RGB_DISABLE_WHEN_USB_SUSPENDED false +#endif + +#ifndef EECONFIG_RGB_MATRIX + #define EECONFIG_RGB_MATRIX EECONFIG_RGBLIGHT +#endif + +bool g_suspend_state = false; + +// Global tick at 20 Hz +uint32_t g_tick = 0; + +// Ticks since this key was last hit. +uint8_t g_key_hit[DRIVER_LED_TOTAL]; + +// Ticks since any key was last hit. +uint32_t g_any_key_hit = 0; + +#ifndef PI +#define PI 3.14159265 +#endif + +uint32_t eeconfig_read_rgb_matrix(void) { + return eeprom_read_dword(EECONFIG_RGB_MATRIX); +} +void eeconfig_update_rgb_matrix(uint32_t val) { + eeprom_update_dword(EECONFIG_RGB_MATRIX, val); +} +void eeconfig_update_rgb_matrix_default(void) { + dprintf("eeconfig_update_rgb_matrix_default\n"); + rgb_matrix_config.enable = 1; + rgb_matrix_config.mode = RGB_MATRIX_CYCLE_LEFT_RIGHT; + rgb_matrix_config.hue = 0; + rgb_matrix_config.sat = 255; + rgb_matrix_config.val = 255; + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} +void eeconfig_debug_rgb_matrix(void) { + dprintf("rgb_matrix_config eprom\n"); + dprintf("rgb_matrix_config.enable = %d\n", rgb_matrix_config.enable); + dprintf("rgb_matrix_config.mode = %d\n", rgb_matrix_config.mode); + dprintf("rgb_matrix_config.hue = %d\n", rgb_matrix_config.hue); + dprintf("rgb_matrix_config.sat = %d\n", rgb_matrix_config.sat); + dprintf("rgb_matrix_config.val = %d\n", rgb_matrix_config.val); +} + +// Last led hit +#define LED_HITS_TO_REMEMBER 8 +uint8_t g_last_led_hit[LED_HITS_TO_REMEMBER] = {255}; +uint8_t g_last_led_count = 0; + +void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led_i, uint8_t *led_count) { + rgb_led led; + *led_count = 0; + + for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { + // map_index_to_led(i, &led); + led = g_rgb_leds[i]; + if (row == led.matrix_co.row && column == led.matrix_co.col) { + led_i[*led_count] = i; + (*led_count)++; + } + } +} + + +void rgb_matrix_update_pwm_buffers(void) { + IS31FL3731_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); + IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); +} + +void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) { + IS31FL3731_set_color( index, red, green, blue ); +} + +void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) { + IS31FL3731_set_color_all( red, green, blue ); +} + + +bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record) { + if ( record->event.pressed ) { + uint8_t led[8], led_count; + map_row_column_to_led(record->event.key.row, record->event.key.col, led, &led_count); + if (led_count > 0) { + for (uint8_t i = LED_HITS_TO_REMEMBER; i > 1; i--) { + g_last_led_hit[i - 1] = g_last_led_hit[i - 2]; + } + g_last_led_hit[0] = led[0]; + g_last_led_count = MIN(LED_HITS_TO_REMEMBER, g_last_led_count + 1); + } + for(uint8_t i = 0; i < led_count; i++) + g_key_hit[led[i]] = 0; + g_any_key_hit = 0; + } else { + #ifdef RGB_MATRIX_KEYRELEASES + uint8_t led[8], led_count; + map_row_column_to_led(record->event.key.row, record->event.key.col, led, &led_count); + for(uint8_t i = 0; i < led_count; i++) + g_key_hit[led[i]] = 255; + + g_any_key_hit = 255; + #endif + } + return true; +} + +void rgb_matrix_set_suspend_state(bool state) { + g_suspend_state = state; +} + +void rgb_matrix_test(void) { + // Mask out bits 4 and 5 + // This 2-bit value will stay the same for 16 ticks. + switch ( (g_tick & 0x30) >> 4 ) + { + case 0: + { + rgb_matrix_set_color_all( 20, 0, 0 ); + break; + } + case 1: + { + rgb_matrix_set_color_all( 0, 20, 0 ); + break; + } + case 2: + { + rgb_matrix_set_color_all( 0, 0, 20 ); + break; + } + case 3: + { + rgb_matrix_set_color_all( 20, 20, 20 ); + break; + } + } +} + +// This tests the LEDs +// Note that it will change the LED control registers +// in the LED drivers, and leave them in an invalid +// state for other backlight effects. +// ONLY USE THIS FOR TESTING LEDS! +void rgb_matrix_single_LED_test(void) { + static uint8_t color = 0; // 0,1,2 for R,G,B + static uint8_t row = 0; + static uint8_t column = 0; + + static uint8_t tick = 0; + tick++; + + if ( tick > 2 ) + { + tick = 0; + column++; + } + if ( column > MATRIX_COLS ) + { + column = 0; + row++; + } + if ( row > MATRIX_ROWS ) + { + row = 0; + color++; + } + if ( color > 2 ) + { + color = 0; + } + + uint8_t led[8], led_count; + map_row_column_to_led(row,column,led,&led_count); + for(uint8_t i = 0; i < led_count; i++) { + rgb_matrix_set_color_all( 40, 40, 40 ); + rgb_matrix_test_led( led[i], color==0, color==1, color==2 ); + } +} + +// All LEDs off +void rgb_matrix_all_off(void) { + rgb_matrix_set_color_all( 0, 0, 0 ); +} + +// Solid color +void rgb_matrix_solid_color(void) { + HSV hsv = { .h = rgb_matrix_config.hue, .s = rgb_matrix_config.sat, .v = rgb_matrix_config.val }; + RGB rgb = hsv_to_rgb( hsv ); + rgb_matrix_set_color_all( rgb.r, rgb.g, rgb.b ); +} + +void rgb_matrix_solid_reactive(void) { + // Relies on hue being 8-bit and wrapping + for ( int i=0; i 127 ) + { + deltaH -= 256; + } + else if ( deltaH < -127 ) + { + deltaH += 256; + } + // Divide delta by 4, this gives the delta per row + deltaH /= 4; + + int16_t s1 = rgb_matrix_config.sat; + int16_t s2 = rgb_matrix_config.hue; + int16_t deltaS = ( s2 - s1 ) / 4; + + HSV hsv = { .h = 0, .s = 255, .v = rgb_matrix_config.val }; + RGB rgb; + Point point; + for ( int i=0; i>4); + // Relies on hue being 8-bit and wrapping + hsv.h = rgb_matrix_config.hue + ( deltaH * y ); + hsv.s = rgb_matrix_config.sat + ( deltaS * y ); + rgb = hsv_to_rgb( hsv ); + rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b ); + } +} + +void rgb_matrix_raindrops(bool initialize) { + int16_t h1 = rgb_matrix_config.hue; + int16_t h2 = (rgb_matrix_config.hue + 180) % 360; + int16_t deltaH = h2 - h1; + deltaH /= 4; + + // Take the shortest path between hues + if ( deltaH > 127 ) + { + deltaH -= 256; + } + else if ( deltaH < -127 ) + { + deltaH += 256; + } + + int16_t s1 = rgb_matrix_config.sat; + int16_t s2 = rgb_matrix_config.sat; + int16_t deltaS = ( s2 - s1 ) / 4; + + HSV hsv; + RGB rgb; + + // Change one LED every tick + uint8_t led_to_change = ( g_tick & 0x000 ) == 0 ? rand() % DRIVER_LED_TOTAL : 255; + + for ( int i=0; i 0 && g_any_key_hit > RGB_DISABLE_AFTER_TIMEOUT * 60 * 20)); + uint8_t effect = suspend_backlight ? 0 : rgb_matrix_config.mode; + + // Keep track of the effect used last time, + // detect change in effect, so each effect can + // have an optional initialization. + static uint8_t effect_last = 255; + bool initialize = effect != effect_last; + effect_last = effect; + + // this gets ticked at 20 Hz. + // each effect can opt to do calculations + // and/or request PWM buffer updates. + switch ( effect ) { + case RGB_MATRIX_SOLID_COLOR: + rgb_matrix_solid_color(); + break; + case RGB_MATRIX_SOLID_REACTIVE: + rgb_matrix_solid_reactive(); + break; + case RGB_MATRIX_ALPHAS_MODS: + rgb_matrix_alphas_mods(); + break; + case RGB_MATRIX_DUAL_BEACON: + rgb_matrix_dual_beacon(); + break; + case RGB_MATRIX_GRADIENT_UP_DOWN: + rgb_matrix_gradient_up_down(); + break; + case RGB_MATRIX_RAINDROPS: + rgb_matrix_raindrops( initialize ); + break; + case RGB_MATRIX_CYCLE_ALL: + rgb_matrix_cycle_all(); + break; + case RGB_MATRIX_CYCLE_LEFT_RIGHT: + rgb_matrix_cycle_left_right(); + break; + case RGB_MATRIX_CYCLE_UP_DOWN: + rgb_matrix_cycle_up_down(); + break; + case RGB_MATRIX_RAINBOW_BEACON: + rgb_matrix_rainbow_beacon(); + break; + case RGB_MATRIX_RAINBOW_PINWHEELS: + rgb_matrix_rainbow_pinwheels(); + break; + case RGB_MATRIX_RAINBOW_MOVING_CHEVRON: + rgb_matrix_rainbow_moving_chevron(); + break; + case RGB_MATRIX_JELLYBEAN_RAINDROPS: + rgb_matrix_jellybean_raindrops( initialize ); + break; + #ifdef RGB_MATRIX_KEYPRESSES + case RGB_MATRIX_SPLASH: + rgb_matrix_splash(); + break; + case RGB_MATRIX_MULTISPLASH: + rgb_matrix_multisplash(); + break; + case RGB_MATRIX_SOLID_SPLASH: + rgb_matrix_solid_splash(); + break; + case RGB_MATRIX_SOLID_MULTISPLASH: + rgb_matrix_solid_multisplash(); + break; + #endif + default: + rgb_matrix_custom(); + break; + } + + if ( ! suspend_backlight ) { + rgb_matrix_indicators(); + } + +} + +void rgb_matrix_indicators(void) { + rgb_matrix_indicators_kb(); + rgb_matrix_indicators_user(); +} + +__attribute__((weak)) +void rgb_matrix_indicators_kb(void) {} + +__attribute__((weak)) +void rgb_matrix_indicators_user(void) {} + + +// void rgb_matrix_set_indicator_index( uint8_t *index, uint8_t row, uint8_t column ) +// { +// if ( row >= MATRIX_ROWS ) +// { +// // Special value, 255=none, 254=all +// *index = row; +// } +// else +// { +// // This needs updated to something like +// // uint8_t led[8], led_count; +// // map_row_column_to_led(row,column,led,&led_count); +// // for(uint8_t i = 0; i < led_count; i++) +// map_row_column_to_led( row, column, index ); +// } +// } + +void rgb_matrix_init_drivers(void) { + //sei(); + + // Initialize TWI + TWIInit(); + IS31FL3731_init( DRIVER_ADDR_1 ); + IS31FL3731_init( DRIVER_ADDR_2 ); + + for ( int index = 0; index < DRIVER_LED_TOTAL; index++ ) { + bool enabled = true; + // This only caches it for later + IS31FL3731_set_led_control_register( index, enabled, enabled, enabled ); + } + // This actually updates the LED drivers + IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 ); + + // TODO: put the 1 second startup delay here? + + // clear the key hits + for ( int led=0; ledh = eeprom_read_byte(address); +// hsv->s = eeprom_read_byte(address+1); +// hsv->v = eeprom_read_byte(address+2); +// } + +// void backlight_set_key_color( uint8_t row, uint8_t column, HSV hsv ) +// { +// uint8_t led[8], led_count; +// map_row_column_to_led(row,column,led,&led_count); +// for(uint8_t i = 0; i < led_count; i++) { +// if ( led[i] < DRIVER_LED_TOTAL ) +// { +// void *address = backlight_get_custom_key_color_eeprom_address(led[i]); +// eeprom_update_byte(address, hsv.h); +// eeprom_update_byte(address+1, hsv.s); +// eeprom_update_byte(address+2, hsv.v); +// } +// } +// } + +void rgb_matrix_test_led( uint8_t index, bool red, bool green, bool blue ) { + for ( int i=0; i= RGB_MATRIX_EFFECT_MAX) + rgb_matrix_config.mode = 1; + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} + +void rgblight_step_reverse(void) { + rgb_matrix_config.mode--; + if (rgb_matrix_config.mode <= 1) + rgb_matrix_config.mode = (RGB_MATRIX_EFFECT_MAX - 1); + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} + +void rgblight_increase_hue(void) { + rgb_matrix_config.hue = increment( rgb_matrix_config.hue, 8, 0, 255 ); + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} + +void rgblight_decrease_hue(void) { + rgb_matrix_config.hue = decrement( rgb_matrix_config.hue, 8, 0, 255 ); + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} + +void rgblight_increase_sat(void) { + rgb_matrix_config.sat = increment( rgb_matrix_config.sat, 8, 0, 255 ); + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} + +void rgblight_decrease_sat(void) { + rgb_matrix_config.sat = decrement( rgb_matrix_config.sat, 8, 0, 255 ); + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} + +void rgblight_increase_val(void) { + rgb_matrix_config.val = increment( rgb_matrix_config.val, 8, 0, 255 ); + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} + +void rgblight_decrease_val(void) { + rgb_matrix_config.val = decrement( rgb_matrix_config.val, 8, 0, 255 ); + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} + +void rgblight_mode(uint8_t mode) { + rgb_matrix_config.mode = mode; + eeconfig_update_rgb_matrix(rgb_matrix_config.raw); +} + +uint32_t rgblight_get_mode(void) { + return rgb_matrix_config.mode; +} diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h new file mode 100644 index 00000000000..ef93c6d5cb8 --- /dev/null +++ b/quantum/rgb_matrix.h @@ -0,0 +1,135 @@ +/* Copyright 2017 Jason Williams + * Copyright 2017 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 RGB_MATRIX_H +#define RGB_MATRIX_H + +#include +#include +#include "color.h" +#include "is31fl3731.h" +#include "quantum.h" + +typedef struct Point { + uint8_t x; + uint8_t y; +} __attribute__((packed)) Point; + +typedef struct rgb_led { + union { + uint8_t raw; + struct { + uint8_t row:4; // 16 max + uint8_t col:4; // 16 max + }; + } matrix_co; + Point point; + uint8_t modifier:1; +} __attribute__((packed)) rgb_led; + + +extern const rgb_led g_rgb_leds[DRIVER_LED_TOTAL]; + +typedef struct +{ + HSV color; + uint8_t index; +} rgb_indicator; + +typedef union { + uint32_t raw; + struct { + bool enable :1; + uint8_t mode :6; + uint16_t hue :9; + uint8_t sat :8; + uint8_t val :8; + }; +} rgb_config_t; + +enum rgb_matrix_effects { + RGB_MATRIX_SOLID_COLOR = 1, + RGB_MATRIX_SOLID_REACTIVE, + RGB_MATRIX_ALPHAS_MODS, + RGB_MATRIX_DUAL_BEACON, + RGB_MATRIX_GRADIENT_UP_DOWN, + RGB_MATRIX_RAINDROPS, + RGB_MATRIX_CYCLE_ALL, + RGB_MATRIX_CYCLE_LEFT_RIGHT, + RGB_MATRIX_CYCLE_UP_DOWN, + RGB_MATRIX_RAINBOW_BEACON, + RGB_MATRIX_RAINBOW_PINWHEELS, + RGB_MATRIX_RAINBOW_MOVING_CHEVRON, + RGB_MATRIX_JELLYBEAN_RAINDROPS, +#ifdef RGB_MATRIX_KEYPRESSES + RGB_MATRIX_SPLASH, + RGB_MATRIX_MULTISPLASH, + RGB_MATRIX_SOLID_SPLASH, + RGB_MATRIX_SOLID_MULTISPLASH, +#endif + RGB_MATRIX_EFFECT_MAX +}; + +void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ); + +// This runs after another backlight effect and replaces +// colors already set +void rgb_matrix_indicators(void); +void rgb_matrix_indicators_kb(void); +void rgb_matrix_indicators_user(void); + +void rgb_matrix_single_LED_test(void); + +void rgb_matrix_init_drivers(void); + +void rgb_matrix_set_suspend_state(bool state); +void rgb_matrix_set_indicator_state(uint8_t state); + + +void rgb_matrix_task(void); + +// This should not be called from an interrupt +// (eg. from a timer interrupt). +// Call this while idle (in between matrix scans). +// If the buffer is dirty, it will update the driver with the buffer. +void rgb_matrix_update_pwm_buffers(void); + +bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record); + +void rgb_matrix_increase(void); +void rgb_matrix_decrease(void); + +// void *backlight_get_key_color_eeprom_address(uint8_t led); +// void backlight_get_key_color( uint8_t led, HSV *hsv ); +// void backlight_set_key_color( uint8_t row, uint8_t column, HSV hsv ); + +void rgb_matrix_test_led( uint8_t index, bool red, bool green, bool blue ); +uint32_t rgb_matrix_get_tick(void); + +void rgblight_toggle(void); +void rgblight_step(void); +void rgblight_step_reverse(void); +void rgblight_increase_hue(void); +void rgblight_decrease_hue(void); +void rgblight_increase_sat(void); +void rgblight_decrease_sat(void); +void rgblight_increase_val(void); +void rgblight_decrease_val(void); +void rgblight_mode(uint8_t mode); +uint32_t rgblight_get_mode(void); + +#endif From d678724ca8978b4d0ad981d11be4171e6315caca Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Fri, 4 May 2018 11:06:04 -0700 Subject: [PATCH 132/152] Fix Atom47 Keyboard --- .../{rev2 => }/keymaps/LEdiodes/keymap.c | 0 .../{rev2 => }/keymaps/LEdiodes/rules.mk | 0 keyboards/atom47/{ => rev1}/config.h | 6 +- keyboards/atom47/{ => rev1}/info.json | 0 keyboards/atom47/{atom47.c => rev1/rev1.c} | 2 +- keyboards/atom47/{atom47.h => rev1/rev1.h} | 8 +- keyboards/atom47/rev1/rules.mk | 2 + keyboards/atom47/rev2/atom47.c | 31 -------- keyboards/atom47/rev2/atom47.h | 25 ------- keyboards/atom47/rev2/config.h | 6 +- .../atom47/rev2/keymaps/LEdiodes/config.h | 74 ------------------- .../atom47/rev2/keymaps/default/keymap.c | 39 ---------- .../atom47/rev2/keymaps/default/readme.md | 1 - .../{keymaps/LEdiodes/atom47.c => rev2.c} | 2 +- .../{keymaps/LEdiodes/atom47.h => rev2.h} | 2 +- keyboards/atom47/rev2/rules.mk | 62 ---------------- keyboards/atom47/rules.mk | 9 ++- 17 files changed, 19 insertions(+), 250 deletions(-) rename keyboards/atom47/{rev2 => }/keymaps/LEdiodes/keymap.c (100%) rename keyboards/atom47/{rev2 => }/keymaps/LEdiodes/rules.mk (100%) rename keyboards/atom47/{ => rev1}/config.h (94%) rename keyboards/atom47/{ => rev1}/info.json (100%) rename keyboards/atom47/{atom47.c => rev1/rev1.c} (95%) rename keyboards/atom47/{atom47.h => rev1/rev1.h} (84%) create mode 100644 keyboards/atom47/rev1/rules.mk delete mode 100644 keyboards/atom47/rev2/atom47.c delete mode 100644 keyboards/atom47/rev2/atom47.h delete mode 100644 keyboards/atom47/rev2/keymaps/LEdiodes/config.h delete mode 100644 keyboards/atom47/rev2/keymaps/default/keymap.c delete mode 100644 keyboards/atom47/rev2/keymaps/default/readme.md rename keyboards/atom47/rev2/{keymaps/LEdiodes/atom47.c => rev2.c} (96%) rename keyboards/atom47/rev2/{keymaps/LEdiodes/atom47.h => rev2.h} (96%) diff --git a/keyboards/atom47/rev2/keymaps/LEdiodes/keymap.c b/keyboards/atom47/keymaps/LEdiodes/keymap.c similarity index 100% rename from keyboards/atom47/rev2/keymaps/LEdiodes/keymap.c rename to keyboards/atom47/keymaps/LEdiodes/keymap.c diff --git a/keyboards/atom47/rev2/keymaps/LEdiodes/rules.mk b/keyboards/atom47/keymaps/LEdiodes/rules.mk similarity index 100% rename from keyboards/atom47/rev2/keymaps/LEdiodes/rules.mk rename to keyboards/atom47/keymaps/LEdiodes/rules.mk diff --git a/keyboards/atom47/config.h b/keyboards/atom47/rev1/config.h similarity index 94% rename from keyboards/atom47/config.h rename to keyboards/atom47/rev1/config.h index 5743a9eb53c..d21d8ce34d9 100644 --- a/keyboards/atom47/config.h +++ b/keyboards/atom47/rev1/config.h @@ -15,8 +15,8 @@ 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 +#ifndef REV1_CONFIG_H +#define REV1_CONFIG_H #include "config_common.h" @@ -26,7 +26,7 @@ along with this program. If not, see . #define DEVICE_VER 0x0003 #define MANUFACTURER Vortex #define PRODUCT Core -#define DESCRIPTION Atom47 PCB for the Vortex Core +#define DESCRIPTION Atom47 PCB for the Vortex Core Rev.1 /* key matrix size */ #define MATRIX_ROWS 4 diff --git a/keyboards/atom47/info.json b/keyboards/atom47/rev1/info.json similarity index 100% rename from keyboards/atom47/info.json rename to keyboards/atom47/rev1/info.json diff --git a/keyboards/atom47/atom47.c b/keyboards/atom47/rev1/rev1.c similarity index 95% rename from keyboards/atom47/atom47.c rename to keyboards/atom47/rev1/rev1.c index fac22f77868..816b43b9ab9 100644 --- a/keyboards/atom47/atom47.c +++ b/keyboards/atom47/rev1/rev1.c @@ -1,4 +1,4 @@ -#include "atom47.h" +#include "rev1.h" #include "led.h" void matrix_init_kb(void) { diff --git a/keyboards/atom47/atom47.h b/keyboards/atom47/rev1/rev1.h similarity index 84% rename from keyboards/atom47/atom47.h rename to keyboards/atom47/rev1/rev1.h index eddc5c8f87a..f8329a7842a 100644 --- a/keyboards/atom47/atom47.h +++ b/keyboards/atom47/rev1/rev1.h @@ -1,12 +1,12 @@ -#ifndef ATOM47_H -#define ATOM47_H +#ifndef ATOM47_REV1_H +#define ATOM47_REV1_H #include "quantum.h" // readability #define XXX KC_NO -#define KEYMAP_ANSI( \ +#define LAYOUT_ansi( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1c, \ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \ @@ -19,7 +19,5 @@ {k30, k31, k32, k33, XXX, k35, XXX, k37, XXX, k39, k3a, k3b, k3c} \ } -void matrix_init_user(void); -void matrix_scan_user(void); #endif diff --git a/keyboards/atom47/rev1/rules.mk b/keyboards/atom47/rev1/rules.mk new file mode 100644 index 00000000000..13e553b5628 --- /dev/null +++ b/keyboards/atom47/rev1/rules.mk @@ -0,0 +1,2 @@ +NKRO_ENABLE = no # 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) diff --git a/keyboards/atom47/rev2/atom47.c b/keyboards/atom47/rev2/atom47.c deleted file mode 100644 index 7b839e79675..00000000000 --- a/keyboards/atom47/rev2/atom47.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "atom47.h" -#include "led.h" - -void matrix_init_kb(void) { - // put your keyboard start-up code here - // runs once when the firmware starts up - matrix_init_user(); - led_init_ports(); -}; - -void matrix_scan_kb(void) { - // put your looping keyboard code here - // runs every cycle (a lot) - matrix_scan_user(); -}; - -void led_init_ports(void) { - // * Set our LED pins as output - DDRB &= ~(1<<5); -} - -void led_set_kb(uint8_t usb_led) { - if (usb_led & (1<. */ -#ifndef CONFIG_H -#define CONFIG_H +#ifndef REV2_CONFIG_H +#define REV2_CONFIG_H #include "config_common.h" @@ -26,7 +26,7 @@ along with this program. If not, see . #define DEVICE_VER 0x0003 #define MANUFACTURER Vortex #define PRODUCT Core -#define DESCRIPTION Atom47 PCB for the Vortex Core +#define DESCRIPTION Atom47 PCB for the Vortex Core Rev.2 /* key matrix size */ #define MATRIX_ROWS 4 diff --git a/keyboards/atom47/rev2/keymaps/LEdiodes/config.h b/keyboards/atom47/rev2/keymaps/LEdiodes/config.h deleted file mode 100644 index e054f277599..00000000000 --- a/keyboards/atom47/rev2/keymaps/LEdiodes/config.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -Copyright 2012 Maarten Dekkers . -*/ - -#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 Vortex -#define PRODUCT Core -#define DESCRIPTION Atom47 PCB for the Vortex Core - -/* key matrix size */ -#define MATRIX_ROWS 4 -#define MATRIX_COLS 13 - -// ROWS: Top to bottom, COLS: Left to right - -#define MATRIX_ROW_PINS {B1,B2,B3,B7} -#define MATRIX_COL_PINS {D7,D5,F0,F1,F4,F6,F7,D4,C7,C6,D6,B5,B4} -#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 4 - -#define RGB_DI_PIN D0 // The pin the LED strip is connected to -#define RGBLED_NUM 1 // Number of LEDs in your strip - -#define QMK_ESC_OUTPUT D7 // usually COL -#define QMK_ESC_INPUT B1 // usually ROW -#define QMK_LED B6 - -#endif - diff --git a/keyboards/atom47/rev2/keymaps/default/keymap.c b/keyboards/atom47/rev2/keymaps/default/keymap.c deleted file mode 100644 index 5f74416ce06..00000000000 --- a/keyboards/atom47/rev2/keymaps/default/keymap.c +++ /dev/null @@ -1,39 +0,0 @@ -#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. -// 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 _MA 0 //Main layer -#define _FN 1 //Fn -#define _FN1 2 //Fn1 -#define _PN 3 //Pn - -#define _______ KC_TRNS - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[_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] = 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] = 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] = LAYOUT_ansi( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ - _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET), -}; diff --git a/keyboards/atom47/rev2/keymaps/default/readme.md b/keyboards/atom47/rev2/keymaps/default/readme.md deleted file mode 100644 index ab86b4f128c..00000000000 --- a/keyboards/atom47/rev2/keymaps/default/readme.md +++ /dev/null @@ -1 +0,0 @@ -This is the default keymap as found on the Vortex Core, with some added buttons for backlight control. diff --git a/keyboards/atom47/rev2/keymaps/LEdiodes/atom47.c b/keyboards/atom47/rev2/rev2.c similarity index 96% rename from keyboards/atom47/rev2/keymaps/LEdiodes/atom47.c rename to keyboards/atom47/rev2/rev2.c index 7b839e79675..31a8561f0c5 100644 --- a/keyboards/atom47/rev2/keymaps/LEdiodes/atom47.c +++ b/keyboards/atom47/rev2/rev2.c @@ -1,4 +1,4 @@ -#include "atom47.h" +#include "rev2.h" #include "led.h" void matrix_init_kb(void) { diff --git a/keyboards/atom47/rev2/keymaps/LEdiodes/atom47.h b/keyboards/atom47/rev2/rev2.h similarity index 96% rename from keyboards/atom47/rev2/keymaps/LEdiodes/atom47.h rename to keyboards/atom47/rev2/rev2.h index 2c19a20cc5d..f0134511da6 100644 --- a/keyboards/atom47/rev2/keymaps/LEdiodes/atom47.h +++ b/keyboards/atom47/rev2/rev2.h @@ -6,7 +6,7 @@ // readability #define XXX KC_NO -#define KEYMAP_ANSI( \ +#define LAYOUT_ansi( \ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1c, \ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2c, \ diff --git a/keyboards/atom47/rev2/rules.mk b/keyboards/atom47/rev2/rules.mk index d446d3a6995..a3a258ed820 100644 --- a/keyboards/atom47/rev2/rules.mk +++ b/keyboards/atom47/rev2/rules.mk @@ -1,65 +1,3 @@ -# MCU name -#MCU = at90usb1287 -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 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# 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 = no # Enable keyboard underlight functionality (+4870) -BACKLIGHT_ENABLE = yes # 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 diff --git a/keyboards/atom47/rules.mk b/keyboards/atom47/rules.mk index 9b3263afd69..bebdb98d625 100644 --- a/keyboards/atom47/rules.mk +++ b/keyboards/atom47/rules.mk @@ -45,8 +45,8 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT # Atmel DFU loader 4096 # LUFA bootloader 4096 # USBaspLoader 2048 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - +# OPT_DEFS += -DBOOTLOADER_SIZE=4096 +BOOTLOADER= qmk-dfu # Build Options # comment out to disable the options. @@ -56,10 +56,11 @@ 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 = no # 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 = yes # 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 + +DEFAULT_FOLDER = atom47/rev2 + From 466ee7642317b701181f156f54fa1439bfba2d01 Mon Sep 17 00:00:00 2001 From: skullY Date: Tue, 8 May 2018 12:20:13 -0700 Subject: [PATCH 133/152] switch to the vue theme and add search --- docs/index.html | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/index.html b/docs/index.html index 9fddda840d7..0617e1f5c1b 100644 --- a/docs/index.html +++ b/docs/index.html @@ -6,7 +6,8 @@ - + +
@@ -18,9 +19,16 @@ loadSidebar: true, auto2top: true, formatUpdated: '{YYYY}/{MM}/{DD} {HH}:{mm}', + search: { + paths: 'auto', + placeholder: 'Search Documentation...', + noData: 'We could not find any documents matching your search.', + depth: 6 + } } + @@ -28,6 +36,7 @@

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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 107/152] 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 108/152] AJP10304 Planck and JJ40 layouts. Added fn2 layer (#2879) --- keyboards/jj40/keymaps/ajp10304/keymap.c | 118 ++++++++++++++++---- keyboards/jj40/keymaps/ajp10304/readme.md | 52 ++++++--- keyboards/planck/keymaps/ajp10304/keymap.c | 114 ++++++++++++++++--- keyboards/planck/keymaps/ajp10304/readme.md | 49 +++++--- 4 files changed, 262 insertions(+), 71 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 | | | +| CAPS | | | | | PLAY1|PLAY2 | Mute | Vol+ | Play | | | +| MAC | | | | | STOP1|STOP2 | Prev | Vol- | Next | | | +| | | | | | | | | DYN | | | | + +##### 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 -Activated when `fn` and `Raise` are held together. -| | | | | | | | | | | | | -| :---: |:----:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:| -| | | | | | | | | | | | | -| ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | | -| ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN |RIGHT | | | -| | | | | | | | | | | | | +##### 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 | | | +| CAPS | | | | | PLAY1|PLAY2 | Mute | Vol+ | Play | | | +| MAC | | | | | STOP1|STOP2 | Prev | Vol- | Next | | | +| | | | | | | | | DYN | | | | + +##### 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 -Activated when `fn` and `Raise` are held together. -| | | | | | | | | | | | | -| :---: |:----:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:| -| | | | | | | | | | | | | -| ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | | -| ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN |RIGHT | | | -| | | | | | | | | | | | | +##### 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 109/152] 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 | 295 ++++++++------- 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 | 105 +++--- keyboards/atreus/keymaps/erlandsona/keymap.c | 60 +-- keyboards/atreus/keymaps/gerb/keymap.c | 83 ++-- keyboards/atreus/keymaps/henxing/keymap.c | 152 ++++---- keyboards/atreus/keymaps/jeremy/keymap.c | 70 ++-- keyboards/atreus/keymaps/khitsule/keymap.c | 49 ++- .../atreus/keymaps/replicaJunction/keymap.c | 283 +++++++------- keyboards/atreus/keymaps/xk/keymap.c | 357 +++++++++--------- keyboards/atreus/keymaps/xyverz/keymap.c | 203 +++++----- 24 files changed, 1307 insertions(+), 1307 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 }, - }, - -/* 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 | - * '--------------------------------------------------------------------------------------------------------------------------------------' - */ + /* 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 | + * '--------------------------------------------------------------------------------------------------------------------------------------' + */ - [_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 }, - }, - -/* 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___, _______, _______ }, - { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, - }, - -/* 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 }, - }, + [_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 + ), + + /* 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] = 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 + ), + + /* 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), } -}, - -[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), } -}, - -[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), } -}, - -[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, } -}, - - + [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] = 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] = 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] = 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 ), - -[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), _______, _______, _______, _______, _______, _______), - -[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) + [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] = 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] = 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] = 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 \ - ) - + /* + * 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 \ + ), + + /* + * ! @ 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; - - 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 RAISE: - if (record->event.pressed) { - persistent_default_layer_set(1UL<<_RAISE); - } - break; - - default: - - // If the keycode is not handled by any of the other cases, the - // function should return true - return_value = true; - break; - } - - return return_value; + // The value to return + bool return_value = false; + + 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 RAISE: + if (record->event.pressed) { + persistent_default_layer_set(1UL<<_RAISE); + } + break; + + default: + + // If the keycode is not handled by any of the other cases, the + // function should return true + return_value = true; + break; + } + + 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] = 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] = 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] = 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] = 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] = 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, _______, _______, _______ -)}; + /* + * 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 + ), + + /* + * 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 + ), + + /* + * 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 + ), + + /* + * 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, _______ + ), + + /* + * 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 + ), + + /* + * 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} - }, - -/* QWERTY Layer + [_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 ,----------------------------------. ,----------------------------------. | 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} - }, - -/* Colemak Layer + [_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 ,----------------------------------. ,----------------------------------. | 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} - }, - -/* Dvorak Layer with Command key on left thumb instead of Control + [_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 ,----------------------------------. ,----------------------------------. | ' | , | . | 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} - }, - -/* LOWER Layer + [_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 ,----------------------------------. ,----------------------------------. | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |------+------+------+------+------| |------+------+------+------+------| @@ -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, _______, _______, _______, _______} - }, - -/* RAISE Layer + [_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 ,----------------------------------. ,----------------------------------. | 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, _______, _______, _______, _______} - }, - -/* ADJUST Layer + [_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 ,----------------------------------. ,----------------------------------. | 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 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 true; + 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 110/152] 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 111/152] 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 112/152] 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 113/152] 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 114/152] 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, // ^bvJIŚu:v VtgJIŚ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) // ^bvŖϊ z[hLower +#define KC_RASE LT(_RAISE, KC_HENK) // ^bvŕϊ z[hRaise +#define KC_ALPS LALT(KC_PSCR) // Alt + PrintScreen +#define KC_LSLP MT(MOD_LSFT, JP_LPRN) // ^bv( z[hōShift +#define KC_RSRP MT(MOD_RSFT, JP_RPRN) // ^bv) z[hʼnEShift +#define KC_ALTB MT(MOD_LALT, KC_TAB) // ^bvTAB z[hōALT +#define KC_ESCA LT(_ADJUST,KC_ESC) // ^bvESC z[hADJUSTC[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: // Ru;: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 115/152] 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 116/152] 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 117/152] 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 118/152] 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 119/152] 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 120/152] 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 121/152] 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 122/152] 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 123/152] 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, // ^bvJIŚu:v VtgJIŚ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) // ^bvŖϊ z[hLower -#define KC_RASE LT(_RAISE, KC_HENK) // ^bvŕϊ z[hRaise +#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) // ^bv( z[hōShift -#define KC_RSRP MT(MOD_RSFT, JP_RPRN) // ^bv) z[hʼnEShift -#define KC_ALTB MT(MOD_LALT, KC_TAB) // ^bvTAB z[hōALT -#define KC_ESCA LT(_ADJUST,KC_ESC) // ^bvESC z[hADJUSTC[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: // Ru;: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 124/152] 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 125/152] 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, \ From 9e5676650ec4ae71565201871c1aaf05e96a756b Mon Sep 17 00:00:00 2001 From: skullY Date: Mon, 7 May 2018 21:58:50 -0700 Subject: [PATCH 126/152] Use docsfy to replace gitbook --- docs/.nojekyll | 0 docs/README.md | 19 +- docs/_sidebar.md | 98 ++++++ docs/index.html | 32 ++ docs/qmk.css | 862 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 1005 insertions(+), 6 deletions(-) create mode 100644 docs/.nojekyll create mode 100644 docs/_sidebar.md create mode 100644 docs/index.html create mode 100644 docs/qmk.css diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/README.md b/docs/README.md index 93347a42e1c..d4587d2dfd1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,18 +1,25 @@ # Quantum Mechanical Keyboard Firmware -## What is QMK Firmware? {#what-is-qmk-firmware} +[![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) +[![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/) + +## What is QMK Firmware? QMK (*Quantum Mechanical Keyboard*) is an open source community that maintains QMK Firmware, QMK Flasher, qmk.fm, and these docs. QMK Firmware is a keyboard firmware based on the [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). It has also been ported to ARM chips using ChibiOS. You can use it to power your own hand-wired or custom keyboard PCB. -## How to Get It {#how-to-get-it} +## How to Get It If you plan on contributing a keymap, keyboard, or features to QMK, the easiest thing to do is [fork the repo through Github](https://github.com/qmk/qmk_firmware#fork-destination-box), and clone your repo locally to make your changes, push them, then open a [Pull Request](https://github.com/qmk/qmk_firmware/pulls) from your fork. Otherwise, you can either download it directly ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), or clone it via git (`git@github.com:qmk/qmk_firmware.git`), or https (`https://github.com/qmk/qmk_firmware.git`). -## How to Compile {#how-to-compile} +## How to Compile -Before you are able to compile, you'll need to [install an environment](getting_started_build_tools.md) for AVR or/and ARM development. Once that is complete, you'll use the `make` command to build a keyboard and keymap with the following notation: +Before you are able to compile, you'll need to [install an environment](01_Getting_Started/01_Install_Build_Tools.md) for AVR or/and ARM development. Once that is complete, you'll use the `make` command to build a keyboard and keymap with the following notation: make planck/rev4:default @@ -20,6 +27,6 @@ This would build the `rev4` revision of the `planck` with the `default` keymap. make preonic:default -## How to Customize {#how-to-customize} +## How to Customize -QMK has lots of [features](features.md) to explore, and a good deal of [reference documentation](http://docs.qmk.fm) to dig through. Most features are taken advantage of by modifying your [keymap](keymap.md), and changing the [keycodes](keycodes.md). +QMK has lots of [features](05_Features/index.md) to explore, and a good deal of [reference documentation](http://docs.qmk.fm) to dig through. Most features are taken advantage of by modifying your [keymap](07_Reference/Keymap_Overview.md), and changing the [keycodes](06_Keycodes/index.md). diff --git a/docs/_sidebar.md b/docs/_sidebar.md new file mode 100644 index 00000000000..318c526a854 --- /dev/null +++ b/docs/_sidebar.md @@ -0,0 +1,98 @@ +* [Getting Started](README.md) + * [QMK Introduction](getting_started_introduction.md) + * [Install Build Tools](getting_started_build_tools.md) + * Alternative: [Vagrant Guide](getting_started_vagrant.md) + * [Build/Compile Instructions](getting_started_make_guide.md) + * [Flashing Firmware](flashing.md) + * [Contributing to QMK](contributing.md) + * [How to Use Github](getting_started_github.md) + * [Getting Help](getting_started_getting_help.md) + +* [Complete Newbs Guide](newbs.md) + * [Getting Started](newbs_getting_started.md) + * [Building Your First Firmware](newbs_building_firmware.md) + * [Flashing Firmware](newbs_flashing.md) + * [Testing and Debugging](newbs_testing_debugging.md) + +* [FAQ](faq.md) + * [General FAQ](faq_general.md) + * [Build/Compile QMK](faq_build.md) + * [Debugging/Troubleshooting QMK](faq_debug.md) + * [Keymap](faq_keymap.md) + +* [Hardware](hardware.md) + * [Keyboard Guidelines](hardware_keyboard_guidelines.md) + * [AVR Processors](hardware_avr.md) + * ARM Processors (TBD) + * [Drivers](hardware_drivers.md) + +* [Features](features.md) + * [Advanced Keycodes](feature_advanced_keycodes.md) + * [Audio](feature_audio.md) + * [Auto Shift](feature_auto_shift.md) + * [Backlight](feature_backlight.md) + * [Bootmagic](feature_bootmagic.md) + * [Command](feature_command.md) + * [Dynamic Macros](feature_dynamic_macros.md) + * [Grave Escape](feature_grave_esc.md) + * [Key Lock](feature_key_lock.md) + * [Layouts](feature_layouts.md) + * [Leader Key](feature_leader_key.md) + * [Macros](feature_macros.md) + * [Mouse Keys](feature_mouse_keys.md) + * [Pointing Device](feature_pointing_device.md) + * [PS/2 Mouse](feature_ps2_mouse.md) + * [RGB Lighting](feature_rgblight.md) + * [Space Cadet](feature_space_cadet.md) + * [Stenography](feature_stenography.md) + * [Swap Hands](feature_swap_hands.md) + * [Tap Dance](feature_tap_dance.md) + * [Terminal](feature_terminal.md) + * [Thermal Printer](feature_thermal_printer.md) + * [Unicode](feature_unicode.md) + * [Userspace](feature_userspace.md) + +* [Keycodes](keycodes.md) + * [Backlight](feature_backlight.md#backlight-keycodes) + * [Basic](keycodes_basic.md) + * [Bluetooth](feature_bluetooth.md#bluetooth-keycodes) + * [Bootmagic](feature_bootmagic.md#bootmagic-keycodes) + * [Layer Switching](feature_advanced_keycodes.md#switching-and-toggling-layers) + * [Mod+Key](feature_advanced_keycodes.md#modifier-keys) + * [Mod Tap](feature_advanced_keycodes.md#mod-tap) + * [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys) + * [Quantum](quantum_keycodes.md) + * [RGB Light](feature_rgblight.md#rgblight-keycodes) + * [Shifted Keys](feature_advanced_keycodes.md#shifted-keycodes) + * [Stenography](feature_stenography.md#keycode-reference) + * [Thermal Printer](feature_thermal_printer.md#thermal-printer-keycodes) + * [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md) + +* Reference + * [Config Options](config_options.md) + * [Customizing Functionality](custom_quantum_functions.md) + * [Documentation Best Practices](documentation_best_practices.md) + * [Documentation Templates](documentation_templates.md) + * [Glossary](reference_glossary.md) + * [Keymap Overview](keymap.md) + * [Unit Testing](unit_testing.md) + +* For Makers and Modders + * [Hand Wiring Guide](hand_wire.md) + * [ISP Flashing Guide](isp_flashing_guide.md) + +* For a Deeper Understanding + * [How Keyboards Work](how_keyboards_work.md) + * [Understanding QMK](understanding_qmk.md) + +* Other Topics + * [Using Eclipse with QMK](eclipse.md) + +* QMK Internals (In Progress) + * [Defines](internals_defines.md) + * [Input Callback Reg](internals_input_callback_reg.md) + * [Midi Device](internals_midi_device.md) + * [Midi Device Setup Process](internals_midi_device_setup_process.md) + * [Midi Util](internals_midi_util.md) + * [Send Functions](internals_send_functions.md) + * [Sysex Tools](internals_sysex_tools.md) diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000000..c890b95ae7f --- /dev/null +++ b/docs/index.html @@ -0,0 +1,32 @@ + + + + + Document + + + + + + +