summaryrefslogtreecommitdiffstats
path: root/docs/feature_userspace.md
diff options
context:
space:
mode:
authordrashna <drashna@live.com>2017-11-14 06:52:34 +0100
committerJack Humbert <jack.humb@gmail.com>2017-11-14 17:02:00 +0100
commit3c15c48e6a5c584d225d369ea458f9a3f9cd3d57 (patch)
treefac0c8c59c7b1554ce4a6241ec999fb902f72e0a /docs/feature_userspace.md
parent49d8f1c5eda158ffd3570e3b631b683d59fae2ee (diff)
downloadqmk_firmware-3c15c48e6a5c584d225d369ea458f9a3f9cd3d57.tar.gz
qmk_firmware-3c15c48e6a5c584d225d369ea458f9a3f9cd3d57.tar.xz
Add "KC_MAKE" to userspace example
Diffstat (limited to 'docs/feature_userspace.md')
-rw-r--r--docs/feature_userspace.md56
1 files changed, 55 insertions, 1 deletions
diff --git a/docs/feature_userspace.md b/docs/feature_userspace.md
index edc9f6e32..eaf7aa395 100644
--- a/docs/feature_userspace.md
+++ b/docs/feature_userspace.md
@@ -30,4 +30,58 @@ Please include authorship (your name, github username, email), and optionally [a
## Example
-For a brief example, checkout `/users/_example/` until we have more reasonable and useful examples. \ No newline at end of file
+For a brief example, checkout `/users/_example/` , or for a more detailed examples check out [`template.h`](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/template.h) and [`template.c`](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/template.c) in `/users/drashna/` .
+
+### Consolidated Macros
+
+If you wanted to consoludate macros and other functions into your userspace for all of your keymaps, you can do that. The issue is that you then cannot call any function defined in your userspace, or it gets complicated. To better handle this, you can call the functions here and create new functions to use in individual keymaps.
+
+First, you'd want to go through all of your `keymap.c` files and replace `process_record_user` with `process_record_keymap` instead. This way, you can still use keyboard specific codes on those boards, and use your custom "global" keycodes as well. You'll also want to replace `SAFE_RANGE` with `NEW_SAFE_RANGE` so that you wont have any overlappind keycodes
+
+Then add `#include <name.h>` to all of your keymap.c files. This allows you to use these new keycodes without having to redefine them in each keymap.
+
+Once you've done that, you'll want to set the keycode definitions that you need to the `<name>.h` file. For instance:
+```
+#ifndef USERSPACE
+#define USERSPACE
+
+#include "quantum.h"
+
+// Define all of
+enum custom_keycodes {
+ KC_MAKE = SAFE_RANGE,
+ NEW_SAFE_RANGE //use "NEW_SAFE_RANGE" for keymap specific codes
+};
+
+#endif
+```
+
+Now you want to create the `<name>.c` file, and add this content to it:
+
+```
+#include "<name>.h"
+#include "quantum.h"
+#include "action.h"
+#include "version.h"
+
+__attribute__ ((weak))
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_MAKE:
+ if (!record->event.pressed) {
+ SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP);
+ SEND_STRING(SS_TAP(X_ENTER));
+ }
+ return false;
+ break;
+ }
+ return process_record_keymap(keycode, record);
+}
+```
+
+This will add a new `KC_MAKE` keycode that can be used in any of your keymaps. And this keycode will output `make <keyboard>:<keymap">`, making frequent compiling easier. And this will work with any keyboard and any keymap as it will output the current boards info, so that you don't have to type this out every time.
+