mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-11-03 23:02:34 +01:00 
			
		
		
		
	[Keymap] Remove LAYOUT_kc macros from edvorakjp keymaps (#12217)
This commit is contained in:
		
							parent
							
								
									93e8a401df
								
							
						
					
					
						commit
						3dbb7f261d
					
				@ -1,25 +1,25 @@
 | 
			
		||||
#ifndef CONFIG_USER_H
 | 
			
		||||
#define CONFIG_USER_H
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/* Select hand configuration */
 | 
			
		||||
 | 
			
		||||
// #define MASTER_LEFT
 | 
			
		||||
#define MASTER_RIGHT
 | 
			
		||||
#define MASTER_LEFT
 | 
			
		||||
// #define MASTER_RIGHT
 | 
			
		||||
// #define EE_HANDS
 | 
			
		||||
 | 
			
		||||
#define SSD1306OLED
 | 
			
		||||
#define SWAP_SCLN
 | 
			
		||||
 | 
			
		||||
// #define TAPPING_FORCE_HOLD
 | 
			
		||||
#define TAPPING_TERM 300
 | 
			
		||||
#define IGNORE_MOD_TAP_INTERRUPT
 | 
			
		||||
 | 
			
		||||
#undef RGBLED_NUM
 | 
			
		||||
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
 | 
			
		||||
#define RGBLED_NUM 27
 | 
			
		||||
#define RGBLIGHT_LIMIT_VAL 100
 | 
			
		||||
#define RGBLIGHT_HUE_STEP 10
 | 
			
		||||
#define RGBLIGHT_SAT_STEP 17
 | 
			
		||||
#define RGBLIGHT_VAL_STEP 17
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
#    undef RGBLED_NUM
 | 
			
		||||
#    define RGBLIGHT_EFFECT_STATIC_GRADIENT
 | 
			
		||||
#    define RGBLED_NUM 27
 | 
			
		||||
#    define RGBLIGHT_LIMIT_VAL 100
 | 
			
		||||
#    define RGBLIGHT_HUE_STEP 10
 | 
			
		||||
#    define RGBLIGHT_SAT_STEP 17
 | 
			
		||||
#    define RGBLIGHT_VAL_STEP 17
 | 
			
		||||
#endif  // RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
#endif // CONFIG_USER_H
 | 
			
		||||
#define OLED_FONT_H "keyboards/crkbd/lib/glcdfont.c"
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,6 @@
 | 
			
		||||
#include QMK_KEYBOARD_H
 | 
			
		||||
#ifdef PROTOCOL_LUFA
 | 
			
		||||
  #include "split_util.h"
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef SSD1306OLED
 | 
			
		||||
  #include "oled.h"
 | 
			
		||||
#    include "split_util.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "edvorakjp.h"
 | 
			
		||||
@ -14,85 +11,63 @@
 | 
			
		||||
 * };
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define KC_ KC_TRNS
 | 
			
		||||
 | 
			
		||||
#define KC_TMB1 KC_LA(TAB)
 | 
			
		||||
#define KC_TMB2 KC_LS(SPC)
 | 
			
		||||
#define KC_TMB3 TD(TD_LOWER) // act as LOWER when hold, as KC_LANG2(=English) when tapped
 | 
			
		||||
#define KC_TMB4 TD(TD_RAISE) // act as RAISE when hold, as KC_LANG1(=Japanese) when tapped
 | 
			
		||||
#define KC_TMB5 KC_RC(BSPC)
 | 
			
		||||
#define KC_TMB6 KC_RG(ENT)
 | 
			
		||||
#define KC_TMB7 KC_RC(DEL)
 | 
			
		||||
#define LAYOUT_wrapper(...) LAYOUT_split_3x6_3(__VA_ARGS__)
 | 
			
		||||
 | 
			
		||||
