summaryrefslogtreecommitdiff
path: root/users/edvorakjp
diff options
context:
space:
mode:
Diffstat (limited to 'users/edvorakjp')
-rw-r--r--users/edvorakjp/edvorakjp.c6
-rw-r--r--users/edvorakjp/edvorakjp.h26
-rw-r--r--users/edvorakjp/edvorakjp_process_record.c129
-rw-r--r--users/edvorakjp/edvorakjp_status.c13
-rw-r--r--users/edvorakjp/edvorakjp_tap_dance.c36
-rw-r--r--users/edvorakjp/readme.md54
6 files changed, 38 insertions, 226 deletions
diff --git a/users/edvorakjp/edvorakjp.c b/users/edvorakjp/edvorakjp.c
index 1ac6107942..892ce4be3b 100644
--- a/users/edvorakjp/edvorakjp.c
+++ b/users/edvorakjp/edvorakjp.c
@@ -1,10 +1,5 @@
#include "edvorakjp.h"
-void dvorakj_layer_off(void) {
- layer_off(_EDVORAKJ1);
- layer_off(_EDVORAKJ2);
-}
-
void matrix_init_user(void) {
edvorakjp_status_init();
matrix_init_keymap();
@@ -25,7 +20,6 @@ uint32_t layer_state_set_keymap(uint32_t state) {
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return process_record_keymap(keycode, record) &&\
- process_record_edvorakjp_ext(keycode, record) &&\
process_record_edvorakjp_swap_scln(keycode, record) &&\
process_record_edvorakjp_config(keycode, record) &&\
process_record_layer(keycode, record) &&\
diff --git a/users/edvorakjp/edvorakjp.h b/users/edvorakjp/edvorakjp.h
index e781bf2378..688cdeffb3 100644
--- a/users/edvorakjp/edvorakjp.h
+++ b/users/edvorakjp/edvorakjp.h
@@ -10,9 +10,6 @@ extern keymap_config_t keymap_config;
enum edvorakjp_layers {
_EDVORAK = 0,
- _EDVORAKJ1,
- _EDVORAKJ2,
- _QWERTY,
_LOWER,
_RAISE,
_ADJUST,
@@ -21,26 +18,24 @@ enum edvorakjp_layers {
enum edvorakjp_keycodes {
EDVORAK = SAFE_RANGE,
- QWERTY,
LOWER,
RAISE,
KC_MAC,
KC_WIN,
- KC_EXTON,
- KC_EXTOFF,
KC_JPN,
KC_ENG,
- KC_AI,
- KC_OU,
- KC_EI,
- KC_ANN,
- KC_ONN,
- KC_ENN,
- KC_INN,
- KC_UNN,
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
@@ -57,8 +52,6 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
// status
void edvorakjp_status_init(void);
-bool get_enable_jp_extra_layer(void);
-void set_enable_jp_extra_layer(bool new_state);
bool get_enable_kc_lang(void);
void set_enable_kc_lang(bool new_state);
bool get_japanese_mode(void);
@@ -69,7 +62,6 @@ void set_japanese_mode(bool new_state);
* return false if processed, or return true if not processed.
* You can add your original macros in process_record_keymap() in keymap.c.
*/
-bool process_record_edvorakjp_ext(uint16_t keycode, keyrecord_t *record);
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);
diff --git a/users/edvorakjp/edvorakjp_process_record.c b/users/edvorakjp/edvorakjp_process_record.c
index 2dcdab2a25..ecc8db9363 100644
--- a/users/edvorakjp/edvorakjp_process_record.c
+++ b/users/edvorakjp/edvorakjp_process_record.c
@@ -7,114 +7,6 @@ static uint16_t time_on_pressed;
* Each process_record_* methods defined here are
* return false if handle edvorak_keycodes, or return true others.
*/
-bool process_record_edvorakjp_ext(uint16_t keycode, keyrecord_t *record) {
- if (!(default_layer_state == 1UL<<_EDVORAK &&
- get_enable_jp_extra_layer() && get_japanese_mode())) {
- return true;
- }
-
- // consonant keys
- // layer_on(J1) or layer_on(J2) are defined based on key positions.
- switch (keycode) {
- // right hand's left side w/o N
- case KC_F:
- case KC_G:
- case KC_R:
- case KC_D:
- case KC_T:
- case KC_B:
- case KC_H:
- case KC_J:
- if (record->event.pressed) {
- layer_on(_EDVORAKJ1);
- }
- return true;
-
- // N: toggle layer
- case KC_N:
- if (record->event.pressed) {
- biton32(layer_state) == _EDVORAK ? layer_on(_EDVORAKJ1) : dvorakj_layer_off();
- }
- return true;
-
- // left hand up and right hand's right side
- case KC_Y:
- case KC_P:
- case KC_W:
- case KC_Q:
- case KC_S:
- case KC_M:
- case KC_K:
- case KC_L:
- if (record->event.pressed) {
- layer_on(_EDVORAKJ2);
- }
- return true;
- // left hand down
- // If return true, QMK sends keycode in new layer,
- // but these keys are only available in old layer.
- case KC_X:
- case KC_C:
- case KC_V:
- case KC_Z:
- if (record->event.pressed) {
- layer_on(_EDVORAKJ2);
- tap_code(keycode);
- }
- return false;
- }
-
- // vowel keys, symbol keys and modifier keys
- if (record->event.pressed) {
- dvorakj_layer_off();
- }
- switch (keycode) {
- // combination vowel keys
- case KC_AI:
- if (record->event.pressed) {
- SEND_STRING("ai");
- }
- return false;
- case KC_OU:
- if (record->event.pressed) {
- SEND_STRING("ou");
- }
- return false;
- case KC_EI:
- if (record->event.pressed) {
- SEND_STRING("ei");
- }
- return false;
- case KC_ANN:
- if (record->event.pressed) {
- SEND_STRING("ann");
- }
- return false;
- case KC_ONN:
- if (record->event.pressed) {
- SEND_STRING("onn");
- }
- return false;
- case KC_ENN:
- if (record->event.pressed) {
- SEND_STRING("enn");
- }
- return false;
- case KC_INN:
- if (record->event.pressed) {
- SEND_STRING("inn");
- }
- return false;
- case KC_UNN:
- if (record->event.pressed) {
- SEND_STRING("unn");
- }
- return false;
- }
- // AOEIU and other (symbol, modifier) keys
- return true;
-}
-
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);
@@ -146,30 +38,13 @@ bool process_record_edvorakjp_config(uint16_t keycode, keyrecord_t *record) {
set_enable_kc_lang(keycode == KC_MAC);
}
return false;
- case KC_EXTON:
- case KC_EXTOFF:
- if (record->event.pressed) {
- set_enable_jp_extra_layer(keycode == KC_EXTON);
- }
- return false;
}
return true;
}
bool process_record_layer(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case EDVORAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_EDVORAK);
- }
- return false;
- case QWERTY:
- if (record->event.pressed) {
- dvorakj_layer_off();
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
#if TAP_DANCE_ENABLE != yes
+ switch (keycode) {
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
@@ -196,8 +71,8 @@ bool process_record_layer(uint16_t keycode, keyrecord_t *record) {
time_on_pressed = 0;
}
return false;
-#endif
}
+#endif
return true;
}
diff --git a/users/edvorakjp/edvorakjp_status.c b/users/edvorakjp/edvorakjp_status.c
index a60c8d853b..128fc3bd28 100644
--- a/users/edvorakjp/edvorakjp_status.c
+++ b/users/edvorakjp/edvorakjp_status.c
@@ -4,8 +4,7 @@
typedef union {
uint8_t raw;
struct {
- bool enable_jp_extra_layer : 1;
- bool enable_kc_lang : 1; // for macOS
+ bool enable_kc_lang; // for macOS
};
} edvorakjp_config_t;
static edvorakjp_config_t edvorakjp_config;
@@ -34,15 +33,6 @@ void edvorakjp_status_init(void) {
edvorakjp_config.raw = eeconfig_read_edvorakjp();
}
-bool get_enable_jp_extra_layer(void) {
- return edvorakjp_config.enable_jp_extra_layer;
-}
-
-void set_enable_jp_extra_layer(bool new_state) {
- edvorakjp_config.enable_jp_extra_layer = new_state;
- eeconfig_update_edvorakjp(edvorakjp_config.raw);
-}
-
bool get_enable_kc_lang(void) {
return edvorakjp_config.enable_kc_lang;
}
@@ -65,7 +55,6 @@ void set_japanese_mode(bool new_state) {
SEND_STRING(SS_LALT("`"));
}
} else {
- dvorakj_layer_off();
if (edvorakjp_config.enable_kc_lang) {
SEND_STRING(SS_TAP(X_LANG2));
} else {
diff --git a/users/edvorakjp/edvorakjp_tap_dance.c b/users/edvorakjp/edvorakjp_tap_dance.c
index 62c0c100a2..d5369f9266 100644
--- a/users/edvorakjp/edvorakjp_tap_dance.c
+++ b/users/edvorakjp/edvorakjp_tap_dance.c
@@ -8,8 +8,11 @@ enum tap_state {
HOLD
};
-static int td_status_lower = NONE;
-static int td_status_raise = NONE;
+typedef struct {
+ 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) {
@@ -20,14 +23,14 @@ int cur_dance(qk_tap_dance_state_t *state) {
}
void td_lower_finished(qk_tap_dance_state_t *state, void *user_data) {
- td_status_lower = cur_dance(state);
- switch(td_status_lower) {
+ td_status.lower = cur_dance(state);
+ switch(td_status.lower) {
case SINGLE_TAP:
set_japanese_mode(false);
- register_code(KC_ESC);
break;
case DOUBLE_TAP:
set_japanese_mode(false);
+ register_code(KC_ESC);
break;
case HOLD:
break;
@@ -36,18 +39,19 @@ void td_lower_finished(qk_tap_dance_state_t *state, void *user_data) {
}
void td_lower_reset(qk_tap_dance_state_t *state, void *user_data) {
- if (td_status_lower == SINGLE_TAP) {
+ if (td_status.lower == DOUBLE_TAP) {
unregister_code(KC_ESC);
}
layer_off(_LOWER);
- td_status_lower = NONE;
+ 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 SINGLE_TAP:
+ 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:
@@ -58,14 +62,12 @@ void td_raise_finished(qk_tap_dance_state_t *state, void *user_data) {
void td_raise_reset(qk_tap_dance_state_t *state, void *user_data) {
layer_off(_RAISE);
- td_status_raise = NONE;
+ 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, TAPPING_TERM * 1.5
- ),
- [TD_RAISE] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(
- NULL, td_raise_finished, td_raise_reset, TAPPING_TERM * 1.5
- )
+ [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)
};
diff --git a/users/edvorakjp/readme.md b/users/edvorakjp/readme.md
index 077ba4abdc..679d84b3de 100644
--- a/users/edvorakjp/readme.md
+++ b/users/edvorakjp/readme.md
@@ -5,49 +5,20 @@ epaew's Enhanced Dvorak layout for Japanese Programmer
## Layout overview
This is a sample. You can swap any symbol keys and modifier keys.
-- Base layer (for ansi layout)
+- Basic layout (for ansi)
```
//+----+----+----+----+----+----+----+----+----+----+----+----+----+---------+
` , ! , @ , # , $ , % , ^ , & , * , ( , ) , [ , ] , BSPC ,
//+----+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+-------+
- TAB , ' , , , . , Y , P , F , G , R , W , Q , / , = , \ ,
+ TAB , ' , , , . , Y , Q , F , G , R , W , P , / , = , \ ,
//+------++---++---++---++---++---++---++---++---++---++---++---++---+-------+
CAPS , A , O , E , I , U , D , T , N , S , M , - , ENT ,
//+-------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-----------+
- LSFT , ; , X , C , V , Z , B , H , J , K , L , RSFT ,
+ LSFT , : , X , C , V , Z , H , J , K , L , B , RSFT ,
//+------+--+---++----++---+----+----+----+----+-+--+---++----++------+------+
LCTL , LGUI , LALT , SPACE , RALT , RGUI , MENU , RCTL
//+------+------+------+-------------------------+------+------+------+------+
```
-- Base layer (for iso layout)
- - Two C keys are placed, it's on purpose.
-```
- //+----+----+----+----+----+----+----+----+----+----+----+----+----+---------+
- ` , ! , @ , # , $ , % , ^ , & , * , ( , ) , [ , ] , BSPC ,
- //+----+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+-------+
- TAB , ' , , , . , Y , P , F , G , R , W , C , / , = ,
- //+------++---++---++---++---++---++---++---++---++---++---++---++---++
- CAPS , A , O , E , I , U , D , T , N , S , M , ; , - , ENT ,
- //+-------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+------+
- LSFT , Q , X , C , V , Z , B , H , J , K , L , \ , RSFT ,
- //+------+--+---++----++---+----+----+----+----+-+--+---++----++---+--+------+
- LCTL , LGUI , LALT , SPACE , RALT , RGUI , MENU , RCTL
- //+------+------+------+-------------------------+------+------+------+------+
-```
-- Additional layer (common, blanks are transparent)
-```
- //+----+----+----+----+----+----+----+----+----+----+----+----+----+---------+
- , , , , , , , , , , , , , ,
- //+----+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+-------+
- , AI , OU , EI , , , , , , , , , , ,
- //+------++---++---++---++---++---++---++---++---++---++---++---++---+-------+
- , A , O , E , I , U , , Y1 , N , Y2 , , , ,
- //+-------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-----------+
- ,ANN ,ONN ,ENN ,INN ,UNN , , , , , , ,
- //+------+--+---++----++---+----+----+----+----+-+--+---++----++------+------+
- , , , , , , ,
- //+------+------+------+-------------------------+------+------+------+------+
-```
And you can see [my iris keyboard layout](../../keyboards/iris/keymaps/edvorakjp/keymap.c) for sample implementation, too.
@@ -57,36 +28,25 @@ This is a sample. You can swap any symbol keys and modifier keys.
- IME 切り替えキー
- 長押しでレイヤー切り替え、短押しでIME切り替え
- macOS(かな/英数)、Windows(Alt+\`)の両方に対応
- - DvorakJP(<http://www7.plala.or.jp/dvorakjp/>)を参考にした日本語入力用キーの導入
- - 拗音入力用のYキーを追加配置
- - 二重母音入力用のキー(AI, OU, EI)
- - 撥音入力用のキー(ANN, ONN, ENN, INN, UNN)
- - いずれかの子音を押下することで Additional layer が出現し、いずれかの母音を押下することで Base layer に戻ります(※1※2)
- - ※1促音の入力に使うため、また連続で同じ指での打鍵を減らすために、
- FGRDTNBHJ を押下した場合はy1が、それ以外の子音を押下した場合はy2が出現しません
- - ※2撥音の入力のため、nを2連打すると、Base layerに戻ります
- Define some custom keys for typing Japanese
- IME switching
- act as LOWER/RAISE when hold, act as IME switching when tapped
- for macOS(かな/英数), for Windows(Alt+\`)
- - oneshot combination keys, inspired from DvorakJP (<http://www7.plala.or.jp/dvorakjp/>)
- - additional Y key to enter a contracted sound
- - diphthong keys (AI, OU, EI)
- - syllabic nasal (ANN, ONN, ENN, INN, UNN)
- - Additional layer is appeared when you taps any consonant keys, and disappeared when you taps any diphthong keys.
## for Programmer
- Dvorak 配列をベースに、ショートカットでよく利用される XCV は QWERTY 配列の位置を維持
- 一部にVimユーザ用のキー配置を実施
- HJKL キーを横並びで配置
- - Shift押下時と非押下時で、";"キーの挙動を入れ替え(`config.h` 内で `#define SWAP_SCLN` の宣言が必要です)
+ - Shift押下時と非押下時で、";"キーの挙動を入れ替え
+ (`config.h` 内で `#define SWAP_SCLN` の宣言が必要です)
- デフォルトレイヤーには、数字キーの代わりに記号 `!@#$%^&*()` を配置
- mainly based on Dvorak layout, but XCV is available in the same position of QWERTY layout
- for Vim users
- HJKL is lining side by side
- - swap the ";" key behavior. i.e. send ":" normally and send ";" when you hold shift. (need `#define SWAP_SCLN` in your `config.h`)
+ - swap the ";" key behavior. i.e. send ":" normally and send ";" when you hold shift.
+ (need `#define SWAP_SCLN` in your `config.h`)
- we can type `!@#$%^&*()` keys without shift keys in base layer
## License