diff options
| -rw-r--r-- | keyboards/iris/keymaps/edvorakjp/config.h | 30 | ||||
| -rw-r--r-- | keyboards/iris/keymaps/edvorakjp/keymap.c | 171 | ||||
| -rw-r--r-- | keyboards/iris/keymaps/edvorakjp/readme.md | 21 | ||||
| -rw-r--r-- | keyboards/iris/keymaps/edvorakjp/rules.mk | 16 | ||||
| -rw-r--r-- | users/edvorakjp/edvorakjp.c | 246 | ||||
| -rw-r--r-- | users/edvorakjp/edvorakjp.h | 74 | ||||
| -rw-r--r-- | users/edvorakjp/readme.md | 103 | ||||
| -rw-r--r-- | users/edvorakjp/rules.mk | 1 |
8 files changed, 662 insertions, 0 deletions
diff --git a/keyboards/iris/keymaps/edvorakjp/config.h b/keyboards/iris/keymaps/edvorakjp/config.h new file mode 100644 index 000000000..cc24ffc31 --- /dev/null +++ b/keyboards/iris/keymaps/edvorakjp/config.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | #ifndef CONFIG_USER_H | ||
| 2 | #define CONFIG_USER_H | ||
| 3 | |||
| 4 | #include "config_common.h" | ||
| 5 | |||
| 6 | /* Use I2C or Serial, not both */ | ||
| 7 | |||
| 8 | #define USE_SERIAL | ||
| 9 | // #define USE_I2C | ||
| 10 | |||
| 11 | /* Select hand configuration */ | ||
| 12 | |||
| 13 | #define MASTER_LEFT | ||
| 14 | // #define MASTER_RIGHT | ||
| 15 | // #define EE_HANDS | ||
| 16 | |||
| 17 | #undef RGBLED_NUM | ||
| 18 | #define RGBLIGHT_ANIMATIONS | ||
| 19 | #define RGBLED_NUM 10 | ||
| 20 | #define RGBLIGHT_HUE_STEP 10 | ||
| 21 | #define RGBLIGHT_SAT_STEP 8 | ||
| 22 | #define RGBLIGHT_VAL_STEP 8 | ||
| 23 | #define RGBLIGHT_LIMIT_VAL 100 | ||
| 24 | |||
| 25 | #define MOUSEKEY_WHEEL_MAX_SPEED 10 | ||
| 26 | #define MOUSEKEY_WHEEL_TIME_TO_MAX 20 | ||
| 27 | |||
| 28 | #define TAPPING_TERM 120 | ||
| 29 | |||
| 30 | #endif | ||
diff --git a/keyboards/iris/keymaps/edvorakjp/keymap.c b/keyboards/iris/keymaps/edvorakjp/keymap.c new file mode 100644 index 000000000..286aa3b5b --- /dev/null +++ b/keyboards/iris/keymaps/edvorakjp/keymap.c | |||
| @@ -0,0 +1,171 @@ | |||
| 1 | #include QMK_KEYBOARD_H | ||
| 2 | #include "action_layer.h" | ||
| 3 | #include "eeconfig.h" | ||
| 4 | |||
| 5 | #include "edvorakjp.h" | ||
| 6 | |||
| 7 | extern edvorakjp_config_t edvorakjp_config; | ||
| 8 | |||
| 9 | enum custom_keycodes { | ||
| 10 | KC_LOCK = NEW_SAFE_RANGE, | ||
| 11 | }; | ||
| 12 | |||
| 13 | #define KC_ KC_TRNS | ||
| 14 | |||
| 15 | #define KC_TMB1 LGUI_T(KC_TAB) | ||
| 16 | #define KC_TMB2 LSFT_T(KC_SPC) | ||
| 17 | #define KC_TMB3 LOWER // act as LOWER when hold, as KC_LANG2(=English) when tapped | ||
| 18 | #define KC_TMB4 LCTL_T(KC_ESC) | ||
| 19 | #define KC_TMB5 RSFT_T(KC_DEL) | ||
| 20 | #define KC_TMB6 RAISE // act as RAISE when hold, as KC_LANG1(=Japanese) when tapped | ||
| 21 | #define KC_TMB7 RCTL_T(KC_BSPC) | ||
| 22 | #define KC_TMB8 RALT_T(KC_ENT) | ||
| 23 | #define KC_TMB9 LGUI(KC_TAB) | ||
| 24 | |||
| 25 | #define KC_RST RESET | ||
| 26 | #define KC_DBUG DEBUG | ||
| 27 | #define KC_RTOG RGB_TOG | ||
| 28 | #define KC_EDJP EDVORAK | ||
| 29 | #define KC_QWER QWERTY | ||
| 30 | |||
| 31 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
| 32 | |||
| 33 | [_EDVORAK] = LAYOUT_kc( | ||
| 34 | //,----+----+----+----+----+----. ,----+----+----+----+----+----. | ||
| 35 | GRV ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,BSPC, | ||
| 36 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 37 | LBRC,RBRC,COMM,DOT , P , Y , F , G , R , W , Q ,BSLS, | ||
| 38 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 39 | EQL , A , O , E , I , U , D , T , N , S , M ,MINS, | ||
| 40 | //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| | ||
| 41 | QUOT,SCLN, X , C , V , Z ,TMB4, TMB5, B , H , J , K , L ,SLSH, | ||
| 42 | //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----' | ||
| 43 | TMB1,TMB2,TMB3, TMB6,TMB7,TMB8 | ||
| 44 | // `----+----+----' `----+----+----' | ||
| 45 | ), | ||
| 46 | |||
| 47 | [_EDVORAKJ1] = LAYOUT_kc( | ||
| 48 | //,----+----+----+----+----+----. ,----+----+----+----+----+----. | ||
| 49 | , , , , , , , , , , , , | ||
| 50 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 51 | , AI , OU , EI , , , , , , , , , | ||
| 52 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 53 | , , , , , , , , , Y , , , | ||
| 54 | //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| | ||
| 55 | ,ANN ,ONN ,ENN ,INN ,UNN , , , , , , , , , | ||
| 56 | //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----' | ||
| 57 | , , , , , | ||
| 58 | // `----+----+----' `----+----+----' | ||
| 59 | ), | ||
| 60 | |||
| 61 | [_EDVORAKJ2] = LAYOUT_kc( | ||
| 62 | //,----+----+----+----+----+----. ,----+----+----+----+----+----. | ||
| 63 | , , , , , , , , , , , , | ||
| 64 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 65 | , AI , OU , EI , , , , , , , , , | ||
| 66 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 67 | , , , , , , , Y , , , , , | ||
| 68 | //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| | ||
| 69 | ,ANN ,ONN ,ENN ,INN ,UNN , , , , , , , , , | ||
| 70 | //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----' | ||
| 71 | , , , , , | ||
| 72 | // `----+----+----' `----+----+----' | ||
| 73 | ), | ||
| 74 | |||
| 75 | [_QWERTY] = LAYOUT_kc( | ||
| 76 | //,----+----+----+----+----+----. ,----+----+----+----+----+----. | ||
| 77 | GRV ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,BSPC, | ||
| 78 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 79 | EQL , Q , W , E , R , T , Y , U , I , O , P ,MINS, | ||
| 80 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 81 | LBRC, A , S , D , F , G , H , J , K , L ,SCLN,QUOT, | ||
| 82 | //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| | ||
| 83 | RBRC, Z , X , C , V , B , , , N , M ,COMM,DOT ,SLSH,BSLS, | ||
| 84 | //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----' | ||
| 85 | , , , , , | ||
| 86 | // `----+----+----' `----+----+----' | ||
| 87 | ), | ||
| 88 | |||
| 89 | [_LOWER] = LAYOUT_kc( | ||
| 90 | //,----+----+----+----+----+----. ,----+----+----+----+----+----. | ||
| 91 | , , , , , , , ,SLSH,ASTR, , , | ||
| 92 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 93 | , ,BTN4,WH_U,BTN5, , , 7 , 8 , 9 ,MINS, , | ||
| 94 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 95 | , ,WH_L,WH_D,WH_R, , , 4 , 5 , 6 ,PLUS, , | ||
| 96 | //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| | ||
| 97 | , ,BTN1,BTN3,BTN2, , , , , 1 , 2 , 3 , , , | ||
| 98 | //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----' | ||
| 99 | , , , , 0 , | ||
| 100 | // `----+----+----' `----+----+----' | ||
| 101 | ), | ||
| 102 | |||
| 103 | [_RAISE] = LAYOUT_kc( | ||
| 104 | //,----+----+----+----+----+----. ,----+----+----+----+----+----. | ||
| 105 | , , , , , , , , , , , , | ||
| 106 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 107 | F1 , F2 , F3 , F4 , F5 ,LCBR, RCBR, , , , , , | ||
| 108 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 109 | F6 , F7 , F8 , F9 ,F10 ,LPRN, RPRN,HOME,PGDN,PGUP,END , , | ||
| 110 | //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| | ||
| 111 | F11 ,F12 ,PSCR,SLCK,PAUS,LBRC,LOCK, ,RBRC,LEFT,DOWN, UP ,RGHT, , | ||
| 112 | //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----' | ||
| 113 | TMB9, , , , , | ||
| 114 | // `----+----+----' `----+----+----' | ||
| 115 | ), | ||
| 116 | |||
| 117 | [_ADJUST] = LAYOUT_kc( | ||
| 118 | //,----+----+----+----+----+----. ,----+----+----+----+----+----. | ||
| 119 | , , , , , , , , , , , , | ||
| 120 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 121 | , , , ,EXTOFF, , ,EXTON, , , , , | ||
| 122 | //|----+----+----+----+----+----| |----+----+----+----+----+----| | ||
| 123 | ,RST ,DBUG,RTOG,WIN , , ,MAC ,QWER,EDJP, , , | ||
| 124 | //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----| | ||
| 125 | , , , , , , , , , , , , , , | ||
| 126 | //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----' | ||
| 127 | , , , , , | ||
| 128 | // `----+----+----' `----+----+----' | ||
| 129 | ) | ||
| 130 | }; | ||
| 131 | |||
| 132 | void matrix_init_keymap() { | ||
| 133 | } | ||
| 134 | |||
| 135 | bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||
| 136 | switch(keycode) { | ||
| 137 | case KC_LOCK: | ||
| 138 | if (record->event.pressed) { | ||
| 139 | if (edvorakjp_config.enable_kc_lang) { | ||
| 140 | SEND_STRING( SS_LCTRL(SS_LSFT(SS_TAP(X_POWER))) ); | ||
| 141 | } else { | ||
| 142 | SEND_STRING( SS_LGUI("L") ); | ||
| 143 | } | ||
| 144 | } | ||
| 145 | return false; | ||
| 146 | } | ||
| 147 | return true; | ||
| 148 | } | ||
| 149 | |||
| 150 | uint32_t layer_state_set_keymap(uint32_t state) { | ||
| 151 | switch (biton32(state)) { | ||
| 152 | case _EDVORAKJ1: | ||
| 153 | case _EDVORAKJ2: | ||
| 154 | // _EDVORAKJ1 & J2 are same colored | ||
| 155 | rgblight_setrgb (0xFF, 0xFF, 0xFF); | ||
| 156 | break; | ||
| 157 | case _LOWER: | ||
| 158 | rgblight_setrgb (0xFF, 0x00, 0x00); | ||
| 159 | break; | ||
| 160 | case _RAISE: | ||
| 161 | rgblight_setrgb (0x00, 0x00, 0xFF); | ||
| 162 | break; | ||
| 163 | case _ADJUST: | ||
| 164 | rgblight_setrgb (0x00, 0xFF, 0x00); | ||
| 165 | break; | ||
| 166 | default: // for any other layers, or the default layer | ||
| 167 | rgblight_mode(28); | ||
| 168 | break; | ||
| 169 | } | ||
| 170 | return state; | ||
| 171 | } | ||
diff --git a/keyboards/iris/keymaps/edvorakjp/readme.md b/keyboards/iris/keymaps/edvorakjp/readme.md new file mode 100644 index 000000000..e5d3eab11 --- /dev/null +++ b/keyboards/iris/keymaps/edvorakjp/readme.md | |||
| @@ -0,0 +1,21 @@ | |||
| 1 | # edvorakjp | ||
| 2 | |||
| 3 | Epaew's Enhanced Dvorak layout for Japanese Programmer | ||
| 4 | see [here](../../../../users/edvorakjp) for more informations. | ||
| 5 | |||
| 6 | ## License | ||
| 7 | |||
| 8 | Copyright 2018 Ryo Maeda epaew.333@gmail.com @epaew | ||
| 9 | |||
| 10 | This program is free software: you can redistribute it and/or modify | ||
| 11 | it under the terms of the GNU General Public License as published by | ||
| 12 | the Free Software Foundation, either version 2 of the License, or | ||
| 13 | (at your option) any later version. | ||
| 14 | |||
| 15 | This program is distributed in the hope that it will be useful, | ||
| 16 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 18 | GNU General Public License for more details. | ||
| 19 | |||
| 20 | You should have received a copy of the GNU General Public License | ||
| 21 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
diff --git a/keyboards/iris/keymaps/edvorakjp/rules.mk b/keyboards/iris/keymaps/edvorakjp/rules.mk new file mode 100644 index 000000000..1c88fbc7b --- /dev/null +++ b/keyboards/iris/keymaps/edvorakjp/rules.mk | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | # Build Options | ||
| 2 | # change to "no" to disable the options, or define them in the Makefile in | ||
| 3 | # the appropriate keymap folder that will get included automatically | ||
| 4 | # | ||
| 5 | BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) | ||
| 6 | MOUSEKEY_ENABLE = yes # Mouse keys(+4700) | ||
| 7 | EXTRAKEY_ENABLE = yes # Audio control and System control(+450) | ||
| 8 | CONSOLE_ENABLE = no # Console for debug(+400) | ||
| 9 | COMMAND_ENABLE = no # Commands for debug and configuration | ||
| 10 | NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | ||
| 11 | BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
| 12 | MIDI_ENABLE = no # MIDI controls | ||
| 13 | AUDIO_ENABLE = no # Audio output on port C6 | ||
| 14 | UNICODE_ENABLE = no # Unicode | ||
| 15 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | ||
| 16 | RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. | ||
diff --git a/users/edvorakjp/edvorakjp.c b/users/edvorakjp/edvorakjp.c new file mode 100644 index 000000000..cff1a123e --- /dev/null +++ b/users/edvorakjp/edvorakjp.c | |||
| @@ -0,0 +1,246 @@ | |||
| 1 | #include "eeprom.h" | ||
| 2 | #include "edvorakjp.h" | ||
| 3 | |||
| 4 | bool japanese_mode; | ||
| 5 | uint16_t time_on_pressed; | ||
| 6 | |||
| 7 | edvorakjp_config_t edvorakjp_config; | ||
| 8 | |||
| 9 | uint8_t eeconfig_read_edvorakjp(void) { | ||
| 10 | return eeprom_read_byte(EECONFIG_EDVORAK); | ||
| 11 | } | ||
| 12 | |||
| 13 | void eeconfig_update_edvorakjp(uint8_t val) { | ||
| 14 | eeprom_update_byte(EECONFIG_EDVORAK, val); | ||
| 15 | } | ||
| 16 | |||
| 17 | void dvorakj_layer_off(void) { | ||
| 18 | layer_off(_EDVORAKJ1); | ||
| 19 | layer_off(_EDVORAKJ2); | ||
| 20 | } | ||
| 21 | |||
| 22 | void update_japanese_mode(bool new_state) { | ||
| 23 | japanese_mode = new_state; | ||
| 24 | if (japanese_mode) { | ||
| 25 | if (edvorakjp_config.enable_kc_lang) { | ||
| 26 | SEND_STRING(SS_TAP(X_LANG1)); | ||
| 27 | } else { | ||
| 28 | SEND_STRING(SS_LALT("`")); | ||
| 29 | } | ||
| 30 | } else { | ||
| 31 | dvorakj_layer_off(); | ||
| 32 | if (edvorakjp_config.enable_kc_lang) { | ||
| 33 | SEND_STRING(SS_TAP(X_LANG2)); | ||
| 34 | } else { | ||
| 35 | SEND_STRING(SS_LALT("`")); | ||
| 36 | } | ||
| 37 | } | ||
| 38 | } | ||
| 39 | |||
| 40 | void matrix_init_user(void) { | ||
| 41 | japanese_mode = false; | ||
| 42 | time_on_pressed = 0; | ||
| 43 | edvorakjp_config.raw = eeconfig_read_edvorakjp(); | ||
| 44 | |||
| 45 | matrix_init_keymap(); | ||
| 46 | } | ||
| 47 | |||
| 48 | __attribute__ ((weak)) | ||
| 49 | void matrix_init_keymap() {} | ||
| 50 | |||
| 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); | ||
| 54 | } | ||
| 55 | |||
| 56 | __attribute__ ((weak)) | ||
| 57 | uint32_t layer_state_set_keymap(uint32_t state) { | ||
| 58 | return state; | ||
| 59 | } | ||
| 60 | |||
| 61 | /* | ||
| 62 | * Each process_record_* methods defined here are | ||
| 63 | * return false if handle edvorak_keycodes, or return true others. | ||
| 64 | */ | ||
| 65 | __attribute__ ((weak)) | ||
| 66 | bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||
| 67 | return true; | ||
| 68 | } | ||
| 69 | |||
| 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) &&\ | ||
| 73 | japanese_mode &&\ | ||
| 74 | record->event.pressed)) { | ||
| 75 | return true; | ||
| 76 | } | ||
| 77 | |||
| 78 | // consonant keys | ||
| 79 | // layer_on(J1) or layer_on(J2) are defined based on key positions. | ||
| 80 | switch (keycode) { | ||
| 81 | // right hand's left side w/o N | ||
| 82 | case KC_F: | ||
| 83 | case KC_G: | ||
| 84 | case KC_R: | ||
| 85 | case KC_D: | ||
| 86 | case KC_T: | ||
| 87 | case KC_B: | ||
| 88 | case KC_H: | ||
| 89 | case KC_J: | ||
| 90 | layer_on(_EDVORAKJ1); | ||
| 91 | register_code(keycode); | ||
| 92 | unregister_code(keycode); | ||
| 93 | return false; | ||
| 94 | |||
| 95 | // N: toggle layer | ||
| 96 | case KC_N: | ||
| 97 | biton32(layer_state) == _EDVORAK ? layer_on(_EDVORAKJ1) : dvorakj_layer_off(); | ||
| 98 | register_code(keycode); | ||
| 99 | unregister_code(keycode); | ||
| 100 | return false; | ||
| 101 | |||
| 102 | // left hand and right hand's right side | ||
| 103 | case KC_X: | ||
| 104 | case KC_C: | ||
| 105 | case KC_V: | ||
| 106 | case KC_Z: | ||
| 107 | case KC_P: | ||
| 108 | case KC_Y: | ||
| 109 | case KC_W: | ||
| 110 | case KC_Q: | ||
| 111 | case KC_S: | ||
| 112 | case KC_M: | ||
| 113 | case KC_K: | ||
| 114 | case KC_L: | ||
| 115 | layer_on(_EDVORAKJ2); | ||
| 116 | register_code(keycode); | ||
| 117 | unregister_code(keycode); | ||
| 118 | return false; | ||
| 119 | } | ||
| 120 | |||
| 121 | // vowel keys, symbol keys and modifier keys | ||
| 122 | dvorakj_layer_off(); | ||
| 123 | switch (keycode) { | ||
| 124 | // combination vowel keys | ||
| 125 | case KC_AI: | ||
| 126 | SEND_STRING("ai"); | ||
| 127 | return false; | ||
| 128 | case KC_OU: | ||
| 129 | SEND_STRING("ou"); | ||
| 130 | return false; | ||
| 131 | case KC_EI: | ||
| 132 | SEND_STRING("ei"); | ||
| 133 | return false; | ||
| 134 | case KC_ANN: | ||
| 135 | SEND_STRING("ann"); | ||
| 136 | return false; | ||
| 137 | case KC_ONN: | ||
| 138 | SEND_STRING("onn"); | ||
| 139 | return false; | ||
| 140 | case KC_ENN: | ||
| 141 | SEND_STRING("enn"); | ||
| 142 | return false; | ||
| 143 | case KC_INN: | ||
| 144 | SEND_STRING("inn"); | ||
| 145 | return false; | ||
| 146 | case KC_UNN: | ||
| 147 | SEND_STRING("unn"); | ||
| 148 | return false; | ||
| 149 | |||
| 150 | // AOEIU and other (symbol, modifier) keys | ||
| 151 | default: | ||
| 152 | return true; | ||
| 153 | } | ||
| 154 | } | ||
| 155 | |||
| 156 | bool process_record_edvorakjp_config(uint16_t keycode, keyrecord_t *record) { | ||
| 157 | switch (keycode) { | ||
| 158 | case KC_MAC: | ||
| 159 | edvorakjp_config.enable_kc_lang = true; | ||
| 160 | eeconfig_update_edvorakjp(edvorakjp_config.raw); | ||
| 161 | return false; | ||
| 162 | case KC_WIN: | ||
| 163 | edvorakjp_config.enable_kc_lang = false; | ||
| 164 | eeconfig_update_edvorakjp(edvorakjp_config.raw); | ||
| 165 | return false; | ||
| 166 | case KC_EXTON: | ||
| 167 | edvorakjp_config.enable_jp_extra_layer = true; | ||
| 168 | eeconfig_update_edvorakjp(edvorakjp_config.raw); | ||
| 169 | return false; | ||
| 170 | case KC_EXTOFF: | ||
| 171 | edvorakjp_config.enable_jp_extra_layer = false; | ||
| 172 | eeconfig_update_edvorakjp(edvorakjp_config.raw); | ||
| 173 | return false; | ||
| 174 | } | ||
| 175 | return true; | ||
| 176 | } | ||
| 177 | |||
| 178 | bool process_record_layer(uint16_t keycode, keyrecord_t *record) { | ||
| 179 | switch (keycode) { | ||
| 180 | case EDVORAK: | ||
| 181 | if (record->event.pressed) { | ||
| 182 | set_single_persistent_default_layer(_EDVORAK); | ||
| 183 | } | ||
| 184 | return false; | ||
| 185 | case QWERTY: | ||
| 186 | if (record->event.pressed) { | ||
| 187 | dvorakj_layer_off(); | ||
| 188 | set_single_persistent_default_layer(_QWERTY); | ||
| 189 | } | ||
| 190 | return false; | ||
| 191 | case LOWER: | ||
| 192 | if (record->event.pressed) { | ||
| 193 | layer_on(_LOWER); | ||
| 194 | time_on_pressed = record->event.time; | ||
| 195 | } else { | ||
| 196 | layer_off(_LOWER); | ||
| 197 | |||
| 198 | if (TIMER_DIFF_16(record->event.time, time_on_pressed) < TAPPING_TERM) { | ||
| 199 | update_japanese_mode(false); | ||
| 200 | } | ||
| 201 | time_on_pressed = 0; | ||
| 202 | } | ||
| 203 | return false; | ||
| 204 | case RAISE: | ||
| 205 | if (record->event.pressed) { | ||
| 206 | layer_on(_RAISE); | ||
| 207 | time_on_pressed = record->event.time; | ||
| 208 | } else { | ||
| 209 | layer_off(_RAISE); | ||
| 210 | |||
| 211 | if (TIMER_DIFF_16(record->event.time, time_on_pressed) < TAPPING_TERM) { | ||
| 212 | update_japanese_mode(true); | ||
| 213 | } | ||
| 214 | time_on_pressed = 0; | ||
| 215 | } | ||
| 216 | return false; | ||
| 217 | default: | ||
| 218 | return true; | ||
| 219 | } | ||
| 220 | } | ||
| 221 | |||
| 222 | bool process_record_ime(uint16_t keycode, keyrecord_t *record) { | ||
| 223 | switch (keycode) { | ||
| 224 | case KC_JPN: | ||
| 225 | if (record->event.pressed) { | ||
| 226 | update_japanese_mode(true); | ||
| 227 | } | ||
| 228 | return false; | ||
| 229 | case KC_ENG: | ||
| 230 | if (record->event.pressed) { | ||
| 231 | update_japanese_mode(false); | ||
| 232 | } | ||
| 233 | return false; | ||
| 234 | default: | ||
| 235 | return true; | ||
| 236 | } | ||
| 237 | } | ||
| 238 | |||
| 239 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||
| 240 | |||
| 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); | ||
| 246 | } | ||
diff --git a/users/edvorakjp/edvorakjp.h b/users/edvorakjp/edvorakjp.h new file mode 100644 index 000000000..c38a9d1fa --- /dev/null +++ b/users/edvorakjp/edvorakjp.h | |||
| @@ -0,0 +1,74 @@ | |||
| 1 | #ifndef USERSPACE | ||
| 2 | #define USERSPACE | ||
| 3 | |||
| 4 | #include "quantum.h" | ||
| 5 | #include "action_layer.h" | ||
| 6 | |||
| 7 | #define EECONFIG_EDVORAK (uint8_t *)20 | ||
| 8 | |||
| 9 | extern keymap_config_t keymap_config; | ||
| 10 | |||
| 11 | typedef union { | ||
| 12 | uint8_t raw; | ||
| 13 | struct { | ||
| 14 | bool enable_jp_extra_layer : 1; | ||
| 15 | bool enable_kc_lang : 1; // for macOS | ||
| 16 | }; | ||
| 17 | } edvorakjp_config_t; | ||
| 18 | |||
| 19 | enum edvorakjp_layers { | ||
| 20 | _EDVORAK = 0, | ||
| 21 | _EDVORAKJ1, | ||
| 22 | _EDVORAKJ2, | ||
| 23 | _QWERTY, | ||
| 24 | _LOWER, | ||
| 25 | _RAISE, | ||
| 26 | _ADJUST, | ||
| 27 | _EXTRA, | ||
| 28 | }; | ||
| 29 | |||
| 30 | enum edvorakjp_keycodes { | ||
| 31 | EDVORAK = SAFE_RANGE, | ||
| 32 | QWERTY, | ||
| 33 | LOWER, | ||
| 34 | RAISE, | ||
| 35 | KC_MAC, | ||
| 36 | KC_WIN, | ||
| 37 | KC_EXTON, | ||
| 38 | KC_EXTOFF, | ||
| 39 | KC_JPN, | ||
| 40 | KC_ENG, | ||
| 41 | KC_AI, | ||
| 42 | KC_OU, | ||
| 43 | KC_EI, | ||
| 44 | KC_ANN, | ||
| 45 | KC_ONN, | ||
| 46 | KC_ENN, | ||
| 47 | KC_INN, | ||
| 48 | KC_UNN, | ||
| 49 | NEW_SAFE_RANGE | ||
| 50 | }; | ||
| 51 | |||
| 52 | uint8_t eeconfig_read_edvorakjp(void); | ||
| 53 | void eeconfig_update_edvorakjp(uint8_t val); | ||
| 54 | |||
| 55 | void dvorakj_layer_off(void); | ||
| 56 | void update_japanese_mode(bool new_state); | ||
| 57 | void matrix_init_user(void); | ||
| 58 | void matrix_init_keymap(void); | ||
| 59 | uint32_t layer_state_set_user(uint32_t state); | ||
| 60 | uint32_t layer_state_set_keymap(uint32_t state); | ||
| 61 | |||
| 62 | /* | ||
| 63 | * Each process_record_* methods defined here are | ||
| 64 | * return false if processed, or return true if not processed. | ||
| 65 | * You can add your original macros in process_record_keymap() in keymap.c. | ||
| 66 | */ | ||
| 67 | bool process_record_keymap(uint16_t keycode, keyrecord_t *record); | ||
| 68 | bool process_record_edvorakjp_ext(uint16_t keycode, keyrecord_t *record); | ||
| 69 | bool process_record_edvorakjp_config(uint16_t keycode, keyrecord_t *record); | ||
| 70 | bool process_record_layer(uint16_t keycode, keyrecord_t *record); | ||
| 71 | bool process_record_ime(uint16_t keycode, keyrecord_t *record); | ||
| 72 | bool process_record_user(uint16_t keycode, keyrecord_t *record); | ||
| 73 | |||
| 74 | #endif | ||
diff --git a/users/edvorakjp/readme.md b/users/edvorakjp/readme.md new file mode 100644 index 000000000..d7ec74285 --- /dev/null +++ b/users/edvorakjp/readme.md | |||
| @@ -0,0 +1,103 @@ | |||
| 1 | # edvorakjp | ||
| 2 | |||
| 3 | epaew's Enhanced Dvorak layout for Japanese Programmer | ||
| 4 | |||
| 5 | ## Layout overview | ||
| 6 | This is a sample. You can swap any symbol keys and modifier keys. | ||
| 7 | |||
| 8 | - Base layer (for ansi layout) | ||
| 9 | ``` | ||
| 10 | //+----+----+----+----+----+----+----+----+----+----+----+----+----+---------+ | ||
| 11 | ` , ! , @ , # , $ , % , ^ , & , * , ( , ) , [ , ] , BSPC , | ||
| 12 | //+----+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+-------+ | ||
| 13 | TAB , ' , , , . , P , Y , F , G , R , W , Q , / , = , \ , | ||
| 14 | //+------++---++---++---++---++---++---++---++---++---++---++---++---+-------+ | ||
| 15 | CAPS , A , O , E , I , U , D , T , N , S , M , - , ENT , | ||
| 16 | //+-------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-----------+ | ||
| 17 | LSFT , ; , X , C , V , Z , B , H , J , K , L , RSFT , | ||
| 18 | //+------+--+---++----++---+----+----+----+----+-+--+---++----++------+------+ | ||
| 19 | LCTL , LGUI , LALT , SPACE , RALT , RGUI , MENU , RCTL | ||
| 20 | //+------+------+------+-------------------------+------+------+------+------+ | ||
| 21 | ``` | ||
| 22 | - Base layer (for iso layout) | ||
| 23 | - Two C keys are placed, it's on purpose. | ||
| 24 | ``` | ||
| 25 | //+----+----+----+----+----+----+----+----+----+----+----+----+----+---------+ | ||
| 26 | ` , ! , @ , # , $ , % , ^ , & , * , ( , ) , [ , ] , BSPC , | ||
| 27 | //+----+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+-------+ | ||
| 28 | TAB , ' , , , . , P , Y , F , G , R , W , C , / , = , | ||
| 29 | //+------++---++---++---++---++---++---++---++---++---++---++---++---++ | ||
| 30 | CAPS , A , O , E , I , U , D , T , N , S , M , ; , - , ENT , | ||
| 31 | //+-------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+------+ | ||
| 32 | LSFT , Q , X , C , V , Z , B , H , J , K , L , \ , RSFT , | ||
| 33 | //+------+--+---++----++---+----+----+----+----+-+--+---++----++---+--+------+ | ||
| 34 | LCTL , LGUI , LALT , SPACE , RALT , RGUI , MENU , RCTL | ||
| 35 | //+------+------+------+-------------------------+------+------+------+------+ | ||
| 36 | ``` | ||
| 37 | - Additional layer (common, blanks are transparent) | ||
| 38 | ``` | ||
| 39 | //+----+----+----+----+----+----+----+----+----+----+----+----+----+---------+ | ||
| 40 | , , , , , , , , , , , , , , | ||
| 41 | //+----+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+-------+ | ||
| 42 | , AI , OU , EI , , , , , , , , , , , | ||
| 43 | //+------++---++---++---++---++---++---++---++---++---++---++---++---+-------+ | ||
| 44 | , A , O , E , I , U , , Y1 , N , Y2 , , , , | ||
| 45 | //+-------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-----------+ | ||
| 46 | ,ANN ,ONN ,ENN ,INN ,UNN , , , , , , , | ||
| 47 | //+------+--+---++----++---+----+----+----+----+-+--+---++----++------+------+ | ||
| 48 | , , , , , , , | ||
| 49 | //+------+------+------+-------------------------+------+------+------+------+ | ||
| 50 | ``` | ||
| 51 | |||
| 52 | And you can see [my iris keyboard layout](../../keyboards/iris/keymaps/edvorakjp/keymap.c) for sample implementation, too. | ||
| 53 | |||
| 54 | ## for Japanese | ||
| 55 | |||
| 56 | - 日本語入力用のキーを追加 | ||
| 57 | - IME 切り替えキー | ||
| 58 | - 長押しでレイヤー切り替え、短押しでIME切り替え | ||
| 59 | - macOS(かな/英数)、Windows(Alt+\`)の両方に対応 | ||
| 60 | - DvorakJP(<http://www7.plala.or.jp/dvorakjp/>)を参考にした日本語入力用キーの導入 | ||
| 61 | - 拗音入力用のYキーを追加配置 | ||
| 62 | - 二重母音入力用のキー(AI, OU, EI) | ||
| 63 | - 撥音入力用のキー(ANN, ONN, ENN, INN, UNN) | ||
| 64 | - いずれかの子音を押下することで Additional layer が出現し、いずれかの母音を押下することで Base layer に戻ります(※1※2) | ||
| 65 | - ※1促音の入力に使うため、また連続で同じ指での打鍵を減らすために、 | ||
| 66 | FGRDTNBHJ を押下した場合はy1が、それ以外の子音を押下した場合はy2が出現しません | ||
| 67 | - ※2撥音の入力のため、nを2連打すると、Base layerに戻ります | ||
| 68 | - Define some custom keys for typing Japanese | ||
| 69 | - IME switching | ||
| 70 | - act as LOWER/RAISE when hold, act as IME switching when tapped | ||
| 71 | - for macOS(かな/英数), for Windows(Alt+\`) | ||
| 72 | - oneshot combination keys, inspired from DvorakJP (<http://www7.plala.or.jp/dvorakjp/>) | ||
| 73 | - additional Y key to enter a contracted sound | ||
| 74 | - diphthong keys (AI, OU, EI) | ||
| 75 | - syllabic nasal (ANN, ONN, ENN, INN, UNN) | ||
| 76 | - Additional layer is appeared when you taps any consonant keys, and disappeared when you taps any diphthong keys. | ||
| 77 | |||
| 78 | ## for Programmer | ||
| 79 | |||
| 80 | - Dvorak 配列をベースに、ショートカットでよく利用される XCV は QWERTY 配列の位置を維持 | ||
| 81 | - Vimユーザのために、HJKL キーを横並びで配置 | ||
| 82 | - デフォルトレイヤーには、数字キーの代わりに記号 `!@#$%^&*()` を配置 | ||
| 83 | |||
| 84 | - mainly based on Dvorak layout, but XCV is available in the same position of QWERTY layout | ||
| 85 | - HJKL is lining side by side, for Vim users | ||
| 86 | - we can type `!@#$%^&*()` keys without shift keys in base layer | ||
| 87 | |||
| 88 | ## License | ||
| 89 | |||
| 90 | Copyright 2018 Ryo Maeda epaew.333@gmail.com @epaew | ||
| 91 | |||
| 92 | This program is free software: you can redistribute it and/or modify | ||
| 93 | it under the terms of the GNU General Public License as published by | ||
| 94 | the Free Software Foundation, either version 2 of the License, or | ||
| 95 | (at your option) any later version. | ||
| 96 | |||
| 97 | This program is distributed in the hope that it will be useful, | ||
| 98 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 99 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 100 | GNU General Public License for more details. | ||
| 101 | |||
| 102 | You should have received a copy of the GNU General Public License | ||
| 103 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
diff --git a/users/edvorakjp/rules.mk b/users/edvorakjp/rules.mk new file mode 100644 index 000000000..4fb739186 --- /dev/null +++ b/users/edvorakjp/rules.mk | |||
| @@ -0,0 +1 @@ | |||
| SRC += edvorakjp.c | |||
