aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorumi <57262844+umi-umi@users.noreply.github.com>2020-02-17 17:50:26 +0900
committerGitHub <noreply@github.com>2020-02-17 00:50:26 -0800
commitbbe8180ad904cd432b6f97e9662231fa0548ad0e (patch)
tree3f68f7a88eca54313d5cf5d9f3c7fec8e16bf080
parenteabdef3b4d304e668fcd9711c0e661a64cc96ba6 (diff)
downloadqmk_firmware-bbe8180ad904cd432b6f97e9662231fa0548ad0e.tar.gz
qmk_firmware-bbe8180ad904cd432b6f97e9662231fa0548ad0e.zip
[Docs] add japanese translation (detail guide part) (#7722)
* add detail-guide part * some updates for easy reading * some updates for easy reading * some updates for easy reading * some updates for easy reading * some updates for easy reading * some updates for easy reading * some updates for easy reading * some updates for easy reading * update file based on comment * update file based on comment * update file based on comment * update git command in header * update files based on comments, and update git command in header * update file based on comment * update file based on comment * update file based on comment * update file based on comment * update file based on comment * update file based on comment * update file based on comment * update file based on comment Co-Authored-By: shela <shelaf@users.noreply.github.com> Co-Authored-By: Takeshi ISHII <2170248+mtei@users.noreply.github.com>
-rw-r--r--docs/ja/custom_quantum_functions.md518
-rw-r--r--docs/ja/flashing.md247
-rw-r--r--docs/ja/getting_started_build_tools.md146
-rw-r--r--docs/ja/getting_started_make_guide.md153
-rw-r--r--docs/ja/getting_started_vagrant.md62
-rw-r--r--docs/ja/keymap.md174
6 files changed, 1300 insertions, 0 deletions
diff --git a/docs/ja/custom_quantum_functions.md b/docs/ja/custom_quantum_functions.md
new file mode 100644
index 000000000..f49df8f65
--- /dev/null
+++ b/docs/ja/custom_quantum_functions.md
@@ -0,0 +1,518 @@
1# キーボードの挙動をカスタマイズする方法
2
3<!---
4 original document: 7494490d6:docs/custom_quantum_functions.md
5 git diff 7494490d6 HEAD -- docs/custom_quantum_functions.md | cat
6-->
7
8多くの人にとって、カスタムキーボードはボタンの押下をコンピュータに送信するだけではありません。単純なボタンの押下やマクロよりも複雑なことを実行できるようにしたいでしょう。QMK にはコードを挿入したり、機能を上書きしたり、様々な状況でキーボードの挙動をカスタマイズできるフックがあります。
9
10このページでは、QMK に関する特別な知識は想定していませんが、[QMK の理解](ja/understanding_qmk.md)を読むとより根本的なレベルで何が起きているかを理解するのに役立ちます。
11
12## コア、キーボード、キーマップ階層 :id=a-word-on-core-vs-keyboards-vs-keymap
13
14私たちは QMK を階層として構造化しました:
15
16* コア (`_quantum`)
17 * キーボード/リビジョン (`_kb`)
18 * キーマップ (`_user`)
19
20以下で説明される各関数は `_kb()` サフィックスあるいは `_user()` サフィックスを使って定義することができます。`_kb()` サフィックスはキーボード/リビジョンレベルで使うことを意図しており、一方で `_user()` サフィックスはキーマップレベルで使われるべきです。
21
22キーボード/リビジョンレベルで関数を定義する場合、`_kb()` は他の何かを実行する前に `_user()` を呼び出すよう実装することが重要です。そうでなければ、キーマップレベル関数は呼ばれないでしょう。
23
24# カスタムキーコード
25
26最も一般的なタスクは、既存のキーコードの挙動を変更するか、新しいキーコードを作成することです。コードの観点からは、それぞれの仕組みは非常に似ています。
27
28## 新しいキーコードの定義
29
30独自のカスタムキーコードを作成する最初のステップは、それらを列挙することです。これは、カスタムキーコードに名前を付け、そのキーコードにユニークな番号を割り当てることの両方を意味します。QMK は、カスタムキーコードを固定範囲の番号に制限するのではなく、`SAFE_RANGE` マクロを提供します。カスタムキーコードを列挙する時に `SAFE_RANGE` を使うと、ユニークな番号を取得することが保証されます。
31
32
33これは2つのキーコードを列挙する例です。このブロックを `keymap.c` に追加した後で、キーマップの中で `FOO` と `BAR` を使うことができます。
34
35```c
36enum my_keycodes {
37 FOO = SAFE_RANGE,
38 BAR
39};
40```
41
42## 任意のキーコードの挙動のプログラミング
43
44既存のキーの挙動を上書きしたい場合、あるいは新しいキーについて挙動を定義する場合、`process_record_kb()` および `process_record_user()` 関数を使うべきです。これらは実際のキーイベントが処理される前のキー処理中に QMK によって呼び出されます。これらの関数が `true` を返す場合、QMK はキーコードを通常通りに処理します。これは、キーを置き換えるのではなく、キーの機能を拡張するのに便利です。これらの関数が `false` を返す場合、QMK は通常のキー処理をスキップし、必要なキーのアップまたはダウンイベントを送信するのかはユーザ次第です。
45
46これらの関数はキーが押されるか放されるたびに呼び出されます。
47
48### `process_record_user()` の実装例
49
50この例は2つの事を行います。`FOO` と呼ばれるカスタムキーコードの挙動を定義し、Enter キーが押されるたびに音を再生します。
51
52```c
53bool process_record_user(uint16_t keycode, keyrecord_t *record) {
54 switch (keycode) {
55 case FOO:
56 if (record->event.pressed) {
57 // 押された時に何かをします
58 } else {
59 // 放された時に何かをします
60 }
61 return false; // このキーの以降の処理をスキップします
62 case KC_ENTER:
63 // enter が押された時に音を再生します
64 if (record->event.pressed) {
65 PLAY_NOTE_ARRAY(tone_qwerty);
66 }
67 return true; // QMK に enter のプレスまたはリリースイベントを送信させます
68 default:
69 return true; // 他の全てのキーコードを通常通りに処理します
70 }
71}
72```
73
74### `process_record_*` 関数のドキュメント
75
76* キーボード/リビジョン: `bool process_record_kb(uint16_t keycode, keyrecord_t *record)`
77* キーマップ: `bool process_record_user(uint16_t keycode, keyrecord_t *record)`
78
79`keycode` 引数はキーマップで定義されているものです。例えば `MO(1)`、`KC_L` など。これらのイベントを処理するには `switch...case` ブロックを使うべきです。
80
81`record` 引数は実際のプレスに関する情報を含みます:
82
83```c
84keyrecord_t record {
85 keyevent_t event {
86 keypos_t key {
87 uint8_t col
88 uint8_t row
89 }
90 bool pressed
91 uint16_t time
92 }
93}
94```
95
96# LED 制御
97
98QMK は HID 仕様で定義された5つの LED の読み取りメソッドを提供します:
99
100* Num Lock
101* Caps Lock
102* Scroll Lock
103* Compose
104* Kana
105
106ロック LED の状態を取得するには2つの方法があります:
107
108* `bool led_update_kb(led_t led_state)` あるいは `_user(led_t led_state)` を実装する、または
109* `led_t host_keyboard_led_state()` を呼び出す
110
111!> `host_keyboard_led_state()` は `led_update_user()` が呼ばれる前に新しい値を既に反映している場合があります。
112
113LED の状態を `uint8_t` として提供する2つの非推奨の関数があります:
114
115* `uint8_t led_set_kb(uint8_t usb_led)` と `_user(uint8_t usb_led)`
116* `uint8_t host_keyboard_leds()`
117
118## `led_update_user()`
119
120この関数はこれら5つの LED のいずれかの状態が変化すると呼ばれます。LED の状態を構造体のパラメータとして受け取ります。
121
122慣例により、`led_update_kb()` にそのコードを実行するようフックさせるために `led_update_user()` から `true` を返し、`led_update_kb()` でコードを実行したくない場合は `false` を返します。
123
124以下はいくつかの例です:
125
126- レイヤー表示のような何かのために LED を使うために LED を上書きする
127 - `_kb()` 関数を実行したくないので、`false` を返します。これはレイヤーの挙動を上書きするためです。
128- LED がオンあるいはオフになった時に音楽を再生する。
129 - `_kb` 関数を実行したいので、`true` を返します。これはデフォルトの LED の挙動に追加されます。
130
131?> `led_set_*` 関数は `bool` の代わりに `void` を返すため、キーボードの LED 制御を上書きすることができません。従って、代わりに `led_update_*` を使うことをお勧めします。
132
133### `led_update_kb()` の実装例
134
135```c
136bool led_update_kb(led_t led_state) {
137 bool res = led_update_user(led_state);
138 if(res) {
139 // writePin は 1 でピンを high に、0 で low に設定します。
140 // この例では、ピンは反転していて、
141 // low/0 は LED がオンになり、high/1 は LED がオフになります。
142 // この挙動は、LED がピンと VCC の間にあるか、ピンと GND の間にあるかどうかに依存します。
143 writePin(B0, !led_state.num_lock);
144 writePin(B1, !led_state.caps_lock);
145 writePin(B2, !led_state.scroll_lock);
146 writePin(B3, !led_state.compose);
147 writePin(B4, !led_state.kana);
148 }
149 return res;
150}
151```
152
153### `led_update_user()` の実装例
154
155この不完全な例は Caps Lock がオンまたはオフになった場合に音を再生します。また LED の状態を保持する必要があるため、`true` を返します。
156
157```c
158#ifdef AUDIO_ENABLE
159 float caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
160 float caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
161#endif
162
163bool led_update_user(led_t led_state) {
164 #ifdef AUDIO_ENABLE
165 static uint8_t caps_state = 0;
166 if (caps_state != led_state.caps_lock) {
167 led_state.caps_lock ? PLAY_SONG(caps_on) : PLAY_SONG(caps_off);
168 caps_state = led_state.caps_lock;
169 }
170 #endif
171 return true;
172}
173```
174
175### `led_update_*` 関数のドキュメント
176
177* キーボード/リビジョン: `bool led_update_kb(led_t led_state)`
178* キーマップ: `bool led_update_user(led_t led_state)`
179
180## `host_keyboard_led_state()`
181
182最後に受信した LED の状態を `led_t` として取得するためにこの関数を呼びます。これは、`led_update_*` の外部から、例えば [`matrix_scan_user()`](#matrix-scanning-code) の中で LED の状態を読み取るのに便利です。
183
184## 物理的な LED の状態の設定
185
186一部のキーボードの実装は、物理的な LED の状態を設定するための便利なメソッドを提供しています。
187
188### Ergodox キーボード
189
190Ergodox の実装は、個々の LED をオンあるいはオフにするために `ergodox_right_led_1`/`2`/`3_on`/`off()` と、インデックスによってそれらをオンあるいはオフにするために `ergodox_right_led_on`/`off(uint8_t led)` を提供します。
191
192さらに、LED の明度を指定することができます。全ての LED に同じ明度を指定するなら `ergodox_led_all_set(uint8_t n)` を使い、個別の LED の明度を指定するなら `ergodox_right_led_1`/`2`/`3_set(uint8_t n)` を使い、LED のインデックスを指定して明度を指定するには `ergodox_right_led_set(uint8_t led, uint8_t n)` を使います。
193
194Ergodox キーボードは、最低の明度として `LED_BRIGHTNESS_LO` を、最高の輝度(これはデフォルトです)として `LED_BRIGHTNESS_HI` も定義しています。
195
196# キーボードの初期化コード
197
198キーボードの初期化プロセスには幾つかのステップがあります。何をしたいかによって、どの関数を使うべきかに影響します。
199
2003つの主な初期化関数があり、呼び出される順番にリストされています。
201
202* `keyboard_pre_init_*` - ほとんどのものが開始される前に起こります。非常に早くに実行したいハードウェアのセットアップに適しています。
203* `matrix_init_*` - ファームウェアのスタートアッププロセスの途中で起こります。ハードウェアは初期化されますが、機能はまだ初期化されていない場合があります。
204* `keyboard_post_init_*` - ファームウェアのスタートアッププロセスの最後に起こります。これはほとんどの場合、 "カスタマイズ"コードを配置する場所です。
205
206!> ほとんどの人にとって、`keyboard_post_init_user` が呼び出したいものです。例えば、ここで RGB アンダーグローのセットアップを行います。
207
208## キーボードの事前初期化コード
209
210これは USB さえ起動する前の、起動中の非常に早い段階で実行されます。
211
212この直後にマトリックスが初期化されます。
213
214これは主にハードウェア向きの初期化のためであるため、ほとんどのユーザは使うべきではありません。
215
216ただし、初期化が必要なハードウェアがある場合には、これが最適な場所です (LED ピンの初期化など)。
217
218### `keyboard_pre_init_user()` の実装例
219
220この例は、キーボードレベルで、LED ピンとして B0、B1、B2、B3 および B4 をセットアップします。
221
222```c
223void keyboard_pre_init_user(void) {
224 // キーボードの事前初期コードを呼び出します。
225
226 // LED ピンを出力として設定します
227 setPinOutput(B0);
228 setPinOutput(B1);
229 setPinOutput(B2);
230 setPinOutput(B3);
231 setPinOutput(B4);
232}
233```
234
235### `keyboard_pre_init_*` 関数のドキュメント
236
237* キーボード/リビジョン: `void keyboard_pre_init_kb(void)`
238* キーマップ: `void keyboard_pre_init_user(void)`
239
240## マトリックスの初期化コード
241
242これは、マトリックスが初期化され、ハードウェアの一部がセットアップされた後で、ただし機能の多くが初期化される前に、呼び出されます。
243
244他の場所で必要になるかもしれないものをセットアップするのに役立ちますが、ハードウェアに関連するものではなく、開始場所に依存するものでもありません。
245
246
247### `matrix_init_*` 関数のドキュメント
248
249* キーボード/リビジョン: `void matrix_init_kb(void)`
250* キーマップ: `void matrix_init_user(void)`
251
252
253## キーボードの事後初期化コード
254
255キーボードの初期化プロセスの極めて最後のタスクとして実行されます。この時点で初期化される必要があるような、特定の機能を変更したい場合に便利です。
256
257
258### `keyboard_post_init_user()` の実装例
259
260この例は、他の全てのものが初期化された後で実行され、rgb アンダーグローの設定をセットアップします。
261
262```c
263void keyboard_post_init_user(void) {
264 // post init コードを呼びます
265 rgblight_enable_noeeprom(); // 設定を保存せずに Rgb を有効にします
266 rgblight_sethsv_noeeprom(180, 255, 255); // 保存せずに色を青緑/シアンに設定します
267 rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); // 保存せずにモードを高速なブリージングに設定します
268}
269```
270
271### `keyboard_post_init_*` 関数のドキュメント
272
273* キーボード/リビジョン: `void keyboard_post_init_kb(void)`
274* キーマップ: `void keyboard_post_init_user(void)`
275
276# マトリックススキャンコード :id=matrix-scanning-code
277
278可能であれば常に `process_record_*()` を使ってキーボードをカスタマイズし、その方法でイベントをフックし、コードがキーボードのパフォーマンスに悪影響を与えないようにします。ただし、まれにマトリックススキャンにフックする必要があります。これらの関数は1秒あたり少なくとも10回は呼び出されるため、これらの関数のコードのパフォーマンスに非常に注意してください。
279
280### `matrix_scan_*` の実装例
281
282この例は意図的に省略されています。このようなパフォーマンスに敏感な領域にフックする前に、例を使わずにこれを書くために、QMK 内部について十分理解する必要があります。助けが必要であれば、[issue を開く](https://github.com/qmk/qmk_firmware/issues/new) か [Discord で会話](https://discord.gg/Uq7gcHh)してください。
283
284### `matrix_scan_*` 関数のドキュメント
285
286* キーボード/リビジョン: `void matrix_scan_kb(void)`
287* キーマップ: `void matrix_scan_user(void)`
288
289この関数はマトリックススキャンのたびに呼び出されます。これは基本的に MCU が処理できる頻度です。大量に実行されるため、ここに何を置くかについては注意してください。
290
291カスタムマトリックススキャンコードが必要な場合は、この関数を使う必要があります。また、カスタムステータス出力 (LED あるいはディスプレイなど)や、ユーザが入力していない場合でも定期的にトリガーするその他の機能のために使うことができます。
292
293
294# キーボードアイドリング/ウェイクコード
295
296キーボードがサポートしている場合、多くの機能を停止することで"アイドル"にすることができます。これの良い例は、RGB ライトあるいはバックライトです。これにより、電力消費を節約できるか、キーボードの動作が改善されるかもしれません。
297
298これは2つの関数によって制御されます: `suspend_power_down_*` および `suspend_wakeup_init_*`。これらはシステムキーボードがアイドルになった時と、起動した時のそれぞれで呼ばれます。
299
300
301### suspend_power_down_user() と suspend_wakeup_init_user() の実装例
302
303
304```c
305void suspend_power_down_user(void) {
306 rgb_matrix_set_suspend_state(true);
307}
308
309void suspend_wakeup_init_user(void) {
310 rgb_matrix_set_suspend_state(false);
311}
312```
313
314### キーボードサスペンド/ウェイク関数のドキュメント
315
316* キーボード/リビジョン : `void suspend_power_down_kb(void)` および `void suspend_wakeup_init_user(void)`
317* キーマップ: `void suspend_power_down_kb(void)` および `void suspend_wakeup_init_user(void)`
318
319# レイヤー切り替えコード
320
321これはレイヤーが切り替えられるたびにコードを実行します。レイヤー表示あるいはカスタムレイヤー処理に役立ちます。
322
323### `layer_state_set_*` の実装例
324
325この例は、レイヤーに基づいて [RGB アンダーグロー](ja/feature_rgblight.md)を設定する方法を示していて、Planck を例として使っています。
326
327```c
328layer_state_t layer_state_set_user(layer_state_t state) {
329 switch (get_highest_layer(state)) {
330 case _RAISE:
331 rgblight_setrgb (0x00, 0x00, 0xFF);
332 break;
333 case _LOWER:
334 rgblight_setrgb (0xFF, 0x00, 0x00);
335 break;
336 case _PLOVER:
337 rgblight_setrgb (0x00, 0xFF, 0x00);
338 break;
339 case _ADJUST:
340 rgblight_setrgb (0x7A, 0x00, 0xFF);
341 break;
342 default: // 他の全てのレイヤーあるいはデフォルトのレイヤー
343 rgblight_setrgb (0x00, 0xFF, 0xFF);
344 break;
345 }
346 return state;
347}
348```
349### `layer_state_set_*` 関数のドキュメント
350
351* キーボード/リビジョン: `layer_state_t layer_state_set_kb(layer_state_t state)`
352* キーマップ: `layer_state_t layer_state_set_user(layer_state_t state)`
353
354
355[キーマップの概要](ja/keymap.md#keymap-layer-status)で説明されるように、`state` はアクティブなレイヤーのビットマスクです。
356
357
358# 永続的な設定 (EEPROM)
359
360これによりキーボードのための永続的な設定を設定することができます。これらの設定はコントローラの EEPROM に保存され、電源が落ちた後であっても保持されます。設定は `eeconfig_read_kb` および `eeconfig_read_user` を使って読み取ることができ、`eeconfig_update_kb` および `eeconfig_update_user` を使って書きこむことができます。これは切り替え可能な機能 (rgb レイヤーの表示の切り替えなど)に役立ちます。さらに、`eeconfig_init_kb` および `eeconfig_init_user` を使って EEPROM のデフォルト値を設定できます。
361
362ここでの複雑な部分は、EEPROM を介してデータを保存およびアクセスできる方法がたくさんあり、これを行うための"正しい"方法が無いということです。ただし、各関数には DWORD (4 バイト)しかありません。
363
364EEPROM の書き込み回数には制限があることに注意してください。これは非常に高い値ですが、EEPROM に書き込むのはこれだけではなく、もし頻繁に書き込むと、MCU の寿命を大幅に短くする可能性があります。
365
366* この例を理解していない場合は、この機能はかなり複雑なため、この機能を使うことを避けても構いません。
367
368### 実装例
369
370これは、設定を追加し、読み書きする例です。この例では、ユーザキーマップを使っています。これは複雑な機能で、多くのことが行われています。実際、動作のために上記の多くの関数を使います!
371
372
373keymap.c ファイルの中で、先頭にこれを追加します:
374```c
375typedef union {
376 uint32_t raw;
377 struct {
378 bool rgb_layer_change :1;
379 };
380} user_config_t;
381
382user_config_t user_config;
383```
384
385これは、設定をメモリ内に保存し、EEPROM に書き込むことができる32ビット構造体をセットアップします。これを使うと、この構造体に変数が定義されるため、変数を定義する必要が無くなります。`bool` (boolean) の値は1ビットを使い、`uint8_t` は8ビットを使い、`uint16_t` は16ビットを使うことに注意してください。組み合わせて使うことができますが、順番の変更は読み書きされる値が変更されるため、問題が発生するかもしれません。
386
387`layer_state_set_*` 関数のために `rgb_layer_change` を使い、全てを設定するために `keyboard_post_init_user` および `process_record_user` を使います。
388
389ここで、上の `keyboard_post_init_user` コードを使って、作成したばかりの構造体を設定するために `eeconfig_read_user()` を追加します。そして、この構造体をすぐに使ってキーマップの機能を制御することができます。それは以下のようになります:
390```c
391void keyboard_post_init_user(void) {
392 // キーマップレベルのマトリックスの初期化処理を呼びます
393
394 // EEPROM からユーザ設定を読み込みます
395 user_config.raw = eeconfig_read_user();
396
397 // 有効な場合はデフォルトレイヤーを設定します
398 if (user_config.rgb_layer_change) {
399 rgblight_enable_noeeprom();
400 rgblight_sethsv_noeeprom_cyan();
401 rgblight_mode_noeeprom(1);
402 }
403}
404```
405上記の関数は読み取ったばかりの EEPROM 設定を使い、デフォルトのレイヤーの RGB 色を設定します。その「生の」値は、上で作成した「共用体」に基づいて使用可能な構造に変換されます。
406
407```c
408layer_state_t layer_state_set_user(layer_state_t state) {
409 switch (get_highest_layer(state)) {
410 case _RAISE:
411 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_magenta(); rgblight_mode_noeeprom(1); }
412 break;
413 case _LOWER:
414 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_red(); rgblight_mode_noeeprom(1); }
415 break;
416 case _PLOVER:
417 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_green(); rgblight_mode_noeeprom(1); }
418 break;
419 case _ADJUST:
420 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_white(); rgblight_mode_noeeprom(1); }
421 break;
422 default: // 他の全てのレイヤーあるいはデフォルトのレイヤー
423 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_cyan(); rgblight_mode_noeeprom(1); }
424 break;
425 }
426 return state;
427}
428```
429これにより、値が有効になっていた場合のみ、RGB アンダーグローが変更されます。この値を設定するために、`RGB_LYR` と呼ばれる `process_record_user` 用の新しいキーコードを作成します。さらに、通常の RGB コードを使う場合、上記の例を使ってオフになることを確認します。以下のようになります:
430```c
431bool process_record_user(uint16_t keycode, keyrecord_t *record) {
432 switch (keycode) {
433 case FOO:
434 if (record->event.pressed) {
435 // 押された時に何かをします
436 } else {
437 // 放された時に何かをします
438 }
439 return false; // このキーの以降の処理をスキップします
440 case KC_ENTER:
441 // enter が押された時に音を再生します
442 if (record->event.pressed) {
443 PLAY_NOTE_ARRAY(tone_qwerty);
444 }
445 return true; // QMK に enter のプレスまたはリリースイベントを送信させます
446 case RGB_LYR: // これにより、アンダーグローをレイヤー表示として、あるいは通常通りに使うことができます。
447 if (record->event.pressed) {
448 user_config.rgb_layer_change ^= 1; // 状態を切り替えます
449 eeconfig_update_user(user_config.raw); // 新しい状態を EEPROM に書き込みます
450 if (user_config.rgb_layer_change) { // レイヤーの状態表示が有効な場合
451 layer_state_set(layer_state); // すぐにレイヤーの色を更新します
452 }
453 }
454 return false; break;
455 case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // 任意の RGB コード に対して(quantum_keycodes.h を見てください。400行目参照)
456 if (record->event.pressed) { // これはレイヤー表示を無効にします。これを変更する場合は、無効にしたいだろうため。
457 if (user_config.rgb_layer_change) { // 有効な場合のみ
458 user_config.rgb_layer_change = false; // 無効にします
459 eeconfig_update_user(user_config.raw); // 設定を EEPROM に書き込みます
460 }
461 }
462 return true; break;
463 default:
464 return true; // 他の全てのキーコードを通常通りに処理します
465 }
466}
467```
468最後に、`eeconfig_init_user` 関数を追加して、EEPROM がリセットされた時にデフォルト値、さらにはカスタムアクションを指定できるようにします。EEPROM を強制的にリセットするには、`EEP_RST` キーコードあるいは[ブートマジック](ja/feature_bootmagic.md)機能を使います。例えば、デフォルトで rgb レイヤー表示を設定し、デフォルト値を保存したい場合。
469
470```c
471void eeconfig_init_user(void) { // EEPROM がリセットされます!
472 user_config.raw = 0;
473 user_config.rgb_layer_change = true; // デフォルトでこれを有効にします
474 eeconfig_update_user(user_config.raw); // デフォルト値を EEPROM に書き込みます
475
476 // これらの値も EEPROM に書き込むためには、noeeprom 以外のバージョンを使います
477 rgblight_enable(); // デフォルトで RGB を有効にします
478 rgblight_sethsv_cyan(); // デフォルトでシアンに設定します
479 rgblight_mode(1); // デフォルトでソリッドに設定します
480}
481```
482
483これで完了です。RGB レイヤー表示は必要な場合にのみ機能します。キーボードを取り外した後でも保存されます。RGB コードのいずれかを使うと、レイヤー表示が無効になり、設定したモードと色がそのままになります。
484
485### 'EECONFIG' 関数のドキュメント
486
487* キーボード/リビジョン: `void eeconfig_init_kb(void)`、`uint32_t eeconfig_read_kb(void)` および `void eeconfig_update_kb(uint32_t val)`
488* キーマップ: `void eeconfig_init_user(void)`、`uint32_t eeconfig_read_user(void)` および `void eeconfig_update_user(uint32_t val)`
489
490`val` は EEPROM に書き込みたいデータの値です。`eeconfig_read_*` 関数は EEPROM から32ビット(DWORD) 値を返します。
491
492# カスタムタッピング期間
493
494デフォルトでは、タッピング期間はグローバルに設定されていて、キーでは設定することができません。ほとんどのユーザにとって、これは全然問題ありません。しかし、場合によっては、`LT` キーとは異なるタイムアウトによって、デュアルファンクションキーが大幅に改善されます。なぜなら、一部のキーは他のキーよりも押し続けやすいためです。それぞれにカスタムキーコードを使う代わりに、キーごとに設定可能な `TAPPING_TERM` を使用できます。
495
496この機能を有効にするには、最初に `config.h` に `#define TAPPING_TERM_PER_KEY` を追加する必要があります。
497
498
499## `get_tapping_term` の実装例
500
501キーコードに基づいて `TAPPING TERM` を変更するには、次のようなものを `keymap.c` ファイルに追加します:
502
503```c
504uint16_t get_tapping_term(uint16_t keycode) {
505 switch (keycode) {
506 case SFT_T(KC_SPC):
507 return TAPPING_TERM + 1250;
508 case LT(1, KC_GRV):
509 return 130;
510 default:
511 return TAPPING_TERM;
512 }
513}
514```
515
516### `get_tapping_term` 関数のドキュメント
517
518ここにある他の多くの関数とは異なり、quantum あるいはキーボードレベルの関数を持つ必要はありません (または理由さえありません)。ここではユーザレベルの関数だけが有用なため、そのようにマークする必要はありません。
diff --git a/docs/ja/flashing.md b/docs/ja/flashing.md
new file mode 100644
index 000000000..1118fb5e2
--- /dev/null
+++ b/docs/ja/flashing.md
@@ -0,0 +1,247 @@
1# 書き込みの手順とブートローダ情報
2
3<!---
4 original document: 7494490d6:docs/flashing.md
5 git diff 7494490d6 HEAD -- docs/flashing.md | cat
6-->
7
8キーボードが使用するブートローダにはかなり多くの種類があり、ほぼ全てが異なる書き込みの方法を使います。幸いなことに、[QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) のようなプロジェクトは、あまり深く考える必要無しに様々なタイプと互換性を持つことを目指していますが、この文章では様々なタイプのブートローダとそれらを書き込むために利用可能な方法について説明します。
9
10`rules.mk` の `BOOTLOADER` 変数で選択されたブートローダがある場合、QMK は .hex ファイルがデバイスに書き込むのに適切なサイズかどうかを自動的に計算し、合計サイズをバイト単位で(最大値とともに)出力します。この処理を手動で実行するには、`check-size` を付けてコンパイルします。例えば、`make planck/rev4:default:check-size`。
11
12## DFU
13
14Atmel の DFU ブートローダはデフォルトで全ての atmega32u4 チップに搭載されており、PCB (旧 OLKB キーボード、Clueboard) に独自の IC を持つ多くのキーボードで使われています。一部のキーボードは、LUFA の DFU ブートローダ(または QMK のフォーク) (新しい OLKB キーボード)を使う場合もあり、そのハードウェアに固有の追加機能が追加されます。
15
16DFU ブートローダとの互換性を確保するために、以下のブロックが `rules.mk` にあることを確認してください(オプションとして代わりに `lufa-dfu` や `qmk-dfu` が使えます):
17
18```make
19# Bootloader selection
20# Teensy halfkay
21# Pro Micro caterina
22# Atmel DFU atmel-dfu
23# LUFA DFU lufa-dfu
24# QMK DFU qmk-dfu
25# ATmega32A bootloadHID
26# ATmega328P USBasp
27BOOTLOADER = atmel-dfu
28```
29
30互換性のあるフラッシャ:
31
32* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (推奨の GUI)
33* QMK の [dfu-programmer](https://github.com/dfu-programmer/dfu-programmer) / `:dfu` (推奨のコマンドライン)
34* [Atmel の Flip](http://www.microchip.com/developmenttools/productdetails.aspx?partno=flip) (非推奨)
35
36書き込み手順:
37
381. `RESET` キーコードを押すか、RESET ボタンをタップします(または RST を GND にショートします)。
392. OS がデバイスを検知するのを待ちます。
403. メモリを消去します(自動的に実行されるかもしれません)
414. .hex ファイルを書き込みます
425. デバイスをアプリケーションモードにリセットします(自動的に実行されるかもしれません)
43
44あるいは:
45
46 make <keyboard>:<keymap>:dfu
47
48### QMK DFU
49
50QMK には LUFA DFU ブートローダのフォークがあり、ブートローダを終了してアプリケーションに戻る時に単純なマトリックススキャンを行うことができます。また、何かが起きた時に、LED を点滅したり、スピーカーでカチカチ音をたてたりします。これらの機能を有効にするには、`config.h` で以下のブロックを有効にします (ブートローダを終了するキーは、ここで定義された INPUT と OUTPUT に接続する必要があります):
51
52 #define QMK_ESC_OUTPUT F1 // 通常 COL
53 #define QMK_ESC_INPUT D5 // 通常 ROW
54 #define QMK_LED E6
55 #define QMK_SPEAKER C6
56
57製造元と製品名は `config.h` から自動的に取得され、製品に「Bootloader」が追加されます。
58
59このブートローダを生成するには、`bootloader` ターゲット、例えば `make planck/rev4:default:bootloader` を使います。
60
61実稼働対応の .hex ファイル(アプリケーションおよびブートローダを含む)を生成するには、`production` ターゲット、例えば `make planck/rev4:default:production` を使います。
62
63### DFU コマンド
64
65ファームウェアを DFU デバイスに書き込むために使用できる DFU コマンドがいくつかあります。
66
67* `:dfu` - これが通常のオプションで、DFU デバイスが使用可能になるまで待機したのちファームウェアを書き込みます。5秒ごとに、DFU デバイスが存在するかチェックしています。
68* `:dfu-ee` - 通常の hex ファイルの代わりに `eep` ファイルを書き込みます。これを使用するのはまれです。
69* `:dfu-split-left` - デフォルトオプション (`:dfu`) と同様に、通常のファームウェアが書き込まれます。ただし、分割キーボードの「左側の」 EEPROM ファイルも書き込まれます。_これは、Elite C ベースの分割キーボードに最適です。_
70* `:dfu-split-right` - デフォルトオプション (`:dfu`) と同様に、通常のファームウェアが書き込まれます。ただし、分割キーボードの「右側の」 EEPROM ファイルも書き込まれます。_これは、Elite C ベースの分割キーボードに最適です。_
71
72## Caterina
73
74Arduino ボードとそのクローンは [Caterina ブートローダ](https://github.com/arduino/ArduinoCore-avr/tree/master/bootloaders/caterina) (Pro Micro またはそのクローンで構築されたキーボード)を使用し、avr109 プロトコルを使って仮想シリアルを介して通信します。[A-Star](https://www.pololu.com/docs/0J61/9) のようなブートローダは Caterina に基づいています。
75
76Caterina ブートローダとの互換性を確保するために、以下のブロックが `rules.mk` にあることを確認してください:
77
78```make
79# Bootloader selection
80# Teensy halfkay
81# Pro Micro caterina
82# Atmel DFU atmel-dfu
83# LUFA DFU lufa-dfu
84# QMK DFU qmk-dfu
85# ATmega32A bootloadHID
86# ATmega328P USBasp
87BOOTLOADER = caterina
88```
89
90互換性のあるフラッシャ:
91
92* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (推奨の GUI)
93* avr109 を使った [avrdude](http://www.nongnu.org/avrdude/) / `:avrdude` (推奨のコマンドライン)
94* [AVRDUDESS](https://github.com/zkemble/AVRDUDESS)
95
96書き込み手順:
97
981. `RESET` キーコードを押すか、RST をすばやく GND にショートします (入力後7秒で書き込みます)
992. OS がデバイスを検知するのを待ちます。
1003. .hex ファイルを書き込みます
1014. デバイスが自動的にリセットされるのを待ちます
102
103あるいは
104
105 make <keyboard>:<keymap>:avrdude
106
107
108#### Caterina コマンド
109
110ファームウェアを DFU デバイスに書き込むために使用できる DFU コマンドがいくつかあります。
111
112* `:avrdude` - これが通常のオプションで、Caterina デバイスが(新しい COM ポートを検出して)使用可能になるまで待機し、ファームウェアを書き込みます。
113* `:avrdude-loop` - これは `:avrdude` と同じコマンドを実行します。ただし書き込みが終了すると再び Caterina デバイスの書き込み待ちに戻ります。これは何台ものデバイスへ書き込むのに便利です。_Ctrl+C を押して、手動でこの繰り返しを終了させる必要があります。_
114* `:avrdude-split-left` - デフォルトオプション (`:avrdude`) と同様に通常のファームウェアが書き込まれます。ただし、分割キーボードの「左側の」 EEPROM ファイルも書き込まれます。_これは、Pro Micro ベースの分割キーボードに最適です。_
115* `:avrdude-split-right` - デフォルトオプション (`:avrdude`) と同様に通常のファームウェアが書き込まれます。ただし、分割キーボードの「右側の」 EEPROM ファイルも書き込まれます。_これは、Pro Micro ベースの分割キーボードに最適です。_
116
117
118
119## Halfkay
120
121Halfkay は PJRC によって開発された超スリムなプロトコルであり、HID を使用し、全ての Teensys (つまり 2.0)に搭載されています。
122
123Halfkay ブートローダとの互換性を確保するために、以下のブロックが `rules.mk` にあることを確認してください:
124
125```make
126# Bootloader selection
127# Teensy halfkay
128# Pro Micro caterina
129# Atmel DFU atmel-dfu
130# LUFA DFU lufa-dfu
131# QMK DFU qmk-dfu
132# ATmega32A bootloadHID
133# ATmega328P USBasp
134BOOTLOADER = halfkay
135```
136
137互換性のあるフラッシャ:
138
139* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (推奨の GUI)
140* [Teensy ローダー](https://www.pjrc.com/teensy/loader.html)
141* [Teensy ローダーコマンドライン](https://www.pjrc.com/teensy/loader_cli.html) (推奨のコマンドライン)
142
143書き込み手順:
144
1451. `RESET` キーコードを押すか、RST をすばやく GND にショートします (入力後7秒で書き込みます)
1462. OS がデバイスを検知するのを待ちます。
1473. .hex ファイルを書き込みます
1484. デバイスをアプリケーションモードにリセットします(自動的に実行されるかもしれません)
149
150## USBasploader
151
152USBasploader は matrixstorm によって開発されたブートローダです。V-USB を実行する ATmega328P のような非 USB AVR チップで使われます。
153
154USBasploader ブートローダとの互換性を確保するために、以下のブロックが `rules.mk` にあることを確認してください:
155
156```make
157# Bootloader selection
158# Teensy halfkay
159# Pro Micro caterina
160# Atmel DFU atmel-dfu
161# LUFA DFU lufa-dfu
162# QMK DFU qmk-dfu
163# ATmega32A bootloadHID
164# ATmega328P USBasp
165BOOTLOADER = USBasp
166```
167
168互換性のあるフラッシャ:
169
170* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (推奨の GUI)
171* `usbasp` プログラマを使った [avrdude](http://www.nongnu.org/avrdude/)
172* [AVRDUDESS](https://github.com/zkemble/AVRDUDESS)
173
174書き込み手順:
175
1761. `RESET` キーコードを押すか、RST を GND にすばやくショートしながら、ブートピンを GND にショートしたままにします。
1772. OS がデバイスを検知するのを待ちます。
1783. .hex ファイルを書き込みます
1794. デバイスをアプリケーションモードにリセットします(自動的に実行されるかもしれません)
180
181## BootloadHID
182
183BootloadHID は AVR マイクロコントローラ用の USB ブートローダです。アップローダーツールは Windows でカーネルレベルのドライバを必要としないため、DLL をインストールせずに実行することができます。
184
185bootloadHID ブートローダとの互換性を確保するために、以下のブロックが `rules.mk` にあることを確認してください:
186
187```make
188# Bootloader selection
189# Teensy halfkay
190# Pro Micro caterina
191# Atmel DFU atmel-dfu
192# LUFA DFU lufa-dfu
193# QMK DFU qmk-dfu
194# ATmega32A bootloadHID
195# ATmega328P USBasp
196BOOTLOADER = bootloadHID
197```
198
199互換性のあるフラッシャ:
200
201* [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash) (推奨の Windows GUI)
202* [bootloadhid コマンドライン](https://www.obdev.at/products/vusb/bootloadhid.html) / QMK の `:BootloadHID` (推奨のコマンドライン)
203
204書き込み手順:
205
2061. 以下のいずれかの方法を使ってブートローダに入ります:
207 * `RESET` キーコードをタップします (全てのデバイスでは動作しないかもしれません)
208 * キーボードを接続しながらソルトキーを押し続けます (通常はキーボードの readme に書かれています)
2092. OS がデバイスを検知するのを待ちます。
2103. .hex ファイルを書き込みます
2114. デバイスをアプリケーションモードにリセットします(自動的に実行されるかもしれません)
212
213あるいは:
214
215 make <keyboard>:<keymap>:bootloadHID
216
217## STM32
218
219全ての STM32 チップには、変更も削除もできない工場出荷時のブートローダがプリロードされています。一部の STM32 チップには USB プログラミングが付属していないブートローダがありますが(例えば STM32F103)、プロセスは同じです。
220
221現時点では、STM32 の `rules.mk` には、`BOOTLOADER` 変数は不要です。
222
223互換性のあるフラッシャ:
224
225* [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) (推奨の GUI)
226* [dfu-util](https://github.com/Stefan-Schmidt/dfu-util) / `:dfu-util` (推奨のコマンドライン)
227
228書き込み手順:
229
2301. 以下のいずれかの方法を使ってブートローダに入ります:
231 * `RESET` キーコードをタップします (STM32F042 デバイスでは動作しないかもしれません)
232 * リセット回路が存在する場合、RESET ボタンをタップします
233 * それ以外の場合は、(BOOT0 ボタンあるいはブリッジ経由で)BOOT0 を VCC にブリッジし、(REEST ボタンあるいはブリッジ経由で)RESET を GND にショートし、BOOT0 ブリッジを放す必要があります。
2342. OS がデバイスを検知するのを待ちます。
2353. .bin ファイルを書き込みます
236 * DFU 署名に関する警告が表示されます; 無視してください
2374. デバイスをアプリケーションモードにリセットします(自動的に実行されるかもしれません)
238 * コマンドラインからビルドする場合(例えば、`make planck/rev6:default:dfu-util`)、`rules.mk` の中で `:leave` が `DFU_ARGS` 変数に渡されるようにしてください (例えば、`DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave`)。そうすれば、書き込みの後でデバイスがリセットされます
239
240### STM32 コマンド
241
242ファームウェアを STM32 デバイスに書き込むために使用できる DFU コマンドがいくつかあります。
243
244* `:dfu-util` - STM32 デバイスに書き込むためのデフォルトコマンドで、STM32 ブートローダデバイスが見つかるまで待機します。
245* `:dfu-util-split-left` - デフォルトのオプション (`:dfu-util`) と同様に、通常のファームウェアが書き込まれます。ただし、分割キーボードの「左側の」 EEPROM の設定も行われます。
246* `:dfu-util-split-right` - デフォルトのオプション (`:dfu-util`) と同様に、通常のファームウェアが書き込まれます。ただし、分割キーボードの「右側の」 EEPROM の設定も行われます。
247* `:st-link-cli` - dfu-util ではなく、ST-LINK の CLI ユーティリティを介してファームウェアを書き込めます。
diff --git a/docs/ja/getting_started_build_tools.md b/docs/ja/getting_started_build_tools.md
new file mode 100644
index 000000000..1f7accb55
--- /dev/null
+++ b/docs/ja/getting_started_build_tools.md
@@ -0,0 +1,146 @@
1# ビルドツールのインストール
2
3<!---
4 original document: 5a02cc00a:docs/getting_started_build_tools.md
5 git diff 5a02cc00a HEAD -- docs/getting_started_build_tools.md | cat
6-->
7
8このページは QMK のためのビルド環境のセットアップを説明します。これらの手順は (atmega32u4 のような) AVR プロセッサを対象としてします。
9
10<!-- FIXME: We should have ARM instructions somewhere. -->
11
12**注意:** ここが初めての場合は、[QMK 初心者ガイド](ja/newbs.md)ページを調べてください。
13
14続ける前に、`make git-submodule` を実行して、サブモジュール(サードパーティライブラリ)が最新であることを再確認してください。
15
16## Linux
17
18常に最新の状態を保つためには、単に `sudo util/qmk_install.sh` を実行してください。全ての必要な依存関係が常にインストールされるはずです。**これは `apt-get upgrade` を実行します。**
19
20手動でインストールすることもできますが、このドキュメントは常に全ての要件を満たしているとは限りません。
21
22現在の要件は以下の通りですが、何をしようとしているかによっては全てが必要とは限りません。また、一部のシステムではパッケージとして全ての依存関係が利用できるとは限らず、あるいは名前が異なる場合があるかもしれません。
23
24```
25build-essential
26gcc
27unzip
28wget
29zip
30gcc-avr
31binutils-avr
32avr-libc
33dfu-programmer
34dfu-util
35gcc-arm-none-eabi
36binutils-arm-none-eabi
37libnewlib-arm-none-eabi
38git
39```
40
41好みのパッケージマネージャを使って依存関係をインストールします。
42
43Debian / Ubuntu の例:
44
45 sudo apt-get update
46 sudo apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi
47
48Fedora / Red Hat の例:
49
50 sudo dnf install gcc unzip wget zip dfu-util dfu-programmer avr-gcc avr-libc binutils-avr32-linux-gnu arm-none-eabi-gcc-cs arm-none-eabi-binutils-cs arm-none-eabi-newlib
51
52Arch / Manjaro の例:
53
54 pacman -S base-devel gcc unzip wget zip avr-gcc avr-binutils avr-libc dfu-util arm-none-eabi-gcc arm-none-eabi-binutils arm-none-eabi-newlib git dfu-programmer dfu-util
55
56## Nix
57
58[NixOS](https://nixos.org/) の場合、あるいは Linux または MacOS に Nix をインストールした場合は、ビルド環境を取得するためにリポジトリのルートで `nix-shell` を実行します。
59
60デフォルトでは、これは AVR と ARM の両方のためのコンパイラをダウンロードします。両方が必要ではない場合は、`avr` あるいは `arm` 引数を無効にします。例えば:
61
62 nix-shell --arg arm false
63
64## macOS
65[Homebrew](http://brew.sh/) を使っている場合は、以下のコマンドを使うことができます:
66
67 brew tap osx-cross/avr
68 brew tap osx-cross/arm
69 brew update
70 brew install avr-gcc@8
71 brew link --force avr-gcc@8
72 brew install dfu-programmer
73 brew install dfu-util
74 brew install arm-gcc-bin@8
75 brew link --force arm-gcc-bin@8
76 brew install avrdude
77
78これはお勧めの方法です。homebrew が無い場合は、[インストールしてください!](http://brew.sh/) コマンドラインで作業する人にとってとても価値があります。`avr-gcc@8` の homebrew でのインストール中、`make` と `make install` 部分は20分以上かかり、CPU使用率が高くなることに注意してください。
79
80## msys2 を使った Windows (推奨) :id=windows-with-msys2-recommended
81
82Windows Vista 以降のバージョン(7および10でテスト済み)について、使用するのに最適な環境は [msys2](http://www.msys2.org) です。
83
84* msys2 をダウンロードし、こちらの指示に従ってインストールしてください: http://www.msys2.org
85* ``MSYS2 MingGW 64-bit`` のショートカットを開きます
86* QMK リポジトリに移動します。例えば、c ドライブのルートにある場合:
87* `$ cd /c/qmk_firmware`
88* `util/qmk_install.sh` を実行し、指示に従います
89
90## Windows 10 (非推奨)
91Windows 10 の古い手順です。[上記の概要のように MSYS2](#windows-with-msys2-recommended) を使うことをお勧めします。
92
93### Creators Update
94Creators Update 以降の Windows 10 の場合、ファームウェアを直接ビルドして書き込むことができます。Creators Update の前は、ビルドだけが可能でした。まだそうではないか、不明な場合は、[これらの指示](https://support.microsoft.com/en-us/instantanswers/d4efb316-79f0-1aa1-9ef3-dcada78f3fa0/get-the-windows-10-creators-update)に従ってください。
95
96### Linux 用の Windows Subsystem
97Creators Update に加えて、Linux 用の Windows 10 Subystem が必要ですので、[これらの指示](http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/)に従ってインストールしてください。Anniversary update からの Linux 用の Windows 10 Subsystem が既にある場合、一部のキーボードは 14.04LTS に含まれるツールチェーンを使ってコンパイルしないため、16.04LTS に[アップグレード](https://betanews.com/2017/04/14/upgrade-windows-subsystem-for-linux/)することをお勧めします。`sudo do-release-upgrade` メソッドを選択した場合は、自分が何をしているかを知る必要があることに注意してください。
98
99### Git
100すでに Windows ファイルシステムにリポジトリをクローンしている場合は、この章を無視することができます。
101
102WSL Git では**なく**、Windows 用の通常の Git を使って Windows ファイルシステムにリポジトリをクローンする必要があります。以前に Git をインストールしたことが無ければ、[ダウンロード](https://git-scm.com/download/win)し、インストールしてください。次に[セットアップします](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup)。特に貢献する予定がある場合は、eメールとユーザ名をセットアップすることが重要です。
103
104Git がインストールされたら、Git Bash コマンドを開き、QMK をクローンしたい場所へディレクトリを変更します: スラッシュを使う必要があり、c ドライブは `/c/path/to/where/you/want/to/go` のようにアクセスされることに注意してください。次に、`git clone --recurse-submodules https://github.com/qmk/qmk_firmware` を実行します。これは現在のフォルダのサブディレクトリとして新しいフォルダ `qmk_firmware` を作成します。
105
106### ツールチェーンのセットアップ
107ツールチェーンのセットアップは Linux 用の Windows サブシステムを介して行われ、手順は完全に自動化されています。全てを手動で行いたい場合は、スクリプト以外の手順はありませんが、常に issue を開いて詳細情報を求めることができます。
108
1091. スタートメニューから "Bash On Ubuntu On Windows" を開いてください。
1102. クローンした `qmk_firmware` ディレクトリに移動します。パスは WSL 内で `/mnt/` から始まることに注意してください。つまり、例えば `cd /mnt/c/path/to/qmk_firmware` と書く必要があります。
1113. `util/wsl_install.sh` を実行し、画面上の手順に従います。
1124. Bash コマンドウィンドウを閉じ、再び開きます。
1135. ファームウェアをコンパイルし書き込む準備ができました!
114
115### 心に留めておくべき幾つかの重要なこと
116* 全ての最新の更新を取得するために `util/wsl_install.sh` を再実行することができます。
117* WSL は外部で実行可能ファイルを実行できないため、QMK リポジトリは Windows ファイルシステム上にある必要があります。
118* WSL Git は Windows の Git と互換性が**無い**ため、全ての Git 操作には、Windows Git Bash あるいは windows Git GUI を使ってください。
119* WSL 内あるいは普通に Windows を使ってファイルを編集できますが、makefile あるいはシェルスクリプトを編集する場合は、行末をUnix形式にしてファイルを保存するエディタを使うようにしてください。そうでなければコンパイルは機能しないかもしれません。
120
121## Docker
122
123これが少し複雑な場合は、Docker があなたが必要とするすぐに使える解決法かもしれません。[Docker CE](https://docs.docker.com/install/#supported-platforms) をインストールした後で、キーボード/キーマップをビルドするために `qmk_firmware` ディレクトリから以下のコマンドを実行します:
124```bash
125util/docker_build.sh keyboard:keymap
126# 例えば: util/docker_build.sh ergodox_ez:steno
127```
128これは目的のキーボード/キーマップをコンパイルし、結果として書き込み用に `.hex` あるいは `.bin` ファイルを QMK ディレクトリの中に残します。`:keymap` が省略された場合は全てのキーマップが使われます。パラメータの形式は、`make` を使ってビルドする時と同じであることに注意してください。
129
130スクリプトをパラメータ無しで開始することもできます。この場合、1つずつビルドパラメータを入力するように求められます。これが使いやすいと思うかもしれません:
131```bash
132util/docker_build.sh
133# パラメータを入力として読み込みます (空白にすると全てのキーボード/キーマップ)
134```
135
136`target` を指定することで Docker から直接キーボードをビルドし_かつ_書き込むためのサポートもあります。
137```bash
138util/docker_build.sh keyboard:keymap:target
139# 例えば: util/docker_build.sh planck/rev6:default:flash
140```
141Linux を使っている場合は、これはそのままで動作するはずです。Windows と macOS では、実行するのに [Docker Machine](http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos/) が必要です。これはセットアップが面倒なので、お勧めではありません: 代わりに [QMK Toolbox](https://github.com/qmk/qmk_toolbox) を使ってください。
142
143!> Docker for Windows は[Hyper-V](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v) を有効にする必要があります。これは、Windows 7、Windows 8 および **Windows 10 Home** のような Hyper-V を搭載していない Windows のバージョンでは機能しないことを意味します。
144
145## Vagrant
146ファームウェアをビルドするのに問題がある場合は、Vagrant と呼ばれるツールを試してみることができます。それは、ファームウェアをビルドする準備ができた既知の構成を搭載した仮想コンピュータをセットアップします。OLKB はこの仮想コンピュータのためのファイルをホストしません。Vagrant をセットアップする方法の詳細は、[vagrant ガイド](ja/getting_started_vagrant.md)にあります。
diff --git a/docs/ja/getting_started_make_guide.md b/docs/ja/getting_started_make_guide.md
new file mode 100644
index 000000000..d33485ce1
--- /dev/null
+++ b/docs/ja/getting_started_make_guide.md
@@ -0,0 +1,153 @@
1# より詳細な `make` 手順
2
3<!---
4 original document: 5f35203d1:docs/getting_started_make_guide.md
5 git diff 5f35203d1 HEAD -- docs/getting_started_make_guide.md | cat
6-->
7
8`make` コマンドの完全な構文は `<keyboard_folder>:<keymap>:<target>` です:
9
10* `<keyboard_folder>` はキーボードのパスです。例えば、`planck`
11 * 全てのキーボードをコンパイルするには `all` を使います。
12 * リビジョンを選択してコンパイルするためのパスを指定します。例えば `planck/rev4` あるいは `planck/rev3`
13 * キーボードにフォルダが無い場合は、省略することができます
14 * デフォルトのフォルダをコンパイルする場合は、省略することができます
15* `<keymap>` はキーマップの名前です。例えば、`algernon`
16 * 全てのキーマップをコンパイルするには `all` を使います。
17* `<target>` の詳細は以下で説明します。
18
19`<target>` は以下を意味します
20* target が指定されない場合は、以下の `all` と同じです
21* `all` は指定されたキーボード/リビジョン/キーマップの可能な全ての組み合わせのコンパイルを行います。例えば、`make planck/rev4:default` は1つの .hex を生成しますが、`make planck/rev4:all` は planck で利用可能な全てのキーマップについて hex を生成します。
22* `flash`、`dfu`、`teensy`、`avrdude`、`dfu-util` または `bootloadHID` はファームウェアをコンパイルし、キーボードにアップロードします。コンパイルが失敗すると、何もアップロードされません。使用するプログラマはキーボードに依存します。ほとんどのキーボードでは `dfu` ですが、ChibiOS キーボードについては `dfu-util` 、標準的な Teensy については `teensy` を使います。キーボードに使うコマンドを見つけるには、キーボード固有の readme をチェックしてください。
23* **注意**: 一部のオペレーティングシステムではこれらのコマンドが機能するためには root アクセスが必要です。その場合、例えば `sudo make planck/rev4:default:flash` を実行する必要があります。
24* `clean` は、全てをゼロからビルドするためにビルド出力フォルダを掃除します。説明できない問題がある場合は、通常のコンパイルの前にこれを実行してください。
25
26make コマンドの最後、つまり target の後に追加のオプションを追加することもできます
27
28* `make COLOR=false` - カラー出力をオフ
29* `make SILENT=true` - エラー/警告以外の出力をオフ
30* `make VERBOSE=true` - 全ての gcc のものを出力 (デバッグする必要が無い限り面白くありません)
31* `make EXTRAFLAGS=-E` - コンパイルせずにコードを前処理 (#define コマンドをデバッグしようとする場合に便利)
32
33make コマンド自体にもいくつかの追加オプションがあります。詳細は `make --help` を入力してください。最も有用なのはおそらく `-jx` です。これは複数の CPU を使ってコンパイルしたいことを指定し、`x` は使用したい CPU の数を表します。設定すると、特に多くのキーボード/キーマップをコンパイルしている場合は、コンパイル時間を大幅に短縮することができます。通常は、コンパイル中に他の作業を行うための余裕をもたせるために、持っている CPU の数より1つ少ない値に設定します。全てのオペレーティングシステムと make バージョンがオプションをサポートしているわけではないことに注意してください。
34
35コマンドの例を幾つか示します
36
37* `make all:all` は、全てをビルドします (全てのキーボードフォルダ、全てのキーマップ)。`root` から単に `make` を実行すると、これを実行します。
38* `make ergodox_infinity:algernon:clean` は、Ergodox Infinity キーボードのビルド出力を掃除します。
39* `make planck/rev4:default:flash COLOR=false` カラー出力なしでキーマップをビルドしアップロードします。
40
41## `rules.mk` オプション
42
43無効にするにはこれらの変数を `no` に設定します。有効にするには `yes` に設定します。
44
45`BOOTMAGIC_ENABLE`
46
47これにより、1つのキーとソルトキー(デフォルトではスペース)を押し続けることで、電力が失われても持続する様々な EEPROM 設定へアクセスできます。誤って設定が変更されることが多く、デバッグするのが難しい混乱した結果を生成するため、これを無効にしておくことをお勧めします。ヘルプセッションで発生する、より一般的な問題の1つです。
48
49`MOUSEKEY_ENABLE`
50
51これにより、キーコード/カスタム関数を介して、カーソルの動きとクリックを制御することができます。
52
53`EXTRAKEY_ENABLE`
54
55これにより、システムとオーディオ制御キーコードを使うことができます。
56
57`CONSOLE_ENABLE`
58
59これにより、[`hid_listen`](https://www.pjrc.com/teensy/hid_listen.html) を使って読むことができるメッセージを出力することができます。
60
61デフォルトで、全てのデバッグ( *dprint* ) 出力 ( *print*、*xprintf* )、およびユーザ出力 ( *uprint* ) メッセージが有効になります。これにより、フラッシュメモリの大部分が消費され、キーボードの .hex ファイルが大きすぎてプログラムできなくなるかもしれません。
62
63デバッグメッセージ( *dprint* ) を無効にし、.hex ファイルのサイズを小さくするには、`config.h` に `#define NO_DEBUG` を含めます。
64
65出力メッセージ( *print*、*xprintf* )とユーザ出力( *uprint* ) を無効にし、.hex のファイルサイズを小さくするには、`config.h` に `#define NO_PRINT` を含めます。
66
67出力メッセージ ( *print*、*xprintf* ) を無効にし、ユーザメッセージ ( *uprint* )を**そのままにする**には、`config.h` に `#define USER_PRINT` を含めます(この場合は、`#define NO_PRINT` も含めないでください)。
68
69テキストを見るには、`hid_listen` を開き、出力メッセージを見るのを楽しんでください。
70
71**注意:** キーマップコード以外の *uprint* メッセージを含めないでください。QMK システムフレームワーク内で使うべきではありません。さもないと、他の人の .hex ファイルが肥大化します。
72
73`COMMAND_ENABLE`
74
75これはマジックコマンドを有効にし、通常はデフォルトのマジックキーの組み合わせ `LSHIFT+RSHIFT+KEY` で起動されます。マジックコマンドは、デバッグメッセージ (`MAGIC+D`) の有効化や NKRO の一時的な切り替え (`MAGIC+N`) を含みます。
76
77`SLEEP_LED_ENABLE`
78
79コンピュータがスリープの間に LED がブレスできるようにします。ここでは Timer1 が使われます。この機能は大部分が未使用でテストされておらず、更新もしくは抽象化が必要です。
80
81`NKRO_ENABLE`
82
83これにより、キーボードはホスト OS に最大 248 個のキーが同時に押されていることを伝えることができます (NKRO 無しのデフォルトは 6 です)。NKRO は、`NKRO_ENABLE` が設定されていたとしても、デフォルトではオフです。config.h に `#define FORCE_NKRO` を追加するか、`MAGIC_TOGGLE_NKRO` をキーにバインドしてキーを押すことで、NKRO を強制することができます。
84
85`BACKLIGHT_ENABLE`
86
87これはスイッチ内の LED のバックライトを有効にします。`config.h` 内に以下を入れることでバックライトピンを指定することができます:
88
89 #define BACKLIGHT_PIN B7
90
91`MIDI_ENABLE`
92
93キーボードで MIDI の送受信を有効にします。MIDI 送信モードに入るためにキーコード `MI_ON` を使うことができ、オフにするために `MI_OFF` を使うことができます。これはほとんどテストされていない機能ですが、詳細については `quantum/quantum.c` ファイルで見つけることができます。
94
95`UNICODE_ENABLE`
96
97これによりキーマップで `UC(<code point>)` を使って Unicode 文字を送信することができます。`0x7FFF` までのコードポイントがサポートされます。これはほとんどの現代言語の文字と記号を対象にしますが、絵文字は対象外です。
98
99`UNICODEMAP_ENABLE`
100
101これによりキーマップで `X(<map index>)` を使って Unicode 文字を送信することができます。キーマップファイル内にマッピングテーブルを保持する必要があります。可能な全てのコードポイント( `0x10FFFF` まで)がサポートされます。
102
103`UCIS_ENABLE`
104
105これにより、送信したい文字に対応するニーモニックを入力することで Unicode 文字を送信することができます。キーマップファイル内にマッピングテーブルを保持する必要があります。可能な全てのコードポイント( `0x10FFFF` まで)がサポートされます。
106
107詳細と制限については、[Unicode ページ](ja/feature_unicode.md) を見てください。
108
109`BLUETOOTH_ENABLE`
110
111これによりキーコードをワイヤレスで送信するために Bluefruit EZ-key と連動することができます。D2 と D3 ピンを使います。
112
113`AUDIO_ENABLE`
114
115C6 ピン(抽象化が必要)でオーディオ出力できます。詳細は[オーディオページ](ja/feature_audio.md)を見てください。
116
117`FAUXCLICKY_ENABLE`
118
119クリック音のあるスイッチをエミュレートするためにブザーを使います。Cherry社製の青軸スイッチの安っぽい模倣です。デフォルトでは、`AUDIO_ENABLE` と同じように C6 ピンを使います。
120
121`VARIABLE_TRACE`
122
123これを使って変数の値の変更をデバッグします。詳細についてはユニットテストのページの[変数のトレース](ja/unit_testing.md#tracing-variables)のセクションを見てください。
124
125`API_SYSEX_ENABLE`
126
127これにより Quantum SYSEX API を使って文字列を送信することができます (どこに?)
128
129`KEY_LOCK_ENABLE`
130
131これは [キーロック](ja/feature_key_lock.md) を有効にします。
132
133`SPLIT_KEYBOARD`
134
135分割キーボード (let's split や bakingpy's boards のようなデュアル MCU) のサポートを有効にし、quantum/split_common にある全ての必要なファイルをインクルードします
136
137`SPLIT_TRANSPORT`
138
139ARM ベースの分割キーボード用の標準分割通信ドライバはまだ無いため、これらのために `SPLIT_TRANSPORT = custom` を使わなければなりません。カスタムの実装が使われるようにすることで、標準の分割キーボード通信コード(AVR 固有)が含まれないようにします。
140
141`CUSTOM_MATRIX`
142
143デフォルトのマトリックス走査ルーチンを独自のコードで置き換えます。詳細については、[カスタムマトリックスページ](ja/custom_matrix.md) を見てください。
144
145`DEBOUNCE_TYPE`
146
147デフォルトのキーデバウンスルーチンを別のものに置き換えます。`custom` の場合、独自の実装を提供する必要があります。
148
149## キーマップごとに Makefile オプションをカスタマイズ
150
151あなたのキーマップディレクトリに `rules.mk` というファイルがある場合、そのファイルで設定した全てのオプションは、あなたのキーボードの他の `rules.mk` オプションよりも優先されます。
152
153あなたのキーボードの `rules.mk` に `BACKLIGHT_ENABLE = yes` があるとします。あなたの特定のキーボードでバックライトが無いようにするには、`rules.mk` というファイルを作成し、`BACKLIGHT_ENABLE = no` を指定します。
diff --git a/docs/ja/getting_started_vagrant.md b/docs/ja/getting_started_vagrant.md
new file mode 100644
index 000000000..0bc5c4b79
--- /dev/null
+++ b/docs/ja/getting_started_vagrant.md
@@ -0,0 +1,62 @@
1# Vagrant クイックスタート
2
3<!---
4 original document: 7494490d6:docs/getting_started_vagrant.md
5 git diff 7494490d6 HEAD -- docs/getting_started_vagrant.md | cat
6-->
7
8このプロジェクトは、プライマリオペレーティングシステムに大きな変更を加えることなくキーボードの新しいファームウェアを非常に簡単に構築することができる `Vagrantfile` を含みます。これは、あなたがプロジェクトをクローンしビルドを実行した時に、ビルドのために Vagrantfile を使っている他のユーザと全く同じ環境を持つことも保証します。これにより、人々はあなたが遭遇した問題の解決をより簡単に行えるようになります。
9
10## 必要事項
11
12このリポジトリ内の `Vagrantfile` を使うには、[Vagrant](http://www.vagrantup.com/) およびサポートされるプロバイダがインストールされている必要があります:
13
14* [VirtualBox](https://www.virtualbox.org/) (バージョン 5.0.12 以降)
15 * 'Vagrant を使うために最もアクセスしやすいプラットフォーム' として販売
16* [VMware Workstation](https://www.vmware.com/products/workstation) および [Vagrant VMware プラグイン](http://www.vagrantup.com/vmware)
17 * (有料) VMware プラグインには、ライセンスされた VMware Workstation/Fusion のコピーが必要です。
18* [Docker](https://www.docker.com/)
19
20Vagrant 以外に、適切なプロバイダがインストールされ、その後におそらくコンピュータを再起動すると、このプロジェクトをチェックアウトしたフォルダ内の任意の場所で 'vagrant up' を単純に実行することができ、このプロジェクトをビルドするのに必要な全てのツールが含まれる環境(仮想マシンあるいはコンテナ)が開始されます。Vagrant をうまく始めるためのヒントの投稿がありますが、それ以外に、以下のビルドドキュメントを参照することもできます。
21
22## ファームウェアの書き込み
23
24ファームウェアを書き込む"簡単"な方法は、ホスト OS からツールを使うことです:
25
26* [QMK Toolbox](https://github.com/qmk/qmk_toolbox) (推奨)
27* [Teensy ローダー](https://www.pjrc.com/teensy/loader.html)
28* [Atmel FLIP](http://www.atmel.com/tools/flip.aspx)
29
30コマンドラインでプログラムしたい場合は、Vagranfile の ['modifyvm'] 行のコメントを解除して Linux への USB パススルーを有効にし、dfu-util/dfu-programmer のようなコマンドラインツールを使ってプログラムすることができます。あるいは Teensy CLI バージョンをインストールすることができます。
31
32## Vagrantfile の概要
33開発環境は QMK Docker イメージ、`qmkfm/base_container` を実行するように設定されています。これはシステム間の予測可能性が保証されるだけでなく、CI 環境もミラーされます。
34
35## FAQ
36
37### Virtualbox で問題が発生するのはなぜですか?
38Virtualbox 5 の特定のバージョンはこの Vagrantfile のボックスにインストールされている Virtualbox の拡張機能と互換性が無いようです。/vagrant のマウントで問題が発生した場合は、Virtualbox のバージョンを少なくとも 5.0.12 にアップグレードしてください。**または、以下のコマンドを実行してみることができます:**
39
40```console
41vagrant plugin install vagrant-vbguest
42```
43
44### 既存の環境を削除するにはどうすればいいですか?
45あなたの環境での作業が完了しましたか?このプロジェクトをチェックアウトしたフォルダの中のどこからでも、以下を実行してください:
46
47```console
48vagrant destroy
49```
50
51### Docker を直接使いたい場合はどうしますか?
52仮想マシン無しで Vagrant のワークフローを活用したいですか?Vagrantfile は仮想マシンの実行をバイパスし、コンテナを直接実行するように設定されています。Docker を強制的に使うように環境を立ち上げる場合は、以下を実行してください:
53```console
54vagrant up --provider=docker
55```
56
57### Docker コンテナではなく仮想マシンにアクセスするにはどうすればいいですか?
58以下を実行して、公式の QMK ビルダーイメージから直接起動する `vagrant` ユーザをバイパスするようにします:
59
60```console
61vagrant ssh -c 'sudo -i'
62```
diff --git a/docs/ja/keymap.md b/docs/ja/keymap.md
new file mode 100644
index 000000000..29eb1adc0
--- /dev/null
+++ b/docs/ja/keymap.md
@@ -0,0 +1,174 @@
1# キーマップの概要
2
3<!---
4 original document: 7494490d6:docs/keymap.md
5 git diff 7494490d6 HEAD -- docs/keymap.md | cat
6-->
7
8QMK のキーマップは C のソースファイルの中で定義されます。そのデータ構造は配列の配列です。外側はレイヤーを要素とする配列で、レイヤーはキーを要素とする配列。ほとんどのキーボードは `LAYOUT()` マクロを定義して、この配列の配列を作成しやすくしています。
9
10
11## キーマップとレイヤー
12QMKでは、**`const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS]`**は、**アクションコード**を保持している **16 bit** データの中でキーマップ情報の複数の**レイヤー**を保持します。最大で**32個のレイヤー**を定義することができます。
13
14普通のキー定義の場合、**アクションコード**の上位8ビットは全て0で、下位8ビットは**キーコード**としてキーによって生成された USB HID usage コードを保持します。
15
16各レイヤーは同時に有効にできます。レイヤーには 0 から 31 までのインデックスが付けられ、上位のレイヤーが優先されます。
17
18 Keymap: 32 Layers Layer: action code matrix
19 ----------------- ---------------------
20 stack of layers array_of_action_code[row][column]
21 ____________ precedence _______________________
22 / / | high / ESC / F1 / F2 / F3 ....
23 31 /___________// | /-----/-----/-----/-----
24 30 /___________// | / TAB / Q / W / E ....
25 29 /___________/ | /-----/-----/-----/-----
26 : _:_:_:_:_:__ | : /LCtrl/ A / S / D ....
27 : / : : : : : / | : / : : : :
28 2 /___________// | 2 `--------------------------
29 1 /___________// | 1 `--------------------------
30 0 /___________/ V low 0 `--------------------------
31
32
33TMK の歴史的経緯から、キーマップに保存されたアクションコードは、一部のドキュメントではキーコードと呼ばれる場合があります。
34
35### キーマップレイヤーステータス
36キーマップレイヤーの状態は、2つの32ビットパラメータによって決定されます。
37
38* **`default_layer_state`** は、常に有効で参照される基本キーマップレイヤー (0-31) を示します (デフォルトレイヤー)。
39* **`layer_state`** は現在の各レイヤーのオン/オフの状態をビットで持ちます。
40
41キーマップレイヤー '0' は通常 `default_layer` で、他のレイヤーはファームウェアの起動後に最初はオフになっていますが、これは `config.h` で異なる設定にすることが可能です。例えば Qwerty ではなく Colemak に切り替えるなど、キーレイアウトを完全に切り替える場合、`default_layer` を変更すると便利です。
42
43 Initial state of Keymap Change base layout
44 ----------------------- ------------------
45
46 31 31
47 30 30
48 29 29
49 : :
50 : : ____________
51 2 ____________ 2 / /
52 1 / / ,->1 /___________/
53 ,->0 /___________/ | 0
54 | |
55 `--- default_layer = 0 `--- default_layer = 1
56 layer_state = 0x00000001 layer_state = 0x00000002
57
58一方、`layer_state` を変更して、基本レイヤーをナビゲーションキー、ファンクションキー (F1-F12)、メディアキー、特別なアクションなどの機能を持つ他のレイヤーでオーバーレイすることができます。
59
60 Overlay feature layer
61 --------------------- bit|status
62 ____________ ---+------
63 31 / / 31 | 0
64 30 /___________// -----> 30 | 1
65 29 /___________/ -----> 29 | 1
66 : : | :
67 : ____________ : | :
68 2 / / 2 | 0
69 ,->1 /___________/ -----> 1 | 1
70 | 0 0 | 0
71 | +
72 `--- default_layer = 1 |
73 layer_state = 0x60000002 <-'
74
75
76
77### レイヤーの優先順位と透過性
78***上位のレイヤーはレイヤーのスタックでより高い優先順位を持つ***ことに注意してください。つまり、ファームウェアはキーコードを最上位から最下位まで検索します。レイヤーで **`KC_TRNS`**(透過)以外のキーコードを見つけると、検索を中止し、下位レイヤーは参照されません。
79
80オーバーレイレイヤーに `KC_TRANS` を配置して、レイアウトの一部だけを変更して下位レイヤーまたは基本レイヤーにフォールバックすることができます。
81`KC_TRANS` (`KC_TRNS` と `_______` はエイリアス) のキーには独自のキーコードがなく、キーコードの有効な下位レイヤーを参照します。
82
83## `keymap.c` の分析
84
85この例では、[デフォルトの Clueboard 66% キーマップの古いバージョン](https://github.com/qmk/qmk_firmware/blob/ca01d94005f67ec4fa9528353481faa622d949ae/keyboards/clueboard/keymaps/default/keymap.c)を見ていきます。そのファイルを別のブラウザウィンドウで開くとコンテキスト内のすべてを見ることができるので便利です。
86
87`keymap.c` ファイルには、あなたが関心があるであろう以下の2つの主要なセクションがあります:
88
89* [定義](#definitions)
90* [レイヤー/キーマップデータ構造](#layers-and-keymaps)
91
92### 定義 :id=definitions
93
94ファイルの上部に以下のものがあります:
95
96 #include QMK_KEYBOARD_H
97
98 // 便利な定義
99 #define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
100
101 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
102 * KC_TRNS (透過) の代わりに _______ を使うことができます *
103 * あるいは、KC_NO (NOOP) として XXXXXXX を使うことができます *
104 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
105
106 // 各レイヤーは読みやすいように名前を持ちます。
107 // アンダースコアは何も意味を持ちません
108 // STUFF あるいは他の名前のレイヤーを持つことができます。
109 // レイヤー名は全て同じ長さである必要はなく、
110 // また名前を完全に省略して単に数字を使うことができます。
111 #define _BL 0
112 #define _FL 1
113 #define _CL 2
114
115これらはキーマップとカスタム関数を作成するときに使うことができる便利な定義です。`GRAVE_MODS` 定義は後でカスタム関数で使われ、その下の `_BL`、`_FL`、`_CL` 定義は各レイヤーを参照しやすくします。
116
117注意: 古いキーマップファイルに `_______` および `XXXXXXX` の定義が含まれているかもしれません。これらはそれぞれ `KC_TRNS` および `KC_NO` の代わりに使うことができ、レイヤーがどのキーを上書きしているかを簡単に確認することができます。これらの定義はデフォルトで含まれるため、今では不要になりました。
118
119### レイヤーとキーマップ :id=layers-and-keymaps
120
121このファイルの主要部分は `keymaps[]` 定義です。ここで、レイヤーとそれらの内容を列挙します。ファイルのこの部分は、以下の定義から始まります:
122
123 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
124
125この後で、LAYOUT() マクロのリストがあります。LAYOUT() は単一のレイヤーを定義するためのキーのリストです。通常、1つ以上の"基本レイヤー" (QWERTY、Dvorak、Colemak など)があり、その上に1つ以上の"機能"レイヤーを重ねます。レイヤーの処理方法により、"より上位"のレイヤーの上に"より下位"のレイヤーを重ねることはできません。
126
127QMK の `keymaps[][MATRIX_ROWS][MATRIX_COLS]` は、16ビットのアクションコード( quantum キーコードとも呼ばれる)を保持します。一般的なキーを表すキーコードの場合、その上位バイトは0で、その下位バイトはキーボードの USB HID usage ID です。
128
129> QMK のフォーク元の TMK は、代わりに `const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS]` を使い、8ビットキーコードを保持します。一部のキーコード値は、`fn_actions[]` 配列を介して特定のアクションコードの実行を引き起こすために予約されています。
130
131#### 基本レイヤー
132
133Clueboard の基本レイヤーの例です:
134
135 /* Keymap _BL: Base Layer (Default Layer)
136 */
137 [_BL] = LAYOUT(
138 F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, \
139 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, \
140 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
141 KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \
142 KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC,KC_SPC, KC_HENK, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT),
143
144これについて注意すべきいくつかの興味深いこと:
145
146* C ソースの観点からは、これは単一の配列に過ぎませんが、物理デバイス上の各キーがどこにあるかをより簡単に可視化するために、空白が埋め込まれています。
147* 単純なキーボードスキャンコードの先頭には KC_ が付いていますが、"特別な"キーには付いていません。
148* 左上のキーはカスタム機能 0 (`F(0)`) をアクティブにします。
149* "Fn" キーは `MO(_FL)` で定義され、そのキーが押されている間は `_FL` レイヤーに移動します。
150
151#### 機能オーバーレイレイヤー
152
153機能レイヤーはコードの観点から基本レイヤーと違いはありません。ただし概念的には、置き換えの代わりにオーバーレイとしてそのレイヤーを構築します。多くの人にとってはこの区別は重要ではありませんが、より複雑なレイヤー設定を構築するにつれて、ますます重要になります。
154
155 [_FL] = LAYOUT(
156 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
157 _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
158 _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
159 _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
160 _______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
161
162注意すべきいくつかの興味深いこと:
163
164* `_______` 定義を使って、`KC_TRNS` を `_______` に変換しました。これによりこのレイヤーで変更されたキーを簡単に見つけることができます。
165* このレイヤーで `_______` キーのいずれかを押すと、次の下位のアクティブなレイヤーのキーがアクティブになります。
166
167# 核心となる詳細
168
169これで独自のキーマップを作成するための基本的な概要が得られました。詳細は以下のリソースを見てください:
170
171* [キーコード](ja/keycodes.md)
172* [キーマップ FAQ](ja/faq_keymap.md)
173
174これらのドキュメントの改善に積極的に取り組んでいます。それらを改善する方法について提案がある場合は、[issue を報告](https://github.com/qmk/qmk_firmware/issues/new)してください!