aboutsummaryrefslogtreecommitdiff
path: root/users/drashna/readme.md
diff options
context:
space:
mode:
Diffstat (limited to 'users/drashna/readme.md')
-rw-r--r--users/drashna/readme.md94
1 files changed, 63 insertions, 31 deletions
diff --git a/users/drashna/readme.md b/users/drashna/readme.md
index 0aa73ece9..179960322 100644
--- a/users/drashna/readme.md
+++ b/users/drashna/readme.md
@@ -75,11 +75,12 @@ For critics that think this is cheating, search "diablo 3 num lock auto cast".
75Secret Macros 75Secret Macros
76------------- 76-------------
77 77
78With help from gitter and Colinta, this adds the ability to add hidden strings to be used for macros. 78With help from gitter and Colinta, this adds the ability to add hidden macros from other users.
79 79
80I have a number of long strings that I need to use that are semi-private. This uses the `__has_include` function to check for the file. If it exists, then it includes the custom text. Otherwise, it uses some default values. 80First, I have several files that are hidden/excluded from Git/GitHub. These contain everything needed for the macros. To hide these files, open `.git/info/exclude` and add `secrets.c` and `secrets.h` to that file, below the comments.
81
82And this requires `KC_SECRET_1` through `KC_SECRET_5` to be defined in your `<name>.h` file to define the keycodes for the new macros.
81 83
82If you would *also* like to take advantage of this feature, you'll first want to make sure your "secrets" file isn't included in the repo. Open `.git/info/exclude` and add `secrets.h` to that file, below the comments.
83 84
84###### .git/info/exclude 85###### .git/info/exclude
85``` 86```
@@ -89,10 +90,44 @@ If you would *also* like to take advantage of this feature, you'll first want to
89# exclude patterns (uncomment them if you want to use them): 90# exclude patterns (uncomment them if you want to use them):
90# *.[oa] 91# *.[oa]
91# *~ 92# *~
93/users/drashna/secrets.c
92/users/drashna/secrets.h 94/users/drashna/secrets.h
93``` 95```
94 96
95Then you can create this file and add your macro strings to it: 97Then you can create these files:
98
99###### secrets.c
100
101```c
102#include "drashna.h" // replace with your keymap's "h" file, or whatever file stores the keycodes
103
104#if (__has_include("secrets.h") && !defined(NO_SECRETS))
105#include "secrets.h"
106#else
107// `PROGMEM const char secret[][x]` may work better, but it takes up more space in the firmware
108// And I'm not familiar enough to know which is better or why...
109static const char * const secret[] = {
110 "test1",
111 "test2",
112 "test3",
113 "test4",
114 "test5"
115};
116#endif
117
118bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
119 switch (keycode) {
120 case KC_SECRET_1 ... KC_SECRET_5: // Secrets! Externally defined strings, not stored in repo
121 if (!record->event.pressed) {
122 clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
123 send_string_with_delay(secret[keycode - KC_SECRET_1], MACRO_TIMER);
124 }
125 return false;
126 break;
127 }
128 return true;
129}
130```
96 131
97###### secrets.h 132###### secrets.h
98```c 133```c
@@ -107,36 +142,33 @@ static const char * const secrets[] = {
107 142
108Replacing the strings with the codes that you need. 143Replacing the strings with the codes that you need.
109 144
145###### name.c
146
110In the `<name>.c` file, you will want to add this to the top: 147In the `<name>.c` file, you will want to add this to the top:
111 148
112```c 149```c
113 150__attribute__ ((weak))
114#if (__has_include("secrets.h") && !defined(NO_SECRETS)) 151bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
115#include "secrets.h" 152 return true;
116#else 153}
117// `PROGMEM const char secret[][x]` may work better, but it takes up more space in the firmware
118// And I'm not familiar enough to know which is better or why...
119static const char * const secrets[] = {
120 "test1",
121 "test2",
122 "test3",
123 "test4",
124 "test5"
125};
126#endif
127``` 154```
155This is so that the function can be called here, and replaced in the `secrets.c` file, and so it won't error out if it doesn't exist.
156
128 157
129And then, in the `process_record_user` function, you'll want to add this block: 158And then, in the `process_record_user` function, assuming you have `return process_record_keymap(keycode, record)` here, you'll want to replace the "final" return with the following. Otherwise, you want to replace the `return true;` with `return process_record_secrets(keycode, record);`
130```c 159```c
131 case KC_SECRET_1 ... KC_SECRET_5: 160 return process_record_keymap(keycode, record) && process_record_secrets(keycode, record);
132 if (!record->event.pressed) { 161}
133 send_string_P(secret[keycode - KC_SECRET_1]);
134 }
135 return false;
136 break;
137``` 162```
138 163
139And this requires `KC_SECRET_1` through `KC_SECRET_5` to be defined in your `<name>.h` file fo the new macros, as well. 164###### rules.mk
165
166Here, you want your `/users/<name>/rules.mk` file to "detect" the existence of the `secrets.c` file, and only add it if the file exists. To do so, add this block:
167```c
168ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
169 SRC += secrets.c
170endif
171```
140 172
141Additionally, if you want to make sure that you can disable the function without messing with the file, you need to add this to your `/users/<name>/rules.mk`, so that it catches the flag: 173Additionally, if you want to make sure that you can disable the function without messing with the file, you need to add this to your `/users/<name>/rules.mk`, so that it catches the flag:
142```c 174```c
@@ -181,15 +213,15 @@ Pro Micro Hacking
181 213
182Well, you can get the QMK DFU bootloader working on the ProMicro. But you need to change fuses. 214Well, you can get the QMK DFU bootloader working on the ProMicro. But you need to change fuses.
183 215
184What worked to get into the firmware properly was: 216What worked to get into the firmware properly was:
185 217
186``` 218```
187Low: 0x5E High: 0x99 Extended: 0xF3 Lock: 0xFF 219Low: 0x5E High: 0xD9 Extended: 0xC3 Lock: 0x3F
188``` 220```
189 221
190But some of the columns and rows didn't work, like the pin mapping was wrong. Even when setting the bootloader settings. 222The reason that there was some issues before, is that JTAG was still enabled, and using some of the pins that the keyboard uses. Disabling JTAG (either by fuse, or modifying the matrix code for splits fixes the issue).
191 223
192 This is here for future reference. And the default fuse settings I believe were: 224And for reference, if you want to go back to caterina, the default fuse settings I believe were:
193 225
194``` 226```
195Low: 0xFF High: 0xD8 Extended: 0xC3 Lock: 0x3F 227Low: 0xFF High: 0xD8 Extended: 0xC3 Lock: 0x3F