aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/_langs.md1
-rw-r--r--docs/_summary.md9
-rw-r--r--docs/adc_driver.md50
-rw-r--r--docs/arm_debugging.md22
-rw-r--r--docs/breaking_changes.md12
-rw-r--r--docs/coding_conventions_c.md2
-rw-r--r--docs/coding_conventions_python.md18
-rw-r--r--docs/config_options.md26
-rw-r--r--docs/contributing.md14
-rw-r--r--docs/custom_matrix.md108
-rw-r--r--docs/custom_quantum_functions.md134
-rw-r--r--docs/de/_summary.md2
-rw-r--r--docs/es/README.md4
-rw-r--r--docs/es/_summary.md208
-rw-r--r--docs/faq_build.md50
-rw-r--r--docs/faq_debug.md68
-rw-r--r--docs/faq_keymap.md63
-rw-r--r--docs/feature_advanced_keycodes.md40
-rw-r--r--docs/feature_backlight.md52
-rw-r--r--docs/feature_bootmagic.md62
-rw-r--r--docs/feature_haptic_feedback.md2
-rw-r--r--docs/feature_leader_key.md8
-rw-r--r--docs/feature_macros.md19
-rw-r--r--docs/feature_rgb_matrix.md31
-rw-r--r--docs/feature_rgblight.md12
-rw-r--r--docs/feature_userspace.md10
-rw-r--r--docs/flashing_bootloadhid.md2
-rw-r--r--docs/fr-fr/README.md4
-rw-r--r--docs/fr-fr/_summary.md162
-rw-r--r--docs/fr-fr/faq_build.md28
-rw-r--r--docs/fr-fr/faq_debug.md71
-rw-r--r--docs/fr-fr/faq_keymap.md67
-rw-r--r--docs/fr-fr/getting_started_github.md22
-rw-r--r--docs/fr-fr/getting_started_introduction.md2
-rw-r--r--docs/getting_started_build_tools.md13
-rw-r--r--docs/getting_started_github.md22
-rw-r--r--docs/getting_started_introduction.md2
-rw-r--r--docs/getting_started_make_guide.md4
-rw-r--r--docs/he-il/README.md4
-rw-r--r--docs/he-il/_summary.md211
-rw-r--r--docs/he-il/getting_started_github.md24
-rw-r--r--docs/he-il/getting_started_introduction.md4
-rw-r--r--docs/he-il/quantum_keycodes.md10
-rw-r--r--docs/index.html30
-rw-r--r--docs/ja/README.md37
-rw-r--r--docs/ja/_summary.md124
-rw-r--r--docs/ja/arm_debugging.md92
-rw-r--r--docs/ja/cli.md227
-rw-r--r--docs/ja/cli_configuration.md126
-rw-r--r--docs/ja/config_options.md393
-rw-r--r--docs/ja/contributing.md173
-rw-r--r--docs/ja/driver_installation_zadig.md53
-rw-r--r--docs/ja/faq.md11
-rw-r--r--docs/ja/faq_build.md160
-rw-r--r--docs/ja/faq_debug.md161
-rw-r--r--docs/ja/faq_general.md20
-rw-r--r--docs/ja/faq_keymap.md149
-rw-r--r--docs/ja/getting_started_getting_help.md20
-rw-r--r--docs/ja/getting_started_github.md70
-rw-r--r--docs/ja/getting_started_introduction.md65
-rw-r--r--docs/ja/newbs.md20
-rw-r--r--docs/ja/newbs_best_practices.md263
-rw-r--r--docs/ja/newbs_building_firmware.md14
-rw-r--r--docs/ja/newbs_building_firmware_configurator.md4
-rw-r--r--docs/ja/newbs_flashing.md12
-rw-r--r--docs/ja/newbs_getting_started.md16
-rw-r--r--docs/ja/newbs_git_best_practices.md24
-rw-r--r--docs/ja/newbs_git_resolving_merge_conflicts.md94
-rw-r--r--docs/ja/newbs_git_resynchronize_a_branch.md88
-rw-r--r--docs/ja/newbs_git_using_your_master_branch.md101
-rw-r--r--docs/ja/newbs_learn_more_resources.md6
-rw-r--r--docs/ja/newbs_testing_debugging.md8
-rw-r--r--docs/keycodes.md122
-rw-r--r--docs/newbs.md2
-rw-r--r--docs/newbs_best_practices.md163
-rw-r--r--docs/newbs_building_firmware.md2
-rw-r--r--docs/newbs_git_best_practices.md16
-rw-r--r--docs/newbs_git_resolving_merge_conflicts.md79
-rw-r--r--docs/newbs_git_resynchronize_a_branch.md71
-rw-r--r--docs/newbs_git_using_your_master_branch.md74
-rw-r--r--docs/proton_c_conversion.md2
-rw-r--r--docs/pt-br/README.md31
-rw-r--r--docs/pt-br/_summary.md121
-rw-r--r--docs/quantum_keycodes.md10
-rw-r--r--docs/ru-ru/_summary.md123
-rw-r--r--docs/ru-ru/becoming_a_qmk_collaborator.md9
-rw-r--r--docs/ru-ru/getting_started_github.md22
-rw-r--r--docs/ru-ru/getting_started_introduction.md58
-rw-r--r--docs/translating.md50
-rw-r--r--docs/ws2812_driver.md29
-rw-r--r--docs/zh-cn/README.md4
-rw-r--r--docs/zh-cn/custom_quantum_functions.md324
-rw-r--r--docs/zh-cn/faq_build.md28
-rw-r--r--docs/zh-cn/faq_debug.md68
-rw-r--r--docs/zh-cn/faq_keymap.md63
-rw-r--r--docs/zh-cn/getting_started_github.md22
-rw-r--r--docs/zh-cn/getting_started_introduction.md2
97 files changed, 4004 insertions, 1731 deletions
diff --git a/docs/_langs.md b/docs/_langs.md
index 7fb4a29d3..f7b375fb9 100644
--- a/docs/_langs.md
+++ b/docs/_langs.md
@@ -4,5 +4,6 @@
4 - [:es: Español](/es/) 4 - [:es: Español](/es/)
5 - [:fr: Français](/fr-fr/) 5 - [:fr: Français](/fr-fr/)
6 - [:he: עברית](/he-il/) 6 - [:he: עברית](/he-il/)
7 - [:brazil: Português](/pt-br/)
7 - [:ru: Русский](/ru-ru/) 8 - [:ru: Русский](/ru-ru/)
8 - [:jp: 日本語](/ja/) 9 - [:jp: 日本語](/ja/)
diff --git a/docs/_summary.md b/docs/_summary.md
index 808a8de4a..de8148138 100644
--- a/docs/_summary.md
+++ b/docs/_summary.md
@@ -3,7 +3,10 @@
3 * [Building Your First Firmware](newbs_building_firmware.md) 3 * [Building Your First Firmware](newbs_building_firmware.md)
4 * [Flashing Firmware](newbs_flashing.md) 4 * [Flashing Firmware](newbs_flashing.md)
5 * [Testing and Debugging](newbs_testing_debugging.md) 5 * [Testing and Debugging](newbs_testing_debugging.md)
6 * [Git Best Practices](newbs_best_practices.md) 6 * [Best Git Practices](newbs_git_best_practices.md)
7 * [Using Your Fork's Master](newbs_git_using_your_master_branch.md)
8 * [Resolving Merge Conflicts](newbs_git_resolving_merge_conflicts.md)
9 * [Resynchronizing a Branch](newbs_git_resynchronize_a_branch.md)
7 * [Learning Resources](newbs_learn_more_resources.md) 10 * [Learning Resources](newbs_learn_more_resources.md)
8 11
9* [QMK Basics](README.md) 12* [QMK Basics](README.md)
@@ -98,9 +101,11 @@
98 * [Hand Wiring Guide](hand_wire.md) 101 * [Hand Wiring Guide](hand_wire.md)
99 * [ISP Flashing Guide](isp_flashing_guide.md) 102 * [ISP Flashing Guide](isp_flashing_guide.md)
100 * [ARM Debugging Guide](arm_debugging.md) 103 * [ARM Debugging Guide](arm_debugging.md)
104 * [ADC Driver](adc_driver.md)
101 * [I2C Driver](i2c_driver.md) 105 * [I2C Driver](i2c_driver.md)
102 * [WS2812 Driver](ws2812_driver.md) 106 * [WS2812 Driver](ws2812_driver.md)
103 * [GPIO Controls](internals_gpio_control.md) 107 * [GPIO Controls](internals_gpio_control.md)
108 * [Custom Matrix](custom_matrix.md)
104 * [Proton C Conversion](proton_c_conversion.md) 109 * [Proton C Conversion](proton_c_conversion.md)
105 110
106* For a Deeper Understanding 111* For a Deeper Understanding
@@ -111,7 +116,7 @@
111 * [Using Eclipse with QMK](other_eclipse.md) 116 * [Using Eclipse with QMK](other_eclipse.md)
112 * [Using VSCode with QMK](other_vscode.md) 117 * [Using VSCode with QMK](other_vscode.md)
113 * [Support](support.md) 118 * [Support](support.md)
114 * [How to add translations](translating.md) 119 * [Translating the QMK Docs](translating.md)
115 120
116* QMK Internals (In Progress) 121* QMK Internals (In Progress)
117 * [Defines](internals_defines.md) 122 * [Defines](internals_defines.md)
diff --git a/docs/adc_driver.md b/docs/adc_driver.md
new file mode 100644
index 000000000..26e148add
--- /dev/null
+++ b/docs/adc_driver.md
@@ -0,0 +1,50 @@
1# ADC Driver
2
3QMK can leverage the Analog-to-Digital Converter (ADC) on supported MCUs to measure voltages on certain pins. This can be useful for implementing things such as battery level indicators for Bluetooth keyboards, or volume controls using a potentiometer, as opposed to a [rotary encoder](feature_encoders.md).
4
5This driver is currently AVR-only. The values returned are 10-bit integers (0-1023) mapped between 0V and VCC (usually 5V or 3.3V).
6
7## Usage
8
9To use this driver, add the following to your `rules.mk`:
10
11```make
12SRC += analog.c
13```
14
15Then place this include at the top of your code:
16
17```c
18#include "analog.h"
19```
20
21## Channels
22
23|Channel|AT90USB64/128|ATmega16/32U4|ATmega32A|ATmega328P|
24|-------|-------------|-------------|---------|----------|
25|0 |`F0` |`F0` |`A0` |`C0` |
26|1 |`F1` |`F1` |`A1` |`C1` |
27|2 |`F2` | |`A2` |`C2` |
28|3 |`F3` | |`A3` |`C3` |
29|4 |`F4` |`F4` |`A4` |`C4` |
30|5 |`F5` |`F5` |`A5` |`C5` |
31|6 |`F6` |`F6` |`A6` |* |
32|7 |`F7` |`F7` |`A7` |* |
33|8 | |`D4` | | |
34|9 | |`D6` | | |
35|10 | |`D7` | | |
36|11 | |`B4` | | |
37|12 | |`B5` | | |
38|13 | |`B6` | | |
39
40<sup>\* The ATmega328P possesses two extra ADC channels; however, they are not present on the DIP pinout, and are not shared with GPIO pins. You can use `adc_read()` directly to gain access to these.</sup>
41
42## Functions
43
44|Function |Description |
45|----------------------------|-------------------------------------------------------------------------------------------------------------------|
46|`analogReference(mode)` |Sets the analog voltage reference source. Must be one of `ADC_REF_EXTERNAL`, `ADC_REF_POWER` or `ADC_REF_INTERNAL`.|
47|`analogRead(pin)` |Reads the value from the specified Arduino pin, eg. `4` for ADC6 on the ATmega32U4. |
48|`analogReadPin(pin)` |Reads the value from the specified QMK pin, eg. `F6` for ADC6 on the ATmega32U4. |
49|`pinToMux(pin)` |Translates a given QMK pin to a mux value. If an unsupported pin is given, returns the mux value for "0V (GND)". |
50|`adc_read(mux)` |Reads the value from the ADC according to the specified mux. See your MCU's datasheet for more information. |
diff --git a/docs/arm_debugging.md b/docs/arm_debugging.md
index 448b7a8fc..04887d88b 100644
--- a/docs/arm_debugging.md
+++ b/docs/arm_debugging.md
@@ -1,4 +1,4 @@
1# ARM Debugging usign Eclipse 1# ARM Debugging using Eclipse
2 2
3This page describes how to setup debugging for ARM MCUs using an SWD adapter and open-source/free tools. In this guide we will install GNU MCU Eclipse IDE for C/C++ Developers and OpenOCD together with all the necessary dependencies. 3This page describes how to setup debugging for ARM MCUs using an SWD adapter and open-source/free tools. In this guide we will install GNU MCU Eclipse IDE for C/C++ Developers and OpenOCD together with all the necessary dependencies.
4 4
@@ -18,7 +18,7 @@ XPM installation instructions can be found [here](https://www.npmjs.com/package/
18 18
19### The ARM Toolchain 19### The ARM Toolchain
20 20
21Using XPM it is very easy to install the ARM toolchain. Enter the command `xpm install --global @gnu-mcu-eclipse/arm-none-eabi-gcc`. 21Using XPM it is very easy to install the ARM toolchain. Enter the command `xpm install --global @xpack-dev-tools/arm-none-eabi-gcc`.
22 22
23### Windows build tools 23### Windows build tools
24 24
@@ -33,7 +33,7 @@ If you have an ST-Link the drivers can be found [here](https://www.st.com/en/dev
33 33
34### OpenOCD 34### OpenOCD
35 35
36This dependency allows SWD access from GDB and it is essential for debugging. Run `xpm install --global @gnu-mcu-eclipse/openocd`. 36This dependency allows SWD access from GDB and it is essential for debugging. Run `xpm install --global @xpack-dev-tools/openocd`.
37 37
38### Java 38### Java
39 39
@@ -45,17 +45,17 @@ Now its finally time to install the IDE. Use the Release page [here](https://git
45 45
46## Configuring Eclipse 46## Configuring Eclipse
47 47
48Open up the Eclipse IDE we just downloaded. To import our QMK directory select File -> Import -> C/C++ -> Existing code as Makefile Project. Select next and use Browse to select your QMK folder. In the tool-chain list select ARM Cross GCC and select Finish. 48Open up the Eclipse IDE we just downloaded. To import our QMK directory select File -> Import -> C/C++ -> Existing Code as Makefile Project. Select Next and use Browse to select your QMK folder. In the tool-chain list select ARM Cross GCC and select Finish.
49 49
50Now you can see the QMK folder on the left hand side. Right click it and select Properties. On the left hand side, expand MCU and select ARM Toolchain Paths. Press xPack and OK. Repeat for OpenOCD Path and if you are on windows for Build Tool Path. Select Apply and Close. 50Now you can see the QMK folder on the left hand side. Right click it and select Properties. On the left hand side, expand MCU and select ARM Toolchains Paths. Press xPack and OK. Repeat for OpenOCD Path and if you are on Windows for Build Tools Path. Select Apply and Close.
51 51
52Now its time to install the necessary MCU packages. Go to Packs perspective by selecting Window -> Open Perspective -> Others -> Packs. Now select the yellow refresh symbol next to the Packs tab. This will take a long time as it is requesting the MCU definitions from various places. If some of the links fail you can probably select Ignore. 52Now its time to install the necessary MCU packages. Go to Packs perspective by selecting Window -> Perspective -> Open Perspective -> Other... -> Packs. Now select the yellow refresh symbol next to the Packs tab. This will take a long time as it is requesting the MCU definitions from various places. If some of the links fail you can probably select Ignore.
53 53
54When this finishes you must find the MCU which we will be building/debugging for. In this example I will be using the STM32F3 series MCUs. On the left, select STMicroelectonics -> STM32F3 Series. On the middle window we can see the pack. Right click and select Install. Once that is done we can go back to the default perspective, Window -> Open Perspective -> Others -> C/C++. 54When this finishes you must find the MCU which we will be building/debugging for. In this example I will be using the STM32F3 series MCUs. On the left, select STMicroelectronics -> STM32F3 Series. On the middle window we can see the pack. Right click and select Install. Once that is done we can go back to the default perspective, Window -> Perspective -> Open Perspective -> Other... -> C/C++.
55 55
56We need to let eclipse know the device we intent to build QMK on. Right click on the QMK folder -> Properties -> C/C++ Build -> Settings. Select the Devices tab and under devices select the appropriate variant of your MCU. For my example it is STM32F303CC 56We need to let eclipse know the device we intent to build QMK on. Right click on the QMK folder -> Properties -> C/C++ Build -> Settings. Select the Devices tab and under Devices select the appropriate variant of your MCU. For my example it is STM32F303CC
57 57
58While we are here let's setup the build command as well. Select C/C++ Build and then the Behavior tab. On the build command, replace `all` with your necessary make command. For example for a rev6 Planck with the default keymap this would be `planck/rev6:default`. Select Apply and Close. 58While we are here let's setup the build command as well. Select C/C++ Build and then the Behavior tab. On the Build command, replace `all` with your necessary make command. For example for a rev6 Planck with the default keymap this would be `planck/rev6:default`. Select Apply and Close.
59 59
60## Building 60## Building
61 61
@@ -71,7 +71,7 @@ NOTE: Make sure the SWCLK and SWDIO pins are not used in the matrix of your keyb
71 71
72### Configuring the Debugger 72### Configuring the Debugger
73 73
74Right click on your QMK folder, select Debug As -> Debug Configuration. Here double click on GDB OpenOCD Debugging. Select the debugger tab and enter the configuration necessary for your MCU. This might take some fiddling and googleing to find out. The default script for the STM32F3 is called stm32f3discovery.cfg. To let OpenOCD know, in the Config options enter `-f board/stm32f3discovery.cfg`. 74Right click on your QMK folder, select Debug As -> Debug Configurations... . Here double click on GDB OpenOCD Debugging. Select the Debugger tab and enter the configuration necessary for your MCU. This might take some fiddling and Googling to find out. The default script for the STM32F3 is called `stm32f3discovery.cfg`. To let OpenOCD know, in the Config options enter `-f board/stm32f3discovery.cfg`.
75 75
76NOTE: In my case this configuration script requires editing to disable the reset assertion. The locations of the scripts can be found in the actual executable field usually under the path `openocd/version/.content/scripts/board`. Here I edited `reset_config srst_only` to `reset_config none`. 76NOTE: In my case this configuration script requires editing to disable the reset assertion. The locations of the scripts can be found in the actual executable field usually under the path `openocd/version/.content/scripts/board`. Here I edited `reset_config srst_only` to `reset_config none`.
77 77
@@ -81,7 +81,7 @@ Select Apply and Close.
81 81
82Reset your keyboard. 82Reset your keyboard.
83 83
84Press the bug icon and if all goes well you should soon find yourself in the debug perspective. Here the program counter will pause at the beginning of the main function and way for you to press Play. Most of the features of all debuggers work on ARM MCUs but for exact details google is your friend! 84Press the bug icon and if all goes well you should soon find yourself in the Debug perspective. Here the program counter will pause at the beginning of the main function and wait for you to press Play. Most of the features of all debuggers work on Arm MCUs but for exact details Google is your friend!
85 85
86 86
87Happy debugging! 87Happy debugging!
diff --git a/docs/breaking_changes.md b/docs/breaking_changes.md
index b5bcb7a1c..56d14438d 100644
--- a/docs/breaking_changes.md
+++ b/docs/breaking_changes.md
@@ -10,16 +10,16 @@ The breaking change period is when we will merge PR's that change QMK in dangero
10 10
11## When is the next Breaking Change? 11## When is the next Breaking Change?
12 12
13The next Breaking Change is scheduled for Nov 29. 13The next Breaking Change is scheduled for February 29, 2020.
14 14
15### Important Dates 15### Important Dates
16 16
17* [x] 2019 Sep 21 - `future` is created. It will be rebased weekly. 17* [x] 2019 Sep 21 - `future` is created. It will be rebased weekly.
18* [ ] 2019 Nov 01 - `future` closed to new PR's. 18* [ ] 2020 Feb 1 - `future` closed to new PR's.
19* [ ] 2019 Nov 01 - Call for testers. 19* [ ] 2020 Feb 1 - Call for testers.
20* [ ] 2019 Nov 27 - `master` is locked, no PR's merged. 20* [ ] 2020 Feb 26 - `master` is locked, no PR's merged.
21* [ ] 2019 Nov 29 - Merge `future` to `master`. 21* [ ] 2020 Feb 28 - Merge `future` to `master`.
22* [ ] 2019 Nov 30 - `master` is unlocked. PR's can be merged again. 22* [ ] 2020 Feb 29 - `master` is unlocked. PR's can be merged again.
23 23
24## What changes will be included? 24## What changes will be included?
25 25
diff --git a/docs/coding_conventions_c.md b/docs/coding_conventions_c.md
index 08994bfbb..16e28b288 100644
--- a/docs/coding_conventions_c.md
+++ b/docs/coding_conventions_c.md
@@ -14,7 +14,7 @@ Most of our style is pretty easy to pick up on, but right now it's not entirely
14 * Think of them as a story describing the feature 14 * Think of them as a story describing the feature
15 * Use them liberally to explain why particular decisions were made. 15 * Use them liberally to explain why particular decisions were made.
16 * Do not write obvious comments 16 * Do not write obvious comments
17 * If you not sure if a comment is obvious, go ahead and include it. 17 * If you're not sure if a comment is obvious, go ahead and include it.
18* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns. 18* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
19* We use `#pragma once` at the start of header files rather than old-style include guards (`#ifndef THIS_FILE_H`, `#define THIS_FILE_H`, ..., `#endif`) 19* We use `#pragma once` at the start of header files rather than old-style include guards (`#ifndef THIS_FILE_H`, `#define THIS_FILE_H`, ..., `#endif`)
20* We accept both forms of preprocessor if's: `#ifdef DEFINED` and `#if defined(DEFINED)` 20* We accept both forms of preprocessor if's: `#ifdef DEFINED` and `#if defined(DEFINED)`
diff --git a/docs/coding_conventions_python.md b/docs/coding_conventions_python.md
index 694aa38cf..1aefc044e 100644
--- a/docs/coding_conventions_python.md
+++ b/docs/coding_conventions_python.md
@@ -8,7 +8,7 @@ Most of our style follows PEP8 with some local modifications to make things less
8 * Think of them as a story describing the feature 8 * Think of them as a story describing the feature
9 * Use them liberally to explain why particular decisions were made. 9 * Use them liberally to explain why particular decisions were made.
10 * Do not write obvious comments 10 * Do not write obvious comments
11 * If you not sure if a comment is obvious, go ahead and include it. 11 * If you're not sure if a comment is obvious, go ahead and include it.
12* We require useful docstrings for all functions. 12* We require useful docstrings for all functions.
13* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns. 13* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
14* Some of our practices conflict with the wider python community to make our codebase more approachable to non-pythonistas. 14* Some of our practices conflict with the wider python community to make our codebase more approachable to non-pythonistas.
@@ -309,6 +309,18 @@ FIXME(username): Revisit this code when the frob feature is done.
309 309
310...where username is your GitHub username. 310...where username is your GitHub username.
311 311
312# Unit Tests 312# Testing
313 313
314These are good. We should have some one day. 314We use a combination of Integration and Unit testing to ensure that the our code is as bug-free as possible. All the tests can be found in `lib/python/qmk/tests/`. You can run all the tests with `qmk pytest`.
315
316At the time of this writing our tests are not very comprehensive. Looking at the current tests and writing new test cases for untested situations is a great way to both familiarize yourself with the codebase and contribute to QMK.
317
318## Integration Tests
319
320Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.5/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
321
322## Unit Tests
323
324The other `test_*.py` files in `lib/python/qmk/tests/` contain unit tests. You can write tests for individual functions inside `lib/python/qmk/` here. Generally these files are named after the module, with dots replaced by underscores.
325
326At the time of this writing we do not do any mocking for our tests. If you would like to help us change this please [open an issue](https://github.com/qmk/qmk_firmware/issues/new?assignees=&labels=cli%2C+python&template=other_issues.md&title=) or [join #cli on Discord](https://discord.gg/heQPAgy) and start a conversation there.
diff --git a/docs/config_options.md b/docs/config_options.md
index 0cf3fb78a..6df082335 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -143,10 +143,14 @@ If you define these options you will enable the associated feature, which may in
143* `#define IGNORE_MOD_TAP_INTERRUPT` 143* `#define IGNORE_MOD_TAP_INTERRUPT`
144 * makes it possible to do rolling combos (zx) with keys that convert to other keys on hold, by enforcing the `TAPPING_TERM` for both keys. 144 * makes it possible to do rolling combos (zx) with keys that convert to other keys on hold, by enforcing the `TAPPING_TERM` for both keys.
145 * See [Mod tap interrupt](feature_advanced_keycodes.md#ignore-mod-tap-interrupt) for details 145 * See [Mod tap interrupt](feature_advanced_keycodes.md#ignore-mod-tap-interrupt) for details
146* `#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY`
147 * enables handling for per key `IGNORE_MOD_TAP_INTERRUPT` settings
146* `#define TAPPING_FORCE_HOLD` 148* `#define TAPPING_FORCE_HOLD`
147 * makes it possible to use a dual role key as modifier shortly after having been tapped 149 * makes it possible to use a dual role key as modifier shortly after having been tapped
148 * See [Hold after tap](feature_advanced_keycodes.md#tapping-force-hold) 150 * See [Hold after tap](feature_advanced_keycodes.md#tapping-force-hold)
149 * Breaks any Tap Toggle functionality (`TT` or the One Shot Tap Toggle) 151 * Breaks any Tap Toggle functionality (`TT` or the One Shot Tap Toggle)
152* `#define TAPPING_FORCE_HOLD_PER_KEY`
153 * enables handling for per key `TAPPING_FORCE_HOLD` settings
150* `#define LEADER_TIMEOUT 300` 154* `#define LEADER_TIMEOUT 300`
151 * how long before the leader key times out 155 * how long before the leader key times out
152 * If you're having issues finishing the sequence before it times out, you may need to increase the timeout setting. Or you may want to enable the `LEADER_PER_KEY_TIMING` option, which resets the timeout after each key is tapped. 156 * If you're having issues finishing the sequence before it times out, you may need to increase the timeout setting. Or you may want to enable the `LEADER_PER_KEY_TIMING` option, which resets the timeout after each key is tapped.
@@ -287,8 +291,27 @@ This is a [make](https://www.gnu.org/software/make/manual/make.html) file that i
287 * Defines which format (bin, hex) is copied to the root `qmk_firmware` folder after building. 291 * Defines which format (bin, hex) is copied to the root `qmk_firmware` folder after building.
288* `SRC` 292* `SRC`
289 * Used to add files to the compilation/linking list. 293 * Used to add files to the compilation/linking list.
294* `LIB_SRC`
295 * Used to add files as a library to the compilation/linking list.
296 The files specified by `LIB_SRC` is linked after the files specified by `SRC`.
297 For example, if you specify:
298 ```
299 SRC += a.c
300 LIB_SRC += lib_b.c
301 SRC += c.c
302 LIB_SRC += lib_d.c
303 ```
304 The link order is as follows.
305 ```
306 ... a.o c.o ... lib_b.a lib_d.a ...
307 ```
290* `LAYOUTS` 308* `LAYOUTS`
291 * A list of [layouts](feature_layouts.md) this keyboard supports. 309 * A list of [layouts](feature_layouts.md) this keyboard supports.
310* `LINK_TIME_OPTIMIZATION_ENABLE`
311 * Enables Link Time Optimization (`LTO`) when compiling the keyboard. This makes the process take longer, but can significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). However, this will automatically disable the old Macros and Functions features automatically, as these break when `LTO` is enabled.
312 It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`
313* `LTO_ENABLE`
314 * It has the same meaning as LINK_TIME_OPTIMIZATION_ENABLE. You can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`.
292 315
293## AVR MCU Options 316## AVR MCU Options
294* `MCU = atmega32u4` 317* `MCU = atmega32u4`
@@ -347,9 +370,6 @@ Use these to enable or disable building certain features. The more you have enab
347 * Forces the keyboard to wait for a USB connection to be established before it starts up 370 * Forces the keyboard to wait for a USB connection to be established before it starts up
348* `NO_USB_STARTUP_CHECK` 371* `NO_USB_STARTUP_CHECK`
349 * Disables usb suspend check after keyboard startup. Usually the keyboard waits for the host to wake it up before any tasks are performed. This is useful for split keyboards as one half will not get a wakeup call but must send commands to the master. 372 * Disables usb suspend check after keyboard startup. Usually the keyboard waits for the host to wake it up before any tasks are performed. This is useful for split keyboards as one half will not get a wakeup call but must send commands to the master.
350* `LINK_TIME_OPTIMIZATION_ENABLE`
351 * Enables Link Time Optimization (`LTO`) when compiling the keyboard. This makes the process take longer, but can significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). However, this will automatically disable the old Macros and Functions features automatically, as these break when `LTO` is enabled. It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`
352 * Alternatively, you can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`.
353 373
354## USB Endpoint Limitations 374## USB Endpoint Limitations
355 375
diff --git a/docs/contributing.md b/docs/contributing.md
index 04dc0da20..c4d5057a0 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -85,7 +85,7 @@ Limited experimentation on the devices I have available shows that 7 is high eno
85 85
86Documentation is one of the easiest ways to get started contributing to QMK. Finding places where the documentation is wrong or incomplete and fixing those is easy! We also very badly need someone to edit our documentation, so if you have editing skills but aren't sure where or how to jump in please [reach out for help](#where-can-i-go-for-help)! 86Documentation is one of the easiest ways to get started contributing to QMK. Finding places where the documentation is wrong or incomplete and fixing those is easy! We also very badly need someone to edit our documentation, so if you have editing skills but aren't sure where or how to jump in please [reach out for help](#where-can-i-go-for-help)!
87 87
88You'll find all our documentation in the `qmk_firmware/docs` directory, or if you'd rather use a web based workflow you can click "Suggest An Edit" at the top of each page on http://docs.qmk.fm/. 88You'll find all our documentation in the `qmk_firmware/docs` directory, or if you'd rather use a web based workflow you can click the "Edit this page" link at the bottom of each page on https://docs.qmk.fm/.
89 89
90When providing code examples in your documentation, try to observe naming conventions used elsewhere in the docs. For example, standardizing enums as `my_layers` or `my_keycodes` for consistency: 90When providing code examples in your documentation, try to observe naming conventions used elsewhere in the docs. For example, standardizing enums as `my_layers` or `my_keycodes` for consistency:
91 91
@@ -101,6 +101,18 @@ enum my_keycodes {
101}; 101};
102``` 102```
103 103
104### Previewing the Documentation
105
106Before opening a pull request, you can preview your changes if you have set up the development environment by running this command from the `qmk_firmware/` folder:
107
108 ./bin/qmk docs
109
110or if you only have Python 3 installed:
111
112 python3 -m http.server 8936
113
114and navigating to `http://localhost:8936/`.
115
104## Keymaps 116## Keymaps
105 117
106Most first-time QMK contributors start with their personal keymaps. We try to keep keymap standards pretty casual (keymaps, after all, reflect the personality of their creators) but we do ask that you follow these guidelines to make it easier for others to discover and learn from your keymap. 118Most first-time QMK contributors start with their personal keymaps. We try to keep keymap standards pretty casual (keymaps, after all, reflect the personality of their creators) but we do ask that you follow these guidelines to make it easier for others to discover and learn from your keymap.
diff --git a/docs/custom_matrix.md b/docs/custom_matrix.md
new file mode 100644
index 000000000..cfa900a33
--- /dev/null
+++ b/docs/custom_matrix.md
@@ -0,0 +1,108 @@
1# Custom Matrix
2
3QMK provides a mechanism to supplement or replace the default matrix scanning routine with your own code.
4
5The reasons to use this feature include:
6
7* Extra hardware between the keyboard's switches and MCU pins
8 * I/O multiplexer
9 * Line decoder
10* Irregular switch matrix
11 * Simultaneous use of `COL2ROW` and `ROW2COL`
12
13## Prerequisites
14
15Implementing custom matrix usually involves compilation of an additional source file. It is recommended that for consistency, this file is called `matrix.c`.
16
17Add a new file to your keyboard directory:
18```text
19keyboards/<keyboard>/matrix.c
20```
21
22And to configure compilation for the new file, add this to your `rules.mk`:
23```make
24SRC += matrix.c
25```
26
27## 'lite'
28
29Provides a default implementation for various scanning functions, reducing the boilerplate code when implementing custom matrix.
30To configure it, add this to your `rules.mk`:
31
32```make
33CUSTOM_MATRIX = lite
34```
35
36And implement the following functions in a `matrix.c` file in your keyboard folder:
37
38```c
39void matrix_init_custom(void) {
40 // TODO: initialize hardware here
41}
42
43bool matrix_scan_custom(matrix_row_t current_matrix[]) {
44 bool matrix_has_changed = false;
45
46 // TODO: add matrix scanning routine here
47
48 return matrix_has_changed;
49}
50```
51
52
53## Full Replacement
54
55When more control over the scanning routine is required, you can choose to implement the full scanning routine.
56To configure it, add this to your rules.mk:
57
58```make
59CUSTOM_MATRIX = yes
60```
61
62And implement the following functions in a `matrix.c` file in your keyboard folder:
63
64```c
65matrix_row_t matrix_get_row(uint8_t row) {
66 // TODO: return the requested row data
67}
68
69void matrix_print(void) {
70 // TODO: use print() to dump the current matrix state to console
71}
72
73void matrix_init(void) {
74 // TODO: initialize hardware and global matrix state here
75
76 // Unless hardware debouncing - Init the configured debounce routine
77 debounce_init(MATRIX_ROWS);
78
79 // This *must* be called for correct keyboard behavior
80 matrix_init_quantum();
81}
82
83uint8_t matrix_scan(void) {
84 bool matrix_has_changed = false;
85
86 // TODO: add matrix scanning routine here
87
88 // Unless hardware debouncing - use the configured debounce routine
89 debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
90
91 // This *must* be called for correct keyboard behavior
92 matrix_scan_quantum();
93
94 return matrix_has_changed;
95}
96```
97
98And also provide defaults for the following callbacks:
99
100```c
101__attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); }
102
103__attribute__((weak)) void matrix_scan_kb(void) { matrix_scan_user(); }
104
105__attribute__((weak)) void matrix_init_user(void) {}
106
107__attribute__((weak)) void matrix_scan_user(void) {}
108```
diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md
index 2d505b075..9c8f89ae1 100644
--- a/docs/custom_quantum_functions.md
+++ b/docs/custom_quantum_functions.md
@@ -114,7 +114,15 @@ Two more deprecated functions exist that provide the LED state as a `uint8_t`:
114 114
115This function will be called when the state of one of those 5 LEDs changes. It receives the LED state as a struct parameter. 115This function will be called when the state of one of those 5 LEDs changes. It receives the LED state as a struct parameter.
116 116
117You must return either `true` or `false` from this function, depending on whether you want to override the keyboard-level implementation. 117By convention, return `true` from `led_update_user()` to get the `led_update_kb()` hook to run its code, and
118return `false` when you would prefer not to run the code in `led_update_kb()`.
119
120Some examples include:
121
122 - overriding the LEDs to use them for something else like layer indication
123 - return `false` because you do not want the `_kb()` function to run, as it would override your layer behavior.
124 - play a sound when an LED turns on or off.
125 - return `true` because you want the `_kb` function to run, and this is in addition to the default LED behavior.
118 126
119?> Because the `led_set_*` functions return `void` instead of `bool`, they do not allow for overriding the keyboard LED control, and thus it's recommended to use `led_update_*` instead. 127?> Because the `led_set_*` functions return `void` instead of `bool`, they do not allow for overriding the keyboard LED control, and thus it's recommended to use `led_update_*` instead.
120 128
@@ -122,66 +130,41 @@ You must return either `true` or `false` from this function, depending on whethe
122 130
123```c 131```c
124bool led_update_kb(led_t led_state) { 132bool led_update_kb(led_t led_state) {
125 if(led_update_user(led_state)) { 133 bool res = led_update_user(led_state);
126 if (led_state.num_lock) { 134 if(res) {
127 writePinLow(B0); 135 // writePin sets the pin high for 1 and low for 0.
128 } else { 136 // In this example the pins are inverted, setting
129 writePinHigh(B0); 137 // it low/0 turns it on, and high/1 turns the LED off.
130 } 138 // This behavior depends on whether the LED is between the pin
131 if (led_state.caps_lock) { 139 // and VCC or the pin and GND.
132 writePinLow(B1); 140 writePin(B0, !led_state.num_lock);
133 } else { 141 writePin(B1, !led_state.caps_lock);
134 writePinHigh(B1); 142 writePin(B2, !led_state.scroll_lock);
135 } 143 writePin(B3, !led_state.compose);
136 if (led_state.scroll_lock) { 144 writePin(B4, !led_state.kana);
137 writePinLow(B2);
138 } else {
139 writePinHigh(B2);
140 }
141 if (led_state.compose) {
142 writePinLow(B3);
143 } else {
144 writePinHigh(B3);
145 }
146 if (led_state.kana) {
147 writePinLow(B4);
148 } else {
149 writePinHigh(B4);
150 }
151 return true;
152 } 145 }
146 return res;
153} 147}
154``` 148```
155 149
156### Example `led_update_user()` Implementation 150### Example `led_update_user()` Implementation
157 151
152This incomplete example would play a sound if Caps Lock is turned on or off. It returns `true`, because you also want the LEDs to maintain their state.
153
158```c 154```c
155#ifdef AUDIO_ENABLE
156 float caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
157 float caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
158#endif
159
159bool led_update_user(led_t led_state) { 160bool led_update_user(led_t led_state) {
160 if (led_state.num_lock) { 161 #ifdef AUDIO_ENABLE
161 writePinLow(B0); 162 static uint8_t caps_state = 0;
162 } else { 163 if (caps_state != led_state.caps_lock) {
163 writePinHigh(B0); 164 led_state.caps_lock ? PLAY_SONG(caps_on) : PLAY_SONG(caps_off);
164 } 165 caps_state = led_state.caps_lock;
165 if (led_state.caps_lock) {
166 writePinLow(B1);
167 } else {
168 writePinHigh(B1);
169 }
170 if (led_state.scroll_lock) {
171 writePinLow(B2);
172 } else {
173 writePinHigh(B2);
174 }
175 if (led_state.compose) {
176 writePinLow(B3);
177 } else {
178 writePinHigh(B3);
179 }
180 if (led_state.kana) {
181 writePinLow(B4);
182 } else {
183 writePinHigh(B4);
184 } 166 }
167 #endif
185 return true; 168 return true;
186} 169}
187``` 170```
@@ -411,7 +394,7 @@ void keyboard_post_init_user(void) {
411 // Set default layer, if enabled 394 // Set default layer, if enabled
412 if (user_config.rgb_layer_change) { 395 if (user_config.rgb_layer_change) {
413 rgblight_enable_noeeprom(); 396 rgblight_enable_noeeprom();
414 rgblight_sethsv_noeeprom_cyan(); 397 rgblight_sethsv_noeeprom_cyan();
415 rgblight_mode_noeeprom(1); 398 rgblight_mode_noeeprom(1);
416 } 399 }
417} 400}
@@ -459,18 +442,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
459 } 442 }
460 return true; // Let QMK send the enter press/release events 443 return true; // Let QMK send the enter press/release events
461 case RGB_LYR: // This allows me to use underglow as layer indication, or as normal 444 case RGB_LYR: // This allows me to use underglow as layer indication, or as normal
462 if (record->event.pressed) { 445 if (record->event.pressed) {
463 user_config.rgb_layer_change ^= 1; // Toggles the status 446 user_config.rgb_layer_change ^= 1; // Toggles the status
464 eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM 447 eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM
465 if (user_config.rgb_layer_change) { // if layer state indication is enabled, 448 if (user_config.rgb_layer_change) { // if layer state indication is enabled,
466 layer_state_set(layer_state); // then immediately update the layer color 449 layer_state_set(layer_state); // then immediately update the layer color
467 } 450 }
468 } 451 }
469 return false; break; 452 return false; break;
470 case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference) 453 case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference)
471 if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled 454 if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
472 if (user_config.rgb_layer_change) { // only if this is enabled 455 if (user_config.rgb_layer_change) { // only if this is enabled
473 user_config.rgb_layer_change = false; // disable it, and 456 user_config.rgb_layer_change = false; // disable it, and
474 eeconfig_update_user(user_config.raw); // write the setings to EEPROM 457 eeconfig_update_user(user_config.raw); // write the setings to EEPROM
475 } 458 }
476 } 459 }
@@ -483,7 +466,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
483And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. To force an EEPROM reset, use the `EEP_RST` keycode or [Bootmagic](feature_bootmagic.md) functionallity. For example, if you want to set rgb layer indication by default, and save the default valued. 466And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. To force an EEPROM reset, use the `EEP_RST` keycode or [Bootmagic](feature_bootmagic.md) functionallity. For example, if you want to set rgb layer indication by default, and save the default valued.
484 467
485```c 468```c
486void eeconfig_init_user(void) { // EEPROM is getting reset! 469void eeconfig_init_user(void) { // EEPROM is getting reset!
487 user_config.raw = 0; 470 user_config.raw = 0;
488 user_config.rgb_layer_change = true; // We want this enabled by default 471 user_config.rgb_layer_change = true; // We want this enabled by default
489 eeconfig_update_user(user_config.raw); // Write default value to EEPROM now 472 eeconfig_update_user(user_config.raw); // Write default value to EEPROM now
@@ -506,14 +489,24 @@ The `val` is the value of the data that you want to write to EEPROM. And the `e
506 489
507# Custom Tapping Term 490# Custom Tapping Term
508 491
509By default, the tapping term is defined globally, and is not configurable by key. For most users, this is perfectly fine. But in come cases, dual function keys would be greatly improved by different timeouts than `LT` keys, or because some keys may be easier to hold than others. Instead of using custom key codes for each, this allows for per key configurable `TAPPING_TERM`. 492By default, the tapping term and related options (such as `IGNORE_MOD_TAP_INTERRUPT`) are defined globally, and are not configurable by key. For most users, this is perfectly fine. But in some cases, dual function keys would be greatly improved by different timeout behaviors than `LT` keys, or because some keys may be easier to hold than others. Instead of using custom key codes for each, this allows for per key configurable timeout behaviors.
493
494There are two configurable options to control per-key timeout behaviors:
510 495
511To enable this functionality, you need to add `#define TAPPING_TERM_PER_KEY` to your `config.h`, first. 496- `TAPPING_TERM_PER_KEY`
497- `IGNORE_MOD_TAP_INTERRUPT_PER_KEY`
498
499You need to add `#define` lines to your `config.h` for each feature you want.
500
501```
502#define TAPPING_TERM_PER_KEY
503#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
504```
512 505
513 506
514## Example `get_tapping_term` Implementation 507## Example `get_tapping_term` Implementation
515 508
516To change the `TAPPING TERM` based on the keycode, you'd want to add something like the following to your `keymap.c` file: 509To change the `TAPPING_TERM` based on the keycode, you'd want to add something like the following to your `keymap.c` file:
517 510
518```c 511```c
519uint16_t get_tapping_term(uint16_t keycode) { 512uint16_t get_tapping_term(uint16_t keycode) {
@@ -528,6 +521,21 @@ uint16_t get_tapping_term(uint16_t keycode) {
528} 521}
529``` 522```
530 523
531### `get_tapping_term` Function Documentation 524## Example `get_ignore_mod_tap_interrupt` Implementation
525
526To change the `IGNORE_MOD_TAP_INTERRUPT` value based on the keycode, you'd want to add something like the following to your `keymap.c` file:
527
528```c
529bool get_ignore_mod_tap_interrupt(uint16_t keycode) {
530 switch (keycode) {
531 case SFT_T(KC_SPC):
532 return true;
533 default:
534 return false;
535 }
536}
537```
538
539## `get_tapping_term` / `get_ignore_mod_tap_interrupt` Function Documentation
532 540
533Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum or keyboard level function. Only a user level function is useful here, so no need to mark it as such. 541Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum or keyboard level function. Only user level functions are useful here, so no need to mark them as such.
diff --git a/docs/de/_summary.md b/docs/de/_summary.md
index 37768355f..f3ce806ba 100644
--- a/docs/de/_summary.md
+++ b/docs/de/_summary.md
@@ -111,7 +111,7 @@
111 * [Support](de/support.md) 111 * [Support](de/support.md)
112 * [Übersetzungen](de/translating.md) 112 * [Übersetzungen](de/translating.md)
113 113
114* QMK Internals (de/In Progress) 114* QMK Internals (In Progress)
115 * [Defines](de/internals_defines.md) 115 * [Defines](de/internals_defines.md)
116 * [Input Callback Reg](de/internals_input_callback_reg.md) 116 * [Input Callback Reg](de/internals_input_callback_reg.md)
117 * [Midi Device](de/internals_midi_device.md) 117 * [Midi Device](de/internals_midi_device.md)
diff --git a/docs/es/README.md b/docs/es/README.md
index 73e7a7097..d39b27800 100644
--- a/docs/es/README.md
+++ b/docs/es/README.md
@@ -19,7 +19,7 @@ De cualquier manera, también puedes descargarlo directamente en formatos ([zip]
19 19
20## Cómo compilar 20## Cómo compilar
21 21
22Antes de poder compilar, necesitarás [instalar un entorno](getting_started_build_tools.md) para el desarrollo de AVR y/o ARM. Una vez hayas completado este paso, usarás el comando `make` para compilar un teclado y keymap con la siguiente notación: 22Antes de poder compilar, necesitarás [instalar un entorno](es/getting_started_build_tools.md) para el desarrollo de AVR y/o ARM. Una vez hayas completado este paso, usarás el comando `make` para compilar un teclado y keymap con la siguiente notación:
23 23
24 make planck/rev4:default 24 make planck/rev4:default
25 25
@@ -29,4 +29,4 @@ Este ejemplo compilaría la revisión `rev4` del teclado `planck` con el keymap
29 29
30## Cómo personalizar 30## Cómo personalizar
31 31
32QMK tiene montones de [características](features.md) para explorar, y una buena cantidad de [documentación de referencia](http://docs.qmk.fm) en la que sumergirse. Se pueden sacar provecho de la mayoría de las características modificando tu [keymap](keymap.md), y cambiando los [keycodes](keycodes.md). 32QMK tiene montones de [características](es/features.md) para explorar, y una buena cantidad de [documentación de referencia](http://docs.qmk.fm) en la que sumergirse. Se pueden sacar provecho de la mayoría de las características modificando tu [keymap](es/keymap.md), y cambiando los [keycodes](es/keycodes.md).
diff --git a/docs/es/_summary.md b/docs/es/_summary.md
index 684d7ab6c..03bf05ba8 100644
--- a/docs/es/_summary.md
+++ b/docs/es/_summary.md
@@ -1,121 +1,121 @@
1* [Guía completa para novatos](newbs.md) 1* [Guía completa para novatos](es/newbs.md)
2 * [Empezando](newbs_getting_started.md) 2 * [Empezando](es/newbs_getting_started.md)
3 * [Construyendo tu primer firmare](newbs_building_firmware.md) 3 * [Construyendo tu primer firmare](es/newbs_building_firmware.md)
4 * [Flasheando el firmware](newbs_flashing.md) 4 * [Flasheando el firmware](es/newbs_flashing.md)
5 * [Testeando y depurando ](newbs_testing_debugging.md) 5 * [Testeando y depurando ](es/newbs_testing_debugging.md)
6 * [Mejores práticas](newbs_best_practices.md) 6 * [Mejores práticas](es/newbs_best_practices.md)
7 * [Recursos de aprendizaje](newbs_learn_more_resources.md) 7 * [Recursos de aprendizaje](es/newbs_learn_more_resources.md)
8 8
9* [QMK Basics](README.md) 9* [QMK Basics](es/README.md)
10 * [Introducción a QMK](getting_started_introduction.md) 10 * [Introducción a QMK](es/getting_started_introduction.md)
11 * [QMK CLI](cli.md) 11 * [QMK CLI](es/cli.md)
12 * [Configuración de QMK CLI](cli_configuration.md) 12 * [Configuración de QMK CLI](es/cli_configuration.md)
13 * [Contribuyendo a QMK](contributing.md) 13 * [Contribuyendo a QMK](es/contributing.md)
14 * [Cómo usar Github](getting_started_github.md) 14 * [Cómo usar Github](es/getting_started_github.md)
15 * [Obtener ayuda](getting_started_getting_help.md) 15 * [Obtener ayuda](es/getting_started_getting_help.md)
16 16
17* [Cambios incompatibles](breaking_changes.md) 17* [Cambios incompatibles](es/breaking_changes.md)
18 * [30 Ago 2019](ChangeLog/20190830.md) 18 * [30 Ago 2019](es/ChangeLog/20190830.md)
19 19
20* [Preguntas frecuentes](faq.md) 20* [Preguntas frecuentes](es/faq.md)
21 * [General](faq_general.md) 21 * [General](es/faq_general.md)
22 * [Construir/Compilar QMK](faq_build.md) 22 * [Construir/Compilar QMK](es/faq_build.md)
23 * [Depurando/Encontrando problemas en QMK](faq_debug.md) 23 * [Depurando/Encontrando problemas en QMK](es/faq_debug.md)
24 * [Keymap](faq_keymap.md) 24 * [Keymap](es/faq_keymap.md)
25 * [Instalación de drivers con Zadig](driver_installation_zadig.md) 25 * [Instalación de drivers con Zadig](es/driver_installation_zadig.md)
26 26
27* Guías detalladas 27* Guías detalladas
28 * [Instalar herramientas construcción](getting_started_build_tools.md) 28 * [Instalar herramientas construcción](es/getting_started_build_tools.md)
29 * [Guía Vagrant](getting_started_vagrant.md) 29 * [Guía Vagrant](es/getting_started_vagrant.md)
30 * [Instrucciones de Construcción/Compilado](getting_started_make_guide.md) 30 * [Instrucciones de Construcción/Compilado](es/getting_started_make_guide.md)
31 * [Flasheando Firmware](flashing.md) 31 * [Flasheando Firmware](es/flashing.md)
32 * [Personalizando funcionalidad](custom_quantum_functions.md) 32 * [Personalizando funcionalidad](es/custom_quantum_functions.md)
33 * [Visión general del Keymap](keymap.md) 33 * [Visión general del Keymap](es/keymap.md)
34 34
35* [Hardware](hardware.md) 35* [Hardware](es/hardware.md)
36 * [Procesadores AVR](hardware_avr.md) 36 * [Procesadores AVR](es/hardware_avr.md)
37 * [Drivers](hardware_drivers.md) 37 * [Drivers](es/hardware_drivers.md)
38 38
39* Referencia 39* Referencia
40 * [Pautas de teclados](hardware_keyboard_guidelines.md) 40 * [Pautas de teclados](es/hardware_keyboard_guidelines.md)
41 * [Opciones de configuración](config_options.md) 41 * [Opciones de configuración](es/config_options.md)
42 * [Keycodes](keycodes.md) 42 * [Keycodes](es/keycodes.md)
43 * [Convenciones de código - C](coding_conventions_c.md) 43 * [Convenciones de código - C](es/coding_conventions_c.md)
44 * [Convenciones de código - Python](coding_conventions_python.md) 44 * [Convenciones de código - Python](es/coding_conventions_python.md)
45 * [Mejores prácticas de documentación](documentation_best_practices.md) 45 * [Mejores prácticas de documentación](es/documentation_best_practices.md)
46 * [Plantillas de documentación](documentation_templates.md) 46 * [Plantillas de documentación](es/documentation_templates.md)
47 * [Glosario](reference_glossary.md) 47 * [Glosario](es/reference_glossary.md)
48 * [Tests unitarios](unit_testing.md) 48 * [Tests unitarios](es/unit_testing.md)
49 * [Funciones útiles](ref_functions.md) 49 * [Funciones útiles](es/ref_functions.md)
50 * [Sporte configurador](reference_configurator_support.md) 50 * [Sporte configurador](es/reference_configurator_support.md)
51 * [Formato info.json](reference_info_json.md) 51 * [Formato info.json](es/reference_info_json.md)
52 * [Desarrollo Python CLI](cli_development.md) 52 * [Desarrollo Python CLI](es/cli_development.md)
53 53
54* [Características](features.md) 54* [Características](es/features.md)
55 * [Keycodes Básicos](keycodes_basic.md) 55 * [Keycodes Básicos](es/keycodes_basic.md)
56 * [Teclas US ANSI Shifted](keycodes_us_ansi_shifted.md) 56 * [Teclas US ANSI Shifted](es/keycodes_us_ansi_shifted.md)
57 * [Keycodes Quantum](quantum_keycodes.md) 57 * [Keycodes Quantum](es/quantum_keycodes.md)
58 * [Keycodes Avanzados](feature_advanced_keycodes.md) 58 * [Keycodes Avanzados](es/feature_advanced_keycodes.md)
59 * [Audio](feature_audio.md) 59 * [Audio](es/feature_audio.md)
60 * [Auto Shift](feature_auto_shift.md) 60 * [Auto Shift](es/feature_auto_shift.md)
61 * [Retroiluminación](feature_backlight.md) 61 * [Retroiluminación](es/feature_backlight.md)
62 * [Bluetooth](feature_bluetooth.md) 62 * [Bluetooth](es/feature_bluetooth.md)
63 * [Bootmagic](feature_bootmagic.md) 63 * [Bootmagic](es/feature_bootmagic.md)
64 * [Combos](feature_combo.md) 64 * [Combos](es/feature_combo.md)
65 * [Comando](feature_command.md) 65 * [Comando](es/feature_command.md)
66 * [API Debounce](feature_debounce_type.md) 66 * [API Debounce](es/feature_debounce_type.md)
67 * [Switch DIP](feature_dip_switch.md) 67 * [Switch DIP](es/feature_dip_switch.md)
68 * [Macros Dinámicas](feature_dynamic_macros.md) 68 * [Macros Dinámicas](es/feature_dynamic_macros.md)
69 * [Encoders](feature_encoders.md) 69 * [Encoders](es/feature_encoders.md)
70 * [Grave Escape](feature_grave_esc.md) 70 * [Grave Escape](es/feature_grave_esc.md)
71 * [Feedback Háptico](feature_haptic_feedback.md) 71 * [Feedback Háptico](es/feature_haptic_feedback.md)
72 * [Controlador LCD HD44780](feature_hd44780.md) 72 * [Controlador LCD HD44780](es/feature_hd44780.md)
73 * [Key Lock](feature_key_lock.md) 73 * [Key Lock](es/feature_key_lock.md)
74 * [Layouts](feature_layouts.md) 74 * [Layouts](es/feature_layouts.md)
75 * [Tecla Leader](feature_leader_key.md) 75 * [Tecla Leader](es/feature_leader_key.md)
76 * [Matriz LED](feature_led_matrix.md) 76 * [Matriz LED](es/feature_led_matrix.md)
77 * [Macros](feature_macros.md) 77 * [Macros](es/feature_macros.md)
78 * [Teclas del ratón](feature_mouse_keys.md) 78 * [Teclas del ratón](es/feature_mouse_keys.md)
79 * [Driver OLED](feature_oled_driver.md) 79 * [Driver OLED](es/feature_oled_driver.md)
80 * [Teclas One Shot](feature_advanced_keycodes.md#one-shot-keys) 80 * [Teclas One Shot](es/feature_advanced_keycodes.md#one-shot-keys)
81 * [Dispositivo de apuntado](feature_pointing_device.md) 81 * [Dispositivo de apuntado](es/feature_pointing_device.md)
82 * [Ratón PS/2](feature_ps2_mouse.md) 82 * [Ratón PS/2](es/feature_ps2_mouse.md)
83 * [Iluminación RGB](feature_rgblight.md) 83 * [Iluminación RGB](es/feature_rgblight.md)
84 * [Matriz RGB](feature_rgb_matrix.md) 84 * [Matriz RGB](es/feature_rgb_matrix.md)
85 * [Cadete espacial](feature_space_cadet.md) 85 * [Cadete espacial](es/feature_space_cadet.md)
86 * [Teclado dividido](feature_split_keyboard.md) 86 * [Teclado dividido](es/feature_split_keyboard.md)
87 * [Stenografía](feature_stenography.md) 87 * [Stenografía](es/feature_stenography.md)
88 * [Swap Hands](feature_swap_hands.md) 88 * [Swap Hands](es/feature_swap_hands.md)
89 * [Tap Dance](feature_tap_dance.md) 89 * [Tap Dance](es/feature_tap_dance.md)
90 * [Terminal](feature_terminal.md) 90 * [Terminal](es/feature_terminal.md)
91 * [Impresora Térmica](feature_thermal_printer.md) 91 * [Impresora Térmica](es/feature_thermal_printer.md)
92 * [Unicode](feature_unicode.md) 92 * [Unicode](es/feature_unicode.md)
93 * [Userspace](feature_userspace.md) 93 * [Userspace](es/feature_userspace.md)
94 * [Velocikey](feature_velocikey.md) 94 * [Velocikey](es/feature_velocikey.md)
95 95
96* Para Makers y Modders 96* Para Makers y Modders
97 * [Guía de cableado a mano](hand_wire.md) 97 * [Guía de cableado a mano](es/hand_wire.md)
98 * [Guía de flasheado de ISP](isp_flashing_guide.md) 98 * [Guía de flasheado de ISP](es/isp_flashing_guide.md)
99 * [Guía de depuración de ARM](arm_debugging.md) 99 * [Guía de depuración de ARM](es/arm_debugging.md)
100 * [Driver I2C](i2c_driver.md) 100 * [Driver I2C](es/i2c_driver.md)
101 * [Controles GPIO](internals_gpio_control.md) 101 * [Controles GPIO](es/internals_gpio_control.md)
102 * [Conversión Proton C](proton_c_conversion.md) 102 * [Conversión Proton C](es/proton_c_conversion.md)
103 103
104* Para entender en profundidad 104* Para entender en profundidad
105 * [Cómo funcionan los teclados](how_keyboards_work.md) 105 * [Cómo funcionan los teclados](es/how_keyboards_work.md)
106 * [Entendiendo QMK](understanding_qmk.md) 106 * [Entendiendo QMK](es/understanding_qmk.md)
107 107
108* Otros temas 108* Otros temas
109 * [Usando Eclipse con QMK](other_eclipse.md) 109 * [Usando Eclipse con QMK](es/other_eclipse.md)
110 * [Usando VSCode con QMK](other_vscode.md) 110 * [Usando VSCode con QMK](es/other_vscode.md)
111 * [Soporte](support.md) 111 * [Soporte](es/support.md)
112 * [Cómo añadir traducciones](translating.md) 112 * [Cómo añadir traducciones](es/translating.md)
113 113
114* QMK Internals (En progreso) 114* QMK Internals (En progreso)
115 * [Defines](internals_defines.md) 115 * [Defines](es/internals_defines.md)
116 * [Input Callback Reg](internals_input_callback_reg.md) 116 * [Input Callback Reg](es/internals_input_callback_reg.md)
117 * [Dispositivo Midi](internals_midi_device.md) 117 * [Dispositivo Midi](es/internals_midi_device.md)
118 * [Proceso de configuración de un dispositivo Midi](internals_midi_device_setup_process.md) 118 * [Proceso de configuración de un dispositivo Midi](es/internals_midi_device_setup_process.md)
119 * [Utilidad Midi](internals_midi_util.md) 119 * [Utilidad Midi](es/internals_midi_util.md)
120 * [Funciones Send](internals_send_functions.md) 120 * [Funciones Send](es/internals_send_functions.md)
121 * [Herramientas Sysex](internals_sysex_tools.md) 121 * [Herramientas Sysex](es/internals_sysex_tools.md)
diff --git a/docs/faq_build.md b/docs/faq_build.md
index f11cb76aa..70a16afea 100644
--- a/docs/faq_build.md
+++ b/docs/faq_build.md
@@ -47,7 +47,7 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
47SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666" 47SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
48``` 48```
49 49
50**/etc/udev/rules.d/55-catalina.rules:** 50**/etc/udev/rules.d/55-caterina.rules:**
51``` 51```
52# ModemManager should ignore the following devices 52# ModemManager should ignore the following devices
53ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1" 53ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"
@@ -69,6 +69,12 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", MODE:="066
69SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666" 69SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"
70``` 70```
71 71
72**/etc/udev/rules.d/57-bootloadhid.rules:**
73```
74# bootloadHID
75SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE:="0666"
76```
77
72### Serial device is not detected in bootloader mode on Linux 78### Serial device is not detected in bootloader mode on Linux
73Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as 79Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as
74Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices may require `USB_SERIAL` and any of its sub options. 80Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices may require `USB_SERIAL` and any of its sub options.
@@ -81,10 +87,6 @@ Re-running the QMK installation script (`./util/qmk_install.sh` from the `qmk_fi
81 87
82If that doesn't work, then you may need to download and run Zadig. See [Bootloader Driver Installation with Zadig](driver_installation_zadig.md) for more detailed information. 88If that doesn't work, then you may need to download and run Zadig. See [Bootloader Driver Installation with Zadig](driver_installation_zadig.md) for more detailed information.
83 89
84## WINAVR is Obsolete
85It is no longer recommended and may cause some problem.
86See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
87
88## USB VID and PID 90## USB VID and PID
89You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very low chance of collision with other product. 91You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very low chance of collision with other product.
90 92
@@ -97,29 +99,6 @@ You can buy a really unique VID:PID here. I don't think you need this for person
97- http://www.obdev.at/products/vusb/license.html 99- http://www.obdev.at/products/vusb/license.html
98- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1 100- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
99 101
100## Cortex: `cstddef: No such file or directory`
101GCC 4.8 of Ubuntu 14.04 had this problem and had to update to 4.9 with this PPA.
102https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
103
104https://github.com/tmk/tmk_keyboard/issues/212
105https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
106https://developer.mbed.org/forum/mbed/topic/5205/
107
108## `clock_prescale_set` and `clock_div_1` Not Available
109Your toolchain is too old to support the MCU. For example WinAVR 20100110 doesn't support ATMega32u2.
110
111```
112Compiling C: ../../tmk_core/protocol/lufa/lufa.c
113avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
114../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
115../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
116../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
117../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
118../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
119make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
120```
121
122
123## BOOTLOADER_SIZE for AVR 102## BOOTLOADER_SIZE for AVR
124Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment. 103Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment.
125 104
@@ -140,24 +119,29 @@ The solution is to remove and reinstall all affected modules.
140 119
141``` 120```
142brew rm avr-gcc 121brew rm avr-gcc
122brew rm avr-gcc@8
143brew rm dfu-programmer 123brew rm dfu-programmer
144brew rm dfu-util 124brew rm dfu-util
145brew rm gcc-arm-none-eabi 125brew rm gcc-arm-none-eabi
126brew rm arm-gcc-bin@8
146brew rm avrdude 127brew rm avrdude
147brew install avr-gcc 128brew install avr-gcc@8
148brew install dfu-programmer 129brew install dfu-programmer
149brew install dfu-util 130brew install dfu-util
150brew install gcc-arm-none-eabi 131brew install arm-gcc-bin@8
151brew install avrdude 132brew install avrdude
133brew link --force avr-gcc@8
134brew link --force arm-gcc-bin@8
135
152``` 136```
153 137
154### avr-gcc 8.1 and LUFA 138### `avr-gcc` and LUFA
155 139
156If you updated your avr-gcc to above 7 you may see errors involving LUFA. For example: 140If you updated your `avr-gcc` and you see errors involving LUFA, for example:
157 141
158`lib/lufa/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h:380:5: error: 'const' attribute on function returning 'void'` 142`lib/lufa/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h:380:5: error: 'const' attribute on function returning 'void'`
159 143
160For now, you need to rollback avr-gcc to 7 in brew. 144For now, you need to rollback `avr-gcc` to 8 in Homebrew.
161 145
162``` 146```
163brew uninstall --force avr-gcc 147brew uninstall --force avr-gcc
diff --git a/docs/faq_debug.md b/docs/faq_debug.md
index 1e0cdc82b..6c66defbd 100644
--- a/docs/faq_debug.md
+++ b/docs/faq_debug.md
@@ -112,56 +112,6 @@ In C `1` means one of [int] type which is [16 bit] in case of AVR so you can't s
112 112
113http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279 113http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
114 114
115
116## Bootloader Jump Doesn't Work
117Properly configure bootloader size in **Makefile**. With wrong section size bootloader won't probably start with **Magic command** and **Boot Magic**.
118```
119# Size of Bootloaders in bytes:
120# Atmel DFU loader(ATmega32U4) 4096
121# Atmel DFU loader(AT90USB128) 8192
122# LUFA bootloader(ATmega32U4) 4096
123# Arduino Caterina(ATmega32U4) 4096
124# USBaspLoader(ATmega***) 2048
125# Teensy halfKay(ATmega32U4) 512
126# Teensy++ halfKay(AT90USB128) 2048
127OPT_DEFS += -DBOOTLOADER_SIZE=4096
128```
129AVR Boot section size are defined by setting **BOOTSZ** fuse in fact. Consult with your MCU datasheet.
130Note that **Word**(2 bytes) size and address are used in datasheet while TMK uses **Byte**.
131
132AVR Boot section is located at end of Flash memory like the followings.
133```
134byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
1350x0000 +---------------+ 0x00000 +---------------+
136 | | | |
137 | | | |
138 | Application | | Application |
139 | | | |
140 = = = =
141 | | 32KB-4KB | | 128KB-8KB
1420x6000 +---------------+ 0x1E000 +---------------+
143 | Bootloader | 4KB | Bootloader | 8KB
1440x7FFF +---------------+ 0x1FFFF +---------------+
145
146
147byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
1480x0000 +---------------+ 0x00000 +---------------+
149 | | | |
150 | | | |
151 | Application | | Application |
152 | | | |
153 = = = =
154 | | 32KB-512B | | 128KB-2KB
1550x7E00 +---------------+ 0x1FC00 +---------------+
156 | Bootloader | 512B | Bootloader | 2KB
1570x7FFF +---------------+ 0x1FFFF +---------------+
158```
159
160And see this discussion for further reference.
161https://github.com/tmk/tmk_keyboard/issues/179
162
163If you are using a TeensyUSB, there is a [known bug](https://github.com/qmk/qmk_firmware/issues/164) in which the hardware reset button prevents the RESET key from working. Unplugging the keyboard and plugging it back in should resolve the problem.
164
165## Special Extra Key Doesn't Work (System, Audio Control Keys) 115## Special Extra Key Doesn't Work (System, Audio Control Keys)
166You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK. 116You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK.
167 117
@@ -194,24 +144,6 @@ If you would like to keep JTAG enabled, just add the following to your `config.h
194#define NO_JTAG_DISABLE 144#define NO_JTAG_DISABLE
195``` 145```
196 146
197## Adding LED Indicators of Lock Keys
198You need your own LED indicators for CapsLock, ScrollLock and NumLock? See this post.
199
200http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
201
202## Program Arduino Micro/Leonardo
203Push reset button and then run command like this within 8 seconds.
204
205```
206avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
207```
208
209Device name will vary depending on your system.
210
211http://arduino.cc/en/Main/ArduinoBoardMicro
212https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
213
214
215## USB 3 Compatibility 147## USB 3 Compatibility
216I heard some people have a problem with USB 3 port, try USB 2 port. 148I heard some people have a problem with USB 3 port, try USB 2 port.
217 149
diff --git a/docs/faq_keymap.md b/docs/faq_keymap.md
index 84d8548d4..2d00e8bef 100644
--- a/docs/faq_keymap.md
+++ b/docs/faq_keymap.md
@@ -67,24 +67,8 @@ After enabling this feature use keycodes `KC_LCAP`, `KC_LNUM` and `KC_LSCR` in y
67Old vintage mechanical keyboards occasionally have lock switches but modern ones don't have. ***You don't need this feature in most case and just use keycodes `KC_CAPS`, `KC_NLCK` and `KC_SLCK`.*** 67Old vintage mechanical keyboards occasionally have lock switches but modern ones don't have. ***You don't need this feature in most case and just use keycodes `KC_CAPS`, `KC_NLCK` and `KC_SLCK`.***
68 68
69## Input Special Characters Other Than ASCII like Cédille 'Ç' 69## Input Special Characters Other Than ASCII like Cédille 'Ç'
70NO UNIVERSAL METHOD TO INPUT THOSE WORKS OVER ALL SYSTEMS. You have to define **MACRO** in way specific to your OS or layout.
71 70
72See this post for example **MACRO** code. 71See the [Unicode](feature_unicode.md) feature.
73
74http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
75
76On **Windows** you can use `AltGr` key or **Alt code**.
77* http://en.wikipedia.org/wiki/AltGr_key
78* http://en.wikipedia.org/wiki/Alt_code
79
80On **Mac** OS defines `Option` key combinations.
81* http://en.wikipedia.org/wiki/Option_key#Alternative_keyboard_input
82
83On **Xorg** you can use `compose` key, instead.
84* http://en.wikipedia.org/wiki/Compose_key
85
86And see this for **Unicode** input.
87* http://en.wikipedia.org/wiki/Unicode_input
88 72
89## `Fn` Key on macOS 73## `Fn` Key on macOS
90 74
@@ -130,51 +114,6 @@ https://github.com/tekezo/Karabiner/issues/403
130 114
131See the [Grave Escape](feature_grave_esc.md) feature. 115See the [Grave Escape](feature_grave_esc.md) feature.
132 116
133## Arrow on Right Modifier Keys with Dual-Role
134This turns right modifier keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**.
135```
136
137#include "keymap_common.h"
138
139
140/* Arrow keys on right modifier keys with TMK dual role feature
141 *
142 * https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
143 * https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
144 */
145const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
146 /* 0: qwerty */
147 [0] = LAYOUT( \
148 ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
149 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
150 LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
151 LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
152 FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
153 [1] = LAYOUT( \
154 GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
155 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
156 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
157 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
158 TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
159};
160
161const uint16_t PROGMEM fn_actions[] = {
162 [0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
163 [1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
164 [2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
165 [3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
166 [4] = ACTION_LAYER_MOMENTARY(1),
167 [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
168 [6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
169 [7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
170 [8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
171};
172
173```
174
175Dual-role key: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
176
177
178## Eject on Mac OSX 117## Eject on Mac OSX
179`KC_EJCT` keycode works on OSX. https://github.com/tmk/tmk_keyboard/issues/250 118`KC_EJCT` keycode works on OSX. https://github.com/tmk/tmk_keyboard/issues/250
180It seems Windows 10 ignores the code and Linux/Xorg recognizes but has no mapping by default. 119It seems Windows 10 ignores the code and Linux/Xorg recognizes but has no mapping by default.
diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md
index e73258d51..ebb24dc99 100644
--- a/docs/feature_advanced_keycodes.md
+++ b/docs/feature_advanced_keycodes.md
@@ -155,7 +155,7 @@ You can control the behavior of one shot keys by defining these in `config.h`:
155 155
156Sometimes, you want to activate a one-shot key as part of a macro or tap dance routine. 156Sometimes, you want to activate a one-shot key as part of a macro or tap dance routine.
157 157
158For one shot layers, you need to call `set_oneshot_layer(LAYER, ONESHOT_START)` on key down, and `set_oneshot_layer(ONESHOT_PRESSED)` on key up. If you want to cancel the oneshot, call `reset_oneshot_layer()`. 158For one shot layers, you need to call `set_oneshot_layer(LAYER, ONESHOT_START)` on key down, and `clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED)` on key up. If you want to cancel the oneshot, call `reset_oneshot_layer()`.
159 159
160For one shot mods, you need to call `set_oneshot_mods(MOD)` to set it, or `clear_oneshot_mods()` to cancel it. 160For one shot mods, you need to call `set_oneshot_mods(MOD)` to set it, or `clear_oneshot_mods()` to cancel it.
161 161
@@ -291,6 +291,25 @@ Normally, this would send `X` (`SHIFT`+`x`). With `Ignore Mod Tap Interrupt` ena
291 291
292?> If you have `Permissive Hold` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`. 292?> If you have `Permissive Hold` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`.
293 293
294For more granular control of this feature, you can add the following to your `config.h`:
295
296```c
297#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
298```
299
300You can then add the following function to your keymap:
301
302```c
303bool get_ignore_mod_tap_interrupt(uint16_t keycode) {
304 switch (keycode) {
305 case SFT_T(KC_SPC):
306 return true;
307 default:
308 return false;
309 }
310}
311```
312
294## Tapping Force Hold 313## Tapping Force Hold
295 314
296To enable `tapping force hold`, add the following to your `config.h`: 315To enable `tapping force hold`, add the following to your `config.h`:
@@ -315,6 +334,25 @@ With `TAPPING_FORCE_HOLD`, the second press will be interpreted as a Shift, allo
315 334
316!> `TAPPING_FORCE_HOLD` will break anything that uses tapping toggles (Such as the `TT` layer keycode, and the One Shot Tapping Toggle). 335!> `TAPPING_FORCE_HOLD` will break anything that uses tapping toggles (Such as the `TT` layer keycode, and the One Shot Tapping Toggle).
317 336
337For more granular control of this feature, you can add the following to your `config.h`:
338
339```c
340#define TAPPING_FORCE_HOLD_PER_KEY
341```
342
343You can then add the following function to your keymap:
344
345```c
346bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) {
347 switch (keycode) {
348 case LT(1, KC_BSPC):
349 return true;
350 default:
351 return false;
352 }
353}
354```
355
318## Retro Tapping 356## Retro Tapping
319 357
320To enable `retro tapping`, add the following to your `config.h`: 358To enable `retro tapping`, add the following to your `config.h`:
diff --git a/docs/feature_backlight.md b/docs/feature_backlight.md
index 71f375594..22abaa60a 100644
--- a/docs/feature_backlight.md
+++ b/docs/feature_backlight.md
@@ -6,16 +6,14 @@ QMK is able to control the brightness of these LEDs by switching them on and off
6 6
7The MCU can only supply so much current to its GPIO pins. Instead of powering the backlight directly from the MCU, the backlight pin is connected to a transistor or MOSFET that switches the power to the LEDs. 7The MCU can only supply so much current to its GPIO pins. Instead of powering the backlight directly from the MCU, the backlight pin is connected to a transistor or MOSFET that switches the power to the LEDs.
8 8
9## Driver configuration 9## Feature Configuration
10 10
11Most keyboards have backlighting enabled by default if they support it, but if it is not working for you, check that your `rules.mk` includes the following: 11Most keyboards have backlighting enabled by default if they support it, but if it is not working for you, check that your `rules.mk` includes the following:
12 12
13```makefile 13```makefile
14BACKLIGHT_ENABLE = software # Valid driver values are 'yes,software,no' 14BACKLIGHT_ENABLE = yes
15``` 15```
16 16
17See below for help on individual drivers.
18
19## Keycodes 17## Keycodes
20Once enabled the following keycodes below can be used to change the backlight level. 18Once enabled the following keycodes below can be used to change the backlight level.
21 19
@@ -51,6 +49,16 @@ Once enabled the following keycodes below can be used to change the backlight le
51|`breathing_enable()` |Turns on backlight breathing | 49|`breathing_enable()` |Turns on backlight breathing |
52|`breathing_disable()` |Turns off backlight breathing | 50|`breathing_disable()` |Turns off backlight breathing |
53 51
52## Driver Configuration
53
54To select which driver to use, configure your `rules.mk` with the following:
55
56```makefile
57BACKLIGHT_DRIVER = software # Valid driver values are 'pwm,software,no'
58```
59
60See below for help on individual drivers.
61
54## Common Driver Configuration 62## Common Driver Configuration
55 63
56To change the behavior of the backlighting, `#define` these in your `config.h`: 64To change the behavior of the backlighting, `#define` these in your `config.h`:
@@ -72,9 +80,9 @@ This functionality is configured at the keyboard level with the `BACKLIGHT_ON_ST
72 80
73## AVR driver 81## AVR driver
74 82
75On AVR boards, the default driver currently sniffs the configuration to pick the best scenario. To enable it, add this to your rules.mk: 83On AVR boards, the default driver currently sniffs the configuration to pick the best scenario. The driver is configured by default, however the equivalent setting within rules.mk would be:
76```makefile 84```makefile
77BACKLIGHT_ENABLE = yes 85BACKLIGHT_DRIVER = pwm
78``` 86```
79 87
80### Caveats 88### Caveats
@@ -150,9 +158,9 @@ The breathing effect is the same as in the hardware PWM implementation.
150 158
151## ARM Driver 159## ARM Driver
152 160
153While still in its early stages, ARM backlight support aims to eventually have feature parity with AVR. To enable it, add this to your rules.mk: 161While still in its early stages, ARM backlight support aims to eventually have feature parity with AVR. The driver is configured by default, however the equivalent setting within rules.mk would be:
154```makefile 162```makefile
155BACKLIGHT_ENABLE = yes 163BACKLIGHT_DRIVER = pwm
156``` 164```
157 165
158### Caveats 166### Caveats
@@ -176,7 +184,7 @@ To change the behavior of the backlighting, `#define` these in your `config.h`:
176 184
177Emulation of PWM while running other keyboard tasks, it offers maximum hardware compatibility without extra platform configuration. The tradeoff is the backlight might jitter when the keyboard is busy. To enable, add this to your rules.mk: 185Emulation of PWM while running other keyboard tasks, it offers maximum hardware compatibility without extra platform configuration. The tradeoff is the backlight might jitter when the keyboard is busy. To enable, add this to your rules.mk:
178```makefile 186```makefile
179BACKLIGHT_ENABLE = software 187BACKLIGHT_DRIVER = software
180``` 188```
181 189
182### Software PWM Configuration 190### Software PWM Configuration
@@ -200,3 +208,29 @@ To activate multiple backlight pins, you need to add something like this to your
200#undef BACKLIGHT_PIN 208#undef BACKLIGHT_PIN
201#define BACKLIGHT_PINS { F5, B2 } 209#define BACKLIGHT_PINS { F5, B2 }
202``` 210```
211
212## Custom Driver
213
214To enable, add this to your rules.mk:
215
216```makefile
217BACKLIGHT_DRIVER = custom
218```
219
220When implementing the custom driver API, the provided keyboard hooks are as follows:
221
222```c
223void backlight_init_ports(void) {
224 // Optional - Run on startup
225 // - usually you want to configure pins here
226}
227void backlight_set(uint8_t level) {
228 // Optional - Run on level change
229 // - usually you want to respond to the new value
230}
231
232void backlight_task(void) {
233 // Optional - Run periodically
234 // - long running actions here can cause performance issues
235}
236```
diff --git a/docs/feature_bootmagic.md b/docs/feature_bootmagic.md
index ed00d5129..a19b5e548 100644
--- a/docs/feature_bootmagic.md
+++ b/docs/feature_bootmagic.md
@@ -56,37 +56,37 @@ Hold down the Bootmagic key (Space by default) and the desired hotkey while plug
56 56
57## Keycodes 57## Keycodes
58 58
59|Keycode |Aliases |Description | 59|Key |Aliases |Description |
60|----------------------------------|---------|------------------------------------------| 60|----------------------------------|---------|--------------------------------------------------------------------------|
61|`MAGIC_CAPSLOCK_TO_CONTROL` | |Treat Caps Lock as Left Control | 61|`MAGIC_SWAP_CONTROL_CAPSLOCK` |`CL_SWAP`|Swap Caps Lock and Left Control |
62|`MAGIC_UNCAPSLOCK_TO_CONTROL` | |Stop treating Caps Lock as Left Control | 62|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` |`CL_NORM`|Unswap Caps Lock and Left Control |
63|`MAGIC_HOST_NKRO` | |Force N-Key Rollover (NKRO) on | 63|`MAGIC_CAPSLOCK_TO_CONTROL` |`CL_CTRL`|Treat Caps Lock as Control |
64|`MAGIC_UNHOST_NKRO` | |Force NKRO off | 64|`MAGIC_UNCAPSLOCK_TO_CONTROL` |`CL_CAPS`|Stop treating Caps Lock as Control |
65|`MAGIC_TOGGLE_NKRO` | |Turn NKRO on or off | 65|`MAGIC_SWAP_LCTL_LGUI` |`LCG_SWP`|Swap Left Control and GUI |
66|`MAGIC_NO_GUI` | |Disable the GUI keys (useful when gaming) | 66|`MAGIC_UNSWAP_LCTL_LGUI` |`LCG_NRM`|Unswap Left Control and GUI |
67|`MAGIC_UNNO_GUI` | |Enable the GUI keys | 67|`MAGIC_SWAP_RCTL_RGUI` |`RCG_SWP`|Swap Right Control and GUI |
68|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides (for macOS)| 68|`MAGIC_UNSWAP_RCTL_RGUI` |`RCG_NRM`|Unswap Right Control and GUI |
69|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI | 69|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Control and GUI on both sides |
70|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap | 70|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Control and GUI on both sides |
71|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Ctrl and GUI on both sides (for macOS)| 71|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Control and GUI swap on both sides |
72|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Ctrl and GUI | 72|`MAGIC_SWAP_LALT_LGUI` |`LAG_SWP`|Swap Left Alt and GUI |
73|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Ctrl and GUI swap | 73|`MAGIC_UNSWAP_LALT_LGUI` |`LAG_NRM`|Unswap Left Alt and GUI |
74|`MAGIC_SWAP_BACKSLASH_BACKSPACE` | |Swap `\` and Backspace | 74|`MAGIC_SWAP_RALT_RGUI` |`RAG_SWP`|Swap Right Alt and GUI |
75|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`| |Unswap `\` and Backspace | 75|`MAGIC_UNSWAP_RALT_RGUI` |`RAG_NRM`|Unswap Right Alt and GUI |
76|`MAGIC_SWAP_CONTROL_CAPSLOCK` | |Swap Left Control and Caps Lock | 76|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides |
77|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` | |Unswap Left Control and Caps Lock | 77|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI on both sides |
78|`MAGIC_SWAP_GRAVE_ESC` | |Swap <code>&#96;</code> and Escape | 78|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap on both sides |
79|`MAGIC_UNSWAP_GRAVE_ESC` | |Unswap <code>&#96;</code> and Escape | 79|`MAGIC_NO_GUI` |`GUI_OFF`|Disable the GUI keys |
80|`MAGIC_SWAP_LALT_LGUI` | |Swap Left Alt and Left GUI | 80|`MAGIC_UNNO_GUI` |`GUI_ON` |Enable the GUI keys |
81|`MAGIC_UNSWAP_LALT_LGUI` | |Unswap Left Alt and Left GUI | 81|`MAGIC_SWAP_GRAVE_ESC` |`GE_SWAP`|Swap <code>&#96;</code> and Escape |
82|`MAGIC_SWAP_RALT_RGUI` | |Swap Right Alt and Right GUI | 82|`MAGIC_UNSWAP_GRAVE_ESC` |`GE_NORM`|Unswap <code>&#96;</code> and Escape |
83|`MAGIC_UNSWAP_RALT_RGUI` | |Unswap Right Alt and Right GUI | 83|`MAGIC_SWAP_BACKSLASH_BACKSPACE` |`BS_SWAP`|Swap `\` and Backspace |
84|`MAGIC_SWAP_LCTL_LGUI` | |Swap Left Control and Left GUI | 84|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|`BS_NORM`|Unswap `\` and Backspace |
85|`MAGIC_UNSWAP_LCTL_LGUI` | |Unswap Left Control and Left GUI | 85|`MAGIC_HOST_NKRO` |`NK_ON` |Enable N-key rollover |
86|`MAGIC_SWAP_RCTL_RGUI` | |Swap Right Control and Right GUI | 86|`MAGIC_UNHOST_NKRO` |`NK_OFF` |Disable N-key rollover |
87|`MAGIC_UNSWAP_RCTL_RGUI` | |Unswap Right Control and Right GUI | 87|`MAGIC_TOGGLE_NKRO` |`NK_TOGG`|Toggle N-key rollover |
88|`MAGIC_EE_HANDS_LEFT` | |Set "Left Hand" for EE_HANDS handedness | 88|`MAGIC_EE_HANDS_LEFT` |`EH_LEFT`|Set the master half of a split keyboard as the left hand (for `EE_HANDS`) |
89|`MAGIC_EE_HANDS_RIGHT` | |Set "Right Hand" for EE_HANDS handedness | 89|`MAGIC_EE_HANDS_RIGHT` |`EH_RGHT`|Set the master half of a split keyboard as the right hand (for `EE_HANDS`)|
90 90
91## Configuration 91## Configuration
92 92
diff --git a/docs/feature_haptic_feedback.md b/docs/feature_haptic_feedback.md
index 227363322..ff7337a51 100644
--- a/docs/feature_haptic_feedback.md
+++ b/docs/feature_haptic_feedback.md
@@ -2,7 +2,7 @@
2 2
3## Haptic feedback rules.mk options 3## Haptic feedback rules.mk options
4 4
5The following options are currently available for haptic feedback in `rule.mk`: 5The following options are currently available for haptic feedback in `rules.mk`:
6 6
7`HAPTIC_ENABLE += DRV2605L` 7`HAPTIC_ENABLE += DRV2605L`
8 8
diff --git a/docs/feature_leader_key.md b/docs/feature_leader_key.md
index 82cf78901..22370bf23 100644
--- a/docs/feature_leader_key.md
+++ b/docs/feature_leader_key.md
@@ -22,10 +22,10 @@ void matrix_scan_user(void) {
22 SEND_STRING("QMK is awesome."); 22 SEND_STRING("QMK is awesome.");
23 } 23 }
24 SEQ_TWO_KEYS(KC_D, KC_D) { 24 SEQ_TWO_KEYS(KC_D, KC_D) {
25 SEND_STRING(SS_LCTRL("a")SS_LCTRL("c")); 25 SEND_STRING(SS_LCTL("a") SS_LCTL("c"));
26 } 26 }
27 SEQ_THREE_KEYS(KC_D, KC_D, KC_S) { 27 SEQ_THREE_KEYS(KC_D, KC_D, KC_S) {
28 SEND_STRING("https://start.duckduckgo.com"SS_TAP(X_ENTER)); 28 SEND_STRING("https://start.duckduckgo.com\n");
29 } 29 }
30 SEQ_TWO_KEYS(KC_A, KC_S) { 30 SEQ_TWO_KEYS(KC_A, KC_S) {
31 register_code(KC_LGUI); 31 register_code(KC_LGUI);
@@ -115,11 +115,11 @@ void matrix_scan_user(void) {
115 115
116 SEQ_ONE_KEY(KC_E) { 116 SEQ_ONE_KEY(KC_E) {
117 // Anything you can do in a macro. 117 // Anything you can do in a macro.
118 SEND_STRING(SS_LCTRL(SS_LSFT("t"))); 118 SEND_STRING(SS_LCTL(SS_LSFT("t")));
119 did_leader_succeed = true; 119 did_leader_succeed = true;
120 } else 120 } else
121 SEQ_TWO_KEYS(KC_E, KC_D) { 121 SEQ_TWO_KEYS(KC_E, KC_D) {
122 SEND_STRING(SS_LGUI("r")"cmd"SS_TAP(KC_ENTER)SS_LCTRL("c")); 122 SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
123 did_leader_succeed = true; 123 did_leader_succeed = true;
124 } 124 }
125 leader_end(); 125 leader_end();
diff --git a/docs/feature_macros.md b/docs/feature_macros.md
index d81c3c655..c13ae8206 100644
--- a/docs/feature_macros.md
+++ b/docs/feature_macros.md
@@ -67,14 +67,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
67 case QMKURL: 67 case QMKURL:
68 if (record->event.pressed) { 68 if (record->event.pressed) {
69 // when keycode QMKURL is pressed 69 // when keycode QMKURL is pressed
70 SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); 70 SEND_STRING("https://qmk.fm/\n");
71 } else { 71 } else {
72 // when keycode QMKURL is released 72 // when keycode QMKURL is released
73 } 73 }
74 break; 74 break;
75 case MY_OTHER_MACRO: 75 case MY_OTHER_MACRO:
76 if (record->event.pressed) { 76 if (record->event.pressed) {
77 SEND_STRING(SS_LCTRL("ac")); // selects all and copies 77 SEND_STRING(SS_LCTL("ac")); // selects all and copies
78 } 78 }
79 break; 79 break;
80 } 80 }
@@ -109,18 +109,21 @@ Which would send "VE" followed by a `KC_HOME` tap, and "LO" (spelling "LOVE" if
109 109
110There's also a couple of mod shortcuts you can use: 110There's also a couple of mod shortcuts you can use:
111 111
112* `SS_LCTRL(string)` 112* `SS_LCTL(string)`
113* `SS_LGUI(string)`
114* `SS_LALT(string)`
115* `SS_LSFT(string)` 113* `SS_LSFT(string)`
116* `SS_RALT(string)` 114* `SS_LALT(string)`
115* `SS_LGUI(string)`, `SS_LCMD(string)` or `SS_LWIN(string)`
116* `SS_RCTL(string)`
117* `SS_RSFT(string)`
118* `SS_RALT(string)` or `SS_ALGR(string)`
119* `SS_RGUI(string)`, `SS_RCMD(string)` or `SS_RWIN(string)`
117 120
118These press the respective modifier, send the supplied string and then release the modifier. 121These press the respective modifier, send the supplied string and then release the modifier.
119They can be used like this: 122They can be used like this:
120 123
121 SEND_STRING(SS_LCTRL("a")); 124 SEND_STRING(SS_LCTL("a"));
122 125
123Which would send LCTRL+a (LCTRL down, a, LCTRL up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes. 126Which would send Left Control+`a` (Left Control down, `a`, Left Control up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes.
124 127
125### Alternative Keymaps 128### Alternative Keymaps
126 129
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md
index 3e69361fb..23082ef2a 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -173,16 +173,20 @@ As mentioned earlier, the center of the keyboard by default is expected to be `{
173 173
174All RGB keycodes are currently shared with the RGBLIGHT system: 174All RGB keycodes are currently shared with the RGBLIGHT system:
175 175
176* `RGB_TOG` - toggle 176|Key |Aliases |Description |
177* `RGB_MOD` - cycle through modes 177|-------------------|----------|--------------------------------------------------------------------------------------|
178* `RGB_HUI` - increase hue 178|`RGB_TOG` | |Toggle RGB lighting on or off |
179* `RGB_HUD` - decrease hue 179|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
180* `RGB_SAI` - increase saturation 180|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held |
181* `RGB_SAD` - decrease saturation 181|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
182* `RGB_VAI` - increase value 182|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
183* `RGB_VAD` - decrease value 183|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
184* `RGB_SPI` - increase speed effect (no EEPROM support) 184|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
185* `RGB_SPD` - decrease speed effect (no EEPROM support) 185|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
186|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
187|`RGB_SPI` | |Increase effect speed (does not support eeprom yet), decrease speed when Shift is held|
188|`RGB_SPD` | |Decrease effect speed (does not support eeprom yet), increase speed when Shift is held|
189
186* `RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system 190* `RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system
187 191
188## RGB Matrix Effects 192## RGB Matrix Effects
@@ -195,6 +199,7 @@ enum rgb_matrix_effects {
195 RGB_MATRIX_SOLID_COLOR = 1, // Static single hue, no speed support 199 RGB_MATRIX_SOLID_COLOR = 1, // Static single hue, no speed support
196 RGB_MATRIX_ALPHAS_MODS, // Static dual hue, speed is hue for secondary hue 200 RGB_MATRIX_ALPHAS_MODS, // Static dual hue, speed is hue for secondary hue
197 RGB_MATRIX_GRADIENT_UP_DOWN, // Static gradient top to bottom, speed controls how much gradient changes 201 RGB_MATRIX_GRADIENT_UP_DOWN, // Static gradient top to bottom, speed controls how much gradient changes
202 RGB_MATRIX_GRADIENT_LEFT_RIGHT, // Static gradient left to right, speed controls how much gradient changes
198 RGB_MATRIX_BREATHING, // Single hue brightness cycling animation 203 RGB_MATRIX_BREATHING, // Single hue brightness cycling animation
199 RGB_MATRIX_BAND_SAT, // Single hue band fading saturation scrolling left to right 204 RGB_MATRIX_BAND_SAT, // Single hue band fading saturation scrolling left to right
200 RGB_MATRIX_BAND_VAL, // Single hue band fading brightness scrolling left to right 205 RGB_MATRIX_BAND_VAL, // Single hue band fading brightness scrolling left to right
@@ -282,7 +287,7 @@ You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `con
282 287
283## Custom RGB Matrix Effects 288## Custom RGB Matrix Effects
284 289
285By setting `RGB_MATRIX_CUSTOM_USER` (and/or `RGB_MATRIX_CUSTOM_KB`) in `rule.mk`, new effects can be defined directly from userspace, without having to edit any QMK core files. 290By setting `RGB_MATRIX_CUSTOM_USER` (and/or `RGB_MATRIX_CUSTOM_KB`) in `rules.mk`, new effects can be defined directly from userspace, without having to edit any QMK core files.
286 291
287To declare new effects, create a new `rgb_matrix_user/kb.inc` that looks something like this: 292To declare new effects, create a new `rgb_matrix_user/kb.inc` that looks something like this:
288 293
@@ -375,6 +380,10 @@ These are defined in [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blo
375#define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) 380#define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
376#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 381#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
377#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT // Sets the default mode, if none has been set 382#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT // Sets the default mode, if none has been set
383#define RGB_MATRIX_STARTUP_HUE 0 // Sets the default hue value, if none has been set
384#define RGB_MATRIX_STARTUP_SAT 255 // Sets the default saturation value, if none has been set
385#define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set
386#define RGB_MATRIX_STARTUP_SPD 127 // Sets the default animation speed, if none has been set
378``` 387```
379 388
380## EEPROM storage 389## EEPROM storage
diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md
index 2e9610163..69a6aaaed 100644
--- a/docs/feature_rgblight.md
+++ b/docs/feature_rgblight.md
@@ -48,12 +48,12 @@ Changing the **Value** sets the overall brightness.<br>
48|`RGB_TOG` | |Toggle RGB lighting on or off | 48|`RGB_TOG` | |Toggle RGB lighting on or off |
49|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held | 49|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
50|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held| 50|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held|
51|`RGB_HUI` | |Increase hue | 51|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
52|`RGB_HUD` | |Decrease hue | 52|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
53|`RGB_SAI` | |Increase saturation | 53|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
54|`RGB_SAD` | |Decrease saturation | 54|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
55|`RGB_VAI` | |Increase value (brightness) | 55|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
56|`RGB_VAD` | |Decrease value (brightness) | 56|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
57|`RGB_MODE_PLAIN` |`RGB_M_P `|Static (no animation) mode | 57|`RGB_MODE_PLAIN` |`RGB_M_P `|Static (no animation) mode |
58|`RGB_MODE_BREATHE` |`RGB_M_B` |Breathing animation mode | 58|`RGB_MODE_BREATHE` |`RGB_M_B` |Breathing animation mode |
59|`RGB_MODE_RAINBOW` |`RGB_M_R` |Rainbow animation mode | 59|`RGB_MODE_RAINBOW` |`RGB_M_R` |Rainbow animation mode |
diff --git a/docs/feature_userspace.md b/docs/feature_userspace.md
index e162d423c..a2657c1f6 100644
--- a/docs/feature_userspace.md
+++ b/docs/feature_userspace.md
@@ -208,15 +208,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
208 clear_mods(); clear_oneshot_mods(); 208 clear_mods(); clear_oneshot_mods();
209 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP); 209 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP);
210 #ifndef FLASH_BOOTLOADER 210 #ifndef FLASH_BOOTLOADER
211 if ( (temp_mod | temp_osm) & MOD_MASK_SHIFT ) 211 if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
212 #endif 212 #endif
213 { // 213 {
214 SEND_STRING(":flash"); 214 SEND_STRING(":flash");
215 } 215 }
216 if ( (temp_mod | temp_osm) & MOD_MASK_CTRL) { 216 if ((temp_mod | temp_osm) & MOD_MASK_CTRL) {
217 SEND_STRING(" -j8 --output-sync"); 217 SEND_STRING(" -j8 --output-sync");
218 } 218 }
219 SEND_STRING(SS_TAP(X_ENTER)); 219 tap_code(KC_ENT);
220 set_mods(temp_mod); 220 set_mods(temp_mod);
221 } 221 }
222 break; 222 break;
diff --git a/docs/flashing_bootloadhid.md b/docs/flashing_bootloadhid.md
index c51d8ce4b..731d92772 100644
--- a/docs/flashing_bootloadhid.md
+++ b/docs/flashing_bootloadhid.md
@@ -13,7 +13,7 @@ General flashing sequence:
13 13
14## bootloadHID Flashing Target 14## bootloadHID Flashing Target
15 15
16Using the QMK installation script, detailed [here](newbs_getting_started.md), the required bootloadHID tools should be automatically installed. 16?> Using the QMK installation script, detailed [here](newbs_getting_started.md), the required bootloadHID tools should be automatically installed.
17 17
18To flash via the command line, use the target `:bootloadHID` by executing the following command: 18To flash via the command line, use the target `:bootloadHID` by executing the following command:
19 19
diff --git a/docs/fr-fr/README.md b/docs/fr-fr/README.md
index d3591554b..4527ec4b4 100644
--- a/docs/fr-fr/README.md
+++ b/docs/fr-fr/README.md
@@ -19,7 +19,7 @@ Sinon, vous pouvez aussi le télécharger directement en ([zip](https://github.c
19 19
20## Comment le compiler 20## Comment le compiler
21 21
22Avant d'être prêt à compiler vous allez devoir [installer un environnement](getting_started_build_tools.md) pour les développements AVR et/ou ARM. Une fois ceci fait, vous pourrez utiliser la commande `make` pour compiler le clavier et la disposition avec une commande de ce type : 22Avant d'être prêt à compiler vous allez devoir [installer un environnement](fr-fr/getting_started_build_tools.md) pour les développements AVR et/ou ARM. Une fois ceci fait, vous pourrez utiliser la commande `make` pour compiler le clavier et la disposition avec une commande de ce type :
23 23
24 make planck/rev4:default 24 make planck/rev4:default
25 25
@@ -29,4 +29,4 @@ Cette commande compilera la révision `rev4` du clavier `planck` avec la disposi
29 29
30## Comment le personnaliser 30## Comment le personnaliser
31 31
32QMK a beaucoup de [fonctionnalités](features.md) à explorer, et [une documentation](http://docs.qmk.fm) très abondante que vous pourrez parcourir. La plupart des fonctionnalités vous permettrons de modifier vos [dispositions](keymap.md) (keymaps) et de changer [les codes de caractères](keycodes.md) (keycodes). 32QMK a beaucoup de [fonctionnalités](fr-fr/features.md) à explorer, et [une documentation](http://docs.qmk.fm) très abondante que vous pourrez parcourir. La plupart des fonctionnalités vous permettrons de modifier vos [dispositions](fr-fr/keymap.md) (keymaps) et de changer [les codes de caractères](fr-fr/keycodes.md) (keycodes).
diff --git a/docs/fr-fr/_summary.md b/docs/fr-fr/_summary.md
index eef486176..38e3abe7c 100644
--- a/docs/fr-fr/_summary.md
+++ b/docs/fr-fr/_summary.md
@@ -29,97 +29,97 @@
29**En Anglais** 29**En Anglais**
30 30
31* Guides détaillés 31* Guides détaillés
32 * [Installation des outils de compilation](getting_started_build_tools.md) 32 * [Installation des outils de compilation](fr-fr/getting_started_build_tools.md)
33 * [Guide Vagrant](getting_started_vagrant.md) 33 * [Guide Vagrant](fr-fr/getting_started_vagrant.md)
34 * [Commandes de compilations](getting_started_make_guide.md) 34 * [Commandes de compilations](fr-fr/getting_started_make_guide.md)
35 * [Flasher les firmwares](fr-fr/flashing.md) 35 * [Flasher les firmwares](fr-fr/flashing.md)
36 * [Personnaliser les fonctionnalités](custom_quantum_functions.md) 36 * [Personnaliser les fonctionnalités](fr-fr/custom_quantum_functions.md)
37 * [Aperçu des fonctionnalités des dispositions](keymap.md) 37 * [Aperçu des fonctionnalités des dispositions](fr-fr/keymap.md)
38 38
39* [Hardware](hardware.md) 39* [Hardware](fr-fr/hardware.md)
40 * [Processeurs AVR](hardware_avr.md) 40 * [Processeurs AVR](fr-fr/hardware_avr.md)
41 * [Pilotes / Drivers](hardware_drivers.md) 41 * [Pilotes / Drivers](fr-fr/hardware_drivers.md)
42 42
43* Réferences 43* Réferences
44 * [Lignes de conduite des claviers](hardware_keyboard_guidelines.md) 44 * [Lignes de conduite des claviers](fr-fr/hardware_keyboard_guidelines.md)
45 * [Options de configurations](config_options.md) 45 * [Options de configurations](fr-fr/config_options.md)
46 * [Keycodes / Codes des caractères](keycodes.md) 46 * [Keycodes / Codes des caractères](fr-fr/keycodes.md)
47 * [Conventions de codage - C](coding_conventions_c.md) 47 * [Conventions de codage - C](fr-fr/coding_conventions_c.md)
48 * [Conventions de codage - Python](coding_conventions_python.md) 48 * [Conventions de codage - Python](fr-fr/coding_conventions_python.md)
49 * [Meilleurs pratiques sur la documentation](documentation_best_practices.md) 49 * [Meilleurs pratiques sur la documentation](fr-fr/documentation_best_practices.md)
50 * [Modèles de documentation](documentation_templates.md) 50 * [Modèles de documentation](fr-fr/documentation_templates.md)
51 * [Glossaire](reference_glossary.md) 51 * [Glossaire](fr-fr/reference_glossary.md)
52 * [Tests unitaires](unit_testing.md) 52 * [Tests unitaires](fr-fr/unit_testing.md)
53 * [Fonctions utiles](ref_functions.md) 53 * [Fonctions utiles](fr-fr/ref_functions.md)
54 * [Support de configuration](reference_configurator_support.md) 54 * [Support de configuration](fr-fr/reference_configurator_support.md)
55 * [Format du fichier info.json](reference_info_json.md) 55 * [Format du fichier info.json](fr-fr/reference_info_json.md)
56 * [Développer la CLI en Python](cli_development.md) 56 * [Développer la CLI en Python](fr-fr/cli_development.md)
57 57
58* [Fonctionnalités](features.md) 58* [Fonctionnalités](fr-fr/features.md)
59 * [Keycodes basiques](keycodes_basic.md) 59 * [Keycodes basiques](fr-fr/keycodes_basic.md)
60 * [Touches utilisées avec Shift (US ANSI)](keycodes_us_ansi_shifted.md) 60 * [Touches utilisées avec Shift (US ANSI)](fr-fr/keycodes_us_ansi_shifted.md)
61 * [Keycodes quantiques](quantum_keycodes.md) 61 * [Keycodes quantiques](fr-fr/quantum_keycodes.md)
62 * [Keycodes avancés](feature_advanced_keycodes.md) 62 * [Keycodes avancés](fr-fr/feature_advanced_keycodes.md)
63 * [Fonctionnalités audio](feature_audio.md) 63 * [Fonctionnalités audio](fr-fr/feature_audio.md)
64 * [Majuscule automatique](feature_auto_shift.md) 64 * [Majuscule automatique](fr-fr/feature_auto_shift.md)
65 * [Rétroéclairage](feature_backlight.md) 65 * [Rétroéclairage](fr-fr/feature_backlight.md)
66 * [Bluetooth](feature_bluetooth.md) 66 * [Bluetooth](fr-fr/feature_bluetooth.md)
67 * [Bootmagic](feature_bootmagic.md) 67 * [Bootmagic](fr-fr/feature_bootmagic.md)
68 * [Combos](feature_combo.md) 68 * [Combos](fr-fr/feature_combo.md)
69 * [Commande](feature_command.md) 69 * [Commande](fr-fr/feature_command.md)
70 * [API anti-rebond](feature_debounce_type.md) 70 * [API anti-rebond](fr-fr/feature_debounce_type.md)
71 * [DIP Switch](feature_dip_switch.md) 71 * [DIP Switch](fr-fr/feature_dip_switch.md)
72 * [Macros dynamiques](feature_dynamic_macros.md) 72 * [Macros dynamiques](fr-fr/feature_dynamic_macros.md)
73 * [Interrupteurs rotatifs](feature_encoders.md) 73 * [Interrupteurs rotatifs](fr-fr/feature_encoders.md)
74 * [Grave Escape](feature_grave_esc.md) 74 * [Grave Escape](fr-fr/feature_grave_esc.md)
75 * [Retour haptique](feature_haptic_feedback.md) 75 * [Retour haptique](fr-fr/feature_haptic_feedback.md)
76 * [Contrôleur LCD HD44780](feature_hd44780.md) 76 * [Contrôleur LCD HD44780](fr-fr/feature_hd44780.md)
77 * [Touche à verrou / Lock-key](feature_key_lock.md) 77 * [Touche à verrou / Lock-key](fr-fr/feature_key_lock.md)
78 * [Dispositions / layouts](feature_layouts.md) 78 * [Dispositions / layouts](fr-fr/feature_layouts.md)
79 * [Touche leader](feature_leader_key.md) 79 * [Touche leader](fr-fr/feature_leader_key.md)
80 * [Matrice LED](feature_led_matrix.md) 80 * [Matrice LED](fr-fr/feature_led_matrix.md)
81 * [Macros](feature_macros.md) 81 * [Macros](fr-fr/feature_macros.md)
82 * [Boutons de souris](feature_mouse_keys.md) 82 * [Boutons de souris](fr-fr/feature_mouse_keys.md)
83 * [Pilotes / Drivers OLED](feature_oled_driver.md) 83 * [Pilotes / Drivers OLED](fr-fr/feature_oled_driver.md)
84 * [Touche one-shot](feature_advanced_keycodes.md#one-shot-keys) 84 * [Touche one-shot](fr-fr/feature_advanced_keycodes.md#one-shot-keys)
85 * [Périphériques de pointage](feature_pointing_device.md) 85 * [Périphériques de pointage](fr-fr/feature_pointing_device.md)
86 * [Souris PS/2](feature_ps2_mouse.md) 86 * [Souris PS/2](fr-fr/feature_ps2_mouse.md)
87 * [Éclairage RGB](feature_rgblight.md) 87 * [Éclairage RGB](fr-fr/feature_rgblight.md)
88 * [Matrice RGB](feature_rgb_matrix.md) 88 * [Matrice RGB](fr-fr/feature_rgb_matrix.md)
89 * [Space Cadet](feature_space_cadet.md) 89 * [Space Cadet](fr-fr/feature_space_cadet.md)
90 * [Claviers scindés / splittés](feature_split_keyboard.md) 90 * [Claviers scindés / splittés](fr-fr/feature_split_keyboard.md)
91 * [Stenographie](feature_stenography.md) 91 * [Stenographie](fr-fr/feature_stenography.md)
92 * [Inversion des mains](feature_swap_hands.md) 92 * [Inversion des mains](fr-fr/feature_swap_hands.md)
93 * [Tap Dance](feature_tap_dance.md) 93 * [Tap Dance](fr-fr/feature_tap_dance.md)
94 * [Terminale](feature_terminal.md) 94 * [Terminale](fr-fr/feature_terminal.md)
95 * [Imprimante thermique](feature_thermal_printer.md) 95 * [Imprimante thermique](fr-fr/feature_thermal_printer.md)
96 * [Caractères unicodes](feature_unicode.md) 96 * [Caractères unicodes](fr-fr/feature_unicode.md)
97 * [Dossier utilisateur](feature_userspace.md) 97 * [Dossier utilisateur](fr-fr/feature_userspace.md)
98 * [Velocikey](feature_velocikey.md) 98 * [Velocikey](fr-fr/feature_velocikey.md)
99 99
100* Pour les makers et les bricoleurs 100* Pour les makers et les bricoleurs
101 * [Guide des claviers soudés à la main](hand_wire.md) 101 * [Guide des claviers soudés à la main](fr-fr/hand_wire.md)
102 * [Guide de flash de l’ISP](isp_flashing_guide.md) 102 * [Guide de flash de l’ISP](fr-fr/isp_flashing_guide.md)
103 * [Guide du débogage ARM](arm_debugging.md) 103 * [Guide du débogage ARM](fr-fr/arm_debugging.md)
104 * [Drivers i2c](i2c_driver.md) 104 * [Drivers i2c](fr-fr/i2c_driver.md)
105 * [Contrôles des GPIO](internals_gpio_control.md) 105 * [Contrôles des GPIO](fr-fr/internals_gpio_control.md)
106 * [Conversion en Proton C](proton_c_conversion.md) 106 * [Conversion en Proton C](fr-fr/proton_c_conversion.md)
107 107
108* Pour aller plus loin 108* Pour aller plus loin
109 * [Comment fonctionnent les claviers](how_keyboards_work.md) 109 * [Comment fonctionnent les claviers](fr-fr/how_keyboards_work.md)
110 * [Comprendre QMK](understanding_qmk.md) 110 * [Comprendre QMK](fr-fr/understanding_qmk.md)
111 111
112* Autres sujets 112* Autres sujets
113 * [Utiliser Eclipse avec QMK](other_eclipse.md) 113 * [Utiliser Eclipse avec QMK](fr-fr/other_eclipse.md)
114 * [Utiliser VSCode avec QMK](other_vscode.md) 114 * [Utiliser VSCode avec QMK](fr-fr/other_vscode.md)
115 * [Support](support.md) 115 * [Support](fr-fr/support.md)
116 * [Comment ajouter des traductions](translating.md) 116 * [Comment ajouter des traductions](fr-fr/translating.md)
117 117
118* À l’intérieur de QMK (En cours de documentation) 118* À l’intérieur de QMK (En cours de documentation)
119 * [Définitions](internals_defines.md) 119 * [Définitions](fr-fr/internals_defines.md)
120 * [Input Callback Reg](internals_input_callback_reg.md) 120 * [Input Callback Reg](fr-fr/internals_input_callback_reg.md)
121 * [Appareils Midi](internals_midi_device.md) 121 * [Appareils Midi](fr-fr/internals_midi_device.md)
122 * [Installation d’un appareil Midi](internals_midi_device_setup_process.md) 122 * [Installation d’un appareil Midi](fr-fr/internals_midi_device_setup_process.md)
123 * [Utilitaires Midi](internals_midi_util.md) 123 * [Utilitaires Midi](fr-fr/internals_midi_util.md)
124 * [Fonctions Midi](internals_send_functions.md) 124 * [Fonctions Midi](fr-fr/internals_send_functions.md)
125 * [Outils Sysex](internals_sysex_tools.md) 125 * [Outils Sysex](fr-fr/internals_sysex_tools.md)
diff --git a/docs/fr-fr/faq_build.md b/docs/fr-fr/faq_build.md
index 774bf6880..84d88afcd 100644
--- a/docs/fr-fr/faq_build.md
+++ b/docs/fr-fr/faq_build.md
@@ -86,10 +86,6 @@ Relancer le script d'installation de QMK (`./util/qmk_install.sh` situé dans r
86 86
87Si vous rencontrez toujours des problèmes, essayez de télécharger et lancer Zadig. Voir [Installation du driver du bootloader avec Zadig](driver_installation_zadig.md) pour plus d'informations. 87Si vous rencontrez toujours des problèmes, essayez de télécharger et lancer Zadig. Voir [Installation du driver du bootloader avec Zadig](driver_installation_zadig.md) pour plus d'informations.
88 88
89## WINAVR est obsolète
90
91Il n'est plus recommandé et peut causer des problèmes. Voir [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
92
93## USB VID et PID 89## USB VID et PID
94 90
95Vous pouvez utiliser l'ID de votre choix en modifier `config.h`. Il y a peu de chance de conflit avec d'autres produits. 91Vous pouvez utiliser l'ID de votre choix en modifier `config.h`. Il y a peu de chance de conflit avec d'autres produits.
@@ -103,30 +99,6 @@ Vous pouvez acheter un VID:PID unique ici. Je ne pense pas que ce soit nécessai
103- http://www.obdev.at/products/vusb/license.html 99- http://www.obdev.at/products/vusb/license.html
104- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1 100- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
105 101
106## Cortex: `cstddef: No such file or directory`
107
108Ce problème existait avec le GCC 4.8 d'Ubuntu 14.04, la solution a nécessité de mettre à jour vers 4.9 avec ce PPA.
109https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
110
111https://github.com/tmk/tmk_keyboard/issues/212
112https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
113https://developer.mbed.org/forum/mbed/topic/5205/
114
115## `clock_prescale_set` and `clock_div_1` Not Available
116
117Votre chaîne d'outils (Toolchain) est trop vieille pour supporter le MCU. Par exemple, WinAVR 20100110 ne supporte pas ATMega32u2.
118
119```
120Compiling C: ../../tmk_core/protocol/lufa/lufa.c
121avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
122../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
123../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
124../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
125../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
126../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
127make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
128```
129
130## BOOTLOADER_SIZE pour AVR 102## BOOTLOADER_SIZE pour AVR
131 103
132Notez que la taille du bootloader pour les Teensy2.0++ est de 2048bytes. Quelques Makefiles peuvent contenir une erreur et avoir le mauvais commentaire. 104Notez que la taille du bootloader pour les Teensy2.0++ est de 2048bytes. Quelques Makefiles peuvent contenir une erreur et avoir le mauvais commentaire.
diff --git a/docs/fr-fr/faq_debug.md b/docs/fr-fr/faq_debug.md
index 7a85fd1f2..754c79921 100644
--- a/docs/fr-fr/faq_debug.md
+++ b/docs/fr-fr/faq_debug.md
@@ -104,58 +104,6 @@ En C, `1` implique un type [int] qui est [16 bits] pour les AVR, ce qui implique
104 104
105http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279 105http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
106 106
107## Bootloader Jump ne fonctionne pas
108
109Configurez correctement la taille du bootloader dans le **Makefile**. Une mauvaise taille de section du bootloader empêchera probablement le démarrage avec **Magic command** et **Boot Magic**.
110
111```
112# Size of Bootloaders in bytes:
113# Atmel DFU loader(ATmega32U4) 4096
114# Atmel DFU loader(AT90USB128) 8192
115# LUFA bootloader(ATmega32U4) 4096
116# Arduino Caterina(ATmega32U4) 4096
117# USBaspLoader(ATmega***) 2048
118# Teensy halfKay(ATmega32U4) 512
119# Teensy++ halfKay(AT90USB128) 2048
120OPT_DEFS += -DBOOTLOADER_SIZE=4096
121```
122
123La taille de la section de démarrage de AVR est définie par l'option **BOOTSZ** fuse. Vérifiez la fiche technique du MCU. Veuilez noter que les tailles et adresses sont définies en **Word** (2 octets) dans la fiche technique alors que TMK utilise des **Byte**.
124
125La section de boot AVR se trouve à la fin de la mémoire flash, comme suit.
126
127```
128byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
1290x0000 +---------------+ 0x00000 +---------------+
130 | | | |
131 | | | |
132 | Application | | Application |
133 | | | |
134 = = = =
135 | | 32KB-4KB | | 128KB-8KB
1360x6000 +---------------+ 0x1E000 +---------------+
137 | Bootloader | 4KB | Bootloader | 8KB
1380x7FFF +---------------+ 0x1FFFF +---------------+
139
140
141byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
1420x0000 +---------------+ 0x00000 +---------------+
143 | | | |
144 | | | |
145 | Application | | Application |
146 | | | |
147 = = = =
148 | | 32KB-512B | | 128KB-2KB
1490x7E00 +---------------+ 0x1FC00 +---------------+
150 | Bootloader | 512B | Bootloader | 2KB
1510x7FFF +---------------+ 0x1FFFF +---------------+
152```
153
154Référez-vous à cette discussion pour plus de référence.
155https://github.com/tmk/tmk_keyboard/issues/179
156
157Si vous utilisez un TeensyUSB, il y a un [bug connu](https://github.com/qmk/qmk_firmware/issues/164) qui fait que le bouton reset matériel empêche la touche RESET de fonctionner. Débrancher et rebrancher le clavier devrait résoudre le problème.
158
159## Les touches spéciales ne fonctionnent pas (Touche Système, Touches de contrôle du son) 107## Les touches spéciales ne fonctionnent pas (Touche Système, Touches de contrôle du son)
160 108
161Vous devez définir `EXTRAKEY_ENABLE` dans le fichier `rules.mk` pour les utiliser dans QMK. 109Vous devez définir `EXTRAKEY_ENABLE` dans le fichier `rules.mk` pour les utiliser dans QMK.
@@ -189,25 +137,6 @@ Si vous voulez garder JTAG activé, ajoutez la ligne suivante à votre fichier `
189#define NO_JTAG_DISABLE 137#define NO_JTAG_DISABLE
190``` 138```
191 139
192## Adding LED Indicators of Lock Keys
193
194Si vous souhaitez votre propre indicateur LED pour CapsLock, ScrollLock et NumLock alors lisez ce post.
195
196http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
197
198## Programmer Arduino Micro/Leonardo
199
200Appuyez sur le bouton reset puis lancez la commande suivante dans les 8 secondes.
201
202```
203avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
204```
205
206Le nom du périphérique peut varier en fonction de votre système.
207
208http://arduino.cc/en/Main/ArduinoBoardMicro
209https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
210
211## Compatibilité USB 3 140## Compatibilité USB 3
212 141
213Il semble que certaines personnes ont eu des problèmes avec les ports USB 3, essayez un port USB 2. 142Il semble que certaines personnes ont eu des problèmes avec les ports USB 3, essayez un port USB 2.
diff --git a/docs/fr-fr/faq_keymap.md b/docs/fr-fr/faq_keymap.md
index 8244d4225..2cbbe9308 100644
--- a/docs/fr-fr/faq_keymap.md
+++ b/docs/fr-fr/faq_keymap.md
@@ -72,24 +72,7 @@ Des vieux claviers mécaniques ont parfois des touches à verrouillage, mais les
72 72
73## Ajouter des caractères spéciaux autres que ASCII comme la cédille 'Ç' 73## Ajouter des caractères spéciaux autres que ASCII comme la cédille 'Ç'
74 74
75IL N'EXISTE AUCUNE METHODE UNIVERSELLE POUR LES AJOUTER QUI FONCTIONNE SUR TOUS LES SYSTEMES. Vous devez définir une **MACRO** d'une manière spécifique à votre OS ou layout. 75Voir la fonctionnalité [Unicode](feature_unicode.md).
76
77Voir ce post pour un exemple de code **MACRO**.
78
79http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
80
81Sous **Windows** vous pouvez utiliser la touche `AltGr` ou **Alt code**.
82* http://en.wikipedia.org/wiki/AltGr_key
83* http://en.wikipedia.org/wiki/Alt_code
84
85Sous **Mac OS** définissez une combinaison de touche `Option`.
86* http://en.wikipedia.org/wiki/Option_key#Alternative_keyboard_input
87
88Sous **Xorg** vous pouvez utiliser une touche `compose` à la place.
89* http://en.wikipedia.org/wiki/Compose_key
90
91Et voir ceci pour une entrée **Unicode**.
92* http://en.wikipedia.org/wiki/Unicode_input
93 76
94## Touche `Fn` sur macOS 77## Touche `Fn` sur macOS
95 78
@@ -144,54 +127,6 @@ Cette fonctionnalité permet d'utiliser une touche à la fois comme touche Écha
144 127
145Voir la fonctionnalité [Grave Escape](feature_grave_esc.md). 128Voir la fonctionnalité [Grave Escape](feature_grave_esc.md).
146 129
147## Avoir les touches modificatrices qui ont double usage en flèches directionnelles.
148
149Ceci transforme les touches "modificateur droit" en touches fléchées lorsque les touches sont seulement "tapées" tout en restant des modificateurs lorsqu'elles sont maintenues.
150
151Dans TMK la fonction double rôle s'appelle **TAP**.
152
153```C
154
155#include "keymap_common.h"
156
157
158/* Arrow keys on right modifier keys with TMK dual role feature
159 *
160 * https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
161 * https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
162 */
163const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
164 /* 0: qwerty */
165 [0] = LAYOUT( \
166 ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
167 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
168 LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
169 LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
170 FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
171 [1] = LAYOUT( \
172 GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
173 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
174 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
175 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
176 TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
177};
178
179const uint16_t PROGMEM fn_actions[] = {
180 [0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
181 [1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
182 [2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
183 [3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
184 [4] = ACTION_LAYER_MOMENTARY(1),
185 [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
186 [6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
187 [7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
188 [8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
189};
190
191```
192
193Touches double rôle : https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
194
195## Eject sur Mac OSX 130## Eject sur Mac OSX
196 131
197Le keycode`KC_EJCT` fonctionne sous OSX. https://github.com/tmk/tmk_keyboard/issues/250 132Le keycode`KC_EJCT` fonctionne sous OSX. https://github.com/tmk/tmk_keyboard/issues/250
diff --git a/docs/fr-fr/getting_started_github.md b/docs/fr-fr/getting_started_github.md
index 22c6ee749..48755625a 100644
--- a/docs/fr-fr/getting_started_github.md
+++ b/docs/fr-fr/getting_started_github.md
@@ -16,17 +16,23 @@ Faites attention à sélectionner "HTTPS", et sélectionnez le lien et copiez-le
16 16
17![HTTPS link](http://i.imgur.com/eGO0ohO.jpg) 17![HTTPS link](http://i.imgur.com/eGO0ohO.jpg)
18 18
19Ensuite, entrez `git clone` dans la ligne de commande, et collez votre lien: 19Ensuite, entrez `git clone --recurse-submodules ` dans la ligne de commande, et collez votre lien:
20 20
21``` 21```
22user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git 22user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
23Cloning into 'qmk_firmware'... 23Cloning into 'qmk_firmware'...
24remote: Counting objects: 46625, done. 24remote: Enumerating objects: 9, done.
25remote: Compressing objects: 100% (2/2), done. 25remote: Counting objects: 100% (9/9), done.
26remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623 26remote: Compressing objects: 100% (5/5), done.
27Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done. 27remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
28Resolving deltas: 100% (29362/29362), done. 28Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
29Checking out files: 100% (2799/2799), done. 29Resolving deltas: 100% (119972/119972), done.
30...
31Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
32Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
33Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
34Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
35Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
30``` 36```
31 37
32Vous avez maintenant votre fork QMK sur votre machine locale, vous pouvez ajouter votre keymap, la compiler et la flasher sur votre board. Une fois heureux avec vos changements, vous pouvez les ajouter, commit, et pousser vers votre fork comme suit: 38Vous avez maintenant votre fork QMK sur votre machine locale, vous pouvez ajouter votre keymap, la compiler et la flasher sur votre board. Une fois heureux avec vos changements, vous pouvez les ajouter, commit, et pousser vers votre fork comme suit:
diff --git a/docs/fr-fr/getting_started_introduction.md b/docs/fr-fr/getting_started_introduction.md
index a7f0ff96a..b2711a167 100644
--- a/docs/fr-fr/getting_started_introduction.md
+++ b/docs/fr-fr/getting_started_introduction.md
@@ -4,7 +4,7 @@ Le but de cette page est d'expliquer les informations de base qui vous serons n
4 4
5## Structure de base de QMK 5## Structure de base de QMK
6 6
7QMK est un fork du projet [tmk_keyboard](https://github.com/tmk/tmk_keyboard) créé par [Jun Wako](https://github.com/tmk). Le code originel de TMK, avec quelques modifications, se trouve dans le dossier `tmk`. Les additions que QMK amène au projet se trouvent dans le dossier `quantum`. Les projets de clavier se trouvent dans les dossiers `handwired` et `keyboard`. 7QMK est un fork du projet [tmk_keyboard](https://github.com/tmk/tmk_keyboard) créé par [Jun Wako](https://github.com/tmk). Le code originel de TMK, avec quelques modifications, se trouve dans le dossier `tmk_core`. Les additions que QMK amène au projet se trouvent dans le dossier `quantum`. Les projets de clavier se trouvent dans les dossiers `handwired` et `keyboard`.
8 8
9### Structure du Userspace 9### Structure du Userspace
10 10
diff --git a/docs/getting_started_build_tools.md b/docs/getting_started_build_tools.md
index 2721a9a03..fea20e59b 100644
--- a/docs/getting_started_build_tools.md
+++ b/docs/getting_started_build_tools.md
@@ -43,7 +43,7 @@ Debian / Ubuntu example:
43Fedora / Red Hat example: 43Fedora / Red Hat example:
44 44
45 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 45 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
46 46
47Arch / Manjaro example: 47Arch / Manjaro example:
48 48
49 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 49 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
@@ -57,16 +57,17 @@ By default, this will download compilers for both AVR and ARM. If you don't need
57 nix-shell --arg arm false 57 nix-shell --arg arm false
58 58
59## macOS 59## macOS
60If you're using [homebrew,](http://brew.sh/) you can use the following commands: 60If you're using [Homebrew](http://brew.sh/), you can use the following commands:
61 61
62 brew tap osx-cross/avr 62 brew tap osx-cross/avr
63 brew tap PX4/homebrew-px4 63 brew tap osx-cross/arm
64 brew update 64 brew update
65 brew install avr-gcc@8 65 brew install avr-gcc@8
66 brew link --force avr-gcc@8 66 brew link --force avr-gcc@8
67 brew install dfu-programmer 67 brew install dfu-programmer
68 brew install dfu-util 68 brew install dfu-util
69 brew install gcc-arm-none-eabi 69 brew install arm-gcc-bin@8
70 brew link --force arm-gcc-bin@8
70 brew install avrdude 71 brew install avrdude
71 72
72This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of `avr-gcc@8` can take over 20 minutes and exhibit high CPU usage. 73This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line. Note that the `make` and `make install` portion during the homebrew installation of `avr-gcc@8` can take over 20 minutes and exhibit high CPU usage.
@@ -119,12 +120,12 @@ If this is a bit complex for you, Docker might be the turnkey solution you need.
119util/docker_build.sh keyboard:keymap 120util/docker_build.sh keyboard:keymap
120# For example: util/docker_build.sh ergodox_ez:steno 121# For example: util/docker_build.sh ergodox_ez:steno
121``` 122```
122This will compile the desired keyboard/keymap and leave the resulting `.hex` or `.bin` file in the QMK directory for you to flash. If `:keymap` is omitted, the `default` keymap is used. Note that the parameter format is the same as when building with `make`. 123This will compile the desired keyboard/keymap and leave the resulting `.hex` or `.bin` file in the QMK directory for you to flash. If `:keymap` is omitted, all keymaps are used. Note that the parameter format is the same as when building with `make`.
123 124
124You can also start the script without any parameters, in which case it will ask you to input the build parameters one by one, which you may find easier to use: 125You can also start the script without any parameters, in which case it will ask you to input the build parameters one by one, which you may find easier to use:
125```bash 126```bash
126util/docker_build.sh 127util/docker_build.sh
127# Reads parameters as input (leave blank for defaults) 128# Reads parameters as input (leave blank for all keyboards/keymaps)
128``` 129```
129 130
130There is also support for building _and_ flashing the keyboard straight from Docker by specifying the `target` as well: 131There is also support for building _and_ flashing the keyboard straight from Docker by specifying the `target` as well:
diff --git a/docs/getting_started_github.md b/docs/getting_started_github.md
index aeb8738b7..07f523f57 100644
--- a/docs/getting_started_github.md
+++ b/docs/getting_started_github.md
@@ -16,17 +16,23 @@ And be sure to select "HTTPS", and select the link and copy it:
16 16
17![HTTPS link](http://i.imgur.com/eGO0ohO.jpg) 17![HTTPS link](http://i.imgur.com/eGO0ohO.jpg)
18 18
19From here, enter `git clone ` into the command line, and then paste your link: 19From here, enter `git clone --recurse-submodules ` into the command line, and then paste your link:
20 20
21``` 21```
22user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git 22user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
23Cloning into 'qmk_firmware'... 23Cloning into 'qmk_firmware'...
24remote: Counting objects: 46625, done. 24remote: Enumerating objects: 9, done.
25remote: Compressing objects: 100% (2/2), done. 25remote: Counting objects: 100% (9/9), done.
26remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623 26remote: Compressing objects: 100% (5/5), done.
27Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done. 27remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
28Resolving deltas: 100% (29362/29362), done. 28Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
29Checking out files: 100% (2799/2799), done. 29Resolving deltas: 100% (119972/119972), done.
30...
31Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
32Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
33Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
34Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
35Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
30``` 36```
31 37
32You now have your QMK fork on your local machine, and you can add your keymap, compile it and flash it to your board. Once you're happy with your changes, you can add, commit, and push them to your fork like this: 38You now have your QMK fork on your local machine, and you can add your keymap, compile it and flash it to your board. Once you're happy with your changes, you can add, commit, and push them to your fork like this:
diff --git a/docs/getting_started_introduction.md b/docs/getting_started_introduction.md
index e183d77ee..6dc51b82b 100644
--- a/docs/getting_started_introduction.md
+++ b/docs/getting_started_introduction.md
@@ -4,7 +4,7 @@ This page attempts to explain the basic information you need to know to work wit
4 4
5## Basic QMK Structure 5## Basic QMK Structure
6 6
7QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders. 7QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk_core` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders.
8 8
9### Userspace Structure 9### Userspace Structure
10 10
diff --git a/docs/getting_started_make_guide.md b/docs/getting_started_make_guide.md
index d2596b2e2..df82a001f 100644
--- a/docs/getting_started_make_guide.md
+++ b/docs/getting_started_make_guide.md
@@ -59,7 +59,7 @@ To disable debug messages (*dprint*) and reduce the .hex file size, include `#de
59 59
60To disable print messages (*print*, *xprintf*) and user print messages (*uprint*) and reduce the .hex file size, include `#define NO_PRINT` in your `config.h` file. 60To disable print messages (*print*, *xprintf*) and user print messages (*uprint*) and reduce the .hex file size, include `#define NO_PRINT` in your `config.h` file.
61 61
62To disable print messages (*print*, *xprintf*) and **KEEP** user print messages (*uprint*), include `#define USER_PRINT` in your `config.h` file. 62To disable print messages (*print*, *xprintf*) and **KEEP** user print messages (*uprint*), include `#define USER_PRINT` in your `config.h` file (do not also include `#define NO_PRINT` in this case).
63 63
64To see the text, open `hid_listen` and enjoy looking at your printed messages. 64To see the text, open `hid_listen` and enjoy looking at your printed messages.
65 65
@@ -135,7 +135,7 @@ As there is no standard split communication driver for ARM-based split keyboards
135 135
136`CUSTOM_MATRIX` 136`CUSTOM_MATRIX`
137 137
138Lets you replace the default matrix scanning routine with your own code. You will need to provide your own implementations of matrix_init() and matrix_scan(). 138Lets you replace the default matrix scanning routine with your own code. For further details, see the [Custom Matrix page](custom_matrix.md).
139 139
140`DEBOUNCE_TYPE` 140`DEBOUNCE_TYPE`
141 141
diff --git a/docs/he-il/README.md b/docs/he-il/README.md
index db0ad43c3..8e0c470b4 100644
--- a/docs/he-il/README.md
+++ b/docs/he-il/README.md
@@ -20,7 +20,7 @@ QMK (*Quantum Mechanical Keyboard*) היא קהילת קוד פתוח (open sour
20 20
21## איך לקמפל 21## איך לקמפל
22 22
23לפני שתצליחו לקמפל, תדרשו [להתקין סביבה](getting_started_build_tools.md) עבור פיתוח AVR ו/או ARM. ברגע שהדבר בוצע, תוכלו להריץ פקודת `make` כדי לבנות מקלדת ומיפוי עם התחביר הבא: 23לפני שתצליחו לקמפל, תדרשו [להתקין סביבה](he-il/getting_started_build_tools.md) עבור פיתוח AVR ו/או ARM. ברגע שהדבר בוצע, תוכלו להריץ פקודת `make` כדי לבנות מקלדת ומיפוי עם התחביר הבא:
24 24
25 make planck/rev4:default 25 make planck/rev4:default
26 26
@@ -30,5 +30,5 @@ QMK (*Quantum Mechanical Keyboard*) היא קהילת קוד פתוח (open sour
30 30
31## איך להתאים 31## איך להתאים
32 32
33לQMK יש המון [יכולות](features.md) שאפשר לנווט בהן, וכמות נכבדת של [תיעוד ודוקומנטציה](http://docs.qmk.fm) בה אפשר לנבור. רוב הפיצ׳רים באים לידי ביטוי על ידי שינוי [מיפוי המקלדת](keymap.md) ושינוי [קודי המקשים](keycodes.md). 33לQMK יש המון [יכולות](he-il/features.md) שאפשר לנווט בהן, וכמות נכבדת של [תיעוד ודוקומנטציה](http://docs.qmk.fm) בה אפשר לנבור. רוב הפיצ׳רים באים לידי ביטוי על ידי שינוי [מיפוי המקלדת](he-il/keymap.md) ושינוי [קודי המקשים](he-il/keycodes.md).
34</div> 34</div>
diff --git a/docs/he-il/_summary.md b/docs/he-il/_summary.md
index acc0546d0..804db534a 100644
--- a/docs/he-il/_summary.md
+++ b/docs/he-il/_summary.md
@@ -1,6 +1,7 @@
1<div dir="rtl" markdown="1"> 1<div dir="rtl" markdown="1">
2
2**בשפה העברית** 3**בשפה העברית**
3* [המדריך המלא למתחילים](newbs.md) 4* [המדריך המלא למתחילים](he-il/newbs.md)
4 * [מקורות ללמידה](he-il/newbs_learn_more_resources.md) 5 * [מקורות ללמידה](he-il/newbs_learn_more_resources.md)
5* [בסיס QMK](he-il/README.md) 6* [בסיס QMK](he-il/README.md)
6 * [מבוא לQMK](he-il/getting_started_introduction.md) 7 * [מבוא לQMK](he-il/getting_started_introduction.md)
@@ -13,126 +14,126 @@
13 * [איך לתעד נכון](he-il/documentation_best_practices.md) 14 * [איך לתעד נכון](he-il/documentation_best_practices.md)
14 15
15**בשפה האנגלית** 16**בשפה האנגלית**
16* [המדריך המלא למתחילים](newbs.md) 17* [המדריך המלא למתחילים](he-il/newbs.md)
17 * [התחלה](newbs_getting_started.md) 18 * [התחלה](he-il/newbs_getting_started.md)
18 * [בנייה של הקושחה הראשונה שלך](newbs_building_firmware.md) 19 * [בנייה של הקושחה הראשונה שלך](he-il/newbs_building_firmware.md)
19 * [צריבה של הקושחה](newbs_flashing.md) 20 * [צריבה של הקושחה](he-il/newbs_flashing.md)
20 * [בדיקות ודיבאגינג](newbs_testing_debugging.md) 21 * [בדיקות ודיבאגינג](he-il/newbs_testing_debugging.md)
21 * [עבודה נכונה ב GIT](newbs_best_practices.md) 22 * [עבודה נכונה ב GIT](he-il/newbs_best_practices.md)
22 * [מקורות ללמידה](newbs_learn_more_resources.md) 23 * [מקורות ללמידה](he-il/newbs_learn_more_resources.md)
23 24
24* [בסיס QMK](README.md) 25* [בסיס QMK](he-il/README.md)
25 * [מבוא לQMK](getting_started_introduction.md) 26 * [מבוא לQMK](he-il/getting_started_introduction.md)
26 * [QMK CLI](cli.md) 27 * [QMK CLI](he-il/cli.md)
27 * [QMK CLI Config](cli_configuration.md) 28 * [QMK CLI Config](he-il/cli_configuration.md)
28 * [תרומה ל QMK](contributing.md) 29 * [תרומה ל QMK](he-il/contributing.md)
29 * [איך להשתמש בGithub](getting_started_github.md) 30 * [איך להשתמש בGithub](he-il/getting_started_github.md)
30 * [קבלת עזרה](getting_started_getting_help.md) 31 * [קבלת עזרה](he-il/getting_started_getting_help.md)
31 32
32* [שינויים משמעותיים](breaking_changes.md) 33* [שינויים משמעותיים](he-il/breaking_changes.md)
33 * [2019 Aug 30](ChangeLog/20190830.md) 34 * [2019 Aug 30](he-il/ChangeLog/20190830.md)
34 35
35* [שאלות נפוצות](faq.md) 36* [שאלות נפוצות](he-il/faq.md)
36 * [שאלות נפוצות כלליות](faq_general.md) 37 * [שאלות נפוצות כלליות](he-il/faq_general.md)
37 * [בנייה/קומפילציה של QMK](faq_build.md) 38 * [בנייה/קומפילציה של QMK](he-il/faq_build.md)
38 * [דיבאגינג ופתרון תקלות של QMK](faq_debug.md) 39 * [דיבאגינג ופתרון תקלות של QMK](he-il/faq_debug.md)
39 * [מיפוי מקשים](faq_keymap.md) 40 * [מיפוי מקשים](he-il/faq_keymap.md)
40 * [התקנת דרייברים עם Zadig](driver_installation_zadig.md) 41 * [התקנת דרייברים עם Zadig](he-il/driver_installation_zadig.md)
41 42
42* מדריכים מפורטים 43* מדריכים מפורטים
43 * [התקנת כלי Build](getting_started_build_tools.md) 44 * [התקנת כלי Build](he-il/getting_started_build_tools.md)
44 * [מדריך Vagrant](getting_started_vagrant.md) 45 * [מדריך Vagrant](he-il/getting_started_vagrant.md)
45 * [הוראות בנייה/קומפילציה](getting_started_make_guide.md) 46 * [הוראות בנייה/קומפילציה](he-il/getting_started_make_guide.md)
46 * [צריבת קושחה](flashing.md) 47 * [צריבת קושחה](he-il/flashing.md)
47 * [התאמה אישית של הפונקציונאליות](custom_quantum_functions.md) 48 * [התאמה אישית של הפונקציונאליות](he-il/custom_quantum_functions.md)
48 * [מיפוי מקשים](keymap.md) 49 * [מיפוי מקשים](he-il/keymap.md)
49 50
50* [חומרה](hardware.md) 51* [חומרה](he-il/hardware.md)
51 * [מעבדי AVR](hardware_avr.md) 52 * [מעבדי AVR](he-il/hardware_avr.md)
52 * [דרייברים](hardware_drivers.md) 53 * [דרייברים](he-il/hardware_drivers.md)
53 54
54* התייחסויות 55* התייחסויות
55 * [מדריך למקלדות](hardware_keyboard_guidelines.md) 56 * [מדריך למקלדות](he-il/hardware_keyboard_guidelines.md)
56 * [אפשרויות הגדרות](config_options.md) 57 * [אפשרויות הגדרות](he-il/config_options.md)
57 * [קודי מקשים](keycodes.md) 58 * [קודי מקשים](he-il/keycodes.md)
58 * [קונבנציות קוד - C](coding_conventions_c.md) 59 * [קונבנציות קוד - C](he-il/coding_conventions_c.md)
59 * [קונבנציות קוד - Python](coding_conventions_python.md) 60 * [קונבנציות קוד - Python](he-il/coding_conventions_python.md)
60 * [איך לתעד נכון](documentation_best_practices.md) 61 * [איך לתעד נכון](he-il/documentation_best_practices.md)
61 * [טמפלטים לדוקומנטציה](documentation_templates.md) 62 * [טמפלטים לדוקומנטציה](he-il/documentation_templates.md)
62 * [מילון](reference_glossary.md) 63 * [מילון](he-il/reference_glossary.md)
63 * [בדיקות יחידה](unit_testing.md) 64 * [בדיקות יחידה](he-il/unit_testing.md)
64 * [פונקציות שימושיות](ref_functions.md) 65 * [פונקציות שימושיות](he-il/ref_functions.md)
65 * [תמיכה בConfigurator](reference_configurator_support.md) 66 * [תמיכה בConfigurator](he-il/reference_configurator_support.md)
66 * [פורמט info.json](reference_info_json.md) 67 * [פורמט info.json](he-il/reference_info_json.md)
67 * [פיתוח בPython CLI](cli_development.md) 68 * [פיתוח בPython CLI](he-il/cli_development.md)
68 69
69* [תכונות](features.md) 70* [תכונות](he-il/features.md)
70 * [Basic Keycodes](keycodes_basic.md) 71 * [Basic Keycodes](he-il/keycodes_basic.md)
71 * [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md) 72 * [US ANSI Shifted Keys](he-il/keycodes_us_ansi_shifted.md)
72 * [Quantum Keycodes](quantum_keycodes.md) 73 * [Quantum Keycodes](he-il/quantum_keycodes.md)
73 * [Advanced Keycodes](feature_advanced_keycodes.md) 74 * [Advanced Keycodes](he-il/feature_advanced_keycodes.md)
74 * [Audio](feature_audio.md) 75 * [Audio](he-il/feature_audio.md)
75 * [Auto Shift](feature_auto_shift.md) 76 * [Auto Shift](he-il/feature_auto_shift.md)
76 * [Backlight](feature_backlight.md) 77 * [Backlight](he-il/feature_backlight.md)
77 * [Bluetooth](feature_bluetooth.md) 78 * [Bluetooth](he-il/feature_bluetooth.md)
78 * [Bootmagic](feature_bootmagic.md) 79 * [Bootmagic](he-il/feature_bootmagic.md)
79 * [Combos](feature_combo.md) 80 * [Combos](he-il/feature_combo.md)
80 * [Command](feature_command.md) 81 * [Command](he-il/feature_command.md)
81 * [Debounce API](feature_debounce_type.md) 82 * [Debounce API](he-il/feature_debounce_type.md)
82 * [DIP Switch](feature_dip_switch.md) 83 * [DIP Switch](he-il/feature_dip_switch.md)
83 * [Dynamic Macros](feature_dynamic_macros.md) 84 * [Dynamic Macros](he-il/feature_dynamic_macros.md)
84 * [Encoders](feature_encoders.md) 85 * [Encoders](he-il/feature_encoders.md)
85 * [Grave Escape](feature_grave_esc.md) 86 * [Grave Escape](he-il/feature_grave_esc.md)
86 * [Haptic Feedback](feature_haptic_feedback.md) 87 * [Haptic Feedback](he-il/feature_haptic_feedback.md)
87 * [HD44780 LCD Controller](feature_hd44780.md) 88 * [HD44780 LCD Controller](he-il/feature_hd44780.md)
88 * [Key Lock](feature_key_lock.md) 89 * [Key Lock](he-il/feature_key_lock.md)
89 * [Layouts](feature_layouts.md) 90 * [Layouts](he-il/feature_layouts.md)
90 * [Leader Key](feature_leader_key.md) 91 * [Leader Key](he-il/feature_leader_key.md)
91 * [LED Matrix](feature_led_matrix.md) 92 * [LED Matrix](he-il/feature_led_matrix.md)
92 * [Macros](feature_macros.md) 93 * [Macros](he-il/feature_macros.md)
93 * [Mouse Keys](feature_mouse_keys.md) 94 * [Mouse Keys](he-il/feature_mouse_keys.md)
94 * [OLED Driver](feature_oled_driver.md) 95 * [OLED Driver](he-il/feature_oled_driver.md)
95 * [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys) 96 * [One Shot Keys](he-il/feature_advanced_keycodes.md#one-shot-keys)
96 * [Pointing Device](feature_pointing_device.md) 97 * [Pointing Device](he-il/feature_pointing_device.md)
97 * [PS/2 Mouse](feature_ps2_mouse.md) 98 * [PS/2 Mouse](he-il/feature_ps2_mouse.md)
98 * [RGB Lighting](feature_rgblight.md) 99 * [RGB Lighting](he-il/feature_rgblight.md)
99 * [RGB Matrix](feature_rgb_matrix.md) 100 * [RGB Matrix](he-il/feature_rgb_matrix.md)
100 * [Space Cadet](feature_space_cadet.md) 101 * [Space Cadet](he-il/feature_space_cadet.md)
101 * [Split Keyboard](feature_split_keyboard.md) 102 * [Split Keyboard](he-il/feature_split_keyboard.md)
102 * [Stenography](feature_stenography.md) 103 * [Stenography](he-il/feature_stenography.md)
103 * [Swap Hands](feature_swap_hands.md) 104 * [Swap Hands](he-il/feature_swap_hands.md)
104 * [Tap Dance](feature_tap_dance.md) 105 * [Tap Dance](he-il/feature_tap_dance.md)
105 * [Terminal](feature_terminal.md) 106 * [Terminal](he-il/feature_terminal.md)
106 * [Thermal Printer](feature_thermal_printer.md) 107 * [Thermal Printer](he-il/feature_thermal_printer.md)
107 * [Unicode](feature_unicode.md) 108 * [Unicode](he-il/feature_unicode.md)
108 * [Userspace](feature_userspace.md) 109 * [Userspace](he-il/feature_userspace.md)
109 * [Velocikey](feature_velocikey.md) 110 * [Velocikey](he-il/feature_velocikey.md)
110 111
111* למייקרים ומודרים 112* למייקרים ומודרים
112 * [מדריך לכתיבה ידנית](hand_wire.md) 113 * [מדריך לכתיבה ידנית](he-il/hand_wire.md)
113 * [מדריך לצריבת ISP](isp_flashing_guide.md) 114 * [מדריך לצריבת ISP](he-il/isp_flashing_guide.md)
114 * [מדריך לדיבאגינג ARM](arm_debugging.md) 115 * [מדריך לדיבאגינג ARM](he-il/arm_debugging.md)
115 * [מנהל התקן I2C](i2c_driver.md) 116 * [מנהל התקן I2C](he-il/i2c_driver.md)
116 * [בקרת GPIO](internals_gpio_control.md) 117 * [בקרת GPIO](he-il/internals_gpio_control.md)
117 * [המרת Proton C](proton_c_conversion.md) 118 * [המרת Proton C](he-il/proton_c_conversion.md)
118 119
119* להבנה עמוקה יותר 120* להבנה עמוקה יותר
120 * [איך עובדות מקלדות](how_keyboards_work.md) 121 * [איך עובדות מקלדות](he-il/how_keyboards_work.md)
121 * [להבין את QMK](understanding_qmk.md) 122 * [להבין את QMK](he-il/understanding_qmk.md)
122 123
123* נושאים נוספים 124* נושאים נוספים
124 * [שימוש ב - Eclipse עם QMK](other_eclipse.md) 125 * [שימוש ב - Eclipse עם QMK](he-il/other_eclipse.md)
125 * [שימוש ב - VSCode עם QMK](other_vscode.md) 126 * [שימוש ב - VSCode עם QMK](he-il/other_vscode.md)
126 * [תמיכה](support.md) 127 * [תמיכה](he-il/support.md)
127 * [כיצד להוסיף תרגום](translating.md) 128 * [כיצד להוסיף תרגום](he-il/translating.md)
128 129
129* QMK מבפנים (בתהליך) 130* QMK מבפנים (בתהליך)
130 * [Defines](internals_defines.md) 131 * [Defines](he-il/internals_defines.md)
131 * [Input Callback Reg](internals_input_callback_reg.md) 132 * [Input Callback Reg](he-il/internals_input_callback_reg.md)
132 * [Midi Device](internals_midi_device.md) 133 * [Midi Device](he-il/internals_midi_device.md)
133 * [Midi Device Setup Process](internals_midi_device_setup_process.md) 134 * [Midi Device Setup Process](he-il/internals_midi_device_setup_process.md)
134 * [Midi Util](internals_midi_util.md) 135 * [Midi Util](he-il/internals_midi_util.md)
135 * [Send Functions](internals_send_functions.md) 136 * [Send Functions](he-il/internals_send_functions.md)
136 * [Sysex Tools](internals_sysex_tools.md) 137 * [Sysex Tools](he-il/internals_sysex_tools.md)
137 138
138</div> 139</div>
diff --git a/docs/he-il/getting_started_github.md b/docs/he-il/getting_started_github.md
index 55602c814..e5d0f7c78 100644
--- a/docs/he-il/getting_started_github.md
+++ b/docs/he-il/getting_started_github.md
@@ -17,19 +17,25 @@ Github עלול להיות קצת טריקי למי שלא מכיר את העב
17 17
18![קישור HTTPS](http://i.imgur.com/eGO0ohO.jpg) 18![קישור HTTPS](http://i.imgur.com/eGO0ohO.jpg)
19 19
20מכאן והלאה, הקיש `git clone ` בשורת הפקודה והדביקו את הלינק שלכם: 20מכאן והלאה, הקיש `git clone --recurse-submodules ` בשורת הפקודה והדביקו את הלינק שלכם:
21 21
22<div dir="ltr" markdown="1"> 22<div dir="ltr" markdown="1">
23 23
24``` 24```
25user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git 25user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
26Cloning into 'qmk_firmware'... 26Cloning into 'qmk_firmware'...
27remote: Counting objects: 46625, done. 27remote: Enumerating objects: 9, done.
28remote: Compressing objects: 100% (2/2), done. 28remote: Counting objects: 100% (9/9), done.
29remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623 29remote: Compressing objects: 100% (5/5), done.
30Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done. 30remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
31Resolving deltas: 100% (29362/29362), done. 31Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
32Checking out files: 100% (2799/2799), done. 32Resolving deltas: 100% (119972/119972), done.
33...
34Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
35Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
36Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
37Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
38Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
33``` 39```
34 40
35</div> 41</div>
@@ -66,4 +72,4 @@ To https://github.com/whoeveryouare/qmk_firmware.git
66![צרו Pull Request](http://i.imgur.com/Ojydlaj.jpg) 72![צרו Pull Request](http://i.imgur.com/Ojydlaj.jpg)
67 73
68אחרי שהגשתם, אנו עלולים לפנות אליכם לגבי השינויים שהצעתם, נבקש שתבצעו שינויים ובסופו של דבר נקבל את השינויים! תודה שתרמתם לפרוייקט QMK :) 74אחרי שהגשתם, אנו עלולים לפנות אליכם לגבי השינויים שהצעתם, נבקש שתבצעו שינויים ובסופו של דבר נקבל את השינויים! תודה שתרמתם לפרוייקט QMK :)
69</div> \ No newline at end of file 75</div>
diff --git a/docs/he-il/getting_started_introduction.md b/docs/he-il/getting_started_introduction.md
index 4b7f56b2a..fca86bdaa 100644
--- a/docs/he-il/getting_started_introduction.md
+++ b/docs/he-il/getting_started_introduction.md
@@ -5,7 +5,7 @@
5 5
6## מבנה QMK בסיסי 6## מבנה QMK בסיסי
7 7
8QMK הוא פורק של הפרוייקט [tmk_keyboard](https://github.com/tmk/tmk_keyboard) של [Jun Wako](https://github.com/tmk). קוד הTMK המקורי, עם התאמות, יכול להמצא בתיקיית `tmk`. התוספות של QMK לפרוייקט יכולות להמצא בתיקיית `quantum`. פרוייקטי מקלדות יכולות להמצא בתיקיות `handwired` ו- `keyboard`. 8QMK הוא פורק של הפרוייקט [tmk_keyboard](https://github.com/tmk/tmk_keyboard) של [Jun Wako](https://github.com/tmk). קוד הTMK המקורי, עם התאמות, יכול להמצא בתיקיית `tmk_core`. התוספות של QMK לפרוייקט יכולות להמצא בתיקיית `quantum`. פרוייקטי מקלדות יכולות להמצא בתיקיות `handwired` ו- `keyboard`.
9 9
10### מבנה אחסון המשתמש 10### מבנה אחסון המשתמש
11 11
@@ -69,4 +69,4 @@ In every keymap folder, the following files may be found. Only `keymap.c` is req
69``` 69```
70 70
71</div> 71</div>
72</div> \ No newline at end of file 72</div>
diff --git a/docs/he-il/quantum_keycodes.md b/docs/he-il/quantum_keycodes.md
index 3ca545e97..5374fd47a 100644
--- a/docs/he-il/quantum_keycodes.md
+++ b/docs/he-il/quantum_keycodes.md
@@ -17,18 +17,8 @@
17|`DEBUG` | |Toggle debug mode | 17|`DEBUG` | |Toggle debug mode |
18|`EEPROM_RESET` |`EEP_RST` |Resets EEPROM state by reinitializing it | 18|`EEPROM_RESET` |`EEP_RST` |Resets EEPROM state by reinitializing it |
19|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, <code>&#96;</code> when pressed with Shift or GUI| 19|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, <code>&#96;</code> when pressed with Shift or GUI|
20|`KC_LSPO` | |Left Shift when held, `(` when tapped |
21|`KC_RSPC` | |Right Shift when held, `)` when tapped |
22|`KC_LCPO` | |Left Control when held, `(` when tapped |
23|`KC_RCPC` | |Right Control when held, `)` when tapped |
24|`KC_LAPO` | |Left Alt when held, `(` when tapped |
25|`KC_RAPC` | |Right Alt when held, `)` when tapped |
26|`KC_SFTENT` | |Right Shift when held, Enter when tapped |
27|`KC_LEAD` | |The [Leader key](feature_leader_key.md) | 20|`KC_LEAD` | |The [Leader key](feature_leader_key.md) |
28|`KC_LOCK` | |The [Lock key](feature_key_lock.md) | 21|`KC_LOCK` | |The [Lock key](feature_key_lock.md) |
29|`FUNC(n)` |`F(n)` |Call `fn_action(n)` (deprecated) |
30|`M(n)` | |Call macro `n` |
31|`MACROTAP(n)` | |Macro-tap `n` idk FIXME |
32``` 22```
33 23
34</div> 24</div>
diff --git a/docs/index.html b/docs/index.html
index d2ba99897..9b33cd263 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -21,7 +21,7 @@
21 <div id="app"></div> 21 <div id="app"></div>
22 <script> 22 <script>
23 window.$docsify = { 23 window.$docsify = {
24 alias : { 24 alias: {
25 '/en/(.*)': '/$1', 25 '/en/(.*)': '/$1',
26 '/en-us/(.*)': '/$1', 26 '/en-us/(.*)': '/$1',
27 '/en-gb/(.*)': '/$1', 27 '/en-gb/(.*)': '/$1',
@@ -29,12 +29,32 @@
29 }, 29 },
30 basePath: '/', 30 basePath: '/',
31 name: 'QMK Firmware', 31 name: 'QMK Firmware',
32 nameLink: '/', 32 nameLink: {
33 '/de/': '/#/de/',
34 '/es/': '/#/es/',
35 '/fr-fr/': '/#/fr-fr/',
36 '/he-il/': '/#/he-il/',
37 '/ja/': '/#/ja/',
38 '/pt-br/': '/#/pt-br/',
39 '/ru-ru/': '/#/ru-ru/',
40 '/zh-cn/': '/#/zh-cn/',
41 '/': '/#/'
42 },
33 repo: 'qmk/qmk_firmware', 43 repo: 'qmk/qmk_firmware',
34 loadSidebar: '_summary.md', 44 loadSidebar: '_summary.md',
35 loadNavbar: '_langs.md', 45 loadNavbar: '_langs.md',
36 mergeNavbar: true, 46 mergeNavbar: true,
37 auto2top: true, 47 auto2top: true,
48 fallbackLanguages: [
49 'de',
50 'es',
51 'fr-fr',
52 'he-il',
53 'ja',
54 'pt-br',
55 'ru-ru',
56 'zh-cn'
57 ],
38 formatUpdated: '{YYYY}/{MM}/{DD} {HH}:{mm}', 58 formatUpdated: '{YYYY}/{MM}/{DD} {HH}:{mm}',
39 search: { 59 search: {
40 paths: 'auto', 60 paths: 'auto',
@@ -42,12 +62,14 @@
42 '/es/': 'Buscar', 62 '/es/': 'Buscar',
43 '/zh-cn/': '搜索', 63 '/zh-cn/': '搜索',
44 '/ja/': '検索', 64 '/ja/': '検索',
65 '/pt-br/': 'Busca',
45 '/': 'Search' 66 '/': 'Search'
46 }, 67 },
47 noData: { 68 noData: {
48 '/es/': '¡Ningún resultado!', 69 '/es/': '¡Ningún resultado!',
49 '/zh-cn/': '没有结果!', 70 '/zh-cn/': '没有结果!',
50 '/ja/': '見つかりません!', 71 '/ja/': '見つかりません!',
72 '/pt-br/': 'Nenhum resultado!',
51 '/': 'No results!' 73 '/': 'No results!'
52 }, 74 },
53 depth: 6 75 depth: 6
@@ -60,9 +82,9 @@
60 .replace('raw.githubusercontent.com', 'github.com') 82 .replace('raw.githubusercontent.com', 'github.com')
61 .replace(/\/master/, '/blob/master') 83 .replace(/\/master/, '/blob/master')
62 } else { 84 } else {
63 url = 'https://github.com/qmk/qmk_firmware/blob/master/docs/' + vm.route.file 85 url = 'https://github.com/qmk/qmk_firmware/edit/master/docs/' + vm.route.file
64 } 86 }
65 var editHtml = '[:memo: Edit Document](' + url + ')\n' 87 var editHtml = ':pencil2: [Edit this page](' + url + ')\n'
66 return html 88 return html
67 + '\n\n----\n\n' 89 + '\n\n----\n\n'
68 + editHtml 90 + editHtml
diff --git a/docs/ja/README.md b/docs/ja/README.md
new file mode 100644
index 000000000..8959a9dd9
--- /dev/null
+++ b/docs/ja/README.md
@@ -0,0 +1,37 @@
1# Quantum Mechanical Keyboard Firmware
2
3<!---
4 original document: eae21eed7:docs/README.md
5 git diff eae21eed7 HEAD -- docs/README.md | cat
6-->
7
8[![現在のバージョン](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
9[![ビルド状態](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
10[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
11[![ドキュメントの状態](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
12[![GitHub 貢献者](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
13[![GitHub フォーク](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
14
15## QMK ファームウェアとは何か?
16
17QMK (*Quantum Mechanical Keyboard*)は QMK ファームウェア、QMK ツールボックス、qmk.fm およびそれらのドキュメントを保守するオープンソースコミュニティです。QMK ファームウェアは[tmk\_keyboard](http://github.com/tmk/tmk_keyboard) を元にしたキーボードファームウェアで、Atmel AVR コントローラ、より具体的には [OLKB 製品](http://olkb.com)、[ErgoDox EZ](http://www.ergodox-ez.com) キーボードおよび [Clueboard 製品](http://clueboard.co/) のための幾つかの便利な機能を持ちます。また、ChibiOS を使って ARM チップに移植されています。これを使ってあなたの作った手配線のキーボードあるいはカスタムキーボード PCB で作ったキーボードを動かすことができます。
18
19## 入手方法
20
21QMK のキーマップ、キーボード、機能に貢献をする予定がある場合、最も簡単なのは、[Github を介してリポジトリをフォークし](https://github.com/qmk/qmk_firmware#fork-destination-box)、リポジトリをあなたの開発環境にクローンして変更を加え、それらをプッシュし、[プルリクエスト](https://github.com/qmk/qmk_firmware/pulls)を開くことです。
22
23それ以外の場合は、`git clone https://github.com/qmk/qmk_firmware` を介して直接クローンすることができます。zip または tar ファイルをダウンロードしないでください。コンパイルするためのサブモジュールをダウンロードするために git リポジトリが必要です。
24
25## コンパイル方法
26
27コンパイルをする前に、AVR または ARM 開発のための[環境をインストール](ja/getting_started_build_tools.md)する必要があります。それが完了したら、`make` コマンドを使用して、以下の表記でキーボードとキーマップをビルドします。
28
29 make planck/rev4:default
30
31これは、`planck` の `rev4` リビジョンを `default` キーマップでビルドします。全てのキーボードにリビジョン(サブプロジェクトまたはフォルダとも呼ばれます)があるわけではありません。その場合は省略されます:
32
33 make preonic:default
34
35## カスタマイズ方法
36
37QMK には、探求すべき多くの[機能](ja/features.md)と、深堀りするための[リファレンス ドキュメント](http://docs.qmk.fm)がたくさんあります。ほとんどの機能は[キーマップ](ja/keymap.md)を変更し、[キーコード](ja/keycodes.md)を変更することで活用されます。
diff --git a/docs/ja/_summary.md b/docs/ja/_summary.md
new file mode 100644
index 000000000..e5e19ddc8
--- /dev/null
+++ b/docs/ja/_summary.md
@@ -0,0 +1,124 @@
1* [完全な初心者のガイド](ja/newbs.md)
2 * [はじめに](ja/newbs_getting_started.md)
3 * [初めてのファームウェアの構築](ja/newbs_building_firmware.md)
4 * [ファームウェアのフラッシュ](ja/newbs_flashing.md)
5 * [テストとデバッグ](ja/newbs_testing_debugging.md)
6 * [QMK における Git 運用作法](ja/newbs_git_best_practices.md)
7 * [あなたのフォークの master ブランチ](ja/newbs_git_using_your_master_branch.md)
8 * [マージの競合の解決](ja/newbs_git_resolving_merge_conflicts.md)
9 * [同期のとれていない git ブランチの再同期](ja/newbs_git_resynchronize_a_branch.md)
10 * [学習リソース](ja/newbs_learn_more_resources.md)
11
12* [QMKの基本](ja/README.md)
13 * [QMKの導入](ja/getting_started_introduction.md)
14 * [QMK CLI](ja/cli.md)
15 * [QMK CLI 設定](ja/cli_configuration.md)
16 * [QMKへの貢献](ja/contributing.md)
17 * [Githubの使い方](ja/getting_started_github.md)
18 * [ヘルプ](ja/getting_started_getting_help.md)
19
20* [破壊的な変更](ja/breaking_changes.md)
21 * [2019年8月30日](ja/ChangeLog/20190830.md)
22
23* [FAQ](ja/faq.md)
24 * [一般的なFAQ](ja/faq_general.md)
25 * [QMKのビルド/コンパイル](ja/faq_build.md)
26 * [QMKのデバッグ/トラブルシューティング](ja/faq_debug.md)
27 * [キーマップ](ja/faq_keymap.md)
28 * [Zadigを使ったドライバのインストール](ja/driver_installation_zadig.md)
29
30* 詳細なガイド
31 * [ビルドツールのインストール](ja/getting_started_build_tools.md)
32 * [Vagrantのガイド](ja/getting_started_vagrant.md)
33 * [ビルド/コンパイルの説明](ja/getting_started_make_guide.md)
34 * [ファームウェアのフラッシュ](ja/flashing.md)
35 * [機能のカスタマイズ](ja/custom_quantum_functions.md)
36 * [キーマップの概要](ja/keymap.md)
37
38* [ハードウェア](ja/hardware.md)
39 * [AVR プロセッサ](ja/hardware_avr.md)
40 * [ドライバ](ja/hardware_drivers.md)
41
42* リファレンス
43 * [キーボード ガイドライン](ja/hardware_keyboard_guidelines.md)
44 * [設定オプション](ja/config_options.md)
45 * [キーコード](ja/keycodes.md)
46 * [コーディング規約 - C](ja/coding_conventions_c.md)
47 * [コーディング規約 - Python](ja/coding_conventions_python.md)
48 * [ドキュメント ベストプラクティス](ja/documentation_best_practices.md)
49 * [ドキュメント テンプレート](ja/documentation_templates.md)
50 * [用語](ja/reference_glossary.md)
51 * [ユニットテスト](ja/unit_testing.md)
52 * [便利な関数](ja/ref_functions.md)
53 * [Configurator サポート](ja/reference_configurator_support.md)
54 * [info.json 形式](ja/reference_info_json.md)
55 * [Python CLI 開発](ja/cli_development.md)
56
57* [機能](ja/features.md)
58 * [基本的なキーコード](ja/keycodes_basic.md)
59 * [US ANSI シフトキー](ja/keycodes_us_ansi_shifted.md)
60 * [Quantum キーコード](ja/quantum_keycodes.md)
61 * [Advanced キーコード](ja/feature_advanced_keycodes.md)
62 * [オーディオ](ja/feature_audio.md)
63 * [自動シフト](ja/feature_auto_shift.md)
64 * [バックライト](ja/feature_backlight.md)
65 * [ブルートゥース](ja/feature_bluetooth.md)
66 * [ブートマジック](ja/feature_bootmagic.md)
67 * [コンボ](ja/feature_combo.md)
68 * [コマンド](ja/feature_command.md)
69 * [Debounce API](ja/feature_debounce_type.md)
70 * [DIP スイッチ](ja/feature_dip_switch.md)
71 * [動的マクロ](ja/feature_dynamic_macros.md)
72 * [エンコーダ](ja/feature_encoders.md)
73 * [グレイブ エスケープ](ja/feature_grave_esc.md)
74 * [触覚フィードバック](ja/feature_haptic_feedback.md)
75 * [HD44780 LCD コントローラ](ja/feature_hd44780.md)
76 * [キーロック](ja/feature_key_lock.md)
77 * [レイアウト](ja/feature_layouts.md)
78 * [リーダー キー](ja/feature_leader_key.md)
79 * [LED マトリクス](ja/feature_led_matrix.md)
80 * [マクロ](ja/feature_macros.md)
81 * [マウスキー](ja/feature_mouse_keys.md)
82 * [OLED ドライバ](ja/feature_oled_driver.md)
83 * [One Shot Keys](ja/feature_advanced_keycodes.md#one-shot-keys)
84 * [ポインティング デバイス](ja/feature_pointing_device.md)
85 * [PS/2 マウス](ja/feature_ps2_mouse.md)
86 * [RGB ライト](ja/feature_rgblight.md)
87 * [RGB マトリクス](ja/feature_rgb_matrix.md)
88 * [Space Cadet](ja/feature_space_cadet.md)
89 * [分割キーボード](ja/feature_split_keyboard.md)
90 * [Stenography](ja/feature_stenography.md)
91 * [Swap Hands](ja/feature_swap_hands.md)
92 * [タップ ダンス](ja/feature_tap_dance.md)
93 * [Terminal](ja/feature_terminal.md)
94 * [感熱式プリンタ](ja/feature_thermal_printer.md)
95 * [ユニコード](ja/feature_unicode.md)
96 * [Userspace](ja/feature_userspace.md)
97 * [Velocikey](ja/feature_velocikey.md)
98
99* メーカーおよびモッダーのために
100 * [Hand Wiring Guide](ja/hand_wire.md)
101 * [ISP Flashing Guide](ja/isp_flashing_guide.md)
102 * [ARM デバッグ ガイド](ja/arm_debugging.md)
103 * [I2C ドライバ](ja/i2c_driver.md)
104 * [GPIO コントロール](ja/internals_gpio_control.md)
105 * [Proton C 規約](ja/proton_c_conversion.md)
106
107* より深く知るために
108 * [キーボードがどのように動作するか](ja/how_keyboards_work.md)
109 * [QMKの理解](ja/understanding_qmk.md)
110
111* 他の話題
112 * [EclipseでQMKを使用](ja/other_eclipse.md)
113 * [VSCodeでQMKを使用](ja/other_vscode.md)
114 * [サポート](ja/support.md)
115 * [翻訳を追加する方法](ja/translating.md)
116
117* QMK の内部詳細(作成中)
118 * [定義](ja/internals_defines.md)
119 * [Input Callback Reg](ja/internals_input_callback_reg.md)
120 * [Midi ドライバ](ja/internals_midi_device.md)
121 * [Midi デバイスのセットアップ手順](ja/internals_midi_device_setup_process.md)
122 * [Midi ユーティリティ](ja/internals_midi_util.md)
123 * [Send Functions](ja/internals_send_functions.md)
124 * [Sysex Tools](ja/internals_sysex_tools.md)
diff --git a/docs/ja/arm_debugging.md b/docs/ja/arm_debugging.md
new file mode 100644
index 000000000..6267d0f8a
--- /dev/null
+++ b/docs/ja/arm_debugging.md
@@ -0,0 +1,92 @@
1# Eclipse を使った ARM デバッグ
2
3<!---
4 original document: eae21eed7:docs/arm_debugging.md
5 git diff eae21eed7 HEAD -- docs/arm_debugging.md | cat
6-->
7
8このページでは、SWD アダプタとオープンソース/フリーツールを使って ARM MCU をデバッグするためのセットアップ方法について説明します。このガイドでは、GNU MCU Eclipse IDE for C/C++ Developers および OpenOCD を必要な依存関係と一緒にインストールします。
9
10このガイドは上級者向けであり、あなたのマシンで、MAKE フローを使って、ARM 互換キーボードをコンパイルできることを前提にしています。
11
12## ソフトウェアのインストール
13
14ここでの主な目的は MCU Eclipse IDE を正しくマシンにインストールすることです。必要な手順は[この](https://gnu-mcu-eclipse.github.io/install/)インストールガイドから派生しています。
15
16### xPack マネージャ
17
18このツールはソフトウェアパッケージマネージャであり、必要な依存関係を取得するために使われます。
19
20XPM は Node.js を使って実行されるため、[ここ](https://nodejs.org/en/)から取得してください。インストール後に、ターミナルを開き `npm -v` と入力します。バージョン番号が返ってくるとインストールは成功です。
21
22XPM のインストール手順は[ここ](https://www.npmjs.com/package/xpm)で見つけることができ、OS 固有のものです。ターミナルに `xpm --version` と入力すると、ソフトウェアのバージョンが返ってくるはずです。
23
24### ARM ツールチェーン
25
26XPM を使うと、ARM ツールチェーンをとても簡単にインストールできます。`xpm install --global @xpack-dev-tools/arm-none-eabi-gcc` とコマンドを入力します。
27
28### Windows ビルドツール
29
30Windows を使っている場合は、これをインストールする必要があります!
31
32`xpm install --global @gnu-mcu-eclipse/windows-build-tools`
33
34### プログラマ/デバッガドライバ
35
36プログラマのドライバをインストールします。このチュートリアルはほとんどどこでも入手できる ST-Link v2 を使って作成されました。
37ST-Link を持っている場合は、ドライバは[ここ](https://www.st.com/en/development-tools/stsw-link009.html)で見つけることができます。そうでない場合はツールの製造元にお問い合わせください。
38
39### OpenOCD
40
41この依存関係により、SWD は GDB からアクセスでき、デバッグに不可欠です。`xpm install --global @xpack-dev-tools/openocd` を実行します。
42
43### Java
44
45Java は Eclipse で必要とされるため、[ここ](https://www.oracle.com/technetwork/java/javase/downloads/index.html)からダウンロードしてください。
46
47### GNU MCU Eclipse IDE
48
49最後に IDE をインストールする番です。[ここ](https://github.com/gnu-mcu-eclipse/org.eclipse.epp.packages/releases/)のリリースページから最新バージョンを取得します。
50
51## Eclipse の設定
52
53ダウンロードした Eclipse IDE を開きます。QMK ディレクトリをインポートするために、File -> Import -> C/C++ -> Existing Code as Makefile Project を選択します。Next を選択し、Browse を使用して QMK フォルダを選択します。tool-chain リストから ARM Cross GCC を選択し、Finish を選択します。
54
55これで、左側に QMK フォルダが表示されます。右クリックして、Properties を選択します。左側で MCU を展開し、ARM Toolchains Paths を選択します。xPack を押して OK を押します。OpenOCD Path で同じことを繰り返し、Windows の場合は、Build Tools Path でも同じことを繰り返します。Apply and Close を選択します。
56
57ここで、必要な MCU パッケージをインストールします。Window -> Perspective -> Open Perspective -> Other... -> Packs を選択して、Packs perspective に移動します。Packs タブの横にある黄色のリフレッシュ記号を選択します。これは様々な場所から MCU の定義を要求するため、時間が掛かります。一部のリンクが失敗した場合は、おそらく Ignore を選択できます。
58
59これが終了すると、ビルドやデバッグする MCU を見つけることができるはずです。この例では、STM32F3 シリーズの MCU を使います。左側で、STMicroelectronics -> STM32F3 Series を選択します。中央のウィンドウに、pack が表示されます。右クリックし、Install を選択します。それが終了したら、Window -> Perspective -> Open Perspective -> Other... -> C/C++ を選択してデフォルトのパースペクティブに戻ることができます。
60
61Eclipse に QMK をビルドしようとするデバイスを教える必要があります。QMK フォルダを右クリック -> Properties -> C/C++ Build -> Settings を選択します。Devices タブを選択し、Devices の下から MCU の適切な種類を選択します。私の例では、STM32F303CC です。
62
63この間に、Build コマンドもセットアップしましょう。C/C++ Build を選択し、Behavior タブを選択します。build コマンドのところで、`all` を必要な make コマンドに置き換えます。例えば、rev6 Planck の default キーマップの場合、これは `planck/rev6:default` になります。Apply and Close を選択します。
64
65## ビルド
66
67全て正しくセットアップできていれば、ハンマーボタンを押すとファームウェアがビルドされ、.binファイルが出力されるはずです。
68
69## デバッグ
70
71### デバッガの接続
72
73ARM MCU は、クロック信号(SWCLK) とデータ信号(SWDIO) で構成される Single Wire Debug (SWD) プロトコルを使います。MCUを 完全に操作するには、この2本のワイヤとグラウンドを接続するだけで十分です。ここでは、キーボードは USB を介して電力が供給されると想定しています。手動でリセットボタンを使えるため、RESET 信号は必要ありません。より高度なセットアップのために printf と scanf をホストに非同期にパイプする SWO 信号を使用できますが、私たちのセットアップでは無視します。
74
75注意: SWCLK と SWDIO ピンがキーボードのマトリックスで使われていないことを確認してください。もし使われている場合は、一時的に他のピンに切り替えることができます。
76
77### デバッガの設定
78
79QMK フォルダを右クリックし、Debug As -> Debug Configurations... を選択します。ここで、GDB OpenOCD Debugging をダブルクリックします。Debugger タブを選択し、MCU に必要な設定を入力します。これを見つけるにはいじったりググったりする必要があるかもしれません。STM32F3 用のデフォルトスクリプトは stm32f3discovery.cfg と呼ばれます。OpenOCD に伝えるには、Config options で `-f board/stm32f3discovery.cfg` と入力します。
80
81注意: 私の場合、この設定スクリプトはリセット操作を無効にするために編集が必要です。スクリプトの場所は、通常はパス `openocd/version/.content/scripts/board` の下の実際の実行可能フィールドの中で見つかります。ここで、私は `reset_config srst_only` を `reset_config none` に編集しました。
82
83Apply and Close を選択します。
84
85### デバッガの実行
86
87キーボードをリセットしてください。
88
89虫アイコンをクリックし、もし全てうまく行けば Debug パースペクティブに移動します。ここでは、main 関数の最初でプログラムカウンタが停止するので、Play ボタンを押します。全てのデバッガのほとんどの機能は ARM MCU で動作しますが、正確な詳細については google があなたのお友達です!
90
91
92ハッピーデバッギング!
diff --git a/docs/ja/cli.md b/docs/ja/cli.md
new file mode 100644
index 000000000..ef3752873
--- /dev/null
+++ b/docs/ja/cli.md
@@ -0,0 +1,227 @@
1# QMK CLI
2
3<!---
4 original document: d598f01cb:docs/cli.md
5 git diff d598f01cb HEAD -- docs/cli.md | cat
6-->
7
8このページは QMK CLI のセットアップと使用方法について説明します。
9
10# 概要
11
12QMK CLI を使用すると QMK キーボードの構築と作業が簡単になります。QMK ファームウェアの取得とコンパイル、キーマップの作成などのようなタスクを簡素化し合理化するためのコマンドを多く提供します。
13
14* [グローバル CLI](#global-cli)
15* [ローカル CLI](#local-cli)
16* [CLI コマンド](#cli-commands)
17
18# 必要事項
19
20CLI は Python 3.5 以上を必要とします。我々は必要事項の数を少なくしようとしていますが、[`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt) にリストされているパッケージもインストールする必要があります。
21
22# グローバル CLI :id=global-cli
23
24QMK は、QMK ビルド環境のセットアップ、QMK の操作、および `qmk_firmware` の複数のコピーの操作を容易にできるインストール可能な CLI を提供します。これを定期的にインストールおよび更新することをお勧めします。
25
26## Homebrew を使ったインストール (macOS、いくつかの Linux)
27
28[Homebrew](https://brew.sh) をインストールしている場合は、タップして QMK をインストールすることができます:
29
30```
31brew tap qmk/qmk
32brew install qmk
33export QMK_HOME='~/qmk_firmware' # オプション、`qmk_firmware` の場所を設定します
34qmk setup # これは `qmk/qmk_firmware` をクローンし、オプションでビルド環境をセットアップします
35```
36
37## easy_install あるいは pip を使ってインストール
38
39上のリストにあなたのシステムがない場合は、QMK を手動でインストールすることができます。最初に、python 3.5 (以降)をインストールしていて、pip をインストールしていることを確認してください。次に以下のコマンドを使って QMK をインストールします:
40
41```
42pip3 install qmk
43export QMK_HOME='~/qmk_firmware' # オプション、`qmk_firmware` の場所を設定します
44qmk setup # これは `qmk/qmk_firmware` をクローンし、オプションでビルド環境をセットアップします
45```
46
47## 他のオペレーティングシステムのためのパッケージ
48
49より多くのオペレーティングシステム用に `qmk` パッケージを作成および保守する人を探しています。OS 用のパッケージを作成する場合は、以下のガイドラインに従ってください:
50
51* これらのガイドラインと矛盾する場合は、OS のベストプラクティスに従ってください
52 * 逸脱する場合は、理由をコメントに文章化してください。
53* virtualenv を使ってインストールしてください
54* 環境変数 `QMK_HOME` を設定して、ファームウェアソースを `~/qmk_firmware` 以外のどこかにチェックアウトするようにユーザに指示してください。
55
56# ローカル CLI :id=local-cli
57
58グローバル CLI を使いたくない場合は、`qmk_firmware` に付属のローカル CLI があります。`qmk_firmware/bin/qmk` で見つけることができます。任意のディレクトリから `qmk` コマンドを実行でき、常に `qmk_firmware` のコピー上で動作します。
59
60**例**:
61
62```
63$ ~/qmk_firmware/bin/qmk hello
64Ψ Hello, World!
65```
66
67## ローカル CLI の制限
68
69グローバル CLI と比較して、ローカル CLI には幾つかの制限があります:
70
71* ローカル CLI は `qmk setup` あるいは `qmk clone` をサポートしません。
72* 複数のリポジトリがクローンされている場合でも、ローカル CLI は常に `qmk_firmware` ツリー上で動作します。
73* ローカル CLI は virtualenv で動作しません。そのため依存関係が競合する可能性があります
74
75# CLI コマンド :id=cli-commands
76
77## `qmk cformat`
78
79このコマンドは clang-format を使って C コードを整形します。引数無しで実行して全てのコアコードを整形するか、コマンドラインでファイル名を渡して特定のファイルに対して実行します。
80
81**使用法**:
82
83```
84qmk cformat [file1] [file2] [...] [fileN]
85```
86
87## `qmk compile`
88
89このコマンドにより、任意のディレクトリからファームウェアをコンパイルすることができます。<https://config.qmk.fm> からエクスポートした JSON をコンパイルするか、リポジトリ内でキーマップをコンパイルすることができます。
90
91**Configurator Exports での使い方**:
92
93```
94qmk compile <configuratorExport.json>
95```
96
97**キーマップでの使い方**:
98
99```
100qmk compile -kb <keyboard_name> -km <keymap_name>
101```
102
103## `qmk flash`
104
105このコマンドは `qmk compile` に似ていますが、ブートローダを対象にすることもできます。ブートローダはオプションで、デフォルトでは `:flash` に設定されています。
106違うブートローダを指定するには、`-bl <bootloader>` を使ってください。利用可能なブートローダの詳細については、<https://docs.qmk.fm/#/ja/flashing>
107を見てください。
108
109**Configurator Exports での使い方**:
110
111```
112qmk flash <configuratorExport.json> -bl <bootloader>
113```
114
115**キーマップでの使い方**:
116
117```
118qmk flash -kb <keyboard_name> -km <keymap_name> -bl <bootloader>
119```
120
121**ブートローダのリスト**
122
123```
124qmk flash -b
125```
126
127## `qmk config`
128
129このコマンドにより QMK の挙動を設定することができます。完全な `qmk config` のドキュメントについては、[CLI 設定](ja/cli_configuration.md)を見てください。
130
131**使用法**:
132
133```
134qmk config [-ro] [config_token1] [config_token2] [...] [config_tokenN]
135```
136
137## `qmk docs`
138
139このコマンドは、ドキュメントを参照または改善するために使うことができるローカル HTTP サーバを起動します。デフォルトのポートは 8936 です。
140
141**使用法**:
142
143```
144qmk docs [-p PORT]
145```
146
147## `qmk doctor`
148
149このコマンドは環境を調査し、潜在的なビルドあるいは書き込みの問題について警告します。
150
151**使用法**:
152
153```
154qmk doctor
155```
156
157## `qmk json-keymap`
158
159QMK Configurator からエクスポートしたものから keymap.c を生成します。
160
161**使用法**:
162
163```
164qmk json-keymap [-o OUTPUT] filename
165```
166
167## `qmk kle2json`
168
169このコマンドにより、生の KLE データから QMK Configurator の JSON へ変換することができます。絶対パスあるいは現在のディレクトリ内のファイル名のいずれかを受け取ります。デフォルトでは、`info.json` が既に存在している場合は上書きしません。上書きするには、`-f` あるいは `--force` フラグを使ってください。
170
171**使用法**:
172
173```
174qmk kle2json [-f] <filename>
175```
176
177**例**:
178
179```
180$ qmk kle2json kle.txt
181☒ File info.json already exists, use -f or --force to overwrite.
182```
183
184```
185$ qmk kle2json -f kle.txt -f
186Ψ Wrote out to info.json
187```
188
189## `qmk list-keyboards`
190
191このコマンドは現在 `qmk_firmware` で定義されている全てのキーボードをリスト化します。
192
193**使用法**:
194
195```
196qmk list-keyboards
197```
198
199## `qmk new-keymap`
200
201このコマンドは、キーボードの既存のデフォルトのキーマップに基づいて新しいキーマップを作成します。
202
203**使用法**:
204
205```
206qmk new-keymap [-kb KEYBOARD] [-km KEYMAP]
207```
208
209## `qmk pyformat`
210
211このコマンドは `qmk_firmware` 内の python コードを整形します。
212
213**使用法**:
214
215```
216qmk pyformat
217```
218
219## `qmk pytest`
220
221このコマンドは python のテストスィートを実行します。python コードに変更を加えた場合、これの実行が成功することを確認する必要があります。
222
223**使用法**:
224
225```
226qmk pytest
227```
diff --git a/docs/ja/cli_configuration.md b/docs/ja/cli_configuration.md
new file mode 100644
index 000000000..7e9c3e57f
--- /dev/null
+++ b/docs/ja/cli_configuration.md
@@ -0,0 +1,126 @@
1# QMK CLI 設定
2
3<!---
4 original document: d598f01cb:docs/cli_configuration.md
5 git diff d598f01cb HEAD -- docs/cli_configuration.md | cat
6-->
7
8このドキュメントは `qmk config` がどのように動作するかを説明します。
9
10# はじめに
11
12QMK CLI の設定はキーバリューシステムです。各キーはピリオドで区切られたサブコマンドと引数名で構成されます。これにより、設定キーと設定された引数の間で簡単かつ直接的な変換が可能になります。
13
14## 簡単な例
15
16例として、`qmk compile --keyboard clueboard/66/rev4 --keymap default` コマンドを見てみましょう。
17
18設定から読み取ることができる2つのコマンドライン引数があります:
19
20* `compile.keyboard`
21* `compile.keymap`
22
23これらを設定してみましょう:
24
25```
26$ qmk config compile.keyboard=clueboard/66/rev4 compile.keymap=default
27compile.keyboard: None -> clueboard/66/rev4
28compile.keymap: None -> default
29Ψ Wrote configuration to '/Users/example/Library/Application Support/qmk/qmk.ini'
30```
31
32これで、毎回キーボードとキーマップを設定することなく、`qmk compile` を実行することができます。
33
34## ユーザデフォルトの設定
35
36複数のコマンド間で設定を共有したい場合があります。例えば、いくつかのコマンドは引数 `--keyboard` を受け取ります。全てのコマンドでこの値を設定する代わりに、その引数を受け取る全てのコマンドで使われるユーザ値を設定することができます。
37
38例:
39
40```
41$ qmk config user.keyboard=clueboard/66/rev4 user.keymap=default
42user.keyboard: None -> clueboard/66/rev4
43user.keymap: None -> default
44Ψ Wrote configuration to '/Users/example/Library/Application Support/qmk/qmk.ini'
45```
46
47# CLI ドキュメント (`qmk config`)
48
49`qmk config` コマンドは基礎となる設定とやり取りするために使われます。引数無しで実行すると、現在の設定を表示します。引数が指定された場合、それらは設定トークンと見なされます。設定トークンは以下の形式の空白を含まない文字列です:
50
51 <subcommand|general|default>[.<key>][=<value>]
52
53## 設定値の設定
54
55設定キーに等号 (=) を入れることで、設定値を設定することができます。キーは常に完全な `<section>.<key>` 形式である必要があります。
56
57例:
58
59```
60$ qmk config default.keymap=default
61default.keymap: None -> default
62Ψ Wrote configuration to '/Users/example/Library/Application Support/qmk/qmk.ini'
63```
64
65## 設定値の読み込み
66
67設定全体、単一のキー、あるいはセクション全体の設定値を読み取ることができます。1つ以上の値を表示するために複数のキーを指定することができます。
68
69### 全体の構成例
70
71 qmk config
72
73### セクション全体の例
74
75 qmk config compile
76
77### 単一キーの例
78
79 qmk config compile.keyboard
80
81### 複数キーの例
82
83 qmk config user compile.keyboard compile.keymap
84
85## 設定値の削除
86
87設定値を特別な文字列 `None` に設定することで、設定値を削除することができます。
88
89例:
90
91```
92$ qmk config default.keymap=None
93default.keymap: default -> None
94Ψ Wrote configuration to '/Users/example/Library/Application Support/qmk/qmk.ini'
95```
96
97## 複数の操作
98
99複数の読み込みおよび書き込み操作を1つのコマンドに組み合わせることができます。それらは順番に実行および表示されます:
100
101```
102$ qmk config compile default.keymap=default compile.keymap=None
103compile.keymap=skully
104compile.keyboard=clueboard/66_hotswap/gen1
105default.keymap: None -> default
106compile.keymap: skully -> None
107Ψ Wrote configuration to '/Users/example/Library/Application Support/qmk/qmk.ini'
108```
109
110# ユーザ設定オプション
111
112| キー | デフォルト値 | 説明 |
113|-----|---------------|-------------|
114| user.keyboard | None | キーボードのパス (例: `clueboard/66/rev4`) |
115| user.keymap | None | キーマップ名 (例: `default`) |
116| user.name | None | ユーザの github のユーザ名。 |
117
118# 全ての設定オプション
119
120| キー | デフォルト値 | 説明 |
121|-----|---------------|-------------|
122| compile.keyboard | None | キーボードのパス (例: `clueboard/66/rev4`) |
123| compile.keymap | None | キーマップ名 (例: `default`) |
124| hello.name | None | 実行時の挨拶の名前 |
125| new_keyboard.keyboard | None | キーボードのパス (例: `clueboard/66/rev4`) |
126| new_keyboard.keymap | None | キーマップ名 (例: `default`) |
diff --git a/docs/ja/config_options.md b/docs/ja/config_options.md
new file mode 100644
index 000000000..6cdbd2cf1
--- /dev/null
+++ b/docs/ja/config_options.md
@@ -0,0 +1,393 @@
1# QMK の設定
2
3<!---
4 original document: 0f43c2652:docs/config_options.md
5 git diff 0f43c2652 HEAD -- docs/config_options.md | cat
6-->
7
8QMK はほぼ無制限に設定可能です。可能なところはいかなるところでも、やりすぎな程、ユーザーがコードサイズを犠牲にしてでも彼らのキーボードをカスタマイズをすることを許しています。ただし、このレベルの柔軟性により設定が困難になります。
9
10QMK には主に2種類の設定ファイルがあります- `config.h` と `rules.mk`。これらのファイルは QMK の様々なレベルに存在し、同じ種類の全てのファイルは最終的な設定を構築するために組み合わされます。最低の優先度から最高の優先度までのレベルは以下の通りです:
11
12* QMK デフォルト
13* キーボード
14* フォルダ (最大5レべルの深さ)
15* キーマップ
16
17## QMK デフォルト
18
19QMK での全ての利用可能な設定にはデフォルトがあります。その設定がキーボード、フォルダ、あるいはキーマップレべルで設定されない場合、これが使用される設定です。
20
21## キーボード
22
23このレベルにはキーボード全体に適用される設定オプションが含まれています。一部の設定は、リビジョンあるいはほとんどのキーマップで変更されません。他の設定はこのキーボードのデフォルトに過ぎず、フォルダあるいはキーマップによって上書きされる可能性があります。
24
25## フォルダ
26
27一部のキーボードには、異なるハードウェア構成のためのフォルダとサブフォルダがあります。ほとんどのキーボードは深さ1のフォルダのみですが、QMK は最大深さ5のフォルダの構造をサポートします。各フォルダは、最終的な設定に組み込まれる独自の `config.h` と `rules.mk` ファイルを持つことができます。
28
29## キーマップ
30
31このレベルには特定のキーマップのための全てのオプションが含まれています。以前の定義を上書きしたい場合は、`#undef <variable>` を使って定義を解除し、エラー無しで再定義することができます。
32
33# `config.h` ファイル
34
35これは最初に include されるものの 1 つである C ヘッダファイルで、プロジェクト全体(もし含まれる場合)にわたって持続します。多くの変数をここで設定し、他の場所からアクセスすることができます。`config.h` ファイルでは、以下のもの以外の、他の `config.h` ファイルやその他のファイルの include をしないでください:
36
37 #include "config_common.h"
38
39
40## ハードウェアオプション
41* `#define VENDOR_ID 0x1234`
42 * VID を定義します。ほとんどの DIY プロジェクトにおいて、任意のものを定義できます
43* `#define PRODUCT_ID 0x5678`
44 * PID を定義します。ほとんどの DIY プロジェクトでは、任意のものを定義できます
45* `#define DEVICE_VER 0`
46 * デバイスのバージョンを定義します (多くの場合リビジョンに使われます)
47* `#define MANUFACTURER Me`
48 * 一般的に、誰もしくはどのブランドがボードを作成したか
49* `#define PRODUCT Board`
50 * キーボードの名前
51* `#define DESCRIPTION a keyboard`
52 * キーボードの簡単な説明
53* `#define MATRIX_ROWS 5`
54 * キーボードのマトリックスの行の数
55* `#define MATRIX_COLS 15`
56 * キーボードのマトリックスの列の数
57* `#define MATRIX_ROW_PINS { D0, D5, B5, B6 }`
58 * 行のピン、上から下へ
59* `#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }`
60 * 列のピン、左から右へ
61* `#define UNUSED_PINS { D1, D2, D3, B1, B2, B3 }`
62 * 参考として、キーボードで使われていないピン
63* `#define MATRIX_HAS_GHOST`
64 * マトリックスにゴーストがあるか(ありそうにないか)定義します
65* `#define DIODE_DIRECTION COL2ROW`
66 * COL2ROW あるいは ROW2COL - マトリックスがどのように設定されているか。COL2ROW は、スイッチとロウ(行)ラインの間にダイオードが黒い印をロウ(行)ラインに向けて置いてあることを意味します。
67* `#define DIRECT_PINS { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }`
68 * ロウ(行)ラインとカラム(列)ラインにマップされているピンを左から右に。各スイッチが個別のピンとグラウンドに接続されているマトリックスを定義します。
69* `#define AUDIO_VOICES`
70 * (循環させるために)代替音声を有効にします
71* `#define C4_AUDIO`
72 * ピン C4 のオーディオを有効にします
73* `#define C5_AUDIO`
74 * ピン C5 のオーディオを有効にします
75* `#define C6_AUDIO`
76 * ピン C6 のオーディオを有効にします
77* `#define B5_AUDIO`
78 * ピン B5 のオーディオを有効にします (C[4-6]\_AUDIO の1つとともに B[5-7]\_AUDIO の1つが有効にされている場合、疑似ステレオが有効にされます)
79* `#define B6_AUDIO`
80 * ピン B6 のオーディオを有効にします (C[4-6]\_AUDIO の1つとともに B[5-7]\_AUDIO の1つが有効にされている場合、疑似ステレオが有効にされます)
81* `#define B7_AUDIO`
82 * ピン B7 のオーディオを有効にします (C[4-6]\_AUDIO の1つとともに B[5-7]\_AUDIO の1つが有効にされている場合、疑似ステレオが有効にされます)
83* `#define BACKLIGHT_PIN B7`
84 * バックライトのピン
85* `#define BACKLIGHT_LEVELS 3`
86 * バックライトのレベル数 (off を除いて最大15)
87* `#define BACKLIGHT_BREATHING`
88 * バックライトのブレスを有効にします
89* `#define BREATHING_PERIOD 6`
90 * 1つのバックライトの "ブレス" の長さの秒数
91* `#define DEBOUNCE 5`
92 * ピンの値を読み取る時の遅延 (5がデフォルト)
93* `#define LOCKING_SUPPORT_ENABLE`
94 * メカニカルロックのサポート。キーマップで KC_LCAP、 KC_LNUM そして KC_LSCR を使えるようにします
95* `#define LOCKING_RESYNC_ENABLE`
96 * キーボードの LED の状態をスイッチの状態と一致させ続けようとします
97* `#define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)`
98 * マジックコマンドの使用を可能にするキーの組み合わせ (デバッグに便利です)
99* `#define USB_MAX_POWER_CONSUMPTION 500`
100 * デバイスの USB 経由の最大電力(mA) を設定します (デフォルト: 500)
101* `#define USB_POLLING_INTERVAL_MS 10`
102 * キーボード、マウス および 共有 (NKRO/メディアキー) インタフェースのための USB ポーリングレートをミリ秒で設定します
103* `#define F_SCL 100000L`
104 * I2C を使用するキーボードのための I2C クロックレート速度を設定します。デフォルトは `400000L` ですが、`split_common` を使っているキーボードは別でデフォルトは `100000L` です。
105
106## 無効にできる機能
107
108これらのオプションを定義すると、関連する機能が無効になり、コードサイズを節約できます。
109
110* `#define NO_DEBUG`
111 * デバッグを無効にします
112* `#define NO_PRINT`
113 * hid_listen を使った出力やデバッグを無効にします
114* `#define NO_ACTION_LAYER`
115 * レイヤーを無効にします
116* `#define NO_ACTION_TAPPING`
117 * タップダンスと他のタップ機能を無効にします
118* `#define NO_ACTION_ONESHOT`
119 * ワンショットモディファイアを無効にします
120* `#define NO_ACTION_MACRO`
121 * 古い形式のマクロ処理を無効にします: MACRO() & action_get_macro
122* `#define NO_ACTION_FUNCTION`
123 * fn_actions 配列(非推奨)からの action_function() の呼び出しを無効にします
124
125## 有効にできる機能
126
127これらのオプションを定義すると、関連する機能が有効になり、コードサイズが大きくなるかもしれません。
128
129* `#define FORCE_NKRO`
130 * NKRO をデフォルトでオンにする必要があります。これにより EEPROM の設定に関係なく、キーボードの起動時に NKRO が強制的にオンになります。NKRO は引き続きオフにできますが、キーボードを再起動すると再びオンになります。
131* `#define STRICT_LAYER_RELEASE`
132 * キーリリースがどのレイヤーから来たのかを覚えるのではなく、現在のレイヤースタックを使って強制的に評価されるようにします (高度なケースに使われます)
133
134## 設定可能な挙動
135
136* `#define TAPPING_TERM 200`
137 * タップがホールドになるまでの時間。500以上に設定された場合、タップ期間中にタップされたキーもホールドになります。(訳注: PERMISSIVE_HOLDも参照)
138* `#define TAPPING_TERM_PER_KEY`
139 * キーごとの `TAPPING_TERM` 設定の処理を有効にします
140* `#define RETRO_TAPPING`
141 * 押下とリリースの間に他のキーによる中断がなければ、TAPPING_TERM の後であってもとにかくタップします
142 * 詳細は [Retro Tapping](ja/feature_advanced_keycodes.md#retro-tapping) を見てください
143* `#define TAPPING_TOGGLE 2`
144 * トグルを引き起こす前のタップ数
145* `#define PERMISSIVE_HOLD`
146 * `TAPPING_TERM` にヒットしていなくても、リリースする前に別のキーが押されると、タップとフォールドキーがホールドを引き起こします
147 * 詳細は [Permissive Hold](ja/feature_advanced_keycodes.md#permissive-hold) を見てください
148* `#define IGNORE_MOD_TAP_INTERRUPT`
149 * 両方のキーに `TAPPING_TERM` を適用することで、ホールド時に他のキーに変換するキーを使ってローリングコンボ (zx) をすることができるようにします
150 * 詳細は [Mod tap interrupt](ja/feature_advanced_keycodes.md#ignore-mod-tap-interrupt) を見てください
151* `#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY`
152 * キーごとの `IGNORE_MOD_TAP_INTERRUPT` 設定の処理を有効にします
153* `#define TAPPING_FORCE_HOLD`
154 * タップされた直後に、デュアルロールキーを修飾子として使用できるようにします
155 * [Hold after tap](ja/feature_advanced_keycodes.md#tapping-force-hold)を見てください
156 * タップトグル機能を無効にします (`TT` あるいは One Shot Tap Toggle)
157* `#define LEADER_TIMEOUT 300`
158 * リーダーキーがタイムアウトするまでの時間
159 * タイムアウトする前にシーケンスを終了できない場合は、タイムアウトの設定を増やす必要があるかもしれません。あるいは、`LEADER_PER_KEY_TIMING` オプションを有効にすると良いでしょう。これは各キーがタップされた後でタイムアウトを再設定します。
160* `#define LEADER_PER_KEY_TIMING`
161 * 全体では無く各キーを押すたびに実行されるリーダーキーコードのタイマーを設定します
162* `#define LEADER_KEY_STRICT_KEY_PROCESSING`
163 * Mod-Tap および Layer-Tap キーコードのためのキーコードフィルタリングを無効にします。例えば、これを有効にすると、`KC_A` を使いたい場合は `MT(MOD_CTL, KC_A)` を指定する必要があります。
164* `#define ONESHOT_TIMEOUT 300`
165 * ワンショットがタイムアウトするまでの時間
166* `#define ONESHOT_TAP_TOGGLE 2`
167 * ワンショットトグルが引き起こされるまでのタップ数
168* `#define QMK_KEYS_PER_SCAN 4`
169 * 走査ごとに1つ以上のキーを送信できるようにします。デフォルトでは、走査ごとに `process_record()` 経由で1つのキーイベントのみが送信されます。これはほとんどのタイピングにほとんど影響しませんが、多くのコードを入力しているか、走査レートが最初から遅い場合、キーイベントの処理に多少の遅延が生じる可能性があります。それぞれのプレスとリリースは別のイベントです。スキャン時間が 1ms 程度のキーボードの場合、とても高速なタイピストでさえ、実際にキーボードから数 ms 以上の遅延を発生させるのに必要な 500 キーストロークを1秒間に生成することはないでしょう。しかし、3~4ms の走査時間でコードを入力している場合はどうでしょうか?おそらくこれが必要です。
170* `#define COMBO_COUNT 2`
171 * [コンボ](ja/feature_combo.md)機能で使っているコンボの数にこれを設定します。
172* `#define COMBO_TERM 200`
173 * コンボキーが検出されるまでの時間。定義されていない場合は、デフォルトは `TAPPING_TERM` です。
174* `#define TAP_CODE_DELAY 100`
175 * 適切な登録に問題がある場合(VUSB ボードで珍しくない)、`register_code` と `unregister_code` の間の遅延を設定します。値はミリ秒です。
176* `#define TAP_HOLD_CAPS_DELAY 80`
177 * MacOS で特別な処理が行われるため、`KC_CAPSLOCK` を使う時にタップホールドキー (`LT`, `MT`) に遅延を設定します。この値はミリ秒で、定義されていない場合はデフォルトは80msです。macOS については、これを200以上に設定すると良いでしょう。
178
179## RGB ライト設定 :id=rgb-light-configuration
180
181* `#define RGB_DI_PIN D7`
182 * WS2812 の DI 端子につなぐピン
183* `#define RGBLIGHT_ANIMATIONS`
184 * RGB アニメーションを実行します
185* `#define RGBLED_NUM 12`
186 * LED の数
187* `#define RGBLIGHT_SPLIT`
188 * 分割キーボードの左半分の RGB LED の出力を右半分の RGB LED の入力につなげるかわりに、それぞれの側で個別にコントローラの出力ピンが直接 RGB LED の入力に繋がっているときは、この定義が必要です。
189* `#define RGBLED_SPLIT { 6, 6 }`
190 * 分割キーボードの各半分の `RGB_DI_PIN` に直接配線されている接続されているLEDの数
191 * 最初の値は左半分の LED の数を示し、2番目の値は右半分です。
192 * RGBLED_SPLIT が定義されている場合、RGBLIGHT_SPLIT は暗黙的に定義されます。
193* `#define RGBLIGHT_HUE_STEP 12`
194 * 色相の増減時のステップ単位
195* `#define RGBLIGHT_SAT_STEP 25`
196 * 彩度の増減時のステップ単位
197* `#define RGBLIGHT_VAL_STEP 12`
198 * 値(明度)の増減時のステップ単位
199* `#define RGBW`
200 * RGBW LED のサポートを有効にします
201
202## マウスキーオプション
203
204* `#define MOUSEKEY_INTERVAL 20`
205* `#define MOUSEKEY_DELAY 0`
206* `#define MOUSEKEY_TIME_TO_MAX 60`
207* `#define MOUSEKEY_MAX_SPEED 7`
208* `#define MOUSEKEY_WHEEL_DELAY 0`
209
210## 分割キーボードオプション
211
212分割キーボード固有のオプション。あなたの rules.mk に 'SPLIT_KEYBOARD = yes' が有ることを確認してください。
213
214* `SPLIT_TRANSPORT = custom`
215 * 標準の分割通信ルーチンをカスタムのものに置き換えることができます。現在、ARM ベースの分割キーボードはこれを使わなければなりません。
216
217### 左右の設定
218
219一つ覚えておかなければならないことは、USB ポートが接続されている側が常にマスター側であるということです。USB に接続されていない側はスレーブです。
220
221分割キーボードの左右を設定するには、幾つかの異なる方法があります (優先度の順にリストされています):
222
2231. `SPLIT_HAND_PIN` を設定します: 左右を決定するためにピンを読み込みます。ピンが high の場合、それが左側です。low であれば、その半分側が右側であると決定されます。
2242. `EE_HANDS` を設定し、各半分に `eeprom-lefthand.eep`/`eeprom-righthand.eep` を書き込みます
225 * DFU ブートローダを搭載したボードでは、これらの EEPROM ファイルを書き込むために `:dfu-split-left`/`:dfu-split-right` を使うことができます
226 * Caterina ブートローダを搭載したボード (標準的な Pro Micros など)では、`:avrdude-split-left`/`:avrdude-split-right` を使ってください
227 * ARM DFU ブートローダを搭載したボード (Proton C など)では、`:dfu-util-split-left`/`:dfu-util-split-right` を使ってください
2283. `MASTER_RIGHT` を設定します: USBポートに差し込まれた側はマスター側で右側であると決定されます(デフォルトの逆)
2294. デフォルト: USB ポートに差し込まれている側がマスター側であり、左側であると見なされます。スレーブ側は右側です
230
231#### 左右を定義します
232
233* `#define SPLIT_HAND_PIN B7`
234 * high/low ピンを使って左右を決定します。low = 右手、high = 左手。`B7` を使っているピンに置き換えます。これはオプションで、`SPLIT_HAND_PIN` が未定義のままである場合、EE_HANDS メソッドまたは標準の Let's Splitが使っている MASTER_LEFT / MASTER_RIGHT 定義をまだ使うことができます。
235
236* `#define EE_HANDS` (`SPLIT_HAND_PIN` が定義されていない場合のみ動作します)
237 * `eeprom-lefthand.eep`/`eeprom-righthand.eep` がそれぞれの半分に書き込まれた後で、EEPROM 内に格納されている左右の設定の値を読み込みます。
238
239* `#define MASTER_RIGHT`
240 * マスター側が右側と定義されます。
241
242### 他のオプション
243
244* `#define USE_I2C`
245 * Serial の代わりに I2C を使う場合 (デフォルトは serial)
246
247* `#define SOFT_SERIAL_PIN D0`
248 * serial を使う場合、これを定義します。`D0` あるいは `D1`,`D2`,`D3`,`E6`。
249
250* `#define MATRIX_ROW_PINS_RIGHT { <row pins> }`
251* `#define MATRIX_COL_PINS_RIGHT { <col pins> }`
252 * 右半分に左半分と異なるピン配置を指定したい場合は、`MATRIX_ROW_PINS_RIGHT`/`MATRIX_COL_PINS_RIGHT` を定義することができます。現在のところ、`MATRIX_ROW_PINS` のサイズは `MATRIX_ROW_PINS_RIGHT` と同じでなければならず、列の定義も同様です。
253
254* `#define DIRECT_PINS_RIGHT { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }`
255 * 右半分に左半分と異なる直接ピン配置を指定したい場合は、`DIRECT_PINS_RIGHT` を定義することができます。現在のところ、`DIRECT_PINS` のサイズは `DIRECT_PINS_RIGHT` と同じでなければなりません。
256
257* `#define RGBLED_SPLIT { 6, 6 }`
258 * [RGB ライト設定](#rgb-light-configuration)を見てください。
259
260* `#define SELECT_SOFT_SERIAL_SPEED <speed>` (デフォルトの速度は1です)
261 * serial 通信を使う時のプロトコルの速度を設定します。
262 * 速度:
263 * 0: 約189kbps (実験目的のみ)
264 * 1: 約 137kbps (デフォルト)
265 * 2: 約 75kbps
266 * 3: 約 39kbps
267 * 4: 約 26kbps
268 * 5: 約 20kbps
269
270* `#define SPLIT_USB_DETECT`
271 * マスタ/スレーブを委任する時に(タイムアウト付きで) USB 接続を検出します
272 * ARM についてはデフォルトの挙動
273 * AVR Teensy については必須
274
275* `#define SPLIT_USB_TIMEOUT 2500`
276 * `SPLIT_USB_DETECT` を使う時のマスタ/スレーブを検出する場合の最大タイムアウト
277
278# `rules.mk` ファイル
279
280これは、トップレベルの `Makefile` から include される [make](https://www.gnu.org/software/make/manual/make.html) ファイルです。これは特定の機能を有効または無効にするだけでなく、コンパイルする MCU に関する情報を設定するために使われます。
281
282## ビルドオプション
283
284* `DEFAULT_FOLDER`
285 * キーボードに1つ以上のサブフォルダがある場合にデフォルトのフォルダを指定するために使われます。
286* `FIRMWARE_FORMAT`
287 * ビルドの後でルート `qmk_firmware` フォルダにコピーされる形式 (bin, hex) を定義します。
288* `SRC`
289 * コンパイル・リンクリストにファイルを追加するために使われます。
290* `LIB_SRC`
291 * コンパイル・リンクリストにライブラリとしてファイルを追加するために使われます。
292 `LIB_SRC` で指定されたファイルは、`SRC` で指定されたファイルの後にリンクされます。
293 例えば、次のように指定した場合:
294 ```
295 SRC += a.c
296 LIB_SRC += lib_b.c
297 SRC += c.c
298 LIB_SRC += lib_d.c
299 ```
300 リンク順は以下の通りです。
301 ```
302 ... a.o c.o ... lib_b.a lib_d.a ...
303 ```
304* `LAYOUTS`
305 * このキーボードがサポートする[レイアウト](ja/feature_layouts.md)のリスト
306* `LINK_TIME_OPTIMIZATION_ENABLE`
307 * キーボードをコンパイルする時に、Link Time Optimization (`LTO`) を有効にします。これは処理に時間が掛かりますが、コンパイルされたサイズを大幅に減らします (そして、ファームウェアが小さいため、追加の時間は分からないくらいです)。ただし、`LTO` が有効な場合、古いマクロと関数の機能が壊れるため、自動的にこれらの機能を無効にします。これは `NO_ACTION_MACRO` と `NO_ACTION_FUNCTION` を自動的に定義することで行われます。
308* `LTO_ENABLE`
309 * LINK_TIME_OPTIMIZATION_ENABLE と同じ意味です。`LINK_TIME_OPTIMIZATION_ENABLE` の代わりに `LTO_ENABLE` を使うことができます。
310
311## AVR MCU オプション
312* `MCU = atmega32u4`
313* `F_CPU = 16000000`
314* `ARCH = AVR8`
315* `F_USB = $(F_CPU)`
316* `OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT`
317* `BOOTLOADER = atmel-dfu` と以下のオプション:
318 * `atmel-dfu`
319 * `lufa-dfu`
320 * `qmk-dfu`
321 * `halfkay`
322 * `caterina`
323 * `bootloadHID`
324 * `USBasp`
325
326## 機能オプション
327
328これらを使って特定の機能のビルドを有効または無効にします。有効にすればするほどファームウェアが大きくなり、MCU には大きすぎるファームウェアを構築するリスクがあります。
329
330* `BOOTMAGIC_ENABLE`
331 * 仮想 DIP スイッチ設定
332* `MOUSEKEY_ENABLE`
333 * マウスキー
334* `EXTRAKEY_ENABLE`
335 * オーディオ制御とシステム制御
336* `CONSOLE_ENABLE`
337 * デバッグ用コンソール
338* `COMMAND_ENABLE`
339 * デバッグ及び設定用のコマンド
340* `COMBO_ENABLE`
341 * キーコンボ機能
342* `NKRO_ENABLE`
343 * USB N-キーロールオーバー - これが動作しない場合は、ここを見てください: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
344* `AUDIO_ENABLE`
345 * オーディオサブシステムを有効にします。
346* `RGBLIGHT_ENABLE`
347 * キーボードアンダーライト機能を有効にします
348* `LEADER_ENABLE`
349 * リーダーキーコードを有効にします
350* `MIDI_ENABLE`
351 * MIDI 制御
352* `UNICODE_ENABLE`
353 * Unicode
354* `BLUETOOTH_ENABLE`
355 * Adafruit EZ-Key HID で Bluetooth を有効にするレガシーオプション。BLUETOOTH を見てください
356* `BLUETOOTH`
357 * 現在のオプションは、AdafruitEzKey、AdafruitBLE、RN42
358* `SPLIT_KEYBOARD`
359 * 分割キーボード (let's split や bakingpy のキーボードのようなデュアル MCU) のサポートを有効にし、quantum/split_common にある全ての必要なファイルをインクルードします
360* `CUSTOM_MATRIX`
361 * 標準マトリックス走査ルーチンを独自のものに置き換えることができます。
362* `DEBOUNCE_TYPE`
363 * 標準キーデバウンスルーチンを代替または独自のものに置き換えることができます。
364* `WAIT_FOR_USB`
365 * キーボードが起動する前に、USB 接続が確立されるのをキーボードに待機させます
366* `NO_USB_STARTUP_CHECK`
367 * キーボードの起動後の usb サスペンドチェックを無効にします。通常、キーボードはタスクが実行される前にホストがウェイク アップするのを待ちます。分割キーボードは半分はウェイクアップコールを取得できませんが、マスタにコマンドを送信する必要があるため、役に立ちます。
368
369## USB エンドポイントの制限
370
371USB 経由でサービスを提供するために、QMK は USB エンドポイントを使う必要があります。
372これらは有限なリソースです: 各マイクロコントローラは特定の数しか持ちません。
373これは一緒に有効にできる機能を制限します。
374利用可能なエンドポイントを超えると、ビルドエラーをひきおこします。
375
376以下の機能は個別のエンドポイントを必要とするかもしれません:
377
378* `MOUSEKEY_ENABLE`
379* `EXTRAKEY_ENABLE`
380* `CONSOLE_ENABLE`
381* `NKRO_ENABLE`
382* `MIDI_ENABLE`
383* `RAW_ENABLE`
384* `VIRTSER_ENABLE`
385
386エンドポイントの使用率を向上させるために、HID 機能を組み合わせて1つのエンドポイントを使うようにすることができます。
387デフォルトでは、`MOUSEKEY`、`EXTRAKEY` および `NKRO` が単一のエンドポイントに結合されます。
388
389基本キーボード機能も、`KEYBOARD_SHARED_EP = yes` を設定することで同じエンドポイントに結合することができます。
390これによりもう1つのエンドポイントが解放されますが、一部の BIOS ではブートキーボードプロトコルの切り替えを実装しないため、キーボードが動作しなくなるかもしれません。
391
392マウスの結合も、ブートマウス互換性を破壊します。
393この機能が必要な場合は、`MOUSE_SHARED_EP = no` を設定することで、マウスを結合しないようにすることができます。
diff --git a/docs/ja/contributing.md b/docs/ja/contributing.md
new file mode 100644
index 000000000..401cabcd4
--- /dev/null
+++ b/docs/ja/contributing.md
@@ -0,0 +1,173 @@
1# 貢献方法
2
3<!---
4 original document: d47809575:docs/contributing.md
5 git diff d47809575 HEAD -- docs/contributing.md | cat
6-->
7
8👍🎉 まず、これを読み貢献する時間を作ってくれてありがとうございます!🎉👍
9
10サードパーティの貢献は、QMK の成長と改善に役立ちます。プルリクエストと貢献プロセスを貢献者とメンテナの両方にとって便利で簡単なものにしたいです。この目的のために、大きな変更をせずにプルリクエストが受け入れられるように貢献者向けのガイドラインをまとめました。
11
12* [プロジェクトの概要](#project-overview)
13* [コーディング規約](#coding-conventions)
14* [一般的なガイドライン](#general-guidelines)
15* [行動規範は私にとって何を意味しますか?](#what-does-the-code-of-conduct-mean-for-me)
16
17## この全てを読みたくはありません!単純に質問があります!
18
19QMK について質問したい場合は、[OLKB Subreddit](https://reddit.com/r/olkb) あるいは [Discord](https://discord.gg/Uq7gcHh) ですることができます。
20
21以下の事を覚えておいてください:
22
23* 誰かがあなたの質問に答えるのに数時間掛かるかもしれません。しばらくお待ちください!
24* QMK に関わる全ての人が彼らの時間とエネルギーを提供しています。QMK に関する作業や質問への回答に対する報酬はありません。
25* できるだけ簡単に答えられるように質問してみてください。その方法が分からない場合は、以下に幾つかの良いガイドがあります:
26 * https://opensource.com/life/16/10/how-ask-technical-questions
27 * http://www.catb.org/esr/faqs/smart-questions.html
28
29# プロジェクトの概要 :id=project-overview
30
31QMK は主に C で書かれており、特定の機能と部品は C++ で書かれています。QMK は、キーボードの中の組み込みプロセッサ、特に AVR ([LUFA](http://www.fourwalledcubicle.com/LUFA.php)) と ARM ([ChibiOS](http://www.chibios.com)) を対象にしています。すでに Arduino プログラミングに精通している場合は、多くの概念と制限がおなじみのものです。QMK に貢献するには Arduino を使用した経験は必要ありません。
32
33<!-- FIXME: We should include a list of resources for learning C here. -->
34
35# どこで助けを得られますか?
36
37助けが必要であれば、[issue を開く](https://github.com/qmk/qmk_firmware/issues) か [Discord で会話する](https://discord.gg/Uq7gcHh)ことができます。
38
39# どうやって貢献することができますか?
40
41以前にオープンソースに貢献したことはありませんか? QMK で貢献がどのように機能するかが疑問ですか? ここに簡単な説明があります!
42
430. [GitHub](https://github.com) アカウントにサインアップします。
441. 貢献するためのキーマップをまとめるか、解決に興味がある[問題を見つける](https://github.com/qmk/qmk_firmware/issues)、あるいは追加したい[機能](https://github.com/qmk/qmk_firmware/issues?q=is%3Aopen+is%3Aissue+label%3Afeature)を見つけます。
452. 問題に関連付けられているリポジトリをあなたの GitHub アカウントにフォークします。これは、`GitHub上のあなたのユーザー名/qmk_firmware` の下にリポジトリのコピーを持つことを意味します。
463. `git clone https://github.com/GitHub上のあなたのユーザー名/repository-name.git` を使ってローカルマシンにリポジトリをクローンします。
474. 新しい機能に取り組んでいる場合は、issue を開きこれから行う作業について話し合うことを検討してください。
485. `git checkout -b branch-name-here` を使って修正用の新しいブランチを作成します。
496. 解決しようとしている問題、あるいは追加したい機能について適切な変更を加えます。
507. `git add insert-paths-of-changed-files-here` を使って変更されたファイルの内容を git がプロジェクトの状態を管理するために使用する "snapshot"、インデックスとしても知られている、に追加します。
518. `git commit -m "Insert a short message of the changes made here"` を使って、説明的なメッセージとともにインデックスの内容を保存します。
529. `git push origin branch-name-here` を使って GitHub 上のリポジトリに変更をプッシュします。
5310. プルリクエストを [QMK Firmware](https://github.com/qmk/qmk_firmware/pull/new/master) にサブミットします。
5411. 行われた変更の簡単な説明と、変更に関する問題またはバグ番号を使って、プルリクエストにタイトルを付けます。例えば、issue に "Added more log outputting to resolve #4352" のようなタイトルをつけることができます。
5512. プルリクエストの説明では、行った変更、行ったプルリクエストに存在すると思われる問題、およびメンテナに対する質問を説明します。プルリクエストが完ぺきではない場合(プルリクエストが無い場合)でも問題ありません。レビュワーが問題の修正と改善を手伝います。
5613. プルリクエストがメンテナによってレビューされるのを待ちます。
5714. レビューをしているメンテナが変更を推奨する場合は、プルリクエストに変更を加えます。
5815. プルリクエストがマージされた後で成功を祝います!
59
60# コーディング規約 :id=coding-conventions
61
62私たちのスタイルのほとんどは簡単に理解できます。C あるいは Python のいずれかに精通している場合は、ローカルスタイルにそれほど問題はないはずです。
63
64* [コーディング規約 - C](ja/coding_conventions_c.md)
65* [コーディング規約 - Python](ja/coding_conventions_python.md)
66
67# 一般的なガイドライン :id=general-guidelines
68
69QMK には幾つかの異なるタイプの変更があり、それぞれ異なるレベルの厳密さが必要です。どのような種類の変更を行っても、次のガイドラインに留意してください。
70
71* PR を論理単位に分割します。例えば、2つの個別の機能をカバーする1つの PR を送信するのではなく、代わりに機能ごとに個別の PR をサブミットします。
72* コミットする前に、`git diff --check` を使って不要な空白を確認します。
73* コードの変更が実際にコンパイルされることを確認してください。
74 * キーマップ: `make keyboard:your_new_keymap` がエラーを返さないことを確認してください。
75 * キーボード: `make keyboard:all` がエラーを返さないことを確認してください。
76 * コア: `make all` がエラーを返さないことを確認してください。
77* コミットメッセージがそれ自体で理解できることを確認してください。最初の行に短い説明(70文字以内)を入れ、2行目は空にし、3行目以降では必要に応じてコミットを詳細に説明する必要があります。例:
78
79```
80kerpleplork の fronzlebop を調整します
81
82kerpleplork はエラーコード 23 で連続的に失敗していました。根本的な原因は fronzlebop 設定で、これにより kerpleplork はN回の繰り返しごとにアクティブになります。
83
84私が使用できるデバイスの限られた実験では、kerpleplork の混乱を避けるために 7 は十分高い値であることを示していますが、念のため ARM デバイスを持つ人たちからフィードバックを得たいです。
85```
86
87!> **重要:** デフォルト以外のキーマップ、ユーザスペースおよびレイアウトのようなユーザコードへのバグ修正あるいは改善に貢献したい場合は、PR にコードの元の提出者にタグをつけてください。Git と GitHub のスキルレベルに関係なく、多くのユーザは知らないうちにコードが変更されることに混乱したりイライラしたりするかもしれません。
88
89## ドキュメント
90
91ドキュメントは QMK への貢献を始める最も簡単な方法の1つです。ドキュメントが間違っているか不完全な場所を見つけ、これらを修正するのは簡単です!私たちもドキュメントを編集する人を非常に必要としています。編集するスキルがあるが、どこにどのように飛び乗ればいいのか分からない場合は、[助けをもとめて](#where-can-i-go-for-help)ください!
92
93全てのドキュメントは `qmk_firmware/docs` ディレクトリの中にあります。あるいは web ベースのワークフローを使いたい場合は、https://docs.qmk.fm/ の各ページの下部にある "Edit this page" リンクをクリックすることができます。
94
95ドキュメントの中にコードの例を提供する場合は、ドキュメント内の他の場所で使用されている命名規則を順守してください。例えば、一貫性を保つために、`my_layers` あるいは `my_keycodes` として列挙型を標準化します:
96
97```c
98enum my_layers {
99 _FIRST_LAYER,
100 _SECOND_LAYER
101};
102
103enum my_keycodes {
104 FIRST_LAYER = SAFE_RANGE,
105 SECOND_LAYER
106};
107```
108
109### ドキュメントのプレビュー
110
111開発環境をセットアップした場合は、プルリクエストを開く前に以下のコマンドを `qmk_firmware/` フォルダから実行することで、あなたの変更をプレビューすることができます:
112
113 ./bin/qmk docs
114
115または、Python 3 のみがインストールされている場合:
116
117 python3 -m http.server 8936
118
119その後、ウェブブラウザで、`http://localhost:8936/` を表示します。
120
121## キーマップ
122
123ほとんどの初めての QMK 貢献者は、個人のキーマップから始めます。キーマップの標準はかなりカジュアルなものにしようとしています(キーマップは結局のところ作成者の性格を反映しています)が、他の人があなたのキーマップを簡単に見つけて学ぶことができるように、これらのガイドラインに従うようにお願いします。
124
125* [the template](documentation_templates.md) を使って `readme.md` を書きます。
126* 全てのキーマップの PR は squash されるため、コミットがどのように squash されるかを気にする場合は、自分で行う必要があります。
127* キーマップの PR に機能をまとめないでください。最初に機能をサブミットし、次にキーマップのための2つ目の PR をサブミットします。
128* `Makefile` をキーマップフォルダに含めないでください(もう使われていません)。
129* ファイルヘッダの著作権を更新します (`%YOUR_NAME%` を探します)
130
131## キーボード
132
133キーボードは QMK の存在理由です。一部のキーボードはコミュニティによって管理されていますが、他のキーボードはそれぞれのキーボードを作成する責任者によって管理されています。`readme.md` を見るとそのキーボードを管理しているのが誰かが分かります。特定のキーボードに関する質問がある場合、[Issue を開いて](https://github.com/qmk/qmk_firmware/issues)質問にメンテナをタグ付けしてください。(訳注: タグ付け は [メンションする](https://help.github.com/ja/github/writing-on-github/basic-writing-and-formatting-syntax#mentioning-people-and-teams) という意味です。)
134
135また以下のガイドラインに従うことをお願いします:
136
137* [the template](ja/documentation_templates.md) を使って `readme.md` を書きます。
138* コミットの数を適切に保ってください。そうでなければあなたの PR を squash します。
139* コア機能を新しいキーボードにまとめないでください。最初に機能をサブミットし、次にキーボード用に別の PR をサブミットしてください。
140* `.c`/`.h` ファイルにすぐ上の親フォルダに従って名前を付けます。例えば、`/keyboards/<kb1>/<kb2>/<kb2>.[ch]`
141* `Makefile` をキーボードフォルダに含めないでください(もう使われていません)
142* ファイルヘッダの著作権を更新します (`%YOUR_NAME%` を探します)
143
144## Quantum/TMK コア
145
146新しい機能をビルドするために多くの作業を行う前に、最適な方法で実装していることを確認する必要があります。[QMK の理解](ja/understanding_qmk.md)を読むことで、QMK の基本的な理解を得ることができます。これはあなたを QMK のプログラムフローのツアーに連れて行きます。ここから、あなたのアイデアを実装するための最良の方法の感覚をつかむために、私たちと話す必要があります。これを行うには主に2つの方法があります:
147
148* [Discord でのチャット](https://discord.gg/Uq7gcHh)
149* [Issue を開く](https://github.com/qmk/qmk_firmware/issues/new)
150
151機能とバグ修正の PR は全てのキーボードに影響します。また、私たちは QMK の再編も進めています。このため、実装が行われる前に特に重要な変更について議論することが特に重要です。最初に私たちと話をせずに PR を開いた場合、あなたの選択が私たちの計画した方向とうまく合わない場合は幾つかの大きな再作業を行う覚悟をしてください。
152
153機能やバグの修正に取り組む時に留意すべき幾つかの事があります。
154
155* **デフォルトで無効** - QMK がサポートするほとんどのチップでメモリがかなり制限されており、現在のキーマップが壊れていないことが重要です。ですので、あなたの機能をオフにするのではなく**オン**にするようにしてください。デフォルトでオンにすべき場合、あるいはコードのサイズを小さくする必要がある場合は、相談してください。
156* **サブミットする前にローカルでコンパイル** - これが明白であることを願っていますが、コンパイルする必要があります。私たちの Travis システムは全ての問題をキャッチしますが、結果が返ってくるのを待つ代わりに幾つかのキーボードをローカルでコンパイルする方が一般的に速いです。
157* **リビジョンと異なるチップベースを考慮** - 僅かに異なる設定、さらには異なるチップベースを可能にするリビジョンを持つキーボードが幾つかあります。ARM および AVR でサポートされる機能を作成する、あるいは動作しないプラットフォームでは自動的に無効化するようにしてください。
158* **機能の説明** - 新しいファイルあるいは既存のファイルの一部として、`docs/` の中に文章化します。文章化しないと、他の人はあなたの苦労から利益を得ることができません。
159
160また以下のガイドラインに従うことをお願いします:
161
162* コミットの数を適切に保ってください。そうでなければあなたの PR を squash します。
163* キーボードあるいはキーマップをコアの変更にまとめないでください。コアの変更を最初にサブミットしてください。
164* 機能のための[ユニット テスト](ja/unit_testing.md)を書いてください。
165* 編集しているファイルのスタイルに従ってください。スタイルが明確でないか、スタイルが混在している場合は、上記の[コーディング規約](#coding-conventions)に準拠する必要があります。
166
167## リファクタリング
168
169QMK で物事がどのようにレイアウトされるかについて明確なビジョンを維持するために、私たちはリファクタリングを詳細に計画し、変更をする協力者がいます。リファクタリングのアイデアあるいは提案がある場合は、[issue を開いてください](https://github.com/qmk/qmk_firmware/issues)。QMK を改善する方法についてお話ししたいと思います。
170
171# 行動規範は私にとって何を意味しますか? :id=what-does-the-code-of-conduct-mean-for-me
172
173私たちの[行動規範](https://github.com/qmk/qmk_firmware/blob/master/CODE_OF_CONDUCT.md)は、身元に関係なくあなたがプロジェクトの全員を敬意と礼儀を持って扱う責任があることを意味します。あなたが行動規範に記載されている不適切な行動やコメントの被害者である場合は、私たちはあなたのためにここにおり、私たちのコードに従って虐待者が適切に懲戒されるように最善を尽くします。
diff --git a/docs/ja/driver_installation_zadig.md b/docs/ja/driver_installation_zadig.md
new file mode 100644
index 000000000..268940ec0
--- /dev/null
+++ b/docs/ja/driver_installation_zadig.md
@@ -0,0 +1,53 @@
1# Zadig を使ったブートローダドライバのインストール
2
3<!---
4 original document: d598f01cb:docs/driver_installation_zadig.md
5 git diff d598f01cb HEAD -- docs/driver_installation_zadig.md | cat
6-->
7
8QMK はホストにたいして通常の HID キーボードデバイスとして振る舞うため特別なドライバは必要ありません。しかし、Windows でのキーボードへの書き込みは、多くの場合、キーボードをリセットした時に現れるブートローダデバイスで*行います*。
9
102つの注目すべき例外があります: 通常 Pro Micro で見られる Caterina ブートローダや、PJRC Teensy に書き込まれている HalfKay ブートローダは、それぞれシリアルポートと汎用 HID デバイスとして振る舞うため、ドライバは必要ありません。
11
12[Zadig](https://zadig.akeo.ie/) ユーティリティを使うことをお勧めします。MSYS2 あるいは WSL を使って開発環境をセットアップした場合、`qmk_install.sh` スクリプトはドライバをインストールするかどうかをたずねます。
13
14## インストール
15
16`RESET` キーコード (別のレイヤにあるかもしれません)を押すか、通常はキーボードの下面にあるリセットスイッチを押して、キーボードをブートローダモードにします。どちらもキーボードに無い場合は、Escape または Space+`B` を押しながら接続してみてください (詳細は、[ブートマジック](ja/feature_bootmagic.md) ドキュメントを見てください)。一部のキーボードはブートマジックの代わりに[コマンド](ja/feature_command.md)を使います。この場合、キーボードが接続されている状態で「左Shift + 右Shift + `B`」あるいは「左Shift + 右Shift + Escape」を押すと、ブートローダモードに入ることができます。
17一部のキーボードはブートローダに入るために特定の操作をする必要があります。例えば、[ブートマジック Lite](ja/feature_bootmagic.md#bootmagic-lite) キー (デフォルト: Escape) は別のキー(例えば、左Control)かもしれません。また、コマンドを有効にするキーの組み合わせ (デフォルト: 左Shift + 右Shift) は何か他のキー(例えば 左Control + 右Control)を押し続ける必要がある場合があります。不明な場合は、キーボードの README ファイルを参照してください。
18
19USBaspLoader を使ってデバイスをブートローダモードにするには、`BOOT` ボタンを押しながら `RESET` ボタンをタップしてください。
20あるいは `BOOT` を押し続けながら USB ケーブルを挿入します。
21
22Zadig は自動的にブートローダデバイスを検知します。**Options → List All Devices** を確認する必要がある場合があります。
23
24- Atmel AVR MCU を搭載したキーボードの場合、ブートローダは `ATm32U4DFU` に似た名前が付けられ、ベンダー ID は `03EB` です。
25- USBasp ブートローダは `USBasp` として表示され、VID/PID は`16C0:05DC` です。
26- QMK-DFU ブートローダを使って書き込まれた AVR キーボードは `<keyboard name> Bootloader` という名前が付けられ、VID は `03EB` です。
27- ほとんどの ARM キーボードでは、`STM32 BOOTLOADER` と呼ばれ、VID/PID は `0483:DF11` です。
28
29!> Zadig が `HidUsb` ドライバを使用する1つ以上のデバイスを表示する場合、キーボードはおそらくブートローダモードではありません。矢印はオレンジ色になり、システムドライバの変更を確認するように求められます。この場合、続行**しないでください**!
30
31矢印が緑色で表示されたら、ドライバを選択し、**Install Driver** をクリックします。`libusb-win32` ドライバは通常 AVR で動作し、`WinUSB`は ARM で動作しますが、それでもキーボードに書き込みできない場合は、リストから異なるドライバをインストールしてみてください。msys2 を使ってコマンドライン経由で USBaspLoader デバイスに書き込むには、`libusbk` ドライバがお勧めです。そうではなく書き込みに QMK Toolbox を使っている場合は `libusb-win32` がうまく動作します。
32
33![ブートローダドライバが正常にインストールされた Zadig](https://i.imgur.com/b8VgXzx.png)
34
35最後に、新しいドライバがロードされたことを確認するためにキーボードのプラグを抜いて再接続します。書き込みに QMK Toolbox を使う場合は、ドライバの変更を認識しない場合があるため、QMK Toolkit を終了して再起動します。
36
37## 間違ったデバイスのインストールからの回復
38
39キーボードが入力できなくなった場合は、ブートローダではなくキーボード自体のドライバを間違って入れ替えた可能性があります。これはキーボードがブートローダモードでない場合に起こりえます。これは Zadig で簡単に確認することができます - 健全なキーボードには、全てのインタフェースに `HidUsb` ドライバがインストールされています:
40
41![Zadig から見た健全なキーボード](https://i.imgur.com/Hx0E5kC.png)
42
43デバイスマネージャーを開き、キーボードと思われるデバイスを探します。
44
45![デバイスマネージャーにおける、間違ったドライバがインストールされたキーボード](https://i.imgur.com/L3wvX8f.png)
46
47右クリックし、**デバイスのアンインストール** をクリックします。最初に **このデバイスのドライバーソフトウェアを削除します** にチェックが付いていることを確認してください。
48
49!["ドライバの削除"にチェックボックスにチェックが付いた、デバイスのアンインストールダイアログ](https://i.imgur.com/aEs2RuA.png)
50
51**Action → Scan for hardware changes** をクリックします。この時点で、再び入力できるようになっているはずです。Zadig でキーボードデバイスが `HidUsb` ドライバを使っていることを再確認します。そうであれば完了です。キーボードは再び機能するはずです!
52
53?> Windows が新しいドライバを使えるようにするために、この時点でコンピュータを完全に再起動する必要があるかもしれません。
diff --git a/docs/ja/faq.md b/docs/ja/faq.md
new file mode 100644
index 000000000..00b0ff827
--- /dev/null
+++ b/docs/ja/faq.md
@@ -0,0 +1,11 @@
1# よくある質問
2
3<!---
4 original document: d598f01cb:docs/faq.md
5 git diff d598f01cb HEAD -- docs/faq.md | cat
6-->
7
8* [一般](ja/faq_general.md)
9* [QMK のビルドあるいはコンパイル](ja/faq_build.md)
10* [QMK のデバッグとトラブルシューティング](ja/faq_debug.md)
11* [キーマップ](ja/faq_keymap.md)
diff --git a/docs/ja/faq_build.md b/docs/ja/faq_build.md
new file mode 100644
index 000000000..9b4ce12a4
--- /dev/null
+++ b/docs/ja/faq_build.md
@@ -0,0 +1,160 @@
1# よくあるビルドの質問
2
3<!---
4 original document: 0f43c2652:docs/faq_build.md
5 git diff 0f43c2652 HEAD -- docs/faq_build.md | cat
6-->
7
8このページは QMK のビルドに関する質問を説明します。まだビルドをしていない場合は、[ビルド環境のセットアップ](ja/getting_started_build_tools.md) および [Make 手順](ja/getting_started_make_guide.md)ガイドを読むべきです。
9
10## Linux でプログラムできません
11デバイスを操作するには適切な権限が必要です。Linux ユーザの場合は、以下の `udev` ルールに関する指示を見てください。`udev` に問題がある場合は、回避策は `sudo` コマンドを使うことです。このコマンドに慣れていない場合は、`man sudo` コマンドでマニュアルを確認するか、[この web ページを見てください](https://linux.die.net/man/8/sudo)。
12
13コントローラが ATMega32u4 の場合の `sudo` の使い方の例:
14
15 $ sudo dfu-programmer atmega32u4 erase --force
16 $ sudo dfu-programmer atmega32u4 flash your.hex
17 $ sudo dfu-programmer atmega32u4 reset
18
19あるいは、単純に:
20
21 $ sudo make <keyboard>:<keymap>:dfu
22
23`make` を `sudo` で実行することは一般的には良い考えでは***なく***、可能であれば前者の方法のいずれかを使うべきです。
24
25### Linux の `udev` ルール
26Linux では、MCU にアクセスするには適切な権限が必要です。ファームウェアを書き込む時に `sudo` を使うか、`/etc/udev/rules.d/` にこれらのファイルを配置することで、アクセスすることができます。権限の追加が完了したら、以下を実行します:
27```console
28sudo udevadm control --reload-rules
29sudo udevadm trigger
30```
31
32**/etc/udev/rules.d/50-atmel-dfu.rules:**
33```
34# Atmel ATMega32U4
35SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", MODE:="0666"
36# Atmel USBKEY AT90USB1287
37SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", MODE:="0666"
38# Atmel ATMega32U2
39SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="0666"
40```
41
42**/etc/udev/rules.d/52-tmk-keyboard.rules:**
43```
44# tmk keyboard products https://github.com/tmk/tmk_keyboard
45SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
46```
47**/etc/udev/rules.d/54-input-club-keyboard.rules:**
48
49```
50# Input Club keyboard bootloader
51SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
52```
53
54**/etc/udev/rules.d/55-caterina.rules:**
55```
56# ModemManager should ignore the following devices
57ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"
58ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"
59```
60
61**注意:** ModemManager フィルタリングは厳格モードでは無い場合のみ動作します。以下のコマンドでその設定を変更することができます:
62```console
63sudo sed -i 's/--filter-policy=strict/--filter-policy=default/' /lib/systemd/system/ModemManager.service
64sudo systemctl daemon-reload
65sudo systemctl restart ModemManager
66```
67
68**/etc/udev/rules.d/56-dfu-util.rules:**
69```
70# stm32duino
71SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", MODE:="0666"
72# Generic stm32
73SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"
74```
75
76**/etc/udev/rules.d/57-bootloadhid.rules:**
77```
78# bootloadHID
79SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE:="0666"
80```
81
82### Linux のブートローダモードで Serial デバイスが検知されない
83カーネルがデバイスを適切にサポートしていることを確認してください。デバイスが、Pro Micro (Atmega32u4) のように USB ACM を使う場合、`CONFIG_USB_ACM=y` を含めるようにしてください。他のデバイスは `USB_SERIAL` およびそのサブオプションを必要とするかもしれません。
84
85## DFU ブートローダの不明なデバイス
86
87Windows 上でキーボードを書き込む時に発生する問題は、ブートローダ用に間違ったドライバがインストールされているか、全くインストールされていないかによるものがほとんどです。
88
89QMK インストールスクリプト (MSYS2 あるいは WSL 内の `qmk_firmware` ディレクトリから `./util/qmk_install.sh`) を再実行するか、QMK Toolbox の再インストールでこの問題が解決するかもしれません。別のやり方として、手動で [`qmk_driver_installer`](https://github.com/qmk/qmk_driver_installer) パッケージをダウンロードして実行することができます。
90
91それでもうまく行かない場合は、Zadig をダウンロードして実行する必要があります。詳細な情報は [Zadig を使ったブートローダドライバのインストール](ja/driver_installation_zadig.md)を見てください。
92
93## USB VID と PID
94`config.h` を編集することで任意の ID を使うことができます。おそらく未使用の ID を使っても、他の製品と衝突するとても低い可能性があることを除いて、実際には問題はありません。
95
96QMK のほとんどのキーボードは、vendor ID として、`0xFEED` を使います。他のキーボードを調べて、ユニークな ID を選択してください。
97
98またこれも見てください。
99https://github.com/tmk/tmk_keyboard/issues/150
100
101ここで本当にユニークな VID:PID を買うことができます。個人的な使用にはこれは必要ないと思います。
102- http://www.obdev.at/products/vusb/license.html
103- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
104
105## AVR のための BOOTLOADER_SIZE
106Teensy2.0++ ブートローダのサイズは 2048 バイトであることに注意してください。一部の Makefile には間違ったコメントがあります。
107
108```
109# Boot Section Size in *bytes*
110# Teensy halfKay 512
111# Teensy++ halfKay 2048
112# Atmel DFU loader 4096 (TMK Alt Controller)
113# LUFA bootloader 4096
114# USBaspLoader 2048
115OPT_DEFS += -DBOOTLOADER_SIZE=2048
116```
117
118## MacOS での `avr-gcc: internal compiler error: Abort trap: 6 (program cc1)`
119これは brew での更新に関する問題で、avr-gcc が依存するシンボリックリンクを壊します。
120
121解決法は全ての影響を受けたモジュールを削除し再インストールすることです。
122
123```
124brew rm avr-gcc
125brew rm avr-gcc@8
126brew rm dfu-programmer
127brew rm dfu-util
128brew rm gcc-arm-none-eabi
129brew rm arm-gcc-bin@8
130brew rm avrdude
131brew install avr-gcc@8
132brew install dfu-programmer
133brew install dfu-util
134brew install arm-gcc-bin@8
135brew install avrdude
136brew link --force avr-gcc@8
137brew link --force arm-gcc-bin@8
138```
139
140### `avr-gcc` と LUFA
141
142`avr-gcc` を更新し、LUFA に関連するエラーが表示された場合、例えば:
143
144`lib/lufa/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h:380:5: error: 'const' attribute on function returning 'void'`
145
146今のところ、Homebrew で `avr-gcc` を 8 にロールバックする必要があります。
147
148```
149brew uninstall --force avr-gcc
150brew install avr-gcc@8
151brew link --force avr-gcc@8
152```
153
154### キーボードに書き込んだが何も起こらない、あるいはキーの押下が登録されない - ARM (rev6 planck、clueboard 60、hs60v2 など) でも同じ (Feb 2019)
155ARM ベースのチップ上での EEPROM の動作によって、保存された設定が無効になる場合があります。これはデフォルトレイヤに影響し、まだ調査中の特定の環境下でキーボードが使えなくなる*しれません*。EEPROM のリセットでこれが修正されます。
156
157[Planck rev6 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) を使って eeprom のリセットを強制することができます。このイメージを書き込んだ後で、通常のファームウェアを書き込むと、キーボードが_通常_ の動作順序に復元されます。
158[Preonic rev3 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin)
159
160いずれかの形式でブートマジックが有効になっている場合は、これも実行できるはずです (実行方法の詳細については、[ブートマジックドキュメント](feature_bootmagic.md)とキーボード情報を見てください)。
diff --git a/docs/ja/faq_debug.md b/docs/ja/faq_debug.md
new file mode 100644
index 000000000..8e42aebbb
--- /dev/null
+++ b/docs/ja/faq_debug.md
@@ -0,0 +1,161 @@
1# デバッグの FAQ
2
3<!---
4 original document: 376419a4f:docs/faq_debug.md
5 git diff 376419a4f HEAD -- docs/faq_debug.md | cat
6-->
7
8このページは、キーボードのトラブルシューティングについての様々な一般的な質問を説明します。
9
10# デバッグコンソール
11
12## `hid_listen` がデバイスを認識できない
13デバイスのデバッグコンソールの準備ができていない場合、以下のように表示されます:
14
15```
16Waiting for device:.........
17```
18
19デバイスが接続されると、*hid_listen* がデバイスを見つけ、以下のメッセージが表示されます:
20
21```
22Waiting for new device:.........................
23Listening:
24```
25
26この 'Listening:' のメッセージが表示されない場合は、[Makefile] を `CONSOLE_ENABLE=yes` に設定してビルドしてみてください
27
28Linux のような OS でデバイスにアクセスするには、権限が必要かもしれません。
29- `sudo hid_listen` を試してください
30
31## コンソールにメッセージが表示されない
32以下を調べてください:
33- *hid_listen* がデバイスを検出する。上記を見てください。
34- **Magic**+d を使ってデバッグを有効にする。[マジックコマンド](https://github.com/tmk/tmk_keyboard#magic-commands)を見てください。
35- `debug_enable=true` を設定します。[テストとデバッグ](ja/newbs_testing_debugging.md#debugging)を見てください
36- デバッグ print の代わりに 'print' 関数を使ってみてください。**common/print.h** を見てください。
37- コンソール機能を持つ他のデバイスを切断します。[Issue #97](https://github.com/tmk/tmk_keyboard/issues/97) を見てください。
38
39## Linux あるいは UNIX のようなシステムはスーパーユーザ権限を必要とします
40権限付きで *hid_listen* を実行するために 'sudo' を使ってください。
41```
42$ sudo hid_listen
43```
44
45または rules ディレクトリにファイルを置いて、TMK デバイスのための *udev rule* を追加します。ディレクトリは各システムで異なるかもしれません。
46
47File: /etc/udev/rules.d/52-tmk-keyboard.rules (Ubuntu の場合)
48```
49# tmk keyboard products https://github.com/tmk/tmk_keyboard
50SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
51```
52
53***
54
55# 雑多なこと
56## 安全性の考慮
57
58あなたはおそらくキーボードを「文鎮化」したくないでしょう。文鎮化するとファームウェアを書き換えられないようになります。リスクがあまりに高い(そしてそうでないかもしれない)ものの一部のリストを示します。
59
60- キーボードマップに RESET が含まれない場合、DFU モードに入るには、PCB のリセットボタンを押す必要があります。底部のネジを外す必要があります。
61- tmk_core / common にあるファイルを触るとキーボードが操作不能になるかもしれません。
62- .hex ファイルが大きすぎると問題を引き起こします; `make dfu` コマンドはブロックを削除し、
63サイズを検査し(おっと、間違った順序です!)、エラーを出力し、
64キーボードへの書き込みに失敗し、DFU モードのままになります。
65 - この目的のためには、Planck の最大の .hex ファイルサイズは 7000h (10進数で28672)であることに注意してください。
66
67```
68Linking: .build/planck_rev4_cbbrowne.elf [OK]
69Creating load file for Flash: .build/planck_rev4_cbbrowne.hex [OK]
70
71Size after:
72 text data bss dec hex filename
73 0 22396 0 22396 577c planck_rev4_cbbrowne.hex
74```
75
76- 上のファイルのサイズは 22396/577ch で、28672/7000h より小さいです
77- 適切な替わりの .hex ファイルがある限り、それをロードして再試行することができます
78- あなたがキーボードの Makefile で指定したかもしれない一部のオプションは、余分なメモリを消費します; BOOTMAGIC_ENABLE、MOUSEKEY_ENABLE、EXTRAKEY_ENABLE、CONSOLE_ENABLE、API_SYSEX_ENABLE に注意してください
79- DFU ツールは(オプションの余計なフルーツサラダを投げ込まない限り)ブートローダに書き込むことを許可しないので、
80ここにはリスクはほとんどありません。
81- EEPROM の書き込みサイクルは、約100000です。ファームウェアを繰り返し継続的に書き換えるべきではありません。それは最終的に EEPROM を焼き焦がします。
82
83## NKRO が動作しません
84最初に、**Makefile** 内でビルドオプション `NKRO_ENABLE` を使ってファームウェアをコンパイルする必要があります。
85
86**NKRO** がまだ動作しない場合は、`Magic` **N** コマンド(デフォルトでは `LShift+RShift+N`)を試してみてください。**NKRO** モードと **6KRO** モード間を一時的に切り替えるためにこのコマンドを使うことができます。**NKRO** が機能しない状況、特に BIOS の場合は **6KRO** モードに切り替える必要があります。
87
88ファームウェアを `BOOTMAGIC_ENABLE` でビルドした場合、`ブートマジック` **N** コマンドで切り替える必要があります (デフォルトでは `Space+N`)。この設定は EEPROM に格納され、電源を入れ直しても保持されます。
89
90https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switch
91
92
93## TrackPoint はリセット回路が必要です (PS/2 マウスサポート)
94リセット回路が無いとハードウェアの不適切な初期化のために一貫性の無い結果になります。TPM754 の回路図を見てください。
95
96- http://geekhack.org/index.php?topic=50176.msg1127447#msg1127447
97- http://www.mikrocontroller.net/attachment/52583/tpm754.pdf
98
99
100## 16 を超えるマトリックの列を読み込めない
101列が 16 を超える場合、[matrix.h] の `read_cols()` 内の `1<<16` の代わりに `1UL<<16` を使ってください。
102
103C では、AVR の場合 `1` は [16 bit] である [int] 型の1を意味し、15 を超えて左にシフトすることはできません。`1<<16` すると予期しないゼロが発生します。`1UL` として [unsigned long] 型を使う必要があります。
104
105http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
106
107## 特別なエクストラキーが動作しない (システム、オーディオコントロールキー)
108QMK でそれらを使うには、`rules.mk` 内で `EXTRAKEY_ENABLE` を定義する必要があります。
109
110```
111EXTRAKEY_ENABLE = yes # オーディオ制御とシステム制御
112```
113
114## スリープから復帰しない
115
116Windows では、**デバイスマネージャ**の**電源の管理**タブ内の `このデバイスで、コンピュータのスタンバイ状態を解除できるようにする` 設定を調べてください。また BIOS 設定も調べてください。
117
118スリープ中に任意のキーを押すとホストが起動するはずです。
119
120## Arduino を使っていますか?
121
122**Arduino のピンの命名は実際のチップと異なることに注意してください。** 例えば、Arduino のピン `D0` は `PD0` ではありません。回路図を自身で確認してください。
123
124- http://arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf
125- http://arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf
126
127Arduino の Leonardo と micro には **ATMega32U4** が載っていて、TMK 用に使うことができますが、Arduino のブートローダが問題になることがあります。
128
129## JTAG を有効にする
130
131デフォルトでは、キーボードが起動するとすぐに JTAG デバッグインタフェースが無効になります。JTAG 対応 MCU は `JTAGEN` ヒューズが設定された状態で出荷されており、キーボードがスイッチマトリックス、LED などに使用している可能性のある MCU の特定のピンを乗っ取ります。
132
133JTAG を有効にしたままにしたい場合は、単に以下のものを `config.h` に追加します:
134
135```c
136#define NO_JTAG_DISABLE
137```
138
139## USB 3 の互換性
140USB 3 ポートで問題がある人がいると聞きました。USB 2 ポートを試してください。
141
142
143## Mac の互換性
144### OS X 10.11 と Hub
145https://geekhack.org/index.php?topic=14290.msg1884034#msg1884034
146
147
148## リジューム (スリープとウェークアップ)/電源サイクルの問題
149一部の人がキーボードが BIOS で動作しなくなった、またはリジューム(電源サイクル)の後で動作しなくなったと報告しました。
150
151今のところ、この問題の根本は明確ではないですが、幾つかのビルドオプションが関係しているようです。Makefileで、`CONSOLE_ENABLE`、`NKRO_ENABLE`、`SLEEP_LED_ENABLE` あるいは他のオプションを無効にしてみてください。
152
153https://github.com/tmk/tmk_keyboard/issues/266
154https://geekhack.org/index.php?topic=41989.msg1967778#msg1967778
155
156
157
158## FLIP が動作しない
159### `AtLibUsbDfu.dll` が見つかりません
160デバイスマネージャから現在のドライバを削除し、FLIP が提供するものを再インストールします。
161http://imgur.com/a/bnwzy
diff --git a/docs/ja/faq_general.md b/docs/ja/faq_general.md
new file mode 100644
index 000000000..935d1a3c6
--- /dev/null
+++ b/docs/ja/faq_general.md
@@ -0,0 +1,20 @@
1# よくある質問
2
3<!---
4 original document: d598f01cb:docs/faq_general.md
5 git diff d598f01cb HEAD -- docs/faq_general.md | cat
6-->
7
8## QMK とは何か?
9
10Quantum Mechanical Keyboard の略である [QMK](https://github.com/qmk) は、カスタムキーボードのためのツールをビルドしている人々のグループです。[TMK](https://github.com/tmk/tmk_keyboard) の大幅に修正されたフォークである [QMK ファームウェア](https://github.com/qmk/qmk_firmware)から始まりました。
11
12## QMK と TMK の違いは何か?
13
14TMK は [Jun Wako](https://github.com/tmk) によって設計され実装されました。QMK は [Jack Humbert](https://github.com/jackhumbert) の Planck 用 TMK のフォークとして始まりました。しばらくして、Jack のフォークは TMK からかなり分岐し、2015年に Jack はフォークを QMK に名前を変えることにしました。
15
16技術的な観点から、QMK は幾つかの新しい機能を追加した TMK に基づいています。最も注目すべきことは、QMK は利用可能なキーコードの数を増やし、`S()`、`LCTL()` および `MO()` などの高度な機能を実装するためにこれらを使っています。[キーコード](keycodes.md)でこれらのキーコードの完全なリストを見ることができます。
17
18プロジェクトとコミュニティの管理の観点から、TMK は公式にサポートされている全てのキーボードを自分で管理しており、コミュニティのサポートも少し受けています。他のキーボード用に別個のコミュニティが維持するフォークが存在するか、作成できます。デフォルトでは少数のキーマップのみが提供されるため、ユーザは一般的にお互いにキーマップを共有しません。QMK は集中管理されたリポジトリを介して、キーボードとキーマップの両方を共有することを奨励しており、品質基準に準拠する全てのプルリクエストを受け付けます。これらはほとんどコミュニティで管理されますが、必要な場合は QMK チームも支援します。
19
20どちらのアプローチもメリットとデメリットがあり、理に適う場合は TMK と QMK の間でコードは自由にやり取りされます。
diff --git a/docs/ja/faq_keymap.md b/docs/ja/faq_keymap.md
new file mode 100644
index 000000000..0c742bf6b
--- /dev/null
+++ b/docs/ja/faq_keymap.md
@@ -0,0 +1,149 @@
1# キーマップの FAQ
2
3<!---
4 original document: 376419a4f:docs/faq_keymap.md
5 git diff 376419a4f HEAD -- docs/faq_keymap.md | cat
6-->
7
8このページは人々がキーマップについてしばしば持つ疑問について説明します。まだ読んだことが無い場合には、[キーマップの概要](ja/keymap.md)を最初に読むべきです。
9
10## どのキーコードを使えますか?
11あなたが利用可能なキーコードのインデックスについては、[キーコード](ja/keycodes.md)を見てください。より広範なドキュメントがある場合は、そこからリンクしてあります。
12
13キーコードは実際には [common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keycode.h) で定義されています。
14
15## デフォルトのキーコードとは何か?
16
17世界中で使用されている ANSI、ISO および JIS の3つの標準キーボードがあります。北米では主に ANSI が使われ、ヨーロッパおよびアフリカでは主に ISO が使われ、日本では JIS が使われます。言及されていない地域では、ANSI あるいは ISO が使われています。これらのレイアウトに対応するキーコードは以下の通りです:
18
19<!-- Source for this image: http://www.keyboard-layout-editor.com/#/gists/bf431647d1001cff5eff20ae55621e9a -->
20![キーボードのレイアウトイメージ](https://i.imgur.com/5wsh5wM.png)
21
22## 一部のキーが入れ替わっているか、または動作しない
23
24QMK には2つの機能、ブートマジックとコマンドがあり、これによりその場でキーボードの動作を変更することができます。これには Ctrl/Caps の交換、Gui の無効化、Alt/GUI の交換、Backspace/Backslash の交換、全てのキーの無効化およびその他の動作の変更が含まれますが、これらに限定されません。
25
26迅速な解決策として、キーボードを接続している時に `Space`+`Backspace` を押してみてください。これはキーボードに保存されている設定をリセットし、これらのキーを通常の操作に戻します。うまく行かない場合は、以下を見てください:
27
28* [ブートマジック](ja/feature_bootmagic.md)
29* [コマンド](ja/feature_command.md)
30
31## メニューキーが動作しない
32
33ほとんどの最近のキーボードにある、`KC_RGUI` と `KC_RCTL` の間にあるキーは、実際には `KC_APP` と呼ばれます。これは、そのキーが発明された時に、関連する標準にすでに `MENU` という名前のキーが存在していたため、MS はそれを `APP` キーと呼ぶことを選択したためです。
34
35## `KC_SYSREQ` が動作しません
36`KC_SYSREQ` の代わりに、Print Screen(`KC_PSCREEN` あるいは `KC_PSCR`) のキーコードを使ってください。'Alt + Print Screen' のキーの組み合わせは、'システムリクエスト' と認識されます。
37
38[issue #168](https://github.com/tmk/tmk_keyboard/issues/168) と以下を見てください
39* http://en.wikipedia.org/wiki/Magic_SysRq_key
40* http://en.wikipedia.org/wiki/System_request
41
42## 電源キーが動作しません
43
44やや紛らわしいことに、QMK には2つの "Power" キーコードがあります: キーボード/キーパッド HID usage page では `KC_POWER`、Consumer page では `KC_SYSTEM_POWER` (あるいは `KC_PWR`)。
45
46前者は macOS でのみ認識されますが、後者 `KC_SLEP` および `KC_WAKE` は3つの主要なオペレーティングシステム全てでサポートされるため、これらを使うことをお勧めします。Windows ではこれらのキーはすぐに機能しますが、macOS ではそれらはダイアログが表示されるまで押し続ける必要があります。
47
48## ワンショットモディファイア
49私の個人的な 'the' の問題を解決します。'The' ではなく 'the' あるいは 'THe' を間違って入力することがありました。ワンショットシフトはこれを軽減します。
50https://github.com/tmk/tmk_keyboard/issues/67
51
52## モディファイヤ/レイヤスタック
53修飾キーあるいはレイヤは、レイヤの切り替えが適切に設定されていない場合、スタックするかもしれません。
54修飾キーおよびレイヤ切り替えの場合、リリースイベント時に修飾キーの登録を解除する、もしくは前のレイヤに戻るために、目的のレイヤの同じ位置に `KC_TRANS` を配置する必要があります。
55
56* https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#31-momentary-switching
57* http://geekhack.org/index.php?topic=57008.msg1492604#msg1492604
58* https://github.com/tmk/tmk_keyboard/issues/248
59
60
61## メカニカルロックスイッチのサポート
62
63この機能は [Alps](http://deskthority.net/wiki/Alps_SKCL_Lock) のような*メカニカルロックスイッチ*用です。以下を `config.h` に追加することで有効にすることができます:
64
65```
66#define LOCKING_SUPPORT_ENABLE
67#define LOCKING_RESYNC_ENABLE
68```
69
70この機能を有効にした後で、キーマップでキーコード `KC_LCAP`、`KC_LNUM` および `KC_LSCR` を使います。
71
72古いビンテージメカニカルキーボードにはロックスイッチが付いている場合がありますが、最新のものにはありません。***ほとんどの場合この機能は必要なく、単にキーコード `KC_CAPS`、`KC_NLCK` および `KC_SLCK`*** を使います。
73
74## セディーユ 'Ç' のような ASCII 以外の特別文字の入力
75
76[ユニコード](ja/feature_unicode.md) 機能を見てください。
77
78## macOS での `Fn` キー
79
80ほとんどの Fn キーと異なり、Apple のキーボードの Fn キーには実際には独自のキーコードのようなものがあります。基本的な 6KRO HID レポートの6番目のキーコードの代わりになります -- つまり、Apple キーボードは実際には 5KRO のみです。
81
82QMK にこのキーを送信させることは技術的に可能です。ただし、そうするには Fn キーの状態を追加するためにレポート形式の修正を必要とします。
83さらに悪いことに、キーボードの VID と PID が実際の Apple のキーボードのものと一致しない限り、認識されません。公式の QMK がこの機能をサポートすることで法的な問題が起きるため、サポートされることはないでしょう。
84
85詳細については、[この issue](https://github.com/qmk/qmk_firmware/issues/2179) を見てください。
86
87## Mac OSX でサポートされるキーは?
88このソースコードから、どのキーコードが OSX でサポートされるかを知ることができます。
89
90`usb_2_adb_keymap` 配列は、キーボード/キーパッドページの Page usages を ADB スキャンコード(OSX 内部キーコード)にマップします。
91
92https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/Cosmo_USB2ADB.c
93
94`IOHIDConsumer::dispatchConsumerEvent` は Consumer page usages を処理します。
95
96https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/IOHIDConsumer.cpp
97
98
99## Mac OSX での JIS キー
100`無変換(Muhenkan)`, `変換(Henkan)`, `ひらがな(hiragana)` のような日本語 JIS キーボード固有のキーは OSX では認識されません。**Seil** を使ってこれらのキーを使うことができます。以下のオプションを試してください。
101
102* PC キーボードで NFER キーを有効にする
103* PC キーボードで XFER キーを有効にする
104* PC キーボードで KATAKANA キーを有効にする
105
106https://pqrs.org/osx/karabiner/seil.html
107
108
109## RN-42 Bluetooth が Karabiner で動作しない
110Karabiner - Mac OSX 上のキーマッピングツール - は、デフォルトでは RN-42 モジュールからの入力を無視します。Karabiner をキーボードで動作させるにはこのオプションを有効にする必要があります。
111https://github.com/tekezo/Karabiner/issues/403#issuecomment-102559237
112
113この問題の詳細についてはこれらを見てください。
114https://github.com/tmk/tmk_keyboard/issues/213
115https://github.com/tekezo/Karabiner/issues/403
116
117
118## 単一のキーでの Esc と<code>&#96;</code>
119
120[Grave Escape](feature_grave_esc.md) 機能を見てください。
121
122## Mac OSX での Eject
123`KC_EJCT` キーコードは OSX で動作します。https://github.com/tmk/tmk_keyboard/issues/250
124Windows 10 はコードを無視し、Linux/Xorg は認識しますが、デフォルトではマッピングがありません。
125
126実際の Apple キーボードにある Eject キーコードは実際には分かりません。HHKB は Mac モードでは Eject キー (`Fn+f`) に `F20` を使いますが、これはおそらく Apple の Eject キーコードと同じではありません。
127
128
129## `action_util.c` の `weak_mods` と `real_mods` は何か
130___改善されるべきです___
131
132real_mods は実際の物理的な修飾キーの状態を保持することを目的にしていますが、weak_mods は実際の修飾キーの状態に影響しない仮想あるいは一時的なモディファイアの状態を保持します。
133
134物理的な左シフトキーを押しながら ACTION_MODS_KEY(LSHIFT, KC_A) を入力するとします
135
136weak_mods では、
137* (1) 左シフトキーを押し続ける: real_mods |= MOD_BIT(LSHIFT)
138* (2) ACTION_MODS_KEY(LSHIFT, KC_A) を押す: weak_mods |= MOD_BIT(LSHIFT)
139* (3) ACTION_MODS_KEY(LSHIFT, KC_A) を放す: weak_mods &= ~MOD_BIT(LSHIFT)
140real_mods はモディファイアの状態を維持します。
141
142weak mods 無しでは、
143* (1) 左シフトキーを押し続ける: real_mods |= MOD_BIT(LSHIFT)
144* (2) ACTION_MODS_KEY(LSHIFT, KC_A) を押す: real_mods |= MOD_BIT(LSHIFT)
145* (3) ACTION_MODS_KEY(LSHIFT, KC_A) を放す: real_mods &= ~MOD_BIT(LSHIFT)
146ここで、real_mods は 'physical left shift' '物理的な左シフト' の状態を見失います。
147
148キーボードレポートが送信される時、weak_mods は real_mods と論理和がとられます。
149https://github.com/tmk/tmk_core/blob/master/common/action_util.c#L57
diff --git a/docs/ja/getting_started_getting_help.md b/docs/ja/getting_started_getting_help.md
new file mode 100644
index 000000000..4b5d492fa
--- /dev/null
+++ b/docs/ja/getting_started_getting_help.md
@@ -0,0 +1,20 @@
1# 助けを得る
2
3<!---
4 original document: d598f01cb:docs/getting_started_getting_help.md
5 git diff d598f01cb HEAD -- docs/getting_started_getting_help.md | cat
6-->
7
8QMK に関して助けを得るための多くのリソースがあります。
9
10## リアルタイム チャット
11
12メインの [Discord server](https://discord.gg/Uq7gcHh) で QMK の開発者とユーザを見つけることができます。サーバには、ファームウェア、Toolbox、ハードウェアおよび Configurator についてチャットするための特定のチャンネルがあります。
13
14## OLKB Subreddit
15
16公式の QMK フォーラムは [reddit.com](https://reddit.com) の [/r/olkb](https://reddit.com/r/olkb) です。
17
18## Github Issues
19
20[GitHub で issue](https://github.com/qmk/qmk_firmware/issues) を開くことができます。issue が長期的な議論あるいはデバッグを必要とする場合は、特に便利です。
diff --git a/docs/ja/getting_started_github.md b/docs/ja/getting_started_github.md
new file mode 100644
index 000000000..261f1d391
--- /dev/null
+++ b/docs/ja/getting_started_github.md
@@ -0,0 +1,70 @@
1# QMK で Github を使う方法
2
3<!---
4 original document: d598f01cb:docs/getting_started_github.md
5 git diff d598f01cb HEAD -- docs/getting_started_github.md | cat
6-->
7
8Github は慣れていない人には少し注意が必要です - このガイドは、QMK におけるフォーク、クローン、プルリクエストのサブミットの各ステップについて説明します。
9
10?> このガイドでは、あなたがコマンドラインでの実行にある程度慣れており、システムに git がインストールされていることを前提にしています。
11
12[QMK Github ページ](https://github.com/qmk/qmk_firmware)を開くと、右上に "Fork" というボタンが見えます:
13
14![Git でのフォーク](http://i.imgur.com/8Toomz4.jpg)
15
16あなたが組織の一員である場合は、どのアカウントにフォークするかを選択する必要があります。ほとんどの場合、あなたの個人のアカウントにフォークしたいでしょう。フォークが完了したら(しばらく時間が掛かる場合があります)、"Clone or Download" ボタンをクリックします:
17
18![Git からダウンロード](http://i.imgur.com/N1NYcSz.jpg)
19
20必ず "HTTPS" を選択し、リンクを選択してコピーします:
21
22![HTTPS リンク](http://i.imgur.com/eGO0ohO.jpg)
23
24ここから、`git clone --recurse-submodules ` をコマンドラインに入力し、リンクを貼り付けます:
25
26```
27user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
28Cloning into 'qmk_firmware'...
29remote: Enumerating objects: 9, done.
30remote: Counting objects: 100% (9/9), done.
31remote: Compressing objects: 100% (5/5), done.
32remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
33Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
34Resolving deltas: 100% (119972/119972), done.
35...
36Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
37Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
38Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
39Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
40Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
41```
42
43ローカルマシンに QMK のフォークができるので、キーマップの追加、コンパイル、キーボードへの書き込みができます。変更に満足したら、以下のようにそれらをフォークへ追加、コミットおよびプッシュすることができます:
44
45```
46user@computer:~$ git add .
47user@computer:~$ git commit -m "adding my keymap"
48[master cccb1608] adding my keymap
49 1 file changed, 1 insertion(+)
50 create mode 100644 keyboards/planck/keymaps/mine/keymap.c
51user@computer:~$ git push
52Counting objects: 1, done.
53Delta compression using up to 4 threads.
54Compressing objects: 100% (1/1), done.
55Writing objects: 100% (1/1), 1.64 KiB | 0 bytes/s, done.
56Total 1 (delta 1), reused 0 (delta 0)
57remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
58To https://github.com/whoeveryouare/qmk_firmware.git
59 + 20043e64...7da94ac5 master -> master
60```
61
62あなたの変更は今では Github 上のフォークにあります - フォーク (`https://github.com/<whoeveryouare>/qmk_firmware`)に戻ると、"New Pull Request" ボタンをクリックすることで新しいプルリクエストを作成することができます:
63
64![New Pull Request](http://i.imgur.com/DxMHpJ8.jpg)
65
66ここでは、コミットした内容を正確に確認することができます - 全て良いように見える場合は、"Create Pull Request" をクリックすることで最終的に承認することができます:
67
68![Create Pull Request](http://i.imgur.com/Ojydlaj.jpg)
69
70サブミットの後で、私たちはあなたの変更について話し、変更を依頼し、最終的にそれを受け入れるでしょう!QMK に貢献してくれてありがとう :)
diff --git a/docs/ja/getting_started_introduction.md b/docs/ja/getting_started_introduction.md
new file mode 100644
index 000000000..b4f8b574d
--- /dev/null
+++ b/docs/ja/getting_started_introduction.md
@@ -0,0 +1,65 @@
1# はじめに
2
3<!---
4 original document: d598f01cb:docs/getting_started_introduction.md
5 git diff d598f01cb HEAD -- docs/getting_started_introduction.md | cat
6-->
7
8このページでは、QMK プロジェクトで作業するために知っておくべき基本的な情報について説明しようと思います。Unix シェルの操作に精通していることを前提としていますが、C について、または make を使ったコンパイルについて精通しているとは想定していません。
9
10## 基本的な QMK の構造
11
12QMK は [Jun Wako](https://github.com/tmk) の [tmk_keyboard](https://github.com/tmk/tmk_keyboard) プロジェクトのフォークです。変更された元の TMK コードは、`tmk_core` フォルダで見つけることができます。プロジェクトへの QMK の追加は、`quantum` フォルダで見つけることができます。キーボードプロジェクトは `handwired` および `keyboard` フォルダで見つけることができます。
13
14### ユーザスペースの構造
15
16`users` フォルダ内は各ユーザのためのディレクトリです。これはユーザがキーボード間で使うかもしれないコードを置くためのフォルダです。詳細は[ユーザスペース機能](ja/feature_userspace.md) のドキュメントを見てください。
17
18### キーボードプロジェクトの構造
19
20`keyboards` フォルダ、そのサブフォルダ `handwired`、ベンダと製品のサブディレクトリ (例えば、`clueboard`) の中には、各キーボードプロジェクトのためのディレクトリ (例えば `qmk_firmware/keyboards/clueboard/2x1800`) があります。その中には、以下の構造があります:
21
22* `keymaps/`: ビルドできる様々なキーマップ
23* `rules.mk`: デフォルトの "make" オプションを設定するファイル。このファイルを直接編集しないでください。代わりにキーマップ固有の `rules.mk` を使ってください。
24* `config.h`: デフォルトのコンパイル時のオプションを設定するファイル。このファイルを直接編集しないでください。代わりにキーマップ固有の `config.h` を使ってください。
25* `info.json`: QMK Configurator のためのレイアウトの設定に使われるファイル。詳細は [Configurator サポート](ja/reference_configurator_support.md)を見てください。
26* `readme.md`: キーボードの簡単な概要
27* `<keyboardName>.h`: このファイルは、キーボードのスイッチマトリックスに対してキーボードレイアウトが定義されるファイルです。
28* `<keyboardName>.c`: このファイルには、キーボードのためのカスタムコードがあります。
29
30プロジェクトの構造についての詳細は、[QMK キーボードガイドライン](ja/hardware_keyboard_guidelines.md)を見てください。
31
32### キーマップ構造
33
34全てのキーマップフォルダには、以下のファイルがあります。`keymap.c` だけが必須で、残りのファイルが見つからない場合は、デフォルトのオプションが選択されます。
35
36* `config.h`: キーマップを設定するためのオプション
37* `keymap.c`: 全てのキーマップコード。必須
38* `rules.mk`: 有効になっている QMK の機能
39* `readme.md`: キーマップの説明。他の人が使う方法および機能の説明。imgur のようなサービスに画像をアップロードしてください。
40
41# `config.h` ファイル
42
433つの `config.h` の場所が考えられます:
44
45* キーボード (`/keyboards/<keyboard>/config.h`)
46* ユーザスペース (`/users/<user>/config.h`)
47* キーマップ (`/keyboards/<keyboard>/keymaps/<keymap>/config.h`)
48
49ビルドシステムは自動的に上の順に config ファイルを取得します。前の `config.h` で設定された設定を上書きしたい場合は、変更したい設定の準備のために最初に定型コードを置く必要があります。
50
51```
52#pragma once
53```
54
55次に、前の `config.h` ファイルの設定を上書きするために、設定を `#undef` し再び `#define` する必要があります。
56
57定型コードと設定は、以下のようになります:
58
59```
60#pragma once
61
62// ここに上書きします!
63#undef MY_SETTING
64#define MY_SETTING 4
65```
diff --git a/docs/ja/newbs.md b/docs/ja/newbs.md
index d1043a4a1..465b82106 100644
--- a/docs/ja/newbs.md
+++ b/docs/ja/newbs.md
@@ -2,8 +2,8 @@
2 2
3<!--- 3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh 4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: ed0575fc8:docs/newbs.md 5 original document: adf4acf59:docs/newbs.md
6 git diff ed0575fc8 HEAD docs/newbs.md | cat 6 git diff adf4acf59 HEAD -- docs/newbs.md | cat
7--> 7-->
8 8
9QMK は、メカニカルキーボード用の強力なオープンソースファームウェアです。 9QMK は、メカニカルキーボード用の強力なオープンソースファームウェアです。
@@ -19,18 +19,18 @@ QMK は[多くの趣味のキーボード](http://qmk.fm/keyboards/)をサポー
19 19
20このガイドには7つの主要なセクションがあります。 20このガイドには7つの主要なセクションがあります。
21 21
22* [はじめに](newbs_getting_started.md) 22* [はじめに](ja/newbs_getting_started.md)
23* [コマンドラインを使用して初めてのファームウェアを構築する](newbs_building_firmware.md) 23* [コマンドラインを使用して初めてのファームウェアを構築する](ja/newbs_building_firmware.md)
24* [オンライン GUI を使用して初めてのファームウェアを構築する](newbs_building_firmware_configurator.md) 24* [オンライン GUI を使用して初めてのファームウェアを構築する](ja/newbs_building_firmware_configurator.md)
25* [ファームウェアを書きこむ](newbs_flashing.md) 25* [ファームウェアを書きこむ](ja/newbs_flashing.md)
26* [テストとデバッグ](newbs_testing_debugging.md) 26* [テストとデバッグ](ja/newbs_testing_debugging.md)
27* [QMK における Git 運用作法](newbs_best_practices.md) 27* [QMK における Git 運用作法](ja/newbs_git_best_practices.md)
28* [さらに学ぶための学習リソース](newbs_learn_more_resources.md) 28* [さらに学ぶための学習リソース](ja/newbs_learn_more_resources.md)
29 29
30このガイドは、これまでソフトウェアをコンパイルしたことがない人を支援することに特化しています。 30このガイドは、これまでソフトウェアをコンパイルしたことがない人を支援することに特化しています。
31その観点から選択と推奨を行います。 31その観点から選択と推奨を行います。
32これらの手順の多くには代替方法があり、これらの代替方法のほとんどをサポートしています。 32これらの手順の多くには代替方法があり、これらの代替方法のほとんどをサポートしています。
33タスクを達成する方法について疑問がある場合は、[案内を求めることができます](getting_started_getting_help.md)。 33タスクを達成する方法について疑問がある場合は、[案内を求めることができます](ja/getting_started_getting_help.md)。
34 34
35## 追加のリソース(英語) 35## 追加のリソース(英語)
36 36
diff --git a/docs/ja/newbs_best_practices.md b/docs/ja/newbs_best_practices.md
deleted file mode 100644
index 2e90ffcab..000000000
--- a/docs/ja/newbs_best_practices.md
+++ /dev/null
@@ -1,263 +0,0 @@
1<!-- # Best Practices -->
2# QMK における Git 運用作法
3
4<!---
5 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
6 original document: e75919960:docs/newbs_best_practices.md
7 git diff e75919960 HEAD docs/newbs_best_practices.md | cat
8-->
9
10<!-- ## Or, "How I Learned to Stop Worrying and Love Git." -->
11## または、如何にして私は心配することをやめて Git を愛することを学んだか。
12
13<!-- _Almost the same as #7231:25fdbf2a0:newbs_git_best_practices.md L5_ -->
14<!-- This document aims to instruct novices in the best ways to have a smooth experience in contributing to QMK. We will walk through the process of contributing to QMK, detailing some ways to make this task easier, and then later we'll break some things in order to teach you how to fix them. -->
15この文書は、QMK への貢献をスムーズに行なう最もよい方法を初心者に教えることを目的としています。
16QMK に貢献するプロセスを順を追って説明し、この作業を簡単にするいくつかの方法を詳しく説明します。
17その後、意図的に一部を壊してみせて、それらを修正する方法を教えます。
18
19<!-- This document assumes a few things: -->
20このドキュメントは以下のことを前提としています:
21
22<!-- _Same as #7231:25fdbf2a0:newbs_git_best_practices.md L9_ -->
23<!-- 1. You have a GitHub account, and have [forked the qmk_firmware repository](getting_started_github.md) to your account. -->
24<!-- 2. You've [set up your build environment](newbs_getting_started.md?id=environment-setup). -->
25<!-- #7231:da7d49246: 2. You've set up both [your build environment](newbs_getting_started.md?id=set-up-your-environment) and [QMK](newbs_getting_started.md?id=set-up-qmk). -->
26
271. あなたは GitHub アカウントがあり、アカウントに [qmk_firmware リポジトリをフォーク](getting_started_github.md) している。
282. あなたは、[環境構築](newbs_getting_started.md#環境構築) と [QMK の設定](newbs_getting_started.md#qmk-の設定) を両方とも完了している。
29
30<!-- ## Your fork's master: Update Often, Commit Never -->
31## あなたのフォークの master ブランチ: 更新は頻繁に、コミットはしないこと
32
33<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L3_ -->
34<!-- It is highly recommended for QMK development, regardless of what is being done or where, to keep your `master` branch updated, but ***never*** commit to it. Instead, do all your changes in a development branch and issue pull requests from your branches when you're developing. -->
35QMK の開発では、何がどこで行われているかにかかわらず、`master` ブランチを最新の状態に保つことを強くお勧めします、しかし `master` ブランチには***絶対に直接コミットしないでください***。
36代わりに、あなたのすべての変更は開発ブランチで行い、あなたが開発する時にはそのブランチからプルリクエストを発行します。
37
38<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L5_ -->
39<!-- To reduce the chances of merge conflicts &mdash; instances where two or more users have edited the same part of a file concurrently &mdash; keep your `master` branch relatively up-to-date, and start any new developments by creating a new branch. -->
40マージの競合 &mdash; これは 2人以上のユーザーがファイルの同じ部分をそれぞれ異なる編集をして統合できなくなった状態 &mdash; の可能性を減らすため `master` ブランチをなるべく最新の状態に保ち、新しいブランチを作成して新しい開発を開始します。
41
42<!-- ### Updating your master branch -->
43### あなたの master ブランチを更新する
44
45<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L9_ -->
46<!-- To keep your `master` branch updated, it is recommended to add the QMK Firmware repository ("repo") as a remote repository in git. To do this, open your Git command line interface and enter: -->
47`master` ブランチを最新の状態に保つには、git のリモートリポジトリとして QMK ファームウェアのリポジトリ(以降、QMK リポジトリ)を追加することをお勧めします。
48これを行うには、Git コマンドラインインターフェイスを開き、次のように入力します。
49
50```
51git remote add upstream https://github.com/qmk/qmk_firmware.git
52```
53
54<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L15_ -->
55<!-- To verify that the repository has been added, run `git remote -v`, which should return the following: -->
56リポジトリが追加されたことを確認するには、`git remote -v` を実行します。
57次のように表示されます。(訳注: `upstream` は`上流`という意味です。)
58
59```
60$ git remote -v
61origin https://github.com/<your_username>/qmk_firmware.git (fetch)
62origin https://github.com/<your_username>/qmk_firmware.git (push)
63upstream https://github.com/qmk/qmk_firmware.git (fetch)
64upstream https://github.com/qmk/qmk_firmware.git (push)
65```
66
67<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L25_ -->
68<!-- Now that this is done, you can check for updates to the repo by running `git fetch upstream`. This retrieves the branches and tags &mdash; collectively referred to as "refs" &mdash; from the QMK repo, which now has the nickname `upstream`. We can now compare the data on our fork `origin` to that held by QMK. -->
69これが完了すると、`git fetch upstream` を実行してリポジトリの更新を確認できます。
70このコマンドは `upstream` というニックネームを持つ QMK リポジトリから、ブランチとタグ &mdash; "refs" と総称されます &mdash; を取得します。
71これで、あなたのフォーク `origin` のデータを QMK が保持するデータと比較できます。
72
73<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L27_ -->
74<!-- To update your fork's master, run the following, hitting the Enter key after each line: -->
75あなたのフォークの `master` を更新するには、次を実行します、各行の後にEnterキーを押してください:
76
77```
78git checkout master
79git fetch upstream
80git pull upstream master
81git push origin master
82```
83
84<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L36_ -->
85<!-- This switches you to your `master` branch, retrieves the refs from the QMK repo, downloads the current QMK `master` branch to your computer, and then uploads it to your fork. -->
86これにより、あなたの `master` ブランチに切り替わり、QMK リポジトリから 'refs' を取得し、現在の QMK の `master` ブランチをコンピュータにダウンロードしてから、あなたのフォークにアップロードします。
87
88<!-- ### Making Changes -->
89### 変更を行なう
90
91<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L40_ -->
92<!-- To make changes, create a new branch by entering: -->
93変更するには、以下を入力して新しいブランチを作成します:
94
95```
96git checkout -b dev_branch
97git push --set-upstream origin dev_branch
98```
99
100<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L47_ -->
101<!-- This creates a new branch named `dev_branch`, checks it out, and then saves the new branch to your fork. The `--set-upstream` argument tells git to use your fork and the `dev_branch` branch every time you use `git push` or `git pull` from this branch. It only needs to be used on the first push; after that, you can safely use `git push` or `git pull`, without the rest of the arguments. -->
102これにより、`dev_branch` という名前の新しいブランチが作成され、チェックアウトされ、新しいブランチがあなたのフォークに保存されます。
103`--set-upstream` 引数は、このブランチから `git push` または `git pull` を使用するたびに、あなたのフォークと `dev_branch` ブランチを使用するように git に指示します。
104この引数は最初のプッシュでのみ使用する必要があります。
105その後、残りの引数なしで `git push` または `git pull` を安全に使用できます。
106
107<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L49_ -->
108<!-- With `git push`, you can use `-u` in place of `--set-upstream` &mdash; `-u` is an alias for `--set-upstream`. -->
109!> `git push` では、`-set-upstream` の代わりに `-u` を使用できます、 `-u` は `--set-upstream` のエイリアスです。
110
111<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L51_ -->
112<!-- You can name your branch nearly anything you want, though it is recommended to name it something related to the changes you are going to make. -->
113ブランチにはほぼ任意の名前を付けることができますが、あなたが行なう変更を表す名前を付けることをお勧めします。
114
115<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L53_ -->
116<!-- By default `git checkout -b` will base your new branch on the branch that is checked out. You can base your new branch on an existing branch that is not checked out by adding the name of the existing branch to the command: -->
117デフォルトでは、`git checkout -b`は、今チェックアウトされているブランチに基づいて新しいブランチを作成します。
118コマンド末尾に既存のブランチの名前を追加指定することにより、チェックアウトされていない既存のブランチを基にして新しいブランチを作成できます:
119
120```
121git checkout -b dev_branch master
122```
123
124<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L59_ -->
125<!-- Now that you have a development branch, open your text editor and make whatever changes you need to make. It is recommended to make many small commits to your branch; that way, any change that causes issues can be more easily traced and undone if needed. To make your changes, edit and save any files that need to be updated, add them to Git's *staging area*, and then commit them to your branch: -->
126これで開発ブランチができたのでテキストエディタを開き必要な変更を加えます。
127ブランチに対して多くの小さなコミットを行うことをお勧めします。
128そうすることで、問題を引き起こす変更をより簡単に特定し必要に応じて元に戻すことができます。
129変更を加えるには、更新が必要なファイルを編集して保存し、Git の *ステージングエリア* に追加してから、ブランチにコミットします:
130
131```
132git add path/to/updated_file
133git commit -m "My commit message."
134```
135
136<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L66_ -->
137<!-- `git add` adds files that have been changed to Git's *staging area*, which is Git's "loading zone." This contains the changes that are going to be *committed* by `git commit`, which saves the changes to the repo. Use descriptive commit messages so you can know what was changed at a glance. -->
138`git add`は、変更されたファイルを Git の *ステージングエリア* に追加します。
139これは、Git の「ロードゾーン」です。
140これには、`git commit` によって *コミット* される変更が含まれており、リポジトリへの変更が保存されます。
141変更内容が一目でわかるように、説明的なコミットメッセージを使用します。
142
143<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L68_ -->
144<!-- !> If you've changed a lot of files, but all the files are part of the same change, you can use `git add .` to add all the changed files that are in your current directory, rather than having to add each file individually. -->
145!> 多くのファイルを変更したが、すべてのファイルが同じ変更の一部である場合、各ファイルを個別に追加するのではなく、 `git add .` を使用して、現在のディレクトリにあるすべての変更されたファイルを追加できます。
146
147<!-- ### Publishing Your Changes -->
148### 変更を公開する
149
150<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L72_ -->
151<!-- The last step is to push your changes to your fork. To do this, enter `git push`. Git now publishes the current state of `dev_branch` to your fork. -->
152最後のステップは、変更をフォークにプッシュすることです。これを行うには、`git push`と入力します。
153Git は `dev_branch` の現在の状態をフォークに公開します。
154
155<!-- ## Resolving Merge Conflicts -->
156## マージの競合の解決
157
158<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L3_ -->
159<!-- Sometimes when your work in a branch takes a long time to complete, changes that have been made by others conflict with changes you have made to your branch when you open a pull request. This is called a *merge conflict*, and is what happens when multiple people edit the same parts of the same files. -->
160ブランチでの作業の完了に時間がかかる場合、他の人が行った変更が、プルリクエストを開いたときにブランチに加えた変更と競合することがあります。
161これは *マージの競合* と呼ばれ、複数の人が同じファイルの同じ部分を編集すると発生します。
162
163<!-- ### Rebasing Your Changes -->
164### 変更のリベース
165
166<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L9_ -->
167<!-- A *rebase* is Git's way of taking changes that were applied at one point, reversing them, and then applying the same changes to another point. In the case of a merge conflict, you can rebase your branch to grab the changes that were made between when you created your branch and the present time. -->
168*リベース* は、ある時点で適用された変更を取得し、それらを元に戻し、次に同じ変更を別のポイントに適用する Git の方法です。
169マージの競合が発生した場合、ブランチをリベースして、ブランチを作成してから現在までに行われた変更を取得できます。
170
171<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L11_ -->
172<!-- To start, run the following: -->
173開始するには、次を実行します:
174
175```
176git fetch upstream
177git rev-list --left-right --count HEAD...upstream/master
178```
179
180<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L18_ -->
181<!-- The `git rev-list` command entered here returns the number of commits that differ between the current branch and QMK's master branch. We run `git fetch` first to make sure we have the refs that represent the current state of the upstream repo. The output of the `git rev-list` command entered returns two numbers: -->
182ここに入力された `git rev-list` コマンドは、現在のブランチと QMK の master ブランチで異なるコミットの数を返します。
183最初に `git fetch` を実行して、upstream リポジトリの現在の状態を表す refs があることを確認します。
184入力された `git rev-list` コマンドの出力は2つの数値を返します:
185
186```
187$ git rev-list --left-right --count HEAD...upstream/master
1887 35
189```
190
191<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L25_ -->
192<!-- The first number represents the number of commits on the current branch since it was created, and the second number is the number of commits made to `upstream/master` since the current branch was created, and thus, the changes that are not recorded in the current branch. -->
193最初の数字は、現在のブランチが作成されてからのコミット数を表し、2番目の数字は、現在のブランチが作成されてから `upstream/master` に対して行われたコミットの数であり、したがって、現在のブランチに記録されていない変更です。
194
195<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L27_-->
196<!-- Now that the current states of both the current branch and the upstream repo are known, we can start a rebase operation: -->
197現在のブランチと upstream リポジトリの両方の現在の状態がわかったので、リベース操作を開始できます:
198
199```
200git rebase upstream/master
201```
202
203<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L33_ -->
204<!-- This tells Git to undo the commits on the current branch, and then reapply them against QMK's master branch. -->
205これにより、Git は現在のブランチのコミットを取り消してから、QMK の master ブランチに対してコミットを再適用します。
206
207```
208$ git rebase upstream/master
209First, rewinding head to replay your work on top of it...
210Applying: Commit #1
211Using index info to reconstruct a base tree...
212M conflicting_file_1.txt
213Falling back to patching base and 3-way merge...
214Auto-merging conflicting_file_1.txt
215CONFLICT (content): Merge conflict in conflicting_file_1.txt
216error: Failed to merge in the changes.
217hint: Use 'git am --show-current-patch' to see the failed patch
218Patch failed at 0001 Commit #1
219
220Resolve all conflicts manually, mark them as resolved with
221"git add/rm <conflicted_files>", then run "git rebase --continue".
222You can instead skip this commit: run "git rebase --skip".
223To abort and get back to the state before "git rebase", run "git rebase --abort".
224```
225
226<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L54_ -->
227<!-- This tells us that we have a merge conflict, and gives the name of the file with the conflict. Open the conflicting file in your text editor, and somewhere in the file, you'll find something like this: -->
228これにより、マージの競合があることがわかり、競合のあるファイルの名前が示されます。
229テキストエディタで競合するファイルを開くと、ファイルのどこかに次のような行があります:
230
231```
232<<<<<<< HEAD
233<p>For help with any issues, email us at support@webhost.us.</p>
234=======
235<p>Need help? Email support@webhost.us.</p>
236>>>>>>> Commit #1
237```
238
239<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L64_ -->
240<!-- The line `<<<<<<< HEAD` marks the beginning of a merge conflict, and the `>>>>>>> Commit #1` line marks the end, with the conflicting sections separated by `=======`. The part on the `HEAD` side is from the QMK master version of the file, and the part marked with the commit message is from the current branch and commit. -->
241行 `<<<<<<< HEAD` はマージ競合の始まりを示し、行 `>>>>>>> commit #1` は終了を示し、競合するセクションは `=======` で区切られます。
242`HEAD` 側の部分はファイルの QMK master バージョンからのものであり、コミットメッセージでマークされた部分は現在のブランチとコミットからのものです。
243
244<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L66_ -->
245<!-- Because Git tracks *changes to files* rather than the contents of the files directly, if Git can't find the text that was in the file previous to the commit that was made, it won't know how to edit the file. Re-editing the file will solve the conflict. Make your changes, and then save the file. -->
246Git はファイルの内容ではなく *ファイルへの変更* を直接追跡するため、Git がコミットの前にファイル内にあったテキストを見つけられない場合、ファイルの編集方法がわかりません。
247ファイルを再編集して、競合を解決します。
248変更を加えてから、ファイルを保存します。
249
250```
251<p>Need help? Email support@webhost.us.</p>
252```
253
254そしてコマンド実行:
255
256```
257git add conflicting_file_1.txt
258git rebase --continue
259```
260
261<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L79_ -->
262<!-- Git logs the changes to the conflicting file, and continues applying the commits from our branch until it reaches the end. -->
263Git は、競合するファイルへの変更をログに記録し、ブランチのコミットが最後に達するまで適用し続けます。
diff --git a/docs/ja/newbs_building_firmware.md b/docs/ja/newbs_building_firmware.md
index 5fb10d424..bcbc64a21 100644
--- a/docs/ja/newbs_building_firmware.md
+++ b/docs/ja/newbs_building_firmware.md
@@ -2,8 +2,8 @@
2 2
3<!--- 3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh 4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: ed0575fc8:docs/newbs_building_firmware.md 5 original document: 0f43c2652:docs/newbs_building_firmware.md
6 git diff ed0575fc8 HEAD docs/newbs_building_firmware.md | cat 6 git diff 0f43c2652 HEAD -- docs/newbs_building_firmware.md | cat
7--> 7-->
8 8
9ビルド環境をセットアップしたので、カスタムファームウェアのビルドを開始する準備ができました。 9ビルド環境をセットアップしたので、カスタムファームウェアのビルドを開始する準備ができました。
@@ -56,7 +56,7 @@ macOS または Windows を使用している場合は、キーマップフォ
56 56
57この行はレイヤーのリストの開始を表わしています。 57この行はレイヤーのリストの開始を表わしています。
58その下には、`LAYOUT` または `KEYMAP` のいずれかを含む行があり、これらの行はレイヤーの開始を表わしています。 58その下には、`LAYOUT` または `KEYMAP` のいずれかを含む行があり、これらの行はレイヤーの開始を表わしています。
59その行の下には、その特定イヤーを構成するキーのリストがあります。 59その行の下には、そのレイヤーを構成するキーのリストがあります。
60 60
61!> キーマップファイルを編集するときは、カンマを追加したり削除したりしないように注意してください。そうするとファームウェアのコンパイルができなくなり、余分であったり欠落していたりするカンマがどこにあるのかを容易に把握できない場合があります。 61!> キーマップファイルを編集するときは、カンマを追加したり削除したりしないように注意してください。そうするとファームウェアのコンパイルができなくなり、余分であったり欠落していたりするカンマがどこにあるのかを容易に把握できない場合があります。
62 62
@@ -67,9 +67,9 @@ macOS または Windows を使用している場合は、キーマップフォ
67あるレイヤー全体が必要ない場合はレイヤーを削除することもでき、必要があれば、合計 32 個までレイヤーを追加することもできます。 67あるレイヤー全体が必要ない場合はレイヤーを削除することもでき、必要があれば、合計 32 個までレイヤーを追加することもできます。
68ここで定義できる内容については、次のドキュメントを参照してください。 68ここで定義できる内容については、次のドキュメントを参照してください。
69 69
70* [キーコード](keycodes.md) 70* [キーコード](ja/keycodes.md)
71* [機能](features.md) 71* [機能](ja/features.md)
72* [FAQ](faq.md) 72* [FAQ](ja/faq.md)
73 73
74?> キーマップがどのように機能するかを感じながら、各変更を小さくしてください。大きな変更は、発生する問題のデバッグを困難にします。 74?> キーマップがどのように機能するかを感じながら、各変更を小さくしてください。大きな変更は、発生する問題のデバッグを困難にします。
75 75
@@ -96,4 +96,4 @@ Checking file size of planck_rev5_xyverz.hex
96 96
97## ファームウェアを書きこむ 97## ファームウェアを書きこむ
98 98
99[「ファームウェアを書きこむ」](newbs_flashing.md) に移動して、キーボードに新しいファームウェアを書き込む方法を学習します。 99[「ファームウェアを書きこむ」](ja/newbs_flashing.md) に移動して、キーボードに新しいファームウェアを書き込む方法を学習します。
diff --git a/docs/ja/newbs_building_firmware_configurator.md b/docs/ja/newbs_building_firmware_configurator.md
index b44504ade..ae3d3cf28 100644
--- a/docs/ja/newbs_building_firmware_configurator.md
+++ b/docs/ja/newbs_building_firmware_configurator.md
@@ -3,7 +3,7 @@
3<!--- 3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh 4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: ed0575fc8:docs/newbs_building_firmware_configurator.md 5 original document: ed0575fc8:docs/newbs_building_firmware_configurator.md
6 git diff ed0575fc8 HEAD docs/newbs_building_firmware_configurator.md | cat 6 git diff ed0575fc8 HEAD -- docs/newbs_building_firmware_configurator.md | cat
7--> 7-->
8 8
9[QMK Configurator](https://config.qmk.fm) は、QMKファームウェアの hex ファイルを生成するオンライングラフィカルユーザーインターフェイスです。 9[QMK Configurator](https://config.qmk.fm) は、QMKファームウェアの hex ファイルを生成するオンライングラフィカルユーザーインターフェイスです。
@@ -83,7 +83,7 @@ QMK Configurator は Chrome/Firefox で最適に動作します。
83 83
84## キーボードに書き込む(フラッシュする) 84## キーボードに書き込む(フラッシュする)
85 85
86[ファームウェアを書きこむ](newbs_flashing.md) を参照してください。 86[ファームウェアを書きこむ](ja/newbs_flashing.md) を参照してください。
87 87
88## トラブルシューティング 88## トラブルシューティング
89 89
diff --git a/docs/ja/newbs_flashing.md b/docs/ja/newbs_flashing.md
index 0c85514cf..f2ca914ee 100644
--- a/docs/ja/newbs_flashing.md
+++ b/docs/ja/newbs_flashing.md
@@ -3,7 +3,7 @@
3<!--- 3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh 4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: ed0575fc8:docs/newbs_flashing.md 5 original document: ed0575fc8:docs/newbs_flashing.md
6 git diff ed0575fc8 HEAD docs/newbs_flashing.md | cat 6 git diff ed0575fc8 HEAD -- docs/newbs_flashing.md | cat
7--> 7-->
8 8
9カスタムファームウェアは出来たので、キーボードに書き込みたくなるでしょう/フラッシュしたくなるでしょう。 9カスタムファームウェアは出来たので、キーボードに書き込みたくなるでしょう/フラッシュしたくなるでしょう。
@@ -13,7 +13,7 @@
13キーボードに書き込む最も簡単な方法は [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) を使うことです。 13キーボードに書き込む最も簡単な方法は [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) を使うことです。
14 14
15ただし、QMK Toolbox は、現在は Windows と macOS でしか使えません。 15ただし、QMK Toolbox は、現在は Windows と macOS でしか使えません。
16Linuxを使用している場合(および、コマンドラインでファームウェアを書き込みたい場合)は、下の方で概説する[方法](newbs_flashing.md#コマンドラインでファームウェアを書き込む)で行なう必要があります。 16Linuxを使用している場合(および、コマンドラインでファームウェアを書き込みたい場合)は、下の方で概説する[方法](ja/newbs_flashing.md#flash-your-keyboard-from-the-command-line)で行なう必要があります。
17 17
18### QMK Toolbox にファイルをロードする 18### QMK Toolbox にファイルをロードする
19 19
@@ -98,7 +98,7 @@ QMK Toolbox の `Flash` ボタンをクリックします。
98*** Clueboard - Clueboard 66% HotSwap connected -- 0xC1ED:0x2390 98*** Clueboard - Clueboard 66% HotSwap connected -- 0xC1ED:0x2390
99``` 99```
100 100
101## コマンドラインでファームウェアを書き込む 101## コマンドラインでファームウェアを書き込む :id=flash-your-keyboard-from-the-command-line
102 102
103これは、以前のものと比較して非常に単純になりました。 103これは、以前のものと比較して非常に単純になりました。
104ファームウェアをコンパイルして書き込む準備ができたら、ターミナルウィンドウを開いてビルドコマンドを実行します。 104ファームウェアをコンパイルして書き込む準備ができたら、ターミナルウィンドウを開いてビルドコマンドを実行します。
@@ -123,7 +123,7 @@ QMK Toolbox の `Flash` ボタンをクリックします。
123ブートローダは主に 5 種類のものが使われています。 123ブートローダは主に 5 種類のものが使われています。
124Pro Micro とそのクローンは Caterina を、Teensy は HalfKay を、OLKBの AVR ボードは QMK-DFU を、その他の ATmega32U4 ボードは DFU を、そして多くの ARM ボードは ARM DFU を使います。 124Pro Micro とそのクローンは Caterina を、Teensy は HalfKay を、OLKBの AVR ボードは QMK-DFU を、その他の ATmega32U4 ボードは DFU を、そして多くの ARM ボードは ARM DFU を使います。
125 125
126より詳しいブートローダの情報は、[Flashing Instructions and Bootloader Information](flashing.md) にあります。 126より詳しいブートローダの情報は、[Flashing Instructions and Bootloader Information](ja/flashing.md) にあります。
127 127
128使用しているブートローダがわかっているならば、ファームウェアをコンパイルするときに、実は `make` コマンドにブートローダを指定するテキストを追加して、書き込みプロセスを自動化できます。 128使用しているブートローダがわかっているならば、ファームウェアをコンパイルするときに、実は `make` コマンドにブートローダを指定するテキストを追加して、書き込みプロセスを自動化できます。
129 129
@@ -172,7 +172,7 @@ Checking file size of planck_rev5_xyverz.hex
172>>> dfu-programmer atmega32u4 reset 172>>> dfu-programmer atmega32u4 reset
173``` 173```
174 174
175?> `dfu-programmer:no device present` など、これに関する問題がある場合は、[よくある質問](faq_build.md) を参照してください。 175?> `dfu-programmer:no device present` など、これに関する問題がある場合は、[よくある質問](ja/faq_build.md) を参照してください。
176 176
177#### DFU コマンド 177#### DFU コマンド
178 178
@@ -397,4 +397,4 @@ Uploading 22016 (0x5600) bytes starting at 0 (0x0)
397おめでとうございます! カスタムファームウェアがキーボードにプログラムされました! 397おめでとうございます! カスタムファームウェアがキーボードにプログラムされました!
398 398
399使ってみて、すべてがあなたの望むように動作するかどうか確認してください。 399使ってみて、すべてがあなたの望むように動作するかどうか確認してください。
400この初心者ガイドを完全なものにするために [テストとデバッグ](newbs_testing_debugging.md) を書いたので、カスタム機能のトラブルシューティング方法については、こちらをご覧ください。 400この初心者ガイドを完全なものにするために [テストとデバッグ](ja/newbs_testing_debugging.md) を書いたので、カスタム機能のトラブルシューティング方法については、こちらをご覧ください。
diff --git a/docs/ja/newbs_getting_started.md b/docs/ja/newbs_getting_started.md
index a57e6e054..6f5cd92cd 100644
--- a/docs/ja/newbs_getting_started.md
+++ b/docs/ja/newbs_getting_started.md
@@ -2,8 +2,8 @@
2 2
3<!--- 3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh 4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: docs/newbs_getting_started.md 5 original document: 161d469:docs/newbs_getting_started.md
6 git diff 161d469 HEAD docs/newbs_getting_started.md | cat 6 git diff 161d469 HEAD -- docs/newbs_getting_started.md | cat
7--> 7-->
8 8
9キーボードにはプロセッサが入っており、それはコンピュータに入っているものと大して違わないものです。 9キーボードにはプロセッサが入っており、それはコンピュータに入っているものと大して違わないものです。
@@ -20,7 +20,7 @@ QMK は、簡単なことは簡単に、そして、難しいことを可能な
20ファームウェアをコンパイルするキーボードの数に関わらず、この作業を一度だけ実行する必要があります。 20ファームウェアをコンパイルするキーボードの数に関わらず、この作業を一度だけ実行する必要があります。
21 21
22もし、GUI で作業をしたい場合、オンラインで作業できる [QMK Configurator](https://config.qmk.fm) を使ってください。 22もし、GUI で作業をしたい場合、オンラインで作業できる [QMK Configurator](https://config.qmk.fm) を使ってください。
23使い方は [Building Your First Firmware using the online GUI](newbs_building_firmware_configurator.md) を参照してください。 23使い方は [オンライン GUI を使用して初めてのファームウェアを構築する](ja/newbs_building_firmware_configurator.md) を参照してください。
24 24
25## ソフトウェアのダウンロード 25## ソフトウェアのダウンロード
26 26
@@ -45,7 +45,7 @@ QMK Toolbox は、Windows と macOS で使える GUI を備えたプログラム
45* Windows 版: `qmk_toolbox.exe` (portable) または `qmk_toolbox_install.exe` (installer) 45* Windows 版: `qmk_toolbox.exe` (portable) または `qmk_toolbox_install.exe` (installer)
46* macOS 版: `QMK.Toolbox.app.zip` (portable) または `QMK.Toolbox.pkg` (installer) 46* macOS 版: `QMK.Toolbox.app.zip` (portable) または `QMK.Toolbox.pkg` (installer)
47 47
48## 環境構築 48## 環境構築 :id=set-up-your-environment
49 49
50私たちは、QMK を可能な限り簡単に構築できるように努力しています。 50私たちは、QMK を可能な限り簡単に構築できるように努力しています。
51Linux か Unix 環境を用意するだけで、QMK に残りをインストールさせることができます。 51Linux か Unix 環境を用意するだけで、QMK に残りをインストールさせることができます。
@@ -77,9 +77,9 @@ Git のインストールが必要です。既にインストールされてい
77* Fedora / Red Hat / CentOS: `yum install git` 77* Fedora / Red Hat / CentOS: `yum install git`
78* Arch: `pacman -S git` 78* Arch: `pacman -S git`
79 79
80?> 全てのプラットフォームにおいて、Docker を使うことも可能です。[詳細はこちらをクリックしてください](getting_started_build_tools.md#docker)。 80?> 全てのプラットフォームにおいて、Docker を使うことも可能です。[詳細はこちらをクリックしてください](ja/getting_started_build_tools.md#docker)。
81 81
82## QMK の設定 82## QMK の設定 :id=set-up-qmk
83 83
84Linux/Unix 環境が準備できたら QMK のダウンロードの準備は完了です。Git を使用して QMK のリポジトリを「クローン」することで QMK をダウンロードします。ターミナルか MSYS2 MinGW ウィンドウを開いて、このガイドの残りの部分では開いたままにします。そのウィンドウ内で、次の2つのコマンドを実行します。 84Linux/Unix 環境が準備できたら QMK のダウンロードの準備は完了です。Git を使用して QMK のリポジトリを「クローン」することで QMK をダウンロードします。ターミナルか MSYS2 MinGW ウィンドウを開いて、このガイドの残りの部分では開いたままにします。そのウィンドウ内で、次の2つのコマンドを実行します。
85 85
@@ -88,7 +88,7 @@ git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
88cd qmk_firmware 88cd qmk_firmware
89``` 89```
90 90
91?> 既に [GitHub の使いかた](getting_started_github.md)を知っているなら、clone ではなく fork を勧めます。この一文の意味が分からない場合、このメッセージは無視してかまいません。 91?> 既に [GitHub の使いかた](ja/getting_started_github.md)を知っているなら、clone ではなく fork を勧めます。この一文の意味が分からない場合、このメッセージは無視してかまいません。
92 92
93QMK には、必要な残りの設定を手助けするスクリプトが含まれています。 93QMK には、必要な残りの設定を手助けするスクリプトが含まれています。
94セットアップ作業を完了させるため、次のコマンドを実行します。 94セットアップ作業を完了させるため、次のコマンドを実行します。
@@ -119,4 +119,4 @@ Checking file size of clueboard_66_rev3_default.hex
119# キーマップの作成 119# キーマップの作成
120 120
121これであなた専用のキーマップを作成する準備ができました! 121これであなた専用のキーマップを作成する準備ができました!
122次は [Building Your First Firmware](newbs_building_firmware.md) で専用のキーマップを作成します。 122次は [Building Your First Firmware](ja/newbs_building_firmware.md) で専用のキーマップを作成します。
diff --git a/docs/ja/newbs_git_best_practices.md b/docs/ja/newbs_git_best_practices.md
new file mode 100644
index 000000000..4e20e4e0b
--- /dev/null
+++ b/docs/ja/newbs_git_best_practices.md
@@ -0,0 +1,24 @@
1# QMK における Git 運用作法 :id=best-git-practices-for-working-with-qmk
2
3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: adf4acf59:docs/newbs_git_best_practices.md
6 git diff adf4acf59 HEAD -- docs/newbs_git_best_practices.md | cat
7-->
8
9## または、"如何にして私は心配することをやめて Git を愛することを学んだか。"
10
11このセクションは、QMK への貢献をスムーズに行なう最もよい方法を初心者に教えることを目的としています。
12QMK に貢献するプロセスを順を追って説明し、この作業を簡単にするいくつかの方法を詳しく説明します。
13その後、意図的に一部を壊してみせて、それらを修正する方法を説明します。
14
15このセクションは以下のことを前提としています:
16
171. あなたは GitHub アカウントがあり、アカウントに [qmk_firmware リポジトリをフォーク](ja/getting_started_github.md) している。
182. あなたは、[環境構築](ja/newbs_getting_started.md#set-up-your-environment) と [QMK の設定](ja/newbs_getting_started.md#set-up-qmk) を両方とも完了している。
19
20---
21
22- パート 1: [あなたのフォークの master ブランチ: 更新は頻繁に、コミットはしないこと](ja/newbs_git_using_your_master_branch.md)
23- パート 2: [マージの競合の解決](ja/newbs_git_resolving_merge_conflicts.md)
24- パート 3: [同期のとれていない git ブランチの再同期](ja/newbs_git_resynchronize_a_branch.md)
diff --git a/docs/ja/newbs_git_resolving_merge_conflicts.md b/docs/ja/newbs_git_resolving_merge_conflicts.md
new file mode 100644
index 000000000..893c3d503
--- /dev/null
+++ b/docs/ja/newbs_git_resolving_merge_conflicts.md
@@ -0,0 +1,94 @@
1# マージの競合の解決
2
3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: adf4acf59:docs/newbs_git_resolving_merge_conflicts.md
6 git diff adf4acf59 HEAD -- docs/newbs_git_resolving_merge_conflicts.md | cat
7-->
8
9ブランチでの作業の完了に時間がかかる場合、他の人が行った変更が、プルリクエストを開いたときにブランチに加えた変更と競合することがあります。
10これは *マージの競合* と呼ばれ、複数の人が同じファイルの同じ部分を編集すると発生します。
11
12?> このドキュメントは [あなたのフォークの master ブランチ: 更新は頻繁に、コミットはしないこと](ja/newbs_git_using_your_master_branch.md) で詳述されている概念に基づいています。
13その概念に慣れていない場合は、まずそれを読んでから、ここに戻ってください。
14
15## 変更のリベース
16
17*リベース* は、コミット履歴のある時点で適用された変更を取得し、それらを元に戻し、次に同じ変更を別のポイントに適用する Git の方法です。
18マージの競合が発生した場合、ブランチをリベースして、ブランチを作成してから現在までに行われた変更を取得できます。
19
20開始するには、次を実行します:
21
22```
23git fetch upstream
24git rev-list --left-right --count HEAD...upstream/master
25```
26
27ここに入力された `git rev-list` コマンドは、現在のブランチと QMK の master ブランチで異なるコミットの数を返します。
28最初に `git fetch` を実行して、upstream リポジトリの現在の状態を表す refs があることを確認します。
29入力された `git rev-list` コマンドの出力は2つの数値を返します:
30
31```
32$ git rev-list --left-right --count HEAD...upstream/master
337 35
34```
35
36最初の数字は、現在のブランチが作成されてからのコミット数を表し、2番目の数字は、現在のブランチが作成されてから `upstream/master` に対して行われたコミットの数であり、したがって、現在のブランチに記録されていない変更です。
37
38現在のブランチと upstream リポジトリの両方の現在の状態がわかったので、リベース操作を開始できます:
39
40```
41git rebase upstream/master
42```
43
44これにより、Git は現在のブランチのコミットを取り消してから、QMK の master ブランチに対してコミットを再適用します。
45
46```
47$ git rebase upstream/master
48First, rewinding head to replay your work on top of it...
49Applying: Commit #1
50Using index info to reconstruct a base tree...
51M conflicting_file_1.txt
52Falling back to patching base and 3-way merge...
53Auto-merging conflicting_file_1.txt
54CONFLICT (content): Merge conflict in conflicting_file_1.txt
55error: Failed to merge in the changes.
56hint: Use 'git am --show-current-patch' to see the failed patch
57Patch failed at 0001 Commit #1
58
59Resolve all conflicts manually, mark them as resolved with
60"git add/rm <conflicted_files>", then run "git rebase --continue".
61You can instead skip this commit: run "git rebase --skip".
62To abort and get back to the state before "git rebase", run "git rebase --abort".
63```
64
65これにより、マージの競合があることがわかり、競合のあるファイルの名前が示されます。
66テキストエディタで競合するファイルを開くと、ファイルのどこかに次のような行があります:
67
68```
69<<<<<<< HEAD
70<p>For help with any issues, email us at support@webhost.us.</p>
71=======
72<p>Need help? Email support@webhost.us.</p>
73>>>>>>> Commit #1
74```
75
76行 `<<<<<<< HEAD` はマージ競合の始まりを示し、行 `>>>>>>> commit #1` は終了を示し、競合するセクションは `=======` で区切られます。
77`HEAD` 側の部分はファイルの QMK master バージョンからのものであり、コミットメッセージでマークされた部分は現在のブランチとコミットからのものです。
78
79Git はファイルの内容ではなく *ファイルへの変更* を直接追跡するため、Git がコミットの前にファイル内にあったテキストを見つけられない場合、ファイルの編集方法がわかりません。
80ファイルを再編集して、競合を解決します。
81変更を加えてから、ファイルを保存します。
82
83```
84<p>Need help? Email support@webhost.us.</p>
85```
86
87そしてコマンド実行:
88
89```
90git add conflicting_file_1.txt
91git rebase --continue
92```
93
94Git は、競合するファイルへの変更をログに記録し、ブランチのコミットが最後に達するまで適用し続けます。
diff --git a/docs/ja/newbs_git_resynchronize_a_branch.md b/docs/ja/newbs_git_resynchronize_a_branch.md
new file mode 100644
index 000000000..80ae794a9
--- /dev/null
+++ b/docs/ja/newbs_git_resynchronize_a_branch.md
@@ -0,0 +1,88 @@
1# 同期のとれていない git ブランチの再同期
2
3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: adf4acf59:docs/newbs_git_resynchronize_a_branch.md
6 git diff adf4acf59 HEAD -- docs/newbs_git_resynchronize_a_branch.md | cat
7-->
8
9仮にあなたの `master` ブランチにあなたのコミットを行い、そしてあなたの QMK リポジトリの更新が必要になったとします。
10(フォーク元の) QMKの `master` ブランチをあなたの `master` ブランチに `git pull` することもできますが、GitHub は、あなたのブランチが `qmk:master` より何コミットか先行していると通知します、この状態で QMK にプルリクエストを行う場合、問題が発生する可能性があります。
11(訳注:この通知は、GitHub のあなたのリポジトリの code ペインのブランチ選択メニューの下のあたりで `This branch is 3 commit ahead of qmk:master` という様な文面で表示されています。)
12
13?> このドキュメントは [あなたのフォークの master ブランチ: 更新は頻繁に、コミットはしないこと](ja/newbs_git_using_your_master_branch.md) で詳述されている概念に基づいています。その概念に慣れていない場合は、まずそれを読んでから、ここに戻ってください。
14(訳注:この文書で言う、「同期のとれていない git ブランチ」とは、master ブランチに関する、この「コミットしない」方針を逸脱して、QMK の master リポジトリに存在しないコミットがあなたのフォークの master ブランチに入っている状態を指します。)
15
16## あなた自身の `master` ブランチでの変更のバックアップ(オプション)
17
18救えるものなら自分の行った変更を失いたくはないでしょう。
19あなたの `master` ブランチに既に加えた変更を保存したい場合、最も簡単な方法は、単に「ダーティな」`master` ブランチの複製を作成することです:
20
21```sh
22git branch old_master master
23```
24
25これで、 `master` ブランチの複製である `old_master` という名前のブランチができました。
26
27## あなたのブランチの再同期
28
29さあ、`master` ブランチを再同期します。
30この手順では、QMK のリポジトリを git のリモートリポジトリとして設定する必要があります。
31設定済みのリモートリポジトリを確認するには、`git remote -v` を実行し、次のような結果が返されなければなりません。
32
33```sh
34QMKuser ~/qmk_firmware (master)
35$ git remote -v
36origin https://github.com/<your_username>/qmk_firmware.git (fetch)
37origin https://github.com/<your_username>/qmk_firmware.git (push)
38upstream https://github.com/qmk/qmk_firmware.git (fetch)
39upstream https://github.com/qmk/qmk_firmware.git (push)
40```
41
42もし、上記のようにならずに以下のように参照されるフォークが、1つだけ表示される場合:
43
44```sh
45QMKuser ~/qmk_firmware (master)
46$ git remote -v
47origin https://github.com/qmk/qmk_firmware.git (fetch)
48origin https://github.com/qmk/qmk_firmware.git (push)
49```
50
51新しいリモートリポジトリを追加します:
52
53```sh
54git remote add upstream https://github.com/qmk/qmk_firmware.git
55```
56
57次に、`origin` リモートリポジトリを、あなた自身のフォークにリダイレクトします:
58
59```sh
60git remote set-url origin https://github.com/<あなたのユーザ名>/qmk_firmware.git
61```
62
63両方のリモートリポジトリが設定されたので、次を実行して、QMK である `upstream` リポジトリの参照を更新する必要があります。
64
65```sh
66git fetch upstream
67```
68
69この時点で、次を実行してあなたの(訳注:master)ブランチを QMK のブランチに再同期します。
70(訳注: 今現在 `master` ブランチがチェックアウトされていなければなりません。
71 そうなってなければ、`git checkout master` を先に実行しておく必要があります。)
72
73```sh
74git reset --hard upstream/master
75```
76
77これらの手順により、あなたのコンピュータ上のリポジトリが更新されますが、あなたの GitHub 上のフォークはまだ同期されていません。
78GitHub 上のフォークを再同期するには、あなたのフォークにプッシュして、ローカルリポジトリに反映されていないリモート変更をオーバーライドするように Git に指示する必要があります。
79これを行うには、次を実行します:
80
81```sh
82git push --force-with-lease
83```
84
85!> 他のユーザーがコミットを投稿するフォークで `git push --force-with-lease` を**実行しないでください**。これをすると、かれらのコミットが消去されてしまいます。
86
87これで、あなたの GitHub フォーク、あなたのローカルファイル、および QMK のリポジトリはすべて同じになりました。
88ここから、[ブランチを使って](ja/newbs_git_using_your_master_branch.md#making-changes)さらに必要な変更を加え、通常どおりそれらを投稿できます。
diff --git a/docs/ja/newbs_git_using_your_master_branch.md b/docs/ja/newbs_git_using_your_master_branch.md
new file mode 100644
index 000000000..086005034
--- /dev/null
+++ b/docs/ja/newbs_git_using_your_master_branch.md
@@ -0,0 +1,101 @@
1# あなたのフォークの master ブランチ: 更新は頻繁に、コミットはしないこと
2
3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: adf4acf59:docs/newbs_git_using_your_master_branch.md
6 git diff adf4acf59 HEAD -- docs/newbs_git_using_your_master_branch.md | cat
7-->
8
9QMK の開発では、何がどこで行われているかにかかわらず、`master` ブランチを最新の状態に保つことを強くお勧めします、しかし `master` ブランチには***絶対に直接コミットしないでください***。
10代わりに、あなたのすべての変更は開発ブランチで行い、あなたが開発する時にはそのブランチからプルリクエストを発行します。
11
12マージの競合 &mdash; これは 2人以上のユーザーがファイルの同じ部分をそれぞれ異なる編集をして統合できなくなった状態 &mdash; の可能性を減らすため `master` ブランチをなるべく最新の状態に保ち、新しいブランチを作成して新しい開発を開始します。
13
14## あなたの master ブランチを更新する
15
16`master` ブランチを最新の状態に保つには、git のリモートリポジトリとして QMK ファームウェアのリポジトリ(以降、QMK リポジトリ)を追加することをお勧めします。
17これを行うには、Git コマンドラインインターフェイスを開き、次のように入力します。
18
19```
20git remote add upstream https://github.com/qmk/qmk_firmware.git
21```
22
23?> `upstream`(訳注: `upstream` は`上流`という意味です)という名前は任意ですが、一般的な慣習です。
24QMK のリモートリポジトリには、あなたにとって分かりやすい名前を付けることができます。
25Git の `remote` コマンドは、構文 `git remote add <name> <url>` を使用します。
26`<name>` はリモートリポジトリの省略形としてあなたが指定するものです。
27この名前は、`fetch`、`pull`、`push` やそれ以外の多くの Git コマンドで、対象のリモートリポジトリを指定するために使用されます。
28
29リポジトリが追加されたことを確認するには、`git remote -v` を実行します。
30次のように表示されます。
31
32```
33$ git remote -v
34origin https://github.com/<your_username>/qmk_firmware.git (fetch)
35origin https://github.com/<your_username>/qmk_firmware.git (push)
36upstream https://github.com/qmk/qmk_firmware.git (fetch)
37upstream https://github.com/qmk/qmk_firmware.git (push)
38```
39
40これが完了すると、`git fetch upstream` を実行してリポジトリの更新を確認できます。
41このコマンドは `upstream` というニックネームを持つ QMK リポジトリから、ブランチとタグ &mdash; "refs" と総称されます &mdash; を取得します。
42これで、あなたのフォーク `origin` のデータを QMK が保持するデータと比較できます。
43
44あなたのフォークの `master` を更新するには、次を実行します、各行の後にEnterキーを押してください:
45
46```
47git checkout master
48git fetch upstream
49git pull upstream master
50git push origin master
51```
52
53これにより、あなたの `master` ブランチに切り替わり、QMK リポジトリから 'refs' を取得し、現在の QMK の `master` ブランチをコンピュータにダウンロードしてから、あなたのフォークにアップロードします。
54
55## 変更を行なう :id=making-changes
56
57変更するには、以下を入力して新しいブランチを作成します:
58
59```
60git checkout -b dev_branch
61git push --set-upstream origin dev_branch
62```
63
64これにより、`dev_branch` という名前の新しいブランチが作成され、チェックアウトされ、新しいブランチがあなたのフォークに保存されます。
65`--set-upstream` 引数は、このブランチから `git push` または `git pull` を使用するたびに、あなたのフォークと `dev_branch` ブランチを使用するように git に指示します。
66この引数は最初のプッシュでのみ使用する必要があります。
67その後、残りの引数なしで `git push` または `git pull` を安全に使用できます。
68
69?> `git push` では、`-set-upstream` の代わりに `-u` を使用できます、 `-u` は `--set-upstream` のエイリアスです。
70
71ブランチにはほぼ任意の名前を付けることができますが、あなたが行なう変更を表す名前を付けることをお勧めします。
72
73デフォルトでは、`git checkout -b`は、今チェックアウトされているブランチに基づいて新しいブランチを作成します。
74コマンド末尾に既存のブランチの名前を追加指定することにより、チェックアウトされていない既存のブランチを基にして新しいブランチを作成できます:
75
76```
77git checkout -b dev_branch master
78```
79
80これで開発ブランチができたのでテキストエディタを開き必要な変更を加えます。
81ブランチに対して多くの小さなコミットを行うことをお勧めします。
82そうすることで、問題を引き起こす変更をより簡単に特定し必要に応じて元に戻すことができます。
83変更を加えるには、更新が必要なファイルを編集して保存し、Git の *ステージングエリア* に追加してから、ブランチにコミットします:
84
85```
86git add path/to/updated_file
87git commit -m "My commit message."
88```
89
90`git add`は、変更されたファイルを Git の *ステージングエリア* に追加します。
91これは、Git の「ロードゾーン」です。
92これには、`git commit` によって *コミット* される変更が含まれており、リポジトリへの変更が保存されます。
93変更内容が一目でわかるように、説明的なコミットメッセージを使用します。
94
95?> 複数のファイルを変更した場合、`git add -- path/to/file1 path/to/file2 ...` を実行すれば、あなたの望むファイルを追加できます。
96
97## 変更を公開する
98
99最後のステップは、変更をフォークにプッシュすることです。
100これを行うには、`git push`と入力します。
101Gitは、 `dev_branch`の現在の状態をフォークに公開します。
diff --git a/docs/ja/newbs_learn_more_resources.md b/docs/ja/newbs_learn_more_resources.md
index 632cd9100..9adcf5360 100644
--- a/docs/ja/newbs_learn_more_resources.md
+++ b/docs/ja/newbs_learn_more_resources.md
@@ -3,7 +3,7 @@
3<!--- 3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh 4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: ed0575fc8:docs/newbs_learn_more_resources.md 5 original document: ed0575fc8:docs/newbs_learn_more_resources.md
6 git diff ed0575fc8 HEAD docs/newbs_learn_more_resources.md | cat 6 git diff ed0575fc8 HEAD -- docs/newbs_learn_more_resources.md | cat
7--> 7-->
8 8
9これらのリソースは、QMKコミュニティの新しいメンバーに、初心者向けドキュメントで提供されている情報に対する理解を深めることを目的としています。 9これらのリソースは、QMKコミュニティの新しいメンバーに、初心者向けドキュメントで提供されている情報に対する理解を深めることを目的としています。
@@ -21,6 +21,10 @@
21 21
22_日本語のリソース情報を募集中です。_ 22_日本語のリソース情報を募集中です。_
23 23
24* [Git Game To Learn From Examples(日本語対応有り)](https://learngitbranching.js.org/)
25* [QMK で Github を使う方法](ja/getting_started_github.md)
26* [貢献方法](ja/contributing.md)
27
24## コマンドラインに関するリソース: 28## コマンドラインに関するリソース:
25 29
26### 英語 30### 英語
diff --git a/docs/ja/newbs_testing_debugging.md b/docs/ja/newbs_testing_debugging.md
index a96406187..5ec5811a1 100644
--- a/docs/ja/newbs_testing_debugging.md
+++ b/docs/ja/newbs_testing_debugging.md
@@ -3,7 +3,7 @@
3<!--- 3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh 4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: ed0575fc8:docs/newbs_testing_debugging.md 5 original document: ed0575fc8:docs/newbs_testing_debugging.md
6 git diff ed0575fc8 HEAD docs/newbs_testing_debugging.md | cat 6 git diff ed0575fc8 HEAD -- docs/newbs_testing_debugging.md | cat
7--> 7-->
8 8
9カスタムファームウェアをキーボードへ書き込んだら、テストする準備が整います。運が良ければ全て問題なく動作しているはずですが、もしそうでなければこのドキュメントがどこが悪いのか調べるのに役立ちます。 9カスタムファームウェアをキーボードへ書き込んだら、テストする準備が整います。運が良ければ全て問題なく動作しているはずですが、もしそうでなければこのドキュメントがどこが悪いのか調べるのに役立ちます。
@@ -22,7 +22,7 @@
22 22
23## デバッグ 23## デバッグ
24 24
25`rules.mk`へ`CONSOLE_ENABLE = yes`の設定をするとキーボードはデバッグ情報を出力します。デフォルトの出力は非常に限られたものですが、デバッグモードをオンにすることでデバッグ情報の量を増やすことが出来ます。キーマップの`DEBUG`キーコードを使用するか、デバッグモードを有効にする [Command](feature_command.md) 機能を使用するか、以下のコードをキーマップに追加します。 25`rules.mk`へ`CONSOLE_ENABLE = yes`の設定をするとキーボードはデバッグ情報を出力します。デフォルトの出力は非常に限られたものですが、デバッグモードをオンにすることでデバッグ情報の量を増やすことが出来ます。キーマップの`DEBUG`キーコードを使用するか、デバッグモードを有効にする [Command](ja/feature_command.md) 機能を使用するか、以下のコードをキーマップに追加します。
26 26
27```c 27```c
28void keyboard_post_init_user(void) { 28void keyboard_post_init_user(void) {
@@ -46,7 +46,7 @@ void keyboard_post_init_user(void) {
46 46
47## 独自のデバッグメッセージを送信する 47## 独自のデバッグメッセージを送信する
48 48
49[custom code](custom_quantum_functions.md)内からデバッグメッセージを出力すると便利な場合があります。それはとても簡単です。ファイルの先頭に`print.h`のインクルードを追加します: 49[custom code](ja/custom_quantum_functions.md)内からデバッグメッセージを出力すると便利な場合があります。それはとても簡単です。ファイルの先頭に`print.h`のインクルードを追加します:
50 50
51 #include <print.h> 51 #include <print.h>
52 52
@@ -59,7 +59,7 @@ void keyboard_post_init_user(void) {
59 59
60## デバッグの例 60## デバッグの例
61 61
62以下は現実世界での実際のデバッグ手法の例を集めたものです。追加情報は[Debugging/Troubleshooting QMK](faq_debug.md)を参照してください。 62以下は現実世界での実際のデバッグ手法の例を集めたものです。追加情報は[Debugging/Troubleshooting QMK](ja/faq_debug.md)を参照してください。
63 63
64### マトリックス上のどの場所でキー押下が起こったか? 64### マトリックス上のどの場所でキー押下が起こったか?
65 65
diff --git a/docs/keycodes.md b/docs/keycodes.md
index fa01df63d..dd4c4418b 100644
--- a/docs/keycodes.md
+++ b/docs/keycodes.md
@@ -214,18 +214,8 @@ This is a reference only. Each group of keys links to the page documenting their
214|`DEBUG` | |Toggle debug mode | 214|`DEBUG` | |Toggle debug mode |
215|`EEPROM_RESET` |`EEP_RST` |Resets EEPROM state by reinitializing it | 215|`EEPROM_RESET` |`EEP_RST` |Resets EEPROM state by reinitializing it |
216|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, <code>&#96;</code> when pressed with Shift or GUI| 216|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, <code>&#96;</code> when pressed with Shift or GUI|
217|`KC_LSPO` | |Left Shift when held, `(` when tapped |
218|`KC_RSPC` | |Right Shift when held, `)` when tapped |
219|`KC_LCPO` | |Left Control when held, `(` when tapped |
220|`KC_RCPC` | |Right Control when held, `)` when tapped |
221|`KC_LAPO` | |Left Alt when held, `(` when tapped |
222|`KC_RAPC` | |Right Alt when held, `)` when tapped |
223|`KC_SFTENT` | |Right Shift when held, Enter when tapped |
224|`KC_LEAD` | |The [Leader key](feature_leader_key.md) | 217|`KC_LEAD` | |The [Leader key](feature_leader_key.md) |
225|`KC_LOCK` | |The [Lock key](feature_key_lock.md) | 218|`KC_LOCK` | |The [Lock key](feature_key_lock.md) |
226|`FUNC(n)` |`F(n)` |Call `fn_action(n)` (deprecated) |
227|`M(n)` | |Call macro `n` |
228|`MACROTAP(n)` | |Macro-tap `n` idk FIXME |
229 219
230## [Audio Keys](feature_audio.md) 220## [Audio Keys](feature_audio.md)
231 221
@@ -257,37 +247,37 @@ This is a reference only. Each group of keys links to the page documenting their
257 247
258## [Bootmagic](feature_bootmagic.md) 248## [Bootmagic](feature_bootmagic.md)
259 249
260|Key |Aliases |Description | 250|Key |Aliases |Description |
261|----------------------------------|---------|-------------------------------------------| 251|----------------------------------|---------|--------------------------------------------------------------------------|
262|`MAGIC_SWAP_CONTROL_CAPSLOCK` | |Swap Caps Lock and Left Control | 252|`MAGIC_SWAP_CONTROL_CAPSLOCK` |`CL_SWAP`|Swap Caps Lock and Left Control |
263|`MAGIC_CAPSLOCK_TO_CONTROL` | |Treat Caps Lock as Control | 253|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` |`CL_NORM`|Unswap Caps Lock and Left Control |
264|`MAGIC_SWAP_LCTL_LGUI` | |Swap Left Control and GUI | 254|`MAGIC_CAPSLOCK_TO_CONTROL` |`CL_CTRL`|Treat Caps Lock as Control |
265|`MAGIC_SWAP_RCTL_RGUI` | |Swap Right Control and GUI | 255|`MAGIC_UNCAPSLOCK_TO_CONTROL` |`CL_CAPS`|Stop treating Caps Lock as Control |
266|`MAGIC_SWAP_LALT_LGUI` | |Swap Left Alt and GUI | 256|`MAGIC_SWAP_LCTL_LGUI` |`LCG_SWP`|Swap Left Control and GUI |
267|`MAGIC_SWAP_RALT_RGUI` | |Swap Right Alt and GUI | 257|`MAGIC_UNSWAP_LCTL_LGUI` |`LCG_NRM`|Unswap Left Control and GUI |
268|`MAGIC_NO_GUI` | |Disable the GUI key | 258|`MAGIC_SWAP_RCTL_RGUI` |`RCG_SWP`|Swap Right Control and GUI |
269|`MAGIC_SWAP_GRAVE_ESC` | |Swap <code>&#96;</code> and Escape | 259|`MAGIC_UNSWAP_RCTL_RGUI` |`RCG_NRM`|Unswap Right Control and GUI |
270|`MAGIC_SWAP_BACKSLASH_BACKSPACE` | |Swap `\` and Backspace | 260|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Control and GUI on both sides |
271|`MAGIC_HOST_NKRO` | |Force NKRO on | 261|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Control and GUI on both sides |
272|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides | 262|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Control and GUI swap on both sides |
273|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Ctrl and GUI on both sides (for macOS)| 263|`MAGIC_SWAP_LALT_LGUI` |`LAG_SWP`|Swap Left Alt and GUI |
274|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` | |Unswap Caps Lock and Left Control | 264|`MAGIC_UNSWAP_LALT_LGUI` |`LAG_NRM`|Unswap Left Alt and GUI |
275|`MAGIC_UNCAPSLOCK_TO_CONTROL` | |Stop treating Caps Lock as Control | 265|`MAGIC_SWAP_RALT_RGUI` |`RAG_SWP`|Swap Right Alt and GUI |
276|`MAGIC_UNSWAP_LCTL_LGUI` | |Unswap Left Control and GUI | 266|`MAGIC_UNSWAP_RALT_RGUI` |`RAG_NRM`|Unswap Right Alt and GUI |
277|`MAGIC_UNSWAP_RCTL_RGUI` | |Unswap Right Control and GUI | 267|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides |
278|`MAGIC_UNSWAP_LALT_LGUI` | |Unswap Left Alt and GUI | 268|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI on both sides |
279|`MAGIC_UNSWAP_RALT_RGUI` | |Unswap Right Alt and GUI | 269|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap on both sides |
280|`MAGIC_UNNO_GUI` | |Enable the GUI key | 270|`MAGIC_NO_GUI` |`GUI_OFF`|Disable the GUI keys |
281|`MAGIC_UNSWAP_GRAVE_ESC` | |Unswap <code>&#96;</code> and Escape | 271|`MAGIC_UNNO_GUI` |`GUI_ON` |Enable the GUI keys |
282|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`| |Unswap `\` and Backspace | 272|`MAGIC_SWAP_GRAVE_ESC` |`GE_SWAP`|Swap <code>&#96;</code> and Escape |
283|`MAGIC_UNHOST_NKRO` | |Force NKRO off | 273|`MAGIC_UNSWAP_GRAVE_ESC` |`GE_NORM`|Unswap <code>&#96;</code> and Escape |
284|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI on both sides | 274|`MAGIC_SWAP_BACKSLASH_BACKSPACE` |`BS_SWAP`|Swap `\` and Backspace |
285|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Ctrl and GUI on both sides | 275|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|`BS_NORM`|Unswap `\` and Backspace |
286|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap on both sides | 276|`MAGIC_HOST_NKRO` |`NK_ON` |Enable N-key rollover |
287|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Ctrl and GUI swap on both sides | 277|`MAGIC_UNHOST_NKRO` |`NK_OFF` |Disable N-key rollover |
288|`MAGIC_TOGGLE_NKRO` | |Turn NKRO on or off | 278|`MAGIC_TOGGLE_NKRO` |`NK_TOGG`|Toggle N-key rollover |
289|`MAGIC_EE_HANDS_LEFT` | |Set "Left Hand" for EE_HANDS handedness | 279|`MAGIC_EE_HANDS_LEFT` |`EH_LEFT`|Set the master half of a split keyboard as the left hand (for `EE_HANDS`) |
290|`MAGIC_EE_HANDS_RIGHT` | |Set "Right Hand" for EE_HANDS handedness | 280|`MAGIC_EE_HANDS_RIGHT` |`EH_RGHT`|Set the master half of a split keyboard as the right hand (for `EE_HANDS`)|
291 281
292## [Bluetooth](feature_bluetooth.md) 282## [Bluetooth](feature_bluetooth.md)
293 283
@@ -389,12 +379,12 @@ This is a reference only. Each group of keys links to the page documenting their
389|`RGB_TOG` | |Toggle RGB lighting on or off | 379|`RGB_TOG` | |Toggle RGB lighting on or off |
390|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held | 380|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
391|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held| 381|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held|
392|`RGB_HUI` | |Increase hue | 382|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
393|`RGB_HUD` | |Decrease hue | 383|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
394|`RGB_SAI` | |Increase saturation | 384|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
395|`RGB_SAD` | |Decrease saturation | 385|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
396|`RGB_VAI` | |Increase value (brightness) | 386|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
397|`RGB_VAD` | |Decrease value (brightness) | 387|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
398|`RGB_MODE_PLAIN` |`RGB_M_P `|Static (no animation) mode | 388|`RGB_MODE_PLAIN` |`RGB_M_P `|Static (no animation) mode |
399|`RGB_MODE_BREATHE` |`RGB_M_B` |Breathing animation mode | 389|`RGB_MODE_BREATHE` |`RGB_M_B` |Breathing animation mode |
400|`RGB_MODE_RAINBOW` |`RGB_M_R` |Rainbow animation mode | 390|`RGB_MODE_RAINBOW` |`RGB_M_R` |Rainbow animation mode |
@@ -407,19 +397,19 @@ This is a reference only. Each group of keys links to the page documenting their
407 397
408## [RGB Matrix Lighting](feature_rgb_matrix.md) 398## [RGB Matrix Lighting](feature_rgb_matrix.md)
409 399
410|Key |Aliases |Description | 400|Key |Aliases |Description |
411|-------------------|----------|--------------------------------------------------------------------| 401|-------------------|----------|--------------------------------------------------------------------------------------|
412|`RGB_TOG` | |Toggle RGB lighting on or off | 402|`RGB_TOG` | |Toggle RGB lighting on or off |
413|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held | 403|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
414|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held| 404|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held |
415|`RGB_HUI` | |Increase hue | 405|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
416|`RGB_HUD` | |Decrease hue | 406|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
417|`RGB_SAI` | |Increase saturation | 407|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
418|`RGB_SAD` | |Decrease saturation | 408|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
419|`RGB_VAI` | |Increase value (brightness) | 409|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
420|`RGB_VAD` | |Decrease value (brightness) | 410|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
421|`RGB_SPI` | |Increase effect speed (does no support eeprom yet) | 411|`RGB_SPI` | |Increase effect speed (does not support eeprom yet), decrease speed when Shift is held|
422|`RGB_SPD` | |Decrease effect speed (does no support eeprom yet) | 412|`RGB_SPD` | |Decrease effect speed (does not support eeprom yet), increase speed when Shift is held|
423 413
424## [Thermal Printer](feature_thermal_printer.md) 414## [Thermal Printer](feature_thermal_printer.md)
425 415
@@ -461,6 +451,18 @@ This is a reference only. Each group of keys links to the page documenting their
461|`OSM(mod)` |Hold `mod` for one keypress | 451|`OSM(mod)` |Hold `mod` for one keypress |
462|`OSL(layer)`|Switch to `layer` for one keypress| 452|`OSL(layer)`|Switch to `layer` for one keypress|
463 453
454## [Space Cadet](feature_space_cadet.md)
455
456|Key |Description |
457|-----------|----------------------------------------|
458|`KC_LCPO` |Left Control when held, `(` when tapped |
459|`KC_RCPC` |Right Control when held, `)` when tapped|
460|`KC_LSPO` |Left Shift when held, `(` when tapped |
461|`KC_RSPC` |Right Shift when held, `)` when tapped |
462|`KC_LAPO` |Left Alt when held, `(` when tapped |
463|`KC_RAPC` |Right Alt when held, `)` when tapped |
464|`KC_SFTENT`|Right Shift when held, Enter when tapped|
465
464## [Swap Hands](feature_swap_hands.md) 466## [Swap Hands](feature_swap_hands.md)
465 467
466|Key |Description | 468|Key |Description |
diff --git a/docs/newbs.md b/docs/newbs.md
index 904a52945..775bba2ca 100644
--- a/docs/newbs.md
+++ b/docs/newbs.md
@@ -13,7 +13,7 @@ There are 7 main sections to this guide:
13* [Building Your First Firmware using the online GUI](newbs_building_firmware_configurator.md) 13* [Building Your First Firmware using the online GUI](newbs_building_firmware_configurator.md)
14* [Flashing Firmware](newbs_flashing.md) 14* [Flashing Firmware](newbs_flashing.md)
15* [Testing and Debugging](newbs_testing_debugging.md) 15* [Testing and Debugging](newbs_testing_debugging.md)
16* [Git Best Practices](newbs_best_practices.md) 16* [Best Git Practices](newbs_git_best_practices.md)
17* [Learn More with these Resources](newbs_learn_more_resources.md) 17* [Learn More with these Resources](newbs_learn_more_resources.md)
18 18
19This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md). 19This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md).
diff --git a/docs/newbs_best_practices.md b/docs/newbs_best_practices.md
deleted file mode 100644
index 61bcc0c6a..000000000
--- a/docs/newbs_best_practices.md
+++ /dev/null
@@ -1,163 +0,0 @@
1# Best Practices
2
3## Or, "How I Learned to Stop Worrying and Love Git."
4
5This document aims to instruct novices in the best ways to have a smooth experience in contributing to QMK. We will walk through the process of contributing to QMK, detailing some ways to make this task easier, and then later we'll break some things in order to teach you how to fix them.
6
7This document assumes a few things:
8
91. You have a GitHub account, and have [forked the qmk_firmware repository](getting_started_github.md) to your account.
102. You've [set up your build environment](newbs_getting_started.md?id=environment-setup).
11
12
13## Your fork's master: Update Often, Commit Never
14
15It is highly recommended for QMK development, regardless of what is being done or where, to keep your `master` branch updated, but ***never*** commit to it. Instead, do all your changes in a development branch and issue pull requests from your branches when you're developing.
16
17To reduce the chances of merge conflicts &mdash; instances where two or more users have edited the same part of a file concurrently &mdash; keep your `master` branch relatively up-to-date, and start any new developments by creating a new branch.
18
19### Updating your master branch
20
21To keep your `master` branch updated, it is recommended to add the QMK Firmware repository ("repo") as a remote repository in git. To do this, open your Git command line interface and enter:
22
23```
24git remote add upstream https://github.com/qmk/qmk_firmware.git
25```
26
27To verify that the repository has been added, run `git remote -v`, which should return the following:
28
29```
30$ git remote -v
31origin https://github.com/<your_username>/qmk_firmware.git (fetch)
32origin https://github.com/<your_username>/qmk_firmware.git (push)
33upstream https://github.com/qmk/qmk_firmware.git (fetch)
34upstream https://github.com/qmk/qmk_firmware.git (push)
35```
36
37Now that this is done, you can check for updates to the repo by running `git fetch upstream`. This retrieves the branches and tags &mdash; collectively referred to as "refs" &mdash; from the QMK repo, which now has the nickname `upstream`. We can now compare the data on our fork `origin` to that held by QMK.
38
39To update your fork's master, run the following, hitting the Enter key after each line:
40
41```
42git checkout master
43git fetch upstream
44git pull upstream master
45git push origin master
46```
47
48This switches you to your `master` branch, retrieves the refs from the QMK repo, downloads the current QMK `master` branch to your computer, and then uploads it to your fork.
49
50### Making Changes
51
52To make changes, create a new branch by entering:
53
54```
55git checkout -b dev_branch
56git push --set-upstream origin dev_branch
57```
58
59This creates a new branch named `dev_branch`, checks it out, and then saves the new branch to your fork. The `--set-upstream` argument tells git to use your fork and the `dev_branch` branch every time you use `git push` or `git pull` from this branch. It only needs to be used on the first push; after that, you can safely use `git push` or `git pull`, without the rest of the arguments.
60
61!> With `git push`, you can use `-u` in place of `--set-upstream` &mdash; `-u` is an alias for `--set-upstream`.
62
63You can name your branch nearly anything you want, though it is recommended to name it something related to the changes you are going to make.
64
65By default `git checkout -b` will base your new branch on the branch that is checked out. You can base your new branch on an existing branch that is not checked out by adding the name of the existing branch to the command:
66
67```
68git checkout -b dev_branch master
69```
70
71Now that you have a development branch, open your text editor and make whatever changes you need to make. It is recommended to make many small commits to your branch; that way, any change that causes issues can be more easily traced and undone if needed. To make your changes, edit and save any files that need to be updated, add them to Git's *staging area*, and then commit them to your branch:
72
73```
74git add path/to/updated_file
75git commit -m "My commit message."
76```
77
78`git add` adds files that have been changed to Git's *staging area*, which is Git's "loading zone." This contains the changes that are going to be *committed* by `git commit`, which saves the changes to the repo. Use descriptive commit messages so you can know what was changed at a glance.
79
80!> If you've changed a lot of files, but all the files are part of the same change, you can use `git add .` to add all the changed files that are in your current directory, rather than having to add each file individually.
81
82### Publishing Your Changes
83
84The last step is to push your changes to your fork. To do this, enter `git push`. Git now publishes the current state of `dev_branch` to your fork.
85
86
87## Resolving Merge Conflicts
88
89Sometimes when your work in a branch takes a long time to complete, changes that have been made by others conflict with changes you have made to your branch when you open a pull request. This is called a *merge conflict*, and is what happens when multiple people edit the same parts of the same files.
90
91### Rebasing Your Changes
92
93A *rebase* is Git's way of taking changes that were applied at one point, reversing them, and then applying the same changes to another point. In the case of a merge conflict, you can rebase your branch to grab the changes that were made between when you created your branch and the present time.
94
95To start, run the following:
96
97```
98git fetch upstream
99git rev-list --left-right --count HEAD...upstream/master
100```
101
102The `git rev-list` command entered here returns the number of commits that differ between the current branch and QMK's master branch. We run `git fetch` first to make sure we have the refs that represent the current state of the upstream repo. The output of the `git rev-list` command entered returns two numbers:
103
104```
105$ git rev-list --left-right --count HEAD...upstream/master
1067 35
107```
108
109The first number represents the number of commits on the current branch since it was created, and the second number is the number of commits made to `upstream/master` since the current branch was created, and thus, the changes that are not recorded in the current branch.
110
111Now that the current states of both the current branch and the upstream repo are known, we can start a rebase operation:
112
113```
114git rebase upstream/master
115```
116
117This tells Git to undo the commits on the current branch, and then reapply them against QMK's master branch.
118
119```
120$ git rebase upstream/master
121First, rewinding head to replay your work on top of it...
122Applying: Commit #1
123Using index info to reconstruct a base tree...
124M conflicting_file_1.txt
125Falling back to patching base and 3-way merge...
126Auto-merging conflicting_file_1.txt
127CONFLICT (content): Merge conflict in conflicting_file_1.txt
128error: Failed to merge in the changes.
129hint: Use 'git am --show-current-patch' to see the failed patch
130Patch failed at 0001 Commit #1
131
132Resolve all conflicts manually, mark them as resolved with
133"git add/rm <conflicted_files>", then run "git rebase --continue".
134You can instead skip this commit: run "git rebase --skip".
135To abort and get back to the state before "git rebase", run "git rebase --abort".
136```
137
138This tells us that we have a merge conflict, and gives the name of the file with the conflict. Open the conflicting file in your text editor, and somewhere in the file, you'll find something like this:
139
140```
141<<<<<<< HEAD
142<p>For help with any issues, email us at support@webhost.us.</p>
143=======
144<p>Need help? Email support@webhost.us.</p>
145>>>>>>> Commit #1
146```
147
148The line `<<<<<<< HEAD` marks the beginning of a merge conflict, and the `>>>>>>> Commit #1` line marks the end, with the conflicting sections separated by `=======`. The part on the `HEAD` side is from the QMK master version of the file, and the part marked with the commit message is from the current branch and commit.
149
150Because Git tracks *changes to files* rather than the contents of the files directly, if Git can't find the text that was in the file previous to the commit that was made, it won't know how to edit the file. Re-editing the file will solve the conflict. Make your changes, and then save the file.
151
152```
153<p>Need help? Email support@webhost.us.</p>
154```
155
156Now run:
157
158```
159git add conflicting_file_1.txt
160git rebase --continue
161```
162
163Git logs the changes to the conflicting file, and continues applying the commits from our branch until it reaches the end.
diff --git a/docs/newbs_building_firmware.md b/docs/newbs_building_firmware.md
index 5a8f181b8..d7d31c07f 100644
--- a/docs/newbs_building_firmware.md
+++ b/docs/newbs_building_firmware.md
@@ -42,7 +42,7 @@ Open up your `keymap.c`. Inside this file you'll find the structure that control
42 42
43 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 43 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
44 44
45This line indicates the start of the list of Layers. Below that you'll find lines containing either `LAYOUT` or `KEYMAP`, and these lines indicate the start of a layer. Below that line is the list of keys that comprise a that particular layer. 45This line indicates the start of the list of Layers. Below that you'll find lines containing either `LAYOUT` or `KEYMAP`, and these lines indicate the start of a layer. Below that line is the list of keys that comprise a particular layer.
46 46
47!> When editing your keymap file be careful not to add or remove any commas. If you do you will prevent your firmware from compiling and it may not be easy to figure out where the extra, or missing, comma is. 47!> When editing your keymap file be careful not to add or remove any commas. If you do you will prevent your firmware from compiling and it may not be easy to figure out where the extra, or missing, comma is.
48 48
diff --git a/docs/newbs_git_best_practices.md b/docs/newbs_git_best_practices.md
new file mode 100644
index 000000000..c0cb3a294
--- /dev/null
+++ b/docs/newbs_git_best_practices.md
@@ -0,0 +1,16 @@
1# Best Git Practices for Working with QMK
2
3## Or, "How I Learned to Stop Worrying and Love Git."
4
5This section aims to instruct novices in the best ways to have a smooth experience in contributing to QMK. We will walk through the process of contributing to QMK, detailing some ways to make this task easier, and then later we'll break some things in order to teach you how to fix them.
6
7This section assumes a few things:
8
91. You have a GitHub account, and have [forked the qmk_firmware repository](getting_started_github.md) to your account.
102. You've set up both [your build environment](newbs_getting_started.md#set-up-your-environment) and [QMK](newbs_getting_started.md#set-up-qmk).
11
12---
13
14- Part 1: [Your Fork's Master: Update Often, Commit Never](newbs_git_using_your_master_branch.md)
15- Part 2: [Resolving Merge Conflicts](newbs_git_resolving_merge_conflicts.md)
16- Part 3: [Resynchronizing an Out-of-Sync Git Branch](newbs_git_resynchronize_a_branch.md)
diff --git a/docs/newbs_git_resolving_merge_conflicts.md b/docs/newbs_git_resolving_merge_conflicts.md
new file mode 100644
index 000000000..467c13abb
--- /dev/null
+++ b/docs/newbs_git_resolving_merge_conflicts.md
@@ -0,0 +1,79 @@
1# Resolving Merge Conflicts
2
3Sometimes when your work in a branch takes a long time to complete, changes that have been made by others conflict with changes you have made to your branch when you open a pull request. This is called a *merge conflict*, and is what happens when multiple people edit the same parts of the same files.
4
5?> This document builds upon the concepts detailed in [Your Fork's Master: Update Often, Commit Never](newbs_git_using_your_master_branch.md). If you are not familiar with that document, please read it first, then return here.
6
7## Rebasing Your Changes
8
9A *rebase* is Git's way of taking changes that were applied at one point in the commit history, reversing them, and then applying the same changes at another point. In the case of a merge conflict, you can rebase your branch to grab the changes that were made between when you created your branch and the present time.
10
11To start, run the following:
12
13```
14git fetch upstream
15git rev-list --left-right --count HEAD...upstream/master
16```
17
18The `git rev-list` command entered here returns the number of commits that differ between the current branch and QMK's master branch. We run `git fetch` first to make sure we have the refs that represent the current state of the upstream repo. The output of the `git rev-list` command entered returns two numbers:
19
20```
21$ git rev-list --left-right --count HEAD...upstream/master
227 35
23```
24
25The first number represents the number of commits on the current branch since it was created, and the second number is the number of commits made to `upstream/master` since the current branch was created, and thus, the changes that are not recorded in the current branch.
26
27Now that the current states of both the current branch and the upstream repo are known, we can start a rebase operation:
28
29```
30git rebase upstream/master
31```
32
33This tells Git to undo the commits on the current branch, and then reapply them against QMK's master branch.
34
35```
36$ git rebase upstream/master
37First, rewinding head to replay your work on top of it...
38Applying: Commit #1
39Using index info to reconstruct a base tree...
40M conflicting_file_1.txt
41Falling back to patching base and 3-way merge...
42Auto-merging conflicting_file_1.txt
43CONFLICT (content): Merge conflict in conflicting_file_1.txt
44error: Failed to merge in the changes.
45hint: Use 'git am --show-current-patch' to see the failed patch
46Patch failed at 0001 Commit #1
47
48Resolve all conflicts manually, mark them as resolved with
49"git add/rm <conflicted_files>", then run "git rebase --continue".
50You can instead skip this commit: run "git rebase --skip".
51To abort and get back to the state before "git rebase", run "git rebase --abort".
52```
53
54This tells us that we have a merge conflict, and gives the name of the file with the conflict. Open the conflicting file in your text editor, and somewhere in the file, you'll find something like this:
55
56```
57<<<<<<< HEAD
58<p>For help with any issues, email us at support@webhost.us.</p>
59=======
60<p>Need help? Email support@webhost.us.</p>
61>>>>>>> Commit #1
62```
63
64The line `<<<<<<< HEAD` marks the beginning of a merge conflict, and the `>>>>>>> Commit #1` line marks the end, with the conflicting sections separated by `=======`. The part on the `HEAD` side is from the QMK master version of the file, and the part marked with the commit message is from the current branch and commit.
65
66Because Git tracks *changes to files* rather than the contents of the files directly, if Git can't find the text that was in the file previous to the commit that was made, it won't know how to edit the file. Re-editing the file will solve the conflict. Make your changes, and then save the file.
67
68```
69<p>Need help? Email support@webhost.us.</p>
70```
71
72Now run:
73
74```
75git add conflicting_file_1.txt
76git rebase --continue
77```
78
79Git logs the changes to the conflicting file, and continues applying the commits from our branch until it reaches the end.
diff --git a/docs/newbs_git_resynchronize_a_branch.md b/docs/newbs_git_resynchronize_a_branch.md
new file mode 100644
index 000000000..3e7acdba7
--- /dev/null
+++ b/docs/newbs_git_resynchronize_a_branch.md
@@ -0,0 +1,71 @@
1# Resynchronizing an Out-of-Sync Git Branch
2
3Suppose you have committed to your `master` branch, and now need to update your QMK repository. You could `git pull` QMK's `master` branch into your own, but GitHub will tell you that your branch is a number of commits ahead of `qmk:master`, which can create issues if you want to make a pull request to QMK.
4
5?> This document builds upon the concepts detailed in [Your Fork's Master: Update Often, Commit Never](newbs_git_using_your_master_branch.md). If you are not familiar with that document, please read it first, then return here.
6
7## Backing Up the Changes on Your Own Master Branch (Optional)
8
9No one wants to lose work if it can be helped. If you want to save the changes you've already made to your `master` branch, the simplest way to do so is to simply create a duplicate of your "dirty" `master` branch:
10
11```sh
12git branch old_master master
13```
14
15Now you have a branch named `old_master` that is a duplicate of your `master` branch.
16
17## Resynchronizing Your Branch
18
19Now it's time to resynchronize your `master` branch. For this step, you'll want to have QMK's repository configured as a remote in Git. To check your configured remotes, run `git remote -v`, which should return something similar to:
20
21```sh
22QMKuser ~/qmk_firmware (master)
23$ git remote -v
24origin https://github.com/<your_username>/qmk_firmware.git (fetch)
25origin https://github.com/<your_username>/qmk_firmware.git (push)
26upstream https://github.com/qmk/qmk_firmware.git (fetch)
27upstream https://github.com/qmk/qmk_firmware.git (push)
28```
29
30If you only see one fork referenced:
31
32```sh
33QMKuser ~/qmk_firmware (master)
34$ git remote -v
35origin https://github.com/qmk/qmk_firmware.git (fetch)
36origin https://github.com/qmk/qmk_firmware.git (push)
37```
38
39add a new remote with:
40
41```sh
42git remote add upstream https://github.com/qmk/qmk_firmware.git
43```
44
45Then, redirect the `origin` remote to your own fork with:
46
47```sh
48git remote set-url origin https://github.com/<your_username>/qmk_firmware.git
49```
50
51Now that you have both remotes configured, you need to update the references for the upstream repository, which is QMK's, by running:
52
53```sh
54git fetch upstream
55```
56
57At this point, resynchronize your branch to QMK's by running:
58
59```sh
60git reset --hard upstream/master
61```
62
63These steps will update the repository on your computer, but your GitHub fork will still be out of sync. To resynchronize your fork on GitHub, you need to push to your fork, instructing Git to override any remote changes that are not reflected in your local repository. To do this, run:
64
65```sh
66git push --force-with-lease
67```
68
69!> **DO NOT** run `git push --force-with-lease` on a fork to which other users post commits. This will erase their commits.
70
71Now your GitHub fork, your local files, and QMK's repository are all the same. From here you can make further needed changes ([use a branch!](newbs_git_using_your_master_branch.md#making-changes)) and post them as normal.
diff --git a/docs/newbs_git_using_your_master_branch.md b/docs/newbs_git_using_your_master_branch.md
new file mode 100644
index 000000000..2032b83b2
--- /dev/null
+++ b/docs/newbs_git_using_your_master_branch.md
@@ -0,0 +1,74 @@
1# Your Fork's Master: Update Often, Commit Never
2
3It is highly recommended for QMK development, regardless of what is being done or where, to keep your `master` branch updated, but ***never*** commit to it. Instead, do all your changes in a development branch and issue pull requests from your branches when you're developing.
4
5To reduce the chances of merge conflicts &mdash; instances where two or more users have edited the same part of a file concurrently &mdash; keep your `master` branch relatively up-to-date, and start any new developments by creating a new branch.
6
7## Updating your master branch
8
9To keep your `master` branch updated, it is recommended to add the QMK Firmware repository ("repo") as a remote repository in git. To do this, open your Git command line interface and enter:
10
11```
12git remote add upstream https://github.com/qmk/qmk_firmware.git
13```
14
15?> The name `upstream` is arbitrary, but a common convention; you can give the QMK remote any name that suits you. Git's `remote` command uses the syntax `git remote add <name> <url>`, `<name>` being shorthand for the remote repo. This name can be used with many Git commands, including but not limited to `fetch`, `pull` and `push`, to specify the remote repo on which to act.
16
17To verify that the repository has been added, run `git remote -v`, which should return the following:
18
19```
20$ git remote -v
21origin https://github.com/<your_username>/qmk_firmware.git (fetch)
22origin https://github.com/<your_username>/qmk_firmware.git (push)
23upstream https://github.com/qmk/qmk_firmware.git (fetch)
24upstream https://github.com/qmk/qmk_firmware.git (push)
25```
26
27Now that this is done, you can check for updates to the repo by running `git fetch upstream`. This retrieves the branches and tags &mdash; collectively referred to as "refs" &mdash; from the QMK repo, which now has the nickname `upstream`. We can now compare the data on our fork `origin` to that held by QMK.
28
29To update your fork's master, run the following, hitting the Enter key after each line:
30
31```
32git checkout master
33git fetch upstream
34git pull upstream master
35git push origin master
36```
37
38This switches you to your `master` branch, retrieves the refs from the QMK repo, downloads the current QMK `master` branch to your computer, and then uploads it to your fork.
39
40## Making Changes
41
42To make changes, create a new branch by entering:
43
44```
45git checkout -b dev_branch
46git push --set-upstream origin dev_branch
47```
48
49This creates a new branch named `dev_branch`, checks it out, and then saves the new branch to your fork. The `--set-upstream` argument tells git to use your fork and the `dev_branch` branch every time you use `git push` or `git pull` from this branch. It only needs to be used on the first push; after that, you can safely use `git push` or `git pull`, without the rest of the arguments.
50
51?> With `git push`, you can use `-u` in place of `--set-upstream` &mdash; `-u` is an alias for `--set-upstream`.
52
53You can name your branch nearly anything you want, though it is recommended to name it something related to the changes you are going to make.
54
55By default `git checkout -b` will base your new branch on the branch that is currently checked out. You can base your new branch on an existing branch that is not checked out by adding the name of the existing branch to the command:
56
57```
58git checkout -b dev_branch master
59```
60
61Now that you have a development branch, open your text editor and make whatever changes you need to make. It is recommended to make many small commits to your branch; that way, any change that causes issues can be more easily traced and undone if needed. To make your changes, edit and save any files that need to be updated, add them to Git's *staging area*, and then commit them to your branch:
62
63```
64git add path/to/updated_file
65git commit -m "My commit message."
66```
67
68`git add` adds files that have been changed to Git's *staging area*, which is Git's "loading zone." This contains the changes that are going to be *committed* by `git commit`, which saves the changes to the repo. Use descriptive commit messages so you can know what was changed at a glance.
69
70?> If you've changed multiple files, you can use `git add -- path/to/file1 path/to/file2 ...` to add all your desired files.
71
72## Publishing Your Changes
73
74The last step is to push your changes to your fork. To do this, enter `git push`. Git will then publish the current state of `dev_branch` to your fork.
diff --git a/docs/proton_c_conversion.md b/docs/proton_c_conversion.md
index 8014a35e0..dc0a3f484 100644
--- a/docs/proton_c_conversion.md
+++ b/docs/proton_c_conversion.md
@@ -29,3 +29,5 @@ These are defaults based on what has been implemented for ARM boards.
29| [Audio](feature_audio.md) | Enabled | 29| [Audio](feature_audio.md) | Enabled |
30| [RGB Lighting](feature_rgblight.md) | Disabled | 30| [RGB Lighting](feature_rgblight.md) | Disabled |
31| [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration | 31| [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration |
32| USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) |
33| [Split keyboards](feature_split_keyboard.md) | Not supported yet |
diff --git a/docs/pt-br/README.md b/docs/pt-br/README.md
new file mode 100644
index 000000000..7cff6ce62
--- /dev/null
+++ b/docs/pt-br/README.md
@@ -0,0 +1,31 @@
1# Quantum Mechanical Keyboard Firmware
2
3[![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
4[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
5[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
6[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
7[![GitHub contributors](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
8[![GitHub forks](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
9
10## O que é o firmware QMK?
11QMK (*Quantum Mechanical Keyboard*) é uma comunidade de código aberto que mantém o QMK Firmware, o QMK Toolbox, qmk.fm e suas documentações. O QMK Firmware é um software embarcado ("firmware") de teclado baseado no [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) com alguns recursos úteis para os controladores Atmel AVR e, mais especificamente, na [linha de produtos OLKB](http://olkb.com), o teclado [ErgoDox EZ](http://www.ergodox-ez.com) e a [linha de produtos Clueboard](http://clueboard.co/). Também foi portado para chips ARM usando o ChibiOS. Você pode usá-lo no seu próprio teclado com fio ou personalizado.
12
13## Como obter e usar o QMK
14
15Se você planeja contribuir com um _keymap_ ("mapa de teclas"), teclado ou recursos para o QMK, o jeito mais fácil é [percorrer o repositório através do Github](https://github.com/qmk/qmk_firmware#fork-destination-box) e clonar seu repositório localmente para fazer suas alterações, dê um _push_ nelas e abra uma [_Pull request_](https://github.com/qmk/qmk_firmware/pulls) no seu fork.
16
17Caso contrário, você pode cloná-lo diretamente com `git clone https://github.com/qmk/qmk_firmware`. Não faça o download dos arquivos zip ou tar; é necessário um repositório git para baixar os submódulos para compilar.
18
19## Como compilar
20
21Antes de compilar, você precisará [instalar um ambiente específico](getting_started_build_tools.md) para o desenvolvimento em plataforma AVR e/ou ARM; vez que isto for feito, você usará o comando `make` para criar um teclado e um mapa de teclas com a seguinte notação:
22
23 make planck/rev4:default
24
25Isso compilaria a revisão `rev4` do teclado ` planck` com o mapa de teclas `default`. Nem todos os teclados têm revisões (também chamadas de _subprojects_ ou _folders_); nesse caso, a revisão pode ser omitida:
26
27 make preonic:default
28
29## Como personalizar
30
31O QMK tem muitos [recursos](features.md) para explorar e uma boa quantidade de [documentação de referência](http://docs.qmk.fm) para explorar. A maioria dos recursos é aproveitada modificando seu [keymap](keymap.md) e alterando os [keycodes](keycodes.md).
diff --git a/docs/pt-br/_summary.md b/docs/pt-br/_summary.md
new file mode 100644
index 000000000..27efd73ab
--- /dev/null
+++ b/docs/pt-br/_summary.md
@@ -0,0 +1,121 @@
1* [Complete Newbs Guide](pt-br/newbs.md)
2 * [Getting Started](pt-br/newbs_getting_started.md)
3 * [Building Your First Firmware](pt-br/newbs_building_firmware.md)
4 * [Flashing Firmware](pt-br/newbs_flashing.md)
5 * [Testing and Debugging](pt-br/newbs_testing_debugging.md)
6 * [Git Best Practices](pt-br/newbs_best_practices.md)
7 * [Learning Resources](pt-br/newbs_learn_more_resources.md)
8
9* [QMK Basics](pt-br/README.md)
10 * [QMK Introduction](pt-br/getting_started_introduction.md)
11 * [QMK CLI](pt-br/cli.md)
12 * [QMK CLI Config](pt-br/cli_configuration.md)
13 * [Contributing to QMK](pt-br/contributing.md)
14 * [How to Use Github](pt-br/getting_started_github.md)
15 * [Getting Help](pt-br/getting_started_getting_help.md)
16
17* [Breaking Changes](pt-br/breaking_changes.md)
18 * [2019 Aug 30](pt-br/ChangeLog/20190830.md)
19
20* [FAQ](faq.md)
21 * [General FAQ](pt-br/faq_general.md)
22 * [Build/Compile QMK](pt-br/faq_build.md)
23 * [Debugging/Troubleshooting QMK](pt-br/faq_debug.md)
24 * [Keymap](pt-br/faq_keymap.md)
25 * [Driver Installation with Zadig](pt-br/driver_installation_zadig.md)
26
27* Detailed Guides
28 * [Install Build Tools](pt-br/getting_started_build_tools.md)
29 * [Vagrant Guide](pt-br/getting_started_vagrant.md)
30 * [Build/Compile Instructions](pt-br/getting_started_make_guide.md)
31 * [Flashing Firmware](pt-br/flashing.md)
32 * [Customizing Functionality](pt-br/custom_quantum_functions.md)
33 * [Keymap Overview](pt-br/keymap.md)
34
35* [Hardware](hardware.md)
36 * [AVR Processors](pt-br/hardware_avr.md)
37 * [Drivers](pt-br/hardware_drivers.md)
38
39* Reference
40 * [Keyboard Guidelines](pt-br/hardware_keyboard_guidelines.md)
41 * [Config Options](pt-br/config_options.md)
42 * [Keycodes](pt-br/keycodes.md)
43 * [Coding Conventions - C](pt-br/coding_conventions_c.md)
44 * [Coding Conventions - Python](pt-br/coding_conventions_python.md)
45 * [Documentation Best Practices](pt-br/documentation_best_practices.md)
46 * [Documentation Templates](pt-br/documentation_templates.md)
47 * [Glossary](pt-br/reference_glossary.md)
48 * [Unit Testing](pt-br/unit_testing.md)
49 * [Useful Functions](pt-br/ref_functions.md)
50 * [Configurator Support](pt-br/reference_configurator_support.md)
51 * [info.json Format](pt-br/reference_info_json.md)
52 * [Python CLI Development](pt-br/cli_development.md)
53
54* [Features](pt-br/features.md)
55 * [Basic Keycodes](pt-br/keycodes_basic.md)
56 * [US ANSI Shifted Keys](pt-br/keycodes_us_ansi_shifted.md)
57 * [Quantum Keycodes](pt-br/quantum_keycodes.md)
58 * [Advanced Keycodes](pt-br/feature_advanced_keycodes.md)
59 * [Audio](pt-br/feature_audio.md)
60 * [Auto Shift](pt-br/feature_auto_shift.md)
61 * [Backlight](pt-br/feature_backlight.md)
62 * [Bluetooth](pt-br/feature_bluetooth.md)
63 * [Bootmagic](pt-br/feature_bootmagic.md)
64 * [Combos](pt-br/feature_combo.md)
65 * [Command](pt-br/feature_command.md)
66 * [Debounce API](pt-br/feature_debounce_type.md)
67 * [DIP Switch](pt-br/feature_dip_switch.md)
68 * [Dynamic Macros](pt-br/feature_dynamic_macros.md)
69 * [Encoders](pt-br/feature_encoders.md)
70 * [Grave Escape](pt-br/feature_grave_esc.md)
71 * [Haptic Feedback](pt-br/feature_haptic_feedback.md)
72 * [HD44780 LCD Controller](pt-br/feature_hd44780.md)
73 * [Key Lock](pt-br/feature_key_lock.md)
74 * [Layouts](pt-br/feature_layouts.md)
75 * [Leader Key](pt-br/feature_leader_key.md)
76 * [LED Matrix](pt-br/feature_led_matrix.md)
77 * [Macros](pt-br/feature_macros.md)
78 * [Mouse Keys](pt-br/feature_mouse_keys.md)
79 * [OLED Driver](pt-br/feature_oled_driver.md)
80 * [One Shot Keys](pt-br/feature_advanced_keycodes.md#one-shot-keys)
81 * [Pointing Device](pt-br/feature_pointing_device.md)
82 * [PS/2 Mouse](pt-br/feature_ps2_mouse.md)
83 * [RGB Lighting](pt-br/feature_rgblight.md)
84 * [RGB Matrix](pt-br/feature_rgb_matrix.md)
85 * [Space Cadet](pt-br/feature_space_cadet.md)
86 * [Split Keyboard](pt-br/feature_split_keyboard.md)
87 * [Stenography](pt-br/feature_stenography.md)
88 * [Swap Hands](pt-br/feature_swap_hands.md)
89 * [Tap Dance](pt-br/feature_tap_dance.md)
90 * [Terminal](pt-br/feature_terminal.md)
91 * [Thermal Printer](pt-br/feature_thermal_printer.md)
92 * [Unicode](pt-br/feature_unicode.md)
93 * [Userspace](pt-br/feature_userspace.md)
94 * [Velocikey](pt-br/feature_velocikey.md)
95
96* For Makers and Modders
97 * [Hand Wiring Guide](pt-br/hand_wire.md)
98 * [ISP Flashing Guide](pt-br/isp_flashing_guide.md)
99 * [ARM Debugging Guide](pt-br/arm_debugging.md)
100 * [I2C Driver](pt-br/i2c_driver.md)
101 * [GPIO Controls](pt-br/internals_gpio_control.md)
102 * [Proton C Conversion](pt-br/proton_c_conversion.md)
103
104* For a Deeper Understanding
105 * [How Keyboards Work](pt-br/how_keyboards_work.md)
106 * [Understanding QMK](pt-br/understanding_qmk.md)
107
108* Other Topics
109 * [Using Eclipse with QMK](pt-br/other_eclipse.md)
110 * [Using VSCode with QMK](pt-br/other_vscode.md)
111 * [Support](pt-br/support.md)
112 * [How to add translations](pt-br/translating.md)
113
114* QMK Internals (In Progress)
115 * [Defines](pt-br/internals_defines.md)
116 * [Input Callback Reg](pt-br/internals_input_callback_reg.md)
117 * [Midi Device](pt-br/internals_midi_device.md)
118 * [Midi Device Setup Process](pt-br/internals_midi_device_setup_process.md)
119 * [Midi Util](pt-br/internals_midi_util.md)
120 * [Send Functions](pt-br/internals_send_functions.md)
121 * [Sysex Tools](pt-br/internals_sysex_tools.md)
diff --git a/docs/quantum_keycodes.md b/docs/quantum_keycodes.md
index a2ba34c32..26ce6d244 100644
--- a/docs/quantum_keycodes.md
+++ b/docs/quantum_keycodes.md
@@ -14,15 +14,5 @@ On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are
14|`DEBUG` | |Toggle debug mode | 14|`DEBUG` | |Toggle debug mode |
15|`EEPROM_RESET` |`EEP_RST` |Resets EEPROM state by reinitializing it | 15|`EEPROM_RESET` |`EEP_RST` |Resets EEPROM state by reinitializing it |
16|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, <code>&#96;</code> when pressed with Shift or GUI| 16|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, <code>&#96;</code> when pressed with Shift or GUI|
17|`KC_LSPO` | |Left Shift when held, `(` when tapped |
18|`KC_RSPC` | |Right Shift when held, `)` when tapped |
19|`KC_LCPO` | |Left Control when held, `(` when tapped |
20|`KC_RCPC` | |Right Control when held, `)` when tapped |
21|`KC_LAPO` | |Left Alt when held, `(` when tapped |
22|`KC_RAPC` | |Right Alt when held, `)` when tapped |
23|`KC_SFTENT` | |Right Shift when held, Enter when tapped |
24|`KC_LEAD` | |The [Leader key](feature_leader_key.md) | 17|`KC_LEAD` | |The [Leader key](feature_leader_key.md) |
25|`KC_LOCK` | |The [Lock key](feature_key_lock.md) | 18|`KC_LOCK` | |The [Lock key](feature_key_lock.md) |
26|`FUNC(n)` |`F(n)` |Call `fn_action(n)` (deprecated) |
27|`M(n)` | |Call macro `n` |
28|`MACROTAP(n)` | |Macro-tap `n` idk FIXME |
diff --git a/docs/ru-ru/_summary.md b/docs/ru-ru/_summary.md
new file mode 100644
index 000000000..3269ac86d
--- /dev/null
+++ b/docs/ru-ru/_summary.md
@@ -0,0 +1,123 @@
1* [Complete Newbs Guide](ru-ru/newbs.md)
2 * [Getting Started](ru-ru/newbs_getting_started.md)
3 * [Building Your First Firmware](ru-ru/newbs_building_firmware.md)
4 * [Flashing Firmware](ru-ru/newbs_flashing.md)
5 * [Testing and Debugging](ru-ru/newbs_testing_debugging.md)
6 * [Git Best Practices](ru-ru/newbs_best_practices.md)
7 * [Learning Resources](ru-ru/newbs_learn_more_resources.md)
8
9* [QMK Basics](ru-ru/README.md)
10 * [QMK Introduction](ru-ru/getting_started_introduction.md)
11 * [QMK CLI](ru-ru/cli.md)
12 * [QMK CLI Config](ru-ru/cli_configuration.md)
13 * [Contributing to QMK](ru-ru/contributing.md)
14 * [How to Use Github](ru-ru/getting_started_github.md)
15 * [Getting Help](ru-ru/getting_started_getting_help.md)
16
17* [Breaking Changes](ru-ru/breaking_changes.md)
18 * [2019 Aug 30](ru-ru/ChangeLog/20190830.md)
19
20* [FAQ](ru-ru/faq.md)
21 * [General FAQ](ru-ru/faq_general.md)
22 * [Build/Compile QMK](ru-ru/faq_build.md)
23 * [Debugging/Troubleshooting QMK](ru-ru/faq_debug.md)
24 * [Keymap](ru-ru/faq_keymap.md)
25 * [Driver Installation with Zadig](ru-ru/driver_installation_zadig.md)
26
27* Detailed Guides
28 * [Install Build Tools](ru-ru/getting_started_build_tools.md)
29 * [Vagrant Guide](ru-ru/getting_started_vagrant.md)
30 * [Build/Compile Instructions](ru-ru/getting_started_make_guide.md)
31 * [Flashing Firmware](ru-ru/flashing.md)
32 * [Customizing Functionality](ru-ru/custom_quantum_functions.md)
33 * [Keymap Overview](ru-ru/keymap.md)
34
35* [Hardware](ru-ru/hardware.md)
36 * [Compatible Microcontrollers](ru-ru/compatible_microcontrollers.md)
37 * [AVR Processors](ru-ru/hardware_avr.md)
38 * [Drivers](ru-ru/hardware_drivers.md)
39
40* Reference
41 * [Keyboard Guidelines](ru-ru/hardware_keyboard_guidelines.md)
42 * [Config Options](ru-ru/config_options.md)
43 * [Keycodes](ru-ru/keycodes.md)
44 * [Coding Conventions - C](ru-ru/coding_conventions_c.md)
45 * [Coding Conventions - Python](ru-ru/coding_conventions_python.md)
46 * [Documentation Best Practices](ru-ru/documentation_best_practices.md)
47 * [Documentation Templates](ru-ru/documentation_templates.md)
48 * [Glossary](ru-ru/reference_glossary.md)
49 * [Unit Testing](ru-ru/unit_testing.md)
50 * [Useful Functions](ru-ru/ref_functions.md)
51 * [Configurator Support](ru-ru/reference_configurator_support.md)
52 * [info.json Format](ru-ru/reference_info_json.md)
53 * [Python CLI Development](ru-ru/cli_development.md)
54
55* [Features](ru-ru/features.md)
56 * [Basic Keycodes](ru-ru/keycodes_basic.md)
57 * [US ANSI Shifted Keys](ru-ru/keycodes_us_ansi_shifted.md)
58 * [Quantum Keycodes](ru-ru/quantum_keycodes.md)
59 * [Advanced Keycodes](ru-ru/feature_advanced_keycodes.md)
60 * [Audio](ru-ru/feature_audio.md)
61 * [Auto Shift](ru-ru/feature_auto_shift.md)
62 * [Backlight](ru-ru/feature_backlight.md)
63 * [Bluetooth](ru-ru/feature_bluetooth.md)
64 * [Bootmagic](ru-ru/feature_bootmagic.md)
65 * [Combos](ru-ru/feature_combo.md)
66 * [Command](ru-ru/feature_command.md)
67 * [Debounce API](ru-ru/feature_debounce_type.md)
68 * [DIP Switch](ru-ru/feature_dip_switch.md)
69 * [Dynamic Macros](ru-ru/feature_dynamic_macros.md)
70 * [Encoders](ru-ru/feature_encoders.md)
71 * [Grave Escape](ru-ru/feature_grave_esc.md)
72 * [Haptic Feedback](ru-ru/feature_haptic_feedback.md)
73 * [HD44780 LCD Controller](ru-ru/feature_hd44780.md)
74 * [Key Lock](ru-ru/feature_key_lock.md)
75 * [Layouts](ru-ru/feature_layouts.md)
76 * [Leader Key](ru-ru/feature_leader_key.md)
77 * [LED Matrix](ru-ru/feature_led_matrix.md)
78 * [Macros](ru-ru/feature_macros.md)
79 * [Mouse Keys](ru-ru/feature_mouse_keys.md)
80 * [OLED Driver](ru-ru/feature_oled_driver.md)
81 * [One Shot Keys](ru-ru/feature_advanced_keycodes.md#one-shot-keys)
82 * [Pointing Device](ru-ru/feature_pointing_device.md)
83 * [PS/2 Mouse](ru-ru/feature_ps2_mouse.md)
84 * [RGB Lighting](ru-ru/feature_rgblight.md)
85 * [RGB Matrix](ru-ru/feature_rgb_matrix.md)
86 * [Space Cadet](ru-ru/feature_space_cadet.md)
87 * [Split Keyboard](ru-ru/feature_split_keyboard.md)
88 * [Stenography](ru-ru/feature_stenography.md)
89 * [Swap Hands](ru-ru/feature_swap_hands.md)
90 * [Tap Dance](ru-ru/feature_tap_dance.md)
91 * [Terminal](ru-ru/feature_terminal.md)
92 * [Thermal Printer](ru-ru/feature_thermal_printer.md)
93 * [Unicode](ru-ru/feature_unicode.md)
94 * [Userspace](ru-ru/feature_userspace.md)
95 * [Velocikey](ru-ru/feature_velocikey.md)
96
97* For Makers and Modders
98 * [Hand Wiring Guide](ru-ru/hand_wire.md)
99 * [ISP Flashing Guide](ru-ru/isp_flashing_guide.md)
100 * [ARM Debugging Guide](ru-ru/arm_debugging.md)
101 * [I2C Driver](ru-ru/i2c_driver.md)
102 * [WS2812 Driver](ru-ru/ws2812_driver.md)
103 * [GPIO Controls](ru-ru/internals_gpio_control.md)
104 * [Proton C Conversion](ru-ru/proton_c_conversion.md)
105
106* For a Deeper Understanding
107 * [How Keyboards Work](ru-ru/how_keyboards_work.md)
108 * [Understanding QMK](ru-ru/understanding_qmk.md)
109
110* Other Topics
111 * [Using Eclipse with QMK](ru-ru/other_eclipse.md)
112 * [Using VSCode with QMK](ru-ru/other_vscode.md)
113 * [Support](ru-ru/support.md)
114 * [Translating the QMK Docs](ru-ru/translating.md)
115
116* QMK Internals (In Progress)
117 * [Defines](ru-ru/internals_defines.md)
118 * [Input Callback Reg](ru-ru/internals_input_callback_reg.md)
119 * [Midi Device](ru-ru/internals_midi_device.md)
120 * [Midi Device Setup Process](ru-ru/internals_midi_device_setup_process.md)
121 * [Midi Util](ru-ru/internals_midi_util.md)
122 * [Send Functions](ru-ru/internals_send_functions.md)
123 * [Sysex Tools](ru-ru/internals_sysex_tools.md)
diff --git a/docs/ru-ru/becoming_a_qmk_collaborator.md b/docs/ru-ru/becoming_a_qmk_collaborator.md
new file mode 100644
index 000000000..653f01ac8
--- /dev/null
+++ b/docs/ru-ru/becoming_a_qmk_collaborator.md
@@ -0,0 +1,9 @@
1# Стать соавтором QMK
2
3Соавтор QMK - это производитель или разработчик клавиатуры, который заинтересован в том, чтобы помочь QMK вырасти. Для этого он полностью поддерживает свои клавиатуры, поощряет пользователей и клиентов создавать новый функционал, идеи и раскладки клавиатур. Мы всегда стремимся добавлять больше клавиатур и соавторов, но нам важно, чтобы они соответствовали следующим требованиям:
4
5* **Иметь печатную плату на продажу.** К сожалению, у собранных вручную клавиатур слишком много вариаций и сложностей.
6* **Поддерживать вашу клавиатуру в QMK.** Это может потребовать просто начальной настройки, чтобы ваша клавиатура заработала. Но поддержка также может заключаться в адаптации изменений ядра QMK, которые способны сломать или сделать избыточным любой пользовательский код.
7* **Одобрять и производить слияние пулреквестов для вашей клавиатуры.** Мы призываем пользователей делиться своими раскладками клавиатур, чтобы другие могли их видеть и опираться на них при создании своих собственных.
8
9Если вы чувствуете, что удовлетворяете этим требованиям, напишите нам письмо по адресу hello@qmk.fm с кратким описанием и ссылками на вашу клавиатуру!
diff --git a/docs/ru-ru/getting_started_github.md b/docs/ru-ru/getting_started_github.md
index 8a0fd07a2..3b4940dd1 100644
--- a/docs/ru-ru/getting_started_github.md
+++ b/docs/ru-ru/getting_started_github.md
@@ -15,17 +15,23 @@ GitHub может показаться несколько сложным для
15 15
16![HTTPS link](http://i.imgur.com/eGO0ohO.jpg) 16![HTTPS link](http://i.imgur.com/eGO0ohO.jpg)
17 17
18Теперь введите `git clone` в командную строку, а затем вставьте ссылку: 18Теперь введите `git clone --recurse-submodules ` в командную строку, а затем вставьте ссылку:
19 19
20``` 20```
21user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git 21user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
22Cloning into 'qmk_firmware'... 22Cloning into 'qmk_firmware'...
23remote: Counting objects: 46625, done. 23remote: Enumerating objects: 9, done.
24remote: Compressing objects: 100% (2/2), done. 24remote: Counting objects: 100% (9/9), done.
25remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623 25remote: Compressing objects: 100% (5/5), done.
26Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done. 26remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
27Resolving deltas: 100% (29362/29362), done. 27Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
28Checking out files: 100% (2799/2799), done. 28Resolving deltas: 100% (119972/119972), done.
29...
30Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
31Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
32Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
33Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
34Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
29``` 35```
30 36
31Теперь у вас есть форк QMK на вашем локальном компьютере, и вы можете добавить свою раскладку, скомпилировать ее и прошить ей свою клавиатуру. Как только вы будете довольны своими изменениями, есть возможность добавить, зафиксировать их и сделать коммит в свой форк следующим образом: 37Теперь у вас есть форк QMK на вашем локальном компьютере, и вы можете добавить свою раскладку, скомпилировать ее и прошить ей свою клавиатуру. Как только вы будете довольны своими изменениями, есть возможность добавить, зафиксировать их и сделать коммит в свой форк следующим образом:
diff --git a/docs/ru-ru/getting_started_introduction.md b/docs/ru-ru/getting_started_introduction.md
new file mode 100644
index 000000000..ccc441806
--- /dev/null
+++ b/docs/ru-ru/getting_started_introduction.md
@@ -0,0 +1,58 @@
1# Введение
2
3Эта страница пытается объяснить основную информацию, которую вы должны знать, чтобы работать с проектом QMK. Предполагается, что вы знакомы с навигацией в оболочке Unix, но не предполагается, что вы знакомы с C или с компиляцией с использованием make.
4
5## Базовая структура QMK
6
7QMK - это форк [Джуна Вако (Jun Wako)](https://github.com/tmk) проекта [tmk_keyboard](https://github.com/tmk/tmk_keyboard). Оригинальный код TMK с изменениями можно найти в папке `tmk_core`. Дополнения QMK к проекту можно найти в папке `quantum`. Проекты клавиатур можно найти в папках `handwired` и `keyboard`.
8
9### Структура пространства пользователя
10
11Внутри папки `users` находится каталог для каждого пользователя. Это место для пользователей, куда они могут поместить код, чтобы использовать его с разными клавиатурами. Для получения дополнительной информации обратитесь к документации по [функциям пользовательского пространства](ru-ru/feature_userspace.md).
12
13### Структура проекта клавиатуры
14
15Внутри папки `keyboards` есть подпапки `handwired` и есть подкаталоги поставщиков и производителей, для примера, `clueboard` - это каталог для каждого проекта клавиатуры, например, `qmk_firmware/keyboards/clueboard/2x1800`. В нем вы найдете следующую структуру:
16* `keymaps/`: Различные раскладки клавиш, которые можно собрать.
17* `rules.mk`: Файл, который устанавливает параметры по умолчанию для команды "make". Не редактируйте этот файл напрямую, вместо этого используйте `rules.mk`, относящийся к конкретной раскладке.
18* `config.h`: Файл, который устанавливает параметры времени компиляции по умолчанию. Не редактируйте этот файл напрямую, вместо этого используйте `config.h`, относящийся к конкретной раскладке.
19* `info.json`: Файл настройки раскладки для QMK Configurator. Посмотрите [Поддержку конфигуратора](ru-ru/reference_configurator_support.md) для дополнительной информации.
20* `readme.md`: Краткий обзор клавиатуры.
21* `<keyboardName>.h`: В этом файле определяется раскладка клавиатуры по матрице переключателей клавиатуры.
22* `<keyboardName>.c`: В этом файле вы можете найти пользовательский код для клавиатуры.
23
24Для получения дополнительной информации о структуре проекта обратитесь к [Руководству QMK по клавиатуре](ru-ru/hardware_keyboard_guidelines.md).
25
26### Структура раскладки клавиатуры
27
28В каждой папке раскладки клавиатуры могут быть найдены следующие файлы. Обязательным является только файл `keymap.c`, и если остальные файлы не найдены, то будут выбраны параметры по умолчанию.
29
30* `config.h`: настройки вашей раскладки клавиатуры.
31* `keymap.c`: весь код вашей раскладки клавиатуры (обязателен).
32* `rules.mk`: активированные функции QMK.
33* `readme.md`: описание вашей раскладки клавиш, как ее могут использовать другие, и объяснения функций. Пожалуйста, загрузите изображения на сервис, такой как imgur.
34
35# Файл `config.h`
36
37Существует 3 возможных местоположения `config.h`:
38
39* клавиатура (`/keyboards/<keyboard>/config.h`)
40* пространство пользователя (`/users/<user>/config.h`)
41* раскладка клавиш (`/keyboards/<keyboard>/keymaps/<keymap>/config.h`)
42
43Система сборки автоматически загружает файлы конфигурации в указанном выше порядке. Если вы хотите переопределить любую настройку, заданную предыдущим `config.h`, вам сначала нужно будет включить некоторый шаблонный код для настроек, которые вы хотите изменить.
44
45```
46#pragma once
47```
48
49Затем, чтобы переопределить настройку из предыдущего файла `config.h`, вы должны сделать `#undef` и `#define` для неё снова.
50
51Код и настройка шаблона вместе выглядят так:
52```
53#pragma once
54
55// Переопределения производятся здесь!
56#undef MY_SETTING
57#define MY_SETTING 4
58```
diff --git a/docs/translating.md b/docs/translating.md
index 6eb268763..436581759 100644
--- a/docs/translating.md
+++ b/docs/translating.md
@@ -1,29 +1,55 @@
1# How to translate the QMK docs into different languages 1# Translating the QMK Docs
2 2
3All files in the root folder (`docs/`) should be in English - all other languages should be in subfolders with the ISO 639-1 language codes, followed by `-` and the country code where relevant. [A list of common ones can be found here](https://www.andiamo.co.uk/resources/iso-language-codes/). If this folder doesn't exist, you may create it. Each of the translated files should have the same name as the English version, so things can fall back successfully. 3All files in the root folder (`docs/`) should be in English - all other languages should be in subfolders with the ISO 639-1 language codes, followed by `-` and the country code where relevant. [A list of common ones can be found here](https://www.andiamo.co.uk/resources/iso-language-codes/). If this folder doesn't exist, you may create it. Each of the translated files should have the same name as the English version, so things can fall back successfully.
4 4
5A `_summary.md` file should exist in this folder with a list of links to each file, with a translated name, and link preceded by the language folder: 5A `_summary.md` file should exist in this folder with a list of links to each file, with a translated name, and link preceded by the language folder:
6 6
7 * [QMK简介](zh-cn/getting_started_introduction.md) 7```markdown
8 * [QMK简介](zh-cn/getting_started_introduction.md)
9```
10
11All links to other docs pages must also be prefixed with the language folder. If the link is to a specific part of the page (ie. a certain heading), you must use the English ID for the heading, like so:
12
13```markdown
14[建立你的环境](zh-cn/newbs-getting-started.md#set-up-your-environment)
15
16## 建立你的环境 :id=set-up-your-environment
17```
8 18
9Once you've finished translating a new language, you'll also need to modify the following files: 19Once you've finished translating a new language, you'll also need to modify the following files:
10 20
11* [`docs/_langs.md`](https://github.com/qmk/qmk_firmware/blob/master/docs/_langs.md) 21* [`docs/_langs.md`](https://github.com/qmk/qmk_firmware/blob/master/docs/_langs.md)
12 Each line should contain a country flag in the format `:us:` followed by the name represented in its own language: 22 Each line should contain a country flag as a [GitHub emoji shortcode](https://github.com/ikatyang/emoji-cheat-sheet/blob/master/README.md#country-flag) followed by the name represented in its own language:
13 23
14 - [:cn: 中文](/zh-cn/) 24 ```markdown
25 - [:cn: 中文](/zh-cn/)
26 ```
15 27
16* [`docs/index.html`](https://github.com/qmk/qmk_firmware/blob/master/docs/index.html) 28* [`docs/index.html`](https://github.com/qmk/qmk_firmware/blob/master/docs/index.html)
17 Both `placeholder` and `noData` objects should have a dictionary entry for the language folder in a string: 29 Both `placeholder` and `noData` objects should have a dictionary entry for the language folder in a string:
18 30
19 '/zh-cn/': '没有结果!', 31 ```js
32 '/zh-cn/': '没有结果!',
33 ```
34
35 The `nameLink` object, for setting the "QMK Firmware" heading link in the sidebar, must also be added to:
36
37 ```js
38 '/zh-cn/': '/#/zh-cn/',
39 ```
20 40
21## Previewing the translations 41 And make sure to add the language folder in the `fallbackLanguages` list, so it will properly fall back to English instead of 404ing:
22 42
23Before opening a pull request, you can preview your additions if you have Python 3 installed by running this command in the `docs/` folder: 43 ```js
44 fallbackLanguages: [
45 // ...
46 'zh-cn',
47 // ...
48 ],
49 ```
24 50
25 python -m http.server 9000 51## Previewing the Translations
26 52
27and navigating to http://localhost:9000/ - you should be able to select your new language from the "Translations" menu at the top-right. 53See [Previewing the Documentation](contributing.md#previewing-the-documentation) for how to set up a local instance of the docs - you should be able to select your new language from the "Translations" menu at the top-right.
28 54
29Once you're happy with your work, feel free to open a pull request! 55Once you're happy with your work, feel free to open a pull request!
diff --git a/docs/ws2812_driver.md b/docs/ws2812_driver.md
index 67481c458..80b694858 100644
--- a/docs/ws2812_driver.md
+++ b/docs/ws2812_driver.md
@@ -14,7 +14,7 @@ These LEDs are called "addressable" because instead of using a wire per color, e
14|----------|--------------------|--------------------| 14|----------|--------------------|--------------------|
15| bit bang | :heavy_check_mark: | :heavy_check_mark: | 15| bit bang | :heavy_check_mark: | :heavy_check_mark: |
16| I2C | :heavy_check_mark: | | 16| I2C | :heavy_check_mark: | |
17| SPI | | Soon™ | 17| SPI | | :heavy_check_mark: |
18| PWM | | Soon™ | 18| PWM | | Soon™ |
19 19
20## Driver configuration 20## Driver configuration
@@ -40,3 +40,30 @@ Configure the hardware via your config.h:
40#define WS2812_ADDRESS 0xb0 // default: 0xb0 40#define WS2812_ADDRESS 0xb0 // default: 0xb0
41#define WS2812_TIMEOUT 100 // default: 100 41#define WS2812_TIMEOUT 100 // default: 100
42``` 42```
43
44### SPI
45Targeting STM32 boards where WS2812 support is offloaded to an SPI hardware device. The advantage is that the use of DMA offloads processing of the WS2812 protocol from the MCU. `RGB_DI_PIN` for this driver is the configured SPI MOSI pin. Due to the nature of repurposing SPI to drive the LEDs, the other SPI pins, MISO and SCK, **must** remain unused. To configure it, add this to your rules.mk:
46
47```make
48WS2812_DRIVER = spi
49```
50
51Configure the hardware via your config.h:
52```c
53#define WS2812_SPI SPID1 // default: SPID1
54#define WS2812_SPI_MOSI_PAL_MODE 5 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 5
55```
56
57You must also turn on the SPI feature in your halconf.h and mcuconf.h
58
59#### Testing Notes
60
61While not an exhaustive list, the following table provides the scenarios that have been partially validated:
62
63| | SPI1 | SPI2 | SPI3 |
64|-|-|-|-|
65| f072 | ? | B15 :heavy_check_mark: | N/A |
66| f103 | A7 :heavy_check_mark: | B15 :heavy_check_mark: | N/A |
67| f303 | A7 :heavy_check_mark: B5 :heavy_check_mark: | B15 :heavy_check_mark: | B5 :heavy_check_mark: |
68
69*Other supported ChibiOS boards and/or pins may function, it will be highly chip and configuration dependent.* \ No newline at end of file
diff --git a/docs/zh-cn/README.md b/docs/zh-cn/README.md
index 9eb4ea777..bb7e0130f 100644
--- a/docs/zh-cn/README.md
+++ b/docs/zh-cn/README.md
@@ -19,7 +19,7 @@ QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开源软件,包
19 19
20## 如何编译 20## 如何编译
21 21
22在你能编译之前, 你需要[部署环境](getting_started_build_tools.md) 用于 AVR or/and ARM 开发。完成后, 你可以使用 `make` 命令来编译一个键盘和布局使用以下命令: 22在你能编译之前, 你需要[部署环境](zh-cn/getting_started_build_tools.md) 用于 AVR or/and ARM 开发。完成后, 你可以使用 `make` 命令来编译一个键盘和布局使用以下命令:
23 23
24 make planck/rev4:default 24 make planck/rev4:default
25 25
@@ -29,4 +29,4 @@ QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开源软件,包
29 29
30## 如何定制 30## 如何定制
31 31
32QMK 有许多 [特性](features.md)来探索,也有很多 [参考文档](http://docs.qmk.fm) 供您发掘。你可以通过修改 [布局](keymap.md)和[键码](keycodes.md)来利用许多特性。 32QMK 有许多 [特性](zh-cn/features.md)来探索,也有很多 [参考文档](http://docs.qmk.fm) 供您发掘。你可以通过修改 [布局](zh-cn/keymap.md)和[键码](zh-cn/keycodes.md)来利用许多特性。
diff --git a/docs/zh-cn/custom_quantum_functions.md b/docs/zh-cn/custom_quantum_functions.md
index 42ceba9ca..f2c6098dc 100644
--- a/docs/zh-cn/custom_quantum_functions.md
+++ b/docs/zh-cn/custom_quantum_functions.md
@@ -1,31 +1,31 @@
1# ζ̵Ĺ 1# 何定制你键盘的功能
2 2
3ںܶ˵ƻ̿ɲֻĵԷ㰴Ǹô򵥡϶ʵֱȼ򵥰ͺӵĹܡQMKעĹ, ǹ, ⣬ԶڲͬµΪ 3对于很多人来说客制化键盘可不只是向你的电脑发送你按了那个件这么简单。你肯定想实现比简单按键和宏更复杂的功能。QMK有能让你注入代码的钩子, 覆盖功能, 另外,还可以自定义键盘在不同情况下的行为。
4 4
5ҳٶκQMK֪ʶĶ[QMK](understanding_qmk.md)ڸIJⷢʲô 5本页不假定任何特殊的QMK知识,但阅读[理解QMK](understanding_qmk.md)将会在更基础的层面帮你理解发生了什么。
6 6
7## A Word on Core vs vs 7## A Word on Core vs 键盘 vs 布局
8 8
9ǰqmk֯νṹ 9我们把qmk织成个层次结构:
10 10
11* Core (`_quantum`) 11* Core (`_quantum`)
12 * Keyboard/Revision (`_kb`) 12 * Keyboard/Revision (`_kb`)
13 * Keymap (`_user`) 13 * Keymap (`_user`)
14 14
15ÿһڶϼһ`_kb()` `_user()` ׺ ڼ/޶ʹ`_kb()`׺ڲֲʹ`_user()`׺ 15下面描述的每一个函数都可以在定义上加一个`_kb()`或 `_user()` 后缀。 建议在键盘/修订层使用`_kb()`后缀,在布局层使用`_user()`后缀。
16 16
17ڼ/޶㶨庯ʱ`_kb()`ִκδǰȵ`_user()`DZҪģȻֲ㺯ͲҪá 17在键盘/修订层定义函数时,`_kb()`在执行任何代码前先调用`_user()`是必要的,不然布局层函数就不要被调用。
18<!-- ⣺ǾIJ̫--> 18<!-- 翻译问题:面那句译的不太好-->
19# Զ 19# 义键码
20 20
21ĿǰΪֹǸмΪ򴴽µļ롣ӴǶЩơ 21到目前为止,最常见的任务是更改现有键码的行为或创建新的键码。从代码角度来看这些操作都很相似。
22 22
23## һ¼ 23## 个新键码
24 24
25һöٳȫҲǸֲΨһֵQMKûֱֵСṩһ`SAFE_RANGE`ꡣöʱ`SAFE_RANGE`֤ȡΨһļֵ 25创建键码第一步,先枚举出它全部,也就是给键码起个名字并分配唯一数值。QMK没有直接限制最大键码值大小,而是提供了一个`SAFE_RANGE`宏。你可以在枚举时用`SAFE_RANGE`来保证你取得了唯一的键码值。
26 26
27 27
28öӡӵ`keymap.c`Ļڲ`FOO``BAR`ˡ 28这有枚码的例子。把这块加到`keymap.c`的话你在布局中能用`FOO``BAR`了。
29 29
30```c 30```c
31enum my_keycodes { 31enum my_keycodes {
@@ -34,46 +34,46 @@ enum my_keycodes {
34}; 34};
35``` 35```
36 36
37## ΪΪ 37## 为键码的行为
38 38
39㸲һѴڰΪʱΪ¼ʱҪ`process_record_kb()``process_record_user()`ڼʵ¼ǰQMKá`true`QMKķʽ롣ԺܷչĹܶ滻`false` QMKȻͼ̧ǰ¼ˡ 39当你覆盖一个已存在按键的行为时,或将这个行为赋给新键时,你要用`process_record_kb()`和`process_record_user()`函数。这俩函数在键处理中真实键事件被处理前被QMK调用。如果这俩函数返回`true`,QMK将会用正常的方式处理键码。这样可以很方便的扩展键码的功能而不是替换它。如果函数返回`false` QMK会跳过正常键处理,然后发送键子抬起还是按下事件就由你决定了。
40 40
41ij»ͷʱᱻá 41当某键按下或释放时这俩函数用。
42 42
43### process_record_user()`ʵ 43### process_record_user()`函数实现
44 44
45¡Զһ`FOO`Ϊڰ»ʱ 45例子做了个事。自义了个叫做`FOO`的键码的行为补充在按下回车时播放符。
46 46
47```c 47```c
48bool process_record_user(uint16_t keycode, keyrecord_t *record) { 48bool process_record_user(uint16_t keycode, keyrecord_t *record) {
49 switch (keycode) { 49 switch (keycode) {
50 case FOO: 50 case FOO:
51 if (record->event.pressed) { 51 if (record->event.pressed) {
52 // ʱЩʲô 52 // 按下时做些什么
53 } else { 53 } else {
54 // ͷʱЩʲô 54 // 释放时做些什么
55 } 55 }
56 return false; // ˼нһ 56 return false; // 跳过此键的所有进一步处理
57 case KC_ENTER: 57 case KC_ENTER:
58 // »ʱ 58 // 当按下回车时播放
59 if (record->event.pressed) { 59 if (record->event.pressed) {
60 PLAY_NOTE_ARRAY(tone_qwerty); 60 PLAY_NOTE_ARRAY(tone_qwerty);
61 } 61 }
62 return true; // QMKس/ͷ¼ 62 return true; // QMK触发回车按下/释放事件
63 default: 63 default:
64 return true; // 64 return true; // 常处理其键码
65 } 65 }
66} 66}
67``` 67```
68 68
69### `process_record_*` ĵ 69### `process_record_*` 函数文档
70 70
71* /޶: `bool process_record_kb(uint16_t keycode, keyrecord_t *record)` 71* 键盘/修订: `bool process_record_kb(uint16_t keycode, keyrecord_t *record)`
72* : `bool process_record_user(uint16_t keycode, keyrecord_t *record)` 72* 布局: `bool process_record_user(uint16_t keycode, keyrecord_t *record)`
73 73
74`keycode()`ڲ϶ģ`MO(1)`, `KC_L`, ȵȡ Ҫ `switch...case` Щ¼ 74`keycode(键码)`参数是在布局上定义的,比如`MO(1)`, `KC_L`, 等等。 你要用 `switch...case` 块来处理这些事件。
75 75
76`record`ʵϢ 76`record`含有实际按键的信息
77 77
78```c 78```c
79keyrecord_t record { 79keyrecord_t record {
@@ -88,9 +88,9 @@ keyrecord_t record {
88} 88}
89``` 89```
90 90
91# LED 91# LED控制
92 92
93qmkṩ˶ȡHID5LEDķ: 93qmk提供了读取HID规范包含的5LED的方法。:
94 94
95* `USB_LED_NUM_LOCK` 95* `USB_LED_NUM_LOCK`
96* `USB_LED_CAPS_LOCK` 96* `USB_LED_CAPS_LOCK`
@@ -98,20 +98,20 @@ qmkṩ˶ȡHID淶5LEDķ:
98* `USB_LED_COMPOSE` 98* `USB_LED_COMPOSE`
99* `USB_LED_KANA` 99* `USB_LED_KANA`
100 100
101ӦLED״̬λλ 101这五个量对应于LED状态的位置位。
102ַLED״̬ 102有两种方法可获得LED状态:
103 103
104* ִͨ `led_set_user()` 104* 通过执行 `led_set_user()`
105* `host_keyboard_leds()` 105* 通过调 `host_keyboard_leds()`
106 106
107## `led_set_user()` 107## `led_set_user()`
108 108
1095LEDκһ״̬Ҫıʱ˺á˺LED 1095LED任何的状态需要改变时,此数将。此函数通过参数输入LED参数。
110ʹ`IS_LED_ON(usb_led, led_name)``IS_LED_OFF(usb_led, led_name)`LED״̬ 110使用`IS_LED_ON(usb_led, led_name)``IS_LED_OFF(usb_led, led_name)`个宏来检查LED状态。
111 111
112!> `host_keyboard_leds()`ܻ`led_set_user()`ֵ 112!> `host_keyboard_leds()`可能会在`led_set_user()`用前返回新值。
113 113
114### `led_set_user()`ʵ 114### `led_set_user()`函数实现
115 115
116```c 116```c
117void led_set_user(uint8_t usb_led) { 117void led_set_user(uint8_t usb_led) {
@@ -143,59 +143,59 @@ void led_set_user(uint8_t usb_led) {
143} 143}
144``` 144```
145 145
146### `led_set_*`ĵ 146### `led_set_*`函数文档
147 147
148* /޶: `void led_set_kb(uint8_t usb_led)` 148* 键盘/修订: `void led_set_kb(uint8_t usb_led)`
149* : `void led_set_user(uint8_t usb_led)` 149* 布局: `void led_set_user(uint8_t usb_led)`
150 150
151## `host_keyboard_leds()` 151## `host_keyboard_leds()`
152 152
153᷵յLED״̬`led_set_*`֮ȡLED״̬ʱã[`matrix_scan_user()`](#ɨ). 153调用这个函数会返回最后收到的LED状态。这个函数在`led_set_*`之外读取LED状态时很有用,比如在[`matrix_scan_user()`](#矩阵扫描代码).
154Ϊ˱ݣ`IS_HOST_LED_ON(led_name)``IS_HOST_LED_OFF(led_name)` ֱ꣬ӵúͼ`host_keyboard_leds()` 154为了便捷,你可以用`IS_HOST_LED_ON(led_name)`和`IS_HOST_LED_OFF(led_name)` 宏,而不直接调用和检查`host_keyboard_leds()`。
155 155
156## LED״̬ 156## 置物理LED状态
157 157
158һЩʵΪLED״̬˷ķ 158一些键盘实现了为置物理LED的状态提供了便的方法
159 159
160### Ergodox Boards 160### Ergodox Boards
161 161
162Ergodoxʵṩ`ergodox_right_led_1`/`2`/`3_on`/`off()`ÿLED, Ҳ `ergodox_right_led_on`/`off(uint8_t led)` 򿪻رǡ 162Ergodox实现了提供`ergodox_right_led_1`/`2`/`3_on`/`off()`来让每个LED开或关, 也可以用 `ergodox_right_led_on`/`off(uint8_t led)` 按索引打开或关闭他们。
163 163
164⣬ʹ`ergodox_led_all_set(uint8_t n)`ָLEDȼÿLED`ergodox_right_led_1`/`2`/`3_set(uint8_t n)`ʹĻ`ergodox_right_led_set(uint8_t led, uint8_t n)` 164此外,还可以使用`ergodox_led_all_set(uint8_t n)`指定所有LED的亮度级别;针对每个LED用`ergodox_right_led_1`/`2`/`3_set(uint8_t n)`;使用索引的话用`ergodox_right_led_set(uint8_t led, uint8_t n)`。
165 165
166Ergodox boards ͬʱȼ`LED_BRIGHTNESS_LO`ȼ`LED_BRIGHTNESS_HI`(Ĭ). 166Ergodox boards 定义了最低亮度级别`LED_BRIGHTNESS_LO`和最高度级别`LED_BRIGHTNESS_HI`(默认最高).
167 167
168# ̳ʼ 168# 键盘初始化
169 169
170̳ʼмȡҪʲô 170键盘初始化过程有几步骤。是用函数取决你想要做什么
171 171
172ʼ˳г 172要初始化函,按调用序列出。
173 173
174* `keyboard_pre_init_*` - ڴЩǰеӲʼ 174* `keyboard_pre_init_*` - 在大多其他东西运行。适用于些需要提前运的硬件初始化。
175* `matrix_init_*` - ڹ̼мáʱӲѳʼδʼ 175* `matrix_init_*` - 在固动过程被调用。此时已初始化,功能尚未初始化。
176* `keyboard_post_init_*` - ڹ̼󱻵á£ġƻ붼Է 176* `keyboard_post_init_*` - 在固件启动过程最后被调用。大多数情况下,你的“客制化”代码都可以放在这里。
177 177
178!> ˵`keyboard_post_init_user`Ҫõĺ, ʱRGBƷ⡣ 178!> 对于大多数人来`keyboard_post_init_user`你想要调的函数。例如, 此时你可以RGB灯发光。
179 179
180## Ԥʼ 180## 键盘预初始化
181 181
182USBʼǰ 182码极早运行甚至都在USB初始化前运
183 183
184֮󲻾þʼˡ 184在这之后不久矩阵被初始化了。
185 185
186ڴû˵,òΪҪӲijʼ 186对于多数用户来,这用不到因为它用于面向件的初始化。
187 187
188ӲʼĻò(ʼLED). 188但如果你有初始化的放在这里再好不过(如初始化LED引脚一).
189 189
190### `keyboard_pre_init_user()`ʵ 190### `keyboard_pre_init_user()`函数实现
191 191
192̼ B0, B1, B2, B3, B4 LEDš 192中在键盘级别 B0, B1, B2, B3, B4 LED引脚。
193 193
194```c 194```c
195void keyboard_pre_init_user(void) { 195void keyboard_pre_init_user(void) {
196 // üԤʼ 196 // 调用键盘预初始化
197 197
198 // LEDΪģʽ 198 // LED引脚输出模式
199 setPinOutput(B0); 199 setPinOutput(B0);
200 setPinOutput(B1); 200 setPinOutput(B1);
201 setPinOutput(B2); 201 setPinOutput(B2);
@@ -204,73 +204,73 @@ void keyboard_pre_init_user(void) {
204} 204}
205``` 205```
206 206
207### `keyboard_pre_init_*` ĵ 207### `keyboard_pre_init_*` 函数文档
208 208
209* /޶: `void keyboard_pre_init_kb(void)` 209* 键盘/修订: `void keyboard_pre_init_kb(void)`
210* : `void keyboard_pre_init_user(void)` 210* 布局: `void keyboard_pre_init_user(void)`
211 211
212## ʼ 212## 矩阵初始化
213 213
214⽫ھʱãijӲúЩܱǰ 214这将阵初始化时调用,在某设置好后但在一些功能被初始化前。
215 215
216طõʱãӲأҲλá 216会用到的东西的时候会很有用,但与无关,也不依赖于它的动位置。
217 217
218 218
219### `matrix_init_*`ĵ 219### `matrix_init_*`函数文档
220 220
221* /޶: `void matrix_init_kb(void)` 221* 键盘/修订: `void matrix_init_kb(void)`
222* : `void matrix_init_user(void)` 222* 布局: `void matrix_init_user(void)`
223 223
224 224
225## ̺ʼ 225## 键盘后初始化
226 226
227Ǽ̳ʼеһijЩԣãΪʱӦöǽгʼ 227这是键盘初始化过程中的最后一个任务。如果您想更改某些特性,这会很有用,因为此时应该对它们进行初始化。
228 228
229 229
230### `keyboard_post_init_user()`ʵ 230### `keyboard_post_init_user()`实现
231 231
232ʾгʼɺУRGBơ 232在所有初始化完成后运行,配置RGB灯。
233 233
234```c 234```c
235void keyboard_post_init_user(void) { 235void keyboard_post_init_user(void) {
236 // úʼ 236 // 调用后初始化
237 rgblight_enable_noeeprom(); // ʹRgb 237 rgblight_enable_noeeprom(); // 使能Rgb,不保存
238 rgblight_sethsv_noeeprom(180, 255, 255); // ɫõɫ(ɫ) 238 rgblight_sethsv_noeeprom(180, 255, 255); // 将颜到蓝绿色()不保存
239 rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); // ÿٺģ 239 rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); // 快速呼吸式不保存
240} 240}
241``` 241```
242 242
243### `keyboard_post_init_*` ĵ 243### `keyboard_post_init_*` 函数文档
244 244
245* /޶: `void keyboard_post_init_kb(void)` 245* 键盘/修订: `void keyboard_post_init_kb(void)`
246* : `void keyboard_post_init_user(void)` 246* 布局: `void keyboard_post_init_user(void)`
247 247
248# ɨ 248# 矩阵扫描代码
249 249
250ܵĻҪ`process_record_*()`Զַ̣ʽӵ¼Уȷ벻Լ̲Ӱ졣Ȼڼ£бҪоɨ衣ЩҪرעܣΪÿٱ10Ρ 250可能的话你要用`process_record_*()`自定义键盘,以这种方式连接到事件中,以确保代码不会对键盘产生负面的性能影响。然而,在极少数情况下,有必要进行矩阵扫描。在这些函数中要特别注意代码的性能,因为它每秒至少被调用10次。
251 251
252### `matrix_scan_*`ʵ 252### `matrix_scan_*`实现
253 253
254ӱʡˡhookһܼе֮ǰӦ㹻˽qmkڲṹԱûʾ±дҪ[һissue](https://github.com/qmk/qmk_firmware/issues/new)[Discordǽ](https://discord.gg/Uq7gcHh). 254这个例子被故意省略了。在hook这样一个对性能及其敏感的区域之前,您应该足够了解qmk的内部结构,以便在没有示例的情况下编写。如果你需要帮助,请[建立一个issue](https://github.com/qmk/qmk_firmware/issues/new)或[在Discord上与我们交流](https://discord.gg/Uq7gcHh).
255 255
256### `matrix_scan_*` ĵ 256### `matrix_scan_*` 函数文档
257 257
258* /޶: `void matrix_scan_kb(void)` 258* 键盘/修订: `void matrix_scan_kb(void)`
259* : `void matrix_scan_user(void)` 259* 布局: `void matrix_scan_user(void)`
260 260
261úÿξɨʱãMCUͬдҪΪкܶΡ 261该函数在每次矩阵扫描时被调用,这基本与MCU处理能力上限相同。在这里写代码要谨慎,因为它会运行很多次。
262 262
263ԶɨʱõҲԶ״̬(LEDƻĻ)ûҲ붨еĹܡ 263你会在自定义矩阵扫描代码时用到这个函数。这也可以用作自定义状态输出(比如LED灯或者屏幕)或者其他即便用户不输入你也想定期运行的功能。
264 264
265 265
266# / 266# 键盘 空闲/唤醒 代码
267 267
268֧־ͿֹͨͣһƱﵽ""RGBƺͱǺܺõӡԽԼܺģҲ̷ζѡ 268如果键盘支持就可以通过停止一大票功能来达到"空闲"。RGB灯和背光就是很好的例子。这可以节约能耗,也可能让你键盘风味更佳。
269 269
270: `suspend_power_down_*``suspend_wakeup_init_*`, ֱϵͳͻʱá 270个函数控制: `suspend_power_down_*``suspend_wakeup_init_*`, 别在系统闲和唤醒时调用。
271 271
272 272
273### suspend_power_down_user()suspend_wakeup_init_user()ʵ 273### suspend_power_down_user()suspend_wakeup_init_user()实现
274 274
275 275
276```c 276```c
@@ -283,18 +283,18 @@ void suspend_wakeup_init_user(void) {
283} 283}
284``` 284```
285 285
286### / ĵ 286### 键盘 挂起/唤醒 函数文档
287 287
288* /޶: `void suspend_power_down_kb(void)` `void suspend_wakeup_init_user(void)` 288* 键盘/修订: `void suspend_power_down_kb(void)` `void suspend_wakeup_init_user(void)`
289* : `void suspend_power_down_kb(void)` `void suspend_wakeup_init_user(void)` 289* 布局: `void suspend_power_down_kb(void)` `void suspend_wakeup_init_user(void)`
290 290
291# 291# 改变
292 292
293ÿıдڲָԶá 293每当改变这就运这对于层指示或自定义层处理
294 294
295### `layer_state_set_*` ʵ 295### `layer_state_set_*` 实现
296 296
297ʹPlanckʾ [RGB](feature_rgblight.md)֮Ӧ 297使用了Planck了如何设置 [RGB背光灯](feature_rgblight.md)使与层对应
298 298
299```c 299```c
300uint32_t layer_state_set_user(uint32_t state) { 300uint32_t layer_state_set_user(uint32_t state) {
@@ -318,31 +318,31 @@ uint32_t layer_state_set_user(uint32_t state) {
318 return state; 318 return state;
319} 319}
320``` 320```
321### `layer_state_set_*` ĵ 321### `layer_state_set_*` 函数文档
322 322
323* /޶: `uint32_t layer_state_set_kb(uint32_t state)` 323* 键盘/修订: `uint32_t layer_state_set_kb(uint32_t state)`
324* : `uint32_t layer_state_set_user(uint32_t state)` 324* 布局: `uint32_t layer_state_set_user(uint32_t state)`
325 325
326 326
327`״̬`ǻbitmask, [](keymap.md#ֵIJ״̬) 327`态`活动层的bitmask, 详见[局概述](keymap.md#布局的层状态)
328 328
329 329
330# (EEPROM) 330# 存配置 (EEPROM)
331 331
332óڵıڼСЩñصEEPROM粻ʧ ÿ`eeconfig_read_kb``eeconfig_read_user`ȡ`eeconfig_update_kb``eeconfig_update_user`д롣ϣܹлĹܺ(лRGBָʾ⣬`eeconfig_init_kb``eeconfig_init_user`EEPROMĬֵ 332这会让你的配置长期的保存在键盘中。这些配置保存在你主控的EEPROM里,掉电不会消失。 设置可以用`eeconfig_read_kb`和`eeconfig_read_user`读取,可以用`eeconfig_update_kb`和`eeconfig_update_user`写入。这对于您希望能够切换的功能很有用(比如切换RGB层指示。此外,你可以用`eeconfig_init_kb`和`eeconfig_init_user`来设置EEPROM默认值。
333 333
334ӵIJֿǣкܶ෽ͨEEPROM洢ͷݣҲûַǡȷġÿֻһ˫(ֽ)ռ䡣 334最复杂的部分可能是,有很多方法可以通过EEPROM存储和访问数据,并且并没有用哪种方法是“政治正确”的。你每个功能只有一个双字(四字节)空间。
335 335
336סEEPROMдġдܸߣDzֻдEEPROMСдƵMCU̡ 336记住EEPROM是有写入寿命的。尽管写入寿命很高,但是并不是只有设置写道EEPROM中。如果你写入频繁,你的MCU寿命将会变短。
337 337
338* ôԣӡ 338* 如果您个例子,您可能望避免使用这特性,因它相当复杂。
339 339
340### ʵ 340### 实现
341 341
342ãҶдʹû֡һӵĺкܶҪʵϣʹ˺ܶ 342本例讲解了如何添加设置,并且读写。本里使用了用户布局。这是一个复杂的函数,有很多事情要做。实际上,它使用了很多上述函数来工作!
343 343
344 344
345keymap.c´: 345在你的keymap.c文件中将以下码添加至:
346```c 346```c
347typedef union { 347typedef union {
348 uint32_t raw; 348 uint32_t raw;
@@ -354,19 +354,19 @@ typedef union {
354user_config_t user_config; 354user_config_t user_config;
355``` 355```
356 356
357ϴ뽨һṹ壬ýṹԴ洢òдEEPROM㽫趨ΪڽṹȻ塣Ҫס`bool` ()ֵʹ1λ, `uint8_t`ʹ8λ, `uint16_t`ʹ16λԻϴʹã˳Ǵܻ鷳Ϊǻıддֵ 357以上代码建立了一个结构体,该结构体可以存储设置并可用于写入EEPROM。如此这般将无需定义变量,因为在结构体中已然定义。要记住`bool` (布尔)值使用1位, `uint8_t`使用8位, `uint16_t`使用16位。你可以混合搭配使用,但是顺序记错可能会招致麻烦,因为那会改变写入写出的值。
358 358
359 `layer_state_set_*`ʹ`rgb_layer_change`ʹ`keyboard_post_init_user``process_record_user`һС 359 `layer_state_set_*`函数中使用了`rgb_layer_change`,使用了`keyboard_post_init_user`和`process_record_user`来配置一切。
360 360
361Ҫʹ`keyboard_post_init_userҪ`eeconfig_read_user()`ոմĽṹ塣ȻʹṹIJеĹܡ 361首先要使用`keyboard_post_init_user,你要加入`eeconfig_read_user()`来填充你刚刚创建的结构体。然后您可以立即使用这个结构来控制您的布局中的功能。就像这样:
362```c 362```c
363void keyboard_post_init_user(void) { 363void keyboard_post_init_user(void) {
364 // òּľʼ 364 // 调用布级别的矩初始化
365 365
366 // EEPROM 366 // EEPROM用户配置
367 user_config.raw = eeconfig_read_user(); 367 user_config.raw = eeconfig_read_user();
368 368
369 // ʹܣĬϲ 369 // 如使能,设
370 if (user_config.rgb_layer_change) { 370 if (user_config.rgb_layer_change) {
371 rgblight_enable_noeeprom(); 371 rgblight_enable_noeeprom();
372 rgblight_sethsv_noeeprom_cyan(); 372 rgblight_sethsv_noeeprom_cyan();
@@ -374,7 +374,7 @@ void keyboard_post_init_user(void) {
374 } 374 }
375} 375}
376``` 376```
377ϺڶEEPROMúʹøĬϲRGBɫ"raw"ֵǴ"union"Ľṹתġ 377以上函数会在读EEPROM配置后立即使用该设置来设置默认层RGB颜色。"raw"的值是从你上面基于"union"创建的结构体中转换来的。
378 378
379```c 379```c
380uint32_t layer_state_set_user(uint32_t state) { 380uint32_t layer_state_set_user(uint32_t state) {
@@ -391,86 +391,86 @@ uint32_t layer_state_set_user(uint32_t state) {
391 case _ADJUST: 391 case _ADJUST:
392 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_white(); rgblight_mode_noeeprom(1); } 392 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_white(); rgblight_mode_noeeprom(1); }
393 break; 393 break;
394 default: // Ĭϲ 394 default: // 针对层或默认层
395 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_cyan(); rgblight_mode_noeeprom(1); } 395 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_cyan(); rgblight_mode_noeeprom(1); }
396 break; 396 break;
397 } 397 }
398 return state; 398 return state;
399} 399}
400``` 400```
401ֵʹʱıRGBơֵ, Ϊ`process_record_user`һ¼`RGB_LYR`ҪȷʹRGB룬ʹʾرգ뽫Ϊ 401这样仅在值使能时会改变RGB背光灯。现在配置这个值, 为`process_record_user`创建一个新键码叫做`RGB_LYR`。我们要确保,如果使用正常的RGB代码,使用上面的示例将其关闭,请将其设置为:
402```c 402```c
403 403
404bool process_record_user(uint16_t keycode, keyrecord_t *record) { 404bool process_record_user(uint16_t keycode, keyrecord_t *record) {
405 switch (keycode) { 405 switch (keycode) {
406 case FOO: 406 case FOO:
407 if (record->event.pressed) { 407 if (record->event.pressed) {
408 // ʱʲô 408 // 按下时做点什么
409 } else { 409 } else {
410 // ͷʱʲô 410 // 释放时做点什么
411 } 411 }
412 return false; // ˼Ľһ 412 return false; // 跳过此键的进一步处理
413 case KC_ENTER: 413 case KC_ENTER:
414 // ڰ»ʱ 414 // 在按下回车时播放
415 if (record->event.pressed) { 415 if (record->event.pressed) {
416 PLAY_NOTE_ARRAY(tone_qwerty); 416 PLAY_NOTE_ARRAY(tone_qwerty);
417 } 417 }
418 return true; // QMKس/ͷ¼ 418 return true; // QMK产生回车按下/释放事件
419 case RGB_LYR: // underglowΪʾʹá 419 case RGB_LYR: // 本句让underglow层指示,或常使用。
420 if (record->event.pressed) { 420 if (record->event.pressed) {
421 user_config.rgb_layer_change ^= 1; // л״̬ 421 user_config.rgb_layer_change ^= 1; // 切换状态
422 eeconfig_update_user(user_config.raw); // EEPROMд״̬ 422 eeconfig_update_user(user_config.raw); // EEPROM写入新状态
423 if (user_config.rgb_layer_change) { // ״̬ʹ 423 if (user_config.rgb_layer_change) { // 如果状态被使能
424 layer_state_set(layer_state); // ̸ɫ 424 layer_state_set(layer_state); // 那么立刻新层
425 } 425 }
426 } 426 }
427 return false; break; 427 return false; break;
428 case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // еRGB (see quantum_keycodes.h, L400 Բο) 428 case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // 对于所有的RGB代码 (see quantum_keycodes.h, L400 可以参考)
429 if (record->event.pressed) { //ʧָܲʾı 429 if (record->event.pressed) { //本句能层指示,假改变了要把它禁用
430 if (user_config.rgb_layer_change) { // ʹʱ 430 if (user_config.rgb_layer_change) { // 使能时
431 user_config.rgb_layer_change = false; // ʧܣȻ 431 user_config.rgb_layer_change = false; // 失能,然后
432 eeconfig_update_user(user_config.raw); // EEPROMд 432 eeconfig_update_user(user_config.raw); // EEPROM写入
433 } 433 }
434 } 434 }
435 return true; break; 435 return true; break;
436 default: 436 default:
437 return true; // 437 return true; // 按其
438 } 438 }
439} 439}
440``` 440```
441Ҫ`eeconfig_init_user`ԵEEPROMʱָĬֵ, ԶǿEEPROM`EEP_RST`[Bootmagic](feature_bootmagic.md)磬ҪĬRGBָʾĬֵ 441最后你要加入`eeconfig_init_user`函数,所以当EEPROM重置时,可以指定默认值, 甚至自定义操作。想强制重置EEPROM,请用`EEP_RST`键码或[Bootmagic](feature_bootmagic.md)函数。比如,如果要在默认情况下设置RGB层指示,并保存默认值
442 442
443```c 443```c
444void eeconfig_init_user(void) { // EEPROM 444void eeconfig_init_user(void) { // EEPROM正被重置
445 user_config.raw = 0; 445 user_config.raw = 0;
446 user_config.rgb_layer_change = true; // Ҫʹ 446 user_config.rgb_layer_change = true; // 想要默认使能
447 eeconfig_update_user(user_config.raw); // EEPROMдĬֵ 447 eeconfig_update_user(user_config.raw); // EEPROM写入默认值
448 448
449 // use the non noeeprom versions, ҪEEPROMдЩֵ 449 // use the non noeeprom versions, 还要向EEPROM写入这些值
450 rgblight_enable(); // ĬʹRGB 450 rgblight_enable(); // 默认使能RGB
451 rgblight_sethsv_cyan(); // Ĭɫ 451 rgblight_sethsv_cyan(); // 设置青色
452 rgblight_mode(1); // Ĭó 452 rgblight_mode(1); // 设置长亮
453} 453}
454``` 454```
455 455
456ȻˡRGBָʾʱûһֱ棬¼̡ʹRGB룬ָʾʧܣˡ 456然后就完事了。RGB层指示会在你想让它工作时工作。这个设置会一直保存,即便你拔下键盘。如果你使用其他RGB代码,层指示将失能,现在它可以做你所想了。
457 457
458### 'EECONFIG' ĵ 458### 'EECONFIG' 函数文档
459 459
460* /޶: `void eeconfig_init_kb(void)`, `uint32_t eeconfig_read_kb(void)``void eeconfig_update_kb(uint32_t val)` 460* 键盘/修订: `void eeconfig_init_kb(void)`, `uint32_t eeconfig_read_kb(void)``void eeconfig_update_kb(uint32_t val)`
461* : `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)``void eeconfig_update_user(uint32_t val)` 461* 布局: `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)``void eeconfig_update_user(uint32_t val)`
462 462
463`val` дEEPROMֵ`eeconfig_read_*`EEPROMһ32λ(˫)ֵ 463`val` 是你想写入EEPROM的值,`eeconfig_read_*`函数会EEPROM返回32(双字)的值。
464 464
465# Զ-ٽֵ(TAPPING_TERM) 465# -长按(TAPPING_TERM)
466Ĭ,-ٽֵȫͳһģҲͨáڴû˵ܺáЩ£`LT`˵ʱ˫ܼ󣬿ΪЩļװסΪ˲ÿԶ룬ܿΪÿ`TAPPING_TERM` 466默认情况下,击键-长按临界值是全球统一的,并且不能通过键进行配置。对于大多数用户来说这很好。但是在有些情况下,对于`LT`键来说按键延时对双功能键的提升更大,可能是因为有些键比其他的键更容易按住。为了不给每个都自定义键码,本功能可以为每个键定义`TAPPING_TERM`。
467 467
468ʹܵĻ, Ҫ`config.h``#define TAPPING_TERM_PER_KEY` 468想使能这功能的话, 要先在`config.h`加上`#define TAPPING_TERM_PER_KEY`
469 469
470 470
471## `get_tapping_term`ʵ 471## `get_tapping_term`实现
472 472
473Ҫ޸Ļڼ`TAPPING TERM`,Ҫ`keymap.c`ļ´: 473想要修改基于键码的`TAPPING TERM`,你要向`keymap.c`文件添加如下代:
474 474
475```c 475```c
476uint16_t get_tapping_term(uint16_t keycode) { 476uint16_t get_tapping_term(uint16_t keycode) {
@@ -485,6 +485,6 @@ uint16_t get_tapping_term(uint16_t keycode) {
485} 485}
486``` 486```
487 487
488### `get_tapping_term` ĵ 488### `get_tapping_term` 函数文档
489 489
490ƪ,quantum߼ֻ̼Ҫûɡ 490像这篇的其,这不需要quantum或者键盘别的函数只要用户函数即
diff --git a/docs/zh-cn/faq_build.md b/docs/zh-cn/faq_build.md
index 8fb449db3..0d9047bc5 100644
--- a/docs/zh-cn/faq_build.md
+++ b/docs/zh-cn/faq_build.md
@@ -56,11 +56,6 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
56?> 事实上没有一个驱动的最佳选择,有些选项就是和某些系统相辅相成。但libUSB和WinUSB似乎也算是这里的最佳选择了。 56?> 事实上没有一个驱动的最佳选择,有些选项就是和某些系统相辅相成。但libUSB和WinUSB似乎也算是这里的最佳选择了。
57如果bootloader在设备列表中没有显示,你可能要使能 "List all devices"选项在选项菜单中`Options`,然后找到有问题的bootloader设备。(译者注:在win10中可能为 查看-显示隐藏的设备) 57如果bootloader在设备列表中没有显示,你可能要使能 "List all devices"选项在选项菜单中`Options`,然后找到有问题的bootloader设备。(译者注:在win10中可能为 查看-显示隐藏的设备)
58 58
59
60## WINAVR已淘汰
61不再推荐使用WINAVR,使用可能会导致问题
62详情请见[TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
63
64## USB VID 和 PID 59## USB VID 和 PID
65你可以在编辑`config.h`时使用任何你想用的ID值。实际上,使用任何可能未使用的ID都没有问题,除了有极低的与其他产品发生冲突的可能性。 60你可以在编辑`config.h`时使用任何你想用的ID值。实际上,使用任何可能未使用的ID都没有问题,除了有极低的与其他产品发生冲突的可能性。
66 61
@@ -73,29 +68,6 @@ https://github.com/tmk/tmk_keyboard/issues/150
73- http://www.obdev.at/products/vusb/license.html 68- http://www.obdev.at/products/vusb/license.html
74- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1 69- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
75 70
76## Cortex: `cstddef: No such file or directory`
77在Ubuntu 14.04上的GCC 4.8 会出现这种问题需要用这个PPA升级到4.9。
78https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
79
80https://github.com/tmk/tmk_keyboard/issues/212
81https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
82https://developer.mbed.org/forum/mbed/topic/5205/
83
84## `clock_prescale_set` and `clock_div_1` Not Available
85你的工具链太旧了不支持MCU。比如WinAVR 20100110就不支持ATMega32u2.
86
87```
88Compiling C: ../../tmk_core/protocol/lufa/lufa.c
89avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
90../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
91../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
92../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
93../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
94../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
95make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
96```
97
98
99## AVR的BOOTLOADER_SIZE 71## AVR的BOOTLOADER_SIZE
100注意Teensy2.0++ bootloader的大小是2048字节。有些Makefile注释错了。 72注意Teensy2.0++ bootloader的大小是2048字节。有些Makefile注释错了。
101 73
diff --git a/docs/zh-cn/faq_debug.md b/docs/zh-cn/faq_debug.md
index a3cc7c510..7eff7f265 100644
--- a/docs/zh-cn/faq_debug.md
+++ b/docs/zh-cn/faq_debug.md
@@ -101,56 +101,6 @@ https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switc
101 101
102http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279 102http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
103 103
104
105## Bootloader跳转不好用
106在**Makefile**中正确配置**Makefile**大小。如果分区大小不正确,引导加载程序可能无法从**Magic command**和**Boot Magic**加载。
107```
108# bootloader字节数:
109# Atmel DFU loader(ATmega32U4) 4096
110# Atmel DFU loader(AT90USB128) 8192
111# LUFA bootloader(ATmega32U4) 4096
112# Arduino Caterina(ATmega32U4) 4096
113# USBaspLoader(ATmega***) 2048
114# Teensy halfKay(ATmega32U4) 512
115# Teensy++ halfKay(AT90USB128) 2048
116OPT_DEFS += -DBOOTLOADER_SIZE=4096
117```
118AVR引导大小是通过**BOOTSZ**熔丝位来设置的。查阅你单片机的datasheet。
119记住,datasheet用的是**Word**(2字节)表示大小和地址,TMK用的是**Byte**。
120
121AVR引导部分位于闪存的末尾,如下所示(Application是应用区,Bootloader是引导区)。
122```
123byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
1240x0000 +---------------+ 0x00000 +---------------+
125 | | | |
126 | | | |
127 | Application | | Application |
128 | | | |
129 = = = =
130 | | 32KB-4KB | | 128KB-8KB
1310x6000 +---------------+ 0x1E000 +---------------+
132 | Bootloader | 4KB | Bootloader | 8KB
1330x7FFF +---------------+ 0x1FFFF +---------------+
134
135
136byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
1370x0000 +---------------+ 0x00000 +---------------+
138 | | | |
139 | | | |
140 | Application | | Application |
141 | | | |
142 = = = =
143 | | 32KB-512B | | 128KB-2KB
1440x7E00 +---------------+ 0x1FC00 +---------------+
145 | Bootloader | 512B | Bootloader | 2KB
1460x7FFF +---------------+ 0x1FFFF +---------------+
147```
148
149详情请见下方issue。
150https://github.com/tmk/tmk_keyboard/issues/179
151
152如果你使用TeensyUSB, 有一个[已知bug](https://github.com/qmk/qmk_firmware/issues/164)硬件重置按钮阻止软件定义重置键工作。重新插拔键盘就好了。
153
154## 特殊额外键不起作用(系统,音频控制键) 104## 特殊额外键不起作用(系统,音频控制键)
155你要在`rules.mk`定义`EXTRAKEY_ENABLE`在QMK中使用它们。 105你要在`rules.mk`定义`EXTRAKEY_ENABLE`在QMK中使用它们。
156 106
@@ -173,24 +123,6 @@ EXTRAKEY_ENABLE = yes # 音频控制和系统控制
173 123
174Arduino Leonardo和micro使用**ATMega32U4**,该芯片TMK可用,但Arduino的bootloader会导致问题。 124Arduino Leonardo和micro使用**ATMega32U4**,该芯片TMK可用,但Arduino的bootloader会导致问题。
175 125
176## 为锁定键添加指示灯
177你要自制CapsLock, ScrollLock 和 NumLock指示灯?见下文。
178
179http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
180
181## 为Arduino Micro/Leonardo编程
182按下重置键然后在8秒内运行下方这样的命令。
183
184```
185avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
186```
187
188设备名称因系统而异。
189
190http://arduino.cc/en/Main/ArduinoBoardMicro
191https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
192
193
194## USB 3 兼容性 126## USB 3 兼容性
195据传说有些人用USB3接口会有问题,用USB2的试试。 127据传说有些人用USB3接口会有问题,用USB2的试试。
196 128
diff --git a/docs/zh-cn/faq_keymap.md b/docs/zh-cn/faq_keymap.md
index ee8e3c06b..7fb434b4c 100644
--- a/docs/zh-cn/faq_keymap.md
+++ b/docs/zh-cn/faq_keymap.md
@@ -66,24 +66,8 @@ https://github.com/tmk/tmk_keyboard/issues/67
66远古机械键盘偶尔会有自锁机械开关,现在几乎没有了。***大多数情况下你不需要使用该功能,且要使用`KC_CAPS`, `KC_NLCK`和`KC_SLCK`这三个键码。*** 66远古机械键盘偶尔会有自锁机械开关,现在几乎没有了。***大多数情况下你不需要使用该功能,且要使用`KC_CAPS`, `KC_NLCK`和`KC_SLCK`这三个键码。***
67 67
68## 输入ASCII之外的特殊字符比如Cédille 'Ç' 68## 输入ASCII之外的特殊字符比如Cédille 'Ç'
69没有在所有系统中输入这个的通用方法。你要定义针对你的特定操作系统或布局的**宏**。
70 69
71比如看这个**宏**代码的文章。 70请见[Unicode](feature_unicode.md)功能。
72
73http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
74<!--翻译问题:下方维基百科链接应全部替换为中文链接,暂未找到全部-->
75在**Windows**上,可以用`AltGr`键或**Alt码**。
76* http://en.wikipedia.org/wiki/AltGr_key
77* https://zh.wikipedia.org/wiki/Alt%E7%A0%81
78
79在**Mac OS**定义`Option`键组合。
80* https://zh.wikipedia.org/wiki/Option%E9%94%AE#%E6%9B%BF%E4%BB%A3%E9%94%AE%E7%9B%98%E8%BE%93%E5%85%A5
81
82在**Xorg**可以改用`compose`键。
83* http://en.wikipedia.org/wiki/Compose_key
84
85下方链接查看**Unicode**输入。
86* http://en.wikipedia.org/wiki/Unicode_input
87 71
88## macOS上的`Fn` 72## macOS上的`Fn`
89 73
@@ -136,51 +120,6 @@ https://github.com/tekezo/Karabiner/issues/403
136 120
137请见[Grave Escape](feature_grave_esc.md)功能。 121请见[Grave Escape](feature_grave_esc.md)功能。
138 122
139## 右侧双角色修改键(诸如Shift、Alt等有修改其他键作用的键)变箭头键
140右侧修改键单击时会变为箭头键,长按就还是修改键。在TMK中双角色键称之为**TAP**.
141```
142
143#include "keymap_common.h"
144
145
146/* 用TMK双角色键功能实现右侧修改键改箭头键
147 *
148 * https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
149 * https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
150 */
151const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
152 /* 0: qwerty */
153 [0] = LAYOUT( \
154 ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
155 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
156 LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
157 LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
158 FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
159 [1] = LAYOUT( \
160 GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
161 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
162 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
163 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
164 TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
165};
166
167const uint16_t PROGMEM fn_actions[] = {
168 [0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
169 [1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
170 [2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
171 [3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
172 [4] = ACTION_LAYER_MOMENTARY(1),
173 [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
174 [6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
175 [7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
176 [8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
177};
178
179```
180
181双角色键说明: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
182
183
184## Mac OSX的弹出键 123## Mac OSX的弹出键
185`KC_EJCT` 键码在OSX可以使用 https://github.com/tmk/tmk_keyboard/issues/250 124`KC_EJCT` 键码在OSX可以使用 https://github.com/tmk/tmk_keyboard/issues/250
186似乎Windows10会忽略该键码,Linux/Xorg可以识别该键码但默认不映射。 125似乎Windows10会忽略该键码,Linux/Xorg可以识别该键码但默认不映射。
diff --git a/docs/zh-cn/getting_started_github.md b/docs/zh-cn/getting_started_github.md
index 0400eea64..2b2f7a75c 100644
--- a/docs/zh-cn/getting_started_github.md
+++ b/docs/zh-cn/getting_started_github.md
@@ -16,17 +16,23 @@ Github can be a little tricky to those that aren't familiar with it - this guide
16 16
17![HTTPS链接](http://i.imgur.com/eGO0ohO.jpg) 17![HTTPS链接](http://i.imgur.com/eGO0ohO.jpg)
18 18
19然后,在命令行输入`git clone `,然后粘贴你的链接: 19然后,在命令行输入`git clone --recurse-submodules `,然后粘贴你的链接:
20 20
21``` 21```
22user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git 22user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
23Cloning into 'qmk_firmware'... 23Cloning into 'qmk_firmware'...
24remote: Counting objects: 46625, done. 24remote: Enumerating objects: 9, done.
25remote: Compressing objects: 100% (2/2), done. 25remote: Counting objects: 100% (9/9), done.
26remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623 26remote: Compressing objects: 100% (5/5), done.
27Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done. 27remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
28Resolving deltas: 100% (29362/29362), done. 28Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
29Checking out files: 100% (2799/2799), done. 29Resolving deltas: 100% (119972/119972), done.
30...
31Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
32Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
33Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
34Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
35Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
30``` 36```
31 37
32现在你本地计算机有QMK的分叉了,你可以添加你的布局了, 为你的键盘编译并刷新固件吧。如果你觉得你的修改很不错, 你可以添加,提交,然后想你的分叉推出(pull)你的改变,像这样: 38现在你本地计算机有QMK的分叉了,你可以添加你的布局了, 为你的键盘编译并刷新固件吧。如果你觉得你的修改很不错, 你可以添加,提交,然后想你的分叉推出(pull)你的改变,像这样:
diff --git a/docs/zh-cn/getting_started_introduction.md b/docs/zh-cn/getting_started_introduction.md
index dcd0b72a5..b977b6339 100644
--- a/docs/zh-cn/getting_started_introduction.md
+++ b/docs/zh-cn/getting_started_introduction.md
@@ -4,7 +4,7 @@
4 4
5## 基本QMK结构 5## 基本QMK结构
6 6
7QMK是[Jun Wako](https://github.com/tmk)的[tmk_keyboard](https://github.com/tmk/tmk_keyboard)工程的一个分叉。经过更改的TMK原始代码放在`tmk` 文件夹中。 QMK增加的新东西可以在 `quantum` 文件夹中找到。 键盘项目可以在 `handwired`(手动飞线) 和 `keyboard`(PCB键盘)这两个文件夹找到。 7QMK是[Jun Wako](https://github.com/tmk)的[tmk_keyboard](https://github.com/tmk/tmk_keyboard)工程的一个分叉。经过更改的TMK原始代码放在`tmk_core` 文件夹中。 QMK增加的新东西可以在 `quantum` 文件夹中找到。 键盘项目可以在 `handwired`(手动飞线) 和 `keyboard`(PCB键盘)这两个文件夹找到。
8 8
9### 用户空间结构 9### 用户空间结构
10 10