Bladeren bron

Update a bunch of docs

skullY 8 jaren geleden
bovenliggende
commit
d8e29b53fe

File diff suppressed because it is too large
+ 5 - 12
docs/README.md


+ 2 - 1
docs/_summary.md

@@ -23,15 +23,16 @@
     * [Quantum Keycodes](quantum_keycodes.md)
   * [The Config File](config_options.md)
   * [Customizing Functionality](custom_quantum_functions.md)
+  * [Documentation Best Practices](documentation_best_practices.md)
   
 * For makers and modders
   * [Adding a keyboard to QMK](adding_a_keyboard_to_qmk.md)
   * [Porting your keyboard to QMK](porting_your_keyboard_to_qmk.md)
   * [Modding your keyboard](modding_your_keyboard.md)
+  * [Understanding QMK](understanding_qmk.md)
   * [Adding features to QMK](adding_features_to_qmk.md)
   * [ISP flashing guide](isp_flashing_guide.md)
   
 * Other topics
   * [General FAQ](faq.md)
-  * [Differences from TMK](differences_from_tmk.md)
   * [Using Eclipse with QMK](eclipse.md)

+ 13 - 4
docs/adding_features_to_qmk.md

@@ -1,7 +1,16 @@
-If you have an idea for a custom feature or extra hardware connection, we'd love to accept it into QMK! These are generally done via [pull request](https://github.com/qmk/qmk_firmware/pulls) after forking, and here are some things to keep in mind when creating one:
+# How To Add Features To QMK
 
