`
@@ -227,8 +255,6 @@ The year should be the first year the file is created. If work was done to that
The core of QMK is licensed under the [GNU General Public License](https://www.gnu.org/licenses/licenses.en.html). If you are shipping binaries for AVR processors you may choose either [GPLv2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html) or [GPLv3](https://www.gnu.org/licenses/gpl.html). If you are shipping binaries for ARM processors you must choose [GPL Version 3](https://www.gnu.org/licenses/gpl.html) to comply with the [ChibiOS](https://www.chibios.org) GPLv3 license.
-If your keyboard makes use of the [uGFX](https://ugfx.io) features within QMK you must comply with the [uGFX License](https://ugfx.io/license.html), which requires a separate commercial license before selling a device containing uGFX.
-
## Technical Details
If you're looking for more information on making your keyboard work with QMK, [check out the hardware section](hardware.md)!
diff --git a/docs/he-il/README.md b/docs/he-il/README.md
deleted file mode 100644
index 5c113eb498..0000000000
--- a/docs/he-il/README.md
+++ /dev/null
@@ -1,33 +0,0 @@
-
-# קושחה עבור Quantum Mechanical Keyboard
-
-[![גירסה נוכחית](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
-[![ערוץ דיסקורד](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
-[![מצב מסמכים](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
-[![תומכי GitHub](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
-[![מזלגות GitHub](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
-
-## מה היא קושחת QMK?
-
-QMK (*Quantum Mechanical Keyboard*) היא קהילת קוד פתוח (open source) שמתחזקת את קושחת QMK, QMK Toolbox, qmk.fm, והמסמכים המתאימים. קושחת QMK היא קושחה עבור מקלדות המבוססת על [tmk\_keyboard](https://github.com/tmk/tmk_keyboard) עם כמה תוספות עבור בקרי Atmel AVR ובאופן ספציפי יותר - [מוצרי OLKB](https://olkb.com), מקלדת [ErgoDox EZ](https://www.ergodox-ez.com), וגם [מוצרי Clueboard](https://clueboard.co/). בנוסף, הקושחה עברה פורט עבור שבבי ARM באמצעות ChibiOS. ניתן להשתמש בה על מנת להפעיל את מקלדות ה PCB המקוסטמות שלך.
-
-## איך להשיג אותה
-
-אם אתם מתכננים לתרום מיפוי מקשים, מקלדת או יכולת ל QMK, הדבר הקל ביותר הוא [לעשות פורק לריפו בGitHub](https://github.com/qmk/qmk_firmware#fork-destination-box), ולעשות קלון לריפו בסביבה המקומית ושם לבצע את השינויים שלכם, לדחוף אותם ולפתוח [Pull Request](https://github.com/qmk/qmk_firmware/pulls) מהפורק שלך.
-
-אחרת, אפשר להוריד את הקושחה באופן ישיר ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), או לשכפל אותה באמצעות git (`git@github.com:qmk/qmk_firmware.git`), או https (`https://github.com/qmk/qmk_firmware.git`).
-
-## איך לקמפל
-
-לפני שתצליחו לקמפל, תדרשו [להתקין סביבה](he-il/getting_started_build_tools.md) עבור פיתוח AVR ו/או ARM. ברגע שהדבר בוצע, תוכלו להריץ פקודת `make` כדי לבנות מקלדת ומיפוי עם התחביר הבא:
-
- make planck/rev4:default
-
-כך תוכלו לבנות את גרסא `rev4` של ה `planck` עם מיפוי ברירת המחדל (`default`). לא כל המקלדות בעלות גרסאות (נקרא גם תת-פרוייקט או תיקייה), במקרה כזה, אפשר להריץ את הפקודה הבאה:
-
- make preonic:default
-
-## איך להתאים
-
-לQMK יש המון [יכולות](he-il/features.md) שאפשר לנווט בהן, וכמות נכבדת של [תיעוד ודוקומנטציה](https://docs.qmk.fm) בה אפשר לנבור. רוב הפיצ׳רים באים לידי ביטוי על ידי שינוי [מיפוי המקלדת](he-il/keymap.md) ושינוי [קודי המקשים](he-il/keycodes.md).
-
diff --git a/docs/he-il/_summary.md b/docs/he-il/_summary.md
deleted file mode 100644
index 148eb6400d..0000000000
--- a/docs/he-il/_summary.md
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-**בשפה העברית**
-* [המדריך המלא למתחילים](he-il/newbs.md)
- * [מקורות ללמידה](he-il/newbs_learn_more_resources.md)
-* [בסיס QMK](he-il/README.md)
- * [מבוא לQMK](he-il/getting_started_introduction.md)
- * [איך להשתמש בGitHub](he-il/getting_started_github.md)
- * [קבלת עזרה](he-il/getting_started_getting_help.md)
-* [שאלות נפוצות](he-il/faq.md)
- * [שאלות נפוצות כלליות](he-il/faq_general.md)
-* [חומרה](he-il/hardware.md)
-* התייחסויות
- * [איך לתעד נכון](he-il/documentation_best_practices.md)
-
-**בשפה האנגלית**
-* [המדריך המלא למתחילים](he-il/newbs.md)
- * [התחלה](he-il/newbs_getting_started.md)
- * [בנייה של הקושחה הראשונה שלך](he-il/newbs_building_firmware.md)
- * [צריבה של הקושחה](he-il/newbs_flashing.md)
- * [בדיקות ודיבאגינג](he-il/newbs_testing_debugging.md)
- * [עבודה נכונה ב GIT](he-il/newbs_best_practices.md)
- * [מקורות ללמידה](he-il/newbs_learn_more_resources.md)
-
-* [בסיס QMK](he-il/README.md)
- * [מבוא לQMK](he-il/getting_started_introduction.md)
- * [QMK CLI](he-il/cli.md)
- * [QMK CLI Config](he-il/cli_configuration.md)
- * [תרומה ל QMK](he-il/contributing.md)
- * [איך להשתמש בGitHub](he-il/getting_started_github.md)
- * [קבלת עזרה](he-il/getting_started_getting_help.md)
-
-* [שינויים משמעותיים](he-il/breaking_changes.md)
- * [2019 Aug 30](he-il/ChangeLog/20190830.md)
-
-* [שאלות נפוצות](he-il/faq.md)
- * [שאלות נפוצות כלליות](he-il/faq_general.md)
- * [בנייה/קומפילציה של QMK](he-il/faq_build.md)
- * [דיבאגינג ופתרון תקלות של QMK](he-il/faq_debug.md)
- * [מיפוי מקשים](he-il/faq_keymap.md)
- * [התקנת דרייברים עם Zadig](he-il/driver_installation_zadig.md)
-
-* מדריכים מפורטים
- * [התקנת כלי Build](he-il/getting_started_build_tools.md)
- * [מדריך Vagrant](he-il/getting_started_vagrant.md)
- * [הוראות בנייה/קומפילציה](he-il/getting_started_make_guide.md)
- * [צריבת קושחה](he-il/flashing.md)
- * [התאמה אישית של הפונקציונאליות](he-il/custom_quantum_functions.md)
- * [מיפוי מקשים](he-il/keymap.md)
-
-* [חומרה](he-il/hardware.md)
- * [מעבדי AVR](he-il/hardware_avr.md)
- * [דרייברים](he-il/hardware_drivers.md)
-
-* התייחסויות
- * [מדריך למקלדות](he-il/hardware_keyboard_guidelines.md)
- * [אפשרויות הגדרות](he-il/config_options.md)
- * [קודי מקשים](he-il/keycodes.md)
- * [קונבנציות קוד - C](he-il/coding_conventions_c.md)
- * [קונבנציות קוד - Python](he-il/coding_conventions_python.md)
- * [איך לתעד נכון](he-il/documentation_best_practices.md)
- * [טמפלטים לדוקומנטציה](he-il/documentation_templates.md)
- * [מילון](he-il/reference_glossary.md)
- * [בדיקות יחידה](he-il/unit_testing.md)
- * [פונקציות שימושיות](he-il/ref_functions.md)
- * [תמיכה בConfigurator](he-il/reference_configurator_support.md)
- * [פורמט info.json](he-il/reference_info_json.md)
- * [פיתוח בPython CLI](he-il/cli_development.md)
-
-* [תכונות](he-il/features.md)
- * [Basic Keycodes](he-il/keycodes_basic.md)
- * [US ANSI Shifted Keys](he-il/keycodes_us_ansi_shifted.md)
- * [Quantum Keycodes](he-il/quantum_keycodes.md)
- * [Advanced Keycodes](he-il/feature_advanced_keycodes.md)
- * [Audio](he-il/feature_audio.md)
- * [Auto Shift](he-il/feature_auto_shift.md)
- * [Backlight](he-il/feature_backlight.md)
- * [Bluetooth](he-il/feature_bluetooth.md)
- * [Bootmagic](he-il/feature_bootmagic.md)
- * [Combos](he-il/feature_combo.md)
- * [Command](he-il/feature_command.md)
- * [Debounce API](he-il/feature_debounce_type.md)
- * [DIP Switch](he-il/feature_dip_switch.md)
- * [Dynamic Macros](he-il/feature_dynamic_macros.md)
- * [Encoders](he-il/feature_encoders.md)
- * [Grave Escape](he-il/feature_grave_esc.md)
- * [Haptic Feedback](he-il/feature_haptic_feedback.md)
- * [HD44780 LCD Controller](he-il/feature_hd44780.md)
- * [Key Lock](he-il/feature_key_lock.md)
- * [Layouts](he-il/feature_layouts.md)
- * [Leader Key](he-il/feature_leader_key.md)
- * [LED Matrix](he-il/feature_led_matrix.md)
- * [Macros](he-il/feature_macros.md)
- * [Mouse Keys](he-il/feature_mouse_keys.md)
- * [OLED Driver](he-il/feature_oled_driver.md)
- * [One Shot Keys](he-il/one_shot_keys.md)
- * [Pointing Device](he-il/feature_pointing_device.md)
- * [PS/2 Mouse](he-il/feature_ps2_mouse.md)
- * [RGB Lighting](he-il/feature_rgblight.md)
- * [RGB Matrix](he-il/feature_rgb_matrix.md)
- * [Space Cadet](he-il/feature_space_cadet.md)
- * [Split Keyboard](he-il/feature_split_keyboard.md)
- * [Stenography](he-il/feature_stenography.md)
- * [Swap Hands](he-il/feature_swap_hands.md)
- * [Tap Dance](he-il/feature_tap_dance.md)
- * [Terminal](he-il/feature_terminal.md)
- * [Thermal Printer](he-il/feature_thermal_printer.md)
- * [Unicode](he-il/feature_unicode.md)
- * [Userspace](he-il/feature_userspace.md)
- * [Velocikey](he-il/feature_velocikey.md)
-
-* למייקרים ומודרים
- * [מדריך לכתיבה ידנית](he-il/hand_wire.md)
- * [מדריך לצריבת ISP](he-il/isp_flashing_guide.md)
- * [מדריך לדיבאגינג ARM](he-il/arm_debugging.md)
- * [מנהל התקן I2C](he-il/i2c_driver.md)
- * [מנהל התקן SPI](he-il/spi_driver.md)
- * [בקרת GPIO](he-il/internals_gpio_control.md)
- * [המרת Proton C](he-il/proton_c_conversion.md)
-
-* להבנה עמוקה יותר
- * [איך עובדות מקלדות](he-il/how_keyboards_work.md)
- * [להבין את QMK](he-il/understanding_qmk.md)
-
-* נושאים נוספים
- * [שימוש ב - Eclipse עם QMK](he-il/other_eclipse.md)
- * [שימוש ב - VSCode עם QMK](he-il/other_vscode.md)
- * [תמיכה](he-il/getting_started_getting_help.md)
- * [כיצד להוסיף תרגום](he-il/translating.md)
-
-* QMK מבפנים (בתהליך)
- * [Defines](he-il/internals_defines.md)
- * [Input Callback Reg](he-il/internals_input_callback_reg.md)
- * [Midi Device](he-il/internals_midi_device.md)
- * [Midi Device Setup Process](he-il/internals_midi_device_setup_process.md)
- * [Midi Util](he-il/internals_midi_util.md)
- * [Send Functions](he-il/internals_send_functions.md)
- * [Sysex Tools](he-il/internals_sysex_tools.md)
-
-
diff --git a/docs/he-il/documentation_best_practices.md b/docs/he-il/documentation_best_practices.md
deleted file mode 100644
index bba9d886ab..0000000000
--- a/docs/he-il/documentation_best_practices.md
+++ /dev/null
@@ -1,67 +0,0 @@
-
-# איך לתעד נכון
-
-עמוד זה קיים כדי לתעד את השיטות הטובות ביותר כאשר כותבים תיעוד עבור QMK. מעקב אחר הוראות אלה יעזור לשמור על סגנון וטון עקביים, אשר בתורם יעזרו לאנשים אחרים להבין טוב יותר את QMK.
-
-# פתיחת עמוד
-
-התיעוד שלך צריך בד״כ להפתח עם כותרת בגודל H1, אחריה פסקה אחת של תיאור של מה המשתמש ימצא בעמוד זה.
-זכור כי כותרת זו והפסקה ימוקמו ליד תוכן העניינים, אז חשוב לשמור על כותרת קצרה ולהמנע ממשפטים ארוכים ללא פיסוק.
-
-לדוגמה:
-
-```
-# הכותרת שלי
-
-עמוד זה מדבר על היכולת הסופר-מגניבה שלי. אתה יכול להשתמש ביכולת זו כדי להכין קפה, לסחוט תפוזים ולקבל משלוח של ביצים ועוגות מהסופר הקרוב באמצעות רחפן.
-```
-
-# כותרות
-
-עמוד התיעוד צריך לאופן כללי לכלול מס׳ כותרות בגודל "H1". רק כותרות מגודל H1 ו- H2 יכללו בתוכן העניינים, אז חשוב לתכנן אותם בהתאם. הכותרות לא להיות רחבות מידי כדי למנוע מתוכן העניינים להפוך להיות רחב מידי
-
-# בלוקי רמיזה מעוצבים
-
-ניתן להוסיף בלוקי רמיזה מעוצבים שמצויירים מסביב לטקסט כדי למשוך תשומת לב אליו.
-
-### חשוב
-
-```
-!> זה חשוב
-```
-
-יתרנדר כ:
-
-!> זה חשוב
-
-### טיפים כלליים
-
-```
-?> זהו טיפ שימושי.
-```
-
-יתרנדר כ:
-
-?> זהו טיפ שימושי.
-
-
-# תיעוד יכולות ופיצ׳ריםDocumenting Features
-
-אם יוצרים יכולת חדשה ב QMK, צרו עמוד תיעוד עבורה. העמוד לא צריך להיות ארוך במיוחד, מספר משפטים המתארים את היכולת (פיצ׳ר) וטבלה המתארת קודי מקשים רלוונטיים זה מספיק. הנה דוגמה בסיסית:
-
-```markdown
-# הפיצ׳ר המגניב שלי
-
-עמוד זה מדבר על היכולת הסופר-מגניבה שלי. אתה יכול להשתמש ביכולת זו כדי להכין קפה, לסחוט תפוזים ולקבל משלוח של ביצים ועוגות מהסופר הקרוב באמצעות רחפן.
-
-## קודי המקשים המגניבים של היכולת שלי
-
-|Long Name|Short Name|Description|
-|---------|----------|-----------|
-|KC_COFFEE||Make Coffee|
-|KC_CREAM||Order Cream|
-|KC_SUGAR||Order Sugar|
-```
-
-מקמו את התיעוד שלכם בתוך `docs/feature_.md`, והוסיפו קישור לקובץ זה במקום המתאים ב `docs/_sidebar.md`. אם הוספתם קודי מקשים נוספים, תקפידו להוסיף אותם ל- `docs/keycodes.md` עם לינק לעמוד היכולת שלכם.
-
diff --git a/docs/he-il/faq.md b/docs/he-il/faq.md
deleted file mode 100644
index 0a783eb8ca..0000000000
--- a/docs/he-il/faq.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# שאלות נפוצות
-
-* [כללי](faq_general.md)
-* [בנייה או קומפילציה של QMK](faq_build.md)
-* [דיבאגינג ופתרון בעיות של QMK](faq_debug.md)
-* [מיפוי מקשים](faq_keymap.md)
-
diff --git a/docs/he-il/faq_general.md b/docs/he-il/faq_general.md
deleted file mode 100644
index fc102d6c6a..0000000000
--- a/docs/he-il/faq_general.md
+++ /dev/null
@@ -1,17 +0,0 @@
-
-# שאלות נפוצות
-
-## מה זה QMK?
-
-[QMK](https://github.com/qmk), קיצור עבור Quantum Mechanical Keyboard, הוא קבוצה של אנשים הבונים כלים עבור מקלדות מותאמות אישית. התחלנו עם [קושחת QMK](https://github.com/qmk/qmk_firmware), פורק של [TMK](https://github.com/tmk/tmk_keyboard) אשר שונה באופן ניכר.
-
-## מה ההבדלים העיקריים בין QMK ו-Keymap TMK?
-
-TMK עוצב ומומש במקור ע״י [Jun Wako](https://github.com/tmk). QMK התחיל כפורק של [Jack Humbert](https://github.com/jackhumbert) של הפרוייקט של TMK עבור Planck. אחרי כמה זמן הפורק של ג׳ק השתנה מזה של TMK וב- 2015 ג׳ק החליט לשנות את שמו של הפורק ל- QMK.
-
-מנק׳ מבט טכנית, QMK נבנה על גבי TMK ע״י הוספת יכולות ופיצ׳רים חדשים. ראוי לציון ש- QMK הרחיב את מס׳ קודי המקלדת האפשריים ומשתמש בהם למימוש יכולות מתקדמות כמו `S()`, `LCTL()`, ו- `MO()`. ניתן לראות רשימה מלאה של קודי המקלדת האלה ב - [קודי מקלדת](keycodes.md).
-
-מנק׳ מבט של הפרוייקט וניהול הקהילה, TMK מנהל את כל המקלדות הנתמכות בעצמו, עם מעט תמיכה מהקהילה. כל אחד יכול לעשות פורק מהפרוייקט עבור מקלדות אחרות. רק מס׳ מיפויי מקשים נמצאים בברירת המחדל כך שאנשים בד״כ לא משתפים מיפויי מקשים זה עם זה. QMK מעודד את השיתוף של המקלדות וקודי המקשים דרך רפוזיטורי בניהול מרכזי, אשר מקבל את כל בקשות ה- Pull Requests שעומדות בסטנדרט האיכות. רובם מנוהלות ע״י הקהילה, אבל הצוות של QMK עוזר כשנדרש.
-
-לשתי הגישות יש יתרונות וחסרונות וקוד עובר בחופשיות בין TMK ל- QMK כשצריך.
-
diff --git a/docs/he-il/getting_started_getting_help.md b/docs/he-il/getting_started_getting_help.md
deleted file mode 100644
index 7dec3e87d6..0000000000
--- a/docs/he-il/getting_started_getting_help.md
+++ /dev/null
@@ -1,17 +0,0 @@
-
-# קבלת עזרה
-
-ישנם משאבים רבים לצורך קבלת עזרה עם QMK.
-
-## צ׳אט בזמן אמת
-
-אפשר למצוא מפתחי QMK ומשתמשים [בשרת ה-Discord הראשי שלנו](https://discord.gg/Uq7gcHh). ישנם ערוצים ספציפיים בשרת לצורך שיחות על הקושחה, ארגז הכלים, חומרה והמגדיר.
-
-## סאב-רדיט OLKB
-
-הפורום הרשמי של QMK נמצא ב - [/r/olkb](https://reddit.com/r/olkb) באתר [reddit.com](https://reddit.com).
-
-## סוגיות GitHub
-
-ניתן לפתוח [סוגייה ב-GitHub](https://github.com/qmk/qmk_firmware/issues). הדבר שימושי במיוחד כאשר הסוגיה דורשת דיון עמוק וארוך או דיבאגינג.
-
diff --git a/docs/he-il/getting_started_github.md b/docs/he-il/getting_started_github.md
deleted file mode 100644
index 900852effd..0000000000
--- a/docs/he-il/getting_started_github.md
+++ /dev/null
@@ -1,75 +0,0 @@
-
-# איך להשתמש ב-GitHub עם QMK
-
-GitHub עלול להיות קצת טריקי למי שלא מכיר את העבודה איתו - מדריך זה ילווה אתכם שלב אחר שלב דרך ביצוע פעולות fork, clone ו-pull request עם QMK.
-
-?> מדריך זה מניח שאתם מרגישים בנוח עם הרצה של פקודות בסביבת command line (שורת הפקודה) ו-git מותקן במערכת שלכם.
-
-התחילו ב- [עמוד של QMK ב-GitHub](https://github.com/qmk/qmk_firmware), ותצמאו כפתור בחלק העליון מימין עם התיכוב "Fork":
-
-![Fork ב-GitHub](https://i.imgur.com/8Toomz4.jpg)
-
-אם אתם חלק מארגון, תצטרכו לבחור לאיזה חשבון לבצע פעולת fork. ברוב המבקרים, תרצו לבצע fork לתוך החשבון הפרטי שלכם. ברגע שה-fork הסתיים (לפעמים זה יכול לקחת קצת זמן) הקליקו על כפתור ה-"Clone or Download":
-
-![הורדה מ-GitHub](https://i.imgur.com/N1NYcSz.jpg)
-
-תוודאו שאתם בוחרים באופצייה של "HTTPS", בחרו את הקישור והעתיקו אותו:
-
-![קישור HTTPS](https://i.imgur.com/eGO0ohO.jpg)
-
-מכאן והלאה, הקיש `git clone --recurse-submodules ` בשורת הפקודה והדביקו את הלינק שלכם:
-
-
-
-```
-user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
-Cloning into 'qmk_firmware'...
-remote: Enumerating objects: 9, done.
-remote: Counting objects: 100% (9/9), done.
-remote: Compressing objects: 100% (5/5), done.
-remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
-Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
-Resolving deltas: 100% (119972/119972), done.
-...
-Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
-Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
-Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
-Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
-Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
-```
-
-
-
-כעת, יש לכם את ה-fork של QMK על המכונה המקומית שלכם ואתם יכולים להוסיף את מיפויי המקשים שלכם, לקמפל את הפרוייקט ולצרוב אותו על הלוח שלכם. כשאתם שלמים עם השינוי שעשיתם, תוכלו להוסיף, לבצע פעולת commit ולדחוף את השינויים ל-fork שלכם באופן הבא:
-
-
-
-```
-user@computer:~$ git add .
-user@computer:~$ git commit -m "adding my keymap"
-[master cccb1608] adding my keymap
- 1 file changed, 1 insertion(+)
- create mode 100644 keyboards/planck/keymaps/mine/keymap.c
-user@computer:~$ git push
-Counting objects: 1, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (1/1), done.
-Writing objects: 100% (1/1), 1.64 KiB | 0 bytes/s, done.
-Total 1 (delta 1), reused 0 (delta 0)
-remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
-To https://github.com/whoeveryouare/qmk_firmware.git
- + 20043e64...7da94ac5 master -> master
-```
-
-
-
-השינויים שלכם יופיעו ב-fork שלכם ב-GitHub - אם תחזרו לשם (`https://github.com/
/qmk_firmware`), תוכלו ליצור "Pull Request חדש" ע״י הקשה על הכפתור הבא:
-
-![Pull Request חדש](https://i.imgur.com/DxMHpJ8.jpg)
-
-כאן תוכלו לראות בדיוק למה עשיתם commit - אם הכל נראה תקין, תוכלו להשלים את הפעולה ע״י הקשה על "Create Pull Request":
-
-![צרו Pull Request](https://i.imgur.com/Ojydlaj.jpg)
-
-אחרי שהגשתם, אנו עלולים לפנות אליכם לגבי השינויים שהצעתם, נבקש שתבצעו שינויים ובסופו של דבר נקבל את השינויים! תודה שתרמתם לפרוייקט QMK :)
-
diff --git a/docs/he-il/getting_started_introduction.md b/docs/he-il/getting_started_introduction.md
deleted file mode 100644
index fca86bdaaf..0000000000
--- a/docs/he-il/getting_started_introduction.md
+++ /dev/null
@@ -1,72 +0,0 @@
-
-# מבוא
-
-עמוד זה מנסה להסביר את המידע הבסיסי אותו תדרשו לדעת כדי לעבוד עם פרוייקט QMK. הוא מניח שאתם יודעים איך לנווט בסביבת Unix Shell, אבל לא מניח שאתם מכירים את שפת C או קומפילציה באמצעות make.
-
-## מבנה QMK בסיסי
-
-QMK הוא פורק של הפרוייקט [tmk_keyboard](https://github.com/tmk/tmk_keyboard) של [Jun Wako](https://github.com/tmk). קוד הTMK המקורי, עם התאמות, יכול להמצא בתיקיית `tmk_core`. התוספות של QMK לפרוייקט יכולות להמצא בתיקיית `quantum`. פרוייקטי מקלדות יכולות להמצא בתיקיות `handwired` ו- `keyboard`.
-
-### מבנה אחסון המשתמש
-
-בתוך תיקיית `users` יש תיקייה לכל משתמש. זה המקום למשתמשים להוסיף קוד שהם רוצים להשתמש בו במקלדות שונות. מומלץ לעיין במסמך [תכונות אחסון המשתמש](feature_userspace.md) לקבלת מידע נוסף.
-
-### מבנה פרוייקט המקלדת
-
-בתוך תיקיית `keyboards`, תת התיקייה `handwired` ותת התיקיות של היצרן והמוכר, לדוגמה `clueboard` היא תיקייה לכל פרוייקט מקלדת - `qmk_firmware/keyboards/clueboard/2x1800` בתוך התיקייה הזאת תמצאו את המבנה הבא:
-
-
-* `keymaps/`: מיפויי מקשים שונים היכולים להבנות
-* `rules.mk`: קובץ המגדיר את הגדרות ברירת המחדל של `make`. נא לא לערוך את הקובץ ישירות, במקום זאת, השתמשו בקובץ מיפוי המקשים ספציפי `rules.mk`.
-* `config.h`: הקובץ מכיל הגדרות לזמן הקומפילציה. נא לא לערוך את הקובץ ישירות אלא להשתמש בקובץ `config.h` לכל מיפויי מקשים.
-* `info.json`: הקובץ מכיל הגדרות פריסה עבור QMK Configurator. צפו ב [תמיכת Configurator](reference_configurator_support.md) למידע נוסף.
-* `readme.md`: סקירה כללית של המקלדת.
-* `
.h`: הקובץ בו פריסת המקלדת מוגדרת אל מול מטריצת המתגים של המקלדת.
-* `.c`: הקובץ בו ניתן למצוא קוד מותאם למקלדת.
-
-למידע נוסף - אנא הכנסו ל [QMK](hardware_keyboard_guidelines.md).
-For more information on project structure, see [QMK מדריך למקלדת](hardware_keyboard_guidelines.md).
-
-### מבנה מפיוי המקשים
-
-בכל ספריית מיפוי מקשים, הקבצים הבאים עלולים להמצא. רק הקובץ `keymap.c` הוא חובה, אם השאר לא נמצאים, אפשרויות ברירת המחדל יבחרו.
-In every keymap folder, the following files may be found. Only `keymap.c` is required, and if the rest of the files are not found the default options will be chosen.
-
-* `config.h`: ההגדרות השונות עבור מיפוי המקשים.
-* `keymap.c`: כל הקודים של מיפוי המקשים, קובץ חובה
-* `rules.mk`: אילו יכולות של QMK מאופשרות.
-* `readme.md`: הסבר על מיפוי המקשים, איך אחרים ישתמשו בו והסבר על היכולות. נא להעלות תמונות לשירותים כמו imgur.
-
-# קובץ `config.h`
-
-לקובץ `config.h` יש 3 מיקומים אפשריים:
-
-* keyboard (`/keyboards//config.h`)
-* userspace (`/users//config.h`)
-* keymap (`/keyboards//keymaps//config.h`)
-
-מערכת הבילד אוטומטית בוחרת את קובץ ההגדרות לפי הסדר הנ״ל. אם רוצים לדרוס הגדרה מסויימת שהוגדרה בקובץ `config.h` קודם, ראשית תצטרכו להשתמש בקוד מוכן עבור ההגדרות שאתם רוצים לשנות.
-
-
-
-```
-#pragma once
-```
-
-
-
-כדי לדרוס הגדרות מקובץ `config.h` קודם, אתם מוכרחים להשתמש בפקודת `#undef` ואז שוב `#define`.
-
-דוגמה לקוד כזה נראית כך:
-
-
-```
-#pragma once
-
-// overrides go here!
-#undef MY_SETTING
-#define MY_SETTING 4
-```
-
-
-
diff --git a/docs/he-il/hardware.md b/docs/he-il/hardware.md
deleted file mode 100644
index fca03bd64b..0000000000
--- a/docs/he-il/hardware.md
+++ /dev/null
@@ -1,10 +0,0 @@
-
-# חומרה
-
-QMK רצה על מגוון של חומרות. אם המעבד שלך יכול להיות ממוקד (מטורגט) ע״י [LUFA](https://www.fourwalledcubicle.com/LUFA.php) או [ChibiOS](https://www.chibios.org) כנראה שתוכל לגרום ל QMK לרוץ על המעבד. קטע זה מדבר על הרצת QMK, ותקשורת עם, סוגים שונים של חומרות.
-
-* [מדריך למקלדת](hardware_keyboard_guidelines.md)
-* [מעבדי AVR](hardware_avr.md)
-* מעבדי ARM (TBD)
-* [מנהלי התקנים](hardware_drivers.md)
-
diff --git a/docs/he-il/newbs_learn_more_resources.md b/docs/he-il/newbs_learn_more_resources.md
deleted file mode 100644
index 4127c387ff..0000000000
--- a/docs/he-il/newbs_learn_more_resources.md
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# מקורות ללמידה
-
-המקורות הבאים מטרתם היא לתת למשתמשים חדשים בקהילת QMK כדי להבין לעומק את המידע שמגיע במסמכי המתחילים.
-
-מקורות גיט:
-
-* [מדריך כללי מעולה](https://www.codecademy.com/learn/learn-git)
-* [משחק גיט כדי ללמוד מדוגמאות](https://learngitbranching.js.org/)
-* [מקורות גיט כדי ללמוד עוד על GitHub](getting_started_github.md)
-* [מקור גיט כדי ללמוד במפורש על QMK](contributing.md)
-
-מקורות לפקודות שורה (Command Line):
-
-* [מדריך טוב על Command Line](https://www.codecademy.com/learn/learn-the-command-line)
-
diff --git a/docs/he-il/proton_c_conversion.md b/docs/he-il/proton_c_conversion.md
deleted file mode 100644
index 9642ca3090..0000000000
--- a/docs/he-il/proton_c_conversion.md
+++ /dev/null
@@ -1,36 +0,0 @@
-
-# המרה של לוח להשתמש ב-Proton C
-
-אם לוח נתמך ב-QMK משתמש בלוח Pro Micro (או כל לוח נתמך) ואתם רוצים להשתמש ב-Proton C, ניתן לייצר את החומרה ע"י הוספה של הפקודה `CONVERT_TO_PROTON_C=yes` (או `CTPC=yes`) לפקודת make, כמו כאן:
-
-
-```
- make 40percentclub/mf68:default CTPC=yes
-```
-
-
-ניתן להוסיף את אותו ארגומנט לקובץ `rules.mk` במיפוי המקשים שלכם, שתיצור את אותה התוצאה.
-
-הדבר חושף את דגל `CONVERT_TO_PROTON_C` שניתן להשתמש בו בקוד שלכם באמצעות פקודת `#ifdef`, כמו כאן:
-
-
-```
- #ifdef CONVERT_TO_PROTON_C
- // Proton C code
- #else
- // Pro Micro code
- #endif
-```
-
-
-לפני שתצליחו לקמפל, יכול להיות שתקבלו שגיאות שונות לגבי `PORTB/DDRB`, וכו' שלא הוגדרו, אם כך, תצטרכו להמיר את קודי המקלדת להשתמש ב - [בקרי GPIO](internals_gpio_control.md) שיעבדו עבור ARM וגם AVR. הדבר לא אמור להשפיע על הבילדים של AVR בכלל.
-
-ל-Proton C יש רק מנורת LED אחת על הלוח (C13), וכברירת מחדל, TXLED (D5) ממופה אליו. אם תרצו במקום, למפות אליו את RXLED (B0), הוסיפו את השורה הבא לקובץ `config.h`:
-
-
-```
- #define CONVERT_TO_PROTON_C_RXLED
-```
-
-
-
diff --git a/docs/he-il/quantum_keycodes.md b/docs/he-il/quantum_keycodes.md
deleted file mode 100644
index 5374fd47ad..0000000000
--- a/docs/he-il/quantum_keycodes.md
+++ /dev/null
@@ -1,25 +0,0 @@
-
-# קודי מקלדת Quantum
-
-קודי מקלדת Quantum מאפשרים התאמה נוחה יותר של מיפוי המקשים שלך מעבר למה שהבסיסי מאפשר, ללא צורך בהגדרת של פעולות מותאמות אישית.
-
-כל קודי המקלדת בתוך quantum הם מספרים בין `0x0000` ֿֿֿ ל-`0xFFFF`. בתוך הקובץ `keymap.c` זה עלול להראות כאילו יש לך פונקציות ומקרים יחודיים נוספים, אבל בסופו של דבר הקדם-מעבד של שפת C יתרגם אלה לתוך מספר יחיד בין 4 בתים. QMK שמרה את מרחב הכתובות בין `0x0000` עד ל- `0x00FF` עבור קודי מקשים סטנדרטיים. קודי מקשים אלה, כגון `KC_A`, `KC_1`, ו- `KC_LCTL`, אשר מתארים מקשים בסיסיים מוגדרים בתוך USB HID specification.
-
-בעמודו זה יש לנו את קודי המקשים מתועדים בין `0x00FF` ֿֿ ל- `0xFFFF` אשר משומשים בשביל לממש יכולות מתקדמות של quantum. אם תגדירו קודי מקשים משלכם, הם יתווספו לתוך המרחב הזה גם כן.
-
-## קודי מקשים של QMK
-
-
-```
-|Key |Aliases |Description |
-|---------------|-----------|---------------------------------------------------------------------|
-|`RESET` | |Put the keyboard into DFU mode for flashing |
-|`DEBUG` | |Toggle debug mode |
-|`EEPROM_RESET` |`EEP_RST` |Resets EEPROM state by reinitializing it |
-|`KC_GESC` |`GRAVE_ESC`|Escape when tapped, `
when pressed with Shift or GUI|
-|`KC_LEAD` | |The [Leader key](feature_leader_key.md) |
-|`KC_LOCK` | |The [Lock key](feature_key_lock.md) |
-```
-
-
-
diff --git a/docs/how_keyboards_work.md b/docs/how_keyboards_work.md
index 3dcbc64522..36cbfb4d9a 100644
--- a/docs/how_keyboards_work.md
+++ b/docs/how_keyboards_work.md
@@ -9,7 +9,7 @@ firmware directly.
Whenever you type on 1 particular key, here is the chain of actions taking
place:
-``` text
+```
+------+ +-----+ +----------+ +----------+ +----+
| User |-------->| Key |------>| Firmware |----->| USB wire |---->| OS |
+------+ +-----+ +----------+ +----------+ +----+
diff --git a/docs/i2c_driver.md b/docs/i2c_driver.md
index 3ec34a0f87..95c588af44 100644
--- a/docs/i2c_driver.md
+++ b/docs/i2c_driver.md
@@ -62,16 +62,13 @@ Then, modify your board's `mcuconf.h` to enable the peripheral you've chosen, fo
Configuration-wise, you'll need to set up the peripheral as per your MCU's datasheet -- the defaults match the pins for a Proton-C, i.e. STM32F303.
-|`config.h` Overrride |Description |Default|
-|------------------------|-------------------------------------------------------------------------------------------|-------|
-|`I2C_DRIVER` |I2C peripheral to use - I2C1 -> `I2CD1`, I2C2 -> `I2CD2` etc. |`I2CD1`|
-|`I2C1_BANK` (deprecated)|The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`), superseded by `I2C1_SCL_BANK`/`I2C1_SDA_BANK`|`GPIOB`|
-|`I2C1_SCL_BANK` |The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`) to use for SCL |`GPIOB`|
-|`I2C1_SCL` |The pin number for SCL (0-15) |`6` |
-|`I2C1_SCL_PAL_MODE` |The alternate function mode for SCL |`4` |
-|`I2C1_SDA_BANK` |The bank of pins (`GPIOA`, `GPIOB`, `GPIOC`) to use for SDA |`GPIOB`|
-|`I2C1_SDA` |The pin number for SDA (0-15) |`7` |
-|`I2C1_SDA_PAL_MODE` |The alternate function mode for SDA |`4` |
+|`config.h` Overrride |Description |Default|
+|------------------------|--------------------------------------------------------------|-------|
+|`I2C_DRIVER` |I2C peripheral to use - I2C1 -> `I2CD1`, I2C2 -> `I2CD2` etc. |`I2CD1`|
+|`I2C1_SCL_PIN` |The pin definition for SCL |`B6` |
+|`I2C1_SCL_PAL_MODE` |The alternate function mode for SCL |`4` |
+|`I2C1_SDA_PIN` |The pin definition for SDA |`B7` |
+|`I2C1_SDA_PAL_MODE` |The alternate function mode for SDA |`4` |
The following configuration values depend on the specific MCU in use.
@@ -190,7 +187,7 @@ Receive multiple bytes from the selected SPI device.
### `i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)`
-Writes to a register on the I2C device.
+Writes to a register with an 8-bit address on the I2C device.
#### Arguments
@@ -211,9 +208,32 @@ Writes to a register on the I2C device.
---
+### `i2c_status_t i2c_writeReg16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)`
+
+Writes to a register with a 16-bit address (big endian) on the I2C device.
+
+#### Arguments
+
+ - `uint8_t devaddr`
+ The 7-bit I2C address of the device.
+ - `uint16_t regaddr`
+ The register address to write to.
+ - `uint8_t *data`
+ A pointer to the data to transmit.
+ - `uint16_t length`
+ The number of bytes to write. Take care not to overrun the length of `data`.
+ - `uint16_t timeout`
+ The time in milliseconds to wait for a response from the target device.
+
+#### Return Value
+
+`I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
+
+---
+
### `i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)`
-Reads from a register on the I2C device.
+Reads from a register with an 8-bit address on the I2C device.
#### Arguments
@@ -232,6 +252,27 @@ Reads from a register on the I2C device.
---
+### `i2c_status_t i2c_readReg16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)`
+
+Reads from a register with a 16-bit address (big endian) on the I2C device.
+
+#### Arguments
+
+ - `uint8_t devaddr`
+ The 7-bit I2C address of the device.
+ - `uint16_t regaddr`
+ The register address to read from.
+ - `uint16_t length`
+ The number of bytes to read. Take care not to overrun the length of `data`.
+ - `uint16_t timeout`
+ The time in milliseconds to wait for a response from the target device.
+
+#### Return Value
+
+`I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`.
+
+---
+
### `i2c_status_t i2c_stop(void)`
Stop the current I2C transaction.
diff --git a/docs/index.html b/docs/index.html
index 5312b9105d..f5a8dbbf12 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -51,13 +51,7 @@
basePath: '/',
name: 'QMK Firmware',
nameLink: {
- '/de/': '/#/de/',
- '/es/': '/#/es/',
- '/fr-fr/': '/#/fr-fr/',
- '/he-il/': '/#/he-il/',
'/ja/': '/#/ja/',
- '/pt-br/': '/#/pt-br/',
- '/ru-ru/': '/#/ru-ru/',
'/zh-cn/': '/#/zh-cn/',
'/': '/#/'
},
@@ -68,30 +62,20 @@
auto2top: true,
autoHeader: true,
fallbackLanguages: [
- 'de',
- 'es',
- 'fr-fr',
- 'he-il',
'ja',
- 'pt-br',
- 'ru-ru',
'zh-cn'
],
formatUpdated: '{YYYY}/{MM}/{DD} {HH}:{mm}',
search: {
paths: 'auto',
placeholder: {
- '/es/': 'Buscar',
'/zh-cn/': '搜索',
'/ja/': '検索',
- '/pt-br/': 'Busca',
'/': 'Search'
},
noData: {
- '/es/': '¡Ningún resultado!',
'/zh-cn/': '没有结果!',
'/ja/': '見つかりません!',
- '/pt-br/': 'Nenhum resultado!',
'/': 'No results!'
},
depth: 6
@@ -103,21 +87,14 @@
copyCode: {
buttonText: {
'/zh-cn/': '点击复制',
- '/ru/' : 'Скопировать в буфер обмена',
- '/de-de/': 'Klicken Sie zum Kopieren',
- '/es/' : 'Haga clic para copiar',
'/' : 'Copy to clipboard'
},
errorText: {
'/zh-cn/': '错误',
- '/ru/' : 'ошибка',
'/' : 'Error'
},
successText: {
'/zh-cn/': '复制',
- '/ru/' : 'Скопировано',
- '/de-de/': 'Kopiert',
- '/es/' : 'Copiado',
'/' : 'Copied'
}
},
diff --git a/docs/internals_gpio_control.md b/docs/internals_gpio_control.md
index 21a3bd661e..ccd3f8c74d 100644
--- a/docs/internals_gpio_control.md
+++ b/docs/internals_gpio_control.md
@@ -4,7 +4,7 @@ QMK has a GPIO control abstraction layer which is microcontroller agnostic. This
## Functions :id=functions
-The following functions provide basic control of GPIOs and are found in `tmk_core/common//gpio.h`.
+The following functions provide basic control of GPIOs and are found in `platforms//gpio.h`.
|Function |Description | Old AVR Examples | Old ChibiOS/ARM Examples |
|------------------------|--------------------------------------------------|-------------------------------------------------|-------------------------------------------------|
diff --git a/docs/ja/compatible_microcontrollers.md b/docs/ja/compatible_microcontrollers.md
index 7a3484fa8c..23f32bbb60 100644
--- a/docs/ja/compatible_microcontrollers.md
+++ b/docs/ja/compatible_microcontrollers.md
@@ -32,6 +32,7 @@ QMK は十分な容量のフラッシュメモリを備えた USB 対応 AVR ま
* [STM32F103](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html)
* [STM32F303](https://www.st.com/en/microcontrollers-microprocessors/stm32f303.html)
* [STM32F401](https://www.st.com/en/microcontrollers-microprocessors/stm32f401.html)
+* [STM32F405](https://www.st.com/en/microcontrollers-microprocessors/stm32f405-415.html)
* [STM32F407](https://www.st.com/en/microcontrollers-microprocessors/stm32f407-417.html)
* [STM32F411](https://www.st.com/en/microcontrollers-microprocessors/stm32f411.html)
* [STM32F446](https://www.st.com/en/microcontrollers-microprocessors/stm32f446.html)
diff --git a/docs/ja/config_options.md b/docs/ja/config_options.md
index 18fe9489b9..fb43d015f2 100644
--- a/docs/ja/config_options.md
+++ b/docs/ja/config_options.md
@@ -358,7 +358,7 @@ QMK での全ての利用可能な設定にはデフォルトがあります。
これらを使って特定の機能のビルドを有効または無効にします。有効にすればするほどファームウェアが大きくなり、MCU には大きすぎるファームウェアを構築するリスクがあります。
* `BOOTMAGIC_ENABLE`
- * 仮想 DIP スイッチ設定
+ * ブートマジックライトを有効にします
* `MOUSEKEY_ENABLE`
* マウスキー
* `EXTRAKEY_ENABLE`
diff --git a/docs/ja/faq_keymap.md b/docs/ja/faq_keymap.md
index fb44e316b7..59c7d206a1 100644
--- a/docs/ja/faq_keymap.md
+++ b/docs/ja/faq_keymap.md
@@ -10,7 +10,7 @@
## どのキーコードを使えますか?
あなたが利用可能なキーコードのインデックスについては、[キーコード](ja/keycodes.md)を見てください。より広範なドキュメントがある場合は、そこからリンクしてあります。
-キーコードは実際には [common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keycode.h) で定義されています。
+キーコードは実際には [common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/keycode.h) で定義されています。
## デフォルトのキーコードとは何か?
diff --git a/docs/ja/faq_misc.md b/docs/ja/faq_misc.md
index e9a35ef329..38917df2ee 100644
--- a/docs/ja/faq_misc.md
+++ b/docs/ja/faq_misc.md
@@ -39,10 +39,6 @@ Size after:
**NKRO** がまだ動作しない場合は、`Magic` **N** コマンド(デフォルトでは `LShift+RShift+N`)を試してみてください。**NKRO** モードと **6KRO** モード間を一時的に切り替えるためにこのコマンドを使うことができます。**NKRO** が機能しない状況、特に BIOS の場合は **6KRO** モードに切り替える必要があります。
-ファームウェアを `BOOTMAGIC_ENABLE` でビルドした場合、`ブートマジック` **N** コマンドで切り替える必要があります(デフォルトでは `Space+N`)。この設定は EEPROM に格納され、電源を入れ直しても保持されます。
-
-https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switch
-
## トラックポイントははリセット回路が必要です (PS/2 マウスサポート)
リセット回路が無いとハードウェアの不適切な初期化のために一貫性の無い結果になります。TPM754 の回路図を見てください:
diff --git a/docs/ja/feature_haptic_feedback.md b/docs/ja/feature_haptic_feedback.md
index 1580797253..687788014a 100644
--- a/docs/ja/feature_haptic_feedback.md
+++ b/docs/ja/feature_haptic_feedback.md
@@ -9,9 +9,12 @@
現在のところ、`rules.mk` で触覚フィードバック用に以下のオプションを利用可能です:
-`HAPTIC_ENABLE += DRV2605L`
+```
+HAPTIC_ENABLE = yes
-`HAPTIC_ENABLE += SOLENOID`
+HAPTIC_DRIVER += DRV2605L
+HAPTIC_DRIVER += SOLENOID
+```
## サポートされる既知のハードウェア
diff --git a/docs/ja/feature_layers.md b/docs/ja/feature_layers.md
index 011f0e0ef1..ca3e055835 100644
--- a/docs/ja/feature_layers.md
+++ b/docs/ja/feature_layers.md
@@ -50,7 +50,7 @@ QMK を使い始めたばかりの場合は、全てを単純にしたいでし
レイヤーは番号順に上に積み重なっています。キーの押下の動作を決定する時に、QMK は上から順にレイヤーを走査し、`KC_TRNS` に設定されていない最初のアクティブなレイヤーに到達すると停止します。結果として、現在のレイヤーよりも数値的に低いレイヤーをアクティブにし、現在のレイヤー(あるいはアクティブでターゲットレイヤーよりも高い別のレイヤー)に `KC_TRNS` 以外のものがある場合、それが送信されるキーであり、アクティブ化したばかりのレイヤー上のキーではありません。これが、ほとんどの人の "なぜレイヤーが切り替わらないのか" 問題の原因です。
-場合によっては、マクロ内あるいはタップダンスルーチンの一部としてレイヤーを切り替えほうが良いかもしれません。`layer_on` はレイヤーをアクティブにし、`layer_off` はそれを非アクティブにします。もっと多くのレイヤーに関する関数は、[action_layer.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action_layer.h) で見つけることができます。
+場合によっては、マクロ内あるいはタップダンスルーチンの一部としてレイヤーを切り替えほうが良いかもしれません。`layer_on` はレイヤーをアクティブにし、`layer_off` はそれを非アクティブにします。もっと多くのレイヤーに関する関数は、[action_layer.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/action_layer.h) で見つけることができます。
## 関数 :id=functions
diff --git a/docs/ja/feature_led_matrix.md b/docs/ja/feature_led_matrix.md
index 6511b28249..2b1979ec68 100644
--- a/docs/ja/feature_led_matrix.md
+++ b/docs/ja/feature_led_matrix.md
@@ -52,7 +52,7 @@ I2C IS31FL3731 RGB コントローラを使ったアドレス指定可能な LED
`.c` に全ての LED を列挙する配列を定義します:
- const is31_led __flash g_is31_leds[DRIVER_LED_TOTAL] = {
+ const is31_led PROGMEM g_is31_leds[DRIVER_LED_TOTAL] = {
/* これらの位置については IS31 マニュアルを参照してください
* driver
* | LED address
diff --git a/docs/ja/feature_ps2_mouse.md b/docs/ja/feature_ps2_mouse.md
index 3d69411307..569934c187 100644
--- a/docs/ja/feature_ps2_mouse.md
+++ b/docs/ja/feature_ps2_mouse.md
@@ -43,14 +43,8 @@ PS2_USE_BUSYWAIT = yes
```c
#ifdef PS2_USE_BUSYWAIT
-# define PS2_CLOCK_PORT PORTD
-# define PS2_CLOCK_PIN PIND
-# define PS2_CLOCK_DDR DDRD
-# define PS2_CLOCK_BIT 1
-# define PS2_DATA_PORT PORTD
-# define PS2_DATA_PIN PIND
-# define PS2_DATA_DDR DDRD
-# define PS2_DATA_BIT 2
+# define PS2_CLOCK_PIN D1
+# define PS2_DATA_PIN D2
#endif
```
@@ -69,14 +63,8 @@ PS2_USE_INT = yes
```c
#ifdef PS2_USE_INT
-#define PS2_CLOCK_PORT PORTD
-#define PS2_CLOCK_PIN PIND
-#define PS2_CLOCK_DDR DDRD
-#define PS2_CLOCK_BIT 2
-#define PS2_DATA_PORT PORTD
-#define PS2_DATA_PIN PIND
-#define PS2_DATA_DDR DDRD
-#define PS2_DATA_BIT 5
+#define PS2_CLOCK_PIN D2
+#define PS2_DATA_PIN D5
#define PS2_INT_INIT() do { \
EICRA |= ((1<` も消します)
- - `timer_read()` と `timer_read32()` など。 -- タイミング API は [timer.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/timer.h) を参照してください
+ - `timer_read()` と `timer_read32()` など。 -- タイミング API は [timer.h](https://github.com/qmk/qmk_firmware/blob/master/platforms/timer.h) を参照してください
- 新しい抽象化が有用だと思う場合は、次のことをお勧めします:
- 機能が完成するまで自分のキーボードでプロトタイプを作成する
- Discord の QMK コラボレータと話し合う
diff --git a/docs/ja/understanding_qmk.md b/docs/ja/understanding_qmk.md
index 109876961b..1654f8e002 100644
--- a/docs/ja/understanding_qmk.md
+++ b/docs/ja/understanding_qmk.md
@@ -184,10 +184,6 @@ FIXME: This needs to be written
FIXME: This needs to be written
-#### Visualizer
-
-FIXME: This needs to be written
-
#### Keyboard state LEDs (Caps Lock, Num Lock, Scroll Lock)
FIXME: This needs to be written
diff --git a/docs/keycodes.md b/docs/keycodes.md
index 9f61447dc5..84a6d456ba 100644
--- a/docs/keycodes.md
+++ b/docs/keycodes.md
@@ -8,205 +8,205 @@ This is a reference only. Each group of keys links to the page documenting their
See also: [Basic Keycodes](keycodes_basic.md)
-|Key |Aliases |Description |Windows |macOS |Linux1|
-|-----------------------|------------------------------|-----------------------------------------------|-------------|-------------|-----------------|
-|`KC_NO` |`XXXXXXX` |Ignore this key (NOOP) |*N/A* |*N/A* |*N/A* |
-|`KC_TRANSPARENT` |`KC_TRNS`, `_______` |Use the next lowest non-transparent key |*N/A* |*N/A* |*N/A* |
-|`KC_A` | |`a` and `A` |✔ |✔ |✔ |
-|`KC_B` | |`b` and `B` |✔ |✔ |✔ |
-|`KC_C` | |`c` and `C` |✔ |✔ |✔ |
-|`KC_D` | |`d` and `D` |✔ |✔ |✔ |
-|`KC_E` | |`e` and `E` |✔ |✔ |✔ |
-|`KC_F` | |`f` and `F` |✔ |✔ |✔ |
-|`KC_G` | |`g` and `G` |✔ |✔ |✔ |
-|`KC_H` | |`h` and `H` |✔ |✔ |✔ |
-|`KC_I` | |`i` and `I` |✔ |✔ |✔ |
-|`KC_J` | |`j` and `J` |✔ |✔ |✔ |
-|`KC_K` | |`k` and `K` |✔ |✔ |✔ |
-|`KC_L` | |`l` and `L` |✔ |✔ |✔ |
-|`KC_M` | |`m` and `M` |✔ |✔ |✔ |
-|`KC_N` | |`n` and `N` |✔ |✔ |✔ |
-|`KC_O` | |`o` and `O` |✔ |✔ |✔ |
-|`KC_P` | |`p` and `P` |✔ |✔ |✔ |
-|`KC_Q` | |`q` and `Q` |✔ |✔ |✔ |
-|`KC_R` | |`r` and `R` |✔ |✔ |✔ |
-|`KC_S` | |`s` and `S` |✔ |✔ |✔ |
-|`KC_T` | |`t` and `T` |✔ |✔ |✔ |
-|`KC_U` | |`u` and `U` |✔ |✔ |✔ |
-|`KC_V` | |`v` and `V` |✔ |✔ |✔ |
-|`KC_W` | |`w` and `W` |✔ |✔ |✔ |
-|`KC_X` | |`x` and `X` |✔ |✔ |✔ |
-|`KC_Y` | |`y` and `Y` |✔ |✔ |✔ |
-|`KC_Z` | |`z` and `Z` |✔ |✔ |✔ |
-|`KC_1` | |`1` and `!` |✔ |✔ |✔ |
-|`KC_2` | |`2` and `@` |✔ |✔ |✔ |
-|`KC_3` | |`3` and `#` |✔ |✔ |✔ |
-|`KC_4` | |`4` and `$` |✔ |✔ |✔ |
-|`KC_5` | |`5` and `%` |✔ |✔ |✔ |
-|`KC_6` | |`6` and `^` |✔ |✔ |✔ |
-|`KC_7` | |`7` and `&` |✔ |✔ |✔ |
-|`KC_8` | |`8` and `*` |✔ |✔ |✔ |
-|`KC_9` | |`9` and `(` |✔ |✔ |✔ |
-|`KC_0` | |`0` and `)` |✔ |✔ |✔ |
-|`KC_ENTER` |`KC_ENT` |Return (Enter) |✔ |✔ |✔ |
-|`KC_ESCAPE` |`KC_ESC` |Escape |✔ |✔ |✔ |
-|`KC_BSPACE` |`KC_BSPC` |Delete (Backspace) |✔ |✔ |✔ |
-|`KC_TAB` | |Tab |✔ |✔ |✔ |
-|`KC_SPACE` |`KC_SPC` |Spacebar |✔ |✔ |✔ |
-|`KC_MINUS` |`KC_MINS` |`-` and `_` |✔ |✔ |✔ |
-|`KC_EQUAL` |`KC_EQL` |`=` and `+` |✔ |✔ |✔ |
-|`KC_LBRACKET` |`KC_LBRC` |`[` and `{` |✔ |✔ |✔ |
-|`KC_RBRACKET` |`KC_RBRC` |`]` and `}` |✔ |✔ |✔ |
-|`KC_BSLASH` |`KC_BSLS` |`\` and `\|` |✔ |✔ |✔ |
-|`KC_NONUS_HASH` |`KC_NUHS` |Non-US `#` and `~` |✔ |✔ |✔ |
-|`KC_SCOLON` |`KC_SCLN` |`;` and `:` |✔ |✔ |✔ |
-|`KC_QUOTE` |`KC_QUOT` |`'` and `"` |✔ |✔ |✔ |
-|`KC_GRAVE` |`KC_GRV`, `KC_ZKHK` |`
and `~`, JIS Zenkaku/Hankaku|✔ |✔ |✔ |
-|`KC_COMMA` |`KC_COMM` |`,` and `<` |✔ |✔ |✔ |
-|`KC_DOT` | |`.` and `>` |✔ |✔ |✔ |
-|`KC_SLASH` |`KC_SLSH` |`/` and `?` |✔ |✔ |✔ |
-|`KC_CAPSLOCK` |`KC_CLCK`, `KC_CAPS` |Caps Lock |✔ |✔ |✔ |
-|`KC_F1` | |F1 |✔ |✔ |✔ |
-|`KC_F2` | |F2 |✔ |✔ |✔ |
-|`KC_F3` | |F3 |✔ |✔ |✔ |
-|`KC_F4` | |F4 |✔ |✔ |✔ |
-|`KC_F5` | |F5 |✔ |✔ |✔ |
-|`KC_F6` | |F6 |✔ |✔ |✔ |
-|`KC_F7` | |F7 |✔ |✔ |✔ |
-|`KC_F8` | |F8 |✔ |✔ |✔ |
-|`KC_F9` | |F9 |✔ |✔ |✔ |
-|`KC_F10` | |F10 |✔ |✔ |✔ |
-|`KC_F11` | |F11 |✔ |✔ |✔ |
-|`KC_F12` | |F12 |✔ |✔ |✔ |
-|`KC_PSCREEN` |`KC_PSCR` |Print Screen |✔ |✔2|✔ |
-|`KC_SCROLLLOCK` |`KC_SLCK`, `KC_BRMD` |Scroll Lock, Brightness Down (macOS) |✔ |✔2|✔ |
-|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`, `KC_BRMU`|Pause, Brightness Up (macOS) |✔ |✔2|✔ |
-|`KC_INSERT` |`KC_INS` |Insert |✔ | |✔ |
-|`KC_HOME` | |Home |✔ |✔ |✔ |
-|`KC_PGUP` | |Page Up |✔ |✔ |✔ |
-|`KC_DELETE` |`KC_DEL` |Forward Delete |✔ |✔ |✔ |
-|`KC_END` | |End |✔ |✔ |✔ |
-|`KC_PGDOWN` |`KC_PGDN` |Page Down |✔ |✔ |✔ |
-|`KC_RIGHT` |`KC_RGHT` |Right Arrow |✔ |✔ |✔ |
-|`KC_LEFT` | |Left Arrow |✔ |✔ |✔ |
-|`KC_DOWN` | |Down Arrow |✔ |✔ |✔ |
-|`KC_UP` | |Up Arrow |✔ |✔ |✔ |
-|`KC_NUMLOCK` |`KC_NLCK` |Keypad Num Lock and Clear |✔ |✔ |✔ |
-|`KC_KP_SLASH` |`KC_PSLS` |Keypad `/` |✔ |✔ |✔ |
-|`KC_KP_ASTERISK` |`KC_PAST` |Keypad `*` |✔ |✔ |✔ |
-|`KC_KP_MINUS` |`KC_PMNS` |Keypad `-` |✔ |✔ |✔ |
-|`KC_KP_PLUS` |`KC_PPLS` |Keypad `+` |✔ |✔ |✔ |
-|`KC_KP_ENTER` |`KC_PENT` |Keypad Enter |✔ |✔ |✔ |
-|`KC_KP_1` |`KC_P1` |Keypad `1` and End |✔ |✔ |✔ |
-|`KC_KP_2` |`KC_P2` |Keypad `2` and Down Arrow |✔ |✔ |✔ |
-|`KC_KP_3` |`KC_P3` |Keypad `3` and Page Down |✔ |✔ |✔ |
-|`KC_KP_4` |`KC_P4` |Keypad `4` and Left Arrow |✔ |✔ |✔ |
-|`KC_KP_5` |`KC_P5` |Keypad `5` |✔ |✔ |✔ |
-|`KC_KP_6` |`KC_P6` |Keypad `6` and Right Arrow |✔ |✔ |✔ |
-|`KC_KP_7` |`KC_P7` |Keypad `7` and Home |✔ |✔ |✔ |
-|`KC_KP_8` |`KC_P8` |Keypad `8` and Up Arrow |✔ |✔ |✔ |
-|`KC_KP_9` |`KC_P9` |Keypad `9` and Page Up |✔ |✔ |✔ |
-|`KC_KP_0` |`KC_P0` |Keypad `0` and Insert |✔ |✔ |✔ |
-|`KC_KP_DOT` |`KC_PDOT` |Keypad `.` and Delete |✔ |✔ |✔ |
-|`KC_NONUS_BSLASH` |`KC_NUBS` |Non-US `\` and `\|` |✔ |✔ |✔ |
-|`KC_APPLICATION` |`KC_APP` |Application (Windows Context Menu Key) |✔ | |✔ |
-|`KC_POWER` | |System Power | |✔3|✔ |
-|`KC_KP_EQUAL` |`KC_PEQL` |Keypad `=` |✔ |✔ |✔ |
-|`KC_F13` | |F13 |✔ |✔ |✔ |
-|`KC_F14` | |F14 |✔ |✔ |✔ |
-|`KC_F15` | |F15 |✔ |✔ |✔ |
-|`KC_F16` | |F16 |✔ |✔ |✔ |
-|`KC_F17` | |F17 |✔ |✔ |✔ |
-|`KC_F18` | |F18 |✔ |✔ |✔ |
-|`KC_F19` | |F19 |✔ |✔ |✔ |
-|`KC_F20` | |F20 |✔ | |✔ |
-|`KC_F21` | |F21 |✔ | |✔ |
-|`KC_F22` | |F22 |✔ | |✔ |
-|`KC_F23` | |F23 |✔ | |✔ |
-|`KC_F24` | |F24 |✔ | |✔ |
-|`KC_EXECUTE` |`KC_EXEC` |Execute | | |✔ |
-|`KC_HELP` | |Help | | |✔ |
-|`KC_MENU` | |Menu | | |✔ |
-|`KC_SELECT` |`KC_SLCT` |Select | | |✔ |
-|`KC_STOP` | |Stop | | |✔ |
-|`KC_AGAIN` |`KC_AGIN` |Again | | |✔ |
-|`KC_UNDO` | |Undo | | |✔ |
-|`KC_CUT` | |Cut | | |✔ |
-|`KC_COPY` | |Copy | | |✔ |
-|`KC_PASTE` |`KC_PSTE` |Paste | | |✔ |
-|`KC_FIND` | |Find | | |✔ |
-|`KC__MUTE` | |Mute | |✔ |✔ |
-|`KC__VOLUP` | |Volume Up | |✔ |✔ |
-|`KC__VOLDOWN` | |Volume Down | |✔ |✔ |
-|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |✔ |✔ | |
-|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |✔ |✔ | |
-|`KC_LOCKING_SCROLL` |`KC_LSCR` |Locking Scroll Lock |✔ |✔ | |
-|`KC_KP_COMMA` |`KC_PCMM` |Keypad `,` | | |✔ |
-|`KC_KP_EQUAL_AS400` | |Keypad `=` on AS/400 keyboards | | | |
-|`KC_INT1` |`KC_RO` |JIS `\` and `_` |✔ | |✔ |
-|`KC_INT2` |`KC_KANA` |JIS Katakana/Hiragana |✔ | |✔ |
-|`KC_INT3` |`KC_JYEN` |JIS `¥` and `\|` |✔ | |✔ |
-|`KC_INT4` |`KC_HENK` |JIS Henkan |✔ | |✔ |
-|`KC_INT5` |`KC_MHEN` |JIS Muhenkan |✔ | |✔ |
-|`KC_INT6` | |JIS Numpad `,` | | |✔ |
-|`KC_INT7` | |International 7 | | | |
-|`KC_INT8` | |International 8 | | | |
-|`KC_INT9` | |International 9 | | | |
-|`KC_LANG1` |`KC_HAEN` |Hangul/English | | |✔ |
-|`KC_LANG2` |`KC_HANJ` |Hanja | | |✔ |
-|`KC_LANG3` | |JIS Katakana | | |✔ |
-|`KC_LANG4` | |JIS Hiragana | | |✔ |
-|`KC_LANG5` | |JIS Zenkaku/Hankaku | | |✔ |
-|`KC_LANG6` | |Language 6 | | | |
-|`KC_LANG7` | |Language 7 | | | |
-|`KC_LANG8` | |Language 8 | | | |
-|`KC_LANG9` | |Language 9 | | | |
-|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase | | | |
-|`KC_SYSREQ` | |SysReq/Attention | | | |
-|`KC_CANCEL` | |Cancel | | | |
-|`KC_CLEAR` |`KC_CLR` |Clear | | |✔ |
-|`KC_PRIOR` | |Prior | | | |
-|`KC_RETURN` | |Return | | | |
-|`KC_SEPARATOR` | |Separator | | | |
-|`KC_OUT` | |Out | | | |
-|`KC_OPER` | |Oper | | | |
-|`KC_CLEAR_AGAIN` | |Clear/Again | | | |
-|`KC_CRSEL` | |CrSel/Props | | | |
-|`KC_EXSEL` | |ExSel | | | |
-|`KC_LCTRL` |`KC_LCTL` |Left Control |✔ |✔ |✔ |
-|`KC_LSHIFT` |`KC_LSFT` |Left Shift |✔ |✔ |✔ |
-|`KC_LALT` |`KC_LOPT` |Left Alt (Option) |✔ |✔ |✔ |
-|`KC_LGUI` |`KC_LCMD`, `KC_LWIN` |Left GUI (Windows/Command/Meta key) |✔ |✔ |✔ |
-|`KC_RCTRL` |`KC_RCTL` |Right Control |✔ |✔ |✔ |
-|`KC_RSHIFT` |`KC_RSFT` |Right Shift |✔ |✔ |✔ |
-|`KC_RALT` |`KC_ROPT`, `KC_ALGR` |Right Alt (Option/AltGr) |✔ |✔ |✔ |
-|`KC_RGUI` |`KC_RCMD`, `KC_RWIN` |Right GUI (Windows/Command/Meta key) |✔ |✔ |✔ |
-|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |✔ |✔3|✔ |
-|`KC_SYSTEM_SLEEP` |`KC_SLEP` |System Sleep |✔ |✔3|✔ |
-|`KC_SYSTEM_WAKE` |`KC_WAKE` |System Wake | |✔3|✔ |
-|`KC_AUDIO_MUTE` |`KC_MUTE` |Mute |✔ |✔ |✔ |
-|`KC_AUDIO_VOL_UP` |`KC_VOLU` |Volume Up |✔ |✔4|✔ |
-|`KC_AUDIO_VOL_DOWN` |`KC_VOLD` |Volume Down |✔ |✔4|✔ |
-|`KC_MEDIA_NEXT_TRACK` |`KC_MNXT` |Next Track |✔ |✔5|✔ |
-|`KC_MEDIA_PREV_TRACK` |`KC_MPRV` |Previous Track |✔ |✔5|✔ |
-|`KC_MEDIA_STOP` |`KC_MSTP` |Stop Track |✔ | |✔ |
-|`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY` |Play/Pause Track |✔ |✔ |✔ |
-|`KC_MEDIA_SELECT` |`KC_MSEL` |Launch Media Player |✔ | |✔ |
-|`KC_MEDIA_EJECT` |`KC_EJCT` |Eject | |✔ |✔ |
-|`KC_MAIL` | |Launch Mail |✔ | |✔ |
-|`KC_CALCULATOR` |`KC_CALC` |Launch Calculator |✔ | |✔ |
-|`KC_MY_COMPUTER` |`KC_MYCM` |Launch My Computer |✔ | |✔ |
-|`KC_WWW_SEARCH` |`KC_WSCH` |Browser Search |✔ | |✔ |
-|`KC_WWW_HOME` |`KC_WHOM` |Browser Home |✔ | |✔ |
-|`KC_WWW_BACK` |`KC_WBAK` |Browser Back |✔ | |✔ |
-|`KC_WWW_FORWARD` |`KC_WFWD` |Browser Forward |✔ | |✔ |
-|`KC_WWW_STOP` |`KC_WSTP` |Browser Stop |✔ | |✔ |
-|`KC_WWW_REFRESH` |`KC_WREF` |Browser Refresh |✔ | |✔ |
-|`KC_WWW_FAVORITES` |`KC_WFAV` |Browser Favorites |✔ | |✔ |
-|`KC_MEDIA_FAST_FORWARD`|`KC_MFFD` |Next Track |✔ |✔5|✔ |
-|`KC_MEDIA_REWIND` |`KC_MRWD` |Previous Track |✔6|✔5|✔ |
-|`KC_BRIGHTNESS_UP` |`KC_BRIU` |Brightness Up |✔ |✔ |✔ |
-|`KC_BRIGHTNESS_DOWN` |`KC_BRID` |Brightness Down |✔ |✔ |✔ |
+|Key |Aliases |Description |Windows |macOS |Linux1|
+|------------------------|-------------------------------|---------------------------------------|-------------|-------------|-----------------|
+|`KC_NO` |`XXXXXXX` |Ignore this key (NOOP) |*N/A* |*N/A* |*N/A* |
+|`KC_TRANSPARENT` |`KC_TRNS`, `_______` |Use the next lowest non-transparent key|*N/A* |*N/A* |*N/A* |
+|`KC_A` | |`a` and `A` |✔ |✔ |✔ |
+|`KC_B` | |`b` and `B` |✔ |✔ |✔ |
+|`KC_C` | |`c` and `C` |✔ |✔ |✔ |
+|`KC_D` | |`d` and `D` |✔ |✔ |✔ |
+|`KC_E` | |`e` and `E` |✔ |✔ |✔ |
+|`KC_F` | |`f` and `F` |✔ |✔ |✔ |
+|`KC_G` | |`g` and `G` |✔ |✔ |✔ |
+|`KC_H` | |`h` and `H` |✔ |✔ |✔ |
+|`KC_I` | |`i` and `I` |✔ |✔ |✔ |
+|`KC_J` | |`j` and `J` |✔ |✔ |✔ |
+|`KC_K` | |`k` and `K` |✔ |✔ |✔ |
+|`KC_L` | |`l` and `L` |✔ |✔ |✔ |
+|`KC_M` | |`m` and `M` |✔ |✔ |✔ |
+|`KC_N` | |`n` and `N` |✔ |✔ |✔ |
+|`KC_O` | |`o` and `O` |✔ |✔ |✔ |
+|`KC_P` | |`p` and `P` |✔ |✔ |✔ |
+|`KC_Q` | |`q` and `Q` |✔ |✔ |✔ |
+|`KC_R` | |`r` and `R` |✔ |✔ |✔ |
+|`KC_S` | |`s` and `S` |✔ |✔ |✔ |
+|`KC_T` | |`t` and `T` |✔ |✔ |✔ |
+|`KC_U` | |`u` and `U` |✔ |✔ |✔ |
+|`KC_V` | |`v` and `V` |✔ |✔ |✔ |
+|`KC_W` | |`w` and `W` |✔ |✔ |✔ |
+|`KC_X` | |`x` and `X` |✔ |✔ |✔ |
+|`KC_Y` | |`y` and `Y` |✔ |✔ |✔ |
+|`KC_Z` | |`z` and `Z` |✔ |✔ |✔ |
+|`KC_1` | |`1` and `!` |✔ |✔ |✔ |
+|`KC_2` | |`2` and `@` |✔ |✔ |✔ |
+|`KC_3` | |`3` and `#` |✔ |✔ |✔ |
+|`KC_4` | |`4` and `$` |✔ |✔ |✔ |
+|`KC_5` | |`5` and `%` |✔ |✔ |✔ |
+|`KC_6` | |`6` and `^` |✔ |✔ |✔ |
+|`KC_7` | |`7` and `&` |✔ |✔ |✔ |
+|`KC_8` | |`8` and `*` |✔ |✔ |✔ |
+|`KC_9` | |`9` and `(` |✔ |✔ |✔ |
+|`KC_0` | |`0` and `)` |✔ |✔ |✔ |
+|`KC_ENTER` |`KC_ENT` |Return (Enter) |✔ |✔ |✔ |
+|`KC_ESCAPE` |`KC_ESC` |Escape |✔ |✔ |✔ |
+|`KC_BACKSPACE` |`KC_BSPC` |Delete (Backspace) |✔ |✔ |✔ |
+|`KC_TAB` | |Tab |✔ |✔ |✔ |
+|`KC_SPACE` |`KC_SPC` |Spacebar |✔ |✔ |✔ |
+|`KC_MINUS` |`KC_MINS` |`-` and `_` |✔ |✔ |✔ |
+|`KC_EQUAL` |`KC_EQL` |`=` and `+` |✔ |✔ |✔ |
+|`KC_LEFT_BRACKET` |`KC_LBRC` |`[` and `{` |✔ |✔ |✔ |
+|`KC_RIGHT_BRACKET` |`KC_RBRC` |`]` and `}` |✔ |✔ |✔ |
+|`KC_BACKSLASH` |`KC_BSLS` |`\` and `\|` |✔ |✔ |✔ |
+|`KC_NONUS_HASH` |`KC_NUHS` |Non-US `#` and `~` |✔ |✔ |✔ |
+|`KC_SEMICOLON` |`KC_SCLN` |`;` and `:` |✔ |✔ |✔ |
+|`KC_QUOTE` |`KC_QUOT` |`'` and `"` |✔ |✔ |✔ |
+|`KC_GRAVE` |`KC_GRV` |`
and `~` |✔ |✔ |✔ |
+|`KC_COMMA` |`KC_COMM` |`,` and `<` |✔ |✔ |✔ |
+|`KC_DOT` | |`.` and `>` |✔ |✔ |✔ |
+|`KC_SLASH` |`KC_SLSH` |`/` and `?` |✔ |✔ |✔ |
+|`KC_CAPS_LOCK` |`KC_CAPS` |Caps Lock |✔ |✔ |✔ |
+|`KC_F1` | |F1 |✔ |✔ |✔ |
+|`KC_F2` | |F2 |✔ |✔ |✔ |
+|`KC_F3` | |F3 |✔ |✔ |✔ |
+|`KC_F4` | |F4 |✔ |✔ |✔ |
+|`KC_F5` | |F5 |✔ |✔ |✔ |
+|`KC_F6` | |F6 |✔ |✔ |✔ |
+|`KC_F7` | |F7 |✔ |✔ |✔ |
+|`KC_F8` | |F8 |✔ |✔ |✔ |
+|`KC_F9` | |F9 |✔ |✔ |✔ |
+|`KC_F10` | |F10 |✔ |✔ |✔ |
+|`KC_F11` | |F11 |✔ |✔ |✔ |
+|`KC_F12` | |F12 |✔ |✔ |✔ |
+|`KC_PRINT_SCREEN` |`KC_PSCR` |Print Screen |✔ |✔2|✔ |
+|`KC_SCROLL_LOCK` |`KC_SCRL`, `KC_BRMD` |Scroll Lock, Brightness Down (macOS) |✔ |✔2|✔ |
+|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`, `KC_BRMU` |Pause, Brightness Up (macOS) |✔ |✔2|✔ |
+|`KC_INSERT` |`KC_INS` |Insert |✔ | |✔ |
+|`KC_HOME` | |Home |✔ |✔ |✔ |
+|`KC_PAGE_UP` |`KC_PGUP` |Page Up |✔ |✔ |✔ |
+|`KC_DELETE` |`KC_DEL` |Forward Delete |✔ |✔ |✔ |
+|`KC_END` | |End |✔ |✔ |✔ |
+|`KC_PAGE_DOWN` |`KC_PGDN` |Page Down |✔ |✔ |✔ |
+|`KC_RIGHT` |`KC_RGHT` |Right Arrow |✔ |✔ |✔ |
+|`KC_LEFT` | |Left Arrow |✔ |✔ |✔ |
+|`KC_DOWN` | |Down Arrow |✔ |✔ |✔ |
+|`KC_UP` | |Up Arrow |✔ |✔ |✔ |
+|`KC_NUM_LOCK` |`KC_NUM` |Keypad Num Lock and Clear |✔ |✔ |✔ |
+|`KC_KP_SLASH` |`KC_PSLS` |Keypad `/` |✔ |✔ |✔ |
+|`KC_KP_ASTERISK` |`KC_PAST` |Keypad `*` |✔ |✔ |✔ |
+|`KC_KP_MINUS` |`KC_PMNS` |Keypad `-` |✔ |✔ |✔ |
+|`KC_KP_PLUS` |`KC_PPLS` |Keypad `+` |✔ |✔ |✔ |
+|`KC_KP_ENTER` |`KC_PENT` |Keypad Enter |✔ |✔ |✔ |
+|`KC_KP_1` |`KC_P1` |Keypad `1` and End |✔ |✔ |✔ |
+|`KC_KP_2` |`KC_P2` |Keypad `2` and Down Arrow |✔ |✔ |✔ |
+|`KC_KP_3` |`KC_P3` |Keypad `3` and Page Down |✔ |✔ |✔ |
+|`KC_KP_4` |`KC_P4` |Keypad `4` and Left Arrow |✔ |✔ |✔ |
+|`KC_KP_5` |`KC_P5` |Keypad `5` |✔ |✔ |✔ |
+|`KC_KP_6` |`KC_P6` |Keypad `6` and Right Arrow |✔ |✔ |✔ |
+|`KC_KP_7` |`KC_P7` |Keypad `7` and Home |✔ |✔ |✔ |
+|`KC_KP_8` |`KC_P8` |Keypad `8` and Up Arrow |✔ |✔ |✔ |
+|`KC_KP_9` |`KC_P9` |Keypad `9` and Page Up |✔ |✔ |✔ |
+|`KC_KP_0` |`KC_P0` |Keypad `0` and Insert |✔ |✔ |✔ |
+|`KC_KP_DOT` |`KC_PDOT` |Keypad `.` and Delete |✔ |✔ |✔ |
+|`KC_NONUS_BACKSLASH` |`KC_NUBS` |Non-US `\` and `\|` |✔ |✔ |✔ |
+|`KC_APPLICATION` |`KC_APP` |Application (Windows Context Menu Key) |✔ | |✔ |
+|`KC_KB_POWER` | |System Power | |✔3|✔ |
+|`KC_KP_EQUAL` |`KC_PEQL` |Keypad `=` |✔ |✔ |✔ |
+|`KC_F13` | |F13 |✔ |✔ |✔ |
+|`KC_F14` | |F14 |✔ |✔ |✔ |
+|`KC_F15` | |F15 |✔ |✔ |✔ |
+|`KC_F16` | |F16 |✔ |✔ |✔ |
+|`KC_F17` | |F17 |✔ |✔ |✔ |
+|`KC_F18` | |F18 |✔ |✔ |✔ |
+|`KC_F19` | |F19 |✔ |✔ |✔ |
+|`KC_F20` | |F20 |✔ | |✔ |
+|`KC_F21` | |F21 |✔ | |✔ |
+|`KC_F22` | |F22 |✔ | |✔ |
+|`KC_F23` | |F23 |✔ | |✔ |
+|`KC_F24` | |F24 |✔ | |✔ |
+|`KC_EXECUTE` |`KC_EXEC` |Execute | | |✔ |
+|`KC_HELP` | |Help | | |✔ |
+|`KC_MENU` | |Menu | | |✔ |
+|`KC_SELECT` |`KC_SLCT` |Select | | |✔ |
+|`KC_STOP` | |Stop | | |✔ |
+|`KC_AGAIN` |`KC_AGIN` |Again | | |✔ |
+|`KC_UNDO` | |Undo | | |✔ |
+|`KC_CUT` | |Cut | | |✔ |
+|`KC_COPY` | |Copy | | |✔ |
+|`KC_PASTE` |`KC_PSTE` |Paste | | |✔ |
+|`KC_FIND` | |Find | | |✔ |
+|`KC_KB_MUTE` | |Mute | |✔ |✔ |
+|`KC_KB_VOLUME_UP` | |Volume Up | |✔ |✔ |
+|`KC_KB_VOLUME_DOWN` | |Volume Down | |✔ |✔ |
+|`KC_LOCKING_CAPS_LOCK` |`KC_LCAP` |Locking Caps Lock |✔ |✔ | |
+|`KC_LOCKING_NUM_LOCK` |`KC_LNUM` |Locking Num Lock |✔ |✔ | |
+|`KC_LOCKING_SCROLL_LOCK`|`KC_LSCR` |Locking Scroll Lock |✔ |✔ | |
+|`KC_KP_COMMA` |`KC_PCMM` |Keypad `,` | | |✔ |
+|`KC_KP_EQUAL_AS400` | |Keypad `=` on AS/400 keyboards | | | |
+|`KC_INTERNATIONAL_1` |`KC_INT1` |International 1 |✔ | |✔ |
+|`KC_INTERNATIONAL_2` |`KC_INT2` |International 2 |✔ | |✔ |
+|`KC_INTERNATIONAL_3` |`KC_INT3` |International 3 |✔ | |✔ |
+|`KC_INTERNATIONAL_4` |`KC_INT4` |International 4 |✔ | |✔ |
+|`KC_INTERNATIONAL_5` |`KC_INT5` |International 5 |✔ | |✔ |
+|`KC_INTERNATIONAL_6` |`KC_INT6` |International 6 | | |✔ |
+|`KC_INTERNATIONAL_7` |`KC_INT7` |International 7 | | | |
+|`KC_INTERNATIONAL_8` |`KC_INT8` |International 8 | | | |
+|`KC_INTERNATIONAL_9` |`KC_INT9` |International 9 | | | |
+|`KC_LANGUAGE_1` |`KC_LNG1` |Language 1 | | |✔ |
+|`KC_LANGUAGE_2` |`KC_LNG2` |Language 2 | | |✔ |
+|`KC_LANGUAGE_3` |`KC_LNG3` |Language 3 | | |✔ |
+|`KC_LANGUAGE_4` |`KC_LNG4` |Language 4 | | |✔ |
+|`KC_LANGUAGE_5` |`KC_LNG5` |Language 5 | | |✔ |
+|`KC_LANGUAGE_6` |`KC_LNG6` |Language 6 | | | |
+|`KC_LANGUAGE_7` |`KC_LNG7` |Language 7 | | | |
+|`KC_LANGUAGE_8` |`KC_LNG8` |Language 8 | | | |
+|`KC_LANGUAGE_9` |`KC_LNG9` |Language 9 | | | |
+|`KC_ALTERNATE_ERASE` |`KC_ERAS` |Alternate Erase | | | |
+|`KC_SYSTEM_REQUEST` |`KC_SYRQ` |SysReq/Attention | | | |
+|`KC_CANCEL` |`KC_CNCL` |Cancel | | | |
+|`KC_CLEAR` |`KC_CLR` |Clear | | |✔ |
+|`KC_PRIOR` |`KC_PRIR` |Prior | | | |
+|`KC_RETURN` |`KC_RETN` |Return | | | |
+|`KC_SEPARATOR` |`KC_SEPR` |Separator | | | |
+|`KC_OUT` | |Out | | | |
+|`KC_OPER` | |Oper | | | |
+|`KC_CLEAR_AGAIN` |`KC_CLAG` |Clear/Again | | | |
+|`KC_CRSEL` |`KC_CRSL` |CrSel/Props | | | |
+|`KC_EXSEL` |`KC_EXSL` |ExSel | | | |
+|`KC_LEFT_CTRL` |`KC_LCTL` |Left Control |✔ |✔ |✔ |
+|`KC_LEFT_SHIFT` |`KC_LSFT` |Left Shift |✔ |✔ |✔ |
+|`KC_LEFT_ALT` |`KC_LALT`, `KC_LOPT` |Left Alt (Option) |✔ |✔ |✔ |
+|`KC_LEFT_GUI` |`KC_LGUI`, `KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |✔ |✔ |✔ |
+|`KC_RIGHT_CTRL` |`KC_RCTL` |Right Control |✔ |✔ |✔ |
+|`KC_RIGHT_SHIFT` |`KC_RSFT` |Right Shift |✔ |✔ |✔ |
+|`KC_RIGHT_ALT` |`KC_RALT`, `KC_ROPT`, `KC_ALGR`|Right Alt (Option/AltGr) |✔ |✔ |✔ |
+|`KC_RIGHT_GUI` |`KC_RGUI`, `KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key) |✔ |✔ |✔ |
+|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |✔ |✔3|✔ |
+|`KC_SYSTEM_SLEEP` |`KC_SLEP` |System Sleep |✔ |✔3|✔ |
+|`KC_SYSTEM_WAKE` |`KC_WAKE` |System Wake | |✔3|✔ |
+|`KC_AUDIO_MUTE` |`KC_MUTE` |Mute |✔ |✔ |✔ |
+|`KC_AUDIO_VOL_UP` |`KC_VOLU` |Volume Up |✔ |✔4|✔ |
+|`KC_AUDIO_VOL_DOWN` |`KC_VOLD` |Volume Down |✔ |✔4|✔ |
+|`KC_MEDIA_NEXT_TRACK` |`KC_MNXT` |Next Track |✔ |✔5|✔ |
+|`KC_MEDIA_PREV_TRACK` |`KC_MPRV` |Previous Track |✔ |✔5|✔ |
+|`KC_MEDIA_STOP` |`KC_MSTP` |Stop Track |✔ | |✔ |
+|`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY` |Play/Pause Track |✔ |✔ |✔ |
+|`KC_MEDIA_SELECT` |`KC_MSEL` |Launch Media Player |✔ | |✔ |
+|`KC_MEDIA_EJECT` |`KC_EJCT` |Eject | |✔ |✔ |
+|`KC_MAIL` | |Launch Mail |✔ | |✔ |
+|`KC_CALCULATOR` |`KC_CALC` |Launch Calculator |✔ | |✔ |
+|`KC_MY_COMPUTER` |`KC_MYCM` |Launch My Computer |✔ | |✔ |
+|`KC_WWW_SEARCH` |`KC_WSCH` |Browser Search |✔ | |✔ |
+|`KC_WWW_HOME` |`KC_WHOM` |Browser Home |✔ | |✔ |
+|`KC_WWW_BACK` |`KC_WBAK` |Browser Back |✔ | |✔ |
+|`KC_WWW_FORWARD` |`KC_WFWD` |Browser Forward |✔ | |✔ |
+|`KC_WWW_STOP` |`KC_WSTP` |Browser Stop |✔ | |✔ |
+|`KC_WWW_REFRESH` |`KC_WREF` |Browser Refresh |✔ | |✔ |
+|`KC_WWW_FAVORITES` |`KC_WFAV` |Browser Favorites |✔ | |✔ |
+|`KC_MEDIA_FAST_FORWARD` |`KC_MFFD` |Next Track |✔ |✔5|✔ |
+|`KC_MEDIA_REWIND` |`KC_MRWD` |Previous Track |✔6|✔5|✔ |
+|`KC_BRIGHTNESS_UP` |`KC_BRIU` |Brightness Up |✔ |✔ |✔ |
+|`KC_BRIGHTNESS_DOWN` |`KC_BRID` |Brightness Down |✔ |✔ |✔ |
1. The Linux kernel HID driver recognizes [nearly all keycodes](https://github.com/torvalds/linux/blob/master/drivers/hid/hid-input.c), but the default bindings depend on the DE/WM.
2. Treated as F13-F15.
@@ -586,6 +586,16 @@ See also: [Mod-Tap](mod_tap.md)
|`MEH_T(kc)` | |Left Control, Shift and Alt when held, `kc` when tapped |
|`HYPR_T(kc)` |`ALL_T(kc)` |Left Control, Shift, Alt and GUI when held, `kc` when tapped - more info [here](https://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)|
+## Tapping Term Keys :id=tapping-term-keys
+
+See also: [Dynamic Tapping Term](tap_hold#dynamic-tapping-term)
+
+| Key | Description |
+|-------------|------------------------------------------------------------------------------------------------------------------------|
+| `DT_PRNT` | "Dynamic Tapping Term Print": Types the current tapping term, in milliseconds |
+| `DT_UP` | "Dynamic Tapping Term Up": Increases the current tapping term by `DYNAMIC_TAPPING_TERM_INCREMENT`ms (5ms by default) |
+| `DT_DOWN` | "Dynamic Tapping Term Down": Decreases the current tapping term by `DYNAMIC_TAPPING_TERM_INCREMENT`ms (5ms by default) |
+
## RGB Lighting :id=rgb-lighting
See also: [RGB Lighting](feature_rgblight.md)
@@ -678,6 +688,46 @@ See also: [One Shot Keys](one_shot_keys.md)
|`OS_OFF` |Turns One Shot keys off |
|`OS_TOGG` |Toggles One Shot keys status |
+## Programmable Button Support :id=programmable-button
+
+See also: [Programmable Button](feature_programmable_button.md)
+
+|Key |Description |
+|------------------------|----------------------|
+|`PROGRAMMABLE_BUTTON_1` |Programmable button 1 |
+|`PROGRAMMABLE_BUTTON_2` |Programmable button 2 |
+|`PROGRAMMABLE_BUTTON_3` |Programmable button 3 |
+|`PROGRAMMABLE_BUTTON_4` |Programmable button 4 |
+|`PROGRAMMABLE_BUTTON_5` |Programmable button 5 |
+|`PROGRAMMABLE_BUTTON_6` |Programmable button 6 |
+|`PROGRAMMABLE_BUTTON_7` |Programmable button 7 |
+|`PROGRAMMABLE_BUTTON_8` |Programmable button 8 |
+|`PROGRAMMABLE_BUTTON_9` |Programmable button 9 |
+|`PROGRAMMABLE_BUTTON_10`|Programmable button 10|
+|`PROGRAMMABLE_BUTTON_11`|Programmable button 11|
+|`PROGRAMMABLE_BUTTON_12`|Programmable button 12|
+|`PROGRAMMABLE_BUTTON_13`|Programmable button 13|
+|`PROGRAMMABLE_BUTTON_14`|Programmable button 14|
+|`PROGRAMMABLE_BUTTON_15`|Programmable button 15|
+|`PROGRAMMABLE_BUTTON_16`|Programmable button 16|
+|`PROGRAMMABLE_BUTTON_17`|Programmable button 17|
+|`PROGRAMMABLE_BUTTON_18`|Programmable button 18|
+|`PROGRAMMABLE_BUTTON_19`|Programmable button 19|
+|`PROGRAMMABLE_BUTTON_20`|Programmable button 20|
+|`PROGRAMMABLE_BUTTON_21`|Programmable button 21|
+|`PROGRAMMABLE_BUTTON_22`|Programmable button 22|
+|`PROGRAMMABLE_BUTTON_23`|Programmable button 23|
+|`PROGRAMMABLE_BUTTON_24`|Programmable button 24|
+|`PROGRAMMABLE_BUTTON_25`|Programmable button 25|
+|`PROGRAMMABLE_BUTTON_26`|Programmable button 26|
+|`PROGRAMMABLE_BUTTON_27`|Programmable button 27|
+|`PROGRAMMABLE_BUTTON_28`|Programmable button 28|
+|`PROGRAMMABLE_BUTTON_29`|Programmable button 29|
+|`PROGRAMMABLE_BUTTON_30`|Programmable button 30|
+|`PROGRAMMABLE_BUTTON_31`|Programmable button 31|
+|`PROGRAMMABLE_BUTTON_32`|Programmable button 32|
+|`PB_1` to `PB_32` |Aliases for keymaps |
+
## Space Cadet :id=space-cadet
See also: [Space Cadet](feature_space_cadet.md)
@@ -713,7 +763,7 @@ See also: [Unicode Support](feature_unicode.md)
|Key |Aliases |Description |
|----------------------|---------|----------------------------------------------------------------|
-|`UC(c)` | |Send Unicode code point `c` |
+|`UC(c)` | |Send Unicode code point `c`, up to `0x7FFF` |
|`X(i)` | |Send Unicode code point at index `i` in `unicode_map` |
|`XP(i, j)` | |Send Unicode code point at index `i`, or `j` if Shift/Caps is on|
|`UNICODE_MODE_FORWARD`|`UC_MOD` |Cycle through selected input modes |
diff --git a/docs/keycodes_basic.md b/docs/keycodes_basic.md
index 6a31204f33..6f6ef7a3fd 100644
--- a/docs/keycodes_basic.md
+++ b/docs/keycodes_basic.md
@@ -74,118 +74,118 @@ The basic set of keycodes are based on the [HID Keyboard/Keypad Usage Page (0x07
## Punctuation
-|Key |Aliases |Description |
-|-----------------|-------------------|-----------------------------------------------|
-|`KC_ENTER` |`KC_ENT` |Return (Enter) |
-|`KC_ESCAPE` |`KC_ESC` |Escape |
-|`KC_BSPACE` |`KC_BSPC` |Delete (Backspace) |
-|`KC_TAB` | |Tab |
-|`KC_SPACE` |`KC_SPC` |Spacebar |
-|`KC_MINUS` |`KC_MINS` |`-` and `_` |
-|`KC_EQUAL` |`KC_EQL` |`=` and `+` |
-|`KC_LBRACKET` |`KC_LBRC` |`[` and `{` |
-|`KC_RBRACKET` |`KC_RBRC` |`]` and `}` |
-|`KC_BSLASH` |`KC_BSLS` |`\` and `\|` |
-|`KC_NONUS_HASH` |`KC_NUHS` |Non-US `#` and `~` |
-|`KC_SCOLON` |`KC_SCLN` |`;` and `:` |
-|`KC_QUOTE` |`KC_QUOT` |`'` and `"` |
-|`KC_GRAVE` |`KC_GRV`, `KC_ZKHK`|`
and `~`, JIS Zenkaku/Hankaku|
-|`KC_COMMA` |`KC_COMM` |`,` and `<` |
-|`KC_DOT` | |`.` and `>` |
-|`KC_SLASH` |`KC_SLSH` |`/` and `?` |
-|`KC_NONUS_BSLASH`|`KC_NUBS` |Non-US `\` and `\|` |
+|Key |Aliases |Description |
+|--------------------|---------|--------------------------|
+|`KC_ENTER` |`KC_ENT` |Return (Enter) |
+|`KC_ESCAPE` |`KC_ESC` |Escape |
+|`KC_BACKSPACE` |`KC_BSPC`|Delete (Backspace) |
+|`KC_TAB` | |Tab |
+|`KC_SPACE` |`KC_SPC` |Spacebar |
+|`KC_MINUS` |`KC_MINS`|`-` and `_` |
+|`KC_EQUAL` |`KC_EQL` |`=` and `+` |
+|`KC_LEFT_BRACKET` |`KC_LBRC`|`[` and `{` |
+|`KC_RIGHT_BRACKET` |`KC_RBRC`|`]` and `}` |
+|`KC_BACKSLASH` |`KC_BSLS`|`\` and `\|` |
+|`KC_NONUS_HASH` |`KC_NUHS`|Non-US `#` and `~` |
+|`KC_SEMICOLON` |`KC_SCLN`|`;` and `:` |
+|`KC_QUOTE` |`KC_QUOT`|`'` and `"` |
+|`KC_GRAVE` |`KC_GRV` |`
and `~`|
+|`KC_COMMA` |`KC_COMM`|`,` and `<` |
+|`KC_DOT` | |`.` and `>` |
+|`KC_SLASH` |`KC_SLSH`|`/` and `?` |
+|`KC_NONUS_BACKSLASH`|`KC_NUBS`|Non-US `\` and `\|` |
## Lock Keys
-|Key |Aliases |Description |
-|-------------------|--------------------|------------------------------------|
-|`KC_CAPSLOCK` |`KC_CLCK`, `KC_CAPS`|Caps Lock |
-|`KC_SCROLLLOCK` |`KC_SLCK`, `KC_BRMD`|Scroll Lock, Brightness Down (macOS)|
-|`KC_NUMLOCK` |`KC_NLCK` |Keypad Num Lock and Clear |
-|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |
-|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |
-|`KC_LOCKING_SCROLL`|`KC_LSCR` |Locking Scroll Lock |
+|Key |Aliases |Description |
+|------------------------|--------------------|------------------------------------|
+|`KC_CAPS_LOCK` |`KC_CAPS` |Caps Lock |
+|`KC_SCROLL_LOCK` |`KC_SCRL`, `KC_BRMD`|Scroll Lock, Brightness Down (macOS)|
+|`KC_NUM_LOCK` |`KC_NUM` |Keypad Num Lock and Clear |
+|`KC_LOCKING_CAPS_LOCK` |`KC_LCAP` |Locking Caps Lock |
+|`KC_LOCKING_NUM_LOCK` |`KC_LNUM` |Locking Num Lock |
+|`KC_LOCKING_SCROLL_LOCK`|`KC_LSCR` |Locking Scroll Lock |
## Modifiers
-|Key |Aliases |Description |
-|-----------|--------------------|------------------------------------|
-|`KC_LCTRL` |`KC_LCTL` |Left Control |
-|`KC_LSHIFT`|`KC_LSFT` |Left Shift |
-|`KC_LALT` |`KC_LOPT` |Left Alt (Option) |
-|`KC_LGUI` |`KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |
-|`KC_RCTRL` |`KC_RCTL` |Right Control |
-|`KC_RSHIFT`|`KC_RSFT` |Right Shift |
-|`KC_RALT` |`KC_ROPT`, `KC_ALGR`|Right Alt (Option/AltGr) |
-|`KC_RGUI` |`KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key)|
+|Key |Aliases |Description |
+|----------------|-------------------------------|------------------------------------|
+|`KC_LEFT_CTRL` |`KC_LCTL` |Left Control |
+|`KC_LEFT_SHIFT` |`KC_LSFT` |Left Shift |
+|`KC_LEFT_ALT` |`KC_LALT`, `KC_LOPT` |Left Alt (Option) |
+|`KC_LEFT_GUI` |`KC_LGUI`, `KC_LCMD`, `KC_LWIN`|Left GUI (Windows/Command/Meta key) |
+|`KC_RIGHT_CTRL` |`KC_RCTL` |Right Control |
+|`KC_RIGHT_SHIFT`|`KC_RSFT` |Right Shift |
+|`KC_RIGHT_ALT` |`KC_RALT`, `KC_ROPT`, `KC_ALGR`|Right Alt (Option/AltGr) |
+|`KC_RIGHT_GUI` |`KC_RGUI`, `KC_RCMD`, `KC_RWIN`|Right GUI (Windows/Command/Meta key)|
## International
-|Key |Aliases |Description |
-|----------|---------|---------------------|
-|`KC_INT1` |`KC_RO` |JIS `\` and `_` |
-|`KC_INT2` |`KC_KANA`|JIS Katakana/Hiragana|
-|`KC_INT3` |`KC_JYEN`|JIS `¥` and `\|` |
-|`KC_INT4` |`KC_HENK`|JIS Henkan |
-|`KC_INT5` |`KC_MHEN`|JIS Muhenkan |
-|`KC_INT6` | |JIS Numpad `,` |
-|`KC_INT7` | |International 7 |
-|`KC_INT8` | |International 8 |
-|`KC_INT9` | |International 9 |
-|`KC_LANG1`|`KC_HAEN`|Hangul/English |
-|`KC_LANG2`|`KC_HANJ`|Hanja |
-|`KC_LANG3`| |JIS Katakana |
-|`KC_LANG4`| |JIS Hiragana |
-|`KC_LANG5`| |JIS Zenkaku/Hankaku |
-|`KC_LANG6`| |Language 6 |
-|`KC_LANG7`| |Language 7 |
-|`KC_LANG8`| |Language 8 |
-|`KC_LANG9`| |Language 9 |
+|Key |Aliases |Description |
+|--------------------|---------|---------------------|
+|`KC_INTERNATIONAL_1`|`KC_INT1`|JIS `\` and `_` |
+|`KC_INTERNATIONAL_2`|`KC_INT2`|JIS Katakana/Hiragana|
+|`KC_INTERNATIONAL_3`|`KC_INT3`|JIS `¥` and `\|` |
+|`KC_INTERNATIONAL_4`|`KC_INT4`|JIS Henkan |
+|`KC_INTERNATIONAL_5`|`KC_INT5`|JIS Muhenkan |
+|`KC_INTERNATIONAL_6`|`KC_INT6`|JIS Numpad `,` |
+|`KC_INTERNATIONAL_7`|`KC_INT7`|International 7 |
+|`KC_INTERNATIONAL_8`|`KC_INT8`|International 8 |
+|`KC_INTERNATIONAL_9`|`KC_INT9`|International 9 |
+|`KC_LANGUAGE_1` |`KC_LNG1`|Hangul/English |
+|`KC_LANGUAGE_2` |`KC_LNG2`|Hanja |
+|`KC_LANGUAGE_3` |`KC_LNG3`|JIS Katakana |
+|`KC_LANGUAGE_4` |`KC_LNG4`|JIS Hiragana |
+|`KC_LANGUAGE_5` |`KC_LNG5`|JIS Zenkaku/Hankaku |
+|`KC_LANGUAGE_6` |`KC_LNG6`|Language 6 |
+|`KC_LANGUAGE_7` |`KC_LNG7`|Language 7 |
+|`KC_LANGUAGE_8` |`KC_LNG8`|Language 8 |
+|`KC_LANGUAGE_9` |`KC_LNG9`|Language 9 |
## Commands
-|Key |Aliases |Description |
-|------------------|------------------------------|--------------------------------------|
-|`KC_PSCREEN` |`KC_PSCR` |Print Screen |
-|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`, `KC_BRMU`|Pause, Brightness Up (macOS) |
-|`KC_INSERT` |`KC_INS` |Insert |
-|`KC_HOME` | |Home |
-|`KC_PGUP` | |Page Up |
-|`KC_DELETE` |`KC_DEL` |Forward Delete |
-|`KC_END` | |End |
-|`KC_PGDOWN` |`KC_PGDN` |Page Down |
-|`KC_RIGHT` |`KC_RGHT` |Right Arrow |
-|`KC_LEFT` | |Left Arrow |
-|`KC_DOWN` | |Down Arrow |
-|`KC_UP` | |Up Arrow |
-|`KC_APPLICATION` |`KC_APP` |Application (Windows Context Menu Key)|
-|`KC_POWER` | |System Power |
-|`KC_EXECUTE` |`KC_EXEC` |Execute |
-|`KC_HELP` | |Help |
-|`KC_MENU` | |Menu |
-|`KC_SELECT` |`KC_SLCT` |Select |
-|`KC_STOP` | |Stop |
-|`KC_AGAIN` |`KC_AGIN` |Again |
-|`KC_UNDO` | |Undo |
-|`KC_CUT` | |Cut |
-|`KC_COPY` | |Copy |
-|`KC_PASTE` |`KC_PSTE` |Paste |
-|`KC_FIND` | |Find |
-|`KC__MUTE` | |Mute |
-|`KC__VOLUP` | |Volume Up |
-|`KC__VOLDOWN` | |Volume Down |
-|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase |
-|`KC_SYSREQ` | |SysReq/Attention |
-|`KC_CANCEL` | |Cancel |
-|`KC_CLEAR` |`KC_CLR` |Clear |
-|`KC_PRIOR` | |Prior |
-|`KC_RETURN` | |Return |
-|`KC_SEPARATOR` | |Separator |
-|`KC_OUT` | |Out |
-|`KC_OPER` | |Oper |
-|`KC_CLEAR_AGAIN` | |Clear/Again |
-|`KC_CRSEL` | |CrSel/Props |
-|`KC_EXSEL` | |ExSel |
+|Key |Aliases |Description |
+|--------------------|------------------------------|--------------------------------------|
+|`KC_PRINT_SCREEN` |`KC_PSCR` |Print Screen |
+|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`, `KC_BRMU`|Pause, Brightness Up (macOS) |
+|`KC_INSERT` |`KC_INS` |Insert |
+|`KC_HOME` | |Home |
+|`KC_PAGE_UP` |`KC_PGUP` |Page Up |
+|`KC_DELETE` |`KC_DEL` |Forward Delete |
+|`KC_END` | |End |
+|`KC_PAGE_DOWN` |`KC_PGDN` |Page Down |
+|`KC_RIGHT` |`KC_RGHT` |Right Arrow |
+|`KC_LEFT` | |Left Arrow |
+|`KC_DOWN` | |Down Arrow |
+|`KC_UP` | |Up Arrow |
+|`KC_APPLICATION` |`KC_APP` |Application (Windows Context Menu Key)|
+|`KC_KB_POWER` | |System Power |
+|`KC_EXECUTE` |`KC_EXEC` |Execute |
+|`KC_HELP` | |Help |
+|`KC_MENU` | |Menu |
+|`KC_SELECT` |`KC_SLCT` |Select |
+|`KC_STOP` | |Stop |
+|`KC_AGAIN` |`KC_AGIN` |Again |
+|`KC_UNDO` | |Undo |
+|`KC_CUT` | |Cut |
+|`KC_COPY` | |Copy |
+|`KC_PASTE` |`KC_PSTE` |Paste |
+|`KC_FIND` | |Find |
+|`KC_KB_MUTE` | |Mute |
+|`KC_KB_VOLUME_UP` | |Volume Up |
+|`KC_KB_VOLUME_DOWN` | |Volume Down |
+|`KC_ALTERNATE_ERASE`|`KC_ERAS` |Alternate Erase |
+|`KC_SYSTEM_REQUEST` |`KC_SYRQ` |SysReq/Attention |
+|`KC_CANCEL` |`KC_CNCL` |Cancel |
+|`KC_CLEAR` |`KC_CLR` |Clear |
+|`KC_PRIOR` |`KC_PRIR` |Prior |
+|`KC_RETURN` |`KC_RETN` |Return |
+|`KC_SEPARATOR` |`KC_SEPR` |Separator |
+|`KC_OUT` | |Out |
+|`KC_OPER` | |Oper |
+|`KC_CLEAR_AGAIN` |`KC_CLAG` |Clear/Again |
+|`KC_CRSEL` |`KC_CRSL` |CrSel/Props |
+|`KC_EXSEL` |`KC_EXSL` |ExSel |
## Media Keys
diff --git a/docs/keymap.md b/docs/keymap.md
index ef476e87f5..bec781e684 100644
--- a/docs/keymap.md
+++ b/docs/keymap.md
@@ -105,7 +105,7 @@ At the top of the file you'll find this:
#include QMK_KEYBOARD_H
// Helpful defines
- #define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+ #define GRAVE_MODS (MOD_BIT(KC_LSFT)|MOD_BIT(KC_RSFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* You can use _______ in place for KC_TRNS (transparent) *
@@ -164,7 +164,7 @@ Our function layer is, from a code point of view, no different from the base lay
[_FL] = LAYOUT(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, BL_STEP, \
- _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \
+ _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SCRL, KC_PAUS, _______, _______, _______, _______, \
_______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \
_______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \
_______, _______, _______, _______, _______,_______, _______, _______, _______, MO(_FL), KC_HOME, KC_PGDN, KC_END),
diff --git a/docs/ko-kr/README.md b/docs/ko-kr/README.md
deleted file mode 100644
index a3b5b91011..0000000000
--- a/docs/ko-kr/README.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Quantum Mechanical Keyboard Firmware
-
-[![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
-[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
-[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
-[![GitHub contributors](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
-[![GitHub forks](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
-
-## QMK Firmware 란?
-
-QMK(*Quantum Mechanical Keyboard 양자 기계식 키보드*)란 QMK 컴워어, QMK 툴박스, qmk.fm 를 관리하고 있는 오픈소스 커뮤니티 입니다. QMK펌웨어는 [tmk\_keyboard](https://github.com/tmk/tmk_keyboard)를 바탕으로 만들어진 키보드펌웨어이며, Atmel AVR컨트롤러와 [OLKB 제품군](https://olkb.com) [ErgoDox EZ](https://www.ergodox-ez.com), 그리고 [Clueboard 제품군](https://clueboard.co/) 이용할때 매우 편리합니다. 또한 QMK는 ChibiOS를 사용하여 ARM기반의 컨트롤러로도 사용할수 있습니다. 마지막으로 QMK는 커스텀회로와 핸드와이어드 키보드을 작동시키는데에도 사용가능합니다.
-
-
-## 설치하기
-
-만약 당신이 QMK에 키보드, 키맵, 또는 새로운 기능을 추가하고싶다면, 가장쉬운 방법은 Github를 통해 [저장소(REPO)를 추가하고]((https://github.com/qmk/qmk_firmware#fork-destination-box)) 로컬에서 변화 또는 수정하고, [PULL REQUEST](https://github.com/qmk/qmk_firmware/pulls)을 통해 업로드 할수 있습니다.
-
-또다른 방법으로는, 직접 파일들 로컬로 다운로드 하거나([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), git (`git@github.com:qmk/qmk_firmware.git`), https (`https://github.com/qmk/qmk_firmware.git`)을 통해 클론을 만들수 있습니다.
-
-## 컴파일
-
-먼저 컴파일을 하기전 AVR 이나 ARM [개발환경](getting_started_build_tools.md)을 구축해야 합니다. 모든준비가 끝났다면 `make`를 다음과 같이 키보드와 키맵을 선택하여 컴파일 할 수 있습니다.
-
- make planck/rev4:default
-
-이 커맨드는 `rev4`버전의 `planck`를 `default`키맵으로 컴파일 할것입니다. 다만 모든 키보드는 파일, 수정본 또는 세부프로젝트를 가지고있지 않음으로 수정본 부분을 생략될수 있습니다.
-
- make preonic:default
-
-## 커스터마이징
-
-QMK는 사용할 수 있는 매우 다양한 [기능](features.md)과 체계화된 [참고자료](https://docs.qmk.fm)들이 있습니다. 그중 대부분은 [키맵](keymap.md)을 수정하거나 [키코드](keycodes.md)를 변경하는데에 특화되어 있습니다.
diff --git a/docs/ko-kr/getting_started_build_tools.md b/docs/ko-kr/getting_started_build_tools.md
deleted file mode 100644
index c5aa8d0c03..0000000000
--- a/docs/ko-kr/getting_started_build_tools.md
+++ /dev/null
@@ -1,156 +0,0 @@
-# 컴파일 도구 설치
-
-이 페이지는 QMK 컴파일 환경을 설치하는 방법을 설명합니다. 이 페이지는 AVR 프로세서들(예를 들면 atmega32u4와 비슷한)을 위한 가이드를 제공합니다
-
-
-
-
-**노트:** 만약 당신이 처음 시작한다면 [입문자를 위한 가이드](newbs.md)페이지를 확인하세요.
-
-계속하기전에 당신의 서브모듈(외부라이브러리)이 최신인지 `make git-submodule`을 사용하여 확인하세요.
-
-## 리눅스
-
-당신이 항상 최신 파일을 가지고 있는지는 `sudo util/qmk_install.sh`을 이용하여 간단히 확인할 수 있습니다. 이 명령어는 당신이 필요한 모든 속성물(dependencies)를 설치할 것입니다. **이 명령어는 `apt-get upgrade`를 사용합니다**
-
-또한 당신의 직접 필요한 것들을 설치할 수도 있습니다. 하지만 이 자료는 항상 최신의 자료을 가지고 있지 않습니다.
-
-현재로써 필요한 것은 다음과 같습니다. 하지만 당신이 하는 작업에 따라 당신은 다음 패키지를 다 쓰지 않을 수도 있습니다. 또한 환경에 따라 모든 다음 패키지는 다른이름으로 존재하거나, 없을 수도 있습니다.
-
-```
-build-essential
-gcc
-unzip
-wget
-zip
-gcc-avr
-binutils-avr
-avr-libc
-dfu-programmer
-dfu-util
-gcc-arm-none-eabi
-binutils-arm-none-eabi
-libnewlib-arm-none-eabi
-git
-```
-
-당신이 사용하는 패키지 매니져에서 이러한 방법으로 설치하십시요.
-
-데비안 / 우분투 예시:
-
- sudo apt-get update
- sudo apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi
-
-페도라 / 레드햇 예시:
-
- 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
-
-아치 / 맨자로(Manjaro) 예시:
-
- 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
-
-## 닉스 (NIX)
-
-만약 당신이 [NixOS](https://nixos.org/)를 사용중이거나 NIX를 리눅스 또는 맥에서 사용중이라면 `nix-shell`를 root 디렉토리에서 사용하여 컴파일 환경의 구축할 수 있습니다.
-
-기본적으로 다음 커맨드는 AVR과 ARM 컴파일러를 설치할것입니다. 만약 필요 없다면 `avr` 또는 `arm`을 인수에서 해제할 수 있습니다.
-
- nix-shell --arg arm false
-
-## 맥
-당신이 홈브루([homebrew](https://brew.sh/))를 사용한다면, 다음을 입력하세요.
-
- brew tap osx-cross/avr
- brew tap PX4/homebrew-px4
- brew update
- brew install avr-gcc@7
- brew link --force avr-gcc@7
- brew install dfu-programmer
- brew install dfu-util
- brew install gcc-arm-none-eabi
- brew install avrdude
-
-이 방법을 가장 추천합니다. 만약 홈브루가 없다면 커맨드라인 환경에서 매우 편한 [Homebrew](https://brew.sh/)를 다운받는 것을 추천합니다. 참고로 `avr-gcc@7`를 설치하는 중 `make`과 `make install`는 대개 20분 넘게 걸리고 CPU 사용량이 높아집니다.
-
-## msys2를 사용하는 윈도우 (추천)
-윈도우 비스타 부터 최신버젼까지 가장추천되는 환경은 [msys2](https://www.msys2.org)를 이용하는 것입니다. (윈도우 7과 윈도우 10에서 모두 테스트되었음)
-
-* 이 사이트에 있는 설명을 이용해 msys2를 설치하세요: https://www.msys2.org
-* ``MSYS2 MingGW 64-bit`` 를 여세요
-* QMK폴더로 이동하세요. c드라이브 루트에 있는경우:
- * `$ cd /c/qmk_firmware`
-* `util/qmk_install.sh`을 실행시키고 나오는데요 따라하세요
-
-### 크리에이터 업데이트
-만약 당신의 윈도우 10이 크리에이터 업데이트 버전 또는 더 높은 버전이라면 바로 컴파일과 프로그램 업로드(flashing)를 할 수 있습니다. 크리에이터 업데이트 전 버전이라면 컴파일만 가능합니다. 만약 당신이 잘 모르겠거나 업데이트된 버전이 아니라면 [이 링크](https://support.microsoft.com/en-us/instantanswers/d4efb316-79f0-1aa1-9ef3-dcada78f3fa0/get-the-windows-10-creators-update)를 확인해 보십시오.
-
-### 리눅스용 윈도우 하위 시스템 사용 (Windows10 Subsystem for Linux)
-크리에이터 업데이트에 추가로 만약 당신이 리눅스용 윈도우 하위 시스템이 필요하다면 이 링크에서 다운받으십시오: [설명](https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/)
-
-만약 당신이 이미 리눅스용 윈도우 하위 시스템을 Anniversary업데이트를 통해 받았다면 이 링크에서 16.04LTS로 업데이트 하는것을 추천합니다. 왜냐하면 업데이트 없이는 일부키보드가 14.04LTS에 포함되있는 도구들로 컴파일되지 않을수 있기때문입니다 : [WSL 업데이트](https://betanews.com/2017/04/14/upgrade-windows-subsystem-for-linux/)
-
-
-### Git
-만약 당신이 이미 파일을 로컬로 복제하였다면 이 섹션을 무시하십시요.
-
-당신은 파일을 기본적인 git을 사용하여 로컬로 복제해야 합니다. **주의, WSL Git을 사용하면 안됩니다** [Git](https://git-scm.com/download/win) 이 링크에서 git을 다운받고 설치하십시오.
-그리고 [기본설정](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup), 유저네임과 이메일을 설정하는 것은 만약 당신이 온라인에 기여할 계획이라면 매우 중요합니다.
-
-Git의 설치가 완료되었다면 Git Bash커맨드을 열고 당신의 복제 QMK파일이 있는 위치로 이동하고 `git clone --recurse-submodules https://github.com/qmk/qmk_firmware`를 실행 시키십니오. 이 커맨드는 새로운 `qmk_firmware`폴더를 이미 존재하는 것의 하위 폴더설정으로 생성할 것입니다.
-
-### 도구(Toolchain) 설정
-기본적으로 도구설정은 리눅스용 윈도우 하위 시스템이 설치될때 자동으로 설정됩니다. 하지만 수동적으로 하고 싶다면 여기 설명이 있습니다. (If you want to do everything manually, there are no other instructions than the scripts themselves, but you can always open issues and ask for more information. )
-
-1. "Bash On Ubuntu On Windows" 을 실행시키십시오.
-2. 당신이 `qmk_firmware`를 복제한 위치로 가십시오. WSL(리눅스용 윈도우 하위 시스템 사용)에서 `/mnt/`로 시작되는 패스를 찾으십시오. 즉 당신은 다음과 같은 형식으로 입력해야 합니다. `cd /mnt/c/path/to/qmk_firmware` (Note that the paths start with `/mnt/`in the WSL, so you have to write for example `cd /mnt/c/path/to/qmk_firmware`.)
-3. `util/wsl_install.sh`를 실행시키고 화면에 나오는 지시를 따르십니오.
-4. Bash command window를 재실행 시키십시오.
-5. 이로써 당신은 컴파일과 프로그램 업로드(flashing)을 위한 준비가 모두 끝났습니다.
-
-### 중요한 참고사항
-*`util/wsl_install.sh` 명령어를 다시 실행시켜 최신 업데이트를 다운받을 수 있습니다.
-* QMK 폴더의 위치는 윈도우 파일시스템을 기반으로 해야 됩니다. WSL는 외부실행파일를 작동 시킬수 없기 때문이죠.
-* WSL의 Git은 윈도우용 Git과 **호환되지 않습니다**
-* 파일을 수정하는 것은 WSL안과 밖에서 모두 가능합니다 하지만 만약 .makefile 혹은 .sh를 수정한다면 유닉스 라인엔딩(Unix line endings)을 지원하는 에디터를 사용하는지 확인하십이오. 그렇지 않다면 컴파일이 되지않을 수도 있습니다.
-
-## 윈두우 (비스타 혹은 더 최신) (비추천)
-
-이 섹션은 윈도우 비스타 혹은 더 최신버젼을 위한 오래된 설명입니다. [MSYS2](#windows-with-msys2-recommended)를 사용하는 것을 더 추천합니다.
-
-1. WinAVR을 설치하였다면 먼저 삭제하십시오.
-2. [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe)을 설치하십시오. (Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**)
-3. 만약 당신이 Infinity을 기반으로 하는 키보드에 프로그램 업로드를(flashing) 할거라면 dfu-util을 설치해야 합니다, [Input Club](https://github.com/kiibohd/controller/wiki/Loading-DFU-Firmware) 를 참고 하십시오.
-4. [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download)를 설치하십시오. 설치중 윈도우화면에서 GUI 추가 설치 옵션을 해재하십니오. **기본 설치 위치를 바꾸지 마십시오.** 이 명령어는 기본위치를 기반으로 하고 있습니다.
-5. 레파지토리를 복제하십시오. [이 링크로 압축파일을 받고 앞축해제 하십시오.](https://github.com/qmk/qmk_firmware/archive/master.zip) 윈도우 탐색기에서 다운받은 파일을 여십시오.
-6. `\util` 폴더를 여십시오.
-7. `1-setup-path-win` .bat파일을 더블클릭해서 실행시키시오. 유저 계정 설정 변경을 허용해야될 수도 있습니다. 스페이스바를 눌러 설치가 성공적으로 완료되었다는 메세지를 닫을 수 있습니다.
-8. `2-setup-environment-win` .bat파일에 우클릭해서 '관리자 권한으로 실행'으로 실행시키십시오. 이 작업을 꽤 오래 걸릴 수도 있습니다. 또한 드라이버 설정을 승인해야 될 수도 있습니다. 하지만 이 모든것이 끝나면 당신의 시스템의 설정이 모두 끝났습니다.
-
-만약 이 작업을 하는데에 문제가 있어 도움받고 싶다면 *Win_Check_Output.txt*을 생성하는 것이 도움이 될것입니다. 이 파일은 `Win_Check.bat`을 `\util`폴더에서 실행시켜 생성할 수 있습니다.
-
-## 도커(Docker)
-만약 위작업들이 당신에게 좀 어렵게 느껴졌다면 도커(Docker)가 당신을 위한 최선일 수도 있습니다(의역). [Docker CE](https://docs.docker.com/install/#supported-platforms)를 설치한뒤 아래 커맨드를 `qmk_firmware` 디랙토리에서 실행시켜 키보드 또는 키맵을 생성시킵니다.
-```bash
-util/docker_build.sh keyboard:keymap
-# 예: util/docker_build.sh ergodox_ez:steno
-```
-이 커맨드는 원하는 키보드 또는 키맵을 컴파일하고 `.hex`또는 `.bin`파일을 프로그램 업로드를(flashing) 위해 QMK디랙토리에 생성할것입니다. 만약 `:keymap`이 생략된다면 `default`이 기본을로 사용됩니다. 참고로 여기서 사용되는 인수는 `make` 커맨드를 사용하여 컴파일할때와 동일합니다.
-
-
-또한 스크립트를 그냥 아무 인수 없이도 사용가능합니다. 그렇게 된다면 프로그램은 하나씩 자동으로 인수입력을 요구 할것입니다. 어쩌면 이방법이 더 쉬울 수도 있습니다.
-```bash
-util/docker_build.sh
-# 인수을 입력받습니다.(아무것도 쓰지 않고 놔두는면 기본값으로 설정됩니다)
-```
-
-다음과 같이 `target`를 사용하여 컴파일과 프로그램 업로드(flashing)을 동시에 할수도 있습니다.
-```bash
-util/docker_build.sh keyboard:keymap:target
-# 예: util/docker_build.sh planck/rev6:default:dfu-util
-```
-만약 당시이 리눅스를 사용한다면 이 커맨드들은 추가 설정 없이 바로 작동할 것입니다. 하지만 위도우 또는 맥 환경에서는 [Docker Machine](http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos/)를 사용하여야 이 커맨드들을 사용가능합니다. Docker Machine설정은 꽤 지루하고 짜증남으로 추천하지 않고 [QMK Toolbox](https://github.com/qmk/qmk_toolbox)를 사용하는 것을 추천합니다.
-
-!> 윈도우에서 독커는 [Hyper-V](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v)을 활성화 설정하여야 사용가능합니다. 즉, 도커는 Hyper-V를 지원하지 않는 윈도우 7, 윈도우 8, 그리고 **윈도우 10 홈**과 같은 윈도우 버전에서 사용할수 없다는 것을 의미합니다.
-
-## Vagrant
-만약 컴웨어를 사용하는데 문제가 있다면 Vagrant라는 이름의 툴을 사용해 볼 수 있습니다. 이 툴은 가상환경을 세팅해줌과 동시에 컴웨어를 사용하는데에 필요한 모든 설정을 해줄 것입니다. OLKB는 가상환경에 파일을 호스팅하지 않습니다. [Vagrant 가이드](getting_started_vagrant.md)에서 더 많은 정보를 확인할 수 있습니다.
diff --git a/docs/ko-kr/getting_started_getting_help.md b/docs/ko-kr/getting_started_getting_help.md
deleted file mode 100644
index 2ae7917a01..0000000000
--- a/docs/ko-kr/getting_started_getting_help.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# 도움 받기
-
-QMK에서 도움을 받는 방법은 다양합니다.
-
-**주의, 아래 링크들은 영어로 이루어져 있으며 영어 사용이 가능해야 편리하게 이용할 수 있습니다.**
-
-## 디스코드 실시간 채팅
-
-[QMK 디스코드 서버](https://discord.gg/Uq7gcHh)에서 QMK 개발자들과 실시간으로 대화를 나눌수있습니다. 이 디스코드에는 펌웨어, 툴박스, 하드웨어, 그리고 컨피겨레이터(configurator)에 관한 특별화된 채널이 운영되고 있습니다.
-
-## OLKB 서브레딧
-
-공식 QMK 포럼은 [reddit.com](https://reddit.com) 에 [/r/olkb](https://reddit.com/r/olkb)입니다.
-
-## Github 이슈
-
-[issue on GitHub](https://github.com/qmk/qmk_firmware/issues)에서 문제를 보고 할 수 있습니다. 이 링크는 문제가 오랜 시간을 필요로하거나 디버깅를 요구 할때 매우 유용합니다.
diff --git a/docs/ko-kr/getting_started_github.md b/docs/ko-kr/getting_started_github.md
deleted file mode 100644
index 4fd8fda6b8..0000000000
--- a/docs/ko-kr/getting_started_github.md
+++ /dev/null
@@ -1,67 +0,0 @@
-# QMK와 함께 Github를 사용하는 방법
-
-Github can be a little tricky to those that aren't familiar with it - this guide will walk through each step of forking, cloning, and submitting a pull request with QMK.
-
-Github는 자주 사용하는 사람이 아니면 좀 여려울수도 있습니다. 이 문서는 Github를 사용하는데 필요한 forking, cloning 그리고 submitting a pull request with QMK를 설명할 것입니다.
-
-?> 이 가이드는 당신이 git커맨드를 사용하는데 익숙하고 git환경을 당신의 시스템이 설치하였다는 전제하에 작성되었습니다.
-
-아래와 같이 [QMK Github 페이지](https://github.com/qmk/qmk_firmware)에서 당신은 "Fork"라고 쓰여있는 버튼을 볼 수 있습니다
-
-![Fork on Github](https://i.imgur.com/8Toomz4.jpg)
-
-만약 당신이 어느기관 소속이고, 무슨 계정을 사용할것인지 골라야 한다면 개인 계정을 사용하는 것을 추천합니다.
-"Fork"가 성공적으로 끝났다면 아래 보이는 "Clone or Download"를 눌러야 합니다.
-
-![Download from Github](https://i.imgur.com/N1NYcSz.jpg)
-
-"HTTPS"채크 했는지 확인하고 나와 있는 링크를 복사하세요.
-
-![HTTPS link](https://i.imgur.com/eGO0ohO.jpg)
-
-여기거 부터 커맨드라인을 사용합니다. 커맨드 라인에서 `git clone `을 치고 복사한 링크를 붙여넣은후 실행시키세요.
-
-```
-user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git
-Cloning into 'qmk_firmware'...
-remote: Counting objects: 46625, done.
-remote: Compressing objects: 100% (2/2), done.
-remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623
-Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done.
-Resolving deltas: 100% (29362/29362), done.
-Checking out files: 100% (2799/2799), done.
-```
-
-당신은 이제 모든파일이 로컬시스템이 추가 되었습니다 그리고 이제 키맵을 추가하거나 컴파일, 프로그램 업로드(flashing)를 할 수 있습니다.
-모든 추가 변경을 만든 뒤에는 add, commit, and push를 사용하여 당신의 Folk에 추가 할 수 있습니다.
-
-```
-user@computer:~$ git add .
-user@computer:~$ git commit -m "adding my keymap"
-[master cccb1608] adding my keymap
- 1 file changed, 1 insertion(+)
- create mode 100644 keyboards/planck/keymaps/mine/keymap.c
-user@computer:~$ git push
-Counting objects: 1, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (1/1), done.
-Writing objects: 100% (1/1), 1.64 KiB | 0 bytes/s, done.
-Total 1 (delta 1), reused 0 (delta 0)
-remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
-To https://github.com/whoeveryouare/qmk_firmware.git
- + 20043e64...7da94ac5 master -> master
-```
-
-이로써 당신이 만든 모든 변경들이 당신의 Github의 Folk에 추가 되었습니다. (`https://github.com//qmk_firmware`)에서 확인하고 "New Pull Request"를 눌러 변경사항을 QMK에 업로드할수 있습니다.
-
-![New Pull Request](https://i.imgur.com/DxMHpJ8.jpg)
-
-이 버튼을 누르면 당신이 만든 모든 변경사항들이 보여질 것입니다. 만약 모든 변경사항이 맘에 든다면 "Create Pull Request"를 눌러 요청을 확정할수 있습니다.
-
-**요청사항이 확정된다고 변경사항이 바로 적용되는 것은 아닙니다.**
-
-![Create Pull Request](https://i.imgur.com/Ojydlaj.jpg)
-
-요청을 한뒤 QMK개발자들은 댓글로 무엇이 변경되었는지 등을 물어 볼수있지만 끝에는 매인 디랙토리로 업로드 될것입니다.
-
-**"Thanks for contributing to QMK :)"**
diff --git a/docs/newbs_building_firmware.md b/docs/newbs_building_firmware.md
index ed94a1460d..ed51a9aea5 100644
--- a/docs/newbs_building_firmware.md
+++ b/docs/newbs_building_firmware.md
@@ -2,6 +2,20 @@
Now that you have setup your build environment you are ready to start building custom firmware. For this section of the guide we will bounce between 3 programs- your file manager, your text editor, and your terminal window. Keep all 3 open until you are done and happy with your keyboard firmware.
+## Configure Your Build Environment Defaults (Optional)
+
+You can configure your build environment to set the defaults and make working with QMK less tedious. Let's do that now!
+
+Most people new to QMK only have 1 keyboard. You can set this keyboard as your default with the `qmk config` command. For example, to set your default keyboard to `clueboard/66/rev4`:
+
+ qmk config user.keyboard=clueboard/66/rev4
+
+?> The keyboard option is the path relative to the keyboard directory, the above example would be found in `qmk_firmware/keyboards/clueboard/66/rev4`. If you're unsure you can view a full list of supported keyboards with `qmk list-keyboards`.
+
+You can also set your default keymap name. Most people use their GitHub username like the keymap name from the previous steps:
+
+ qmk config user.keymap=
+
## Create a New Keymap
To create your own keymap you'll want to create a copy of the `default` keymap. If you configured your build environment in the last step you can do that easily with the QMK CLI:
@@ -45,7 +59,7 @@ When your changes to the keymap are complete you will need to build the firmware
qmk compile
-If you did not configure your environment, or you have multiple keyboards, you can specify a keyboard and/or keymap:
+If you did not configure defaults for your environment, or you have multiple keyboards, you can specify a keyboard and/or keymap:
qmk compile -kb -km
diff --git a/docs/newbs_flashing.md b/docs/newbs_flashing.md
index c17ff4c956..6e90af9d10 100644
--- a/docs/newbs_flashing.md
+++ b/docs/newbs_flashing.md
@@ -96,7 +96,7 @@ This has been made pretty simple compared to what it used to be. When you are re
qmk flash
-If you have not configured your keyboard/keymap name in the CLI, or you have multiple keyboards, you can specify the keyboard and keymap:
+If you did not configure your keyboard/keymap name in the CLI according to the [Configure your build environment](newbs_getting_started.md) section, or you have multiple keyboards, you can specify the keyboard and keymap:
qmk flash -kb -km
diff --git a/docs/newbs_getting_started.md b/docs/newbs_getting_started.md
index 5dbaa56169..d6c080173c 100644
--- a/docs/newbs_getting_started.md
+++ b/docs/newbs_getting_started.md
@@ -182,22 +182,6 @@ Checking file size of clueboard_66_rev3_default.hex
* The firmware size is fine - 26356/28672 (2316 bytes free)
```
-## 5. Configure Your Build Environment (Optional)
-
-You can configure your build environment to set the defaults and make working with QMK less tedious. Let's do that now!
-
-Most people new to QMK only have 1 keyboard. You can set this keyboard as your default with the `qmk config` command. For example, to set your default keyboard to `clueboard/66/rev4`:
-
- qmk config user.keyboard=clueboard/66/rev4
-
-You can also set your default keymap name. Most people use their GitHub username here, and we recommend that you do too.
-
- qmk config user.keymap=
-
-The keyboard can now be compiled without arguments using the following command after creating your keymap in the next section:
-
- qmk compile
-
# Creating Your Keymap
You are now ready to create your own personal keymap! Move on to [Building Your First Firmware](newbs_building_firmware.md) for that.
diff --git a/docs/newbs_git_resynchronize_a_branch.md b/docs/newbs_git_resynchronize_a_branch.md
index 3e7acdba7a..1d0e4dda16 100644
--- a/docs/newbs_git_resynchronize_a_branch.md
+++ b/docs/newbs_git_resynchronize_a_branch.md
@@ -8,7 +8,7 @@ Suppose you have committed to your `master` branch, and now need to update your
No 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:
-```sh
+```
git branch old_master master
```
@@ -18,7 +18,7 @@ Now you have a branch named `old_master` that is a duplicate of your `master` br
Now 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:
-```sh
+```
QMKuser ~/qmk_firmware (master)
$ git remote -v
origin https://github.com//qmk_firmware.git (fetch)
@@ -29,7 +29,7 @@ upstream https://github.com/qmk/qmk_firmware.git (push)
If you only see one fork referenced:
-```sh
+```
QMKuser ~/qmk_firmware (master)
$ git remote -v
origin https://github.com/qmk/qmk_firmware.git (fetch)
@@ -38,31 +38,31 @@ origin https://github.com/qmk/qmk_firmware.git (push)
add a new remote with:
-```sh
+```
git remote add upstream https://github.com/qmk/qmk_firmware.git
```
Then, redirect the `origin` remote to your own fork with:
-```sh
+```
git remote set-url origin https://github.com//qmk_firmware.git
```
Now that you have both remotes configured, you need to update the references for the upstream repository, which is QMK's, by running:
-```sh
+```
git fetch upstream
```
At this point, resynchronize your branch to QMK's by running:
-```sh
+```
git reset --hard upstream/master
```
These 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:
-```sh
+```
git push --force-with-lease
```
diff --git a/docs/newbs_learn_more_resources.md b/docs/newbs_learn_more_resources.md
index 1afdc206bd..a66ee4ab26 100644
--- a/docs/newbs_learn_more_resources.md
+++ b/docs/newbs_learn_more_resources.md
@@ -20,6 +20,7 @@ Not sure which text editor to use?
Editors specifically made for code:
* [Sublime Text](https://www.sublimetext.com/)
* [VS Code](https://code.visualstudio.com/)
+* [Atom](https://atom.io/)
### Git resources
diff --git a/docs/other_eclipse.md b/docs/other_eclipse.md
index 91557d07d7..58ab7e295d 100644
--- a/docs/other_eclipse.md
+++ b/docs/other_eclipse.md
@@ -11,7 +11,7 @@ Using an IDE such as Eclipse provides many advantages over a plain text editor,
* static code analysis
* many other tools such as debugging, code formatting, showing call hierarchies etc.
-The purpose of the is page is to document how to set-up Eclipse for developing AVR software, and working on the QMK code base.
+The purpose of this page is to document how to set-up Eclipse for developing AVR software, and working on the QMK code base.
Note that this set-up has been tested on Ubuntu 16.04 only for the moment.
diff --git a/docs/pr_checklist.md b/docs/pr_checklist.md
index 94c62c6535..1bd6200b82 100644
--- a/docs/pr_checklist.md
+++ b/docs/pr_checklist.md
@@ -24,7 +24,7 @@ If there are any inconsistencies with these recommendations, you're best off [cr
- no "old-school" or other low-level GPIO/I2C/SPI functions may be used -- must use QMK abstractions unless justifiable (and laziness is not valid justification)
- timing abstractions should be followed too:
- `wait_ms()` instead of `_delay_ms()` (remove `#include ` too)
- - `timer_read()` and `timer_read32()` etc. -- see [timer.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/timer.h) for the timing APIs
+ - `timer_read()` and `timer_read32()` etc. -- see [timer.h](https://github.com/qmk/qmk_firmware/blob/master/platforms/timer.h) for the timing APIs
- if you think a new abstraction is useful, you're encouraged to:
- prototype it in your own keyboard until it's feature-complete
- discuss it with QMK Collaborators on Discord
@@ -110,6 +110,8 @@ Also, specific to ChibiOS:
- a lot of the time, an equivalent Nucleo board can be used with a different flash size or slightly different model in the same family
- example: For an STM32L082KZ, given the similarity to an STM32L073RZ, you can use `BOARD = ST_NUCLEO64_L073RZ` in rules.mk
- QMK is migrating to not having custom board definitions if at all possible, due to the ongoing maintenance burden when upgrading ChibiOS
+- New board definitions must not be embedded in a keyboard PR
+ - See _Core PRs_ below for the procedure for adding a new board to QMK
- if a board definition is unavoidable, `board.c` must have a standard `__early_init()` (as per normal ChibiOS board defs) and an empty `boardInit()`:
- see Arm/ChibiOS [early initialization](https://docs.qmk.fm/#/platformdev_chibios_earlyinit?id=board-init)
- `__early_init()` should be replaced by either `early_hardware_init_pre()` or `early_hardware_init_post()` as appropriate
@@ -118,6 +120,10 @@ Also, specific to ChibiOS:
## Core PRs
- must now target `develop` branch, which will subsequently be merged back to `master` on the breaking changes timeline
+- any new boards adding support for new hardware now requires a corresponding test board under `keyboards/handwired/onekey`
+ - for new MCUs, a new "child" keyboard should be added that targets your newly-added MCU, so that builds can be verified
+ - for new hardware support such as display panels, core-side matrix implementations, or other peripherals, an associated keymap should be provided
+ - if an existing keymap exists that can leverage this functionality this may not be required (e.g. a new RGB driver chip, supported by the `rgb` keymap) -- consult with the QMK Collaborators on Discord to determine if there is sufficient overlap already
- other requirements are at the discretion of QMK collaborators
- core is a lot more subjective given the breadth of posted changes
diff --git a/docs/pt-br/README.md b/docs/pt-br/README.md
deleted file mode 100644
index bf8ec974eb..0000000000
--- a/docs/pt-br/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Quantum Mechanical Keyboard Firmware
-
-[![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
-[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
-[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
-[![GitHub contributors](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
-[![GitHub forks](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
-
-## O que é o firmware QMK?
-QMK (*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](https://github.com/tmk/tmk_keyboard) com alguns recursos úteis para os controladores Atmel AVR e, mais especificamente, na [linha de produtos OLKB](https://olkb.com), o teclado [ErgoDox EZ](https://www.ergodox-ez.com) e a [linha de produtos Clueboard](https://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.
-
-## Como obter e usar o QMK
-
-Se 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.
-
-Caso 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.
-
-## Como compilar
-
-Antes 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:
-
- make planck/rev4:default
-
-Isso 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:
-
- make preonic:default
-
-## Como personalizar
-
-O QMK tem muitos [recursos](features.md) para explorar e uma boa quantidade de [documentação de referência](https://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
deleted file mode 100644
index e0a1b45b33..0000000000
--- a/docs/pt-br/_summary.md
+++ /dev/null
@@ -1,122 +0,0 @@
-* [Complete Newbs Guide](pt-br/newbs.md)
- * [Getting Started](pt-br/newbs_getting_started.md)
- * [Building Your First Firmware](pt-br/newbs_building_firmware.md)
- * [Flashing Firmware](pt-br/newbs_flashing.md)
- * [Testing and Debugging](pt-br/newbs_testing_debugging.md)
- * [Git Best Practices](pt-br/newbs_best_practices.md)
- * [Learning Resources](pt-br/newbs_learn_more_resources.md)
-
-* [QMK Basics](pt-br/README.md)
- * [QMK Introduction](pt-br/getting_started_introduction.md)
- * [QMK CLI](pt-br/cli.md)
- * [QMK CLI Config](pt-br/cli_configuration.md)
- * [Contributing to QMK](pt-br/contributing.md)
- * [How to Use GitHub](pt-br/getting_started_github.md)
- * [Getting Help](pt-br/getting_started_getting_help.md)
-
-* [Breaking Changes](pt-br/breaking_changes.md)
- * [2019 Aug 30](pt-br/ChangeLog/20190830.md)
-
-* [FAQ](faq.md)
- * [General FAQ](pt-br/faq_general.md)
- * [Build/Compile QMK](pt-br/faq_build.md)
- * [Debugging/Troubleshooting QMK](pt-br/faq_debug.md)
- * [Keymap](pt-br/faq_keymap.md)
- * [Driver Installation with Zadig](pt-br/driver_installation_zadig.md)
-
-* Detailed Guides
- * [Install Build Tools](pt-br/getting_started_build_tools.md)
- * [Vagrant Guide](pt-br/getting_started_vagrant.md)
- * [Build/Compile Instructions](pt-br/getting_started_make_guide.md)
- * [Flashing Firmware](pt-br/flashing.md)
- * [Customizing Functionality](pt-br/custom_quantum_functions.md)
- * [Keymap Overview](pt-br/keymap.md)
-
-* [Hardware](hardware.md)
- * [AVR Processors](pt-br/hardware_avr.md)
- * [Drivers](pt-br/hardware_drivers.md)
-
-* Reference
- * [Keyboard Guidelines](pt-br/hardware_keyboard_guidelines.md)
- * [Config Options](pt-br/config_options.md)
- * [Keycodes](pt-br/keycodes.md)
- * [Coding Conventions - C](pt-br/coding_conventions_c.md)
- * [Coding Conventions - Python](pt-br/coding_conventions_python.md)
- * [Documentation Best Practices](pt-br/documentation_best_practices.md)
- * [Documentation Templates](pt-br/documentation_templates.md)
- * [Glossary](pt-br/reference_glossary.md)
- * [Unit Testing](pt-br/unit_testing.md)
- * [Useful Functions](pt-br/ref_functions.md)
- * [Configurator Support](pt-br/reference_configurator_support.md)
- * [info.json Format](pt-br/reference_info_json.md)
- * [Python CLI Development](pt-br/cli_development.md)
-
-* [Features](pt-br/features.md)
- * [Basic Keycodes](pt-br/keycodes_basic.md)
- * [US ANSI Shifted Keys](pt-br/keycodes_us_ansi_shifted.md)
- * [Quantum Keycodes](pt-br/quantum_keycodes.md)
- * [Advanced Keycodes](pt-br/feature_advanced_keycodes.md)
- * [Audio](pt-br/feature_audio.md)
- * [Auto Shift](pt-br/feature_auto_shift.md)
- * [Backlight](pt-br/feature_backlight.md)
- * [Bluetooth](pt-br/feature_bluetooth.md)
- * [Bootmagic](pt-br/feature_bootmagic.md)
- * [Combos](pt-br/feature_combo.md)
- * [Command](pt-br/feature_command.md)
- * [Debounce API](pt-br/feature_debounce_type.md)
- * [DIP Switch](pt-br/feature_dip_switch.md)
- * [Dynamic Macros](pt-br/feature_dynamic_macros.md)
- * [Encoders](pt-br/feature_encoders.md)
- * [Grave Escape](pt-br/feature_grave_esc.md)
- * [Haptic Feedback](pt-br/feature_haptic_feedback.md)
- * [HD44780 LCD Controller](pt-br/feature_hd44780.md)
- * [Key Lock](pt-br/feature_key_lock.md)
- * [Layouts](pt-br/feature_layouts.md)
- * [Leader Key](pt-br/feature_leader_key.md)
- * [LED Matrix](pt-br/feature_led_matrix.md)
- * [Macros](pt-br/feature_macros.md)
- * [Mouse Keys](pt-br/feature_mouse_keys.md)
- * [OLED Driver](pt-br/feature_oled_driver.md)
- * [One Shot Keys](pt-br/one_shot_keys.md)
- * [Pointing Device](pt-br/feature_pointing_device.md)
- * [PS/2 Mouse](pt-br/feature_ps2_mouse.md)
- * [RGB Lighting](pt-br/feature_rgblight.md)
- * [RGB Matrix](pt-br/feature_rgb_matrix.md)
- * [Space Cadet](pt-br/feature_space_cadet.md)
- * [Split Keyboard](pt-br/feature_split_keyboard.md)
- * [Stenography](pt-br/feature_stenography.md)
- * [Swap Hands](pt-br/feature_swap_hands.md)
- * [Tap Dance](pt-br/feature_tap_dance.md)
- * [Terminal](pt-br/feature_terminal.md)
- * [Thermal Printer](pt-br/feature_thermal_printer.md)
- * [Unicode](pt-br/feature_unicode.md)
- * [Userspace](pt-br/feature_userspace.md)
- * [Velocikey](pt-br/feature_velocikey.md)
-
-* For Makers and Modders
- * [Hand Wiring Guide](pt-br/hand_wire.md)
- * [ISP Flashing Guide](pt-br/isp_flashing_guide.md)
- * [ARM Debugging Guide](pt-br/arm_debugging.md)
- * [I2C Driver](pt-br/i2c_driver.md)
- * [SPI Driver](pt-br/spi_driver.md)
- * [GPIO Controls](pt-br/internals_gpio_control.md)
- * [Proton C Conversion](pt-br/proton_c_conversion.md)
-
-* For a Deeper Understanding
- * [How Keyboards Work](pt-br/how_keyboards_work.md)
- * [Understanding QMK](pt-br/understanding_qmk.md)
-
-* Other Topics
- * [Using Eclipse with QMK](pt-br/other_eclipse.md)
- * [Using VSCode with QMK](pt-br/other_vscode.md)
- * [Support](pt-br/getting_started_getting_help.md)
- * [How to add translations](pt-br/translating.md)
-
-* QMK Internals (In Progress)
- * [Defines](pt-br/internals_defines.md)
- * [Input Callback Reg](pt-br/internals_input_callback_reg.md)
- * [Midi Device](pt-br/internals_midi_device.md)
- * [Midi Device Setup Process](pt-br/internals_midi_device_setup_process.md)
- * [Midi Util](pt-br/internals_midi_util.md)
- * [Send Functions](pt-br/internals_send_functions.md)
- * [Sysex Tools](pt-br/internals_sysex_tools.md)
diff --git a/docs/ref_functions.md b/docs/ref_functions.md
index c6185c8703..209dcef722 100644
--- a/docs/ref_functions.md
+++ b/docs/ref_functions.md
@@ -85,7 +85,7 @@ To configure the default layer sounds, you would want to define this in your `co
?> There are a large number of predefined songs in [quantum/audio/song_list.h](https://github.com/qmk/qmk_firmware/blob/master/quantum/audio/song_list.h) that you can use.
-## Reseting the keyboard
+## Resetting the keyboard
There is the `RESET` quantum keycode that you can use. But if you want to reset the board as part of a macro, rather than hitting a key separately, you can do that.
diff --git a/docs/reference_configurator_support.md b/docs/reference_configurator_support.md
index ba3d49e2b2..db6cd80a20 100644
--- a/docs/reference_configurator_support.md
+++ b/docs/reference_configurator_support.md
@@ -168,7 +168,7 @@ k33 | {"label":"Enter", "x":3, "y":3, "h":2}
k40 | {"label":"0", "x":0, "y":4, "w":2}
k42 | {"label":".", "x":2, "y":4}
-When a user selects the top-left key in the Configurator, and assigns Num Lock to it, the Configurator builds a keymap file with `KC_NLCK` as the first key, and so on as the keymap is built. The `label` keys are not used; they are only for the user's reference in identifying specific keys when debugging the `info.json` file.
+When a user selects the top-left key in the Configurator, and assigns Num Lock to it, the Configurator builds a keymap file with `KC_NUM` as the first key, and so on as the keymap is built. The `label` keys are not used; they are only for the user's reference in identifying specific keys when debugging the `info.json` file.
## Issues and Hazards
diff --git a/docs/ru-ru/README.md b/docs/ru-ru/README.md
deleted file mode 100644
index 7218781540..0000000000
--- a/docs/ru-ru/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Quantum Mechanical Keyboard Firmware
-
-[![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
-[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
-[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
-[![GitHub contributors](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
-[![GitHub forks](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
-
-## Что такое QMK Firmware?
-
-QMK (*Quantum Mechanical Keyboard*) — это сообщество, работающее над ПО с открытым исходным кодом, которое разрабатывает QMK Firmware, QMK Toolbox, qmk.fm и эту документацию. QMK Firmware — это прошивка для клавиатур, основанная на [tmk\_keyboard](https://github.com/tmk/tmk_keyboard) с множеством полезных функций для микроконтроллеров Atmel AVR, а именно, для продуктов компаний [OLKB](https://olkb.com), [ErgoDox EZ](https://www.ergodox-ez.com) и [Clueboard](https://clueboard.co/). Она также была портирована на чипы ARM при помощи ChibiOS. Вы можете использовать ее для клавиатуры, собранной вручную или имеющей нестандартную печатную плату.
-
-## Как скачать
-
-Если вы собираетесь добавить раскладку, клавиатуру или новые функции в QMK, то самый простой путь реализации — это [сделать форк репозитория на GitHub](https://github.com/qmk/qmk_firmware#fork-destination-box), клонировать ваш репозиторий локально для дальнейшего внесения изменений, сделать пуш изменений, а затем открыть [пулреквест](https://github.com/qmk/qmk_firmware/pulls) из вашего форка.
-
-Также вы можете либо скачать репозиторий ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), либо клонировать его через git (`git@github.com:qmk/qmk_firmware.git`) или https (`https://github.com/qmk/qmk_firmware.git`).
-
-## Как скомпилировать
-
-Перед компиляцией вам необходимо [настроить окружение](ru-ru/getting_started_build_tools.md) разработчика для AVR или/и ARM. После этого используйте команду `make` со следующим синтаксисом, чтобы собрать клавиатуру и раскладку:
-
- make planck/rev4:default
-
-Данная команда соберет ревизию `rev4` клавиатуры `planck` с раскладкой `default`. Не все клавиатуры имеют ревизии (они также называются subprojects или folders), в этом случае она может быть опущена:
-
- make preonic:default
-
-## Как настроить
-
-QMK обладает множеством [функций](ru-ru/features.md) для исследования, и [справочная документация](https://docs.qmk.fm) может стать хорошей отправной точкой для знакомства с ними. Большинством функций можно воспользоваться модифицируя [раскладку](ru-ru/keymap.md) и изменяя [коды клавиш](ru-ru/keycodes.md).
diff --git a/docs/ru-ru/_summary.md b/docs/ru-ru/_summary.md
deleted file mode 100644
index 09273172b6..0000000000
--- a/docs/ru-ru/_summary.md
+++ /dev/null
@@ -1,124 +0,0 @@
-* [Complete Newbs Guide](ru-ru/newbs.md)
- * [Getting Started](ru-ru/newbs_getting_started.md)
- * [Building Your First Firmware](ru-ru/newbs_building_firmware.md)
- * [Flashing Firmware](ru-ru/newbs_flashing.md)
- * [Testing and Debugging](ru-ru/newbs_testing_debugging.md)
- * [Git Best Practices](ru-ru/newbs_best_practices.md)
- * [Learning Resources](ru-ru/newbs_learn_more_resources.md)
-
-* [QMK Basics](ru-ru/README.md)
- * [QMK Introduction](ru-ru/getting_started_introduction.md)
- * [QMK CLI](ru-ru/cli.md)
- * [QMK CLI Config](ru-ru/cli_configuration.md)
- * [Contributing to QMK](ru-ru/contributing.md)
- * [How to Use GitHub](ru-ru/getting_started_github.md)
- * [Getting Help](ru-ru/getting_started_getting_help.md)
-
-* [Breaking Changes](ru-ru/breaking_changes.md)
- * [2019 Aug 30](ru-ru/ChangeLog/20190830.md)
-
-* [FAQ](ru-ru/faq.md)
- * [General FAQ](ru-ru/faq_general.md)
- * [Build/Compile QMK](ru-ru/faq_build.md)
- * [Debugging/Troubleshooting QMK](ru-ru/faq_debug.md)
- * [Keymap](ru-ru/faq_keymap.md)
- * [Driver Installation with Zadig](ru-ru/driver_installation_zadig.md)
-
-* Detailed Guides
- * [Install Build Tools](ru-ru/getting_started_build_tools.md)
- * [Vagrant Guide](ru-ru/getting_started_vagrant.md)
- * [Build/Compile Instructions](ru-ru/getting_started_make_guide.md)
- * [Flashing Firmware](ru-ru/flashing.md)
- * [Customizing Functionality](ru-ru/custom_quantum_functions.md)
- * [Keymap Overview](ru-ru/keymap.md)
-
-* [Hardware](ru-ru/hardware.md)
- * [Compatible Microcontrollers](ru-ru/compatible_microcontrollers.md)
- * [AVR Processors](ru-ru/hardware_avr.md)
- * [Drivers](ru-ru/hardware_drivers.md)
-
-* Reference
- * [Keyboard Guidelines](ru-ru/hardware_keyboard_guidelines.md)
- * [Config Options](ru-ru/config_options.md)
- * [Keycodes](ru-ru/keycodes.md)
- * [Coding Conventions - C](ru-ru/coding_conventions_c.md)
- * [Coding Conventions - Python](ru-ru/coding_conventions_python.md)
- * [Documentation Best Practices](ru-ru/documentation_best_practices.md)
- * [Documentation Templates](ru-ru/documentation_templates.md)
- * [Glossary](ru-ru/reference_glossary.md)
- * [Unit Testing](ru-ru/unit_testing.md)
- * [Useful Functions](ru-ru/ref_functions.md)
- * [Configurator Support](ru-ru/reference_configurator_support.md)
- * [info.json Format](ru-ru/reference_info_json.md)
- * [Python CLI Development](ru-ru/cli_development.md)
-
-* [Features](ru-ru/features.md)
- * [Basic Keycodes](ru-ru/keycodes_basic.md)
- * [US ANSI Shifted Keys](ru-ru/keycodes_us_ansi_shifted.md)
- * [Quantum Keycodes](ru-ru/quantum_keycodes.md)
- * [Advanced Keycodes](ru-ru/feature_advanced_keycodes.md)
- * [Audio](ru-ru/feature_audio.md)
- * [Auto Shift](ru-ru/feature_auto_shift.md)
- * [Backlight](ru-ru/feature_backlight.md)
- * [Bluetooth](ru-ru/feature_bluetooth.md)
- * [Bootmagic](ru-ru/feature_bootmagic.md)
- * [Combos](ru-ru/feature_combo.md)
- * [Command](ru-ru/feature_command.md)
- * [Debounce API](ru-ru/feature_debounce_type.md)
- * [DIP Switch](ru-ru/feature_dip_switch.md)
- * [Dynamic Macros](ru-ru/feature_dynamic_macros.md)
- * [Encoders](ru-ru/feature_encoders.md)
- * [Grave Escape](ru-ru/feature_grave_esc.md)
- * [Haptic Feedback](ru-ru/feature_haptic_feedback.md)
- * [HD44780 LCD Controller](ru-ru/feature_hd44780.md)
- * [Key Lock](ru-ru/feature_key_lock.md)
- * [Layouts](ru-ru/feature_layouts.md)
- * [Leader Key](ru-ru/feature_leader_key.md)
- * [LED Matrix](ru-ru/feature_led_matrix.md)
- * [Macros](ru-ru/feature_macros.md)
- * [Mouse Keys](ru-ru/feature_mouse_keys.md)
- * [OLED Driver](ru-ru/feature_oled_driver.md)
- * [One Shot Keys](ru-ru/one_shot_keys.md)
- * [Pointing Device](ru-ru/feature_pointing_device.md)
- * [PS/2 Mouse](ru-ru/feature_ps2_mouse.md)
- * [RGB Lighting](ru-ru/feature_rgblight.md)
- * [RGB Matrix](ru-ru/feature_rgb_matrix.md)
- * [Space Cadet](ru-ru/feature_space_cadet.md)
- * [Split Keyboard](ru-ru/feature_split_keyboard.md)
- * [Stenography](ru-ru/feature_stenography.md)
- * [Swap Hands](ru-ru/feature_swap_hands.md)
- * [Tap Dance](ru-ru/feature_tap_dance.md)
- * [Terminal](ru-ru/feature_terminal.md)
- * [Thermal Printer](ru-ru/feature_thermal_printer.md)
- * [Unicode](ru-ru/feature_unicode.md)
- * [Userspace](ru-ru/feature_userspace.md)
- * [Velocikey](ru-ru/feature_velocikey.md)
-
-* For Makers and Modders
- * [Hand Wiring Guide](ru-ru/hand_wire.md)
- * [ISP Flashing Guide](ru-ru/isp_flashing_guide.md)
- * [ARM Debugging Guide](ru-ru/arm_debugging.md)
- * [I2C Driver](ru-ru/i2c_driver.md)
- * [SPI Driver](ru-ru/spi_driver.md)
- * [WS2812 Driver](ru-ru/ws2812_driver.md)
- * [GPIO Controls](ru-ru/internals_gpio_control.md)
- * [Proton C Conversion](ru-ru/proton_c_conversion.md)
-
-* For a Deeper Understanding
- * [How Keyboards Work](ru-ru/how_keyboards_work.md)
- * [Understanding QMK](ru-ru/understanding_qmk.md)
-
-* Other Topics
- * [Using Eclipse with QMK](ru-ru/other_eclipse.md)
- * [Using VSCode with QMK](ru-ru/other_vscode.md)
- * [Support](ru-ru/getting_started_getting_help.md)
- * [Translating the QMK Docs](ru-ru/translating.md)
-
-* QMK Internals (In Progress)
- * [Defines](ru-ru/internals_defines.md)
- * [Input Callback Reg](ru-ru/internals_input_callback_reg.md)
- * [Midi Device](ru-ru/internals_midi_device.md)
- * [Midi Device Setup Process](ru-ru/internals_midi_device_setup_process.md)
- * [Midi Util](ru-ru/internals_midi_util.md)
- * [Send Functions](ru-ru/internals_send_functions.md)
- * [Sysex Tools](ru-ru/internals_sysex_tools.md)
diff --git a/docs/ru-ru/getting_started_build_tools.md b/docs/ru-ru/getting_started_build_tools.md
deleted file mode 100644
index 322f9a9e59..0000000000
--- a/docs/ru-ru/getting_started_build_tools.md
+++ /dev/null
@@ -1,153 +0,0 @@
-# Установка инструментов для сборки
-
-Данная страница описывает процесс установки окружения для сборки QMK. Эти инструкции относятся к процессорам AVR (таким как atmega32u4).
-
-
-
-**Примечание:** Если вы здесь впервые, ознакомьтесь с [Руководством для полных новичков](ru-ru/newbs.md).
-
-Прежде, чем продолжить, убедитесь, что у вас обновлены подмодули (сторонние библиотеки), выполнив `make git-submodule`.
-
-## Linux
-
-Чтобы всегда быть уверенными, что у вас установлены последние версии ПО, можно просто выполнить команду `sudo util/qmk_install.sh`. Она должна установить все необходимые зависимости. **Это выполнит `apt-get upgrade`.**
-
-Вы также можете устанавливать все вручную, но в данной документации список требований может не всегда быть актуальным.
-
-Текущие требования представлены ниже, но не все они могут быть необходимы, так как зависят от того, что вы делаете. Также стоит отметить, что в некоторых системах не все зависимости доступны в виде пакетов, или они могут называться по-другому.
-
-```
-build-essential
-gcc
-unzip
-wget
-zip
-gcc-avr
-binutils-avr
-avr-libc
-dfu-programmer
-dfu-util
-gcc-arm-none-eabi
-binutils-arm-none-eabi
-libnewlib-arm-none-eabi
-git
-```
-
-Установите все зависимости при помощи вашего любимого менеджера пакетов.
-
-Пример для Debian / Ubuntu:
-
- sudo apt-get update
- sudo apt-get install gcc unzip wget zip gcc-avr binutils-avr avr-libc dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi
-
-Пример для Fedora / Red Hat:
-
- 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
-
-Пример для Arch / Manjaro:
-
- 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
-
-## Nix
-
-Если вы используете [NixOS](https://nixos.org/), или у вас установлена Nix в Linux или macOS, выполните `nix-shell` из корня репозитория, чтобы настроить окружение для сборки.
-
-По умолчанию, это скачает компиляторы для AVR и ARM. Если вам не нужны они оба, отключите `avr` или `arm` с помощью аргумента, например:
-
- nix-shell --arg arm false
-
-## macOS
-
-Если вы пользуетесь [Homebrew](https://brew.sh/), вы можете использовать следующие команды:
-
- brew tap osx-cross/avr
- brew tap PX4/homebrew-px4
- brew update
- brew install avr-gcc@8
- brew link --force avr-gcc@8
- brew install dfu-programmer
- brew install dfu-util
- brew install gcc-arm-none-eabi
- brew install avrdude
-
-Данный метод является рекомендуемым. Если у вас нет Homebrew, [установите его!](https://brew.sh/) Он очень сильно пригодится тем, кто работает с командной строкой. Стоит отметить, что часть с `make` и `make install` во время установки `avr-gcc@8` из Homebrew может занимать более 20 минут и сильно нагружать CPU.
-
-## Windows с MSYS2 (рекомендуется)
-
-Наилучшим окружение для Windows Vista и всех последующих версий (тестировалось с 7 и 10) является [MSYS2](https://www.msys2.org).
-
-* Для установки MSYS2, скачайте его и следуйте дальнейшим указаниям отсюда: https://www.msys2.org
-* Откройте ``MSYS2 MingGW 64-bit`` ярлык
-* Перейдите в свой репозиторий QMK. Например, если он находится в корне вашего диска C:
- * `$ cd /c/qmk_firmware`
-* Запустите `util/qmk_install.sh` и следуйте подсказкам
-
-## Windows 10 (устарело)
-
-Это устаревшие инструкции для Windows 10. Мы рекомендуем использовать [MSYS2, как сказано выше](#windows-с-msys2-рекомендуется).
-
-### Обновление для дизайнеров (Creators Update)
-
-Если у вас Windows 10 с Обновлением для дизайнеров или новее, вы можете собрать прошивку и прошить ей напрямую. До Обновления для дизайнеров было возможно только собрать прошивку. Если у вас его еще нет, или вы не уверены, следуйте [этим инструкциям](https://support.microsoft.com/en-us/instantanswers/d4efb316-79f0-1aa1-9ef3-dcada78f3fa0/get-the-windows-10-creators-update).
-
-### Подсистема Windows для Linux (Windows Subsystem for Linux, WSL)
-
-В дополнение к Обновлению для дизайнеров вам необходима подсистема Windows для Linux, поэтому установите ее, следуя [иснтрукциям здесь](https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/). Если у вас уже есть подсистема Windows для Linux из Юбилейного обновления (Anniversary update), рекомендуется ее [обновить](https://betanews.com/2017/04/14/upgrade-windows-subsystem-for-linux/) до 16.04LTS, потому что некоторые клавиатуры не компилируются с набором инструментов из 14.04LTS. Стоит отметить, что вы четко должны понимать, что вы делаете, если выбрали метод `sudo do-release-upgrade`.
-
-### Git
-
-Если вы уже клонировали репозиторий в файловую систему Windows, вы можете пропустить данную секцию.
-
-Вам нужно клонировать репозиторий в файловую систему Windows при помощи обычного Git для Windows, а **не** WSL Git. Так что, если вы ещё не установили Git, [скачайте](https://git-scm.com/download/win) и установите его. Затем [настройте его](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup). Важно указать свой адрес электронной почты и имя пользователя, особенно если вы планируете вносить свой вклад в проект.
-
-Как только Git будет установлен, откройте командную строку Git Bash и поменяйте директорию на ту, в которую хотите клонировать QMK; обратите внимание, что вы должны использовать косую черту, и что доступ к вашему диску C осуществляется примерно так: `/c/path/to/where/you/want/to/go`. Затем выполните `git clone --recurse-submodules https://github.com/qmk/qmk_firmware`, это создаст новую папку `qmk_firmware` в текущей директории.
-
-### Установка инструментов (Toolchain)
-
-Установка инструментов (Toolchain) осуществляется через подсистему Windows для Linux, и процесс полностью автоматизирован. Если вы хотите выполнить установку вручную, то не существует никакой другой инструкции помимо самого скрипта. Однако, вы всегда можете открыть ишью и запросить дополнительную информацию.
-
-1. Откройте "Bash On Ubuntu On Windows" в меню Пуск.
-2. Перейдите в папку, в которую клонирована `qmk_firmware`. Обратите внимание, что пути начинаются с `/mnt/` в WSL, так что вы должны написать, например, `cd /mnt/c/path/to/qmk_firmware`.
-3. Запустите `util/wsl_install.sh` и следуйте инструкциям на экране.
-4. Закройте окно командной строки Bash, и откройте его снова.
-5. Все готово, чтобы скомпилировать прошивку и прошить ей!
-
-### Несколько важных вещей, которые надо запомнить
-
-* Вы можете запустить `util/wsl_install.sh` еще раз, чтобы установить все последние обновления.
-* Ваш репозиторий QMK должен находиться в файловой системе Windows, поскольку WSL не может запускать выполняемые файлы извне.
-* WSL Git **не** совместим с Windows Git, поэтому используйте Windows Git Bash или Windows Git GUI для всех операций с Git.
-* Вы можете изменять файлы как внутри WSL, так и просто через Windows. Но обратите внимание, что если вы изменяете makefiles или сценарии командной строки, вы должны убедиться, что используете текстовый редактор, который сохраняет файлы с переводом строки в стиле Unix (Unix line endings). В противном случае компиляция может не работать.
-
-## Docker
-
-Если это немного сложновато для вас, Docker может стать готовым решением, которое вы ищите. После установки [Docker CE](https://docs.docker.com/install/#supported-platforms) выполните следующую команду из директории `qmk_firmware`, чтобы собрать клавиатуру/раскладку:
-
-```bash
-util/docker_build.sh keyboard:keymap
-# Например: util/docker_build.sh ergodox_ez:steno
-```
-
-Это скомпилирует указанную клавиатуру/раскладку и создаст для вас `.hex` или `.bin` файл с результатом, готовым к процессу прошивки, в директории QMK. Если опустить `:keymap`, будет использована раскладка `default`. Заметьте, что формат параметров такой же, как и в случае сборки командой `make`.
-
-Вы также можете запустить скрипт без параметров. Тогда он попросит вас ввести поочередно параметры сборки. Возможно, вам это покажется более удобным:
-
-```bash
-util/docker_build.sh
-# Читает параметры из пользовательского ввода (оставьте пустым для значений по умолчанию)
-```
-
-Также имеется поддержка сборки _и_ прошивки клавиатуры прямо из Docker. Для этого укажите еще один параметр `target`:
-
-```bash
-util/docker_build.sh keyboard:keymap:target
-# Например: util/docker_build.sh planck/rev6:default:dfu-util
-```
-
-Если вы используете Linux, это должно работать прямо из коробки. На Windows и macOS это требует запуска [Docker Machine](http://gw.tnode.com/docker/docker-machine-with-usb-support-on-windows-macos/). Ее довольно утомительно настраивать, поэтому мы не рекомендуем это; используйте вместо этого [QMK Toolbox](https://github.com/qmk/qmk_toolbox).
-
-!> Docker для Windows требует включения [Hyper-V](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v). Это означает, что он не работает на версиях Windows без Hyper-V, например, на Windows 7, Windows 8 и **Windows 10 Home**.
-
-## Vagrant
-
-Если у вас возникли проблемы при сборке прошивки, вы можете попробовать установить инструмент под названием Vagrant. Он сконфигурирует виртуальный компьютер с такими параметрами, которые подходят для сборки прошивки. У OLKB НЕТ файлов такого виртуально компьютера. Подробности о том, как настроить Vagrant, можно найти в [Руководстве по Vagrant](ru-ru/getting_started_vagrant.md).
diff --git a/docs/ru-ru/getting_started_getting_help.md b/docs/ru-ru/getting_started_getting_help.md
deleted file mode 100644
index 75be44310e..0000000000
--- a/docs/ru-ru/getting_started_getting_help.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Получение помощи
-
-Существует много ресурсов для получения помощи по работе с QMK.
-
-## Чат в реальном времени
-
-Вы можете найти разработчиков и пользователей QMK на нашем главном [сервере Discord](https://discord.gg/Uq7gcHh). На сервере есть специальные каналы для разговоров о прошивке, Toolbox, оборудовании и конфигураторе.
-
-## OLKB Сабреддит
-
-Официальный форум QMK [/r/olkb](https://reddit.com/r/olkb) на [reddit.com](https://reddit.com).
-
-## GitHub ишью
-
-Вы можете открыть [ишью на GitHub](https://github.com/qmk/qmk_firmware/issues). Это особенно удобно, когда ваша проблема потребует длительного обсуждения или отладки.
diff --git a/docs/ru-ru/getting_started_github.md b/docs/ru-ru/getting_started_github.md
deleted file mode 100644
index 120f3c24ec..0000000000
--- a/docs/ru-ru/getting_started_github.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Как использовать GitHub с QMK
-
-GitHub может показаться несколько сложным для тех, кто никогда с ним не работал. В данном руководстве будет разобран каждый шаг создания форка, клонирования и отправки пулреквеста в QMK.
-
-?> В этом руководстве предполагается, что вы в какой-то степени знакомы с работой в командной строке, и в вашей системе установлен git.
-
-Откройте [страницу QMK на GitHub] (https://github.com/qmk/qmk_firmware), и в правом верхнем углу вы увидите кнопку с надписью "Fork":
-
-![Fork on GitHub](https://i.imgur.com/8Toomz4.jpg)
-
-Если вы состоите в какой-либо организации, вам нужно выбрать учетную запись, к которой будет привязан форк. В большинстве случаев это будет личной аккаунт. Как только ваш форк будет завершен (иногда это занимает немного времени), нажмите кнопку "Clone or Download":
-![Download from GitHub](https://i.imgur.com/N1NYcSz.jpg)
-
-И обязательно выберите "HTTPS", затем выделите ссылку и скопируйте ее:
-
-![HTTPS link](https://i.imgur.com/eGO0ohO.jpg)
-
-Теперь введите `git clone --recurse-submodules ` в командную строку, а затем вставьте ссылку:
-
-```
-user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
-Cloning into 'qmk_firmware'...
-remote: Enumerating objects: 9, done.
-remote: Counting objects: 100% (9/9), done.
-remote: Compressing objects: 100% (5/5), done.
-remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
-Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
-Resolving deltas: 100% (119972/119972), done.
-...
-Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
-Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
-Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
-Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
-Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
-```
-
-Теперь у вас есть форк QMK на вашем локальном компьютере, и вы можете добавить свою раскладку, скомпилировать ее и прошить ей свою клавиатуру. Как только вы будете довольны своими изменениями, есть возможность добавить, зафиксировать их и сделать коммит в свой форк следующим образом:
-
-```
-user@computer:~$ git add .
-user@computer:~$ git commit -m "adding my keymap"
-[master cccb1608] adding my keymap
- 1 file changed, 1 insertion(+)
- create mode 100644 keyboards/planck/keymaps/mine/keymap.c
-user@computer:~$ git push
-Counting objects: 1, done.
-Delta compression using up to 4 threads.
-Compressing objects: 100% (1/1), done.
-Writing objects: 100% (1/1), 1.64 KiB | 0 bytes/s, done.
-Total 1 (delta 1), reused 0 (delta 0)
-remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
-To https://github.com/whoeveryouare/qmk_firmware.git
- + 20043e64...7da94ac5 master -> master
-```
-
-Ваши изменения теперь существуют в вашем форке на GitHub - если вернуться туда (`https://github.com//qmk_firmware`), вы сможете создать "New Pull Request" нажатием на кнопку:
-
-![New Pull Request](https://i.imgur.com/DxMHpJ8.jpg)
-
-Здесь вы сможете увидеть, какие именно изменения были внесены, - если все выглядит хорошо, вы можете завершить его, нажав "Create Pull Request":
-
-![Create Pull Request](https://i.imgur.com/Ojydlaj.jpg)
-
-После отправки мы можем расспросить вас о ваших изменениях, попросить внести корректировки и в конечном итоге принять их! Спасибо за ваш вклад в QMK :)
diff --git a/docs/ru-ru/getting_started_introduction.md b/docs/ru-ru/getting_started_introduction.md
deleted file mode 100644
index ccc4418068..0000000000
--- a/docs/ru-ru/getting_started_introduction.md
+++ /dev/null
@@ -1,58 +0,0 @@
-# Введение
-
-Эта страница пытается объяснить основную информацию, которую вы должны знать, чтобы работать с проектом QMK. Предполагается, что вы знакомы с навигацией в оболочке Unix, но не предполагается, что вы знакомы с C или с компиляцией с использованием make.
-
-## Базовая структура QMK
-
-QMK - это форк [Джуна Вако (Jun Wako)](https://github.com/tmk) проекта [tmk_keyboard](https://github.com/tmk/tmk_keyboard). Оригинальный код TMK с изменениями можно найти в папке `tmk_core`. Дополнения QMK к проекту можно найти в папке `quantum`. Проекты клавиатур можно найти в папках `handwired` и `keyboard`.
-
-### Структура пространства пользователя
-
-Внутри папки `users` находится каталог для каждого пользователя. Это место для пользователей, куда они могут поместить код, чтобы использовать его с разными клавиатурами. Для получения дополнительной информации обратитесь к документации по [функциям пользовательского пространства](ru-ru/feature_userspace.md).
-
-### Структура проекта клавиатуры
-
-Внутри папки `keyboards` есть подпапки `handwired` и есть подкаталоги поставщиков и производителей, для примера, `clueboard` - это каталог для каждого проекта клавиатуры, например, `qmk_firmware/keyboards/clueboard/2x1800`. В нем вы найдете следующую структуру:
-* `keymaps/`: Различные раскладки клавиш, которые можно собрать.
-* `rules.mk`: Файл, который устанавливает параметры по умолчанию для команды "make". Не редактируйте этот файл напрямую, вместо этого используйте `rules.mk`, относящийся к конкретной раскладке.
-* `config.h`: Файл, который устанавливает параметры времени компиляции по умолчанию. Не редактируйте этот файл напрямую, вместо этого используйте `config.h`, относящийся к конкретной раскладке.
-* `info.json`: Файл настройки раскладки для QMK Configurator. Посмотрите [Поддержку конфигуратора](ru-ru/reference_configurator_support.md) для дополнительной информации.
-* `readme.md`: Краткий обзор клавиатуры.
-* `.h`: В этом файле определяется раскладка клавиатуры по матрице переключателей клавиатуры.
-* `.c`: В этом файле вы можете найти пользовательский код для клавиатуры.
-
-Для получения дополнительной информации о структуре проекта обратитесь к [Руководству QMK по клавиатуре](ru-ru/hardware_keyboard_guidelines.md).
-
-### Структура раскладки клавиатуры
-
-В каждой папке раскладки клавиатуры могут быть найдены следующие файлы. Обязательным является только файл `keymap.c`, и если остальные файлы не найдены, то будут выбраны параметры по умолчанию.
-
-* `config.h`: настройки вашей раскладки клавиатуры.
-* `keymap.c`: весь код вашей раскладки клавиатуры (обязателен).
-* `rules.mk`: активированные функции QMK.
-* `readme.md`: описание вашей раскладки клавиш, как ее могут использовать другие, и объяснения функций. Пожалуйста, загрузите изображения на сервис, такой как imgur.
-
-# Файл `config.h`
-
-Существует 3 возможных местоположения `config.h`:
-
-* клавиатура (`/keyboards//config.h`)
-* пространство пользователя (`/users//config.h`)
-* раскладка клавиш (`/keyboards//keymaps//config.h`)
-
-Система сборки автоматически загружает файлы конфигурации в указанном выше порядке. Если вы хотите переопределить любую настройку, заданную предыдущим `config.h`, вам сначала нужно будет включить некоторый шаблонный код для настроек, которые вы хотите изменить.
-
-```
-#pragma once
-```
-
-Затем, чтобы переопределить настройку из предыдущего файла `config.h`, вы должны сделать `#undef` и `#define` для неё снова.
-
-Код и настройка шаблона вместе выглядят так:
-```
-#pragma once
-
-// Переопределения производятся здесь!
-#undef MY_SETTING
-#define MY_SETTING 4
-```
diff --git a/docs/ru-ru/newbs.md b/docs/ru-ru/newbs.md
deleted file mode 100644
index 0e7bd6499c..0000000000
--- a/docs/ru-ru/newbs.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Руководство по QMK для полных новичков
-
-QMK ― это мощная прошивка с открытым исходным кодом для вашей механической клавиатуры. Вы можете использовать QMK для легкой и мощной персонализации своей клавиатуры. Люди с разным уровнем умений, от совсем новичков до крутых программистов, успешно применяли QMK, чтобы персонализировать свои клавиатуры. Данное руководство поможет вам сделать то же самое, независимо от уровня вашего мастерства.
-
-Не уверены, поддерживает ли ваша клавиатура QMK? Если это механическая клавиатура, которую вы собрали сами, шансы достаточно велики. Мы поддерживаем [большое число любительских клавиатур](https://qmk.fm/keyboards/), поэтому, даже если ваша текущая клавиатура не совместима с QMK, у вас не должно возникнуть проблем с нахождением подходящей для ваших нужд.
-
-## Обзор
-
-В данном руководстве 7 основных секций:
-
-* [Первое знакомство](ru-ru/newbs_getting_started.md)
-* [Собираем вашу первую прошивку с помощью командной строки](ru-ru/newbs_building_firmware.md)
-* [Собираем вашу первую прошивку с помощью онлайн GUI](ru-ru/newbs_building_firmware_configurator.md)
-* [Прошиваем файл прошивки](ru-ru/newbs_flashing.md)
-* [Тестируем и отлаживаем](ru-ru/newbs_testing_debugging.md)
-* [Лучшие практики по Git](ru-ru/newbs_best_practices.md)
-* [Узнайте больше на этих ресурсах](ru-ru/newbs_learn_more_resources.md)
-
-Данное руководство сосредоточено на помощи тем, кто никогда раньше не компилировал ПО. Приятие решений и рекомендации делаются с учетом именно этого. Существует много альтернативных методов для описанных процедур, и мы поддерживаем большинство из них. Если у вас есть сомнения о том, как выполнить задачу, вы можете [попросить у нас совета](ru-ru/getting_started_getting_help.md).
-
-## Дополнительные ресурсы
-
-* [Блог Томаса Баарта (Thomas Baart) об основах QMK](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) – Созданный пользователем блог, охватывающий основы использования QMK Firmware с точки зрения нового пользователя.
diff --git a/docs/ru-ru/newbs_getting_started.md b/docs/ru-ru/newbs_getting_started.md
deleted file mode 100644
index a301e9adba..0000000000
--- a/docs/ru-ru/newbs_getting_started.md
+++ /dev/null
@@ -1,102 +0,0 @@
-# Введение
-
-У вашей компьютерной клавиатуры внутри есть процессор, похожий на тот, что внутри вашего компьютера. Этот процессор выполняет программное обеспечение, которое отвечает за обнаружение нажатий клавиш и отсылку сигналов состояния клавиатуры, когда клавиши нажимаются и отпускаются. Роль такого ПО выполняет QMK, детектируя нажатия клавиш и отсылая эту информацию главному компьютеру. Сбор собственной раскладки эквивалентен сборке выполняемой программы для вашей клавиатуры.
-
-QMK старается дать вам большую силу, оставляя простые вещи легкими и делай сложные — возможными. Вам не надо уметь программировать, чтобы создавать мощные прошивки — вам только надо следовать нескольким простым синтаксическим правилам.
-
-# Первое знакомство
-
-Перед тем, как вы сможете собирать раскладки, вам необходимо установить некоторое программное обеспечение и настроить ваше окружение для сборки. Это нужно сделать только один раз, вне зависимости от того, для скольких клавиатур вы планируете компилировать прошивки.
-
-Если вы предпочитаете графический пользовательский интерфейс, пожалуйста, рассмотрите возможность использования онлайн [QMK Конфигуратора](https://config.qmk.fm). Пожалуйста, обратитесь к [Собираем вашу первую прошивку с помощью онлайн GUI](ru-ru/newbs_building_firmware_configurator.md).
-
-
-## Загрузка ПО
-
-### Текстовый редактор
-
-Вам понадобится программа, умеющая редактировать и сохранять **обычные текстовые** файлы. Если вы используете Windows, вы можете делать это Блокнотом, а в Linux вы можете использовать gedit. Обе программы являются простыми, но функциональными редакторами. В macOS остерегайтесь стандартного приложения TextEdit: он не будет сохранять обычные текстовые файлы, пока вы явно не выберите _Make Plain Text_ из меню _Format_.
-
-Вы также можете скачать и установить отдельный текстовый редактор наподобие [Sublime Text](https://www.sublimetext.com/) или [VS Code](https://code.visualstudio.com/). Возможно, это наилучший вариант независимо от платформы, поскольку эти программы сделаны специально для редактирования кода.
-
-?> Не уверены, какой выбрать текстовый редактор? Лоуренс Брэдфорд (Laurence Bradford) написал [отличное введение](https://learntocodewith.me/programming/basics/text-editors/) в тему.
-
-### QMK Toolbox
-
-QMK Toolbox является дополнительной графической программой для Windows и macOS, которая позволяет вам разрабатывать и отлаживать вашу клавиатуру. Вы, вероятно, посчитаете ее бесценной для легкого процесса прошивки вашей клавиатуры и просмотра отладочных сообщений, которые она отображает.
-
-[Скачайте последний выпуск здесь.](https://github.com/qmk/qmk_toolbox/releases/latest)
-
-* Для Windows: `qmk_toolbox.exe` (переносимое приложение) или `qmk_toolbox_install.exe` (установщик)
-* Для macOS: `QMK.Toolbox.app.zip` (переносимое приложение) или `QMK.Toolbox.pkg` (установщик)
-
-## Настройте ваше окружение
-
-Мы постарались сделать установку QMK максимально легкой. Вам нужно только подготовить ваше Linux или Unix окружение, после этого позвольте QMK установить все остальное.
-
-?> Если вы никогда раньше не работали с командной строкой Linux/Unix, существует несколько базовых концептов и команд, которые необходимо выучить. Эти ресурсы дадут вам достаточно знаний, чтобы работать с QMK:
-[Обязательные к изучению команды Linux](https://www.guru99.com/must-know-linux-commands.html)
-[Несколько базовых команд Unix](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html)
-
-### Windows
-
-Вам нужно будет установить MSYS2 и Git.
-
-* Следуйте инструкциям по установки на [домашней странице MSYS2](https://www.msys2.org).
-* Закройте все открытые терминалы MSYS2 и откройте новый терминал MSYS2 MinGW 64-bit.
-* Установите Git, выполнив эту команду: `pacman -S git`.
-
-### macOS
-
-Вам нужно будет установить Homebrew. Следуйте инструкциям на [домашней странице Homebrew](https://brew.sh).
-
-После установки Homebrew продолжите чтение с _Установите QMK_. На этом шаге вам надо будет запустить скрипт, который установит остальные пакеты.
-
-### Linux
-
-Вам нужно будет установить Git. Скорее всего, он у вас уже есть, но если нет, одна из следующих команд должна установить его:
-
-* Debian / Ubuntu / Devuan: `apt-get install git`
-* Fedora / Red Hat / CentOS: `yum install git`
-* Arch: `pacman -S git`
-
-?> Docker также является вариантом для всех платформ. [Нажмите сюда для получения подробностей.](ru-ru/getting_started_build_tools.md#docker)
-
-## Установите QMK
-
-Как только вы настроили ваше Linux/Unix окружение, вы готовы к загрузке QMK. Мы сделаем это при помощи Git, "клонировав" репозиторий QMK. Откройте Терминал или окно MSYS2 MinGW и оставьте его открытым до конца данного руководства. Выполните эти команды внутри него:
-
-```shell
-git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
-cd qmk_firmware
-```
-
-?> Если вы уже знаете, [как пользоваться GitHub](ru-ru/getting_started_github.md), мы рекомендуем вам вместо этого создать и клонировать свой собственный форк. Если вы не понимаете, что это значит, просто проигнорируйте это сообщение.
-
-QMK включает в себя скрипт, который поможет вам установить все оставшееся, что вам понадобится. Вы должны запустить его, набрав эту команду:
-
- util/qmk_install.sh
-
-## Протестируйте ваше окружение для сборки
-
-Теперь, когда ваше окружение QMK для сборки настроено, вы можете собрать прошивку для вашей клавиатуры. Начните с попытки собрать раскладку для клавиатуры по умолчанию. У вас должно это получиться с помощью команды в этом формате:
-
- make :default
-
-Например, чтобы собрать прошивку для Clueboard 66%, вы введете:
-
- make clueboard/66/rev3:default
-
-Когда все закончится, вы должны увидеть большой лог, который заканчивается примерно так:
-
-```
-Linking: .build/clueboard_66_rev3_default.elf [OK]
-Creating load file for flashing: .build/clueboard_66_rev3_default.hex [OK]
-Copying clueboard_66_rev3_default.hex to qmk_firmware folder [OK]
-Checking file size of clueboard_66_rev3_default.hex [OK]
- * The firmware size is fine - 26356/28672 (2316 bytes free)
-```
-
-# Создаем вашу раскладку
-
-Теперь вы готовы создать свою персональную раскладку! Для этого перейдите к [Собираем вашу первую прошивку](ru-ru/newbs_building_firmware.md).
diff --git a/docs/squeezing_avr.md b/docs/squeezing_avr.md
new file mode 100644
index 0000000000..e4d8d7c146
--- /dev/null
+++ b/docs/squeezing_avr.md
@@ -0,0 +1,180 @@
+# Squeezing the most out of AVR
+
+AVR is severely resource-constrained, and as QMK continues to grow, it is approaching a point where support for AVR may need to be moved to legacy status as newer development is unable to fit into those constraints.
+
+However, if you need to reduce the compiled size of your firmware, there are a number of options to do so.
+
+## `rules.mk` Settings
+First and foremost is enabling link time optimization. To do so, add this to your rules.mk:
+```make
+LTO_ENABLE = yes
+```
+This will cause the final step to take longer, but should get you a smaller compiled size. This also disables Action Functions, and Action Macros, both of which are deprecated.
+This will get you the most savings, in most situations.
+
+From there, disabling extraneous systems will help -- e.g.:
+```make
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = no
+MOUSEKEY_ENABLE = no
+EXTRAKEY_ENABLE = no
+```
+This disables some of the functionality that you may not need. But note that extrakeys disables stuff like the media keys and system volume control.
+
+If that isn't enough to get your firmware down to size, then there are some additional features that you can disable:
+```make
+SPACE_CADET_ENABLE = no
+GRAVE_ESC_ENABLE = no
+MAGIC_ENABLE = no
+```
+These features are enabled by default, but may not be needed. Double check to make sure, though.
+Largest in size is "magic" -- the QMK magic keycodes -- which control things like NKRO toggling, GUI and ALT/CTRL swapping, etc. Disabling it will disable those functions.
+
+## `config.h` Settings
+
+If you've done all of that, and you don't want to disable features like RGB, Audio, OLEDs, etc, there are some additional options that you can add to your config.h that can help.
+
+Starting with Lock Key support. If you have an Cherry MX Lock switch (lucky you!), you don't want to do this. But chances are, you don't. In that case, add this to your `config.h`:
+```c
+#undef LOCKING_SUPPORT_ENABLE
+#undef LOCKING_RESYNC_ENABLE
+```
+Oneshots. If you're not using these, you can disable the feature by adding this to your `config.h`:
+```c
+#define NO_ACTION_ONESHOT
+```
+The same with tapping keys (mod tap, layer tap, etc)
+```c
+#define NO_ACTION_TAPPING
+```
+## Audio Settings
+
+If you're using the Audio feature, by default that includes the music mode feature. This tranlates matrix positions into notes. It's neat for sure, but most likely, you're not using it. You can disable it by adding this to your `config.h`:
+```c
+#define NO_MUSIC_MODE
+```
+And by adding this to your `rules.mk`
+```make
+MUSIC_ENABLE = no
+```
+
+## Layers
+
+There are also some options for layers, that can reduce the firmware size. All of these settings are for your `config.h`.
+
+You can limit the number of layers that the firmware uses -- if you're using less than 8 layers in total:
+```c
+#define LAYER_STATE_8BIT
+```
+or if you require up to 16 layers instead:
+```c
+#define LAYER_STATE_16BIT
+```
+Or if you're not using layers at all, you can outright remove the functionality altogether:
+```c
+#define NO_ACTION_LAYER
+```
+
+
+## OLED tweaks
+
+One place you can save a bunch of space here is by not using `sprintf` or `snprintf`. This function call takes up ~1.5kB of firmware space, and can be rewritten. For instance, WPM uses this a lot.
+
+You can convert this:
+```c
+ // OLD CODE
+ char wpm_str[4] = {0};
+ sprintf(wpm_str, "WPM: %03d", get_current_wpm());
+ oled_write(wpm_str, ' '), false);
+```
+into this:
+```c
+ // NEW CODE
+ oled_write_P(PSTR("WPM: "), false);
+ oled_write(get_u8_str(get_current_wpm(), ' '), false);
+```
+which outputs `WPM: 5`. Or this:
+```c
+ // NEW CODE
+ oled_write_P(PSTR("WPM: "), false);
+ oled_write(get_u8_str(get_current_wpm(), '0'), false);
+```
+which outputs `WPM: 005`.
+
+## RGB Settings
+
+If you're using RGB on your board, both RGB Light (Underglow) and RGB Matrix (per key RGB) now require defines to enable different animations -- some keyboards enable a lot of animations by default, so you can generally gain back some space by disabling specific animations if you don't use them. For RGB Light you can disable these in your keymap's `config.h`:
+```c
+#undef RGBLIGHT_ANIMATIONS
+#undef RGBLIGHT_EFFECT_BREATHING
+#undef RGBLIGHT_EFFECT_RAINBOW_MOOD
+#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#undef RGBLIGHT_EFFECT_SNAKE
+#undef RGBLIGHT_EFFECT_KNIGHT
+#undef RGBLIGHT_EFFECT_CHRISTMAS
+#undef RGBLIGHT_EFFECT_STATIC_GRADIENT
+#undef RGBLIGHT_EFFECT_RGB_TEST
+#undef RGBLIGHT_EFFECT_ALTERNATING
+#undef RGBLIGHT_EFFECT_TWINKLE
+```
+
+For RGB Matrix, these need to be explicitly enabled as well. To disable any that were enabled by the keyboard, add one or more of these to your keymap's `config.h`:
+```c
+#undef ENABLE_RGB_MATRIX_ALPHAS_MODS
+#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#undef ENABLE_RGB_MATRIX_BREATHING
+#undef ENABLE_RGB_MATRIX_BAND_SAT
+#undef ENABLE_RGB_MATRIX_BAND_VAL
+#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#undef ENABLE_RGB_MATRIX_CYCLE_ALL
+#undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#undef ENABLE_RGB_MATRIX_DUAL_BEACON
+#undef ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#undef ENABLE_RGB_MATRIX_RAINDROPS
+#undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#undef ENABLE_RGB_MATRIX_HUE_BREATHING
+#undef ENABLE_RGB_MATRIX_HUE_PENDULUM
+#undef ENABLE_RGB_MATRIX_HUE_WAVE
+#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+#undef ENABLE_RGB_MATRIX_PIXEL_RAIN
+
+#undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
+
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#undef ENABLE_RGB_MATRIX_SPLASH
+#undef ENABLE_RGB_MATRIX_MULTISPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_SPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+```
+
+# Final Thoughts
+
+If you've done all of this, and your firmware is still too large, then it's time. It's time to consider making the switch to ARM. Unfortunately, right now is the worst possible time for that, due to the silicon shortage, and supply chain issues. Getting an ARM chip is difficult, at best, and significantly overpriced, at worst.
+ -- Drashna
+
+That said, there are a number of Pro Micro replacements with ARM controllers:
+* [Proton C](https://qmk.fm/proton-c/) (out of stock)
+* [Bonsai C](https://github.com/customMK/Bonsai-C) (Open Source, DIY/PCBA)
+* [Raspberry Pi 2040](https://www.sparkfun.com/products/18288) (not currently supported, no ETA)
+
+There are other, non-Pro Micro compatible boards out there. The most popular being:
+* [WeAct Blackpill F411](https://www.aliexpress.com/item/1005001456186625.html) (~$6 USD)
diff --git a/docs/syllabus.md b/docs/syllabus.md
index ccb382c5d4..f5cdea2182 100644
--- a/docs/syllabus.md
+++ b/docs/syllabus.md
@@ -31,6 +31,7 @@ These topics start to dig into some of the features that QMK supports. You don't
* [RGB Lighting](feature_rgblight.md)
* [RGB Matrix](feature_rgb_matrix.md)
* [Tap-Hold Configuration](tap_hold.md)
+ * [Squeezing Space from AVR](squeezing_avr.md)
* **Learn More About Keymaps**
* [Keymaps](keymap.md)
* [Custom Functions and Keycodes](custom_quantum_functions.md)
diff --git a/docs/tap_hold.md b/docs/tap_hold.md
index 71bff30baa..d206c10cc5 100644
--- a/docs/tap_hold.md
+++ b/docs/tap_hold.md
@@ -6,7 +6,9 @@ These options let you modify the behavior of the Tap-Hold keys.
## Tapping Term
-The crux of all of the following features is the tapping term setting. This determines what is a tap and what is a hold. And the exact timing for this to feel natural can vary from keyboard to keyboard, from switch to switch, and from key to key.
+The crux of all of the following features is the tapping term setting. This determines what is a tap and what is a hold. The exact timing for this to feel natural can vary from keyboard to keyboard, from switch to switch, and from key to key.
+
+?> `DYNAMIC_TAPPING_TERM_ENABLE` enables three special keys that can help you quickly find a comfortable tapping term for you. See "Dynamic Tapping Term" for more details.
You can set the global time for this by adding the following setting to your `config.h`:
@@ -36,6 +38,82 @@ uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
}
```
+### Dynamic Tapping Term :id=dynamic-tapping-term
+
+`DYNAMIC_TAPPING_TERM_ENABLE` is a feature you can enable in `rules.mk` that lets you use three special keys in your keymap to configure the tapping term on the fly.
+
+| Key | Description |
+|-------------|------------------------------------------------------------------------------------------------------------------------|
+| `DT_PRNT` | "Dynamic Tapping Term Print": Types the current tapping term, in milliseconds |
+| `DT_UP` | "Dynamic Tapping Term Up": Increases the current tapping term by `DYNAMIC_TAPPING_TERM_INCREMENT`ms (5ms by default) |
+| `DT_DOWN` | "Dynamic Tapping Term Down": Decreases the current tapping term by `DYNAMIC_TAPPING_TERM_INCREMENT`ms (5ms by default) |
+
+Set the tapping term as usual with `#define TAPPING_TERM ` in `config.h` and add `DYNAMIC_TAPPING_TERM_ENABLE = yes` in `rules.mk`. Then, place the above three keys somewhere in your keymap and flash the new firmware onto your board.
+
+Now, you can try using your dual-role keys, such as layer-taps and mod-taps, and use `DT_DOWN` and `DT_UP` to adjust the tapping term immediately. If you find that you frequently trigger the modifier of your mod-tap(s) by accident for example, that's a sign that your tapping term may be too low so tap `DT_UP` a few times to increase the tapping term until that no longer happens. On the flip side, if you get superfluous characters when you actually intended to momentarily activate a layer, tap `DT_DOWN` to lower the tapping term. Do note that these keys affect the *global* tapping term, you cannot change the tapping term of a specific key on the fly.
+
+Once you're satisfied with the current tapping term value, open `config.h` and replace whatever value you first wrote for the tapping term by the output of the `DT_PRNT` key.
+
+It's important to update `TAPPING_TERM` with the new value because the adjustments made using `DT_UP` and `DT_DOWN` are not persistent.
+
+The value by which the tapping term increases or decreases when you tap `DT_UP` and `DT_DOWN` can be configured in `config.h` with `#define DYNAMIC_TAPPING_TERM_INCREMENT `. Note that the tapping term is *not* modified when holding down the tap term keys so if you need to, for example, decrease the current tapping term by 50ms, you cannot just press down and hold `DT_DOWN`; you will have to tap it 10 times in a row with the default increment of 5ms.
+
+If you need more flexibility, nothing prevents you from defining your own custom keys to dynamically change the tapping term.
+
+```c
+enum custom_dynamic_tapping_term_keys = {
+ DT_UP_50 = SAFE_RANGE,
+ DT_DOWN_50,
+ DT_UP_X2,
+ DT_DOWN_X2,
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case DT_UP_50:
+ if (record->event.pressed) {
+ g_tapping_term += 50;
+ }
+ break;
+ case DT_DOWN_50:
+ if (record->event.pressed) {
+ g_tapping_term -= 50;
+ }
+ break;
+ case DT_UP_X2:
+ if (record->event.pressed) {
+ g_tapping_term *= 2;
+ }
+ break;
+ case DT_DOWN_X2:
+ if (record->event.pressed) {
+ g_tapping_term /= 2;
+ }
+ break;
+ }
+ return true;
+};
+```
+
+In order for this feature to be effective if you use per-key tapping terms, you need to make a few changes to the syntax of the `get_tapping_term` function. All you need to do is replace every occurrence of `TAPPING_TERM` in the `get_tapping_term` function by lowercase `g_tapping_term`. If you don't do that, you will still see the value typed by `DT_PRNT` go up and down as you configure the tapping term on the fly but you won't feel those changes as they don't get applied. If you can go as low as 10ms and still easily trigger the tap function of a dual-role key, that's a sign that you forgot to make the necessary changes to your `get_tapping_term` function.
+
+For instance, here's how the example `get_tapping_term` shown earlier should look like after the transformation:
+
+```c
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SFT_T(KC_SPC):
+ return g_tapping_term + 1250;
+ case LT(1, KC_GRV):
+ return 130;
+ default:
+ return g_tapping_term;
+ }
+}
+```
+
+The reason being that `TAPPING_TERM` is a macro that expands to a constant integer and thus cannot be changed at runtime whereas `g_tapping_term` is a variable whose value can be changed at runtime. If you want, you can temporarily enable `DYNAMIC_TAPPING_TERM_ENABLE` to find a suitable tapping term value and then disable that feature and revert back to using the classic syntax for per-key tapping term settings.
+
## Tap-Or-Hold Decision Modes
The code which decides between the tap and hold actions of dual-role keys supports three different modes, in increasing order of preference for the hold action:
@@ -67,7 +145,7 @@ An example of a sequence which is affected by the “permissive hold” mode:
- `KC_L` Up
- `LT(2, KC_A)` Up
-Normally, if you do all this within the `TAPPING_TERM` (default: 200ms), this will be registered as `al` by the firmware and host system. With the `PERMISSIVE_HOLD` option enabled, the Layer Tap key is considered as a layer switch if another key is tapped, and the above sequence would be registered as `KC_RGHT` (the mapping of `L` on layer 2).
+Normally, if you do all this within the `TAPPING_TERM` (default: 200ms), this will be registered as `al` by the firmware and host system. With the `PERMISSIVE_HOLD` option enabled, the Layer Tap key is considered as a layer switch if another key is tapped, and the above sequence would be registered as `KC_RGHT` (the mapping of `L` on layer 2). We could describe this sequence as a “nested press” (the modified key's key down and key up events are “nested” between the dual-role key's key down and key up events).
However, this slightly different sequence will not be affected by the “permissive hold” mode:
@@ -76,7 +154,7 @@ However, this slightly different sequence will not be affected by the “permiss
- `LT(2, KC_A)` Up
- `KC_L` Up
-In the sequence above the dual-role key is released before the other key is released, and if that happens within the tapping term, the “permissive hold” mode will still choose the tap action for the dual-role key, and the sequence will be registered as `al` by the host.
+In the sequence above the dual-role key is released before the other key is released, and if that happens within the tapping term, the “permissive hold” mode will still choose the tap action for the dual-role key, and the sequence will be registered as `al` by the host. We could describe this as a “rolling press” (the two keys' key down and key up events behave as if you were rolling a ball across the two keys, first pressing each key down in sequence and then releasing them in the same order).
?> The `PERMISSIVE_HOLD` option also affects Mod Tap keys, but this may not be noticeable if you do not also enable the `IGNORE_MOD_TAP_INTERRUPT` option for those keys, because the default handler for Mod Tap keys also considers both the “nested press” and “rolling press” sequences like shown above as a modifier hold, not the tap action. If you do not enable `IGNORE_MOD_TAP_INTERRUPT`, the effect of `PERMISSIVE_HOLD` on Mod Tap keys would be limited to reducing the delay before the key events are made visible to the host.
@@ -247,7 +325,7 @@ To enable `retro tapping`, add the following to your `config.h`:
Holding and releasing a dual function key without pressing another key will result in nothing happening. With retro tapping enabled, releasing the key without pressing another will send the original keycode even if it is outside the tapping term.
-For instance, holding and releasing `LT(2, KC_SPACE)` without hitting another key will result in nothing happening. With this enabled, it will send `KC_SPACE` instead.
+For instance, holding and releasing `LT(2, KC_SPC)` without hitting another key will result in nothing happening. With this enabled, it will send `KC_SPC` instead.
For more granular control of this feature, you can add the following to your `config.h`:
@@ -260,7 +338,7 @@ You can then add the following function to your keymap:
```c
bool get_retro_tapping(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
- case LT(2, KC_SPACE):
+ case LT(2, KC_SPC):
return true;
default:
return false;
@@ -268,6 +346,10 @@ bool get_retro_tapping(uint16_t keycode, keyrecord_t *record) {
}
```
+### Retro Shift
+
+[Auto Shift,](feature_auto_shift.md) has its own version of `retro tapping` called `retro shift`. It is extremely similar to `retro tapping`, but holding the key past `AUTO_SHIFT_TIMEOUT` results in the value it sends being shifted. Other configurations also affect it differently; see [here](feature_auto_shift.md#retro-shift) for more information.
+
## Why do we include the key record for the per key functions?
One thing that you may notice is that we include the key record for all of the "per key" functions, and may be wondering why we do that.
diff --git a/docs/uart_driver.md b/docs/uart_driver.md
index 4d1716975f..340b648189 100644
--- a/docs/uart_driver.md
+++ b/docs/uart_driver.md
@@ -60,30 +60,56 @@ Initialize the UART driver. This function must be called only once, before any o
---
-### `void uart_putchar(uint8_t c)`
+### `void uart_write(uint8_t data)`
Transmit a single byte.
#### Arguments
- - `uint8_t c`
- The byte (character) to send, from 0 to 255.
+ - `uint8_t data`
+ The byte to write.
---
-### `uint8_t uart_getchar(void)`
+### `uint8_t uart_read(void)`
Receive a single byte.
#### Return Value
-The byte read from the receive buffer.
+The byte read from the receive buffer. This function will block if the buffer is empty (ie. no data to read).
+
+---
+
+### `void uart_transmit(const uint8_t *data, uint16_t length)`
+
+Transmit multiple bytes.
+
+#### Arguments
+
+ - `const uint8_t *data`
+ A pointer to the data to write from.
+ - `uint16_t length`
+ The number of bytes to write. Take care not to overrun the length of `data`.
+
+---
+
+### `void uart_receive(char *data, uint16_t length)`
+
+Receive multiple bytes.
+
+#### Arguments
+
+ - `uint8_t *data`
+ A pointer to the buffer to read into.
+ - `uint16_t length`
+ The number of bytes to read. Take care not to overrun the length of `data`.
---
### `bool uart_available(void)`
-Return whether the receive buffer contains data. Call this function to determine if `uart_getchar()` will return meaningful data.
+Return whether the receive buffer contains data. Call this function to determine if `uart_read()` will return data immediately.
#### Return Value
diff --git a/docs/understanding_qmk.md b/docs/understanding_qmk.md
index da622044c3..582cbf46f2 100644
--- a/docs/understanding_qmk.md
+++ b/docs/understanding_qmk.md
@@ -29,7 +29,6 @@ Within `keyboard_task()` you'll find code to handle:
* [Matrix Scanning](#matrix-scanning)
* Mouse Handling
* Serial Link(s)
-* Visualizer
* Keyboard status LEDs (Caps Lock, Num Lock, Scroll Lock)
#### Matrix Scanning
@@ -67,10 +66,10 @@ At the keyboard level we define a C macro (typically named `LAYOUT()`) which map
k30, k31, k32, k33, \
k40, k42 \
) { \
- { k00, k01, k02, k03, }, \
- { k10, k11, k12, k13, }, \
- { k20, k21, k22, KC_NO, }, \
- { k30, k31, k32, k33, }, \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, k13 }, \
+ { k20, k21, k22, KC_NO }, \
+ { k30, k31, k32, k33 }, \
{ k40, KC_NO, k42, KC_NO } \
}
```
@@ -83,14 +82,15 @@ You can also use this macro to handle unusual matrix layouts, for example the [C
At the keymap level we make use of our `LAYOUT()` macro above to map keycodes to physical locations to matrix locations. It looks like this:
-```
+```c
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT(
- KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
- KC_P7, KC_P8, KC_P9, KC_PPLS, \
- KC_P4, KC_P5, KC_P6, \
- KC_P1, KC_P2, KC_P3, KC_PENT, \
- KC_P0, KC_PDOT)
+ [0] = LAYOUT(
+ KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6,
+ KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_P0, KC_PDOT
+ )
}
```
@@ -124,7 +124,7 @@ And when our current scan completes it will look like this:
}
```
-Comparing against our keymap we can see that the pressed key is KC_NLCK. From here we dispatch to the `process_record` set of functions.
+Comparing against our keymap we can see that the pressed key is `KC_NUM`. From here we dispatch to the `process_record` set of functions.
@@ -132,33 +132,36 @@ Comparing against our keymap we can see that the pressed key is KC_NLCK. From he
The `process_record()` function itself is deceptively simple, but hidden within is a gateway to overriding functionality at various levels of QMK. The chain of events is listed below, using cluecard whenever we need to look at the keyboard/keymap level functions. Depending on options set in `rules.mk` or elsewhere, only a subset of the functions below will be included in final firmware.
-* [`void process_record(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/common/action.c#L172)
- * [`bool process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L206)
- * [Map this record to a keycode](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L226)
- * [`void velocikey_accelerate(void)`](https://github.com/qmk/qmk_firmware/blob/c1c5922aae7b60b7c7d13d3769350eed9dda17ab/quantum/velocikey.c#L27)
- * [`void preprocess_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_tap_dance.c#L119)
- * [`bool process_key_lock(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_key_lock.c#L62)
- * [`bool process_clicky(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_clicky.c#L79)
- * [`bool process_haptic(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/2cee371bf125a6ec541dd7c5a809573facc7c456/drivers/haptic/haptic.c#L216)
- * [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/card/card.c#L20)
- * [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/card/keymaps/default/keymap.c#L58)
- * [`bool process_midi(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_midi.c#L81)
- * [`bool process_audio(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_audio.c#L19)
- * [`bool process_steno(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_steno.c#L160)
- * [`bool process_music(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_music.c#L114)
- * [`bool process_key_override(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/5a1b857dea45a17698f6baa7dd1b7a7ea907fb0a/quantum/process_keycode/process_key_override.c#L397)
- * [`bool process_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_tap_dance.c#L141)
- * [`bool process_unicode_common(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_unicode_common.c#L169)
- calls one of:
- * [`bool process_unicode(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_unicode.c#L20)
- * [`bool process_unicodemap(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_unicodemap.c#L46)
- * [`bool process_ucis(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_ucis.c#L95)
- * [`bool process_leader(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_leader.c#L51)
- * [`bool process_combo(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_combo.c#L115)
- * [`bool process_printer(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_printer.c#L77)
- * [`bool process_auto_shift(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_auto_shift.c#L94)
- * [`bool process_terminal(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_terminal.c#L264)
- * [Identify and process Quantum-specific keycodes](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L291)
+* [`void action_exec(keyevent_t event)`](https://github.com/qmk/qmk_firmware/blob/88fe5c16a5cdca5e3cf13ef3cd91f5f1e4898c37/quantum/action.c#L70-L131)
+ * [`void pre_process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/ed49dbeac4c0deba1c6b511ac1ce8f4c542e1b3e/quantum/quantum.c#L176-L185)
+ * [`bool process_combo(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_combo.c#L115)
+ * [`void process_record(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/common/action.c#L172)
+ * [`bool process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L206)
+ * [Map this record to a keycode](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L226)
+ * [`void velocikey_accelerate(void)`](https://github.com/qmk/qmk_firmware/blob/c1c5922aae7b60b7c7d13d3769350eed9dda17ab/quantum/velocikey.c#L27)
+ * [`void preprocess_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_tap_dance.c#L119)
+ * [`bool process_key_lock(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_key_lock.c#L62)
+ * [`bool process_clicky(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_clicky.c#L79)
+ * [`bool process_haptic(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/2cee371bf125a6ec541dd7c5a809573facc7c456/drivers/haptic/haptic.c#L216)
+ * [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/card/card.c#L20)
+ * [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/card/keymaps/default/keymap.c#L58)
+ * [`bool process_midi(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_midi.c#L81)
+ * [`bool process_audio(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_audio.c#L19)
+ * [`bool process_steno(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_steno.c#L160)
+ * [`bool process_music(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_music.c#L114)
+ * [`bool process_key_override(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/5a1b857dea45a17698f6baa7dd1b7a7ea907fb0a/quantum/process_keycode/process_key_override.c#L397)
+ * [`bool process_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_tap_dance.c#L141)
+ * [`bool process_unicode_common(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_unicode_common.c#L169)
+ calls one of:
+ * [`bool process_unicode(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_unicode.c#L20)
+ * [`bool process_unicodemap(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_unicodemap.c#L46)
+ * [`bool process_ucis(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_ucis.c#L95)
+ * [`bool process_leader(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_leader.c#L51)
+ * [`bool process_printer(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_printer.c#L77)
+ * [`bool process_auto_shift(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_auto_shift.c#L94)
+ * `bool process_dynamic_tapping_term(uint16_t keycode, keyrecord_t *record)`
+ * [`bool process_terminal(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_terminal.c#L264)
+ * [Identify and process Quantum-specific keycodes](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L291)
At any step during this chain of events a function (such as `process_record_kb()`) can `return false` to halt all further processing.
@@ -180,10 +183,6 @@ FIXME: This needs to be written
FIXME: This needs to be written
-#### Visualizer
-
-FIXME: This needs to be written
-
#### Keyboard state LEDs (Caps Lock, Num Lock, Scroll Lock)
FIXME: This needs to be written
diff --git a/docs/unit_testing.md b/docs/unit_testing.md
index a0eef51cb6..47a1055796 100644
--- a/docs/unit_testing.md
+++ b/docs/unit_testing.md
@@ -20,12 +20,12 @@ One thing to remember, is that you have to append `extern "C"` around all of you
## Adding Tests for New or Existing Features
-If you want to unit test some feature, then take a look at the existing serial_link tests, in the `quantum/serial_link/tests folder`, and follow the steps below to create a similar structure.
+If you want to unit test a feature, take a look at some of the existing tests, for example those in the `quantum/sequencer/tests` folder. Then follow the steps below to create a similar structure.
1. If it doesn't already exist, add a test subfolder to the folder containing the feature.
2. Create a `testlist.mk` and a `rules.mk` file in that folder.
3. Include those files from the root folder `testlist.mk`and `build_test.mk` respectively.
-4. Add a new name for your testgroup to the `testlist.mk` file. Each group defined there will be a separate executable. And that's how you can support mocking out different parts. Note that it's worth adding some common prefix, just like it's done for the serial_link tests. The reason for that is that the make command allows substring filtering, so this way you can easily run a subset of the tests.
+4. Add a new name for your testgroup to the `testlist.mk` file. Each group defined there will be a separate executable. And that's how you can support mocking out different parts. Note that it's worth adding some common prefix, just like it's done for the existing tests. The reason for that is that the make command allows substring filtering, so this way you can easily run a subset of the tests.
5. Define the source files and required options in the `rules.mk` file.
* `_SRC` for source files
* `_DEFS` for additional defines
@@ -44,7 +44,7 @@ If there are problems with the tests, you can find the executable in the `./buil
To forward any [debug messages](unit_testing.md#debug-api) to `stderr`, the tests can run with `DEBUG=1`. For example
-```console
+```
make test:all DEBUG=1
```
diff --git a/docs/ws2812_driver.md b/docs/ws2812_driver.md
index 101798f211..8acac0b3aa 100644
--- a/docs/ws2812_driver.md
+++ b/docs/ws2812_driver.md
@@ -49,6 +49,19 @@ WS2812_DRIVER = bitbang
!> This driver is not hardware accelerated and may not be performant on heavily loaded systems.
+#### Adjusting bit timings
+
+The WS2812 LED communication topology depends on a serialized timed window. Different versions of the addressable LEDs have differing requirements for the timing parameters, for instance, of the SK6812.
+You can tune these parameters through the definition of the following macros:
+
+| Macro |Default | AVR | ARM |
+|---------------------|--------------------------------------------|--------------------|--------------------|
+|`WS2812_TIMING` |`1250` | :heavy_check_mark: | :heavy_check_mark: |
+|`WS2812_T0H` |`350` | :heavy_check_mark: | :heavy_check_mark: |
+|`WS2812_T0L` |`WS2812_TIMING - WS2812_T0H` | | :heavy_check_mark: |
+|`WS2812_T1H` |`900` | :heavy_check_mark: | :heavy_check_mark: |
+|`WS2812_T1L` |`WS2812_TIMING - WS2812_T1H` | | :heavy_check_mark: |
+
### I2C
Targeting boards where WS2812 support is offloaded to a 2nd MCU. Currently the driver is limited to AVR given the known consumers are ps2avrGB/BMC. To configure it, add this to your rules.mk:
diff --git a/docs/zh-cn/README.md b/docs/zh-cn/README.md
index b42818d582..93dfbf1eef 100644
--- a/docs/zh-cn/README.md
+++ b/docs/zh-cn/README.md
@@ -1,31 +1,42 @@
-# QMK机械键盘固件
+# Quantum Mechanical Keyboard固件
-[![当前版本](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
-[![异议](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
-[![文档状态](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
-[![GitHub贡献者](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
-[![GitHub分支](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
+
## 什么是 QMK 固件?
-QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开源软件,包括 QMK 固件, QMK 工具箱, qmk.fm网站, 和这些文档。QMK 固件是一个基于[tmk\_keyboard](https://github.com/tmk/tmk_keyboard)的键盘固件,它在爱特梅尔AVR微控制器实现一些有用的功能,确切地说, 是在 [OLKB product line](https://olkb.com), 在 [ErgoDox EZ](https://www.ergodox-ez.com) 键盘, 和 [Clueboard product line](https://clueboard.co/). 上。它被移植到使用ChibiOS的ARM芯片上. 它可以在飞线键盘或定制PCB键盘中发挥功能.
+QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的用于开发计算机输入设备的开源软件。社区专注像键盘,鼠标,MIDI设备的各种电子输入设备。社区内的核心小组成员维护[QMK固件](https://github.com/qmk/qmk_firmware),[QMK配置器](https://config.qmk.fm)(QMK Configurator),[QMK工具箱](https://github.com/qmk/qmk_toolbox)(QMK Toolbox),[qmk.fm](https://qmk.fm),并与各位社区成员维护这份文档。
-## 如何得到它
+## 如何入门
-如果你打算贡献布局, 键盘, 或者其他QMK特性, 一下是最简单的方法:[从GitHub获得repo分支](https://github.com/qmk/qmk_firmware#fork-destination-box), 并克隆你的repo到本地进行编辑,推送,然后从你的分支打开 [Pull Request](https://github.com/qmk/qmk_firmware/pulls).
+
-此外, 你也可以直接下载 ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), 或者从git克隆 (`git@github.com:qmk/qmk_firmware.git`), 或 https (`https://github.com/qmk/qmk_firmware.git`).
+?> **基础方式** [QMK配置器](zh-cn/newbs_building_firmware_configurator.md)
+用户友好的图形界面工具,无需具备编程知识基础。
-## 如何编译
+?> **进阶方式** [基于源代码](zh-cn/newbs.md)
+功能更强大,但门槛较高。
-在你能编译之前, 你需要[部署环境](zh-cn/getting_started_build_tools.md) 用于 AVR or/and ARM 开发。完成后, 你可以使用 `make` 命令来编译一个键盘和布局使用以下命令:
+
- make planck/rev4:default
+## 个性化定制
-这将建立 `planck`的`rev4` 修订版本并使用 `default`布局。并非所有键盘都有修订版本 (也叫做子项目或文件夹),在此情况下,修订版本可以省略,如下:
+QMK提供了很多功能,对应着很多可供浏览的配套文档。大部分功能都是通过修改[键映射](zh-cn/keymap.md)及[键码](zh-cn/keycodes.md)实现的。
- make preonic:default
+## 需要帮助?
-## 如何定制
+请查阅[寻求帮助页面](zh-cn/support.md)以了解如何获取QMK使用方法的帮助。
-QMK 有许多 [特性](zh-cn/features.md)来探索,也有很多 [参考文档](https://docs.qmk.fm) 供您发掘。你可以通过修改 [布局](zh-cn/keymap.md)和[键码](zh-cn/keycodes.md)来利用许多特性。
+## 回馈社区
+
+有多种回馈社区的方法,最简单的方法是开始使用QMK并向你的朋友们推荐它。
+
+* 可以在我们的论坛及聊天室进行互助:
+ * [/r/olkb](https://www.reddit.com/r/olkb/)
+ * [Discord服务器](https://discord.gg/Uq7gcHh)
+* 点击页面下方的“Edit This Page”,可以对文档提供贡献。
+* [将这份文档翻译为你的语言](zh-cn/translating.md)
+* [上报bug](https://github.com/qmk/qmk_firmware/issues/new/choose)
+* [发起Pull Request](zh-cn/contributing.md)
diff --git a/docs/zh-cn/_summary.md b/docs/zh-cn/_summary.md
index cedcfbd525..8a710a9ec1 100644
--- a/docs/zh-cn/_summary.md
+++ b/docs/zh-cn/_summary.md
@@ -1,133 +1,193 @@
-* [完全菜鸟指南](zh-cn/newbs.md)
+
+* 新手教程
+ * [介绍](zh-cn/newbs.md)
* [入门](zh-cn/newbs_getting_started.md)
- * [构建你的第一个固件](zh-cn/newbs_building_firmware.md)
- * [刷新固件](zh-cn/newbs_flashing.md)
- * [测试和调试](zh-cn/newbs_testing_debugging.md)
- * [Git最佳实践](zh-cn/newbs_git_best_practices.md)
- * [使用你分叉(fork)的主分支(master)](zh-cn/newbs_git_using_your_master_branch.md)
- * [解决合并冲突](zh-cn/newbs_git_resolving_merge_conflicts.md)
- * [重新同步一个分支](zh-cn/newbs_git_resynchronize_a_branch.md)
- * [学习资源](zh-cn/newbs_learn_more_resources.md)
+ * [构建第一个固件](zh-cn/newbs_building_firmware.md)
+ * [刷写固件](zh-cn/newbs_flashing.md)
+ * [寻求帮助](zh-cn/support.md)
+ * [其它资源](zh-cn/newbs_learn_more_resources.md)
+ * [QMK大纲](zh-cn/syllabus.md)
-* [QMK基础](zh-cn/README.md)
- * [QMK简介](zh-cn/getting_started_introduction.md)
- * [QMK命令行工具](zh-cn/cli.md)
- * [QMK命令行工具配置](zh-cn/cli_configuration.md)
- * [向QMK贡献代码](zh-cn/contributing.md)
- * [如何使用GitHub](zh-cn/getting_started_github.md)
- * [获得帮助](zh-cn/getting_started_getting_help.md)
-
-* [非兼容性修改](zh-cn/breaking_changes.md)
- * [我的PR已经被标记为非兼容性修改](zh-cn/breaking_changes_instructions.md)
- * [2019年8月30日](zh-cn/ChangeLog/20190830.md)
-
-* [问题与解答](zh-cn/faq.md)
- * [一般问题](zh-cn/faq_general.md)
- * [构建/编译](zh-cn/faq_build.md)
- * [调试/故障排除](zh-cn/faq_debug.md)
- * [布局](zh-cn/faq_keymap.md)
- * [Zadig驱动安装](zh-cn/driver_installation_zadig.md)
-
-* 详细指南
- * [安装构建工具](zh-cn/getting_started_build_tools.md)
- * [vagrant指南](zh-cn/getting_started_vagrant.md)
- * [构建/编译指南](zh-cn/getting_started_make_guide.md)
- * [刷新固件](zh-cn/flashing.md)
- * [定制功能](zh-cn/custom_quantum_functions.md)
- * [布局概述](zh-cn/keymap.md)
-
-* [硬件](zh-cn/hardware.md)
- * [兼容的单片机](zh-cn/compatible_microcontrollers.md)
- * [AVR处理器](zh-cn/hardware_avr.md)
- * [驱动](zh-cn/hardware_drivers.md)
-
-* 参考
- * [键盘指南](zh-cn/hardware_keyboard_guidelines.md)
- * [配置选项](zh-cn/config_options.md)
- * [键码](zh-cn/keycodes.md)
- * [代码书写规范 - C](zh-cn/coding_conventions_c.md)
- * [代码书写规范 - Python](zh-cn/coding_conventions_python.md)
- * [文档书写规范](zh-cn/documentation_best_practices.md)
- * [文档模板](zh-cn/documentation_templates.md)
+* FAQ
+ * [常规FAQ](zh-cn/faq_general.md)
+ * [构建/编译QMK](zh-cn/faq_build.md)
+ * [QMK问题排查](zh-cn/faq_misc.md)
+ * [调试QMK](zh-cn/faq_debug.md)
+ * [键映射FAQ](zh-cn/faq_keymap.md)
+ * [充分利用AVR的存储空间](zh-cn/squeezing_avr.md)
* [术语表](zh-cn/reference_glossary.md)
- * [单元测试](zh-cn/unit_testing.md)
- * [实用函数](zh-cn/ref_functions.md)
- * [配置器支持](zh-cn/reference_configurator_support.md)
- * [info.json 格式](zh-cn/reference_info_json.md)
- * [Python 命令行开发](zh-cn/cli_development.md)
-* [特性](zh-cn/features.md)
- * [基本键码](zh-cn/keycodes_basic.md)
- * [US ANSI控制码](zh-cn/keycodes_us_ansi_shifted.md)
- * [量子键码](zh-cn/quantum_keycodes.md)
- * [高级键码](zh-cn/feature_advanced_keycodes.md)
- * [音频](zh-cn/feature_audio.md)
- * [自动shift](zh-cn/feature_auto_shift.md)
- * [背光](zh-cn/feature_backlight.md)
- * [蓝牙](zh-cn/feature_bluetooth.md)
- * [热改键](zh-cn/feature_bootmagic.md)
- * [组合](zh-cn/feature_combo)
- * [命令](zh-cn/feature_command.md)
- * [消抖 API](zh-cn/feature_debounce_type.md)
- * [拨动开关](zh-cn/feature_dip_switch.md)
- * [动态宏指令](zh-cn/feature_dynamic_macros.md)
- * [编码器](zh-cn/feature_encoders.md)
- * [重音号Esc复合键](zh-cn/feature_grave_esc.md)
- * [触摸反馈](zh-cn/feature_haptic_feedback.md)
- * [HD44780 LCD控制器](zh-cn/feature_hd44780.md)
- * [自锁键](zh-cn/feature_key_lock.md)
- * [布局](zh-cn/feature_layouts.md)
- * [前导键](zh-cn/feature_leader_key.md)
- * [LED阵列](zh-cn/feature_led_matrix.md)
- * [宏指令](zh-cn/feature_macros.md)
- * [鼠标键](zh-cn/feature_mouse_keys.md)
- * [OLED驱动](zh-cn/feature_oled_driver.md)
- * [一键功能](zh-cn/one_shot_keys.md)
- * [指针设备](zh-cn/feature_pointing_device.md)
- * [PS/2鼠标](zh-cn/feature_ps2_mouse.md)
- * [RGB灯光](zh-cn/feature_rgblight.md)
- * [RGB矩阵](zh-cn/feature_rgb_matrix.md)
- * [空格候补换挡](zh-cn/feature_space_cadet.md)
- * [分体键盘](zh-cn/feature_split_keyboard.md)
- * [速录机](zh-cn/feature_stenography.md)
- * [换手](zh-cn/feature_swap_hands.md)
- * [多击键](zh-cn/feature_tap_dance.md)
- * [终端](zh-cn/feature_terminal.md)
- * [热敏打印机](zh-cn/feature_thermal_printer.md)
- * [Unicode](zh-cn/feature_unicode.md)
- * [用户空间](zh-cn/feature_userspace.md)
- * [速度键](zh-cn/feature_velocikey.md)
+* 配置器(Configurator)
+ * [总览](zh-cn/newbs_building_firmware_configurator.md)
+ * [入门](zh-cn/configurator_step_by_step.md)
+ * [问题排查](zh-cn/configurator_troubleshooting.md)
+ * [框架](zh-cn/configurator_architecture.md)
+ * QMK API
+ * [总览](zh-cn/api_overview.md)
+ * [API文档](zh-cn/api_docs.md)
+ * [键盘支持](zh-cn/reference_configurator_support.md)
+ * [添加默认键映射](zh-cn/configurator_default_keymaps.md)
-* 制造和定制者指南
- * [手工连线指南](zh-cn/hand_wire.md)
- * [ISP刷新指南](zh-cn/isp_flashing_guide.md)
- * [ARM调试指南](zh-cn/arm_debugging.md)
- * [ADC设备](zh-cn/adc_driver.md)
- * [I2C设备](zh-cn/i2c_driver.md)
- * [SPI设备](zh-cn/spi_driver.md)
- * [WS2812设备](zh-cn/ws2812_driver.md)
- * [EEPROM设备](zh-cn/eeprom_driver.md)
- * [GPIO控制](zh-cn/internals_gpio_control.md)
- * [自定义键盘矩阵](zh-cn/custom_matrix.md)
- * [Proton C转换](zh-cn/proton_c_conversion.md)
+* CLI
+ * [总览](zh-cn/cli.md)
+ * [配置](zh-cn/cli_configuration.md)
+ * [命令](zh-cn/cli_commands.md)
+ * [Tab补全](zh-cn/cli_tab_complete.md)
-* 深入了解
- * [键盘工作原理](zh-cn/how_keyboards_work.md)
- * [深入了解QMK](zh-cn/understanding_qmk.md)
+* 使用QMK
+ * 导览
+ * [功能定制](zh-cn/custom_quantum_functions.md)
+ * [利用Zadig安装驱动](zh-cn/driver_installation_zadig.md)
+ * [极简式制作](zh-cn/easy_maker.md)
+ * [键映射总览](zh-cn/keymap.md)
+ * 开发环境
+ * [Docker指南](zh-cn/getting_started_docker.md)
+ * [Vagrant指南](zh-cn/getting_started_vagrant.md)
+ * 刷写(Flashing)
+ * [刷写](zh-cn/flashing.md)
+ * [刷写ATmega32A (ps2avrgb)](zh-cn/flashing_bootloadhid.md)
+ * IDE
+ * [在Eclipse中使用QMK](zh-cn/other_eclipse.md)
+ * [在VSCode中使用QMK](zh-cn/other_vscode.md)
+ * Git最佳实践
+ * [介绍](zh-cn/newbs_git_best_practices.md)
+ * [你自己的副本](zh-cn/newbs_git_using_your_master_branch.md)
+ * [冲突合并](zh-cn/newbs_git_resolving_merge_conflicts.md)
+ * [基于你的分支修复](zh-cn/newbs_git_resynchronize_a_branch.md)
+ * 键盘组装
+ * [飞线指南](zh-cn/hand_wire.md)
+ * [ISP刷写指南](zh-cn/isp_flashing_guide.md)
-* 其他话题
- * [使用Eclipse开发QMK](zh-cn/other_eclipse.md)
- * [使用VSCode开发QMK](zh-cn/other_vscode.md)
- * [支持](zh-cn/getting_started_getting_help.md)
- * [翻译QMK文档](zh-cn/translating.md)
+ * 键码入门
+ * [键码汇总](zh-cn/keycodes.md)
+ * [基础键码](zh-cn/keycodes_basic.md)
+ * [语言特定的键码](zh-cn/reference_keymap_extras.md)
+ * [修饰键](zh-cn/feature_advanced_keycodes.md)
+ * [原子键码](zh-cn/quantum_keycodes.md)
+ * [Magic键码](zh-cn/keycodes_magic.md)
-* QMK 内构 (正在编写)
- * [定义](zh-cn/internals_defines.md)
- * [输入回调寄存器](zh-cn/internals_input_callback_reg.md)
- * [Midi设备](zh-cn/internals_midi_device.md)
- * [Midi设备配置过程](zh-cn/internals_midi_device_setup_process.md)
- * [Midi工具库](zh-cn/internals_midi_util.md)
- * [发送函数](zh-cn/internals_send_functions.md)
- * [Sysex工具](zh-cn/internals_sysex_tools.md)
-
-
+ * 键码进阶
+ * [指令](zh-cn/feature_command.md)
+ * [动态宏](zh-cn/feature_dynamic_macros.md)
+ * [Grave Escape](zh-cn/feature_grave_esc.md)
+ * [前导键](zh-cn/feature_leader_key.md)
+ * [Mod-Tap](zh-cn/mod_tap.md)
+ * [宏](zh-cn/feature_macros.md)
+ * [鼠标键](zh-cn/feature_mouse_keys.md)
+ * [Space Cadet Shift](zh-cn/feature_space_cadet.md)
+ * [US ANSI上档键值](zh-cn/keycodes_us_ansi_shifted.md)
+
+ * 软件特性
+ * [自动Shift](zh-cn/feature_auto_shift.md)
+ * [组合键](zh-cn/feature_combo.md)
+ * [防抖API](zh-cn/feature_debounce_type.md)
+ * [按键锁定](zh-cn/feature_key_lock.md)
+ * [按键重定义](zh-cn/feature_key_overrides.md)
+ * [层](zh-cn/feature_layers.md)
+ * [粘滞键](zh-cn/one_shot_keys.md)
+ * [光标设备](zh-cn/feature_pointing_device.md)
+ * [原生HID](zh-cn/feature_rawhid.md)
+ * [Sequencer](zh-cn/feature_sequencer.md)
+ * [换手](zh-cn/feature_swap_hands.md)
+ * [一键多用](zh-cn/feature_tap_dance.md)
+ * [点按配置](zh-cn/tap_hold.md)
+ * [终端](zh-cn/feature_terminal.md)
+ * [Unicode](zh-cn/feature_unicode.md)
+ * [用户空间](zh-cn/feature_userspace.md)
+ * [WPM计算](zh-cn/feature_wpm.md)
+
+ * 硬件特性
+ * 显示
+ * [HD44780 LCD控制器](zh-cn/feature_hd44780.md)
+ * [ST7565 LCD驱动](zh-cn/feature_st7565.md)
+ * [OLED驱动](zh-cn/feature_oled_driver.md)
+ * 灯效
+ * [背光](zh-cn/feature_backlight.md)
+ * [LED矩阵](zh-cn/feature_led_matrix.md)
+ * [RGB灯光](zh-cn/feature_rgblight.md)
+ * [RGB矩阵](zh-cn/feature_rgb_matrix.md)
+ * [音频](zh-cn/feature_audio.md)
+ * [蓝牙](zh-cn/feature_bluetooth.md)
+ * [Bootmagic Lite](zh-cn/feature_bootmagic.md)
+ * [自定义矩阵](zh-cn/custom_matrix.md)
+ * [Digitizer](zh-cn/feature_digitizer.md)
+ * [拨动开关(DIP Switch)](zh-cn/feature_dip_switch.md)
+ * [编码器(旋钮)](zh-cn/feature_encoders.md)
+ * [触摸反馈](zh-cn/feature_haptic_feedback.md)
+ * [摇杆](zh-cn/feature_joystick.md)
+ * [LED指示](zh-cn/feature_led_indicators.md)
+ * [MIDI](zh-cn/feature_midi.md)
+ * [Proton C转换](zh-cn/proton_c_conversion.md)
+ * [PS/2鼠标](zh-cn/feature_ps2_mouse.md)
+ * [分体式键盘](zh-cn/feature_split_keyboard.md)
+ * [速记](zh-cn/feature_stenography.md)
+ * [热敏打印机](zh-cn/feature_thermal_printer.md)
+ * [Velocikey](zh-cn/feature_velocikey.md)
+
+* QMK开发
+ * [PR Checklist](zh-cn/pr_checklist.md)
+ * 打破兼容的改动
+ * [总览](zh-cn/breaking_changes.md)
+ * [我的PR已打上标记](zh-cn/breaking_changes_instructions.md)
+ * [近期的变更日志(Changelog)](zh-cn/ChangeLog/20210529.md "QMK v0.13.0 - 2021 May 29")
+ * [更早期的不兼容改动](zh-cn/breaking_changes_history.md)
+
+ * C语言开发
+ * [ARM调试指引](zh-cn/arm_debugging.md)
+ * [AVR处理器](zh-cn/hardware_avr.md)
+ * [C编码规范](zh-cn/coding_conventions_c.md)
+ * [兼容的微处理器](zh-cn/compatible_microcontrollers.md)
+ * [驱动](zh-cn/hardware_drivers.md)
+ * [ADC驱动](zh-cn/adc_driver.md)
+ * [Audio驱动](zh-cn/audio_driver.md)
+ * [I2C驱动](zh-cn/i2c_driver.md)
+ * [SPI驱动](zh-cn/spi_driver.md)
+ * [WS2812驱动](zh-cn/ws2812_driver.md)
+ * [EEPROM驱动](zh-cn/eeprom_driver.md)
+ * [串口驱动](zh-cn/serial_driver.md)
+ * [UART驱动](zh-cn/uart_driver.md)
+ * [操控GPIO](zh-cn/internals_gpio_control.md)
+ * [键盘开发指引](zh-cn/hardware_keyboard_guidelines.md)
+
+ * Python开发
+ * [编码规范](zh-cn/coding_conventions_python.md)
+ * [QMK CLI开发](zh-cn/cli_development.md)
+
+ * 配置器开发
+ * QMK API
+ * [开发环境](zh-cn/api_development_environment.md)
+ * [架构总览](zh-cn/api_development_overview.md)
+
+ * 硬件平台开发
+ * Arm/ChibiOS
+ * [选择MCU](zh-cn/platformdev_selecting_arm_mcu.md)
+ * [启动引导](zh-cn/platformdev_chibios_earlyinit.md)
+
+ * QMK参考信息
+ * [参与到QMK](zh-cn/contributing.md)
+ * [翻译QMK文档](zh-cn/translating.md)
+ * [配置](zh-cn/config_options.md)
+ * [数据驱动配置](zh-cn/data_driven_config.md)
+ * [Make指引](zh-cn/getting_started_make_guide.md)
+ * [编写文档的最佳实践](zh-cn/documentation_best_practices.md)
+ * [文档模板](zh-cn/documentation_templates.md)
+ * [贡献配列到社区](zh-cn/feature_layouts.md)
+ * [单元测试](zh-cn/unit_testing.md)
+ * [常用函数](zh-cn/ref_functions.md)
+ * [info.json参考资料](zh-cn/reference_info_json.md)
+
+ * 深入了解
+ * [键盘工作原理](zh-cn/how_keyboards_work.md)
+ * [键盘矩阵原理](zh-cn/how_a_matrix_works.md)
+ * [了解QMK](zh-cn/understanding_qmk.md)
+
+ * QMK内部细节 (编辑中)
+ * [定义](zh-cn/internals_defines.md)
+ * [输入回调的注册](zh-cn/internals_input_callback_reg.md)
+ * [Midi设备](zh-cn/internals_midi_device.md)
+ * [Midi设备驱动流程](zh-cn/internals_midi_device_setup_process.md)
+ * [Midi辅助功能](zh-cn/internals_midi_util.md)
+ * [发送函数](zh-cn/internals_send_functions.md)
+ * [Sysex工具](zh-cn/internals_sysex_tools.md)
+
+
diff --git a/docs/zh-cn/api_docs.md b/docs/zh-cn/api_docs.md
new file mode 100644
index 0000000000..a2df9ec20a
--- /dev/null
+++ b/docs/zh-cn/api_docs.md
@@ -0,0 +1,73 @@
+# QMK API
+
+
+
+本章节详述了QMK API的使用方法,若您是应用开发者,使用这套API可以实现[QMK](https://qmk.fm)键盘固件的编译支持。
+
+## 总览
+
+本服务提供了一套用于编译自定义键映射的异步API,通过POST方式发送JSON参数到API,定期检查执行状态,待固件编译完成后,即可下载生成的固件文件和固件的源文件(如果需要的话)。
+
+#### 荷载JSON参数示例:
+
+```json
+{
+ "keyboard": "clueboard/66/rev2",
+ "keymap": "my_awesome_keymap",
+ "layout": "LAYOUT_all",
+ "layers": [
+ ["KC_GRV","KC_1","KC_2","KC_3","KC_4","KC_5","KC_6","KC_7","KC_8","KC_9","KC_0","KC_MINS","KC_EQL","KC_GRV","KC_BSPC","KC_PGUP","KC_TAB","KC_Q","KC_W","KC_E","KC_R","KC_T","KC_Y","KC_U","KC_I","KC_O","KC_P","KC_LBRC","KC_RBRC","KC_BSLS","KC_PGDN","KC_CAPS","KC_A","KC_S","KC_D","KC_F","KC_G","KC_H","KC_J","KC_K","KC_L","KC_SCLN","KC_QUOT","KC_NUHS","KC_ENT","KC_LSFT","KC_NUBS","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_N","KC_M","KC_COMM","KC_DOT","KC_SLSH","KC_RO","KC_RSFT","KC_UP","KC_LCTL","KC_LGUI","KC_LALT","KC_MHEN","KC_SPC","KC_SPC","KC_HENK","KC_RALT","KC_RCTL","MO(1)","KC_LEFT","KC_DOWN","KC_RIGHT"],
+ ["KC_ESC","KC_F1","KC_F2","KC_F3","KC_F4","KC_F5","KC_F6","KC_F7","KC_F8","KC_F9","KC_F10","KC_F11","KC_F12","KC_TRNS","KC_DEL","BL_STEP","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","_______","KC_TRNS","KC_PSCR","KC_SLCK","KC_PAUS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","MO(2)","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_PGUP","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","MO(1)","KC_LEFT","KC_PGDN","KC_RGHT"],
+ ["KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","RESET","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","MO(2)","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","MO(1)","KC_TRNS","KC_TRNS","KC_TRNS"]
+ ]
+}
+```
+
+如上可见,荷载参数里有用于生成固件文件的所有键盘信息。每一个层定义都包含了与键盘 `LAYOUT` 宏定义一致的QMK键码列表数据,若该键盘有多个支持的 `LAYOUT` 宏定义,也可以指定使用的是哪一个。
+
+## 提交一个编译job
+
+若要将键映射配置编译成固件文件,仅需将JSON参数通过POST发送至 `/v1/compile` 节点。下面的示例中我们假设JSON荷载参数已存放在 `json_data` 文件中。
+
+```
+$ curl -H "Content-Type: application/json" -X POST -d "$(< json_data)" https://api.qmk.fm/v1/compile
+{
+ "enqueued": true,
+ "job_id": "ea1514b3-bdfc-4a7b-9b5c-08752684f7f6"
+}
+```
+
+## 检查状态
+
+键映射配置提交后,可以简单地通过 HTTP GET 请求来查询job状态:
+
+```
+$ curl https://api.qmk.fm/v1/compile/ea1514b3-bdfc-4a7b-9b5c-08752684f7f6
+{
+ "created_at": "Sat, 19 Aug 2017 21:39:12 GMT",
+ "enqueued_at": "Sat, 19 Aug 2017 21:39:12 GMT",
+ "id": "f5f9b992-73b4-479b-8236-df1deb37c163",
+ "status": "running",
+ "result": null
+}
+```
+
+这份信息告诉我们编译job已经提交到队列中且正在执行。job的状态有5种:
+
+* **failed(失败)**: 编译服务出现问题。
+* **finished(完成)**: 编译已完成,`result` 字段中保存了编译结果。
+* **queued(排队中)**: 键映射job在等待可用的编译服务器。
+* **running(执行中)**: 编译进行中,应当很快就会结束。
+* **unknown(未知)**: 出现了较严重的错误,请给我们[提交一个bug](https://github.com/qmk/qmk_compiler/issues).
+
+## 确认编译产出
+
+编译job完成后请查看 `result` 字段,该字段下保存了如下信息项的哈希表数据:
+
+* `firmware_binary_url`: 用于刷写的固件文件URL列表
+* `firmware_keymap_url`: `keymap.c` 文件URL列表
+* `firmware_source_url`: 完整的固件源代码URL列表
+* `output`: 编译job的stdout及stderr输出信息,所有错误信息都会在这里。
diff --git a/docs/zh-cn/api_overview.md b/docs/zh-cn/api_overview.md
new file mode 100644
index 0000000000..a07cfb7427
--- /dev/null
+++ b/docs/zh-cn/api_overview.md
@@ -0,0 +1,20 @@
+# QMK API
+
+
+
+QMK API提供了一套可用于Web及GUI工具可用的异步API,用于实现将任何[QMK](https://qmk.fm/)支持的键盘的键映射方案进行编译。已有的键映射模板支持所有的QMK键码并且不需要额外的C代码需求。键盘的维护团队可以提供新的模板来启用更多功能的支持。
+
+## App开发者
+
+若您是一位意愿将这套API引入您的程序中的移动端App开发者,请参阅[API使用指引](zh-cn/api_docs.md)。
+
+## 键盘维护团队
+
+若您希望强化您维护的键盘方案在QMK编译API中的支持,请参阅[键盘支持](zh-cn/reference_configurator_support.md)。
+
+## 后端开发者
+
+若您对这套API系统本身感兴趣,请参阅[开发环境](zh-cn/api_development_environment.md)搭建环境并继续深入探索[架构总览](zh-cn/api_development_overview.md)。
diff --git a/docs/zh-cn/cli.md b/docs/zh-cn/cli.md
new file mode 100644
index 0000000000..22c2db92c8
--- /dev/null
+++ b/docs/zh-cn/cli.md
@@ -0,0 +1,43 @@
+# QMK CLI :id=qmk-cli
+
+
+
+## 总览 :id=overview
+
+QMK CLI可以让构建QMK键盘的过程更轻松一些,我们已提供的一批指令可用于简化及流式化地处理一些常见工作,如获取并编译QMK固件,创建新的键映射等。
+
+### 依赖项 :id=requirements
+
+QMK依赖Python 3.6或更高版本。我们已经尽力缩减依赖项,但在[`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt)中的依赖项是需安装的包。在安装QMK CLI时这些依赖项也会自动完成安装。
+
+### 通过 Homebrew 安装(macOS 及部分 Linux) :id=install-using-homebrew
+
+若已安装[Homebrew](https://brew.sh),可以按如下方法安装QMK:
+
+```
+brew install qmk/qmk/qmk
+export QMK_HOME='~/qmk_firmware' # 可选,指定 `qmk_firmware` 的路径
+qmk setup # 拉取 `qmk/qmk_firmware` 并选择性地配置构建环境
+```
+
+### 通过 pip 安装 :id=install-using-easy_install-or-pip
+
+未在以上列出的操作系统可以手动安装QMK。首先确认已安装Python 3.6(或更高版本)及 pip,然后通过如下指令安装QMK:
+
+```
+python3 -m pip install qmk
+export QMK_HOME='~/qmk_firmware' # 可选,指定 `qmk_firmware` 的路径
+qmk setup # 拉取 `qmk/qmk_firmware` 并选择性地配置构建环境
+```
+
+### 其它操作系统的安装包 :id=packaging-for-other-operating-systems
+
+我们正在寻求可以制作维护更多操作系统下可用的 `qmk` 安装包的开发者,若您愿意为您的操作系统制作安装包,请遵循如下指引:
+
+* 当该系统下的最佳实践与本指引冲突时,请遵循系统的最佳实践方案
+ * 但请在注释中列明此处违反这份指引的原因
+* 在 virtualenv 下安装
+* 指引用户去设置 `QMK_HOME` 环境变量,使得固件源文件拉取路径不再是默认的 `~/qmk_firmware`
diff --git a/docs/zh-cn/cli_commands.md b/docs/zh-cn/cli_commands.md
new file mode 100644
index 0000000000..08d1cc7e79
--- /dev/null
+++ b/docs/zh-cn/cli_commands.md
@@ -0,0 +1,503 @@
+# QMK CLI 命令
+
+
+
+# 用户命令
+
+## `qmk compile`
+
+该命令用于在指定目录下编译固件,可用于构建导出的JSON数据,代码库中的键映射,或是当前目录下的键盘。
+
+该命令会尝试感知目录路径,当你在键盘或键映射目录下执行时,KEYBOARD及KEYMAP参数将被自动填入。
+
+**用于配置器导出的数据时**:
+
+```
+qmk compile [-c]
+```
+
+**用于键映射时**:
+
+```
+qmk compile [-c] [-e =] [-j ] -kb -km
+```
+
+**在键盘目录下时**:
+
+须在存在默认键映射的键盘目录下执行,或是在键盘的键映射子目录下,否则须指定参数 `--keymap `
+```
+qmk compile
+```
+
+**构建所有支持该键映射的键盘时**:
+
+```
+qmk compile -kb all -km
+```
+
+**示例**:
+```
+$ qmk config compile.keymap=default
+$ cd ~/qmk_firmware/keyboards/planck/rev6
+$ qmk compile
+Ψ Compiling keymap with make planck/rev6:default
+...
+```
+指定键映射参数时
+
+```
+$ cd ~/qmk_firmware/keyboards/clueboard/66/rev4
+$ qmk compile -km 66_iso
+Ψ Compiling keymap with make clueboard/66/rev4:66_iso
+...
+```
+位于键盘目录下时
+
+```
+$ cd ~/qmk_firmware/keyboards/gh60/satan/keymaps/colemak
+$ qmk compile
+Ψ Compiling keymap with make make gh60/satan:colemak
+...
+```
+
+**在配列目录下时**:
+
+必须是在 `qmk_firmware/layouts/` 下的键映射目录下。
+```
+qmk compile -kb
+```
+
+**示例**:
+```
+$ cd ~/qmk_firmware/layouts/community/60_ansi/mechmerlin-ansi
+$ qmk compile -kb dz60
+Ψ Compiling keymap with make dz60:mechmerlin-ansi
+...
+```
+
+**并行编译**:
+
+在编译时添加 `-j`/`--parallel` 开关可能有助于加快编译速度。
+```
+qmk compile -j -kb
+```
+`num_jobs` 用于指定并行的job上限,将其设置为0可以实现无限制的并行编译。
+```
+qmk compile -j 0 -kb
+```
+
+## `qmk flash` :id=qmk-flash
+
+该命令与 `qmk compile` 类似,但额外地可以指定bootloader。bootloader参数是可选的,默认会指定为 `:flash`。可通过 `-bl ` 来指定bootloader。请查阅[刷写固件](zh-cn/flashing.md)指引以深入了解可用的bootloader信息。
+
+该命令会尝试感知目录路径,当你在键盘或键映射目录下执行时,KEYBOARD及KEYMAP参数将被自动填入。
+
+**用于配置器导出的数据时**:
+
+```
+qmk flash [-bl ] [-c] [-e =] [-j ]
+```
+
+**用于键映射时**:
+
+```
+qmk flash -kb -km [-bl ] [-c] [-e =