summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorJoshua Diamond <josh@windowoffire.com>2021-02-14 19:59:26 -0500
committerJoshua Diamond <josh@windowoffire.com>2021-02-14 19:59:26 -0500
commitf1a3ce49ccdfee79fbad76fd13bcf4448318eb6b (patch)
tree8725ba276f485dc62a40d8f6d1ebe1bbc84e6fb3 /docs
parentc80e5f9f8868ccaa8cb990be6f4da3f1011c2b78 (diff)
parent6f44c2ec31a6aeacd9e90060a9670be03be372fe (diff)
Merge branch 'master' into develop
Diffstat (limited to 'docs')
-rw-r--r--docs/feature_led_matrix.md85
-rw-r--r--docs/ja/adc_driver.md155
-rw-r--r--docs/ja/feature_unicode.md277
3 files changed, 479 insertions, 38 deletions
diff --git a/docs/feature_led_matrix.md b/docs/feature_led_matrix.md
index 1383c97b49..6de01f31a1 100644
--- a/docs/feature_led_matrix.md
+++ b/docs/feature_led_matrix.md
@@ -10,9 +10,11 @@ If you want to use RGB LED's you should use the [RGB Matrix Subsystem](feature_r
There is basic support for addressable LED matrix lighting with the I2C IS31FL3731 RGB controller. To enable it, add this to your `rules.mk`:
- LED_MATRIX_ENABLE = yes
- LED_MATRIX_DRIVER = IS31FL3731
-
+```make
+LED_MATRIX_ENABLE = yes
+LED_MATRIX_DRIVER = IS31FL3731
+```
+
You can use between 1 and 4 IS31FL3731 IC's. Do not specify `LED_DRIVER_ADDR_<N>` defines for IC's that are not present on your keyboard. You can define the following items in `config.h`:
| Variable | Description | Default |
@@ -28,33 +30,38 @@ You can use between 1 and 4 IS31FL3731 IC's. Do not specify `LED_DRIVER_ADDR_<N>
Here is an example using 2 drivers.
- // This is a 7-bit address, that gets left-shifted and bit 0
- // set to 0 for write, 1 for read (as per I2C protocol)
- // The address will vary depending on your wiring:
- // 0b1110100 AD <-> GND
- // 0b1110111 AD <-> VCC
- // 0b1110101 AD <-> SCL
- // 0b1110110 AD <-> SDA
- #define LED_DRIVER_ADDR_1 0b1110100
- #define LED_DRIVER_ADDR_2 0b1110110
-
- #define LED_DRIVER_COUNT 2
- #define LED_DRIVER_1_LED_COUNT 25
- #define LED_DRIVER_2_LED_COUNT 24
- #define LED_DRIVER_LED_COUNT LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL
+```c
+// This is a 7-bit address, that gets left-shifted and bit 0
+// set to 0 for write, 1 for read (as per I2C protocol)
+// The address will vary depending on your wiring:
+// 0b1110100 AD <-> GND
+// 0b1110111 AD <-> VCC
+// 0b1110101 AD <-> SCL
+// 0b1110110 AD <-> SDA
+#define LED_DRIVER_ADDR_1 0b1110100
+#define LED_DRIVER_ADDR_2 0b1110110
+
+#define LED_DRIVER_COUNT 2
+#define LED_DRIVER_1_LED_COUNT 25
+#define LED_DRIVER_2_LED_COUNT 24
+#define LED_DRIVER_LED_COUNT LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL
+```
Currently only 2 drivers are supported, but it would be trivial to support all 4 combinations.
Define these arrays listing all the LEDs in your `<keyboard>.c`:
- const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
- /* Refer to IS31 manual for these locations
- * driver
- * | LED address
- * | | */
- {0, C3_3},
- ....
- }
+```c
+ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+ /* Refer to IS31 manual for these locations
+ * driver
+ * | LED address
+ * | | */
+ { 0, C1_1 },
+ { 0, C1_15 },
+ // ...
+ }
+```
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](https://www.issi.com/WW/pdf/31FL3731.pdf) and the header file `drivers/issi/is31fl3731-simple.h`. The `driver` is the index of the driver you defined in your `config.h` (`0`, `1`, `2`, or `3` ).
@@ -66,26 +73,28 @@ All LED matrix keycodes are currently shared with the [backlight system](feature
Currently no LED matrix effects have been created.
-## Custom layer effects
+## Custom Layer Effects
Custom layer effects can be done by defining this in your `<keyboard>.c`:
- void led_matrix_indicators_kb(void) {
- led_matrix_set_index_value(index, value);
- }
+```c
+void led_matrix_indicators_kb(void) {
+ led_matrix_set_index_value(index, value);
+}
+```
A similar function works in the keymap as `led_matrix_indicators_user`.
-## Suspended state
+## Suspended State
To use the suspend feature, add this to your `<keyboard>.c`:
- void suspend_power_down_kb(void)
- {
- led_matrix_set_suspend_state(true);
- }
+```c
+void suspend_power_down_kb(void) {
+ led_matrix_set_suspend_state(true);
+}
- void suspend_wakeup_init_kb(void)
- {
- led_matrix_set_suspend_state(false);
- }
+void suspend_wakeup_init_kb(void) {
+ led_matrix_set_suspend_state(false);
+}
+``` \ No newline at end of file
diff --git a/docs/ja/adc_driver.md b/docs/ja/adc_driver.md
new file mode 100644
index 0000000000..0a531c8db9
--- /dev/null
+++ b/docs/ja/adc_driver.md
@@ -0,0 +1,155 @@
+# ADC ドライバ
+
+<!---
+ original document: 0.10.52:docs/adc_driver.md
+ git diff 0.10.52 HEAD -- docs/adc_driver.md | cat
+-->
+
+QMK は対応している MCU のアナログ・デジタルコンバータ(ADC) を使用し、特定のピンの電圧を計測することができます。この機能はデジタル出力の[ロータリーエンコーダ](ja/feature_encoders.md)などではなく、アナログ計測が必要な可変抵抗器を使用したボリュームコントロールや Bluetooth キーボードのバッテリー残量表示などの実装に役立ちます。
+
+このドライバは現在 AVR と一部の ARM デバイスをサポートしています。返される値は 0V と VCC (通常 AVR の場合は 5V または 3.3V、ARM の場合は 3.3V)の間でマッピングされた 10ビットの整数 (0-1023) ですが、ARM の場合、もしもより精度が必要であれば `#define` を使うと操作をより柔軟に制御できます。
+
+## 使い方
+
+このドライバを使うには、`rules.mk` に以下を追加します:
+
+```make
+SRC += analog.c
+```
+
+そして、コードの先頭に以下の include を置きます:
+
+```c
+#include "analog.h"
+```
+
+## チャンネル
+
+### AVR
+
+|Channel|AT90USB64/128|ATmega16/32U4|ATmega32A|ATmega328/P|
+|-------|-------------|-------------|---------|-----------|
+|0 |`F0` |`F0` |`A0` |`C0` |
+|1 |`F1` |`F1` |`A1` |`C1` |
+|2 |`F2` | |`A2` |`C2` |
+|3 |`F3` | |`A3` |`C3` |
+|4 |`F4` |`F4` |`A4` |`C4` |
+|5 |`F5` |`F5` |`A5` |`C5` |
+|6 |`F6` |`F6` |`A6` |* |
+|7 |`F7` |`F7` |`A7` |* |
+|8 | |`D4` | | |
+|9 | |`D6` | | |
+|10 | |`D7` | | |
+|11 | |`B4` | | |
+|12 | |`B5` | | |
+|13 | |`B6` | | |
+
+<sup>\* ATmega328/P には余分な2つの ADC チャンネルがありますが、DIP ピンアウトには存在せず、GPIO ピンとは共有されません。これらに直接アクセスするために、`adc_read()` を使えます。
+
+### ARM
+
+これらのピンの一部は同じチャンネルを使って ADC 上でダブルアップされることに注意してください。これは、これらのピンがどちらかの ADC に使われる可能性があるからです。
+
+また、F0 と F3 は異なるナンバリングスキーマを使うことに注意してください。F0 には1つの ADC があり、チャンネルは0から始まるインデックスですが、F3 には4つの ADC があり、チャンネルは1から始まるインデックスです。これは、F0 が ADC の `ADCv1` 実装を使用するのに対し、F3 が `ADCv3` 実装を使用するためです。
+
+|ADC|Channel|STM32F0xx|STM32F3xx|
+|---|-------|---------|---------|
+|1 |0 |`A0` | |
+|1 |1 |`A1` |`A0` |
+|1 |2 |`A2` |`A1` |
+|1 |3 |`A3` |`A2` |
+|1 |4 |`A4` |`A3` |
+|1 |5 |`A5` |`F4` |
+|1 |6 |`A6` |`C0` |
+|1 |7 |`A7` |`C1` |
+|1 |8 |`B0` |`C2` |
+|1 |9 |`B1` |`C3` |
+|1 |10 |`C0` |`F2` |
+|1 |11 |`C1` | |
+|1 |12 |`C2` | |
+|1 |13 |`C3` | |
+|1 |14 |`C4` | |
+|1 |15 |`C5` | |
+|1 |16 | | |
+|2 |1 | |`A4` |
+|2 |2 | |`A5` |
+|2 |3 | |`A6` |
+|2 |4 | |`A7` |
+|2 |5 | |`C4` |
+|2 |6 | |`C0` |
+|2 |7 | |`C1` |
+|2 |8 | |`C2` |
+|2 |9 | |`C3` |
+|2 |10 | |`F2` |
+|2 |11 | |`C5` |
+|2 |12 | |`B2` |
+|2 |13 | | |
+|2 |14 | | |
+|2 |15 | | |
+|2 |16 | | |
+|3 |1 | |`B1` |
+|3 |2 | |`E9` |
+|3 |3 | |`E13` |
+|3 |4 | | |
+|3 |5 | | |
+|3 |6 | |`E8` |
+|3 |7 | |`D10` |
+|3 |8 | |`D11` |
+|3 |9 | |`D12` |
+|3 |10 | |`D13` |
+|3 |11 | |`D14` |
+|3 |12 | |`B0` |
+|3 |13 | |`E7` |
+|3 |14 | |`E10` |
+|3 |15 | |`E11` |
+|3 |16 | |`E12` |
+|4 |1 | |`E14` |
+|4 |2 | |`B12` |
+|4 |3 | |`B13` |
+|4 |4 | |`B14` |
+|4 |5 | |`B15` |
+|4 |6 | |`E8` |
+|4 |7 | |`D10` |
+|4 |8 | |`D11` |
+|4 |9 | |`D12` |
+|4 |10 | |`D13` |
+|4 |11 | |`D14` |
+|4 |12 | |`D8` |
+|4 |13 | |`D9` |
+|4 |14 | | |
+|4 |15 | | |
+|4 |16 | | |
+
+## 関数
+
+### AVR
+
+|関数 |説明 |
+|----------------------------|------------------------------------------------------------------------------------------------------------------------------------|
+|`analogReference(mode)` |アナログの電圧リファレンスソースを設定する。`ADC_REF_EXTERNAL`、`ADC_REF_POWER`、`ADC_REF_INTERNAL` のいずれかでなければなりません。|
+|`analogReadPin(pin)` |指定されたピンから値を読み取ります。例えば、ATmega32U4 の ADC6 の場合 `F6`。 |
+|`pinToMux(pin)` |指定されたピンを mux 値に変換します。サポートされていないピンが指定された場合、"0V (GND)" の mux 値を返します。 |
+|`adc_read(mux)` |指定された mux に従って ADC から値を読み取ります。詳細は、MCU のデータシートを見てください。 |
+
+### ARM
+
+|関数 |説明 |
+|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|`analogReadPin(pin)` |指定されたピンから値を読み取ります。STM32F0 では チャンネル 0 の `A0`、STM32F3 ではチャンネル 1 の ADC1。ピンを複数の ADC に使える場合は、この関数のために番号の小さい ADC が選択されることに注意してください。例えば、`C0` は、ADC2 にも使える場合、ADC1 のチャンネル 6 になります。 |
+|`analogReadPinAdc(pin, adc)`|指定されたピンと ADC から値を読み取ります。例えば、`C0, 1` は、ADC1 ではなく ADC2 のチャンネル 6 から読み取ります。この関数では、ADC はインデックス 0 から始まることに注意してください。 |
+|`pinToMux(pin)` |指定されたピンをチャンネルと ADC の組み合わせに変換します。サポートされていないピンが指定された場合、"0V (GND)" の mux 値を返します。 |
+|`adc_read(mux)` |指定されたピンと ADC の組み合わせに応じて ADC から値を読み取ります。詳細は、MCU のデータシートを見てください。 |
+
+## 設定
+
+## ARM
+
+ADC の ARM 実装には、独自のキーボードとキーマップでオーバーライドして動作方法を変更できる幾つかの追加オプションがあります。利用可能なオプションの詳細については、特定のマイクロコントローラについて ChibiOS の対応する `hal_adc_lld.h` を調べてください。
+
+|`#define` |型 |既定値 |説明 |
+|---------------------|------|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|`ADC_CIRCULAR_BUFFER`|`bool`|`false` |`true` の場合、この実装は循環バッファを使います。 |
+|`ADC_NUM_CHANNELS` |`int` |`1` |ADC 動作の一部としてスキャンされるチャンネル数を設定します。現在の実装は `1` のみをサポートします。 |
+|`ADC_BUFFER_DEPTH` |`int` |`2` |各結果の深さを設定します。デフォルトでは12ビットの結果しか取得できないため、これを2バイトに設定して1つの値を含めることができます。8ビット以下の結果を選択した場合は、これを 1 に設定できます。 |
+|`ADC_SAMPLING_RATE` |`int` |`ADC_SMPR_SMP_1P5` |ADC のサンプリングレートを設定します。デフォルトでは、最も速い設定に設定されています。 |
+|`ADC_RESOLUTION` |`int` |`ADC_CFGR1_RES_12BIT`|結果の分解能。デフォルトでは12ビットを選択しますが、12、10、8、6ビットを選択できます。 |
diff --git a/docs/ja/feature_unicode.md b/docs/ja/feature_unicode.md
new file mode 100644
index 0000000000..bfcb866ce1
--- /dev/null
+++ b/docs/ja/feature_unicode.md
@@ -0,0 +1,277 @@
+# Unicode サポート
+
+<!---
+ original document: 0.10.53:docs/feature_unicode.md
+ git diff 0.10.53 HEAD -- docs/feature_unicode.md | cat
+-->
+
+Unicode 文字はキーボードから直接入力することができます!ただし幾つかの制限があります。
+
+キーボードで Unicode サポートを有効にするには、以下の事をする必要があります:
+
+1. サポートされている Unicode 実装のいずれかを選択します: [Basic Unicode](#basic-unicode)、[Unicode Map](#unicode-map)、[UCIS](#ucis)。
+2. オペレーティングシステムとセットアップに最適な[入力モード](#input-modes)を見つけます。
+3. コンフィギュレーションに適切な入力モード(または複数のモード)を[設定](#setting-the-input-mode)します。
+4. キーマップに Unicode キーコードを追加します。
+
+
+## 1. メソッド :id=methods
+
+QMK は、Unicode 入力を有効にし、キーマップに Unicode 文字を追加するための3つの異なる方法をサポートします。それぞれに柔軟性と使いやすさの点で長所と短所があります。あなたの使い方に最適なものを選んでください。
+
+ほとんどのユーザには Basic Unicode で十分です。ただし、サポートされる文字の範囲が広い(絵文字、珍しい記号など)ことが必要な場合には、Unicode Map を使う必要があります。
+
+<br>
+
+### 1.1. Basic Unicode :id=basic-unicode
+
+多少制限はありますが、最も使いやすい方法です。Unicode 文字をキーコードとしてキーマップ自体に格納するため、`0x7FFF` までのコードポイントのみをサポートします。これは、ほとんどの現代言語(東アジアを含む)の文字と記号を対象としますが、絵文字は対象外です。
+
+以下を `rules.mk` に追加します:
+
+```make
+UNICODE_ENABLE = yes
+```
+
+次に、`UC(c)` キーコードをキーマップに追加します。ここで、_c_ は目的の文字のコードポイントです (できれば16進数で最大4桁の長さが望ましいです)。例えば、`UC(0x40B)` は [Ћ](https://unicode-table.com/en/040B/) を出力し、`UC(0x30C4)` は [ツ](https://unicode-table.com/en/30C4) を出力します。
+
+<br>
+
+### 1.2. Unicode Map :id=unicode-map
+
+このメソッドは、標準の文字の範囲に加えて、絵文字、古代文字、珍しい記号なども対象にしています。実際、可能な全てのコードポイント(`0x10FFFF`まで)がサポートされています。Unicode 文字は独立のマッピングテーブルに格納されています。キーマップファイルに `unicode_map` 配列を維持する必要があります。これには最大 16384 エントリを含めることができます。
+
+以下を `rules.mk` に追加します:
+
+```make
+UNICODEMAP_ENABLE = yes
+```
+
+次に、`X(i)` キーコードをキーマップに追加します。ここで _i_ はマッピングテーブル内の目的の文字のインデックスです。これは数値にできますが、インデックスを列挙型に保持し、名前でアクセスすることをお勧めします。
+
+```c
+enum unicode_names {
+ BANG,
+ IRONY,
+ SNEK
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+ [BANG] = 0x203D, // ‽
+ [IRONY] = 0x2E2E, // ⸮
+ [SNEK] = 0x1F40D, // 🐍
+};
+```
+
+そして、キーマップで `X(BANG)`、`X(SNEK)` などを使うことができます。
+
+#### 小文字と大文字
+
+文字は å や Å のような小文字と大文字のペアで提供されることがあります。これらの文字を入力しやすくするために、キーマップで `XP(i, j)` を使うことができます。ここで、_i_ および _j_ はそれぞれ小文字と大文字のマッピングテーブルのインデックスです。キーを押した時に、シフトを押したままか Caps Lock をオンにしている場合は、2番目(大文字)の文字が挿入されます; そうでなければ最初(小文字)バージョンが出力されます。
+
+これは特殊文字がある国際レイアウトのためのキーマップを作成している時に最も役立ちます。別々のキーに文字の小文字および大文字バージョンを置く代わりに、`XP()` を使ってそれら両方を同じキーに持つことができます。これは Unicode キーを通常のアルファベットと混ぜるのに役立ちます。
+
+キーコードのサイズの制約により、_i_ と _j_ はそれぞれ `unicode_map` の最初の128文字のうち1つだけを参照できます。別の言い方をすると、0 ≤ _i_ ≤ 127 かつ 0 ≤ _j_ ≤ 127 です。これはほとんどのユースケースで十分ですが、インデックス計算をカスタマイズしたい場合は、[`unicodemap_index()`](https://github.com/qmk/qmk_firmware/blob/71f640d47ee12c862c798e1f56392853c7b1c1a8/quantum/process_keycode/process_unicodemap.c#L36) 関数をオーバーライドすることができます。これにより、例えば Shift/Caps の代わりに Ctrl をチェックすることもできます。
+
+<br>
+
+### 1.3. UCIS :id=ucis
+
+この方法も全ての可能なコードポイントをサポートします。Unicode Map の方法と同様に、キーマップファイル内にマッピングテーブルを保持する必要があります。ただし、この機能のための組み込みのキーコードはありません — この機能を起動するカスタムキーコードあるいは関数を作成する必要があります。
+
+以下を `rules.mk` に追加します:
+
+```make
+UCIS_ENABLE = yes
+```
+
+次に、キーマップファイルでこのようにテーブルを定義します:
+
+```c
+const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE(
+ UCIS_SYM("poop", 0x1F4A9), // 💩
+ UCIS_SYM("rofl", 0x1F923), // 🤣
+ UCIS_SYM("cuba", 0x1F1E8, 0x1F1FA), // 🇨🇺
+ UCIS_SYM("look", 0x0CA0, 0x005F, 0x0CA0), // ಠ_ಠ
+);
+```
+
+デフォルトでは、各テーブルエントリの長さは、最大3コードポイントです。この番号は `#define UCIS_MAX_CODE_POINTS n` を `config.h` ファイルに追加することで変更できます。
+
+UCIS 入力を使うには、`qk_ucis_start()` を呼び出します。次に、文字のニーモニック ("rofl" など) を入力し、Space か Enter か Esc を押します。QMK は "rofl" テキストを消去し、笑っている絵文字を挿入するはずです。
+
+#### カスタマイズ
+
+この機能をカスタマイズするためにキーマップで定義できる幾つかの関数があります。
+
+* `void qk_ucis_start_user(void)` – これは "start" 関数を呼び出す時に実行され、フィードバックを提供するために使うことができます。デフォルトでは、キーボードの絵文字を入力します。
+* `void qk_ucis_success(uint8_t symbol_index)` – これは入力が何かに一致して完了した時に実行されます。デフォルトでは何もしません。
+* `void qk_ucis_symbol_fallback (void)` – これは入力が何にも一致しない時に実行されます。デフォルトでは、入力を Unicode コードとして試そうとします。
+
+[`process_ucis.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_ucis.c) でこれらの関数のデフォルトの実装を見つけることができます。
+
+
+## 2. Input モード :id=input-modes
+
+QMK での Unicode の入力は、マクロのように、OS への一連の文字列を入力することで動作します。残念ながら、これが行われる方法はプラットフォームによって異なります。特に各プラットフォームでは Unicode 入力を引き起こすために、異なるキーの組み合わせが必要です。従って、対応する入力モードが QMK で設定されなければなりません。
+
+以下の入力モードが利用可能です:
+
+* **`UC_MAC`**: macOS の組み込み Unicode 16進数入力。`0x10FFFF` までのコードポイント(全ての利用可能なコードポイント)をサポートします。
+
+ 有効にするには、_システム環境設定 > キーボード > 入力ソース_ に移動し、(_その他_ の下の) _Unicode 16進数入力_ をリストに追加し、次にメニューバーの入力ドロップダウンからそれをアクティブにします。
+ デフォルトでは、このモードは Unicode 入力のために左 Option キー (`KC_LALT`) を使いますが、これは他のキーで [`UNICODE_KEY_MAC`](#input-key-configuration) を定義することで変更できます。
+
+ !> _Unicode 16進数入力_ 入力ソースの使用は、Option + 左矢印および Option + 右矢印 のような、幾つかの Option ベースのショートカットを無効にするかもしれません。
+
+ !> `UC_OSX` は `UC_MAC` の非推奨のエイリアスで、QMK の将来のバージョンで削除されます。全ての新しいキーマップは、`UC_MAC` を使うべきです。
+
+* **`UC_LNX`**: Linux の組み込み IBus Unicode 入力。`0x10FFFF` までのコードポイント(全ての利用可能なコードポイント)をサポートします。
+
+ デフォルトで有効になっていて、IBus が有効になったディストリビューションのほとんどどれでも動作します。IBus が無い場合、このモードは GTK アプリ下で動作しますが、他の場所ではほとんど動作しません。
+ デフォルトでは、このモードは Unicode 入力を開始するために Ctrl+Shift+U (`LCTL(LSFT(KC_U))`) を使いますが、これは他のキーコードで [`UNICODE_KEY_LNX`](#input-key-configuration) を定義することで変更できます。これは、Ctrl+Shift+U の挙動が Ctrl+Shift+E に統合された IBus バージョン 1.5.15 以上を必要とするかもしれません。
+
+* **`UC_WIN`**: _(非推奨)_ Windows の組み込み16進数テンキー Unicode 入力。`0xFFFF` までのコードポイントをサポートします。
+
+ 有効にするには、`HKEY_CURRENT_USER\Control Panel\Input Method` の下に、`EnableHexNumpad` という名前の `REG_SZ` 型のレジストリキーを作成し、その値を `1` に設定します。これは、管理者権限でコマンドラインプロンプトから `reg add "HKCU\Control Panel\Input Method" -v EnableHexNumpad -t REG_SZ -d 1` を実行することでできます。その後再起動します。
+ 信頼性と互換性の問題から、このモードはお勧めできません; 代わりに `UC_WINC` モードを使ってください。
+
+* **`UC_BSD`**: _(未実装)_ BSD での Unicode 入力。現時点では実装されていません。BSD ユーザでサポートを追加したい場合は、[GitHub で issue を開いて](https://github.com/qmk/qmk_firmware/issues)ください。
+
+* **`UC_WINC`**: [WinCompose](https://github.com/samhocevar/wincompose) を使った Windows Unicode 入力。v0.9.0 の時点で、`0x10FFFF` までのコードポイント(全ての利用可能なコードポイント)をサポートします。
+
+ 有効にするには、[最新のリリース](https://github.com/samhocevar/wincompose/releases/latest)をインストールします。インストールすると、起動時に WinCompose が自動的に実行されます。このモードはアプリがサポートする全てのバージョンの Windows で確実に動作します。
+ デフォルトでは、このモードは Compose キーとして右 Alt (`KC_RALT`) を使いますが、これは WinCompose 設定と他のキーで [`UNICODE_KEY_WINC`](#input-key-configuration) を定義することで変更できます。
+
+
+## 3. 入力モードの設定 :id=setting-the-input-mode
+
+目的の入力モードを設定するには、以下の定義を `config.h` に追加します:
+
+```c
+#define UNICODE_SELECTED_MODES UC_LNX
+```
+
+この例では、キーボードのデフォルトの入力モードを `UC_LNX` に設定します。これは、`UC_MAC` か `UC_WINC` か[上記](#input-modes)に列挙されている他のモードのいずれかに置き換えることができます。手動で別のモード([下記](#keycodes)を見てください)に切り替えない限り、キーボードは起動時に選択したモードを自動的に使います。
+
+複数の入力モードを選択することもできます。これにより、`UC_MOD`/`UC_RMOD` キーコードを使ってそれらを簡単に切り替えることができます。
+
+```c
+#define UNICODE_SELECTED_MODES UC_MAC, UC_LNX, UC_WINC
+```
+
+値はカンマで区切られていることに注意してください。キーボードは最後に使われた入力モードを記憶し、次の電源投入時にそれを使い続けます。`config.h` に `#define UNICODE_CYCLE_PERSIST false` を追加することで、これを無効にして常にリストの最初のモードで開始するように強制できます。
+
+#### キーコード
+
+以下のキーコードを使って、いつでも入力モードを切り替えることができます。これらをキーマップに追加すると、`UNICODE_SELECTED_MODES` に列挙されていないモードを含む特定の入力モードに素早く切り替えることができます。
+
+| キーコード |エイリアス | 入力モード | 説明 |
+|------------------------|-----------|--------------|--------------------------------------------------------------------|
+| `UNICODE_MODE_FORWARD` | `UC_MOD` | リストの次へ | 選択したモードを切り替えます。Shift が押された場合は逆方向 |
+| `UNICODE_MODE_REVERSE` | `UC_RMOD` | リストの前へ | 逆方向に選択したモードを切り替えます。Shift が押された場合は順方向 |
+| `UNICODE_MODE_MAC` | `UC_M_MA` | `UC_MAC` | macOS 入力に切り替え |
+| `UNICODE_MODE_LNX` | `UC_M_LN` | `UC_LNX` | Linux 入力に切り替え |
+| `UNICODE_MODE_WIN` | `UC_M_WI` | `UC_WIN` | Windows 入力に切り替え |
+| `UNICODE_MODE_BSD` | `UC_M_BS` | `UC_BSD` | BSD 入力に切り替え _(未実装)_ |
+| `UNICODE_MODE_WINC` | `UC_M_WC` | `UC_WINC` | WinCompose を使う Windows 入力に切り替え |
+
+コード内で `set_unicode_input_mode(x)` を呼び出すことで、入力モードを切り替えることもできます。ここで、_x_ は上記の入力モード定数のいずれか (例えば、`UC_LNX`) です。
+
+?> `matrix_init_user()` または同様の関数の中で `set_unicode_input_mode()` を呼び出すよりも、`UNICODE_SELECTED_MODES` を使うほうが望ましいです。Unicode システムとの統合性が高く、EEPROM への不要な書き込みを回避できるという利点があるからです。
+
+#### オーディオフィードバック
+
+キーボードで[オーディオ機能](ja/feature_audio.md)を有効にした場合、上記のキーを押したときにメロディーを再生するように設定できます。そのようにして、入力モードを切り替えた時になんらかのオーディオフィードバックを得ることができます。
+
+例えば、`config.h` ファイルに下記の定義を追加することができます:
+
+```c
+#define UNICODE_SONG_MAC AUDIO_ON_SOUND
+#define UNICODE_SONG_LNX UNICODE_LINUX
+#define UNICODE_SONG_BSD TERMINAL_SOUND
+#define UNICODE_SONG_WIN UNICODE_WINDOWS
+#define UNICODE_SONG_WINC UNICODE_WINDOWS
+```
+
+
+## 追加のカスタマイズ
+
+Unicode は大規模で多目的な機能のため、システムでより適切に動作するようにカスタマイズできるオプションが幾つかあります。
+
+### 入力関数の開始と終了
+
+プラットフォームで Unicode 入力を開始および終了する機能は、ローカルで上書きできます。可能な用途には、デフォルトキーを使用しない場合の入力モードの挙動のカスタマイズ、あるいは Unicode 入力への視覚/音声フィードバックの追加があります。
+
+* `void unicode_input_start(void)` – これはプラットフォームに Unicode 入力モードの入力を指示する初期シーケンスを送信します。例えば、Windows では左 Alt キーの後に Num+ を押したままにし、Linux では `UNICODE_KEY_LNX` の組み合わせ(デフォルト: Ctrl+Shift+U) を押します。
+* `void unicode_input_finish(void)` – これは、例えば Space を押すか Alt キーを放すなどして、Unicode 入力モードを終了するために呼ばれます。
+
+[`process_unicode_common.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_unicode_common.c) でこれらの関数のデフォルトの実装を見つけることができます。
+
+### 入力キーの設定
+
+`config.h` に対応する定義を追加することで、macOS、Linux、WinCompose で Unicode 入力を引き起こすために使われるキーをカスタマイズできます。デフォルト値はプラットフォームのデフォルト設定に一致するため、Unicode 入力が動作しない、あるいは(例えば左あるいは右 Alt を解放するために)異なるキーを使いたい場合以外はこれを変更する必要はありません。
+
+| 定義 | 型 | 既定値 | 例 |
+|--------------------|------------|--------------------|---------------------------------------------|
+| `UNICODE_KEY_MAC` | `uint8_t` | `KC_LALT` | `#define UNICODE_KEY_MAC KC_RALT` |
+| `UNICODE_KEY_LNX` | `uint16_t` | `LCTL(LSFT(KC_U))` | `#define UNICODE_KEY_LNX LCTL(LSFT(KC_E))` |
+| `UNICODE_KEY_WINC` | `uint8_t` | `KC_RALT` | `#define UNICODE_KEY_WINC KC_RGUI` |
+
+
+## Unicode 文字列の送信
+
+QMK は、Unicode 入力をプログラムでホストに送信できるようにする幾つかの関数を提供します:
+
+### `send_unicode_string()`
+
+この関数は、`send_string()` によく似ていますが、UTF-8 文字を直接入力できます。選択された入力モードでもサポートされている場合は、全てのコードポイントをサポートします。`keymap.c` ファイルが UTF-8 エンコーディングを使ってフォーマットされていることを確認してください。
+
+```c
+send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻");
+```
+
+使用例には、[Macros](ja/feature_macros.md) で説明されているように、キーが押された時に Unicode 文字列を送信することが含まれます。
+
+### `send_unicode_hex_string()`
+
+`send_unicode_string()` に似ていますが、文字は Unicode コードポイントで表され、16進数で記述され、空白で区切られています。例えば、上記のちゃぶ台返しは以下で表されます:
+
+```c
+send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");
+```
+
+[このサイト](https://r12a.github.io/app-conversion/)で結果を "Hex/UTF-32" で受け取ることで、Unicode 文字列をこの形式に簡単に変換できます。
+
+
+## 追加の言語サポート
+
+`quantum/keymap_extras` には、様々な言語ファイルがあります — これらは Colemak または BÉPO のような代替レイアウトのファイルと同じように動作します。これらの言語ヘッダのいずれかを `#include` すると、その言語/国のレイアウトに固有のキーコードにアクセスできます。このようなキーコードは、2文字の国/言語コードの後に、アンダースコアとキーが対応する4文字の略語が続くことで定義されます。例えば、キーマップに `keymap_french.h` を含め、`FR_UGRV` を使うと、ネイティブのフランス語 AZERTY レイアウトを使うシステムで入力すると、`ù` が出力されます。
+
+マシンで使うプライマリシステムレイアウトが US ANSI と異なる場合、これらの言語固有のキーコードを使うと、QMK キーマップが実際に画面に出力されるものとより一致するようになります。ただし、これらのキーコードは、内部の対応するデフォルトの US キーコードのエイリアスに過ぎず、キーボードで使われる HID プロトコル自体は本質的に US ANSI に基づいていることに注意してください。
+
+
+## Windows での国際文字
+
+### AutoHotkey
+
+この方法はキーボード自体で Unicode サポートを必要としませんが、代わりにバックグラウンドで [AutoHotkey](https://autohotkey.com) が実行されていることを当てにします。
+
+最初にプログラムで使われていないモディファイアの組み合わせを選択する必要があります。
+Ctrl+Alt+Win はあまり広く使われていないため、これに最適なはずです。
+mod-tab コンボ `LCAG_T` 用に定義されたマクロがあります。
+この mod-tab マクロをキーボードのキーに追加します。例えば: `LCAG_T(KC_TAB)`。
+これにより、キーを押してすぐ放すとキーはタブキーのように振る舞いますが、他のキーと一緒に使うとモディファイアに変わります。
+
+AutoHotkey のデフォルトのスクリプトで、カスタムホットキーを定義できます。
+
+ <^<!<#a::Send, ä
+ <^<!<#<+a::Send, Ä
+
+上のホットキーは、CtrlAltGui と CtrlAltGuiShift + 文字 a の組み合わせです。
+この組み合わせが押されると、AutoHotkey は `Send, ` の右側にあるテキストを挿入します。
+
+### 米国インターナショナル
+
+システム上で米国インターナショナルレイアウトを有効にすると、文字にアクセントをつけるために区切り文字を使います。例えば、"\`a" は à になります。
+これを有効にする方法は[ここ](https://support.microsoft.com/en-us/help/17424/windows-change-keyboard-layout)で見つかります。