5 uint16_t time_on_pressed;
7 edvorakjp_config_t edvorakjp_config;
9 uint8_t eeconfig_read_edvorakjp(void) {
10 return eeprom_read_byte(EECONFIG_EDVORAK);
13 void eeconfig_update_edvorakjp(uint8_t val) {
14 eeprom_update_byte(EECONFIG_EDVORAK, val);
17 void dvorakj_layer_off(void) {
18 layer_off(_EDVORAKJ1);
19 layer_off(_EDVORAKJ2);
22 void update_japanese_mode(bool new_state) {
23 japanese_mode = new_state;
25 if (edvorakjp_config.enable_kc_lang) {
26 SEND_STRING(SS_TAP(X_LANG1));
28 SEND_STRING(SS_LALT("`"));
32 if (edvorakjp_config.enable_kc_lang) {
33 SEND_STRING(SS_TAP(X_LANG2));
35 SEND_STRING(SS_LALT("`"));
40 void matrix_init_user(void) {
41 japanese_mode = false;
43 edvorakjp_config.raw = eeconfig_read_edvorakjp();
48 __attribute__ ((weak))
49 void matrix_init_keymap() {}
51 uint32_t layer_state_set_user(uint32_t state) {
52 state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
53 return layer_state_set_keymap(state);
56 __attribute__ ((weak))
57 uint32_t layer_state_set_keymap(uint32_t state) {
62 * Each process_record_* methods defined here are
63 * return false if handle edvorak_keycodes, or return true others.
65 __attribute__ ((weak))
66 bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
70 bool process_record_edvorakjp_ext(uint16_t keycode, keyrecord_t *record) {
71 if (!(edvorakjp_config.enable_jp_extra_layer &&\
72 (default_layer_state == 1UL<<_EDVORAK) &&\
74 record->event.pressed)) {
79 // layer_on(J1) or layer_on(J2) are defined based on key positions.
81 // right hand's left side w/o N
91 register_code(keycode);
92 unregister_code(keycode);
97 biton32(layer_state) == _EDVORAK ? layer_on(_EDVORAKJ1) : dvorakj_layer_off();
98 register_code(keycode);
99 unregister_code(keycode);
102 // left hand and right hand's right side
115 layer_on(_EDVORAKJ2);
116 register_code(keycode);
117 unregister_code(keycode);
121 // vowel keys, symbol keys and modifier keys
124 // combination vowel keys
150 // AOEIU and other (symbol, modifier) keys
156 bool process_record_edvorakjp_config(uint16_t keycode, keyrecord_t *record) {
159 edvorakjp_config.enable_kc_lang = true;
160 eeconfig_update_edvorakjp(edvorakjp_config.raw);
163 edvorakjp_config.enable_kc_lang = false;
164 eeconfig_update_edvorakjp(edvorakjp_config.raw);
167 edvorakjp_config.enable_jp_extra_layer = true;
168 eeconfig_update_edvorakjp(edvorakjp_config.raw);
171 edvorakjp_config.enable_jp_extra_layer = false;
172 eeconfig_update_edvorakjp(edvorakjp_config.raw);
178 bool process_record_layer(uint16_t keycode, keyrecord_t *record) {
181 if (record->event.pressed) {
182 set_single_persistent_default_layer(_EDVORAK);
186 if (record->event.pressed) {
188 set_single_persistent_default_layer(_QWERTY);
192 if (record->event.pressed) {
194 time_on_pressed = record->event.time;
198 if (TIMER_DIFF_16(record->event.time, time_on_pressed) < TAPPING_TERM) {
199 update_japanese_mode(false);
205 if (record->event.pressed) {
207 time_on_pressed = record->event.time;
211 if (TIMER_DIFF_16(record->event.time, time_on_pressed) < TAPPING_TERM) {
212 update_japanese_mode(true);
222 bool process_record_ime(uint16_t keycode, keyrecord_t *record) {
225 if (record->event.pressed) {
226 update_japanese_mode(true);
230 if (record->event.pressed) {
231 update_japanese_mode(false);
239 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
241 return process_record_keymap(keycode, record) &&\
242 process_record_edvorakjp_ext(keycode, record) &&\
243 process_record_edvorakjp_config(keycode, record) &&\
244 process_record_layer(keycode, record) &&\
245 process_record_ime(keycode, record);