[Keymap] Remove LAYOUT_kc macros from edvorakjp keymaps (#12217)
This commit is contained in:
parent
93e8a401df
commit
3dbb7f261d
20 changed files with 525 additions and 627 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue