aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorepaew <epaew@users.noreply.github.com>2018-05-23 08:59:43 +0900
committerDrashna Jaelre <drashna@live.com>2018-05-22 16:59:43 -0700
commit760b11b5e84291019605af3abeef2d09f8991779 (patch)
tree6aa9fab3f24df6d403b3d0ed4c9955d2e2ec06cd
parentc465cf2fd3bc57259ad72441e462f07b694b962e (diff)
downloadqmk_firmware-760b11b5e84291019605af3abeef2d09f8991779.tar.gz
qmk_firmware-760b11b5e84291019605af3abeef2d09f8991779.zip
Add edvorakjp layout for the Iris keyboard (#3020)
* add edvorakjp libraries * add edvorakjp iris keymap * change the custom eeconfig's address to prevent future address conflicts * deleted the verbose line of rule.mk
-rw-r--r--keyboards/iris/keymaps/edvorakjp/config.h30
-rw-r--r--keyboards/iris/keymaps/edvorakjp/keymap.c171
-rw-r--r--keyboards/iris/keymaps/edvorakjp/readme.md21
-rw-r--r--keyboards/iris/keymaps/edvorakjp/rules.mk16
-rw-r--r--users/edvorakjp/edvorakjp.c246
-rw-r--r--users/edvorakjp/edvorakjp.h74
-rw-r--r--users/edvorakjp/readme.md103
-rw-r--r--users/edvorakjp/rules.mk1
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
7extern edvorakjp_config_t edvorakjp_config;
8
9enum 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
31const 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
132void matrix_init_keymap() {
133}
134
135bool 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
150uint32_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
3Epaew's Enhanced Dvorak layout for Japanese Programmer
4see [here](../../../../users/edvorakjp) for more informations.
5
6## License
7
8Copyright 2018 Ryo Maeda epaew.333@gmail.com @epaew
9
10This program is free software: you can redistribute it and/or modify
11it under the terms of the GNU General Public License as published by
12the Free Software Foundation, either version 2 of the License, or
13(at your option) any later version.
14
15This program is distributed in the hope that it will be useful,
16but WITHOUT ANY WARRANTY; without even the implied warranty of
17MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18GNU General Public License for more details.
19
20You should have received a copy of the GNU General Public License
21along 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#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
7EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = no # Commands for debug and configuration
10NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_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
4bool japanese_mode;
5uint16_t time_on_pressed;
6
7edvorakjp_config_t edvorakjp_config;
8
9uint8_t eeconfig_read_edvorakjp(void) {
10 return eeprom_read_byte(EECONFIG_EDVORAK);
11}
12
13void eeconfig_update_edvorakjp(uint8_t val) {
14 eeprom_update_byte(EECONFIG_EDVORAK, val);
15}
16
17void dvorakj_layer_off(void) {
18 layer_off(_EDVORAKJ1);
19 layer_off(_EDVORAKJ2);
20}
21
22void 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
40void 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))
49void matrix_init_keymap() {}
50
51uint32_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))
57uint32_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))
66bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
67 return true;
68}
69
70bool 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
156bool 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
178bool 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
222bool 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
239bool 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
9extern keymap_config_t keymap_config;
10
11typedef 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
19enum edvorakjp_layers {
20 _EDVORAK = 0,
21 _EDVORAKJ1,
22 _EDVORAKJ2,
23 _QWERTY,
24 _LOWER,
25 _RAISE,
26 _ADJUST,
27 _EXTRA,
28};
29
30enum 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
52uint8_t eeconfig_read_edvorakjp(void);
53void eeconfig_update_edvorakjp(uint8_t val);
54
55void dvorakj_layer_off(void);
56void update_japanese_mode(bool new_state);
57void matrix_init_user(void);
58void matrix_init_keymap(void);
59uint32_t layer_state_set_user(uint32_t state);
60uint32_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 */
67bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
68bool process_record_edvorakjp_ext(uint16_t keycode, keyrecord_t *record);
69bool process_record_edvorakjp_config(uint16_t keycode, keyrecord_t *record);
70bool process_record_layer(uint16_t keycode, keyrecord_t *record);
71bool process_record_ime(uint16_t keycode, keyrecord_t *record);
72bool 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
3epaew's Enhanced Dvorak layout for Japanese Programmer
4
5## Layout overview
6This 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
90Copyright 2018 Ryo Maeda epaew.333@gmail.com @epaew
91
92This program is free software: you can redistribute it and/or modify
93it under the terms of the GNU General Public License as published by
94the Free Software Foundation, either version 2 of the License, or
95(at your option) any later version.
96
97This program is distributed in the hope that it will be useful,
98but WITHOUT ANY WARRANTY; without even the implied warranty of
99MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
100GNU General Public License for more details.
101
102You should have received a copy of the GNU General Public License
103along 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