summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/Macros.md215
-rw-r--r--docs/Other-Projects.md62
-rw-r--r--docs/SUMMARY.md26
-rw-r--r--docs/_Sidebar.md21
-rw-r--r--docs/_summary.md29
-rw-r--r--docs/adding_a_keyboard_to_qmk.md35
-rw-r--r--docs/adding_features_to_qmk.md (renamed from docs/Adding-features-to-QMK.md)0
-rw-r--r--docs/becoming_a_qmk_collaborator.md (renamed from docs/Becoming-a-QMK-Collaborator.md)0
-rw-r--r--docs/build_environment_setup.md (renamed from docs/Build-Environment-Setup.md)2
-rw-r--r--docs/build_guide.md (renamed from docs/BUILD_GUIDE.md)2
-rw-r--r--docs/build_old.md2
-rw-r--r--docs/compatible_microcontrollers.md (renamed from docs/Compatible-Microcontrollers.md)0
-rw-r--r--docs/custom_quantum_functions.md (renamed from docs/Custom-Quantum-Functions.md)20
-rw-r--r--docs/cygwin_guide.md (renamed from docs/CYGWIN_GUIDE.md)0
-rw-r--r--docs/differences_from_tmk.md (renamed from docs/Differences-from-TMK.md)0
-rw-r--r--docs/dynamic_macros.md63
-rw-r--r--docs/eclipse.md (renamed from docs/Eclipse.md)2
-rw-r--r--docs/embedding.md (renamed from docs/Embedding.md)0
-rw-r--r--docs/faq.md (renamed from docs/FAQ.md)0
-rw-r--r--docs/faq_build.md (renamed from docs/FAQ-Build.md)2
-rw-r--r--docs/faq_keymap.md (renamed from docs/FAQ-Keymap.md)21
-rw-r--r--docs/fuse.txt (renamed from docs/FUSE.txt)0
-rw-r--r--docs/git_subtree.md (renamed from docs/Git-subtree.md)0
-rw-r--r--docs/hand_wire.md (renamed from docs/HAND_WIRE.md)2
-rw-r--r--docs/hhkb_alt_controller.md (renamed from docs/HHKB-Alt-controller.md)0
-rw-r--r--docs/home.md (renamed from docs/Home.md)67
-rw-r--r--docs/key_functions.md (renamed from docs/Key-Functions.md)29
-rw-r--r--docs/keycode.txt48
-rw-r--r--docs/keycodes.md (renamed from docs/Keycodes.md)48
-rw-r--r--docs/keymap.md (renamed from docs/Keymap.md)0
-rw-r--r--docs/keymap_examples.md (renamed from docs/Keymap-examples.md)0
-rw-r--r--docs/kiibohd.asciidoc (renamed from docs/Kiibohd.asciidoc)0
-rw-r--r--docs/leader_key.md (renamed from docs/Leader-Key.md)0
-rw-r--r--docs/license_clarification.md (renamed from docs/License-Clarification.md)0
-rw-r--r--docs/license_clarification_details.md (renamed from docs/License-Clarification-Details.md)0
-rw-r--r--docs/macros.md158
-rw-r--r--docs/make_instructions.md (renamed from docs/Make-Instructions.md)2
-rw-r--r--docs/mbed_cortex_porting.md (renamed from docs/mbed-cortex-porting.md)0
-rw-r--r--docs/memory_write_error,_use_debug_for_more_info.md (renamed from docs/Memory-write-error,-use-debug-for-more-info.md)0
-rw-r--r--docs/modding_your_keyboard.md (renamed from docs/Modding-your-keyboard.md)25
-rw-r--r--docs/mouse_keys.md (renamed from docs/Mouse-keys.md)0
-rw-r--r--docs/pcb_guide.md (renamed from docs/PCB_GUIDE.md)2
-rw-r--r--docs/porting_your_keyboard_to_qmk.md (renamed from docs/Porting-your-keyboard-to-QMK.md)6
-rw-r--r--docs/porting_your_keyboard_to_qmk_(arm_and_other_chibios_cpus).md (renamed from docs/Porting-Your-Keyboard-to-QMK-(ARM-and-other-ChibiOS-CPUs).md)0
-rw-r--r--docs/power.txt (renamed from docs/POWER.txt)0
-rw-r--r--docs/previously_asked_questions.asciidoc (renamed from docs/Previously-Asked-Questions.asciidoc)0
-rw-r--r--docs/qmk_overview.md (renamed from docs/QMK-Overview.md)2
-rw-r--r--docs/report_descriptor.md (renamed from docs/Report-Descriptor.md)0
-rw-r--r--docs/space_cadet_shift.md (renamed from docs/Space-Cadet-Shift.md)0
-rw-r--r--docs/tap_dance.md (renamed from docs/Tap-Dance.md)0
-rw-r--r--docs/test_for_asciidoc.asciidoc (renamed from docs/Test-for-ASCIIDOC.asciidoc)0
-rw-r--r--docs/tmk_based_projects.md (renamed from docs/TMK-Based-Projects.md)0
-rw-r--r--docs/tmk_own_projects.md (renamed from docs/TMK-Own-Projects.md)0
-rw-r--r--docs/tmk_readme.md (renamed from docs/TMK_README.md)8
-rw-r--r--docs/unicode_and_additional_language_support.md (renamed from docs/Unicode-and-additional-language-support.md)0
-rw-r--r--docs/unit_testing.md (renamed from docs/Unit-testing.md)0
-rw-r--r--docs/usb_hid.md (renamed from docs/USB-HID.md)0
-rw-r--r--docs/usb_nkro.txt (renamed from docs/USB_NKRO.txt)0
-rw-r--r--docs/vagrant_guide.md (renamed from docs/VAGRANT_GUIDE.md)4
59 files changed, 436 insertions, 467 deletions
diff --git a/docs/Macros.md b/docs/Macros.md
deleted file mode 100644
index 994d01928..000000000
--- a/docs/Macros.md
+++ /dev/null
@@ -1,215 +0,0 @@
-# Macro shortcuts: Send a whole string when pressing just one key
-
-Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c).
-
-```c
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
-{
- switch(id) {
- case 0: // this would trigger when you hit a key mapped as M(0)
- if (record->event.pressed) {
- return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes
- }
- break;
- }
- return MACRO_NONE;
-};
-```
-A macro can include the following commands:
-
-* I() change interval of stroke in milliseconds.
-* D() press key.
-* U() release key.
-* T() type key(press and release).
-* W() wait (milliseconds).
-* END end mark.
-
-So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends.
-
-Note: Using macros to have your keyboard send passwords for you is possible, but a bad idea.
-
-## Advanced macro functions
-
-To get more control over the keys/actions your keyboard takes, the following functions are available to you in the `action_get_macro` function block:
-
-* `record->event.pressed`
-
-This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is
-
-```c
-if (record->event.pressed) {
- // on keydown
-} else {
- // on keyup
-}
-```
-
-* `register_code(<kc>);`
-
-This sends the `<kc>` keydown event to the computer. Some examples would be `KC_ESC`, `KC_C`, `KC_4`, and even modifiers such as `KC_LSFT` and `KC_LGUI`.
-
-* `unregister_code(<kc>);`
-
-Parallel to `register_code` function, this sends the `<kc>` keyup event to the computer. If you don't use this, the key will be held down until it's sent.
-
-* `layer_on(<n>);`
-
-This will turn on the layer `<n>` - the higher layer number will always take priority. Make sure you have `KC_TRNS` for the key you're pressing on the layer you're switching to, or you'll get stick there unless you have another plan.
-
-* `layer_off(<n>);`
-
-This will turn off the layer `<n>`.
-
-* `clear_keyboard();`
-
-This will clear all mods and keys currently pressed.
-
-* `clear_mods();`
-
-This will clear all mods currently pressed.
-
-* `clear_keyboard_but_mods();`
-
-This will clear all keys besides the mods currently pressed.
-
-* `update_tri_layer(layer_1, layer_2, layer_3);`
-
-If the user attempts to activate layer 1 AND layer 2 at the same time (for example, by hitting their respective layer keys), layer 3 will be activated. Layers 1 and 2 will _also_ be activated, for the purposes of fallbacks (so a given key will fall back from 3 to 2, to 1 -- and only then to 0).
-
-### Naming your macros
-
-If you have a bunch of macros you want to refer to from your keymap, while keeping the keymap easily readable, you can just name them like so:
-
-```
-#define AUD_OFF M(6)
-#define AUD_ON M(7)
-#define MUS_OFF M(8)
-#define MUS_ON M(9)
-#define VC_IN M(10)
-#define VC_DE M(11)
-#define PLOVER M(12)
-#define EXT_PLV M(13)
-```
-
-As was done on the [Planck default keymap](https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/default/keymap.c#L33-L40)
-
-#### Timer functionality
-
-It's possible to start timers and read values for time-specific events - here's an example:
-
-```c
-static uint16_t key_timer;
-key_timer = timer_read();
-if (timer_elapsed(key_timer) < 100) {
- // do something if less than 100ms have passed
-} else {
- // do something if 100ms or more have passed
-}
-```
-
-It's best to declare the `static uint16_t key_timer;` outside of the macro block (top of file, etc).
-
-### Example: Single-key copy/paste (hold to copy, tap to paste)
-
-With QMK, it's easy to make one key do two things, as long as one of those things is being a modifier. :) So if you want a key to act as Ctrl when held and send the letter R when tapped, that's easy: `CTL_T(KC_R)`. But what do you do when you want that key to send Ctrl-V (paste) when tapped, and Ctrl-C (copy) when held?
-
-Here's what you do:
-
-
-```
-static uint16_t key_timer;
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch(id) {
- case 0: {
- if (record->event.pressed) {
- key_timer = timer_read(); // if the key is being pressed, we start the timer.
- }
- else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
- if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap.
- return MACRO( D(LCTL), T(C), U(LCTL), END );
- }
- else {
- return MACRO( D(LCTL), T(V), U(LCTL), END );
- }
- }
- break;
- }
- }
- return MACRO_NONE;
-};
-```
-
-And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for copy/paste.
-
-# Dynamic macros: record and replay macros in runtime
-
-In addition to the static macros described above, you may enable the dynamic macros which you may record while writing. They are forgotten as soon as the keyboard is unplugged. Only two such macros may be stored at the same time, with the total length of 64 keypresses (by default).
-
-To enable them, first add a new element to the `planck_keycodes` enum — `DYNAMIC_MACRO_RANGE`:
-
- enum planck_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- PLOVER,
- LOWER,
- RAISE,
- BACKLIT,
- EXT_PLV,
- DYNAMIC_MACRO_RANGE,
- };
-
-It must be the last element because `dynamic_macros.h` will add some more keycodes after it.
-
-Below it include the `dynamic_macro.h` header:
-
- #include "dynamic_macro.h"`
-
-Add the following keys to your keymap:
-
-- `DYN_REC_START1` — start recording the macro 1,
-- `DYN_REC_START2` — start recording the macro 2,
-- `DYN_MACRO_PLAY1` — replay the macro 1,
-- `DYN_MACRO_PLAY2` — replay the macro 2,
-- `DYN_REC_STOP` — finish the macro that is currently being recorded.
-
-Add the following code to the very beginning of your `process_record_user()` function:
-
- if (!process_record_dynamic_macro(keycode, record)) {
- return false;
- }
-
-That should be everything necessary. To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`. To finish the recording, press the `DYN_REC_STOP` layer button. To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`.
-
-Note that it's possible to replay a macro as part of a macro. It's ok to replay macro 2 while recording macro 1 and vice versa but never create recursive macros i.e. macro 1 that replays macro 1. If you do so and the keyboard will get unresponsive, unplug the keyboard and plug it again.
-
-For users of the earlier versions of dynamic macros: It is still possible to finish the macro recording using just the layer modifier used to access the dynamic macro keys, without a dedicated `DYN_REC_STOP` key. If you want this behavior back, use the following snippet instead of the one above:
-
- uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode);
- if (!process_record_dynamic_macro(macro_kc, record)) {
- return false;
- }
-
-If the LED-s start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 128; please read the comments for it in the header).
-
-For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header.
-
-# Sending strings
-Some people want to have a password or some text on a key. This is possible without having to do every key individually using `SEND_STRING("<text>");`. Note the caps, because `send_string("<text>");` does something else. For example:
-```c
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
-{
- switch(id) {
- case 0: // this would trigger when you hit a key mapped as M(0)
- if (record->event.pressed) {
- SEND_STRING("QMK is the best thing ever!"); // This would type "QMK is the best thing ever!" (without quotation marks).
- return false; // This is false because it has to return something.
- }
- break;
- }
- return MACRO_NONE;
-};
-```
-If you'd want it to press enter as well, just replace `return false;` with `return MACRO( T(ENT), END );`.
diff --git a/docs/Other-Projects.md b/docs/Other-Projects.md
deleted file mode 100644
index 163c7c1cf..000000000
--- a/docs/Other-Projects.md
+++ /dev/null
@@ -1,62 +0,0 @@
-Keyboard Firmware Projects other than TMK
-================================
-## PJRC USB Keyboard/Mouse Example[USB][PJRC][Teensy][AVR]
-- <http://www.pjrc.com/teensy/usb_keyboard.html>
-- <http://www.pjrc.com/teensy/usb_mouse.html>
-
-## kbupgrade[USB][V-USB][AVR]
-- <http://github.com/rhomann/kbupgrade>
-- <http://geekhack.org/showwiki.php?title=Island:8406>
-
-## c64key[USB][V-USB][AVR]
-- <http://symlink.dk/projects/c64key/>
-
-## rump[USB][V-USB][AVR]
-- <http://mg8.org/rump/>
-- <http://github.com/clee/rump>
-
-## dulcimer[USB][V-USB][AVR]
-- <http://www.schatenseite.de/dulcimer.html>
-
-## humblehacker-keyboard[USB][LUFA][AVR][Ergo]
-- <http://github.com/humblehacker>
-- <http://www.humblehacker.com/keyboard/>
-- <http://geekhack.org/showwiki.php?title=Island:6292>
-
-## ps2avr[PS/2][AVR]
-- <http://sourceforge.net/projects/ps2avr/>
-
-## ErgoDox[Ergo][Split][USB][AVR]
-- <http://geekhack.org/index.php?topic=22780.0>
-- <https://github.com/benblazak/ergodox-firmware>
-- <https://github.com/cub-uanic/tmk_keyboard>
-
-## Suka's keyboard collection[Ergo][Split][3DPrinting][USB][AVR]
-- <http://deskthority.net/workshop-f7/my-diy-keyboard-collection-or-how-i-became-a-kb-geek-t2534.html>
-- <https://github.com/frobiac/adnw>
-
-## bpiphany's AVR-Keyboard[PJRC][AVR][USB]
-- <https://github.com/BathroomEpiphanies/AVR-Keyboard>
-- <http://deskthority.net/wiki/HID_Liberation_Device_-_DIY_Instructions>
-- <http://deskthority.net/wiki/Phantom>
-
-## USB-USB keyboard remapper[converter][USB-USB][AVR][Arduino]
-- <http://forum.colemak.com/viewtopic.php?pid=10837>
-- <https://github.com/darkytoothpaste/keymapper>
-
-## USB-USB converter threads[converter][USB-USB]
-- <http://deskthority.net/workshop-f7/is-remapping-a-usb-keyboard-using-teensy-possible-t2841-30.html>
-- <http://geekhack.org/index.php?topic=19458.0>
-
-## kbdbabel.org[converter][vintage][protocol][8051]
-Great resource of vintage keyboard protocol information and code
-
-- <http://www.kbdbabel.org/>
-
-## Haata's kiibohd Controller[converter][vintage][protocol][AVR][PJRC][Cortex]
-A lots of vintage keyboard protocol supports
-
-- <https://github.com/kiibohd/controller>
-
-## Kinesis ergonomic keyboard firmware replacement[V-USB][LUFA][Ergo]
-- <https://github.com/chrisandreae/kinesis-firmware>
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
deleted file mode 100644
index 99845a7b6..000000000
--- a/docs/SUMMARY.md
+++ /dev/null
@@ -1,26 +0,0 @@
-
-### Getting started
-* [Introduction](/Home.md)
-* [QMK Overview](/QMK-Overview.md)
-* [Build Environment Setup](/Build-Environment-Setup.md)
-
-### Making a keymap
-* [Keymap overview](/Keymap.md)
-* [Keycodes](/Keycodes.md)
-* [Layer switching](/Key-Functions.md)
-* [Leader Key](/Leader-Key.md)
-* [Macros](/Macros.md)
-* [Space Cadet](/Space-Cadet-Shift.md)
-* [Tap Dance](/Tap-Dance.md)
-* [Mouse keys](/Mouse-keys.md)
-* [FAQ: Creating a Keymap](/FAQ-Keymap.md)
-* [FAQ: Compiling QMK](/FAQ-Build.md)
-
-### For hardware makers and modders
-* [Modding your keyboard](/Modding-your-keyboard.md)
-* [Porting your keyboard to QMK](/Porting-your-keyboard-to-QMK.md)
-* [Adding features to QMK](/Adding-features-to-QMK.md)
-
-### Other topics
-* [General FAQ](/FAQ.md)
-* [Differences from TMK](/Differences-from-TMK.md)
diff --git a/docs/_Sidebar.md b/docs/_Sidebar.md
deleted file mode 100644
index f82c44c3e..000000000
--- a/docs/_Sidebar.md
+++ /dev/null
@@ -1,21 +0,0 @@
-* [Wiki Home](/qmk/qmk_firmware/wiki)
-* Getting started
- * [QMK Overview](QMK-Overview)
- * [Build Environment Setup](Build-Environment-Setup)
-* [Overview for keymap creators](Keymap)
- * [Keycodes](Keycodes)
- * [Layer switching](Key-Functions)
- * [Leader Key](Leader-Key)
- * [Macros](Macros)
- * [Space Cadet](Space-Cadet-Shift)
- * [Tap Dance](Tap-Dance)
- * [Mouse keys](Mouse-keys)
- * [FAQ: Creating a Keymap](FAQ-Keymap)
- * [FAQ: Compiling QMK](FAQ-Build)
-* For hardware makers and modders
- * [Modding your keyboard](Modding-your-keyboard)
- * [Porting your keyboard to QMK](Porting-your-keyboard-to-QMK)
- * [Adding features to QMK](Adding-features-to-QMK)
-* [General FAQ](FAQ)
-
-
diff --git a/docs/_summary.md b/docs/_summary.md
new file mode 100644
index 000000000..23128cafe
--- /dev/null
+++ b/docs/_summary.md
@@ -0,0 +1,29 @@
+
+### Getting started
+* [Introduction](home.md)
+* [QMK Overview](qmk_overview.md)
+* [Build Environment Setup](build_environment_setup.md)
+
+### Making a keymap
+* [Keymap overview](keymap.md)
+* [Custom Quantum Functions](custom_quantum_functions.md)
+* [Keycodes](keycodes.md)
+* [Layer switching](key_functions.md)
+* [Leader Key](leader_key.md)
+* [Macros](macros.md)
+* [Dynamic Macros](dynamic_macros.md)
+* [Space Cadet](space_cadet_shift.md)
+* [Tap Dance](tap_dance.md)
+* [Mouse keys](mouse_keys.md)
+* [FAQ: Creating a Keymap](faq_keymap.md)
+* [FAQ: Compiling QMK](faq_build.md)
+
+### For hardware 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)
+* [Adding features to QMK](adding_features_to_qmk.md)
+
+### Other topics
+* [General FAQ](faq.md)
+* [Differences from TMK](differences_from_tmk.md)
diff --git a/docs/adding_a_keyboard_to_qmk.md b/docs/adding_a_keyboard_to_qmk.md
new file mode 100644
index 000000000..51c4c4410
--- /dev/null
+++ b/docs/adding_a_keyboard_to_qmk.md
@@ -0,0 +1,35 @@
+# Adding your keyboard to QMK
+
+We welcome all keyboard projects into QMK, but ask that you try to stick to a couple guidelines that help us keep things organised and consistent.
+
+## Naming your directory/project
+
+All names should be lowercase alphanumeric, and separated by an underscore (`_`), but not begin with one. Dashes (`-`) aren't allow by our build system, and will confuse it with keymaps/subprojects. Your directory and your `.h` and `.c` files should have exactly the same name. Subprojects/revision should follow the same format.
+
+## `readme.md`
+
+All projects need to have a `readme.md` file that explains what the keyboard is, who made it, where it is available, and links to move information (template coming).
+
+## Image/Hardware files
+
+In an effort to keep the repo size down, we're no longer accepting images of any format in the repo, with few exceptions. Hosting them elsewhere (imgur) and linking them in the readme.md is the preferred method.
+
+Any sort of hardware file (plate, case, pcb) can't be stored in qmk_firmware, but we have the [qmk.fm repo](https://github.com/qmk/qmk.fm) where such files (as well as in-depth info) can be store, and viewed on [qmk.fm](http://qmk.fm). Downloadable files are stored in `/<keyboard>/` (name follows the same format as above) which are served at `http://qmk.fm/<keyboard>/`, and pages are generated from `/_pages/<keyboard>/` which are served at the same location (.md files are generated into .html files through Jekyll). Check out the `lets_split` directory for an example.
+
+## Non-production/handwired projects
+
+We're happy to accept any project that uses QMK, including prototypes and handwired ones, but we have a separate `/keyboards/handwired/` folder for them, so the main `/keyboards/` folder doesn't get overcrowded. If a prototype project becomes a production project at some point in the future, we'd be happy to move it to the main `/keyboards/` folder!
+
+## Warnings as errors
+
+When developing your keyboard, keep in mind that all warnings will be treated as errors - these small warnings can build-up and cause larger errors down the road (and keeping them is generally a bad practice).
+
+## Licenses
+
+If you're adapting your keyboard's setup from another project, but not using the same code, but sure to update the copyright header at the top of the files to show your name, it this format:
+
+ Copyright 2017 Your Name <your@email.com>
+
+## Technical details
+
+If you're looking for more information on making your keyboard work with QMK, [check out this guide](porting_your_keyboard_to_qmk.md)!
diff --git a/docs/Adding-features-to-QMK.md b/docs/adding_features_to_qmk.md
index f6f7cba20..f6f7cba20 100644
--- a/docs/Adding-features-to-QMK.md
+++ b/docs/adding_features_to_qmk.md
diff --git a/docs/Becoming-a-QMK-Collaborator.md b/docs/becoming_a_qmk_collaborator.md
index 1427675fd..1427675fd 100644
--- a/docs/Becoming-a-QMK-Collaborator.md
+++ b/docs/becoming_a_qmk_collaborator.md
diff --git a/docs/Build-Environment-Setup.md b/docs/build_environment_setup.md
index d4cec91c7..442038a58 100644
--- a/docs/Build-Environment-Setup.md
+++ b/docs/build_environment_setup.md
@@ -110,7 +110,7 @@ docker run -e keymap=default -e subproject=ez -e keyboard=ergobox --rm -v D:/Use
This will compile the targeted keyboard/keymap and leave it in your QMK directory for you to flash.
### Vagrant
-If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](https://github.com/qmk/qmk_firmware/blob/master/doc/VAGRANT_GUIDE.md).
+If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [vagrant guide](vagrant_guide.md).
## Verify Your Installation
1. If you haven't already, obtain this repository ([https://github.com/qmk/qmk_firmware](https://github.com/qmk/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application.
diff --git a/docs/BUILD_GUIDE.md b/docs/build_guide.md
index 78cf00b91..8573b0fd1 100644
--- a/docs/BUILD_GUIDE.md
+++ b/docs/build_guide.md
@@ -35,7 +35,7 @@ Debian/Ubuntu example:
sudo apt-get install gcc-avr avr-libc dfu-programmer
### Vagrant
-If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](VAGRANT_GUIDE.md).
+If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [vagrant guide](vagrant_guide.md).
## Verify Your Installation
1. If you haven't already, obtain this repository ([https://github.com/qmk/qmk_firmware](https://github.com/qmk/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application.
diff --git a/docs/build_old.md b/docs/build_old.md
index 5c2d57d02..9ae3a64ae 100644
--- a/docs/build_old.md
+++ b/docs/build_old.md
@@ -1,7 +1,7 @@
Build Firmware and Program Controller
=====================================
-## This guide may be out-dated - use doc/BUILD_GUIDE.md instead
+## This guide may be out-dated - use [build_guide.md](build_guide.md) instead
Download and Install
--------------------
diff --git a/docs/Compatible-Microcontrollers.md b/docs/compatible_microcontrollers.md
index 20ba620f6..20ba620f6 100644
--- a/docs/Compatible-Microcontrollers.md
+++ b/docs/compatible_microcontrollers.md
diff --git a/docs/Custom-Quantum-Functions.md b/docs/custom_quantum_functions.md
index 1c4929e5a..0fb1c163b 100644
--- a/docs/Custom-Quantum-Functions.md
+++ b/docs/custom_quantum_functions.md
@@ -4,7 +4,7 @@ A custom keyboard is about more than sending button presses to your computer. QM
We have structured QMK as a hierarchy:
-* Core
+* Core (`_quantum`)
* Keyboard/Revision (`_kb`)
* Keymap (`_user`)
@@ -64,14 +64,14 @@ The `record` variable contains infomation about the actual press:
```
keyrecord_t record {
- keyevent_t event {
- keypos_t key {
- uint8_t col
- uint8_t row
- }
- bool pressed
- uint16_t time
- }
++-keyevent_t event {
+| +-keypos_t key {
+| | +-uint8_t col
+| | +-uint8_t row
+| | }
+| +-bool pressed
+| +-uint16_t time
+| }
}
```
@@ -120,4 +120,4 @@ void led_set_kb(uint8_t usb_led) {
PORTB &= ~(1<<4);
}
}
-``` \ No newline at end of file
+```
diff --git a/docs/CYGWIN_GUIDE.md b/docs/cygwin_guide.md
index 05d71961a..05d71961a 100644
--- a/docs/CYGWIN_GUIDE.md
+++ b/docs/cygwin_guide.md
diff --git a/docs/Differences-from-TMK.md b/docs/differences_from_tmk.md
index 10ca329dc..10ca329dc 100644
--- a/docs/Differences-from-TMK.md
+++ b/docs/differences_from_tmk.md
diff --git a/docs/dynamic_macros.md b/docs/dynamic_macros.md
new file mode 100644
index 000000000..8fb54c322
--- /dev/null
+++ b/docs/dynamic_macros.md
@@ -0,0 +1,63 @@
+# Dynamic macros: record and replay macros in runtime
+
+QMK supports temporarily macros created on the fly. We call these Dynamic Macros. They are defined by the user from the keyboard and are lost when the keyboard is unplugged or otherwise rebooted.
+
+You can store one or two macros and they may have a combined total of 128 keypresses. You can increase this size at the cost of RAM.
+
+To enable them, first add a new element to the `planck_keycodes` enum — `DYNAMIC_MACRO_RANGE`:
+
+```c
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ LOWER,
+ RAISE,
+ BACKLIT,
+ EXT_PLV,
+ DYNAMIC_MACRO_RANGE,
+};
+```
+
+It must be the last element because `dynamic_macros.h` will add some more keycodes after it.
+
+Below it include the `dynamic_macro.h` header:
+
+```c
+ #include "dynamic_macro.h"`
+```
+
+Add the following keys to your keymap:
+
+* `DYN_REC_START1` — start recording the macro 1,
+* `DYN_REC_START2` — start recording the macro 2,
+* `DYN_MACRO_PLAY1` — replay the macro 1,
+* `DYN_MACRO_PLAY2` — replay the macro 2,
+* `DYN_REC_STOP` — finish the macro that is currently being recorded.
+
+Add the following code to the very beginning of your `process_record_user()` function:
+
+```c
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+```
+
+That should be everything necessary. To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`. To finish the recording, press the `DYN_REC_STOP` layer button. To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`.
+
+Note that it's possible to replay a macro as part of a macro. It's ok to replay macro 2 while recording macro 1 and vice versa but never create recursive macros i.e. macro 1 that replays macro 1. If you do so and the keyboard will get unresponsive, unplug the keyboard and plug it again.
+
+For users of the earlier versions of dynamic macros: It is still possible to finish the macro recording using just the layer modifier used to access the dynamic macro keys, without a dedicated `DYN_REC_STOP` key. If you want this behavior back, use the following snippet instead of the one above:
+
+```c
+ uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode);
+
+ if (!process_record_dynamic_macro(macro_kc, record)) {
+ return false;
+ }
+```
+
+If the LED's start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 128; please read the comments for it in the header).
+
+For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header.
diff --git a/docs/Eclipse.md b/docs/eclipse.md
index b9aa67637..ec5f2dc0d 100644
--- a/docs/Eclipse.md
+++ b/docs/eclipse.md
@@ -15,7 +15,7 @@ Note that this set-up has been tested on Ubuntu 16.04 only for the moment.
# Prerequisites
## Build environment
-Before starting, you must have followed the [Getting Started](/Home.md#getting-started) section corresponding to your system. In particular, you must have been able to build the firmware with [the `make` command](../#the-make-command).
+Before starting, you must have followed the [Getting Started](home.md#getting-started) section corresponding to your system. In particular, you must have been able to build the firmware with [the `make` command](../#the-make-command).
## Java
Eclipse is a Java application, so you will need to install Java 8 or more recent to be able to run it. You may choose between the JRE or the JDK, the latter being useful if you intend to do Java development.
diff --git a/docs/Embedding.md b/docs/embedding.md
index 5c2f3b31e..5c2f3b31e 100644
--- a/docs/Embedding.md
+++ b/docs/embedding.md
diff --git a/docs/FAQ.md b/docs/faq.md
index 0636d8b54..0636d8b54 100644
--- a/docs/FAQ.md
+++ b/docs/faq.md
diff --git a/docs/FAQ-Build.md b/docs/faq_build.md
index 75babb6ba..ba8b52af1 100644
--- a/docs/FAQ-Build.md
+++ b/docs/faq_build.md
@@ -1,5 +1,5 @@
## READ FIRST
-- https://github.com/jackhumbert/qmk_firmware/blob/master/doc/BUILD_GUIDE.md
+- https://github.com/qmk/qmk_firmware/blob/master/docs/build_guide.md
In short,
diff --git a/docs/FAQ-Keymap.md b/docs/faq_keymap.md
index 7c73f571f..623726ab2 100644
--- a/docs/FAQ-Keymap.md
+++ b/docs/faq_keymap.md
@@ -111,7 +111,6 @@ 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
@@ -245,4 +244,22 @@ without weak mods,
here real_mods lost state for 'physical left shift'.
weak_mods is ORed with real_mods when keyboard report is sent.
-https://github.com/tmk/tmk_core/blob/master/common/action_util.c#L57 \ No newline at end of file
+https://github.com/tmk/tmk_core/blob/master/common/action_util.c#L57
+
+## Timer functionality
+
+It's possible to start timers and read values for time-specific events - here's an example:
+
+```c
+static uint16_t key_timer;
+key_timer = timer_read();
+
+if (timer_elapsed(key_timer) < 100) {
+ // do something if less than 100ms have passed
+} else {
+ // do something if 100ms or more have passed
+}
+```
+
+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.
+
diff --git a/docs/FUSE.txt b/docs/fuse.txt
index 99ddd2d18..99ddd2d18 100644
--- a/docs/FUSE.txt
+++ b/docs/fuse.txt
diff --git a/docs/Git-subtree.md b/docs/git_subtree.md
index 4fd7f8bea..4fd7f8bea 100644
--- a/docs/Git-subtree.md
+++ b/docs/git_subtree.md
diff --git a/docs/HAND_WIRE.md b/docs/hand_wire.md
index 17ef3116f..0d3372815 100644
--- a/docs/HAND_WIRE.md
+++ b/docs/hand_wire.md
@@ -282,7 +282,7 @@ It's also important to use the `KEYMAP` function we defined earlier - this is wh
#### Compiling your firmware
-After you've written out your entire keymap, you're ready to get the firmware compiled and onto your Teensy. Before compiling, you'll need to get your [development environment set-up](/doc/BUILD_GUIDE.md) - you can skip the dfu-programmer instructions, but you'll need to download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html) to get the firmware on your Teensy.
+After you've written out your entire keymap, you're ready to get the firmware compiled and onto your Teensy. Before compiling, you'll need to get your [development environment set-up](build_guide.md) - you can skip the dfu-programmer instructions, but you'll need to download and install the [Teensy Loader](https://www.pjrc.com/teensy/loader.html) to get the firmware on your Teensy.
Once everything is installed, running `make` in the terminal should get you some output, and eventually a `<project_name>.hex` file in that folder. If you're having trouble with this step, see the end of the guide for the trouble-shooting section.
diff --git a/docs/HHKB-Alt-controller.md b/docs/hhkb_alt_controller.md
index c12d8d7ff..c12d8d7ff 100644
--- a/docs/HHKB-Alt-controller.md
+++ b/docs/hhkb_alt_controller.md
diff --git a/docs/Home.md b/docs/home.md
index bc1d25bf2..df27ebdc5 100644
--- a/docs/Home.md
+++ b/docs/home.md
@@ -1,31 +1,31 @@
# Quantum Mechanical Keyboard Firmware
-You have found the QMK Firmware documentation site. This is a keyboard firmware based on the [tmk\_keyboard firmware](http://github.com/tmk/tmk_keyboard) \([view differences](/Differences-from-TMK.md)\) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). It has also been ported to ARM chips using ChibiOS. You can use it to power your own hand-wired or custom keyboard PCB.
+You have found the QMK Firmware documentation site. This is a keyboard firmware based on the [tmk\_keyboard firmware](http://github.com/tmk/tmk_keyboard) \([view differences](differences_from_tmk.md)\) with some useful features for Atmel AVR controllers, and more specifically, the [OLKB product line](http://olkb.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/). It has also been ported to ARM chips using ChibiOS. You can use it to power your own hand-wired or custom keyboard PCB.
# Getting started
Before you are able to compile, you'll need to install an environment for AVR or ARM development. You'll find the instructions for any OS below. If you find another/better way to set things up from scratch, please consider [making a pull request](https://github.com/qmk/qmk_firmware/pulls) with your changes!
-* [Build Environment Setup](/Build-Environment-Setup.md)
-* [QMK Overview](/QMK-Overview.md)
+* [Build Environment Setup](build_environment_setup.md)
+* [QMK Overview](qmk_overview.md)
# Configuring QMK Firmware
-The QMK Firmware can be configured via the `keymaps` array data. For simply generating a [basic keycode](/Keycodes.md), you add it as an element of your `keymaps` array data. For more complicated actions, there are more advanced keycodes that are organized carefully to represent common operations, some of which can be found on the [Key Functions](/Key-Functions.md) page.
+The QMK Firmware can be configured via the `keymaps` array data. For simply generating a [basic keycode](keycodes.md), you add it as an element of your `keymaps` array data. For more complicated actions, there are more advanced keycodes that are organized carefully to represent common operations, some of which can be found on the [Key Functions](key_functions.md) page.
-For more details of the `keymaps` array, see [Keymap Overview](/Keymap.md) page.
+For more details of the `keymaps` array, see [Keymap Overview](keymap.md) page.
## Space Cadet Shift: The future, built in
-Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) the Space Cadet Shift quite well. Essentially, you hit the left Shift on its own, and you get an opening parenthesis; hit the right Shift on its own, and you get the closing one. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds. Head on over to the [Space Cadet Shift](/Space-Cadet-Shift.md) page to read about it.
+Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) the Space Cadet Shift quite well. Essentially, you hit the left Shift on its own, and you get an opening parenthesis; hit the right Shift on its own, and you get the closing one. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds. Head on over to the [Space Cadet Shift](space_cadet_shift.md) page to read about it.
## The Leader key: A new kind of modifier
-Most modifiers have to be held or toggled. But what if you had a key that indicated the start of a sequence? You could press that key and then rapidly press 1-3 more keys to trigger a macro, or enter a special layer, or anything else you might want to do. To learn more about it check out the [Leader Key](/Leader-Key.md) page.
+Most modifiers have to be held or toggled. But what if you had a key that indicated the start of a sequence? You could press that key and then rapidly press 1-3 more keys to trigger a macro, or enter a special layer, or anything else you might want to do. To learn more about it check out the [Leader Key](leader_key.md) page.
## Tap Dance: A single key can do 3, 5, or 100 different things
-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. Read more about it on the [Tap Dance](/Tap-Dance.md) page.
+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. Read more about it on the [Tap Dance](tap_dance.md) page.
## Temporarily setting the default layer
@@ -33,7 +33,7 @@ Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a co
## Macro shortcuts: Send a whole string when pressing just one key
-How would you like a single keypress to send a whole word, sentence, paragraph, or even document? Head on over to the [Macros](/Macros.md) page to read up on all aspects of Simple and Dynamic Macros.
+How would you like a single keypress to send a whole word, sentence, paragraph, or even document? Head on over to the [Macros](macros.md) page to read up on all aspects of Simple and Dynamic Macros.
## Additional keycode aliases for software-implemented layouts \(Colemak, Dvorak, etc\)
@@ -132,52 +132,3 @@ case MACRO_RAISED:
Enable the backlight from the Makefile.
-# Custom Quantum functions
-
-All of these functions are available in the `*_kb()` or `*_user()` variety. `kb` ones should only be used in the `<keyboard>/<keyboard>.c` file, and `user` ones should only be used in the `keymap.c`. The keyboard ones call the user ones - it's necessary to keep these calls to allow the keymap functions to work correctly.
-
-## `void matrix_init_*(void)`
-
-This function gets called when the matrix is initiated, and can contain start-up code for your keyboard/keymap.
-
-## `void matrix_scan_*(void)`
-
-This function gets called at every matrix scan, which is basically as often as the MCU can handle. Be careful what you put here, as it will get run a lot.
-
-## `bool process_record_*(uint16_t keycode, keyrecord_t *record)`
-
-This function gets called on every keypress/release, and is where you can define custom functionality. The return value is whether or not QMK should continue processing the keycode - returning `false` stops the execution.
-
-The `keycode` variable is whatever is defined in your keymap, eg `MO(1)`, `KC_L`, etc. and can be switch-cased to execute code whenever a particular code is pressed.
-
-The `record` variable contains infomation about the actual press:
-
-```
-keyrecord_t record {
- keyevent_t event {
- keypos_t key {
- uint8_t col
- uint8_t row
- }
- bool pressed
- uint16_t time
- }
-}
-```
-
-The conditional `if (record->event.pressed)` can tell if the key is being pressed or released, and you can execute code based on that.
-
-## `void led_set_*(uint8_t usb_led)`
-
-This gets called whenever there is a state change on your host LEDs \(eg caps lock, scroll lock, etc\). The LEDs are defined as:
-
-```
-#define USB_LED_NUM_LOCK 0
-#define USB_LED_CAPS_LOCK 1
-#define USB_LED_SCROLL_LOCK 2
-#define USB_LED_COMPOSE 3
-#define USB_LED_KANA 4
-```
-
-and can be tested against the `usb_led` with a conditional like `if (usb_led & (1<<USB_LED_CAPS_LOCK))` - if this is true, you can turn your LED on, otherwise turn it off.
-
diff --git a/docs/Key-Functions.md b/docs/key_functions.md
index 955a28061..74b80b42f 100644
--- a/docs/Key-Functions.md
+++ b/docs/key_functions.md
@@ -2,10 +2,14 @@
Your keymap can include shortcuts to common operations (called "function actions" in tmk).
-These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk `ACTION_*` functions, please see the [TMK documentation](https://github.com/qmk/qmk_firmware/blob/master/doc/keymap.md#2-action).
+These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk `ACTION_*` functions, please see the [TMK documentation](keymap.md#2-action).
Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
+### Limits of these aliases
+
+Currently, the keycodes able to used with these functions are limited to the TMK ones, meaning you can't use keycodes like `KC_TILD`, or anything greater than 0xFF. For a full list of the keycodes able to be used, [see this list](keycode.txt).
+
### Switching and toggling layers
`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
@@ -92,3 +96,26 @@ We've added shortcuts to make common modifier/tap (mod-tap) mappings more compac
* `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
* `LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped
* `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift.
+
+##### Permissive Hold
+
+As of [PR#1359](https://github.com/qmk/qmk_firmware/pull/1359/), there is a new `config.h` option:
+
+```
+#define PERMISSIVE_HOLD
+```
+
+This makes it easier for fast typists to use dual-function keys. As described in the PR:
+
+Without this, if you let go of a held key inside the tapping term, it won't register.
+
+Example: (Tapping Term = 200)
+
+- SHFT_T(KC_A) Down
+- KC_X Down
+- KC_X Up
+- SHFT_T(KC_A) Up
+
+With permissive hold, if above is typed within tapping term, this will emit `X` (so, Shift+X).
+
+With defaults, if above is typed within tapping term, this will emit `ax`, which I doubt is what anyone really wants
diff --git a/docs/keycode.txt b/docs/keycode.txt
index 687406fda..3ecf4242e 100644
--- a/docs/keycode.txt
+++ b/docs/keycode.txt
@@ -78,25 +78,25 @@ KC_F9 42 Keyboard F9
KC_F10 43 Keyboard F10
KC_F11 44 Keyboard F11
KC_F12 45 Keyboard F12
-KC_PSCREEN KC_PSCR 46 Keyboard PrintScreen1
-KC_SCKLOCK KC_SLCK 47 Keyboard Scroll Lock11
-KC_PAUSE KC_PAUS 48 Keyboard Pause1
-KC_INSERT KC_INS 49 Keyboard Insert1
-KC_HOME 4A Keyboard Home1
-KC_PGUP 4B Keyboard PageUp1
+KC_PSCREEN KC_PSCR 46 Keyboard PrintScreen
+KC_SCROLLLOCK KC_SLCK 47 Keyboard Scroll Lock
+KC_PAUSE KC_PAUS 48 Keyboard Pause
+KC_INSERT KC_INS 49 Keyboard Insert
+KC_HOME 4A Keyboard Home
+KC_PGUP 4B Keyboard PageUp
KC_DELETE KC_DEL 4C Keyboard Delete Forward
-KC_END 4D Keyboard End1
-KC_PGDOWN KC_PGDN 4E Keyboard PageDown1
-KC_RIGHT KC_RGHT 4F Keyboard RightArrow1
-KC_LEFT 50 Keyboard LeftArrow1
-KC_DOWN 51 Keyboard DownArrow1
-KC_UP 52 Keyboard UpArrow1
-KC_NUMLOCK KC_NLCK 53 Keypad Num Lock and Clear11
+KC_END 4D Keyboard End
+KC_PGDOWN KC_PGDN 4E Keyboard PageDown
+KC_RIGHT KC_RGHT 4F Keyboard RightArrow
+KC_LEFT 50 Keyboard LeftArrow
+KC_DOWN 51 Keyboard DownArrow
+KC_UP 52 Keyboard UpArrow
+KC_NUMLOCK KC_NLCK 53 Keypad Num Lock and Clear
KC_KP_SLASH KC_PSLS 54 Keypad /
KC_KP_ASTERISK KC_PAST 55 Keypad *
KC_KP_MINUS KC_PMNS 56 Keypad -
KC_KP_PLUS KC_PPLS 57 Keypad +
-KC_KP_ENTER KC_PENT 58 Keypad ENTER5
+KC_KP_ENTER KC_PENT 58 Keypad ENTER
KC_KP_1 KC_P1 59 Keypad 1 and End
KC_KP_2 KC_P2 5A Keypad 2 and Down Arrow
KC_KP_3 KC_P3 5B Keypad 3 and PageDn
@@ -109,8 +109,8 @@ KC_KP_9 KC_P9 61 Keypad 9 and PageUp
KC_KP_0 KC_P0 62 Keypad 0 and Insert
KC_KP_DOT KC_PDOT 63 Keypad . and Delete
KC_NONUS_BSLASH KC_NUBS 64 Keyboard Non-US \ and |
-KC_APPLICATION KC_APP 65 Keyboard Application10
-KC_POWER 66 Keyboard Power9
+KC_APPLICATION KC_APP 65 Keyboard Application
+KC_POWER 66 Keyboard Power
KC_KP_EQUAL KC_PEQL 67 Keypad =
KC_F13 68 Keyboard F13
KC_F14 69 Keyboard F14
@@ -138,12 +138,12 @@ KC_FIND 7E Keyboard Find
KC__MUTE 7F Keyboard Mute
KC__VOLUP 80 Keyboard Volume Up
KC__VOLDOWN 81 Keyboard Volume Down
-KC_LOCKING_CAPS 82 Keyboard Locking Caps Lock12
-KC_LOCKING_NUM 83 Keyboard Locking Num Lock12
-KC_LOCKING_SCROLL 84 Keyboard Locking Scroll Lock12
-KC_KP_COMMA KC_PCMM 85 Keypad Comma27
-KC_KP_EQUAL_AS400 86 Keypad Equal Sign29
-KC_INT1 KC_RO 87 Keyboard International115,28
+KC_LOCKING_CAPS 82 Keyboard Locking Caps Lock
+KC_LOCKING_NUM 83 Keyboard Locking Num Lock
+KC_LOCKING_SCROLL 84 Keyboard Locking Scroll Lock
+KC_KP_COMMA KC_PCMM 85 Keypad Comma
+KC_KP_EQUAL_AS400 86 Keypad Equal Sign
+KC_INT1 KC_RO 87 Keyboard International115
KC_INT2 KC_KANA 88 Keyboard International216
KC_INT3 KC_JYEN 89 Keyboard International317
KC_INT4 KC_HENK 8A Keyboard International418
@@ -161,8 +161,8 @@ KC_LANG6 95 Keyboard LANG68
KC_LANG7 96 Keyboard LANG78
KC_LANG8 97 Keyboard LANG88
KC_LANG9 98 Keyboard LANG98
-KC_ALT_ERASE 99 Keyboard Alternate Erase7
-KC_SYSREQ 9A Keyboard SysReq/Attention1
+KC_ALT_ERASE 99 Keyboard Alternate Erase
+KC_SYSREQ 9A Keyboard SysReq/Attention
KC_CANCEL 9B Keyboard Cancel
KC_CLEAR 9C Keyboard Clear
KC_PRIOR 9D Keyboard Prior
diff --git a/docs/Keycodes.md b/docs/keycodes.md
index 8e5761a59..5cf5c019d 100644
--- a/docs/Keycodes.md
+++ b/docs/keycodes.md
@@ -1,6 +1,6 @@
# Overview
-When defining a [keymap](Keymap.md) each key needs a valid key definition.
+When defining a [keymap](keymap.md) each key needs a valid key definition.
This page documents the symbols that correspond to keycodes that are available to you in QMK.
@@ -67,9 +67,9 @@ Keycodes in QMK are based on [HID Usage Keyboard/Keypad Page(0x07)](http://www.u
|KC_RSHIFT|KC_RSFT|RightShift|
|KC_RALT||RightAlt|
|KC_RGUI||Right GUI(Windows/Apple/Meta key)|
-|KC_LOCKING_CAPS||Locking Caps Lock12|
-|KC_LOCKING_NUM||Locking Num Lock12|
-|KC_LOCKING_SCROLL||Locking Scroll Lock12|
+|KC_LOCKING_CAPS||Locking Caps Lock|
+|KC_LOCKING_NUM||Locking Num Lock|
+|KC_LOCKING_SCROLL||Locking Scroll Lock|
|KC_INT4|KC_HENK|JIS Henken|
|KC_INT5|KC_MHEN|JIS Muhenken|
@@ -77,21 +77,21 @@ Keycodes in QMK are based on [HID Usage Keyboard/Keypad Page(0x07)](http://www.u
|Long Name|Short Name|Description|
|---------|----------|-----------|
-|KC_PSCREEN|KC_PSCR|PrintScreen1|
-|KC_SCKLOCK|KC_SLCK|Scroll Lock11|
-|KC_PAUSE|KC_PAUS|Pause1|
-|KC_INSERT|KC_INS|Insert1|
-|KC_HOME||Home1|
-|KC_PGUP||PageUp1|
+|KC_PSCREEN|KC_PSCR|PrintScreen|
+|KC_SCROLLLOCK|KC_SLCK|Scroll Lock|
+|KC_PAUSE|KC_PAUS|Pause|
+|KC_INSERT|KC_INS|Insert|
+|KC_HOME||Home|
+|KC_PGUP||PageUp|
|KC_DELETE|KC_DEL|Delete Forward|
-|KC_END||End1|
-|KC_PGDOWN|KC_PGDN|PageDown1|
-|KC_RIGHT|KC_RGHT|RightArrow1|
-|KC_LEFT||LeftArrow1|
-|KC_DOWN||DownArrow1|
-|KC_UP||UpArrow1|
-|KC_APPLICATION|KC_APP|Application10|
-|KC_POWER||Power9|
+|KC_END||End|
+|KC_PGDOWN|KC_PGDN|PageDown|
+|KC_RIGHT|KC_RGHT|RightArrow|
+|KC_LEFT||LeftArrow|
+|KC_DOWN||DownArrow|
+|KC_UP||UpArrow|
+|KC_APPLICATION|KC_APP|Application|
+|KC_POWER||Power|
|KC_EXECUTE||Execute|
|KC_HELP||Help|
|KC_MENU||Menu|
@@ -102,8 +102,8 @@ Keycodes in QMK are based on [HID Usage Keyboard/Keypad Page(0x07)](http://www.u
|KC_COPY||Copy|
|KC_PASTE||Paste|
|KC_FIND||Find|
-|KC_ALT_ERASE||Alternate Erase7|
-|KC_SYSREQ||SysReq/Attention1|
+|KC_ALT_ERASE||Alternate Erase|
+|KC_SYSREQ||SysReq/Attention|
|KC_CANCEL||Cancel|
|KC_CLEAR||Clear|
|KC_PRIOR||Prior|
@@ -153,12 +153,12 @@ Windows and Mac use different key codes for next track and previous track. Make
|Long Name|Short Name|Description|
|---------|----------|-----------|
-|KC_NUMLOCK|KC_NLCK|Keypad Num Lock and Clear11|
+|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 ENTER5|
+|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 PageDn|
@@ -171,8 +171,8 @@ Windows and Mac use different key codes for next track and previous track. Make
|KC_KP_0|KC_P0|Keypad 0 and Insert|
|KC_KP_DOT|KC_PDOT|Keypad . and Delete|
|KC_KP_EQUAL|KC_PEQL|Keypad =|
-|KC_KP_COMMA|KC_PCMM|Keypad Comma27|
-|KC_KP_EQUAL_AS400||Keypad Equal Sign29|
+|KC_KP_COMMA|KC_PCMM|Keypad Comma|
+|KC_KP_EQUAL_AS400||Keypad Equal Sign|
## Special Keys
diff --git a/docs/Keymap.md b/docs/keymap.md
index 53b17f401..53b17f401 100644
--- a/docs/Keymap.md
+++ b/docs/keymap.md
diff --git a/docs/Keymap-examples.md b/docs/keymap_examples.md
index 094011931..094011931 100644
--- a/docs/Keymap-examples.md
+++ b/docs/keymap_examples.md
diff --git a/docs/Kiibohd.asciidoc b/docs/kiibohd.asciidoc
index 4a7ee64d8..4a7ee64d8 100644
--- a/docs/Kiibohd.asciidoc
+++ b/docs/kiibohd.asciidoc
diff --git a/docs/Leader-Key.md b/docs/leader_key.md
index bf4d5456d..bf4d5456d 100644
--- a/docs/Leader-Key.md
+++ b/docs/leader_key.md
diff --git a/docs/License-Clarification.md b/docs/license_clarification.md
index cf30619b9..cf30619b9 100644
--- a/docs/License-Clarification.md
+++ b/docs/license_clarification.md
diff --git a/docs/License-Clarification-Details.md b/docs/license_clarification_details.md
index 77ee688bb..77ee688bb 100644
--- a/docs/License-Clarification-Details.md
+++ b/docs/license_clarification_details.md
diff --git a/docs/macros.md b/docs/macros.md
new file mode 100644
index 000000000..1418d24ab
--- /dev/null
+++ b/docs/macros.md
@@ -0,0 +1,158 @@
+# Macros - 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.
+
+**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.
+
+# Macro Definitions
+
+By default QMK assumes you don't have any macros. To define your macros you create an `action_get_macro()` function. For example:
+
+```c
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ if (record->event.pressed) {
+ switch(id) {
+ case 0:
+ return MACRO(D(LSFT), T(H), U(LSFT), T(I), D(LSFT), T(1), U(LSFT), END);
+ case 1:
+ return MACRO(D(LSFT), T(B), U(LSFT), T(Y), T(E), D(LSFT), T(1), U(LSFT), END);
+ }
+ }
+ return MACRO_NONE;
+};
+```
+
+This defines two macros which will be run when the key they are assigned to is pressed. If you'd like them to run when the release is released instead you can change the if statement:
+
+```c
+ if (!record->event.pressed) {
+```
+
+## Macro Commands
+
+A macro can include the following commands:
+
+* I() change interval of stroke in milliseconds.
+* D() press key.
+* U() release key.
+* T() type key(press and release).
+* W() wait (milliseconds).
+* END end mark.
+
+## Sending strings
+
+Sometimes you just want a key to type out words or phrases. For the most common situations we've provided `SEND_STRING()`, which will type out your string for you instead of having to build a `MACRO()`. Right now it assumes a US keymap with a QWERTY layout, so if you are using something else it may not behave as you expect.
+
+For example:
+
+```c
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ if (record->event.pressed) {
+ switch(id) {
+ case 0:
+ SEND_STRING("QMK is the best thing ever!");
+ return false;
+ }
+ }
+ return MACRO_NONE;
+};
+```
+
+## Mapping a Macro to a key
+
+Use the `M()` function within your `KEYMAP()` to call a macro. For example, here is the keymap for a 2-key keyboard:
+
+```c
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = KEYMAP(
+ M(0), M(1)
+ ),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ if (record->event.pressed) {
+ switch(id) {
+ case 0:
+ return MACRO(D(LSFT), T(H), U(LSFT), T(I), D(LSFT), T(1), U(LSFT), END);
+ case 1:
+ return MACRO(D(LSFT), T(B), U(LSFT), T(Y), T(E), D(LSFT), T(1), U(LSFT), END);
+ }
+ }
+ return MACRO_NONE;
+};
+```
+
+When you press the key on the left it will type "Hi!" and when you press the key on the right it will type "Bye!".
+
+## Naming your macros
+
+If you have a bunch of macros you want to refer to from your keymap while keeping the keymap easily readable you can name them using `#define` at the top of your file.
+
+```c
+#define M_HI M(0)
+#define M_BYE M(1)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = KEYMAP(
+ M_HI, M_BYE
+ ),
+};
+```
+
+# Advanced macro functions
+
+While working within the `action_get_macro()` function block there are some functions you may find useful. Keep in mind that while you can write some fairly advanced code within a macro if your functionality gets too complex you may want to define a custom keycode instead. Macros are meant to be simple.
+
+#### `record->event.pressed`
+
+This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is
+
+```c
+ if (record->event.pressed) {
+ // on keydown
+ } else {
+ // on keyup
+ }
+```
+
+#### `register_code(<kc>);`
+
+This sends the `<kc>` keydown event to the computer. Some examples would be `KC_ESC`, `KC_C`, `KC_4`, and even modifiers such as `KC_LSFT` and `KC_LGUI`.
+
+#### `unregister_code(<kc>);`
+
+Parallel to `register_code` function, this sends the `<kc>` keyup event to the computer. If you don't use this, the key will be held down until it's sent.
+
+#### `clear_keyboard();`
+
+This will clear all mods and keys currently pressed.
+
+#### `clear_mods();`
+
+This will clear all mods currently pressed.
+
+#### `clear_keyboard_but_mods();`
+
+This will clear all keys besides the mods currently pressed.
+
+# Advanced Example: Single-key copy/paste (hold to copy, tap to paste)
+
+This example defines a macro which sends `Ctrl-C` when pressed down, and `Ctrl-V` when released.
+
+```c
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ switch(id) {
+ case 0: {
+ if (record->event.pressed) {
+ return MACRO( D(LCTL), T(C), U(LCTL), END );
+ } else {
+ return MACRO( D(LCTL), T(V), U(LCTL), END );
+ }
+ break;
+ }
+ }
+ return MACRO_NONE;
+};
+```
+
+
diff --git a/docs/Make-Instructions.md b/docs/make_instructions.md
index 825632035..6f88f9106 100644
--- a/docs/Make-Instructions.md
+++ b/docs/make_instructions.md
@@ -164,4 +164,4 @@ If your keymap directory has a file called `Makefile` (note the filename), any M
So let's say your keyboard's makefile has `BACKLIGHT_ENABLE = yes` (or maybe doesn't even list the `BACKLIGHT_ENABLE` option, which would cause it to be off). You want your particular keymap to not have the debug console, so you make a file called `Makefile` and specify `BACKLIGHT_ENABLE = no`.
-You can use the `doc/keymap_makefile_example.md` as a template/starting point.
+You can use the `docs/keymap_makefile_example.md` as a template/starting point.
diff --git a/docs/mbed-cortex-porting.md b/docs/mbed_cortex_porting.md
index b4b1314e6..b4b1314e6 100644
--- a/docs/mbed-cortex-porting.md
+++ b/docs/mbed_cortex_porting.md
diff --git a/docs/Memory-write-error,-use-debug-for-more-info.md b/docs/memory_write_error,_use_debug_for_more_info.md
index adef2601f..adef2601f 100644
--- a/docs/Memory-write-error,-use-debug-for-more-info.md
+++ b/docs/memory_write_error,_use_debug_for_more_info.md
diff --git a/docs/Modding-your-keyboard.md b/docs/modding_your_keyboard.md
index 5d4b5d40f..2429570f5 100644
--- a/docs/Modding-your-keyboard.md
+++ b/docs/modding_your_keyboard.md
@@ -48,16 +48,25 @@ This is inside one of the macros. So when that macro executes, your keyboard pla
"Rest style" in the method signature above (the last parameter) specifies if there's a rest (a moment of silence) between the notes.
+## Music mode
-## Recording And Playing back Music
-* ```Music On``` - Turn music mode on. The default mapping is ```Lower+Upper+C```
-* ```LCTL``` - start a recording
-* play some tones
-* ```LALT``` - stop recording, stop playing
-* ```LGUI``` - play recording
-* ```LALT``` - stop playing
-* ```Music Off``` - Turn music mode off. The default mapping is ```Lower+Upper+V```
+The music mode maps your columns to a chromatic scale, and your rows to octaves. This works best with ortholinear keyboards, but can be made to work with others. All keycodes less than `0xFF` get blocked, so you won't type while playing notes - if you have special keys/mods, those will still work. A work-around for this is to jump to a different layer with KC_NOs before (or after) enabling music mode.
+Recording is experimental due to some memory issues - if you experience some weird behavior, unplugging/replugging your keyboard will fix things.
+
+Keycodes available:
+
+* `MU_ON` - Turn music mode on
+* `MU_OFF` - Turn music mode off
+* `MU_TOG` - Toggle music mode
+
+In music mode, the following keycodes work differently, and don't pass through:
+
+* `LCTL` - start a recording
+* `LALT` - stop recording/stop playing
+* `LGUI` - play recording
+* `KC_UP` - speed-up playback
+* `KC_DOWN` - slow-down playback
## MIDI functionalty
diff --git a/docs/Mouse-keys.md b/docs/mouse_keys.md
index 16e920fdb..16e920fdb 100644
--- a/docs/Mouse-keys.md
+++ b/docs/mouse_keys.md
diff --git a/docs/PCB_GUIDE.md b/docs/pcb_guide.md
index 16de71114..e07a11488 100644
--- a/docs/PCB_GUIDE.md
+++ b/docs/pcb_guide.md
@@ -119,7 +119,7 @@ A number of other keycodes have been added that you may find useful:
The extended keymap extends the number of function layers from 32 to the near-infinite value of 256. Rather than using `FN<num>` notation (still available, but limited to `FN0`-`FN31`), you can use the `FUNC(<num>)` notation. `F(<num>)` is a shortcut for this.
-The function actions are unchanged, and you can see the full list of them [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/common/action_code.h). They are explained in detail [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/doc/keymap.md#2-action).
+The function actions are unchanged, and you can see the full list of them [here](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action_code.h). They are explained in detail [here](keymap.md#2-action).
### Macros
diff --git a/docs/Porting-your-keyboard-to-QMK.md b/docs/porting_your_keyboard_to_qmk.md
index 6f291a432..05787042f 100644
--- a/docs/Porting-your-keyboard-to-QMK.md
+++ b/docs/porting_your_keyboard_to_qmk.md
@@ -1,3 +1,7 @@
+# Porting your keyboard to QMK
+
+This page describes the technical details of porting an existing keyboard to QMK. If you're looking to add your keyboard to QMK, please [look through these guidelines](adding_a_keyboard_to_qmk.md)!
+
If your keyboard is running an Atmega chip (atmega32u4 and others), it's pretty easy to get things setup for compiling your own firmware to flash onto your board. There is a `/util/new_project.sh <keyboard>` script to help get you started - you can simply pass your keyboard's name into the script, and all of the necessary files will be created. The components of each are described below.
## `/keyboards/<keyboard>/config.h`
@@ -34,7 +38,7 @@ At the bottom of the file, you'll find lots of features to turn on and off - all
## `/keyboards/<keyboard>/readme.md`
-This is where you'll describe your keyboard - please write as much as you can about it! Talking about default functionality/features is useful here. Feel free to link to external pages/sites if necessary. Images can be included here as well. This file will be rendered into a webpage at qmk.fm/keyboards/<keyboard>/.
+This is where you'll describe your keyboard - please write as much as you can about it! Talking about default functionality/features is useful here. Feel free to link to external pages/sites if necessary. Images can be included here as well, as long as they're hosted elsewhere (imgur).
## `/keyboards/<keyboard>/<keyboard>.c`
diff --git a/docs/Porting-Your-Keyboard-to-QMK-(ARM-and-other-ChibiOS-CPUs).md b/docs/porting_your_keyboard_to_qmk_(arm_and_other_chibios_cpus).md
index 436c73cb7..436c73cb7 100644
--- a/docs/Porting-Your-Keyboard-to-QMK-(ARM-and-other-ChibiOS-CPUs).md
+++ b/docs/porting_your_keyboard_to_qmk_(arm_and_other_chibios_cpus).md
diff --git a/docs/POWER.txt b/docs/power.txt
index 0abbbe48e..0abbbe48e 100644
--- a/docs/POWER.txt
+++ b/docs/power.txt
diff --git a/docs/Previously-Asked-Questions.asciidoc b/docs/previously_asked_questions.asciidoc
index 36af1f203..36af1f203 100644
--- a/docs/Previously-Asked-Questions.asciidoc
+++ b/docs/previously_asked_questions.asciidoc
diff --git a/docs/QMK-Overview.md b/docs/qmk_overview.md
index f595bd237..6fdb68c49 100644
--- a/docs/QMK-Overview.md
+++ b/docs/qmk_overview.md
@@ -30,7 +30,7 @@ The `make` command is how you compile the firmware into a .hex file, which can b
**NOTE:** To abort a make command press `Ctrl-c`
-For more details on the QMK build process see [Make Instructions](/Make-Instructions.md).
+For more details on the QMK build process see [Make Instructions](make_instructions.md).
### Simple instructions for building and uploading a keyboard
diff --git a/docs/Report-Descriptor.md b/docs/report_descriptor.md
index fd5e96c67..fd5e96c67 100644
--- a/docs/Report-Descriptor.md
+++ b/docs/report_descriptor.md
diff --git a/docs/Space-Cadet-Shift.md b/docs/space_cadet_shift.md
index a1ec256de..a1ec256de 100644
--- a/docs/Space-Cadet-Shift.md
+++ b/docs/space_cadet_shift.md
diff --git a/docs/Tap-Dance.md b/docs/tap_dance.md
index 25827a648..25827a648 100644
--- a/docs/Tap-Dance.md
+++ b/docs/tap_dance.md
diff --git a/docs/Test-for-ASCIIDOC.asciidoc b/docs/test_for_asciidoc.asciidoc
index ce57d2781..ce57d2781 100644
--- a/docs/Test-for-ASCIIDOC.asciidoc
+++ b/docs/test_for_asciidoc.asciidoc
diff --git a/docs/TMK-Based-Projects.md b/docs/tmk_based_projects.md
index 0597b04c3..0597b04c3 100644
--- a/docs/TMK-Based-Projects.md
+++ b/docs/tmk_based_projects.md
diff --git a/docs/TMK-Own-Projects.md b/docs/tmk_own_projects.md
index fb5b2c990..fb5b2c990 100644
--- a/docs/TMK-Own-Projects.md
+++ b/docs/tmk_own_projects.md
diff --git a/docs/TMK_README.md b/docs/tmk_readme.md
index e3438eda2..85cf68d57 100644
--- a/docs/TMK_README.md
+++ b/docs/tmk_readme.md
@@ -113,13 +113,13 @@ Third party libraries like LUFA, PJRC and V-USB have their own license respectiv
Build Firmware and Program Controller
-------------------------------------
-See [build environment setup](/readme.md#build-environment-setup), or the readme in the particular keyboards/* folder.
+See [build environment setup](build_environment_setup.md), or the readme in the particular keyboards/* folder.
Change your keymap
------------------
-See [doc/keymap.md](tmk_core/doc/keymap.md).
+See [keymap.md](keymap.md).
@@ -159,7 +159,7 @@ Boot Magic Configuration - Virtual DIP Switch
Boot Magic are executed during boot up time. Press Magic key below then plug in keyboard cable.
Note that you must use keys of **Layer 0** as Magic keys. These settings are stored in EEPROM so that retain your configure over power cycles.
-To avoid configuring accidentally additive salt key `KC_SPACE` also needs to be pressed along with the following configuration keys. The salt key is configurable in `config.h`. See [tmk_core/common/bootmagic.h](tmk_core/common/bootmagic.h).
+To avoid configuring accidentally additive salt key `KC_SPACE` also needs to be pressed along with the following configuration keys. The salt key is configurable in `config.h`. See [tmk_core/common/bootmagic.h](/tmk_core/common/bootmagic.h).
#### General
- Skip reading EEPROM to start with default configuration(`ESC`)
@@ -240,4 +240,4 @@ Coding Style
Other Keyboard Firmware Projects
------------------
-You can learn a lot about keyboard firmware from these. See [doc/other_projects.md](tmk_core/doc/other_projects.md).
+You can learn a lot about keyboard firmware from these. See [docs/other_projects.md](other_projects.md).
diff --git a/docs/Unicode-and-additional-language-support.md b/docs/unicode_and_additional_language_support.md
index 562dae4b5..562dae4b5 100644
--- a/docs/Unicode-and-additional-language-support.md
+++ b/docs/unicode_and_additional_language_support.md
diff --git a/docs/Unit-testing.md b/docs/unit_testing.md
index 3eac62509..3eac62509 100644
--- a/docs/Unit-testing.md
+++ b/docs/unit_testing.md
diff --git a/docs/USB-HID.md b/docs/usb_hid.md
index 1d0c45869..1d0c45869 100644
--- a/docs/USB-HID.md
+++ b/docs/usb_hid.md
diff --git a/docs/USB_NKRO.txt b/docs/usb_nkro.txt
index d9f1d1229..d9f1d1229 100644
--- a/docs/USB_NKRO.txt
+++ b/docs/usb_nkro.txt
diff --git a/docs/VAGRANT_GUIDE.md b/docs/vagrant_guide.md
index 439e78da7..61cd0815b 100644
--- a/docs/VAGRANT_GUIDE.md
+++ b/docs/vagrant_guide.md
@@ -13,11 +13,11 @@ Other than having Vagrant and Virtualbox installed and possibly a restart of you
Build Firmware and Program Controller
-------------------------------------
-See [/doc/BUIDE_GUIDE.md](/doc/BUILD_GUIDE.md), or the readme in the particular keyboards/* folder.
+See [build_guide.md](build_guide.md), or the readme in the particular keyboards/* folder.
Change your keymap
------------------
-See [/doc/keymap.md](/doc/keymap.md).
+See [keymap.md](keymap.md).
## Flashing the firmware