// clang-format off
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
 | 
			
		||||
  [_EDVORAK] = LAYOUT_kc(
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
     GRV ,QUOT,COMM , DOT ,  Y  , Q  ,             F  ,  G  ,  R  ,  W  , P  ,BSLS,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
     EQL , A  ,LA(O),LG(E),LC(I), U  ,             D  ,RS(T),RG(N),RA(S), M  ,MINS,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
     ESC ,SCLN,  X  ,  C  ,  V  , Z  ,             H  ,  J  ,  K  ,  L  , B  ,SLSH,
 | 
			
		||||
  //`----+----+-----+-----+-----+----+----| |----+----+-----+-----+-----+----+----'
 | 
			
		||||
                           TMB1 ,TMB2,TMB3,  TMB4,TMB5,TMB6
 | 
			
		||||
  //                      `-----+----+----' `----+----+-----'
 | 
			
		||||
  [L_EDVORAKJP_BASE] = LAYOUT_wrapper(
 | 
			
		||||
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | 
			
		||||
       KC_GRV,            __EDVORAKJP_BASE_L1__           ,                                __EDVORAKJP_BASE_R1__            , KC_BSLS,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
       KC_EQL,            __EDVORAKJP_BASE_L2__           ,                                __EDVORAKJP_BASE_R2__            , KC_MINS,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
       KC_ESC,            __EDVORAKJP_BASE_L3__           ,                                __EDVORAKJP_BASE_R3__            , KC_SLSH,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | 
			
		||||
                                           LA_TAB,  LS_SPC,LOWER_TD,   RAISE_TD, RC_BSPC,  RG_ENT
 | 
			
		||||
                                      //`--------------------------'  `--------------------------'
 | 
			
		||||
  ),
 | 
			
		||||
 | 
			
		||||
  [_LOWER] = LAYOUT_kc(
 | 
			
		||||
  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
 | 
			
		||||
         ,    , LCBR , LBRC , LPRN ,    ,                , RPRN , RBRC , RCBR  ,    ,    ,
 | 
			
		||||
  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
 | 
			
		||||
      F1 , F2 ,LA(F3),LG(F4),LC(F5), F6 ,             F7 ,RS(F8),RG(F9),RA(F10),F11 ,F12 ,
 | 
			
		||||
  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
 | 
			
		||||
     PSCR,    , HOME , PGDN , PGUP ,END ,            LEFT, DOWN ,  UP  , RGHT  ,    ,    ,
 | 
			
		||||
  //`----+----+------+------+------+----+----| |----+----+------+------+-------+----+----'
 | 
			
		||||
                                   ,    , NO ,  MAC ,TMB7,
 | 
			
		||||
  //                         `-----+----+----' `----+----+-----'
 | 
			
		||||
  [L_EDVORAKJP_LOWER] = LAYOUT_wrapper(
 | 
			
		||||
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | 
			
		||||
      XXXXXXX, XXXXXXX, __EDVORAKJP_BRACKET_L__  , XXXXXXX,                      XXXXXXX,  __EDVORAKJP_BRACKET_R__ , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
                       __EDVORAKJP_FUNCTION_L__           ,                                __EDVORAKJP_FUNCTION_R__                  ,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
      KC_PSCR, XXXXXXX,      __EDVORAKJP_PAGE__           ,                                __EDVORAKJP_CURSOR__    , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | 
			
		||||
                                          KC_TRNS, KC_TRNS, XXXXXXX,     KC_MAC,  RC_DEL, KC_TRNS
 | 
			
		||||
                                      //`--------------------------'  `--------------------------'
 | 
			
		||||
  ),
 | 
			
		||||
 | 
			
		||||
  [_RAISE] = LAYOUT_kc(
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
         ,    ,EXLM , AT  ,HASH ,DLR ,            PERC,CIRC ,AMPR ,ASTR ,    ,    ,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
         , 1  ,LA(2),LG(3),LC(4), 5  ,             6  ,RS(7),RG(8),RA(9), 0  ,    ,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
     PSCR,    ,HOME ,PGDN ,PGUP ,END ,            LEFT,DOWN , UP  ,RGHT ,    ,    ,
 | 
			
		||||
  //`----+----+-----+-----+-----+----+----| |----+----+-----+-----+-----+----+----'
 | 
			
		||||
                                ,    ,WIN ,   NO ,    ,
 | 
			
		||||
  //                      `-----+----+----' `----+----+----'
 | 
			
		||||
  [L_EDVORAKJP_RAISE] = LAYOUT_wrapper(
 | 
			
		||||
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | 
			
		||||
      XXXXXXX, XXXXXXX,  __EDVORAKJP_SYMBOL_L__           ,                                __EDVORAKJP_SYMBOL_R__  , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
      XXXXXXX,           __EDVORAKJP_NUMBER_L__           ,                                __EDVORAKJP_NUMBER_R__           , XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
      KC_PSCR, XXXXXXX,      __EDVORAKJP_PAGE__           ,                                __EDVORAKJP_CURSOR__    , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | 
			
		||||
                                          KC_TRNS, KC_TRNS,  KC_WIN,    XXXXXXX, KC_TRNS, KC_TRNS
 | 
			
		||||
                                      //`--------------------------'  `--------------------------'
 | 
			
		||||
  )
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef SSD1306OLED
 | 
			
		||||
void matrix_init_keymap(void) {
 | 
			
		||||
  //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
 | 
			
		||||
#ifdef MASTER_RIGHT
 | 
			
		||||
  iota_gfx_init(has_usb()); // turns on the display
 | 
			
		||||
#else
 | 
			
		||||
  iota_gfx_init(!has_usb());
 | 
			
		||||
#endif // MASTER_RIGHT
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
  iota_gfx_task();  // this is what updates the display continuously
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT
 | 
			
		||||
uint32_t layer_state_set_keymap(uint32_t state) {
 | 
			
		||||
  rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
  switch (biton32(state)) {
 | 
			
		||||
    case _LOWER:
 | 
			
		||||
      rgblight_sethsv_noeeprom_red();
 | 
			
		||||
      break;
 | 
			
		||||
    case _RAISE:
 | 
			
		||||
      rgblight_sethsv_noeeprom_green();
 | 
			
		||||
      break;
 | 
			
		||||
    default: // for any other layers, or the default layer
 | 
			
		||||
      rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
 | 
			
		||||
      rgblight_sethsv_red();
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  return state;
 | 
			
		||||
    rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
    switch (biton32(state)) {
 | 
			
		||||
        case L_EDVORAKJP_LOWER:
 | 
			
		||||
            rgblight_sethsv_noeeprom_red();
 | 
			
		||||
            break;
 | 
			
		||||
        case L_EDVORAKJP_RAISE:
 | 
			
		||||
            rgblight_sethsv_noeeprom_green();
 | 
			
		||||
            break;
 | 
			
		||||
        default:  // for any other layers, or the default layer
 | 
			
		||||
            rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
 | 
			
		||||
            rgblight_sethsv_red();
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    return state;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -1,76 +1,55 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "oled.h"
 | 
			
		||||
 | 
			
		||||
// NOTE: Redefined to avoid to use snprintf(); It makes size of firmware big.
 | 
			
		||||
const char *read_mode_icon(bool windows_mode) {
 | 
			
		||||
  static const char logo[][2][3] = {{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}};
 | 
			
		||||
  static char mode_icon[10];
 | 
			
		||||
#ifdef OLED_DRIVER_ENABLE
 | 
			
		||||
void render_host_led_state(void) { oled_write(read_host_led_state(), false); }
 | 
			
		||||
 | 
			
		||||
  int mode_number = windows_mode ? 1 : 0;
 | 
			
		||||
  strcpy(mode_icon, logo[mode_number][0]);
 | 
			
		||||
void render_layer_state(void) {
 | 
			
		||||
    char layer_name[17];
 | 
			
		||||
    oled_write_P(PSTR("Layer: "), false);
 | 
			
		||||
 | 
			
		||||
  strcat(mode_icon, "\n");
 | 
			
		||||
  strcat(mode_icon, logo[mode_number][1]);
 | 
			
		||||
 | 
			
		||||
  return mode_icon;
 | 
			
		||||
    switch (biton32(layer_state)) {
 | 
			
		||||
        case L_EDVORAKJP_BASE:
 | 
			
		||||
            oled_write_ln_P(PSTR("Default"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case L_EDVORAKJP_LOWER:
 | 
			
		||||
            oled_write_ln_P(PSTR("Lower"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case L_EDVORAKJP_RAISE:
 | 
			
		||||
            oled_write_ln_P(PSTR("Raise"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            snprintf(layer_name, sizeof(layer_name), "Undef-%ld", layer_state);
 | 
			
		||||
            oled_write_ln(layer_name, false);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *read_layer_state(void) {
 | 
			
		||||
  static char layer_state_str[24];
 | 
			
		||||
  char layer_name[17];
 | 
			
		||||
void render_logo(void) { oled_write(read_logo(), false); }
 | 
			
		||||
 | 
			
		||||
  switch (biton32(layer_state)) {
 | 
			
		||||
    case L_BASE:
 | 
			
		||||
      strcpy(layer_name, "Default");
 | 
			
		||||
      break;
 | 
			
		||||
    case _RAISE:
 | 
			
		||||
      strcpy(layer_name, "Raise");
 | 
			
		||||
      break;
 | 
			
		||||
    case _LOWER:
 | 
			
		||||
      strcpy(layer_name, "Lower");
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      snprintf(layer_name, sizeof(layer_name), "Undef-%ld", layer_state);
 | 
			
		||||
  }
 | 
			
		||||
void render_mode_icon(bool is_windows) {
 | 
			
		||||
    static const char logo[][2][3] = {
 | 
			
		||||
        {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
 | 
			
		||||
        {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
 | 
			
		||||
    };
 | 
			
		||||
    static char mode_icon[10];
 | 
			
		||||
 | 
			
		||||
  strcpy(layer_state_str, "Layer: ");
 | 
			
		||||
 | 
			
		||||
  strcat(layer_state_str, layer_name);
 | 
			
		||||
  strcat(layer_state_str, "\n");
 | 
			
		||||
  return layer_state_str;
 | 
			
		||||
    snprintf(mode_icon, sizeof(mode_icon), "%s\n%s ", logo[is_windows][0], logo[is_windows][1]);
 | 
			
		||||
    oled_write(mode_icon, false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *read_host_led_state(void) {
 | 
			
		||||
  static char led_str[24];
 | 
			
		||||
  strcpy(led_str, (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NMLK" : "    ");
 | 
			
		||||
  strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? " CAPS" : "    ");
 | 
			
		||||
  strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? " SCLK" : "     ");
 | 
			
		||||
  return led_str;
 | 
			
		||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
 | 
			
		||||
    // flips the display 180 degrees if offhand
 | 
			
		||||
    return is_keyboard_left() ? rotation : rotation ^ OLED_ROTATION_180;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_update(struct CharacterMatrix *dest,
 | 
			
		||||
                   const struct CharacterMatrix *source) {
 | 
			
		||||
  if (memcmp(dest->display, source->display, sizeof(dest->display))) {
 | 
			
		||||
    memcpy(dest->display, source->display, sizeof(dest->display));
 | 
			
		||||
    dest->dirty = true;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void iota_gfx_task_user(void) {
 | 
			
		||||
  struct CharacterMatrix matrix;
 | 
			
		||||
 | 
			
		||||
  matrix_clear(&matrix);
 | 
			
		||||
#ifdef MASTER_RIGHT
 | 
			
		||||
  if (!is_master) {
 | 
			
		||||
#else
 | 
			
		||||
  if (is_master) {
 | 
			
		||||
#endif // MASTER_RIGHT
 | 
			
		||||
    matrix_write(&matrix, read_mode_icon(!get_enable_kc_lang()));
 | 
			
		||||
    matrix_write(&matrix, " ");
 | 
			
		||||
    matrix_write(&matrix, read_layer_state());
 | 
			
		||||
    matrix_write(&matrix, read_host_led_state());
 | 
			
		||||
  } else {
 | 
			
		||||
    matrix_write(&matrix, read_logo());
 | 
			
		||||
  }
 | 
			
		||||
  matrix_update(&display, &matrix);
 | 
			
		||||
void oled_task_user(void) {
 | 
			
		||||
    if (is_keyboard_left()) {
 | 
			
		||||
        render_mode_icon(!get_enable_kc_lang());
 | 
			
		||||
        render_layer_state();
 | 
			
		||||
        render_host_led_state();
 | 
			
		||||
    } else {
 | 
			
		||||
        render_logo();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
#endif  // OLED_DRIVER_ENABLE
 | 
			
		||||
 | 
			
		||||
@ -1,24 +1,17 @@
 | 
			
		||||
#ifndef OLED_USER_H
 | 
			
		||||
#define OLED_USER_H
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
 | 
			
		||||
#include "ssd1306.h"
 | 
			
		||||
#include "edvorakjp.h"
 | 
			
		||||
 | 
			
		||||
//assign the right code to your layers for OLED display
 | 
			
		||||
#define L_BASE 0
 | 
			
		||||
 | 
			
		||||
extern uint8_t is_master;
 | 
			
		||||
extern bool japanese_mode;
 | 
			
		||||
 | 
			
		||||
// method prototypes defined in crkbd/lib
 | 
			
		||||
extern const char *read_host_led_state(void);
 | 
			
		||||
extern const char *read_logo(void);
 | 
			
		||||
extern const char *read_mode_icon(bool swap);
 | 
			
		||||
 | 
			
		||||
const char *read_mode_icon(bool swap);
 | 
			
		||||
const char *read_layer_state(void);
 | 
			
		||||
const char *read_host_led_state(void);
 | 
			
		||||
void matrix_update(struct CharacterMatrix *dest,
 | 
			
		||||
                   const struct CharacterMatrix *source);
 | 
			
		||||
void iota_gfx_task_user(void);
 | 
			
		||||
 | 
			
		||||
#endif // OLED_CONFIG_USER_H
 | 
			
		||||
void            render_host_led_state(void);
 | 
			
		||||
void            render_layer_state(void);
 | 
			
		||||
void            render_logo(void);
 | 
			
		||||
void            render_mode_icon(bool is_windows);
 | 
			
		||||
oled_rotation_t oled_init_user(oled_rotation_t rotation);
 | 
			
		||||
void            oled_task_user(void);
 | 
			
		||||
 | 
			
		||||
@ -16,17 +16,13 @@ BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
 | 
			
		||||
RGBLIGHT_ENABLE = yes       # Enable WS2812 RGB underlight.
 | 
			
		||||
SWAP_HANDS_ENABLE = no      # Enable one-hand typing
 | 
			
		||||
TAP_DANCE_ENABLE = yes
 | 
			
		||||
OLED_DRIVER_ENABLE = 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
 | 
			
		||||
 | 
			
		||||
# If you want to change the display of OLED, you need to change here
 | 
			
		||||
SRC += ./lib/glcdfont.c \
 | 
			
		||||
SRC += ./lib/host_led_state_reader.c \
 | 
			
		||||
       ./lib/logo_reader.c \
 | 
			
		||||
       oled.c \
 | 
			
		||||
       # ./lib/rgb_state_reader.c \
 | 
			
		||||
       # ./lib/layer_state_reader.c \
 | 
			
		||||
       # ./lib/keylogger.c \
 | 
			
		||||
       # ./lib/mode_icon_reader.c \
 | 
			
		||||
       # ./lib/host_led_state_reader.c \
 | 
			
		||||
       # ./lib/timelogger.c \
 | 
			
		||||
       ./lib/mode_icon_reader.c \
 | 
			
		||||
       oled.c
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,4 @@
 | 
			
		||||
#ifndef CONFIG_USER_H
 | 
			
		||||
#define CONFIG_USER_H
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define SWAP_SCLN
 | 
			
		||||
 | 
			
		||||
@ -12,15 +11,13 @@
 | 
			
		||||
 | 
			
		||||
// Selection of RGBLIGHT MODE to use.
 | 
			
		||||
#if defined(LED_ANIMATIONS)
 | 
			
		||||
   //#define RGBLIGHT_EFFECT_BREATHING
 | 
			
		||||
   //#define RGBLIGHT_EFFECT_RAINBOW_MOOD
 | 
			
		||||
   //#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
 | 
			
		||||
   //#define RGBLIGHT_EFFECT_SNAKE
 | 
			
		||||
   //#define RGBLIGHT_EFFECT_KNIGHT
 | 
			
		||||
   //#define RGBLIGHT_EFFECT_CHRISTMAS
 | 
			
		||||
   #define RGBLIGHT_EFFECT_STATIC_GRADIENT
 | 
			
		||||
   //#define RGBLIGHT_EFFECT_RGB_TEST
 | 
			
		||||
   //#define RGBLIGHT_EFFECT_ALTERNATING
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* CONFIG_USER_H */
 | 
			
		||||
//#    define RGBLIGHT_EFFECT_BREATHING
 | 
			
		||||
//#    define RGBLIGHT_EFFECT_RAINBOW_MOOD
 | 
			
		||||
//#    define RGBLIGHT_EFFECT_RAINBOW_SWIRL
 | 
			
		||||
//#    define RGBLIGHT_EFFECT_SNAKE
 | 
			
		||||
//#    define RGBLIGHT_EFFECT_KNIGHT
 | 
			
		||||
//#    define RGBLIGHT_EFFECT_CHRISTMAS
 | 
			
		||||
#    define RGBLIGHT_EFFECT_STATIC_GRADIENT
 | 
			
		||||
//#    define RGBLIGHT_EFFECT_RGB_TEST
 | 
			
		||||
//#    define RGBLIGHT_EFFECT_ALTERNATING
 | 
			
		||||
#endif  // LED_ANIMATIONS
 | 
			
		||||
 | 
			
		||||
@ -1,38 +1,24 @@
 | 
			
		||||
#include QMK_KEYBOARD_H
 | 
			
		||||
#include "split_util.h"
 | 
			
		||||
#include "keymap_xrows.h"
 | 
			
		||||
#ifdef SSD1306OLED
 | 
			
		||||
  #include "oled.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// keymaps definitions are moved to keymap_Xrows.c.
 | 
			
		||||
 | 
			
		||||
#ifdef SSD1306OLED
 | 
			
		||||
void matrix_init_keymap(void) {
 | 
			
		||||
  //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
 | 
			
		||||
  iota_gfx_init(!has_usb());   // turns on the display
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
  iota_gfx_task();  // this is what updates the display continuously
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
uint32_t layer_state_set_keymap(uint32_t state) {
 | 
			
		||||
  rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
  switch (biton32(state)) {
 | 
			
		||||
    case _LOWER:
 | 
			
		||||
      rgblight_sethsv_noeeprom_red();
 | 
			
		||||
      break;
 | 
			
		||||
    case _RAISE:
 | 
			
		||||
      rgblight_sethsv_noeeprom_blue();
 | 
			
		||||
      break;
 | 
			
		||||
    default: //  for any other layers, or the default layer
 | 
			
		||||
      rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
 | 
			
		||||
      rgblight_sethsv_red();
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  return state;
 | 
			
		||||
    rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
    switch (biton32(state)) {
 | 
			
		||||
        case L_EDVORAKJP_LOWER:
 | 
			
		||||
            rgblight_sethsv_noeeprom_red();
 | 
			
		||||
            break;
 | 
			
		||||
        case L_EDVORAKJP_RAISE:
 | 
			
		||||
            rgblight_sethsv_noeeprom_green();
 | 
			
		||||
            break;
 | 
			
		||||
        default:  //  for any other layers, or the default layer
 | 
			
		||||
            rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
 | 
			
		||||
            rgblight_sethsv_red();
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    return state;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -1,41 +1,42 @@
 | 
			
		||||
#include "helix.h"
 | 
			
		||||
#include "keymap_xrows.h"
 | 
			
		||||
 | 
			
		||||
// clang-format off
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
 | 
			
		||||
  [_EDVORAK] = LAYOUT_kc(
 | 
			
		||||
  //,----+----+-----+-----+-----+----.           ,----+-----+-----+-----+----+----.
 | 
			
		||||
     GRV ,QUOT,COMM , DOT ,  Y  , Q  ,             F  ,  G  ,  R  ,  W  , P  ,BSLS,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
     EQL , A  ,LA(O),LG(E),LC(I), U  ,             D  ,RS(T),RG(N),RA(S), M  ,MINS,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
     ESC ,SCLN,  X  ,  C  ,  V  , Z  ,             H  ,  J  ,  K  ,  L  , B  ,SLSH,
 | 
			
		||||
  //|----+----+-----+-----+-----+----+----. ,----+----+-----+-----+-----+----+----|
 | 
			
		||||
     HOME,PGDN,PGUP , END ,TMB1 ,TMB2,TMB3,  TMB4,TMB5,TMB6 ,LEFT ,DOWN , UP ,RGHT
 | 
			
		||||
  //`----+----+-----+-----+-----+----+----/ \----+----+-----+-----+-----+----+----'
 | 
			
		||||
  [L_EDVORAKJP_BASE] = LAYOUT_wrapper(
 | 
			
		||||
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | 
			
		||||
       KC_GRV,            __EDVORAKJP_BASE_L1__           ,                                __EDVORAKJP_BASE_R1__            , KC_BSLS,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
       KC_EQL,            __EDVORAKJP_BASE_L2__           ,                                __EDVORAKJP_BASE_R2__            , KC_MINS,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
       KC_ESC,            __EDVORAKJP_BASE_L3__           ,                                __EDVORAKJP_BASE_R3__            , KC_SLSH,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | 
			
		||||
             __EDVORAKJP_PAGE__         ,  LA_TAB,  LS_SPC,LOWER_TD,   RAISE_TD, RC_BSPC,  RG_ENT,        __EDVORAKJP_CURSOR__
 | 
			
		||||
  //`--------------------------------------------------------------'  `--------------------------------------------------------------'
 | 
			
		||||
  ),
 | 
			
		||||
 | 
			
		||||
  [_LOWER] = LAYOUT_kc(
 | 
			
		||||
  //,----+----+------+------+------+----.           ,----+------+------+-------+----+----.
 | 
			
		||||
         ,    , LCBR , LBRC , LPRN ,    ,                , RPRN , RBRC , RCBR  ,    ,    ,
 | 
			
		||||
  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
 | 
			
		||||
      F1 , F2 ,LA(F3),LG(F4),LC(F5), F6 ,             F7 ,RS(F8),RG(F9),RA(F10),F11 ,F12 ,
 | 
			
		||||
  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
 | 
			
		||||
     PSCR,    , HOME , PGDN , PGUP ,END ,            LEFT, DOWN ,  UP  , RGHT  ,    ,    ,
 | 
			
		||||
  //|----+----+------+------+------+----+----. ,----+----+------+------+-------+----+----|
 | 
			
		||||
         ,    ,      ,      ,      ,    , NO ,  MAC ,TMB7,      ,      ,       ,    ,
 | 
			
		||||
  //`----+----+------+------+------+----+----/ \----+----+------+------+-------+----+----'
 | 
			
		||||
  [L_EDVORAKJP_LOWER] = LAYOUT_wrapper(
 | 
			
		||||
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | 
			
		||||
      XXXXXXX, XXXXXXX, __EDVORAKJP_BRACKET_L__  , XXXXXXX,                      XXXXXXX,  __EDVORAKJP_BRACKET_R__ , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
                       __EDVORAKJP_FUNCTION_L__           ,                                __EDVORAKJP_FUNCTION_R__                  ,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
      KC_PSCR, XXXXXXX,      __EDVORAKJP_PAGE__           ,                                __EDVORAKJP_CURSOR__    , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | 
			
		||||
                __KC_TRNS_x4__          , KC_TRNS, KC_TRNS, XXXXXXX,     KC_MAC,  RC_DEL, KC_TRNS,          __KC_TRNS_x4__
 | 
			
		||||
  //`--------------------------------------------------------------'  `--------------------------------------------------------------'
 | 
			
		||||
  ),
 | 
			
		||||
 | 
			
		||||
  [_RAISE] = LAYOUT_kc(
 | 
			
		||||
  //,----+----+-----+-----+-----+----.           ,----+-----+-----+-----+----+----.
 | 
			
		||||
         ,    ,EXLM , AT  ,HASH ,DLR ,            PERC,CIRC ,AMPR ,ASTR ,    ,    ,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
         , 1  ,LA(2),LG(3),LC(4), 5  ,             6  ,RS(7),RG(8),RA(9), 0  ,    ,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
     PSCR,    ,HOME ,PGDN ,PGUP ,END ,            LEFT,DOWN , UP  ,RGHT ,    ,    ,
 | 
			
		||||
  //|----+----+-----+-----+-----+----+----. ,----+----+-----+-----+-----+----+----|
 | 
			
		||||
         ,    ,     ,     ,     ,    ,WIN ,   NO ,    ,     ,     ,     ,    ,
 | 
			
		||||
  //`----+----+-----+-----+-----+----+----/ \----+----+-----+-----+-----+----+----'
 | 
			
		||||
  [L_EDVORAKJP_RAISE] = LAYOUT_wrapper(
 | 
			
		||||
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | 
			
		||||
      XXXXXXX, XXXXXXX,  __EDVORAKJP_SYMBOL_L__           ,                                __EDVORAKJP_SYMBOL_R__  , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
      XXXXXXX,           __EDVORAKJP_NUMBER_L__           ,                                __EDVORAKJP_NUMBER_R__           , XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
      KC_PSCR, XXXXXXX,      __EDVORAKJP_PAGE__           ,                                __EDVORAKJP_CURSOR__    , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | 
			
		||||
                __KC_TRNS_x4__          , KC_TRNS, KC_TRNS,  KC_WIN,    XXXXXXX, KC_TRNS, KC_TRNS,          __KC_TRNS_x4__
 | 
			
		||||
  //`--------------------------------------------------------------'  `--------------------------------------------------------------'
 | 
			
		||||
  )
 | 
			
		||||
};
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
@ -1,47 +1,48 @@
 | 
			
		||||
#include "helix.h"
 | 
			
		||||
#include "keymap_xrows.h"
 | 
			
		||||
 | 
			
		||||
// clang-format off
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
 | 
			
		||||
  [_EDVORAK] = LAYOUT_kc(
 | 
			
		||||
  //,----+----+-----+-----+-----+----.           ,----+-----+-----+-----+----+----.
 | 
			
		||||
     ESC ,EXLM, AT  ,HASH , DLR ,PERC,            CIRC,AMPR ,ASTR ,LPRN ,RPRN,BSPC,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
     GRV ,QUOT,COMM , DOT ,  Y  , Q  ,             F  ,  G  ,  R  ,  W  , P  ,BSLS,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
     EQL , A  ,LA(O),LG(E),LC(I), U  ,             D  ,RS(T),RG(N),RA(S), M  ,MINS,
 | 
			
		||||
  //|----+----+-----+-----+-----+----+----. ,----+----+-----+-----+-----+----+----|
 | 
			
		||||
     TAB ,SCLN,  X  ,  C  ,  V  , Z  , NO ,   NO , H  ,  J  ,  K  ,  L  , B  ,SLSH,
 | 
			
		||||
  //|----+----+-----+-----+-----+----+----| |----+----+-----+-----+-----+----+----|
 | 
			
		||||
     HOME,PGDN,PGUP , END ,TMB1 ,TMB2,TMB3,  TMB4,TMB5,TMB6 ,LEFT ,DOWN , UP ,RGHT
 | 
			
		||||
  //`----+----+-----+-----+-----+----+----/ \----+----+-----+-----+-----+----+----'
 | 
			
		||||
  [L_EDVORAKJP_BASE] = LAYOUT_wrapper(
 | 
			
		||||
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | 
			
		||||
       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_GRV,            __EDVORAKJP_BASE_L1__           ,                                __EDVORAKJP_BASE_R1__            , KC_BSLS,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
       KC_EQL,            __EDVORAKJP_BASE_L2__           ,                                __EDVORAKJP_BASE_R2__            , KC_MINS,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------+--------.  ,--------+--------+--------+--------+--------+--------+--------|
 | 
			
		||||
       KC_ESC,            __EDVORAKJP_BASE_L3__           , XXXXXXX,    XXXXXXX,           __EDVORAKJP_BASE_R3__            , KC_SLSH,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | 
			
		||||
             __EDVORAKJP_PAGE__         ,  LA_TAB,  LS_SPC,LOWER_TD,   RAISE_TD, RC_BSPC,  RG_ENT,        __EDVORAKJP_CURSOR__
 | 
			
		||||
  //`--------------------------------------------------------------'  `--------------------------------------------------------------'
 | 
			
		||||
  ),
 | 
			
		||||
 | 
			
		||||
  [_LOWER] = LAYOUT_kc(
 | 
			
		||||
  //,----+----+------+------+------+----.           ,----+------+------+-------+----+----.
 | 
			
		||||
     PSCR,    ,      ,      ,      ,    ,                ,      ,      ,       ,    ,    ,
 | 
			
		||||
  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
 | 
			
		||||
         ,    , LCBR , LBRC , LPRN ,    ,                , RPRN , RBRC , RCBR  ,    ,    ,
 | 
			
		||||
  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
 | 
			
		||||
      F1 , F2 ,LA(F3),LG(F4),LC(F5), F6 ,             F7 ,RS(F8),RG(F9),RA(F10),F11 ,F12 ,
 | 
			
		||||
  //|----+----+------+------+------+----+----. ,----+----+------+------+-------+----+----|
 | 
			
		||||
         ,    , HOME , PGDN , PGUP ,END ,    ,      ,LEFT, DOWN ,  UP  , RGHT  ,    ,    ,
 | 
			
		||||
  //|----+----+------+------+------+----+----| |----+----+------+------+-------+----+----|
 | 
			
		||||
         ,    ,      ,      ,      ,    , NO ,  MAC ,TMB7,      ,      ,       ,    ,
 | 
			
		||||
  //`----+----+------+------+------+----+----/ \----+----+------+------+-------+----+----'
 | 
			
		||||
  [L_EDVORAKJP_LOWER] = LAYOUT_wrapper(
 | 
			
		||||
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | 
			
		||||
                                 __KC_TRNS_x6__           ,                                __KC_TRNS_x6__                            ,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
      XXXXXXX, XXXXXXX, __EDVORAKJP_BRACKET_L__  , XXXXXXX,                      XXXXXXX,  __EDVORAKJP_BRACKET_R__ , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
                       __EDVORAKJP_FUNCTION_L__           ,                                __EDVORAKJP_FUNCTION_R__                  ,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------+--------.  ,--------+--------+--------+--------+--------+--------+--------|
 | 
			
		||||
      KC_PSCR, XXXXXXX,      __EDVORAKJP_PAGE__           , KC_TRNS,    KC_TRNS,           __EDVORAKJP_CURSOR__    , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | 
			
		||||
                __KC_TRNS_x4__          , KC_TRNS, KC_TRNS, XXXXXXX,     KC_MAC,  RC_DEL, KC_TRNS,          __KC_TRNS_x4__
 | 
			
		||||
  //`--------------------------------------------------------------'  `--------------------------------------------------------------'
 | 
			
		||||
  ),
 | 
			
		||||
 | 
			
		||||
  [_RAISE] = LAYOUT_kc(
 | 
			
		||||
  //,----+----+-----+-----+-----+----.           ,----+-----+-----+-----+----+----.
 | 
			
		||||
     PSCR,    ,     ,     ,     ,    ,                ,     ,     ,     ,    ,    ,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
         ,    ,EXLM , AT  ,HASH ,DLR ,            PERC,CIRC ,AMPR ,ASTR ,    ,    ,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
         , 1  ,LA(2),LG(3),LC(4), 5  ,             6  ,RS(7),RG(8),RA(9), 0  ,    ,
 | 
			
		||||
  //|----+----+-----+-----+-----+----+----. ,----+----+-----+-----+-----+----+----|
 | 
			
		||||
         ,    ,HOME ,PGDN ,PGUP ,END ,    ,      ,LEFT,DOWN , UP  ,RGHT ,    ,    ,
 | 
			
		||||
  //|----+----+-----+-----+-----+----+----| |----+----+-----+-----+-----+----+----|
 | 
			
		||||
         ,    ,     ,     ,     ,    ,WIN ,   NO ,    ,     ,     ,     ,    ,
 | 
			
		||||
  //`----+----+-----+-----+-----+----+----/ \----+----+-----+-----+-----+----+----'
 | 
			
		||||
  [L_EDVORAKJP_RAISE] = LAYOUT_wrapper(
 | 
			
		||||
  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 | 
			
		||||
                                 __KC_TRNS_x6__           ,                                __KC_TRNS_x6__                            ,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
      XXXXXXX, XXXXXXX,  __EDVORAKJP_SYMBOL_L__           ,                                __EDVORAKJP_SYMBOL_R__  , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 | 
			
		||||
      XXXXXXX,           __EDVORAKJP_NUMBER_L__           ,                                __EDVORAKJP_NUMBER_R__           , XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------+--------.  ,--------+--------+--------+--------+--------+--------+--------|
 | 
			
		||||
      KC_PSCR, XXXXXXX,      __EDVORAKJP_PAGE__           , KC_TRNS,    KC_TRNS,           __EDVORAKJP_CURSOR__    , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 | 
			
		||||
                __KC_TRNS_x4__          , KC_TRNS, KC_TRNS,  KC_WIN,    XXXXXXX, KC_TRNS, KC_TRNS,          __KC_TRNS_x4__
 | 
			
		||||
  //`--------------------------------------------------------------'  `--------------------------------------------------------------'
 | 
			
		||||
  )
 | 
			
		||||
};
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,4 @@
 | 
			
		||||
#ifndef KEYMAP_XROWS_H
 | 
			
		||||
#define KEYMAP_XROWS_H
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "edvorakjp.h"
 | 
			
		||||
/*
 | 
			
		||||
@ -8,14 +7,7 @@
 | 
			
		||||
 * };
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define KC_ KC_TRNS
 | 
			
		||||
#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
 | 
			
		||||
 | 
			
		||||
#define KC_TMB1 KC_LA(TAB)
 | 
			
		||||
#define KC_TMB2 KC_LS(SPC)
 | 
			
		||||
#define KC_TMB3 TD(TD_LOWER) // act as LOWER when hold, as KC_LANG2(=English) when tapped
 | 
			
		||||
#define KC_TMB4 TD(TD_RAISE) // act as RAISE when hold, as KC_LANG1(=Japanese) when tapped
 | 
			
		||||
#define KC_TMB5 KC_RC(BSPC)
 | 
			
		||||
#define KC_TMB6 KC_RG(ENT)
 | 
			
		||||
#define KC_TMB7 KC_RC(DEL)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
#define __KC_TRNS_x4__ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
 | 
			
		||||
#define __KC_TRNS_x6__ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
 | 
			
		||||
 | 
			
		||||
@ -1,72 +1,68 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "oled.h"
 | 
			
		||||
 | 
			
		||||
static void render_logo(struct CharacterMatrix *matrix) {
 | 
			
		||||
#ifdef OLED_DRIVER_ENABLE
 | 
			
		||||
void render_host_led_state(void) {
 | 
			
		||||
    char    led_state_str[24];
 | 
			
		||||
    uint8_t leds = host_keyboard_leds();
 | 
			
		||||
 | 
			
		||||
  static char logo[] = {
 | 
			
		||||
    0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
 | 
			
		||||
    0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
 | 
			
		||||
    0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
 | 
			
		||||
    0};
 | 
			
		||||
  matrix_write(matrix, logo);
 | 
			
		||||
    bool is_num_lock_enabled    = leds & (1 << USB_LED_NUM_LOCK);
 | 
			
		||||
    bool is_caps_lock_enabled   = leds & (1 << USB_LED_CAPS_LOCK);
 | 
			
		||||
    bool is_scroll_lock_enabled = leds & (1 << USB_LED_SCROLL_LOCK);
 | 
			
		||||
 | 
			
		||||
    snprintf(led_state_str, sizeof(led_state_str), "NL:%s CL:%s SL:%s", is_num_lock_enabled ? "on" : "- ", is_caps_lock_enabled ? "on" : "- ", is_scroll_lock_enabled ? "on" : "- ");
 | 
			
		||||
    oled_write(led_state_str, false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_update(struct CharacterMatrix *dest,
 | 
			
		||||
                   const struct CharacterMatrix *source) {
 | 
			
		||||
  if (memcmp(dest->display, source->display, sizeof(dest->display))) {
 | 
			
		||||
    memcpy(dest->display, source->display, sizeof(dest->display));
 | 
			
		||||
    dest->dirty = true;
 | 
			
		||||
  }
 | 
			
		||||
void render_layer_state(void) {
 | 
			
		||||
    char layer_name[17];
 | 
			
		||||
    oled_write_P(PSTR("Layer: "), false);
 | 
			
		||||
 | 
			
		||||
    switch (biton32(layer_state)) {
 | 
			
		||||
        case L_EDVORAKJP_BASE:
 | 
			
		||||
            oled_write_ln_P(PSTR("Default"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case L_EDVORAKJP_LOWER:
 | 
			
		||||
            oled_write_ln_P(PSTR("Lower"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case L_EDVORAKJP_RAISE:
 | 
			
		||||
            oled_write_ln_P(PSTR("Raise"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            snprintf(layer_name, sizeof(layer_name), "Undef-%ld", layer_state);
 | 
			
		||||
            oled_write_ln(layer_name, false);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void render_status(struct CharacterMatrix *matrix) {
 | 
			
		||||
 | 
			
		||||
  // Render to mode icon
 | 
			
		||||
  static char logo[][2][3] = {{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
 | 
			
		||||
  int mode_number = get_enable_kc_lang() ? 0 : 1;
 | 
			
		||||
  matrix_write(matrix, logo[mode_number][0]);
 | 
			
		||||
  matrix_write(matrix, "\n");
 | 
			
		||||
  matrix_write(matrix, logo[mode_number][1]);
 | 
			
		||||
 | 
			
		||||
  // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
 | 
			
		||||
  char buf[40];
 | 
			
		||||
  snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
 | 
			
		||||
  matrix_write_P(matrix, PSTR("\nLayer: "));
 | 
			
		||||
  switch (biton32(layer_state)) {
 | 
			
		||||
    case L_BASE:
 | 
			
		||||
      matrix_write_P(matrix, PSTR("Default"));
 | 
			
		||||
      break;
 | 
			
		||||
    case _RAISE:
 | 
			
		||||
      matrix_write_P(matrix, PSTR("Raise"));
 | 
			
		||||
      break;
 | 
			
		||||
    case _LOWER:
 | 
			
		||||
      matrix_write_P(matrix, PSTR("Lower"));
 | 
			
		||||
      break;
 | 
			
		||||
    default:
 | 
			
		||||
      matrix_write(matrix, buf);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Host Keyboard LED Status
 | 
			
		||||
  char led[40];
 | 
			
		||||
  snprintf(led, sizeof(led), "\n%s %s %s",
 | 
			
		||||
      (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NMLK" : "    ",
 | 
			
		||||
      (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : "    ",
 | 
			
		||||
      (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : "    ");
 | 
			
		||||
  matrix_write(matrix, led);
 | 
			
		||||
void render_logo(void) {
 | 
			
		||||
    static const char helix_logo[] PROGMEM = {0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0};
 | 
			
		||||
    oled_write_P(helix_logo, false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void iota_gfx_task_user(void) {
 | 
			
		||||
  struct CharacterMatrix matrix;
 | 
			
		||||
void render_mode_icon(bool is_windows) {
 | 
			
		||||
    static const char logo[][2][3] = {
 | 
			
		||||
        {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
 | 
			
		||||
        {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
 | 
			
		||||
    };
 | 
			
		||||
    static char mode_icon[10];
 | 
			
		||||
 | 
			
		||||
#if DEBUG_TO_SCREEN
 | 
			
		||||
  if (debug_enable) { return; }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  matrix_clear(&matrix);
 | 
			
		||||
  if (is_master) {
 | 
			
		||||
    render_status(&matrix);
 | 
			
		||||
  } else {
 | 
			
		||||
    render_logo(&matrix);
 | 
			
		||||
  }
 | 
			
		||||
  matrix_update(&display, &matrix);
 | 
			
		||||
    snprintf(mode_icon, sizeof(mode_icon), "%s\n%s ", logo[is_windows][0], logo[is_windows][1]);
 | 
			
		||||
    oled_write(mode_icon, false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
 | 
			
		||||
    // flips the display 180 degrees if offhand
 | 
			
		||||
    return is_keyboard_left() ? rotation : rotation ^ OLED_ROTATION_180;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void oled_task_user(void) {
 | 
			
		||||
    if (is_keyboard_left()) {
 | 
			
		||||
        render_mode_icon(!get_enable_kc_lang());
 | 
			
		||||
        render_layer_state();
 | 
			
		||||
        render_host_led_state();
 | 
			
		||||
    } else {
 | 
			
		||||
        render_logo();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
#endif  // OLED_DRIVER_ENABLE
 | 
			
		||||
 | 
			
		||||
@ -1,19 +1,12 @@
 | 
			
		||||
#ifndef OLED_USER_H
 | 
			
		||||
#define OLED_USER_H
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
 | 
			
		||||
#include "ssd1306.h"
 | 
			
		||||
#include "edvorakjp.h"
 | 
			
		||||
 | 
			
		||||
//assign the right code to your layers for OLED display
 | 
			
		||||
#define L_BASE 0
 | 
			
		||||
 | 
			
		||||
extern uint8_t is_master;
 | 
			
		||||
extern bool japanese_mode;
 | 
			
		||||
 | 
			
		||||
void matrix_update(struct CharacterMatrix *dest,
 | 
			
		||||
                   const struct CharacterMatrix *source);
 | 
			
		||||
void render_status(struct CharacterMatrix *matrix);
 | 
			
		||||
void iota_gfx_task_user(void);
 | 
			
		||||
 | 
			
		||||
#endif // OLED_CONFIG_USER_H
 | 
			
		||||
void            render_host_led_state(void);
 | 
			
		||||
void            render_layer_state(void);
 | 
			
		||||
void            render_logo(void);
 | 
			
		||||
void            render_mode_icon(bool is_windows);
 | 
			
		||||
oled_rotation_t oled_init_user(oled_rotation_t rotation);
 | 
			
		||||
void            oled_task_user(void);
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,7 @@ TAP_DANCE_ENABLE = yes
 | 
			
		||||
# LED_UNDERGLOW_ENABLE = no   # LED underglow (Enable WS2812 RGB underlight.)
 | 
			
		||||
# LED_ANIMATIONS = yes        # LED animations
 | 
			
		||||
# IOS_DEVICE_ENABLE = no      # connect to IOS device (iPad,iPhone)
 | 
			
		||||
OLED_SELECT = core
 | 
			
		||||
 | 
			
		||||
# convert Helix-specific options (that represent combinations of standard options)
 | 
			
		||||
#   into QMK standard options.
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,4 @@
 | 
			
		||||
#ifndef CONFIG_USER_H
 | 
			
		||||
#define CONFIG_USER_H
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/* Use I2C or Serial, not both */
 | 
			
		||||
#define USE_SERIAL
 | 
			
		||||
@ -22,5 +21,3 @@
 | 
			
		||||
#define RGBLIGHT_HUE_STEP 10
 | 
			
		||||
#define RGBLIGHT_SAT_STEP 8
 | 
			
		||||
#define RGBLIGHT_VAL_STEP 8
 | 
			
		||||
 | 
			
		||||
#endif // CONFIG_USER_H
 | 
			
		||||
 | 
			
		||||
@ -7,79 +7,72 @@
 | 
			
		||||
 * };
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define KC_ KC_TRNS
 | 
			
		||||
 | 
			
		||||
#define KC_TMB1 KC_LA(TAB)
 | 
			
		||||
#define KC_TMB2 KC_LS(SPC)
 | 
			
		||||
#define KC_TMB3 TD(TD_LOWER) // act as LOWER when hold, as KC_LANG2(=English) when tapped
 | 
			
		||||
#define KC_TMB4 TD(TD_RAISE) // act as RAISE when hold, as KC_LANG1(=Japanese) when tapped
 | 
			
		||||
#define KC_TMB5 KC_RC(BSPC)
 | 
			
		||||
#define KC_TMB6 KC_RG(ENT)
 | 
			
		||||
#define KC_TMB7 KC_RC(DEL)
 | 
			
		||||
#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
 | 
			
		||||
#define __KC_TRNS_x6__ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
 | 
			
		||||
 | 
			
		||||
// clang-format off
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
 | 
			
		||||
  [_EDVORAK] = LAYOUT_kc(
 | 
			
		||||
  //,----+----+-----+-----+-----+----.           ,----+-----+-----+-----+----+----.
 | 
			
		||||
     GRV ,EXLM, AT  ,HASH , DLR ,PERC,            CIRC,AMPR ,ASTR ,LPRN ,RPRN,BSPC,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
     TAB ,QUOT,COMM , DOT ,  Y  , Q  ,             F  ,  G  ,  R  ,  W  , P  ,BSLS,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
     EQL , A  ,LA(O),LG(E),LC(I), U  ,             D  ,RS(T),RG(N),RA(S), M  ,MINS,
 | 
			
		||||
  //|----+----+-----+-----+-----+----+----. ,----+----+-----+-----+-----+----+----|
 | 
			
		||||
     ESC ,SCLN,  X  ,  C  ,  V  , Z  , NO ,   NO , H  ,  J  ,  K  ,  L  , B  ,SLSH,
 | 
			
		||||
  //`----+----+-----+-----+-----+----+----/ \----+----+-----+-----+-----+----+----'
 | 
			
		||||
                           TMB1,TMB2,TMB3,    TMB4,TMB5,TMB6
 | 
			
		||||
  //                      `----+----+----'   `----+----+----'
 | 
			
		||||
  [L_EDVORAKJP_BASE] = LAYOUT_wrapper(
 | 
			
		||||
  //┌────────┬────────┬────────┬────────┬────────┬────────┐                          ┌────────┬────────┬────────┬────────┬────────┬────────┐
 | 
			
		||||
       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_GRV,            __EDVORAKJP_BASE_L1__           ,                                      __EDVORAKJP_BASE_R1__            , KC_BSLS,
 | 
			
		||||
  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
 | 
			
		||||
       KC_EQL,            __EDVORAKJP_BASE_L2__           ,                                      __EDVORAKJP_BASE_R2__            , KC_MINS,
 | 
			
		||||
  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐        ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
 | 
			
		||||
       KC_ESC,            __EDVORAKJP_BASE_L3__           , XXXXXXX,          XXXXXXX,           __EDVORAKJP_BASE_R3__            , KC_SLSH,
 | 
			
		||||
  //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
 | 
			
		||||
                                      LA_TAB,  LS_SPC,LOWER_TD,                  RAISE_TD, RC_BSPC,  RG_ENT
 | 
			
		||||
                                // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
 | 
			
		||||
  ),
 | 
			
		||||
 | 
			
		||||
  [_LOWER] = LAYOUT_kc(
 | 
			
		||||
  //,----+----+------+------+------+----.           ,----+------+------+-------+----+----.
 | 
			
		||||
         ,    ,      ,      ,      ,    ,                ,      ,      ,       ,    ,    ,
 | 
			
		||||
  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
 | 
			
		||||
         ,    , LCBR , LBRC , LPRN ,    ,                , RPRN , RBRC , RCBR  ,    ,    ,
 | 
			
		||||
  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
 | 
			
		||||
      F1 , F2 ,LA(F3),LG(F4),LC(F5), F6 ,             F7 ,RS(F8),RG(F9),RA(F10),F11 ,F12 ,
 | 
			
		||||
  //|----+----+------+------+------+----+----. ,----+----+------+------+-------+----+----|
 | 
			
		||||
     PSCR,    , HOME , PGDN , PGUP ,END ,    ,      ,LEFT, DOWN ,  UP  , RGHT  ,    ,    ,
 | 
			
		||||
  //`----+----+------+------+------+----+----/ \----+----+------+------+-------+----+----'
 | 
			
		||||
                                  ,    , NO ,    MAC ,TMB7,
 | 
			
		||||
  //                         `----+----+----'   `----+----+----'
 | 
			
		||||
  [L_EDVORAKJP_LOWER] = LAYOUT_wrapper(
 | 
			
		||||
  //┌────────┬────────┬────────┬────────┬────────┬────────┐                          ┌────────┬────────┬────────┬────────┬────────┬────────┐
 | 
			
		||||
                                 __KC_TRNS_x6__           ,                                      __KC_TRNS_x6__                            ,
 | 
			
		||||
  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
 | 
			
		||||
      XXXXXXX, XXXXXXX, __EDVORAKJP_BRACKET_L__  , XXXXXXX,                            XXXXXXX,  __EDVORAKJP_BRACKET_R__ , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
 | 
			
		||||
                       __EDVORAKJP_FUNCTION_L__           ,                                      __EDVORAKJP_FUNCTION_R__                  ,
 | 
			
		||||
  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐        ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
 | 
			
		||||
      KC_PSCR, XXXXXXX,      __EDVORAKJP_PAGE__           , XXXXXXX,          XXXXXXX,           __EDVORAKJP_CURSOR__    , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
 | 
			
		||||
                                     KC_TRNS, KC_TRNS, XXXXXXX,                    KC_MAC,  RC_DEL, KC_TRNS
 | 
			
		||||
                                // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
 | 
			
		||||
  ),
 | 
			
		||||
 | 
			
		||||
  [_RAISE] = LAYOUT_kc(
 | 
			
		||||
  //,----+----+-----+-----+-----+----.           ,----+-----+-----+-----+----+----.
 | 
			
		||||
         ,    ,     ,     ,     ,    ,                ,     ,     ,     ,    ,    ,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
         ,    ,EXLM , AT  ,HASH ,DLR ,            PERC,CIRC ,AMPR ,ASTR ,    ,    ,
 | 
			
		||||
  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
 | 
			
		||||
         , 1  ,LA(2),LG(3),LC(4), 5  ,             6  ,RS(7),RG(8),RA(9), 0  ,    ,
 | 
			
		||||
  //|----+----+-----+-----+-----+----+----. ,----+----+-----+-----+-----+----+----|
 | 
			
		||||
     PSCR,    ,HOME ,PGDN ,PGUP ,END ,    ,      ,LEFT,DOWN , UP  ,RGHT ,    ,    ,
 | 
			
		||||
  //`----+----+-----+-----+-----+----+----/ \----+----+-----+-----+-----+----+----'
 | 
			
		||||
                               ,    ,WIN ,     NO ,    ,
 | 
			
		||||
  //                      `----+----+----'   `----+----+----'
 | 
			
		||||
  [L_EDVORAKJP_RAISE] = LAYOUT_wrapper(
 | 
			
		||||
  //┌────────┬────────┬────────┬────────┬────────┬────────┐                          ┌────────┬────────┬────────┬────────┬────────┬────────┐
 | 
			
		||||
                                 __KC_TRNS_x6__           ,                                      __KC_TRNS_x6__                            ,
 | 
			
		||||
  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
 | 
			
		||||
      XXXXXXX, XXXXXXX,  __EDVORAKJP_SYMBOL_L__           ,                                      __EDVORAKJP_SYMBOL_R__  , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
 | 
			
		||||
      XXXXXXX,           __EDVORAKJP_NUMBER_L__           ,                                      __EDVORAKJP_NUMBER_R__           , XXXXXXX,
 | 
			
		||||
  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐        ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
 | 
			
		||||
      KC_PSCR, XXXXXXX,      __EDVORAKJP_PAGE__           , XXXXXXX,          XXXXXXX,           __EDVORAKJP_CURSOR__    , XXXXXXX, XXXXXXX,
 | 
			
		||||
  //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
 | 
			
		||||
                                     KC_TRNS, KC_TRNS,  KC_WIN,                   XXXXXXX, KC_TRNS, KC_TRNS
 | 
			
		||||
                                // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
 | 
			
		||||
  )
 | 
			
		||||
};
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
void matrix_init_keymap() {
 | 
			
		||||
}
 | 
			
		||||
void matrix_init_keymap() {}
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT
 | 
			
		||||
uint32_t layer_state_set_keymap(uint32_t state) {
 | 
			
		||||
  rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
  switch (biton32(state)) {
 | 
			
		||||
    case _LOWER:
 | 
			
		||||
      rgblight_sethsv_noeeprom_red();
 | 
			
		||||
      break;
 | 
			
		||||
    case _RAISE:
 | 
			
		||||
      rgblight_sethsv_noeeprom_blue();
 | 
			
		||||
      break;
 | 
			
		||||
    default: // for any other layers, or the default layer
 | 
			
		||||
      rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
 | 
			
		||||
      get_japanese_mode() ? rgblight_sethsv_noeeprom_red() : rgblight_sethsv_noeeprom_green();
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  return state;
 | 
			
		||||
    rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
 | 
			
		||||
    switch (biton32(state)) {
 | 
			
		||||
        case L_EDVORAKJP_LOWER:
 | 
			
		||||
            rgblight_sethsv_noeeprom_red();
 | 
			
		||||
            break;
 | 
			
		||||
        case L_EDVORAKJP_RAISE:
 | 
			
		||||
            rgblight_sethsv_noeeprom_green();
 | 
			
		||||
            break;
 | 
			
		||||
        default:  // for any other layers, or the default layer
 | 
			
		||||
            rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
 | 
			
		||||
            rgblight_sethsv_red();
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    return state;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -1,32 +1,22 @@
 | 
			
		||||
#include "edvorakjp.h"
 | 
			
		||||
 | 
			
		||||
void matrix_init_user(void) {
 | 
			
		||||
  edvorakjp_status_init();
 | 
			
		||||
  matrix_init_keymap();
 | 
			
		||||
    edvorakjp_status_init();
 | 
			
		||||
    matrix_init_keymap();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__attribute__ ((weak))
 | 
			
		||||
void matrix_init_keymap() {}
 | 
			
		||||
__attribute__((weak)) void matrix_init_keymap() {}
 | 
			
		||||
 | 
			
		||||
uint32_t layer_state_set_user(uint32_t state) {
 | 
			
		||||
  state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
 | 
			
		||||
  return layer_state_set_keymap(state);
 | 
			
		||||
    state = update_tri_layer_state(state, L_EDVORAKJP_LOWER, L_EDVORAKJP_RAISE, L_EDVORAKJP_ADJUST);
 | 
			
		||||
    return layer_state_set_keymap(state);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__attribute__ ((weak))
 | 
			
		||||
uint32_t layer_state_set_keymap(uint32_t state) {
 | 
			
		||||
  return state;
 | 
			
		||||
}
 | 
			
		||||
__attribute__((weak)) uint32_t layer_state_set_keymap(uint32_t state) { return state; }
 | 
			
		||||
 | 
			
		||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
  return process_record_keymap(keycode, record) &&\
 | 
			
		||||
         process_record_edvorakjp_swap_scln(keycode, record) &&\
 | 
			
		||||
         process_record_edvorakjp_config(keycode, record) &&\
 | 
			
		||||
         process_record_layer(keycode, record) &&\
 | 
			
		||||
         process_record_ime(keycode, record);
 | 
			
		||||
    bool process_record_user_result = process_record_keymap(keycode, record) && process_record_edvorakjp_swap_scln(keycode, record) && process_record_edvorakjp_config(keycode, record) && process_record_layer(keycode, record) && process_record_ime(keycode, record);
 | 
			
		||||
    return process_record_user_result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
__attribute__ ((weak))
 | 
			
		||||
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
 | 
			
		||||
 | 
			
		||||
@ -1,54 +1,76 @@
 | 
			
		||||
#ifndef EDVORAKJP
 | 
			
		||||
#define EDVORAKJP
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "quantum.h"
 | 
			
		||||
#include "action_layer.h"
 | 
			
		||||
 | 
			
		||||
#define EECONFIG_EDVORAK (uint8_t *)20
 | 
			
		||||
 | 
			
		||||
// clang-format off
 | 
			
		||||
#define __EDVORAKJP_BASE_L1__               KC_QUOTE,      KC_COMMA,               KC_DOT,           KC_Y,          KC_Q
 | 
			
		||||
#define __EDVORAKJP_BASE_L2__                   KC_A,  LALT_T(KC_O),         LGUI_T(KC_E),   LCTL_T(KC_I),          KC_U
 | 
			
		||||
#define __EDVORAKJP_BASE_L3__              KC_SCOLON,          KC_X,                 KC_C,           KC_V,          KC_Z
 | 
			
		||||
 | 
			
		||||
#define __EDVORAKJP_BASE_R1__                   KC_F,          KC_G,                 KC_R,           KC_W,          KC_P
 | 
			
		||||
#define __EDVORAKJP_BASE_R2__                   KC_D,  RSFT_T(KC_T),         RGUI_T(KC_N),   RALT_T(KC_S),          KC_M
 | 
			
		||||
#define __EDVORAKJP_BASE_R3__                   KC_H,          KC_J,                 KC_K,           KC_L,          KC_B
 | 
			
		||||
 | 
			
		||||
#define __EDVORAKJP_NUMBER_L__                  KC_1,  LALT_T(KC_2),         LGUI_T(KC_3),   LCTL_T(KC_4),          KC_5
 | 
			
		||||
#define __EDVORAKJP_NUMBER_R__                  KC_6,  RSFT_T(KC_7),         RGUI_T(KC_8),   RALT_T(KC_9),          KC_0
 | 
			
		||||
 | 
			
		||||
#define __EDVORAKJP_FUNCTION_L__               KC_F1,         KC_F2,        LALT_T(KC_F3),  LGUI_T(KC_F4), LCTL_T(KC_F5),  KC_F6
 | 
			
		||||
#define __EDVORAKJP_FUNCTION_R__               KC_F7, RSFT_T(KC_F8),        RGUI_T(KC_F9), RALT_T(KC_F10),        KC_F11, KC_F12
 | 
			
		||||
 | 
			
		||||
#define __EDVORAKJP_SYMBOL_L__            KC_EXCLAIM,         KC_AT,              KC_HASH,      KC_DOLLAR
 | 
			
		||||
#define __EDVORAKJP_SYMBOL_R__            KC_PERCENT, KC_CIRCUMFLEX,         KC_AMPERSAND,    KC_ASTERISK
 | 
			
		||||
 | 
			
		||||
#define __EDVORAKJP_BRACKET_L__  KC_LEFT_CURLY_BRACE,   KC_LBRACKET,        KC_LEFT_PAREN
 | 
			
		||||
#define __EDVORAKJP_BRACKET_R__       KC_RIGHT_PAREN,   KC_RBRACKET, KC_RIGHT_CURLY_BRACE
 | 
			
		||||
 | 
			
		||||
#define __EDVORAKJP_PAGE__                   KC_HOME,     KC_PGDOWN,              KC_PGUP,         KC_END
 | 
			
		||||
#define __EDVORAKJP_CURSOR__                 KC_LEFT,       KC_DOWN,                KC_UP,       KC_RIGHT
 | 
			
		||||
 | 
			
		||||
#define LA_TAB  LALT_T(KC_TAB)
 | 
			
		||||
#define LS_SPC  LSFT_T(KC_SPACE)
 | 
			
		||||
#define RC_BSPC RCTL_T(KC_BSPACE)
 | 
			
		||||
#define RC_DEL  RCTL_T(KC_DELETE)
 | 
			
		||||
#define RG_ENT  RGUI_T(KC_ENTER)
 | 
			
		||||
 | 
			
		||||
#define LOWER_TD TD(TD_EDVORAKJP_LOWER)
 | 
			
		||||
#define RAISE_TD TD(TD_EDVORAKJP_RAISE)
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
extern keymap_config_t keymap_config;
 | 
			
		||||
 | 
			
		||||
enum edvorakjp_layers {
 | 
			
		||||
  _EDVORAK = 0,
 | 
			
		||||
  _LOWER,
 | 
			
		||||
  _RAISE,
 | 
			
		||||
  _ADJUST,
 | 
			
		||||
  _EXTRA,
 | 
			
		||||
    L_EDVORAKJP_BASE = 0,
 | 
			
		||||
    L_EDVORAKJP_LOWER,
 | 
			
		||||
    L_EDVORAKJP_RAISE,
 | 
			
		||||
    L_EDVORAKJP_ADJUST,
 | 
			
		||||
    L_EDVORAKJP_EXTRA,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum edvorakjp_keycodes {
 | 
			
		||||
  EDVORAK = SAFE_RANGE,
 | 
			
		||||
  LOWER,
 | 
			
		||||
  RAISE,
 | 
			
		||||
  KC_MAC,
 | 
			
		||||
  KC_WIN,
 | 
			
		||||
  KC_JPN,
 | 
			
		||||
  KC_ENG,
 | 
			
		||||
  NEW_SAFE_RANGE
 | 
			
		||||
    KC_EDVORAKJP_LOWER = SAFE_RANGE,
 | 
			
		||||
    KC_EDVORAKJP_RAISE,
 | 
			
		||||
    KC_MAC,
 | 
			
		||||
    KC_WIN,
 | 
			
		||||
    KC_JPN,
 | 
			
		||||
    KC_ENG,
 | 
			
		||||
    NEW_SAFE_RANGE,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define KC_LC(k) LCTL_T(KC_##k)
 | 
			
		||||
#define KC_LS(k) LSFT_T(KC_##k)
 | 
			
		||||
#define KC_LA(k) LALT_T(KC_##k)
 | 
			
		||||
#define KC_LG(k) LGUI_T(KC_##k)
 | 
			
		||||
#define KC_RC(k) RCTL_T(KC_##k)
 | 
			
		||||
#define KC_RS(k) RSFT_T(KC_##k)
 | 
			
		||||
#define KC_RG(k) RGUI_T(KC_##k)
 | 
			
		||||
#define KC_RA(k) RALT_T(KC_##k)
 | 
			
		||||
 | 
			
		||||
enum tap_dance_code {
 | 
			
		||||
  TD_LOWER = 0,
 | 
			
		||||
  TD_RAISE
 | 
			
		||||
    TD_EDVORAKJP_LOWER = 0,
 | 
			
		||||
    TD_EDVORAKJP_RAISE,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// base
 | 
			
		||||
void dvorakj_layer_off(void);
 | 
			
		||||
void matrix_init_user(void);
 | 
			
		||||
void matrix_init_keymap(void);
 | 
			
		||||
void     matrix_init_user(void);
 | 
			
		||||
void     matrix_init_keymap(void);
 | 
			
		||||
uint32_t layer_state_set_user(uint32_t state);
 | 
			
		||||
uint32_t layer_state_set_keymap(uint32_t state);
 | 
			
		||||
bool process_record_user(uint16_t keycode, keyrecord_t *record);
 | 
			
		||||
bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
 | 
			
		||||
bool     process_record_user(uint16_t keycode, keyrecord_t *record);
 | 
			
		||||
bool     process_record_keymap(uint16_t keycode, keyrecord_t *record);
 | 
			
		||||
 | 
			
		||||
// status
 | 
			
		||||
void edvorakjp_status_init(void);
 | 
			
		||||
@ -66,5 +88,3 @@ bool process_record_edvorakjp_swap_scln(uint16_t keycode, keyrecord_t *record);
 | 
			
		||||
bool process_record_edvorakjp_config(uint16_t keycode, keyrecord_t *record);
 | 
			
		||||
bool process_record_layer(uint16_t keycode, keyrecord_t *record);
 | 
			
		||||
bool process_record_ime(uint16_t keycode, keyrecord_t *record);
 | 
			
		||||
 | 
			
		||||
#endif // EDVORAKJP
 | 
			
		||||
 | 
			
		||||
@ -9,81 +9,81 @@ static uint16_t time_on_pressed;
 | 
			
		||||
 */
 | 
			
		||||
bool process_record_edvorakjp_swap_scln(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
#ifdef SWAP_SCLN
 | 
			
		||||
  static const uint8_t shift_bits = MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT);
 | 
			
		||||
  static uint8_t last_mods_status;
 | 
			
		||||
  if (keycode == KC_SCLN) {
 | 
			
		||||
    if (record->event.pressed) {
 | 
			
		||||
      last_mods_status = get_mods();
 | 
			
		||||
    static const uint8_t shift_bits = MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT);
 | 
			
		||||
    static uint8_t       last_mods_status;
 | 
			
		||||
    if (keycode == KC_SCLN) {
 | 
			
		||||
        if (record->event.pressed) {
 | 
			
		||||
            last_mods_status = get_mods();
 | 
			
		||||
 | 
			
		||||
      // invert shift_bits
 | 
			
		||||
      if (last_mods_status & shift_bits) {
 | 
			
		||||
        set_mods(last_mods_status & ~shift_bits);
 | 
			
		||||
      } else {
 | 
			
		||||
        set_mods(last_mods_status | MOD_BIT(KC_LSFT));
 | 
			
		||||
      }
 | 
			
		||||
    } else {
 | 
			
		||||
      set_mods(last_mods_status);
 | 
			
		||||
      last_mods_status = 0;
 | 
			
		||||
            // invert shift_bits
 | 
			
		||||
            if (last_mods_status & shift_bits) {
 | 
			
		||||
                set_mods(last_mods_status & ~shift_bits);
 | 
			
		||||
            } else {
 | 
			
		||||
                set_mods(last_mods_status | MOD_BIT(KC_LSFT));
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            set_mods(last_mods_status);
 | 
			
		||||
            last_mods_status = 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
#endif
 | 
			
		||||
  return true;
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_edvorakjp_config(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
  switch (keycode) {
 | 
			
		||||
    case KC_MAC:
 | 
			
		||||
    case KC_WIN:
 | 
			
		||||
      if (record->event.pressed) {
 | 
			
		||||
        set_enable_kc_lang(keycode == KC_MAC);
 | 
			
		||||
      }
 | 
			
		||||
      return false;
 | 
			
		||||
  }
 | 
			
		||||
  return true;
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
        case KC_MAC:
 | 
			
		||||
        case KC_WIN:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                set_enable_kc_lang(keycode == KC_MAC);
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_layer(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
#if TAP_DANCE_ENABLE != yes
 | 
			
		||||
  switch (keycode) {
 | 
			
		||||
    case LOWER:
 | 
			
		||||
      if (record->event.pressed) {
 | 
			
		||||
        layer_on(_LOWER);
 | 
			
		||||
        time_on_pressed = record->event.time;
 | 
			
		||||
      } else {
 | 
			
		||||
        layer_off(_LOWER);
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
        case KC_EDVORAKJP_LOWER:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                layer_on(L_EDVORAKJP_LOWER);
 | 
			
		||||
                time_on_pressed = record->event.time;
 | 
			
		||||
            } else {
 | 
			
		||||
                layer_off(L_EDVORAKJP_LOWER);
 | 
			
		||||
 | 
			
		||||
        if (TIMER_DIFF_16(record->event.time, time_on_pressed) < TAPPING_TERM) {
 | 
			
		||||
          set_japanese_mode(false);
 | 
			
		||||
        }
 | 
			
		||||
        time_on_pressed = 0;
 | 
			
		||||
      }
 | 
			
		||||
      return false;
 | 
			
		||||
    case RAISE:
 | 
			
		||||
      if (record->event.pressed) {
 | 
			
		||||
        layer_on(_RAISE);
 | 
			
		||||
        time_on_pressed = record->event.time;
 | 
			
		||||
      } else {
 | 
			
		||||
        layer_off(_RAISE);
 | 
			
		||||
                if (TIMER_DIFF_16(record->event.time, time_on_pressed) < TAPPING_TERM) {
 | 
			
		||||
                    set_japanese_mode(false);
 | 
			
		||||
                }
 | 
			
		||||
                time_on_pressed = 0;
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        case KC_EDVORAKJP_RAISE:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                layer_on(L_EDVORAKJP_RAISE);
 | 
			
		||||
                time_on_pressed = record->event.time;
 | 
			
		||||
            } else {
 | 
			
		||||
                layer_off(L_EDVORAKJP_RAISE);
 | 
			
		||||
 | 
			
		||||
        if (TIMER_DIFF_16(record->event.time, time_on_pressed) < TAPPING_TERM) {
 | 
			
		||||
          set_japanese_mode(true);
 | 
			
		||||
        }
 | 
			
		||||
        time_on_pressed = 0;
 | 
			
		||||
      }
 | 
			
		||||
      return false;
 | 
			
		||||
  }
 | 
			
		||||
                if (TIMER_DIFF_16(record->event.time, time_on_pressed) < TAPPING_TERM) {
 | 
			
		||||
                    set_japanese_mode(true);
 | 
			
		||||
                }
 | 
			
		||||
                time_on_pressed = 0;
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
  return true;
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_ime(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
  switch (keycode) {
 | 
			
		||||
    case KC_JPN:
 | 
			
		||||
    case KC_ENG:
 | 
			
		||||
      if (record->event.pressed) {
 | 
			
		||||
        set_japanese_mode(keycode == KC_JPN);
 | 
			
		||||
      }
 | 
			
		||||
      return false;
 | 
			
		||||
  }
 | 
			
		||||
  return true;
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
        case KC_JPN:
 | 
			
		||||
        case KC_ENG:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                set_japanese_mode(keycode == KC_JPN);
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -2,63 +2,55 @@
 | 
			
		||||
#include "edvorakjp.h"
 | 
			
		||||
 | 
			
		||||
typedef union {
 | 
			
		||||
  uint8_t raw;
 | 
			
		||||
  struct {
 | 
			
		||||
    bool enable_kc_lang;  // for macOS
 | 
			
		||||
  };
 | 
			
		||||
    uint8_t raw;
 | 
			
		||||
    struct {
 | 
			
		||||
        bool enable_kc_lang;  // for macOS
 | 
			
		||||
    };
 | 
			
		||||
} edvorakjp_config_t;
 | 
			
		||||
static edvorakjp_config_t edvorakjp_config;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  bool japanese_mode;
 | 
			
		||||
    bool japanese_mode;
 | 
			
		||||
} edvorakjp_state_t;
 | 
			
		||||
static edvorakjp_state_t edvorakjp_state;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * private methods
 | 
			
		||||
 */
 | 
			
		||||
uint8_t eeconfig_read_edvorakjp(void) {
 | 
			
		||||
  return eeprom_read_byte(EECONFIG_EDVORAK);
 | 
			
		||||
}
 | 
			
		||||
uint8_t eeconfig_read_edvorakjp(void) { return eeprom_read_byte(EECONFIG_EDVORAK); }
 | 
			
		||||
 | 
			
		||||
void eeconfig_update_edvorakjp(uint8_t val) {
 | 
			
		||||
  eeprom_update_byte(EECONFIG_EDVORAK, val);
 | 
			
		||||
}
 | 
			
		||||
void eeconfig_update_edvorakjp(uint8_t val) { eeprom_update_byte(EECONFIG_EDVORAK, val); }
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * public methods
 | 
			
		||||
 */
 | 
			
		||||
void edvorakjp_status_init(void) {
 | 
			
		||||
  edvorakjp_state.japanese_mode = false;
 | 
			
		||||
  edvorakjp_config.raw = eeconfig_read_edvorakjp();
 | 
			
		||||
    edvorakjp_state.japanese_mode = false;
 | 
			
		||||
    edvorakjp_config.raw          = eeconfig_read_edvorakjp();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool get_enable_kc_lang(void) {
 | 
			
		||||
  return edvorakjp_config.enable_kc_lang;
 | 
			
		||||
}
 | 
			
		||||
bool get_enable_kc_lang(void) { return edvorakjp_config.enable_kc_lang; }
 | 
			
		||||
 | 
			
		||||
void set_enable_kc_lang(bool new_state) {
 | 
			
		||||
  edvorakjp_config.enable_kc_lang = new_state;
 | 
			
		||||
  eeconfig_update_edvorakjp(edvorakjp_config.raw);
 | 
			
		||||
    edvorakjp_config.enable_kc_lang = new_state;
 | 
			
		||||
    eeconfig_update_edvorakjp(edvorakjp_config.raw);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool get_japanese_mode(void) {
 | 
			
		||||
  return edvorakjp_state.japanese_mode;
 | 
			
		||||
}
 | 
			
		||||
bool get_japanese_mode(void) { return edvorakjp_state.japanese_mode; }
 | 
			
		||||
 | 
			
		||||
void set_japanese_mode(bool new_state) {
 | 
			
		||||
  edvorakjp_state.japanese_mode = new_state;
 | 
			
		||||
  if (edvorakjp_state.japanese_mode) {
 | 
			
		||||
    if (edvorakjp_config.enable_kc_lang) {
 | 
			
		||||
      SEND_STRING(SS_TAP(X_LANG1));
 | 
			
		||||
    edvorakjp_state.japanese_mode = new_state;
 | 
			
		||||
    if (edvorakjp_state.japanese_mode) {
 | 
			
		||||
        if (edvorakjp_config.enable_kc_lang) {
 | 
			
		||||
            SEND_STRING(SS_TAP(X_LANG1));
 | 
			
		||||
        } else {
 | 
			
		||||
            SEND_STRING(SS_LALT("`"));
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
      SEND_STRING(SS_LALT("`"));
 | 
			
		||||
        if (edvorakjp_config.enable_kc_lang) {
 | 
			
		||||
            SEND_STRING(SS_TAP(X_LANG2));
 | 
			
		||||
        } else {
 | 
			
		||||
            SEND_STRING(SS_LALT("`"));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    if (edvorakjp_config.enable_kc_lang) {
 | 
			
		||||
      SEND_STRING(SS_TAP(X_LANG2));
 | 
			
		||||
    } else {
 | 
			
		||||
      SEND_STRING(SS_LALT("`"));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -2,72 +2,68 @@
 | 
			
		||||
#include "process_keycode/process_tap_dance.h"
 | 
			
		||||
 | 
			
		||||
enum tap_state {
 | 
			
		||||
  NONE = 0,
 | 
			
		||||
  SINGLE_TAP = 1,
 | 
			
		||||
  DOUBLE_TAP = 2,
 | 
			
		||||
  HOLD
 | 
			
		||||
    NONE       = 0,
 | 
			
		||||
    SINGLE_TAP = 1,
 | 
			
		||||
    DOUBLE_TAP = 2,
 | 
			
		||||
    HOLD,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  uint8_t lower;
 | 
			
		||||
  uint8_t raise;
 | 
			
		||||
    uint8_t lower;
 | 
			
		||||
    uint8_t raise;
 | 
			
		||||
} td_status_t;
 | 
			
		||||
static td_status_t td_status = {NONE, NONE};
 | 
			
		||||
 | 
			
		||||
int cur_dance(qk_tap_dance_state_t *state) {
 | 
			
		||||
  if (state->interrupted || !state->pressed) {
 | 
			
		||||
    return state->count == 1 ? SINGLE_TAP : DOUBLE_TAP;
 | 
			
		||||
  } else {
 | 
			
		||||
    return HOLD;
 | 
			
		||||
  }
 | 
			
		||||
uint8_t cur_dance(qk_tap_dance_state_t *state) {
 | 
			
		||||
    if (state->interrupted || !state->pressed) {
 | 
			
		||||
        return state->count == 1 ? SINGLE_TAP : DOUBLE_TAP;
 | 
			
		||||
    } else {
 | 
			
		||||
        return HOLD;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void td_lower_finished(qk_tap_dance_state_t *state, void *user_data) {
 | 
			
		||||
  td_status.lower = cur_dance(state);
 | 
			
		||||
  switch(td_status.lower) {
 | 
			
		||||
    case SINGLE_TAP:
 | 
			
		||||
      set_japanese_mode(false);
 | 
			
		||||
      break;
 | 
			
		||||
    case DOUBLE_TAP:
 | 
			
		||||
      set_japanese_mode(false);
 | 
			
		||||
      register_code(KC_ESC);
 | 
			
		||||
      break;
 | 
			
		||||
    case HOLD:
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  layer_on(_LOWER);
 | 
			
		||||
    td_status.lower = cur_dance(state);
 | 
			
		||||
    switch (td_status.lower) {
 | 
			
		||||
        case SINGLE_TAP:
 | 
			
		||||
            set_japanese_mode(false);
 | 
			
		||||
            break;
 | 
			
		||||
        case DOUBLE_TAP:
 | 
			
		||||
            set_japanese_mode(false);
 | 
			
		||||
            register_code(KC_ESC);
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    layer_on(L_EDVORAKJP_LOWER);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void td_lower_reset(qk_tap_dance_state_t *state, void *user_data) {
 | 
			
		||||
  if (td_status.lower == DOUBLE_TAP) {
 | 
			
		||||
    unregister_code(KC_ESC);
 | 
			
		||||
  }
 | 
			
		||||
  layer_off(_LOWER);
 | 
			
		||||
  td_status.lower = NONE;
 | 
			
		||||
    switch (td_status.lower) {
 | 
			
		||||
        case DOUBLE_TAP:
 | 
			
		||||
            unregister_code(KC_ESC);
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    layer_off(L_EDVORAKJP_LOWER);
 | 
			
		||||
    td_status.lower = NONE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void td_raise_finished(qk_tap_dance_state_t *state, void *user_data) {
 | 
			
		||||
  td_status.raise = cur_dance(state);
 | 
			
		||||
  switch(td_status.raise) {
 | 
			
		||||
    case DOUBLE_TAP:
 | 
			
		||||
      // same as single
 | 
			
		||||
    case SINGLE_TAP:
 | 
			
		||||
      set_japanese_mode(true);
 | 
			
		||||
      break;
 | 
			
		||||
    case HOLD:
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  layer_on(_RAISE);
 | 
			
		||||
    td_status.raise = cur_dance(state);
 | 
			
		||||
    switch (td_status.raise) {
 | 
			
		||||
        case DOUBLE_TAP:
 | 
			
		||||
            // same as single
 | 
			
		||||
        case SINGLE_TAP:
 | 
			
		||||
            set_japanese_mode(true);
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    layer_on(L_EDVORAKJP_RAISE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void td_raise_reset(qk_tap_dance_state_t *state, void *user_data) {
 | 
			
		||||
  layer_off(_RAISE);
 | 
			
		||||
  td_status.raise = NONE;
 | 
			
		||||
    layer_off(L_EDVORAKJP_RAISE);
 | 
			
		||||
    td_status.raise = NONE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
qk_tap_dance_action_t tap_dance_actions[] = {
 | 
			
		||||
  [TD_LOWER] =
 | 
			
		||||
    ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, td_lower_finished, td_lower_reset, 100),
 | 
			
		||||
  [TD_RAISE] =
 | 
			
		||||
    ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, td_raise_finished, td_raise_reset, 100)
 | 
			
		||||
    [TD_EDVORAKJP_LOWER] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, td_lower_finished, td_lower_reset, 150),
 | 
			
		||||
    [TD_EDVORAKJP_RAISE] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, td_raise_finished, td_raise_reset, 150),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user