diff --git a/keyboards/crkbd/keymaps/mporrato/common.h b/keyboards/crkbd/keymaps/mporrato/common.h new file mode 100644 index 000000000..325628ff5 --- /dev/null +++ b/keyboards/crkbd/keymaps/mporrato/common.h @@ -0,0 +1,19 @@ +#include + +typedef union { + uint32_t raw; + struct { + bool ansi_emulation :1; + }; +} user_config_t; + +extern user_config_t user_config; + +#define _QWERTY 0 +#define _LOWER 1 +#define _RAISE_ISO 2 +#define _RAISE _RAISE_ISO +#define _RAISE_ANSI 3 +#define _ADJUST 4 +#define _NAV 5 + diff --git a/keyboards/crkbd/keymaps/mporrato/keymap.c b/keyboards/crkbd/keymaps/mporrato/keymap.c index 9d5fb9a1d..e7252dd5d 100644 --- a/keyboards/crkbd/keymaps/mporrato/keymap.c +++ b/keyboards/crkbd/keymaps/mporrato/keymap.c @@ -7,9 +7,12 @@ #ifdef SSD1306OLED #include "ssd1306.h" #endif +#include "common.h" extern keymap_config_t keymap_config; +user_config_t user_config; + #ifdef RGBLIGHT_ENABLE //Following line allows macro to read current RGB settings extern rgblight_config_t rgblight_config; @@ -17,23 +20,15 @@ extern rgblight_config_t rgblight_config; extern uint8_t is_master; -// 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 _ADJUST 3 -#define _NAV 4 - enum custom_keycodes { QWERTY = SAFE_RANGE, LOWER, RAISE, ADJUST, BACKLIT, - RGBRST + RGBRST, + ANSI, + PND }; enum macro_keycodes { @@ -59,6 +54,12 @@ enum macro_keycodes { #define KC_ALTKN ALT_T(KC_LANG1) #define KC_NAVSP LT(_NAV,KC_SPC) #define KC_CAENT MT(MOD_LCTL|MOD_LALT,KC_ENT) + +#define KC_ANSI ANSI +#define KC_PND PND +#define KC_NUDQ LSFT(KC_2) +#define KC_NUPND LSFT(KC_3) +#define KC_NUAT LSFT(KC_QUOT) #define KC_NUTIL LSFT(KC_NUHS) #define KC_NUPIP LSFT(KC_NUBS) @@ -87,13 +88,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //`--------------------' `--------------------' ), - [_RAISE] = LAYOUT_kc( \ + [_RAISE_ISO] = LAYOUT_kc( \ //,-----------------------------------------. ,-----------------------------------------. - ESC, EXLM, AT, HASH, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, BSPC,\ + ESC, EXLM, NUDQ, NUPND, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, BSPC,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| CTLTB, NUBS, XXXXX, XXXXX, XXXXX, XXXXX, MINS, EQL, NUHS, LCBR, RCBR, GRV,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| - LSFT, NUPIP, XXXXX, XXXXX, XXXXX, XXXXX, UNDS, PLUS, NUTIL, LBRC, RBRC, TILD,\ + LSFT, NUPIP, XXXXX, XXXXX, XXXXX, XXXXX, UNDS, PLUS, NUTIL, LBRC, RBRC, NUAT,\ + //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------| + _____, _____, _____, _____, _____, _____ \ + //`--------------------' `--------------------' + ), + + [_RAISE_ANSI] = LAYOUT_kc( \ + //,-----------------------------------------. ,-----------------------------------------. + _____, _____, DQUO, PND, _____, _____, _____, _____, _____, _____, _____, _____,\ + //|------+------+------+------+------+------| |------+------+------+------+------+------| + _____, BSLS, _____, _____, _____, _____, _____, _____, HASH, _____, _____, _____,\ + //|------+------+------+------+------+------| |------+------+------+------+------+------| + _____, PIPE, _____, _____, _____, _____, _____, _____, TILD, _____, _____, AT,\ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------| _____, _____, _____, _____, _____, _____ \ //`--------------------' `--------------------' @@ -101,7 +114,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_ADJUST] = LAYOUT_kc( \ //,-----------------------------------------. ,-----------------------------------------. - RST, LRST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, PWR,\ + RST, LRST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, ANSI, XXXXX, XXXXX, PWR,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, SLEP,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| @@ -116,7 +129,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //|------+------+------+------+------+------| |------+------+------+------+------+------| CTLTB, BTN4, MS_L, MS_D, MS_R, WH_D, LEFT, DOWN, UP, RGHT, MSTP, MPLY,\ //|------+------+------+------+------+------| |------+------+------+------+------+------| - LSFT, WH_L, WH_R, ACL0, ACL1, ACL2, MPRV, VOLD, VOLU, MNXT, XXXXX, RSFT,\ + LSFT, WH_L, WH_R, ACL0, ACL1, ACL2, MPRV, VOLD, VOLU, MNXT, FIND, RSFT,\ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------| _____, _____, _____, _____, _____, _____ \ //`--------------------' `--------------------' @@ -139,6 +152,10 @@ void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) { } } +void keyboard_post_init_user(void) { + user_config.raw = eeconfig_read_user(); +} + void matrix_init_user(void) { #ifdef RGBLIGHT_ENABLE RGB_current_mode = rgblight_config.mode; @@ -212,23 +229,37 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } return false; break; + case ANSI: + if (record->event.pressed) { + user_config.ansi_emulation = !user_config.ansi_emulation; + eeconfig_update_user(user_config.raw); + } + return false; + case PND: + if (record->event.pressed) { + SEND_STRING(SS_TAP(X_RALT)"-l"); + } + return false; case LOWER: if (record->event.pressed) { layer_on(_LOWER); - update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + update_tri_layer_RGB(_LOWER, _RAISE_ISO, _ADJUST); } else { layer_off(_LOWER); - update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + update_tri_layer_RGB(_LOWER, _RAISE_ISO, _ADJUST); } return false; break; case RAISE: if (record->event.pressed) { - layer_on(_RAISE); - update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + layer_on(_RAISE_ISO); + if (user_config.ansi_emulation) + layer_on(_RAISE_ANSI); + update_tri_layer_RGB(_LOWER, _RAISE_ISO, _ADJUST); } else { - layer_off(_RAISE); - update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST); + layer_off(_RAISE_ISO); + layer_off(_RAISE_ANSI); + update_tri_layer_RGB(_LOWER, _RAISE_ISO, _ADJUST); } return false; break; diff --git a/keyboards/crkbd/keymaps/mporrato/layer_state_reader.c b/keyboards/crkbd/keymaps/mporrato/layer_state_reader.c index 7965d216d..51c7b9413 100644 --- a/keyboards/crkbd/keymaps/mporrato/layer_state_reader.c +++ b/keyboards/crkbd/keymaps/mporrato/layer_state_reader.c @@ -1,39 +1,40 @@ #include QMK_KEYBOARD_H -#include +#include #include "crkbd.h" +#include "common.h" -// in the future, should use (1U<<_LAYER_NAME) instead, but needs to be moved to keymap,c #define L_BASE 0 -#define L_LOWER 2 -#define L_RAISE 4 -#define L_ADJUST 8 -#define L_NAV 16 -#define L_ADJUST_TRI 14 +#define L_LOWER (1<<_LOWER) +#define L_RAISE (1<<_RAISE) +#define L_ADJUST (1<<_ADJUST) +#define L_NAV (1<<_NAV) +#define L_ADJUST_TRI (L_LOWER+L_RAISE+L_ADJUST) char layer_state_str[24]; const char *read_layer_state(void) { + strncpy(layer_state_str, user_config.ansi_emulation ? "ANSI " : " ISO ", sizeof(layer_state_str)-1); switch (layer_state) { case L_BASE: - snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Default"); + strncat(layer_state_str, "Default", sizeof(layer_state_str)-1); break; case L_RAISE: - snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Raise"); + strncat(layer_state_str, "Raise", sizeof(layer_state_str)-1); break; case L_LOWER: - snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Lower"); + strncat(layer_state_str, "Lower", sizeof(layer_state_str)-1); break; case L_ADJUST: case L_ADJUST_TRI: - snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Adjust"); + strncat(layer_state_str, "Adjust", sizeof(layer_state_str)-1); break; case L_NAV: - snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Navigation"); + strncat(layer_state_str, "Navigation", sizeof(layer_state_str)-1); break; default: - snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Undef-%ld", layer_state); + strncat(layer_state_str, "Undefined", sizeof(layer_state_str)-1); } return layer_state_str;