aboutsummaryrefslogtreecommitdiff
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)
downloadqmk_firmware-f1a3ce49ccdfee79fbad76fd13bcf4448318eb6b.tar.gz
qmk_firmware-f1a3ce49ccdfee79fbad76fd13bcf4448318eb6b.zip
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 1383c97b4..6de01f31a 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
10 10
11There is basic support for addressable LED matrix lighting with the I2C IS31FL3731 RGB controller. To enable it, add this to your `rules.mk`: 11There is basic support for addressable LED matrix lighting with the I2C IS31FL3731 RGB controller. To enable it, add this to your `rules.mk`:
12 12
13 LED_MATRIX_ENABLE = yes 13```make
14 LED_MATRIX_DRIVER = IS31FL3731 14LED_MATRIX_ENABLE = yes
15 15LED_MATRIX_DRIVER = IS31FL3731
16```
17
16You 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`: 18You 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`:
17 19
18| Variable | Description | Default | 20| Variable | Description | Default |
@@ -28,33 +30,38 @@ You can use between 1 and 4 IS31FL3731 IC's. Do not specify `LED_DRIVER_ADDR_<N>
28 30
29Here is an example using 2 drivers. 31Here is an example using 2 drivers.
30 32
31 // This is a 7-bit address, that gets left-shifted and bit 0 33```c
32 // set to 0 for write, 1 for read (as per I2C protocol) 34// This is a 7-bit address, that gets left-shifted and bit 0
33 // The address will vary depending on your wiring: 35// set to 0 for write, 1 for read (as per I2C protocol)
34 // 0b1110100 AD <-> GND 36// The address will vary depending on your wiring:
35 // 0b1110111 AD <-> VCC 37// 0b1110100 AD <-> GND
36 // 0b1110101 AD <-> SCL 38// 0b1110111 AD <-> VCC
37 // 0b1110110 AD <-> SDA 39// 0b1110101 AD <-> SCL
38 #define LED_DRIVER_ADDR_1 0b1110100 40// 0b1110110 AD <-> SDA
39 #define LED_DRIVER_ADDR_2 0b1110110 41#define LED_DRIVER_ADDR_1 0b1110100
40 42#define LED_DRIVER_ADDR_2 0b1110110
41 #define LED_DRIVER_COUNT 2 43
42 #define LED_DRIVER_1_LED_COUNT 25 44#define LED_DRIVER_COUNT 2
43 #define LED_DRIVER_2_LED_COUNT 24 45#define LED_DRIVER_1_LED_COUNT 25
44 #define LED_DRIVER_LED_COUNT LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL 46#define LED_DRIVER_2_LED_COUNT 24
47#define LED_DRIVER_LED_COUNT LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL
48```
45 49
46Currently only 2 drivers are supported, but it would be trivial to support all 4 combinations. 50Currently only 2 drivers are supported, but it would be trivial to support all 4 combinations.
47 51
48Define these arrays listing all the LEDs in your `<keyboard>.c`: 52Define these arrays listing all the LEDs in your `<keyboard>.c`:
49 53
50 const is31_led g_is31_leds[DRIVER_LED_TOTAL] = { 54```c
51 /* Refer to IS31 manual for these locations 55 const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
52 * driver 56 /* Refer to IS31 manual for these locations
53 * | LED address 57 * driver
54 * | | */ 58 * | LED address
55 {0, C3_3}, 59 * | | */
56 .... 60 { 0, C1_1 },
57 } 61 { 0, C1_15 },
62 // ...
63 }
64```
58 65
59Where `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` ). 66Where `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` ).
60 67
@@ -66,26 +73,28 @@ All LED matrix keycodes are currently shared with the [backlight system](feature
66 73
67Currently no LED matrix effects have been created. 74Currently no LED matrix effects have been created.
68 75
69## Custom layer effects 76## Custom Layer Effects
70 77
71Custom layer effects can be done by defining this in your `<keyboard>.c`: 78Custom layer effects can be done by defining this in your `<keyboard>.c`:
72 79
73 void led_matrix_indicators_kb(void) { 80```c
74 led_matrix_set_index_value(index, value); 81void led_matrix_indicators_kb(void) {
75 } 82 led_matrix_set_index_value(index, value);
83}
84```
76 85
77A similar function works in the keymap as `led_matrix_indicators_user`. 86A similar function works in the keymap as `led_matrix_indicators_user`.
78 87
79## Suspended state 88## Suspended State
80 89
81To use the suspend feature, add this to your `<keyboard>.c`: 90To use the suspend feature, add this to your `<keyboard>.c`:
82 91
83 void suspend_power_down_kb(void) 92```c
84 { 93void suspend_power_down_kb(void) {
85 led_matrix_set_suspend_state(true); 94 led_matrix_set_suspend_state(true);
86 } 95}
87 96
88 void suspend_wakeup_init_kb(void) 97void suspend_wakeup_init_kb(void) {
89 { 98 led_matrix_set_suspend_state(false);
90 led_matrix_set_suspend_state(false); 99}
91 } 100``` \ 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 000000000..0a531c8db
--- /dev/null
+++ b/docs/ja/adc_driver.md
@@ -0,0 +1,155 @@
1# ADC ドライバ
2
3<!---
4 original document: 0.10.52:docs/adc_driver.md
5 git diff 0.10.52 HEAD -- docs/adc_driver.md | cat
6-->
7
8QMK は対応している MCU のアナログ・デジタルコンバータ(ADC) を使用し、特定のピンの電圧を計測することができます。この機能はデジタル出力の[ロータリーエンコーダ](ja/feature_encoders.md)などではなく、アナログ計測が必要な可変抵抗器を使用したボリュームコントロールや Bluetooth キーボードのバッテリー残量表示などの実装に役立ちます。
9
10このドライバは現在 AVR と一部の ARM デバイスをサポートしています。返される値は 0V と VCC (通常 AVR の場合は 5V または 3.3V、ARM の場合は 3.3V)の間でマッピングされた 10ビットの整数 (0-1023) ですが、ARM の場合、もしもより精度が必要であれば `#define` を使うと操作をより柔軟に制御できます。
11
12## 使い方
13
14このドライバを使うには、`rules.mk` に以下を追加します:
15
16```make
17SRC += analog.c
18```
19
20そして、コードの先頭に以下の include を置きます:
21
22```c
23#include "analog.h"
24```
25
26## チャンネル
27
28### AVR
29
30|Channel|AT90USB64/128|ATmega16/32U4|ATmega32A|ATmega328/P|
31|-------|-------------|-------------|---------|-----------|
32|0 |`F0` |`F0` |`A0` |`C0` |
33|1 |`F1` |`F1` |`A1` |`C1` |
34|2 |`F2` | |`A2` |`C2` |
35|3 |`F3` | |`A3` |`C3` |
36|4 |`F4` |`F4` |`A4` |`C4` |
37|5 |`F5` |`F5` |`A5` |`C5` |
38|6 |`F6` |`F6` |`A6` |* |
39|7 |`F7` |`F7` |`A7` |* |
40|8 | |`D4` | | |
41|9 | |`D6` | | |
42|10 | |`D7` | | |
43|11 | |`B4` | | |
44|12 | |`B5` | | |
45|13 | |`B6` | | |
46
47<sup>\* ATmega328/P には余分な2つの ADC チャンネルがありますが、DIP ピンアウトには存在せず、GPIO ピンとは共有されません。これらに直接アクセスするために、`adc_read()` を使えます。
48
49### ARM
50
51これらのピンの一部は同じチャンネルを使って ADC 上でダブルアップされることに注意してください。これは、これらのピンがどちらかの ADC に使われる可能性があるからです。
52
53また、F0 と F3 は異なるナンバリングスキーマを使うことに注意してください。F0 には1つの ADC があり、チャンネルは0から始まるインデックスですが、F3 には4つの ADC があり、チャンネルは1から始まるインデックスです。これは、F0 が ADC の `ADCv1` 実装を使用するのに対し、F3 が `ADCv3` 実装を使用するためです。
54
55|ADC|Channel|STM32F0xx|STM32F3xx|
56|---|-------|---------|---------|
57|1 |0 |`A0` | |
58|1 |1 |`A1` |`A0` |
59|1 |2 |`A2` |`A1` |
60|1 |3 |`A3` |`A2` |
61|1 |4 |`A4` |`A3` |
62|1 |5 |`A5` |`F4` |
63|1 |6 |`A6` |`C0` |
64|1 |7 |`A7` |`C1` |
65|1 |8 |`B0` |`C2` |
66|1 |9 |`B1` |`C3` |
67|1 |10 |`C0` |`F2` |
68|1 |11 |`C1` | |
69|1 |12 |`C2` | |
70|1 |13 |`C3` | |
71|1 |14 |`C4` | |
72|1 |15 |`C5` | |
73|1 |16 | | |
74|2 |1 | |`A4` |
75|2 |2 | |`A5` |
76|2 |3 | |`A6` |
77|2 |4 | |`A7` |
78|2 |5 | |`C4` |
79|2 |6 | |`C0` |
80|2 |7 | |`C1` |
81|2 |8 | |`C2` |
82|2 |9 | |`C3` |
83|2 |10 | |`F2` |
84|2 |11 | |`C5` |
85|2 |12 | |`B2` |
86|2 |13 | | |
87|2 |14 | | |
88|2 |15 | | |
89|2 |16 | | |
90|3 |1 | |`B1` |
91|3 |2 | |`E9` |
92|3 |3 | |`E13` |
93|3 |4 | | |
94|3 |5 | | |
95|3 |6 | |`E8` |
96|3 |7 | |`D10` |
97|3 |8 | |`D11` |
98|3 |9 | |`D12` |
99|3 |10 | |`D13` |
100|3 |11 | |`D14` |
101|3 |12 | |`B0` |
102|3 |13 | |`E7` |
103|3 |14 | |`E10` |
104|3 |15 | |`E11` |
105|3 |16 | |`E12` |
106|4 |1 | |`E14` |
107|4 |2 | |`B12` |
108|4 |3 | |`B13` |
109|4 |4 | |`B14` |
110|4 |5 | |`B15` |
111|4 |6 | |`E8` |
112|4 |7 | |`D10` |
113|4 |8 | |`D11` |
114|4 |9 | |`D12` |
115|4 |10 | |`D13` |
116|4 |11 | |`D14` |
117|4 |12 | |`D8` |
118|4 |13 | |`D9` |
119|4 |14 | | |
120|4 |15 | | |
121|4 |16 | | |
122
123## 関数
124
125### AVR
126
127|関数 |説明 |
128|----------------------------|------------------------------------------------------------------------------------------------------------------------------------|
129|`analogReference(mode)` |アナログの電圧リファレンスソースを設定する。`ADC_REF_EXTERNAL`、`ADC_REF_POWER`、`ADC_REF_INTERNAL` のいずれかでなければなりません。|
130|`analogReadPin(pin)` |指定されたピンから値を読み取ります。例えば、ATmega32U4 の ADC6 の場合 `F6`。 |
131|`pinToMux(pin)` |指定されたピンを mux 値に変換します。サポートされていないピンが指定された場合、"0V (GND)" の mux 値を返します。 |
132|`adc_read(mux)` |指定された mux に従って ADC から値を読み取ります。詳細は、MCU のデータシートを見てください。 |
133
134### ARM
135
136|関数 |説明 |
137|----------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
138|`analogReadPin(pin)` |指定されたピンから値を読み取ります。STM32F0 では チャンネル 0 の `A0`、STM32F3 ではチャンネル 1 の ADC1。ピンを複数の ADC に使える場合は、この関数のために番号の小さい ADC が選択されることに注意してください。例えば、`C0` は、ADC2 にも使える場合、ADC1 のチャンネル 6 になります。 |
139|`analogReadPinAdc(pin, adc)`|指定されたピンと ADC から値を読み取ります。例えば、`C0, 1` は、ADC1 ではなく ADC2 のチャンネル 6 から読み取ります。この関数では、ADC はインデックス 0 から始まることに注意してください。 |
140|`pinToMux(pin)` |指定されたピンをチャンネルと ADC の組み合わせに変換します。サポートされていないピンが指定された場合、"0V (GND)" の mux 値を返します。 |
141|`adc_read(mux)` |指定されたピンと ADC の組み合わせに応じて ADC から値を読み取ります。詳細は、MCU のデータシートを見てください。 |
142
143## 設定
144
145## ARM
146
147ADC の ARM 実装には、独自のキーボードとキーマップでオーバーライドして動作方法を変更できる幾つかの追加オプションがあります。利用可能なオプションの詳細については、特定のマイクロコントローラについて ChibiOS の対応する `hal_adc_lld.h` を調べてください。
148
149|`#define` |型 |既定値 |説明 |
150|---------------------|------|---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
151|`ADC_CIRCULAR_BUFFER`|`bool`|`false` |`true` の場合、この実装は循環バッファを使います。 |
152|`ADC_NUM_CHANNELS` |`int` |`1` |ADC 動作の一部としてスキャンされるチャンネル数を設定します。現在の実装は `1` のみをサポートします。 |
153|`ADC_BUFFER_DEPTH` |`int` |`2` |各結果の深さを設定します。デフォルトでは12ビットの結果しか取得できないため、これを2バイトに設定して1つの値を含めることができます。8ビット以下の結果を選択した場合は、これを 1 に設定できます。 |
154|`ADC_SAMPLING_RATE` |`int` |`ADC_SMPR_SMP_1P5` |ADC のサンプリングレートを設定します。デフォルトでは、最も速い設定に設定されています。 |
155|`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 000000000..bfcb866ce
--- /dev/null
+++ b/docs/ja/feature_unicode.md
@@ -0,0 +1,277 @@
1# Unicode サポート
2
3<!---
4 original document: 0.10.53:docs/feature_unicode.md
5 git diff 0.10.53 HEAD -- docs/feature_unicode.md | cat
6-->
7
8Unicode 文字はキーボードから直接入力することができます!ただし幾つかの制限があります。
9
10キーボードで Unicode サポートを有効にするには、以下の事をする必要があります:
11
121. サポートされている Unicode 実装のいずれかを選択します: [Basic Unicode](#basic-unicode)、[Unicode Map](#unicode-map)、[UCIS](#ucis)。
132. オペレーティングシステムとセットアップに最適な[入力モード](#input-modes)を見つけます。
143. コンフィギュレーションに適切な入力モード(または複数のモード)を[設定](#setting-the-input-mode)します。
154. キーマップに Unicode キーコードを追加します。
16
17
18## 1. メソッド :id=methods
19
20QMK は、Unicode 入力を有効にし、キーマップに Unicode 文字を追加するための3つの異なる方法をサポートします。それぞれに柔軟性と使いやすさの点で長所と短所があります。あなたの使い方に最適なものを選んでください。
21
22ほとんどのユーザには Basic Unicode で十分です。ただし、サポートされる文字の範囲が広い(絵文字、珍しい記号など)ことが必要な場合には、Unicode Map を使う必要があります。
23
24<br>
25
26### 1.1. Basic Unicode :id=basic-unicode
27
28多少制限はありますが、最も使いやすい方法です。Unicode 文字をキーコードとしてキーマップ自体に格納するため、`0x7FFF` までのコードポイントのみをサポートします。これは、ほとんどの現代言語(東アジアを含む)の文字と記号を対象としますが、絵文字は対象外です。
29
30以下を `rules.mk` に追加します:
31
32```make
33UNICODE_ENABLE = yes
34```
35
36次に、`UC(c)` キーコードをキーマップに追加します。ここで、_c_ は目的の文字のコードポイントです (できれば16進数で最大4桁の長さが望ましいです)。例えば、`UC(0x40B)` は [Ћ](https://unicode-table.com/en/040B/) を出力し、`UC(0x30C4)` は [ツ](https://unicode-table.com/en/30C4) を出力します。
37
38<br>
39
40### 1.2. Unicode Map :id=unicode-map
41
42このメソッドは、標準の文字の範囲に加えて、絵文字、古代文字、珍しい記号なども対象にしています。実際、可能な全てのコードポイント(`0x10FFFF`まで)がサポートされています。Unicode 文字は独立のマッピングテーブルに格納されています。キーマップファイルに `unicode_map` 配列を維持する必要があります。これには最大 16384 エントリを含めることができます。
43
44以下を `rules.mk` に追加します:
45
46```make
47UNICODEMAP_ENABLE = yes
48```
49
50次に、`X(i)` キーコードをキーマップに追加します。ここで _i_ はマッピングテーブル内の目的の文字のインデックスです。これは数値にできますが、インデックスを列挙型に保持し、名前でアクセスすることをお勧めします。
51
52```c
53enum unicode_names {
54 BANG,
55 IRONY,
56 SNEK
57};
58
59const uint32_t PROGMEM unicode_map[] = {
60 [BANG] = 0x203D, // ‽
61 [IRONY] = 0x2E2E, // ⸮
62 [SNEK] = 0x1F40D, // 🐍
63};
64```
65
66そして、キーマップで `X(BANG)`、`X(SNEK)` などを使うことができます。
67
68#### 小文字と大文字
69
70文字は å や Å のような小文字と大文字のペアで提供されることがあります。これらの文字を入力しやすくするために、キーマップで `XP(i, j)` を使うことができます。ここで、_i_ および _j_ はそれぞれ小文字と大文字のマッピングテーブルのインデックスです。キーを押した時に、シフトを押したままか Caps Lock をオンにしている場合は、2番目(大文字)の文字が挿入されます; そうでなければ最初(小文字)バージョンが出力されます。
71
72これは特殊文字がある国際レイアウトのためのキーマップを作成している時に最も役立ちます。別々のキーに文字の小文字および大文字バージョンを置く代わりに、`XP()` を使ってそれら両方を同じキーに持つことができます。これは Unicode キーを通常のアルファベットと混ぜるのに役立ちます。
73
74キーコードのサイズの制約により、_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 をチェックすることもできます。
75
76<br>
77
78### 1.3. UCIS :id=ucis
79
80この方法も全ての可能なコードポイントをサポートします。Unicode Map の方法と同様に、キーマップファイル内にマッピングテーブルを保持する必要があります。ただし、この機能のための組み込みのキーコードはありません — この機能を起動するカスタムキーコードあるいは関数を作成する必要があります。
81
82以下を `rules.mk` に追加します:
83
84```make
85UCIS_ENABLE = yes
86```
87
88次に、キーマップファイルでこのようにテーブルを定義します:
89
90```c
91const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE(
92 UCIS_SYM("poop", 0x1F4A9), // 💩
93 UCIS_SYM("rofl", 0x1F923), // 🤣
94 UCIS_SYM("cuba", 0x1F1E8, 0x1F1FA), // 🇨🇺
95 UCIS_SYM("look", 0x0CA0, 0x005F, 0x0CA0), // ಠ_ಠ
96);
97```
98
99デフォルトでは、各テーブルエントリの長さは、最大3コードポイントです。この番号は `#define UCIS_MAX_CODE_POINTS n` を `config.h` ファイルに追加することで変更できます。
100
101UCIS 入力を使うには、`qk_ucis_start()` を呼び出します。次に、文字のニーモニック ("rofl" など) を入力し、Space か Enter か Esc を押します。QMK は "rofl" テキストを消去し、笑っている絵文字を挿入するはずです。
102
103#### カスタマイズ
104
105この機能をカスタマイズするためにキーマップで定義できる幾つかの関数があります。
106
107* `void qk_ucis_start_user(void)` – これは "start" 関数を呼び出す時に実行され、フィードバックを提供するために使うことができます。デフォルトでは、キーボードの絵文字を入力します。
108* `void qk_ucis_success(uint8_t symbol_index)` – これは入力が何かに一致して完了した時に実行されます。デフォルトでは何もしません。
109* `void qk_ucis_symbol_fallback (void)` – これは入力が何にも一致しない時に実行されます。デフォルトでは、入力を Unicode コードとして試そうとします。
110
111[`process_ucis.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_ucis.c) でこれらの関数のデフォルトの実装を見つけることができます。
112
113
114## 2. Input モード :id=input-modes
115
116QMK での Unicode の入力は、マクロのように、OS への一連の文字列を入力することで動作します。残念ながら、これが行われる方法はプラットフォームによって異なります。特に各プラットフォームでは Unicode 入力を引き起こすために、異なるキーの組み合わせが必要です。従って、対応する入力モードが QMK で設定されなければなりません。
117
118以下の入力モードが利用可能です:
119
120* **`UC_MAC`**: macOS の組み込み Unicode 16進数入力。`0x10FFFF` までのコードポイント(全ての利用可能なコードポイント)をサポートします。
121
122 有効にするには、_システム環境設定 > キーボード > 入力ソース_ に移動し、(_その他_ の下の) _Unicode 16進数入力_ をリストに追加し、次にメニューバーの入力ドロップダウンからそれをアクティブにします。
123 デフォルトでは、このモードは Unicode 入力のために左 Option キー (`KC_LALT`) を使いますが、これは他のキーで [`UNICODE_KEY_MAC`](#input-key-configuration) を定義することで変更できます。
124
125 !> _Unicode 16進数入力_ 入力ソースの使用は、Option + 左矢印および Option + 右矢印 のような、幾つかの Option ベースのショートカットを無効にするかもしれません。
126
127 !> `UC_OSX` は `UC_MAC` の非推奨のエイリアスで、QMK の将来のバージョンで削除されます。全ての新しいキーマップは、`UC_MAC` を使うべきです。
128
129* **`UC_LNX`**: Linux の組み込み IBus Unicode 入力。`0x10FFFF` までのコードポイント(全ての利用可能なコードポイント)をサポートします。
130
131 デフォルトで有効になっていて、IBus が有効になったディストリビューションのほとんどどれでも動作します。IBus が無い場合、このモードは GTK アプリ下で動作しますが、他の場所ではほとんど動作しません。
132 デフォルトでは、このモードは Unicode 入力を開始するために Ctrl+Shift+U (`LCTL(LSFT(KC_U))`) を使いますが、これは他のキーコードで [`UNICODE_KEY_LNX`](#input-key-configuration) を定義することで変更できます。これは、Ctrl+Shift+U の挙動が Ctrl+Shift+E に統合された IBus バージョン 1.5.15 以上を必要とするかもしれません。
133
134* **`UC_WIN`**: _(非推奨)_ Windows の組み込み16進数テンキー Unicode 入力。`0xFFFF` までのコードポイントをサポートします。
135
136 有効にするには、`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` を実行することでできます。その後再起動します。
137 信頼性と互換性の問題から、このモードはお勧めできません; 代わりに `UC_WINC` モードを使ってください。
138
139* **`UC_BSD`**: _(未実装)_ BSD での Unicode 入力。現時点では実装されていません。BSD ユーザでサポートを追加したい場合は、[GitHub で issue を開いて](https://github.com/qmk/qmk_firmware/issues)ください。
140
141* **`UC_WINC`**: [WinCompose](https://github.com/samhocevar/wincompose) を使った Windows Unicode 入力。v0.9.0 の時点で、`0x10FFFF` までのコードポイント(全ての利用可能なコードポイント)をサポートします。
142
143 有効にするには、[最新のリリース](https://github.com/samhocevar/wincompose/releases/latest)をインストールします。インストールすると、起動時に WinCompose が自動的に実行されます。このモードはアプリがサポートする全てのバージョンの Windows で確実に動作します。
144 デフォルトでは、このモードは Compose キーとして右 Alt (`KC_RALT`) を使いますが、これは WinCompose 設定と他のキーで [`UNICODE_KEY_WINC`](#input-key-configuration) を定義することで変更できます。
145
146
147## 3. 入力モードの設定 :id=setting-the-input-mode
148
149目的の入力モードを設定するには、以下の定義を `config.h` に追加します:
150
151```c
152#define UNICODE_SELECTED_MODES UC_LNX
153```
154
155この例では、キーボードのデフォルトの入力モードを `UC_LNX` に設定します。これは、`UC_MAC` か `UC_WINC` か[上記](#input-modes)に列挙されている他のモードのいずれかに置き換えることができます。手動で別のモード([下記](#keycodes)を見てください)に切り替えない限り、キーボードは起動時に選択したモードを自動的に使います。
156
157複数の入力モードを選択することもできます。これにより、`UC_MOD`/`UC_RMOD` キーコードを使ってそれらを簡単に切り替えることができます。
158
159```c
160#define UNICODE_SELECTED_MODES UC_MAC, UC_LNX, UC_WINC
161```
162
163値はカンマで区切られていることに注意してください。キーボードは最後に使われた入力モードを記憶し、次の電源投入時にそれを使い続けます。`config.h` に `#define UNICODE_CYCLE_PERSIST false` を追加することで、これを無効にして常にリストの最初のモードで開始するように強制できます。
164
165#### キーコード
166
167以下のキーコードを使って、いつでも入力モードを切り替えることができます。これらをキーマップに追加すると、`UNICODE_SELECTED_MODES` に列挙されていないモードを含む特定の入力モードに素早く切り替えることができます。
168
169| キーコード |エイリアス | 入力モード | 説明 |
170|------------------------|-----------|--------------|--------------------------------------------------------------------|
171| `UNICODE_MODE_FORWARD` | `UC_MOD` | リストの次へ | 選択したモードを切り替えます。Shift が押された場合は逆方向 |
172| `UNICODE_MODE_REVERSE` | `UC_RMOD` | リストの前へ | 逆方向に選択したモードを切り替えます。Shift が押された場合は順方向 |
173| `UNICODE_MODE_MAC` | `UC_M_MA` | `UC_MAC` | macOS 入力に切り替え |
174| `UNICODE_MODE_LNX` | `UC_M_LN` | `UC_LNX` | Linux 入力に切り替え |
175| `UNICODE_MODE_WIN` | `UC_M_WI` | `UC_WIN` | Windows 入力に切り替え |
176| `UNICODE_MODE_BSD` | `UC_M_BS` | `UC_BSD` | BSD 入力に切り替え _(未実装)_ |
177| `UNICODE_MODE_WINC` | `UC_M_WC` | `UC_WINC` | WinCompose を使う Windows 入力に切り替え |
178
179コード内で `set_unicode_input_mode(x)` を呼び出すことで、入力モードを切り替えることもできます。ここで、_x_ は上記の入力モード定数のいずれか (例えば、`UC_LNX`) です。
180
181?> `matrix_init_user()` または同様の関数の中で `set_unicode_input_mode()` を呼び出すよりも、`UNICODE_SELECTED_MODES` を使うほうが望ましいです。Unicode システムとの統合性が高く、EEPROM への不要な書き込みを回避できるという利点があるからです。
182
183#### オーディオフィードバック
184
185キーボードで[オーディオ機能](ja/feature_audio.md)を有効にした場合、上記のキーを押したときにメロディーを再生するように設定できます。そのようにして、入力モードを切り替えた時になんらかのオーディオフィードバックを得ることができます。
186
187例えば、`config.h` ファイルに下記の定義を追加することができます:
188
189```c
190#define UNICODE_SONG_MAC AUDIO_ON_SOUND
191#define UNICODE_SONG_LNX UNICODE_LINUX
192#define UNICODE_SONG_BSD TERMINAL_SOUND
193#define UNICODE_SONG_WIN UNICODE_WINDOWS
194#define UNICODE_SONG_WINC UNICODE_WINDOWS
195```
196
197
198## 追加のカスタマイズ
199
200Unicode は大規模で多目的な機能のため、システムでより適切に動作するようにカスタマイズできるオプションが幾つかあります。
201
202### 入力関数の開始と終了
203
204プラットフォームで Unicode 入力を開始および終了する機能は、ローカルで上書きできます。可能な用途には、デフォルトキーを使用しない場合の入力モードの挙動のカスタマイズ、あるいは Unicode 入力への視覚/音声フィードバックの追加があります。
205
206* `void unicode_input_start(void)` – これはプラットフォームに Unicode 入力モードの入力を指示する初期シーケンスを送信します。例えば、Windows では左 Alt キーの後に Num+ を押したままにし、Linux では `UNICODE_KEY_LNX` の組み合わせ(デフォルト: Ctrl+Shift+U) を押します。
207* `void unicode_input_finish(void)` – これは、例えば Space を押すか Alt キーを放すなどして、Unicode 入力モードを終了するために呼ばれます。
208
209[`process_unicode_common.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_unicode_common.c) でこれらの関数のデフォルトの実装を見つけることができます。
210
211### 入力キーの設定
212
213`config.h` に対応する定義を追加することで、macOS、Linux、WinCompose で Unicode 入力を引き起こすために使われるキーをカスタマイズできます。デフォルト値はプラットフォームのデフォルト設定に一致するため、Unicode 入力が動作しない、あるいは(例えば左あるいは右 Alt を解放するために)異なるキーを使いたい場合以外はこれを変更する必要はありません。
214
215| 定義 | 型 | 既定値 | 例 |
216|--------------------|------------|--------------------|---------------------------------------------|
217| `UNICODE_KEY_MAC` | `uint8_t` | `KC_LALT` | `#define UNICODE_KEY_MAC KC_RALT` |
218| `UNICODE_KEY_LNX` | `uint16_t` | `LCTL(LSFT(KC_U))` | `#define UNICODE_KEY_LNX LCTL(LSFT(KC_E))` |
219| `UNICODE_KEY_WINC` | `uint8_t` | `KC_RALT` | `#define UNICODE_KEY_WINC KC_RGUI` |
220
221
222## Unicode 文字列の送信
223
224QMK は、Unicode 入力をプログラムでホストに送信できるようにする幾つかの関数を提供します:
225
226### `send_unicode_string()`
227
228この関数は、`send_string()` によく似ていますが、UTF-8 文字を直接入力できます。選択された入力モードでもサポートされている場合は、全てのコードポイントをサポートします。`keymap.c` ファイルが UTF-8 エンコーディングを使ってフォーマットされていることを確認してください。
229
230```c
231send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻");
232```
233
234使用例には、[Macros](ja/feature_macros.md) で説明されているように、キーが押された時に Unicode 文字列を送信することが含まれます。
235
236### `send_unicode_hex_string()`
237
238`send_unicode_string()` に似ていますが、文字は Unicode コードポイントで表され、16進数で記述され、空白で区切られています。例えば、上記のちゃぶ台返しは以下で表されます:
239
240```c
241send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B");
242```
243
244[このサイト](https://r12a.github.io/app-conversion/)で結果を "Hex/UTF-32" で受け取ることで、Unicode 文字列をこの形式に簡単に変換できます。
245
246
247## 追加の言語サポート
248
249`quantum/keymap_extras` には、様々な言語ファイルがあります — これらは Colemak または BÉPO のような代替レイアウトのファイルと同じように動作します。これらの言語ヘッダのいずれかを `#include` すると、その言語/国のレイアウトに固有のキーコードにアクセスできます。このようなキーコードは、2文字の国/言語コードの後に、アンダースコアとキーが対応する4文字の略語が続くことで定義されます。例えば、キーマップに `keymap_french.h` を含め、`FR_UGRV` を使うと、ネイティブのフランス語 AZERTY レイアウトを使うシステムで入力すると、`ù` が出力されます。
250
251マシンで使うプライマリシステムレイアウトが US ANSI と異なる場合、これらの言語固有のキーコードを使うと、QMK キーマップが実際に画面に出力されるものとより一致するようになります。ただし、これらのキーコードは、内部の対応するデフォルトの US キーコードのエイリアスに過ぎず、キーボードで使われる HID プロトコル自体は本質的に US ANSI に基づいていることに注意してください。
252
253
254## Windows での国際文字
255
256### AutoHotkey
257
258この方法はキーボード自体で Unicode サポートを必要としませんが、代わりにバックグラウンドで [AutoHotkey](https://autohotkey.com) が実行されていることを当てにします。
259
260最初にプログラムで使われていないモディファイアの組み合わせを選択する必要があります。
261Ctrl+Alt+Win はあまり広く使われていないため、これに最適なはずです。
262mod-tab コンボ `LCAG_T` 用に定義されたマクロがあります。
263この mod-tab マクロをキーボードのキーに追加します。例えば: `LCAG_T(KC_TAB)`。
264これにより、キーを押してすぐ放すとキーはタブキーのように振る舞いますが、他のキーと一緒に使うとモディファイアに変わります。
265
266AutoHotkey のデフォルトのスクリプトで、カスタムホットキーを定義できます。
267
268 <^<!<#a::Send, ä
269 <^<!<#<+a::Send, Ä
270
271上のホットキーは、CtrlAltGui と CtrlAltGuiShift + 文字 a の組み合わせです。
272この組み合わせが押されると、AutoHotkey は `Send, ` の右側にあるテキストを挿入します。
273
274### 米国インターナショナル
275
276システム上で米国インターナショナルレイアウトを有効にすると、文字にアクセントをつけるために区切り文字を使います。例えば、"\`a" は à になります。
277これを有効にする方法は[ここ](https://support.microsoft.com/en-us/help/17424/windows-change-keyboard-layout)で見つかります。