2018-11-26 17:50:45 +00:00
|
|
|
#include "edvorakjp.h"
|
|
|
|
|
|
|
|
#if TAP_DANCE_ENABLE != yes
|
|
|
|
static uint16_t time_on_pressed;
|
|
|
|
#endif
|
|
|
|
/*
|
|
|
|
* Each process_record_* methods defined here are
|
|
|
|
* return false if handle edvorak_keycodes, or return true others.
|
|
|
|
*/
|
|
|
|
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();
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool process_record_layer(uint16_t keycode, keyrecord_t *record) {
|
|
|
|
#if TAP_DANCE_ENABLE != yes
|
2019-03-09 16:22:21 +00:00
|
|
|
switch (keycode) {
|
2018-11-26 17:50:45 +00:00
|
|
|
case LOWER:
|
|
|
|
if (record->event.pressed) {
|
|
|
|
layer_on(_LOWER);
|
|
|
|
time_on_pressed = record->event.time;
|
|
|
|
} else {
|
|
|
|
layer_off(_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(true);
|
|
|
|
}
|
|
|
|
time_on_pressed = 0;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
2019-03-09 16:22:21 +00:00
|
|
|
#endif
|
2018-11-26 17:50:45 +00:00
|
|
|
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;
|
|
|
|
}
|