-* **Disable by default** - memory is a pretty limited on most chips QMK supports, and it's important that current keymaps aren't broken, so please allow your feature to be turned **on**, rather than being turned off. If you think it should be on by default, or reduces the size of the code, [open an issue](https://github.com/qmk/qmk_firmware/issues) for everyone to discuss it!
+If you have an idea for a custom feature or extra hardware connection, we'd love to accept it into QMK! 
+
+Before you put a lot of work into building your new feature you should make sure you are implementing it in the best way. You can get a basic understanding of QMK by reading [Understaning QMK](understanding_qmk.html), which will take you on a tour of the QMK program flow. From here you should talk to us to get a sense of the best way to implement your idea. There are two main ways to do this:
+
+* [Chat on Gitter](https://gitter.im/qmk/qmk_firmware)
+* [Open an Issue](https://github.com/qmk/qmk_firmware/issues/new)
+
+Once you have implemented your new feature you will generally submit a [pull request](https://github.com/qmk/qmk_firmware/pulls). Here are some things to keep in mind when creating one:
+
+* **Disabled by default** - memory is a pretty limited on most chips QMK supports, and it's important that current keymaps aren't broken, so please allow your feature to be turned **on**, rather than being turned off. If you think it should be on by default, or reduces the size of the code, please talk with us about it.
 * **Compile locally before submitting** - hopefully this one is obvious, but things need to compile! Our Travis system will catch any issues, but it's generally faster for you to compile a few keyboards locally instead of waiting for the results to come back.
 * **Consider subprojects and different chip-bases** - there are several keyboards that have subprojects that have allow for slightly different configurations, and even different chip-bases. Try to make a feature supported in ARM and AVR, or automatically disabled in one that doesn't work.
-* **Explain your feature** - submitting a markdown write-up of what your feature does with your PR may be needed, and it will allow a collaborator to easily copy it into the wiki for documentation (after proofing and editing).
-* **Don't refactor code** - to maintain a clear vision of how things are laid out in QMK, we try to plan out refactors in-depth, and have a collaborator make the changes. If you have an idea for refactoring, or suggestions, [open an issue](https://github.com/qmk/qmk_firmware/issues).
+* **Explain your feature** - Document it in `docs/`, either as a new file or as part of an existing file. If you don't document it other people won't be able to benefit from your hard work.
+* **Don't refactor code** - to maintain a clear vision of how things are laid out in QMK, we try to plan out refactors in-depth, and have a collaborator make the changes. If you have an idea for refactoring, or suggestions, [open an issue](https://github.com/qmk/qmk_firmware/issues).

File diff suppressed because it is too large
+ 18 - 12
docs/build_environment_setup.md


File diff suppressed because it is too large
+ 3 - 3
docs/custom_quantum_functions.md


+ 0 - 7
docs/differences_from_tmk.md

@@ -1,7 +0,0 @@
-Understanding the essential changes made on the [tmk_keyboard firmware](http://github.com/tmk/tmk_keyboard) should help you understand the QMK Firmware.
-
-| Firmware                     |TMK                    |QMK                      |
-|------------------------------|-----------------------|-------------------------|
-| Maintainer                   |hasu  (@tmk)           |Jack Humbert et al.      |
-| Build path customization     | `TMK_DIR = ...`       | `include .../Makefile`  |
-| `keymaps` array data | 3D array of `uint8_t`  holding **keycode**      | 3D array of `uint16_t` holding **keycode**  |

+ 39 - 0
docs/documentation_best_practices.md

@@ -0,0 +1,39 @@
+# Documentation Best Practices
+
+This page exists to document best practices when writing documentation for QMK. Following these guidelines will help to keep a consistent tone and style, which will in turn help other people more easily understand QMK.
+
+# Page Opening
+
+Your documentation page should generally start with an H1 heading, followed by a 1 paragrah description of what the user will find on this page. Keep in mind that this heading and paragraph will sit next to the Table of Contents, so keep the heading short and avoid long strings with no whitespace.
+
+Example:
+
+```
+# My Page Title
+
+This page covers my super cool feature. You can use this feature to make coffee, squeeze fresh oj, and have an egg mcmuffin and hashbrowns delivered from your local macca's by drone.
+```
+
+# Headings
+
+Your page should generally have multiple "H1" headings. Only H1 and H2 headings will included in the Table of Contents, so plan them out appropriately. Excess width should be avoided in H1 and H2 headings to prevent the Table of Contents from getting too wide.
+
+# Styled Hint Blocks
+
+You can have styled hint blocks drawn around text to draw attention to it.
+
+{% hint style='info' %}
+This uses \{\% hint style='info' \%\}
+{% endhint %}
+
+{% hint style='tip' %}
+This uses \{\% hint style='tip' \%\}
+{% endhint %}
+
+{% hint style='danger' %}
+This uses \{\% hint style='danger' \%\}
+{% endhint %}
+
+{% hint style='working' %}
+This uses \{\% hint style='working' \%\}
+{% endhint %}

+ 3 - 1
docs/eclipse.md

@@ -1,3 +1,5 @@
+# Setting Up Eclipse for QMK Development
+
 [Eclipse](https://en.wikipedia.org/wiki/Eclipse_(software)) is an open-source [Integrated Development Environment](https://en.wikipedia.org/wiki/Integrated_development_environment) (IDE) widely used for Java development, but with an extensible plugin system that allows to customize it for other languages and usages.
 
 Using an IDE such as Eclipse provides many advantages over a plain text editor, such as:
@@ -81,4 +83,4 @@ We will now configure a make target that cleans the project and builds the keyma
 6. Leave the other options checked and click <kbd>OK</kbd>. Your make target will now appear under the selected keyboard.
 7. (Optional) Toggle the <kbd>Hide Empty Folders</kbd> icon button above the targets tree to only show your build target.
 8. Double-click the build target you created to trigger a build.
-9. Select the <kbd>Console</kbd> view at the bottom to view the running build.
+9. Select the <kbd>Console</kbd> view at the bottom to view the running build.

+ 22 - 48
docs/faq.md

@@ -1,31 +1,33 @@
-## READ FIRST
-- **README** of top directory : https://github.com/tmk/tmk_keyboard/blob/master/README.md
-- **README** of target project(keyboard/converter) directory.
+# Frequently Asked Questions
 
-Note that you'll need to read **both**.
+## What is QMK?
 
+[QMK](https://github.com/qmk), short for Quantum Mechanical Keyboard, is a group of people building tools for custom keyboards. We started with the [QMK firmware](https://github.com/qmk/qmk_firmware), a heavily modified fork of [TMK](https://github.com/tmk/tmk_keyboard).
 
-# Build
-- [[FAQ/Build]]
+## What Differences Are There Between QMK and TMK?
 
+TMK was originally designed and implemented by [Jun Wako](https://github.com/tmk). QMK started as [Jack Humbert's](https://github.com/jackhumbert) fork of TMK for the Planck. After a while Jack's fork had diverged quite a bit from TMK, and in 2015 Jack decided to rename his fork to QMK.
 
-# Keymap
-- [[FAQ/Keymap]]
+From a technical standpoint QMK builds upon TMK by adding several new features. Most notably QMK has expanded the number of available keycodes and uses these to implement advanced features like `S()`, `LCTL()`, and `MO()`. You can see a complete list of these keycodes in [Quantum Keycodes](quantum_keycodes.html).
 
+From a project and community management standpoint TMK prefers to have keyboards maintained in separate forks while QMK prefers to have keyboards maintained in one central repository. 
 
 # Debug Console
 ## hid_listen can't recognize device
 When debug console of your device is not ready you will see like this:
 
-    Waiting for device:.........
+```
+Waiting for device:.........
+```
 
 once the device is pluged in then *hid_listen* finds it you will get this message:
 
-    Waiting for new device:.........................
-    Listening:
+```
+Waiting for new device:.........................
+Listening:
+```
 
-Check if you can't get this 'Listening:' message:
-- build with `CONSOLE_ENABLE=yes` in **Makefile**.
+If you can't get this 'Listening:' message try building with `CONSOLE_ENABLE=yes` in [Makefile]
 
 You may need privilege to access the device on OS like Linux.
 - try `sudo hid_listen`
@@ -73,41 +75,13 @@ Without reset circuit you will have inconsistent reuslt due to improper initiali
 
 
 ## Can't read column of matrix beyond 16 
-Use `1UL<<16` instead of `1<<16` in `read_cols()` in **matrix.h** when your columns goes beyond 16.
+Use `1UL<<16` instead of `1<<16` in `read_cols()` in [matrix.h] when your columns goes beyond 16.
 
-In C `1` means one of **int** type which is **16bit** in case of AVR so you can't shift left more than 15. You will get unexpected zero when you say `1<<16`. You have to use **unsigned long** type with `1UL`.
+In C `1` means one of [int] type which is [16bit] in case of AVR so you can't shift left more than 15. You will get unexpected zero when you say `1<<16`. You have to use [unsigned long] type with `1UL`.
 
 http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
 
 
-
-## Pull-up Resistor
-In some case converters needed to have pull-up resistors to work correctly. Place the resistor between VCC and signal line in parallel.
-
-For example:
-```
-Keyboard       Conveter
-               ,------.
-5V------+------|VCC   |
-        |      |      |
-        R      |      |
-        |      |      |
-Signal--+------|PD0   |
-               |      |
-GND------------|GND   |
-               `------'
-R: 1K Ohm resistor
-```
-
-https://github.com/tmk/tmk_keyboard/issues/71
-
-
-## Arduino Micro's pin naming is confusing
-Note that Arduino Micro PCB marking is different from real AVR port name. D0 of Arduino Micro is not PD0, PD0 is D3. Check schematic yourself.
-http://arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf
-
-
-
 ## Bootloader jump doesn't work
 Properly configure bootloader size in **Makefile**. With wrong section size bootloader won't probably start with **Magic command** and **Boot Magic**.
 ```
@@ -157,20 +131,20 @@ https://github.com/tmk/tmk_keyboard/issues/179
 
 
 ## Special Extra key doesn't work(System, Audio control keys)
-You need to define `EXTRAKEY_ENABLE` in **makefile** to use them in TMK.
+You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK.
+
 ```
 EXTRAKEY_ENABLE = yes          # Audio control and System control
 ```
-http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-60.html#p157919
-
 
 ## Wakeup from sleep doesn't work
+
 In Windows check `Allow this device to wake the computer` setting in Power **Management property** tab of **Device Manager**. Also check BIOS setting.
 
 Pressing any key during sleep should wake host.
 
-
 ## Using Arduino?
+
 **Note that Arduino pin naming is different from actual chip.** For example, Arduino pin `D0` is not `PD0`. Check circuit with its schematics yourself.
 
 - http://arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf
@@ -235,4 +209,4 @@ https://geekhack.org/index.php?topic=41989.msg1967778#msg1967778
 ## FLIP doesn't work
 ### AtLibUsbDfu.dll not found
 Remove current driver and reinstall one FLIP provides from DeviceManager.
-http://imgur.com/a/bnwzy
+http://imgur.com/a/bnwzy

+ 6 - 57
docs/faq_build.md

@@ -1,5 +1,6 @@
-## READ FIRST
-- https://github.com/qmk/qmk_firmware/blob/master/docs/build_guide.md
+# Frequently Asked Build Questions
+
+This page covers questions about building QMK. If you have not yet you should read the [Build Guide](https://github.com/qmk/qmk_firmware/blob/master/docs/build_guide.md).
 
 In short,
 
@@ -8,12 +9,10 @@ In short,
     $ make [-f Makefile.<variant>] [KEYMAP=...] dfu
 
 
-## Can't program on Linux and Mac
+## Can't program on Linux
 You will need proper permission to operate a device. For Linux users see udev rules below.
 Easy way is to use `sudo` command, if you are not familiar with this command check its manual with `man sudo` or this page on line.
 
-https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/sudo.8.html
-
 In short when your controller is ATMega32u4,
     
     $ sudo dfu-programmer atmega32u4 erase --force
@@ -26,63 +25,14 @@ or just
 
 But to run `make` with root privilege is not good idea. Use former method as possible.
 
-## Do 'make clean' before 'make'
-You'll need `make clean` after you edit **config.h** or change options like `KEYMAP`.
-
-Frist remove all files made in previous build,
-
-    $ make clean
-
-then build new firmware. 
-
-    $ make [KEYMAP=...]
-
-Also you can always try `make clean` when you get other strange result during build.
-
-
 ## WINAVR is obsolete
 It is no longer recommended and may cause some problem.
 See [Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
 
-## USB stack: LUFA or PJRC?
-Use **LUFA**.
-
-**PJRC** stack won't be supported actively anymore. There is no reason to hesitate to use LUFA except for binary size(about 1KB lager?). But **PJRC** is still very useful for debug and development purpose.
-See also [Issue #50](https://github.com/tmk/tmk_keyboard/issues/50) and [Issue #58](https://github.com/tmk/tmk_keyboard/issues/58).
-
-## Edit configuration but not change
-You will need followings after editing `CONSOLE_ENABLE`, `NKRO_ENABLE`, `EXTRAKEY_ENABLE` or `MOUSEKEY_ENABLE` option in **Makefile**.
-
-### 1. make clean
-This will be needed when you edit **config.h**.
-
-### 2. Remove Drivers from Device Manager(Windows)
-**Windows only.** Linux, OSX and other OS's doesn't require this. It looks like Windows keeps using driver installed when device was connected first time even after the device changes its configuration. To load proper drivers for new configuration you need to remove existent drivers from **Drvice Manager**.
-
-### 3. Build with different VID:PID
-**Windows only.** If method 2. does't work fou you try this. Change Vendor ID or Product ID in **config.h** and build firmware. Windows should recognize it as whole new device and start drivers install process.
-
-### 4. Just try other ports
-This will be useful and the easiest workaround for **Windows**.
-
-
-
 ## USB VID and PID
 You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very least chance of collision with other product.
 
-For example TMK uses following numbers by default.
-```
-keyboard:
-hhkb: FEED:CAFE
-gh60: FEED:6060
-
-converter:
-x68k: FEED:6800
-ps2: FEED:6512
-adb: FEED:0ADB
-ibm4704: FEED:4704
-pc98: FEED:9898
-```
+Most boards in QMK use `0xFEED` as the vendor ID. You should look through other keyboards to make sure you pick a unique Product ID.
 
 Also see this.
 https://github.com/tmk/tmk_keyboard/issues/150
@@ -112,7 +62,6 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
 ```
 
 
-
 ## Cortex: cstddef: No such file or directory
 GCC 4.8 of Ubuntu 14.04 had this problem and had to update to 4.9 with this PPA.
 https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
@@ -148,4 +97,4 @@ Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong
 #   LUFA bootloader  4096         
 #   USBaspLoader     2048         
 OPT_DEFS += -DBOOTLOADER_SIZE=2048
-```
+```

+ 20 - 74
docs/faq_keymap.md

@@ -1,10 +1,13 @@
-## READ FIRST
-https://github.com/tmk/tmk_core/blob/master/doc/keymap.md
+# Frequently Asked Keymap Questions
 
-## How to get keycode
-See [Keycodes](Keycodes). Keycodes are actually defined in [common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keycode.h).
+This page covers questions people often have about keymaps. If you haven't you should read [Keymap Overview](keymap.html) first.
 
-## Sysrq key
+## What Keycodes Can I Use?
+See [Basic Keycodes](keycodes.html) and [Quantum Keycodes](quantum_keycodes.html) for most of the keys you can define.
+
+Keycodes are actually defined in [common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keycode.h).
+
+## `KC_SYSREQ` isn't working
 Use keycode for Print Screen(`KC_PSCREEN` or `KC_PSCR`) instead of `KC_SYSREQ`. Key combination of 'Alt + Print Screen' is recognized as 'System request'.
 
 See [issue #168](https://github.com/tmk/tmk_keyboard/issues/168) and
@@ -16,7 +19,7 @@ Use `KC_PWR` instead of `KC_POWER` or vice versa.
 - `KC_PWR` works with Windows and Linux, not with OSX.
 - `KC_POWER` works with OSX and Linux, not with Windows.
 
-http://geekhack.org/index.php?topic=14290.msg1327264#msg1327264
+More info: http://geekhack.org/index.php?topic=14290.msg1327264#msg1327264
 
 ## Oneshot modifier
 Solves my personal 'the' problem. I often got 'the' or 'THe' wrongly instead of 'The'.  Oneshot Shift mitgates this for me.
@@ -32,15 +35,17 @@ For Modifier keys and layer actions you have to place `KC_TRANS` on same positio
 
 
 ## Mechanical Lock Switch Support
-https://github.com/tmk/tmk_keyboard#mechanical-locking-support
-
-This feature is for *mechanical lock switch* like this Alps one.
-http://deskthority.net/wiki/Alps_SKCL_Lock
 
-Using enabling this feature and using keycodes `LCAP`, `LNUM` or `LSCR` in keymap you can use physical locking CapsLock, NumLock or ScrollLock keys as you expected.
+This feature is for *mechanical lock switch* like [this Alps one](http://deskthority.net/wiki/Alps_SKCL_Lock). You can enable it by adding this to your `config.h`:
+ 
+```
+#define LOCKING_SUPPORT_ENABLE
+#define LOCKING_RESYNC_ENABLE
+```
 
-Old vintage mechanical keyboards occasionally have lock switches but modern ones don't have. ***You don't need this feature in most case and just use keycodes `CAPS`, `NLCK` and `SLCK`.***
+After enabling this feature use keycodes `KC_LCAP`, `KC_LNUM` and `KC_LSCR` in your keymap instead.
 
+Old vintage mechanical keyboards occasionally have lock switches but modern ones don't have. ***You don't need this feature in most case and just use keycodes `KC_CAPS`, `KC_NLCK` and `KC_SLCK`.***
 
 ## Input special charactors other than ASCII like Cédille 'Ç'
 NO UNIVERSAL METHOD TO INPUT THOSE WORKS OVER ALL SYSTEMS. You have to define **MACRO** in way specific to your OS or layout.
@@ -111,68 +116,12 @@ https://github.com/tekezo/Karabiner/issues/403
 
 ## Esc and `~ on a key
 
-You can define FC660 and Poker style ESC with `ACTION_LAYER_MODS`.
-https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#35-momentary-switching-with-modifiers
-
-```
-#include "keymap_common.h"
-
-
-/* Leopold FC660
- * https://elitekeyboards.com/products.php?sub=leopold,compact&pid=fc660c
- * Shift + Esc = ~
- * Fn    + Esc = `
- *
- * Votex Poker II
- * https://adprice.fedorapeople.org/poker2_manual.pdf
- * Fn         + Esc = `
- * Fn + Shift + Esc = ~
- */
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-    /* 0: qwerty */
-    [0] = KEYMAP( \
-        ESC, 1,   2,   3,   4,   5,   6,   7,   8,   9,   0,   MINS,EQL, NUHS,BSPC, \
-        TAB, Q,   W,   E,   R,   T,   Y,   U,   I,   O,   P,   LBRC,RBRC,BSLS, \
-        LCTL,A,   S,   D,   F,   G,   H,   J,   K,   L,   SCLN,QUOT,ENT,  \
-        FN0, NUBS,Z,   X,   C,   V,   B,   N,   M,   COMM,DOT, SLSH,RSFT,ESC, \
-        LCTL,LGUI,LALT,          SPC,                     RALT,FN1, RGUI,RCTL),
-    [1] = KEYMAP( \
-        GRV, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,          TRNS,                    TRNS,TRNS,TRNS,TRNS),
-    [2] = KEYMAP( \
-        GRV, F1,  F2,  F3,  F4,  F5,  F6,  F7,  F8,  F9,  F10, F11, F12, TRNS,TRNS, \
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
-        TRNS,TRNS,TRNS,          TRNS,                    TRNS,TRNS,TRNS,TRNS),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    // https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#35-momentary-switching-with-modifiers
-    [0] = ACTION_LAYER_MODS(1, MOD_LSFT),
-    [1] = ACTION_LAYER_MOMENTARY(2),
-};
-```
-
-Otherwise, you can write code, see this.
-https://github.com/p3lim/keyboard_firmware/commit/fd799c12b69a5ab5addd1d4c03380a1b8ef8e9dc
-
-
-## 32 Fn keys are not enough?
-### actionmap
-It uses 16 bit codes and has no limitation of 32 Fn at the expense of memory space. TMK keymap is actually is 8 bit codes as subset of the actionmap.
-https://github.com/tmk/tmk_keyboard/issues?utf8=%E2%9C%93&q=is%3Aissue+actionmap
-
-### extension for modified keys
-https://geekhack.org/index.php?topic=41989.msg1885526#msg1885526
-
+Use `GRAVE_ESC` or `KC_GESC` in your keymap.
 
 ## Arrow on Right Modifier keys with Dual-Role
 This turns right modifer keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**.
 ```
+
 #include "keymap_common.h"
 
 
@@ -211,18 +160,16 @@ const uint16_t PROGMEM fn_actions[] = {
 
 ```
 
-
 Dual-role key: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
 
 
 ## Eject on Mac OSX
-`EJCT` keycode works on OSX. https://github.com/tmk/tmk_keyboard/issues/250
+`KC_EJCT` keycode works on OSX. https://github.com/tmk/tmk_keyboard/issues/250
 It seems Windows 10 ignores the code and Linux/Xorg recognizes but has no mapping by default.
 
 Not sure what keycode Eject is on genuine Apple keyboard actually. HHKB uses `F20` for Eject key(`Fn+f`) on Mac mode but this is not same as Apple Eject keycode probably.
 
 
-
 ## What's weak_mods and real_mods in action_util.c
 ___TO BE IMPROVED___
 
@@ -262,4 +209,3 @@ if (timer_elapsed(key_timer) < 100) {
 ```
 
 It's best to declare the `static uint16_t key_timer;` at the top of the file, outside of any code blocks you're using it in.
-

+ 25 - 6
docs/glossary.md

@@ -1,10 +1,29 @@
 # Glossary of QMK terms
 
-git
-: versioning software used at the commandline
+## Dynamic Macro
+A macro which has been recorded on the keyboard and which will be lost when the keyboard is unplugged or the computer rebooted.
 
-keymap
-: an array of keycodes mapped to a physical keyboard layout, which are processed on key presses and releases
+## git
+Versioning software used at the commandline
 
-matrix
-: a wiring pattern of columns and rows (and usually diodes) that enables the MCU to detect keypresses with a fewer number of pins
+## Keycode
+A 2-byte number that represents a particular key. `0x00`-`0xFF` are used for [Basic Keycodes](keycodes.html) while `0x100`-`0xFFFF` are used for [Quantum Keycodes](quantum_keycodes.html).
+
+## Keymap
+An array of keycodes mapped to a physical keyboard layout, which are processed on key presses and releases
+
+## Matrix
+A wiring pattern of columns and rows (and usually diodes) that enables the MCU to detect keypresses with a fewer number of pins
+
+## Macro
+A feature that lets you send muiltple keypress events (hid reports) after having pressed only a single key.
+
+## Mousekeys
+A feature that lets you control your mouse cursor and click from your keyboard.
+
+* [Mousekeys Documentation](mouse_keys.html)
+
+## Tap Dance
+A feature that lets you assign muiltple keycodes to the same key based on how many times you press it.
+
+* [Tap Dance Documentation](tap_dance.html)

File diff suppressed because it is too large
+ 15 - 8
docs/key_functions.md


+ 5 - 3
docs/macros.md

@@ -1,8 +1,10 @@
-# Macros - Send multiple keystrokes when pressing just one key
+# Macros
 
-QMK has a number of ways to define and use macros. These can do anything you want- type common phrases for you, copypasta, repetitive game movements, or even help you code. 
+Macros allow you to send multiple keystrokes when pressing just one key. QMK has a number of ways to define and use macros. These can do anything you want- type common phrases for you, copypasta, repetitive game movements, or even help you code. 
 
+{% hint style='danger' %}
 **Security Note**: While it is possible to use macros to send passwords, credit card numbers, and other sensitive information it is a supremely bad idea to do so. Anyone who gets ahold of your keyboard will be able to access that information by opening a text editor.
+{% endhint %}
 
 # Macro Definitions
 
@@ -135,7 +137,7 @@ This will clear all mods currently pressed.
 
 This will clear all keys besides the mods currently pressed.
 
-# Advanced Example: Single-key copy/paste (hold to copy, tap to paste)
+# Advanced Example: Single-key copy/paste
 
 This example defines a macro which sends `Ctrl-C` when pressed down, and `Ctrl-V` when released. 
 

+ 3 - 3
docs/make_instructions.md

@@ -48,7 +48,7 @@ Here are some examples commands
 * `make ergodox-infinity-algernon-clean` will clean the build output of the Ergodox Infinity keyboard. This example uses the full syntax and can be run from any folder with a `Makefile`
 * `make dfu COLOR=false` from within a keymap folder, builds and uploads the keymap, but without color output.
 
-## The `Makefile`
+# The `Makefile`
 
 There are 5 different `make` and `Makefile` locations:
 
@@ -62,7 +62,7 @@ The root contains the code used to automatically figure out which keymap or keym
 
 For keyboards and subprojects, the make files are split in two parts `Makefile` and `rules.mk`. All settings can be found in the `rules.mk` file, while the `Makefile` is just there for support and including the root `Makefile`. Keymaps contain just one `Makefile` for simplicity.
 
-### Makefile options
+## Makefile options
 
 Set these variables to `no` to disable them, and `yes` to enable them.
 
@@ -158,7 +158,7 @@ This enables using the Quantum SYSEX API to send strings (somewhere?)
 
 This consumes about 5390 bytes.
 
-### Customizing Makefile options on a per-keymap basis
+## Customizing Makefile options on a per-keymap basis
 
 If your keymap directory has a file called `Makefile` (note the filename), any Makefile options you set in that file will take precedence over other Makefile options for your particular keyboard.
 

+ 13 - 13
docs/quantum_keycodes.md

@@ -4,7 +4,7 @@ All keycodes within quantum are numbers between `0x0000` and `0xFFFF`. Within yo
 
 On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are used to implement advanced quantum features. If you define your own custom keycodes they will be put into this range as well. Keycodes above `0x00FF` may not be used with any of the mod/layer-tap keys listed 
 
-# Quantum keycodes
+## QMK keycodes
 
 |Name|Description|
 |----|-----------|
@@ -18,7 +18,7 @@ On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are
 |`M(n)`|to call macro n|
 |`MACROTAP(n)`|to macro-tap n idk FIXME|
 
-# Bootmagic Keycodes
+## Bootmagic Keycodes
 
 Shortcuts for bootmagic options (these work even when bootmagic is off.)
 
@@ -44,7 +44,7 @@ Shortcuts for bootmagic options (these work even when bootmagic is off.)
 |`MAGIC_UNSWAP_ALT_GUI`/`AG_NORM`|Disable the Alt/GUI switching|
 |`MAGIC_TOGGLE_NKRO`|Turn NKRO on or off|
 
-# Audio
+## Audio
 
 ```c
 #ifdef AUDIO_ENABLE
@@ -69,7 +69,7 @@ Shortcuts for bootmagic options (these work even when bootmagic is off.)
 #endif
 ```
 
-## Midi
+### Midi
 
 #if !MIDI_ENABLE_STRICT || (defined(MIDI_ENABLE) && defined(MIDI_BASIC))
     MI_ON,  // send midi notes when music mode is enabled
@@ -157,7 +157,7 @@ MI_MODSD, // decrease modulation speed
 MI_MODSU, // increase modulation speed
 #endif // MIDI_ADVANCED
 
-# Backlight
+## Backlight
 
 These keycodes control the backlight. Most keyboards use this for single color in-switch lighting.
 
@@ -171,7 +171,7 @@ These keycodes control the backlight. Most keyboards use this for single color i
 |`BL_TOGG`|Toggle the backlight on or off|
 |`BL_STEP`|Step through backlight levels, wrapping around to 0 when you reach the top.|
 
-# RGBLIGHT WS2818 LEDs
+## RGBLIGHT WS2818 LEDs
 
 This controls the `RGBLIGHT` functionality. Most keyboards use WS2812 (and compatible) LEDs for underlight or case lighting.
 
@@ -203,7 +203,7 @@ This is used when multiple keyboard outputs can be selected. Currently this only
 |`OUT_USB`|usb only|
 |`OUT_BT`|bluetooth (when `BLUETOOTH_ENABLE`)|
 
-# Modifiers
+## Modifiers
 
 These are special keycodes that simulate pressing several modifiers at once.
 
@@ -219,7 +219,7 @@ These are special keycodes that simulate pressing several modifiers at once.
  * |`KC_LCA`|`LCTL` + `LALT`|
  */
 
-## Modifiers with keys
+### Modifiers with keys
 
 |Name|Description|
 |----|-----------|
@@ -238,7 +238,7 @@ These are special keycodes that simulate pressing several modifiers at once.
 |`SCMD(kc)`/`SWIN(kc)`|`LGUI` + `LSFT` + `kc`|
 |`LCA(kc)`|`LCTL` + `LALT` + `kc`|
 
-## One Shot Keys
+### One Shot Keys
 
 Most modifiers work by being held down while you push another key. You can use `OSM()` to setup a "One Shot" modifier. When you tap a one shot mod it will remain is a pressed state until you press another key. 
 
@@ -249,7 +249,7 @@ To specify a your modifier you need to pass the `MOD` form of the key. For examp
 |`OSM(mod)`|use mod for one keypress|
 |`OSL(layer)`|switch to layer for one keypress|
 
-## Mod-tap keys
+### Mod-tap keys
 
 These keycodes will press the mod(s) when held, and the key when tapped. They only work with [basic keycodes](basic_keycodes.md). 
 
@@ -271,7 +271,7 @@ These keycodes will press the mod(s) when held, and the key when tapped. They on
 |`SCMD_T(kc)`/`SWIN_T(kc)`|`LGUI` + `LSFT` when held, `kc` when tapped|
 |`LCA_T(kc)`|`LCTL` + `LALT` when held, `kc` when tapped|
 
-# US ANSI Shifted symbols
+## US ANSI Shifted symbols
 
 These keycodes correspond to characters that are "shifted" on a standard US ANSI keyboards. They do not have dedicated keycodes but are instead typed by holding down shift and then sending a keycode. 
 
@@ -301,7 +301,7 @@ It's important to remember that all of these keycodes send a left shift - this m
 |`KC_QUES`|`KC_QUESTION`|question mark `?`|
 |`KC_DQT`/`KC_DQUO`|`KC_DOUBLE_QUOTE`|double quote `"`|
 
-# Layer Changes
+## Layer Changes
 
 These are keycodes that can be used to change the current layer.
 
@@ -315,7 +315,7 @@ These are keycodes that can be used to change the current layer.
 |`TT(layer)`|tap toggle? idk FIXME|
 |`OSL(layer)`|switch to layer for one keycode|
 
-# Unicode
+## Unicode
 
 These keycodes can be used in conjuction with the [Unicode](unicode_and_additional_language_support.md) support.
 

+ 7 - 1
docs/tap_dance.md

@@ -1,5 +1,7 @@
 # Tap Dance: A single key can do 3, 5, or 100 different things
 
+<!-- FIXME: Break this up into multiple sections -->
+
 Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. It's one of the nicest community-contributed features in the firmware, conceived and created by [algernon](https://github.com/algernon) in [#451](https://github.com/qmk/qmk_firmware/pull/451). Here's how algernon describes the feature:
 
 With this feature one can specify keys that behave differently, based on the amount of times they have been tapped, and when interrupted, they get handled before the interrupter.
@@ -34,7 +36,9 @@ Our next stop is `matrix_scan_tap_dance()`. This handles the timeout of tap-danc
 
 For the sake of flexibility, tap-dance actions can be either a pair of keycodes, or a user function. The latter allows one to handle higher tap counts, or do extra things, like blink the LEDs, fiddle with the backlighting, and so on. This is accomplished by using an union, and some clever macros.
 
-### Examples
+# Examples
+
+## Simple Example
 
 Here's a simple example for a single definition:
 
@@ -59,6 +63,8 @@ qk_tap_dance_action_t tap_dance_actions[] = {
 TD(TD_ESC_CAPS)
 ```
 
+## Complex Example
+
 Here's a more complex example involving custom actions:
 
 ```c

File diff suppressed because it is too large
+ 54 - 74
docs/understanding_qmk.md