aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorRyan <fauxpark@gmail.com>2021-01-11 20:25:45 +1100
committerGitHub <noreply@github.com>2021-01-11 01:25:45 -0800
commit415d683ea71d516dd2a7d4f2f8e43eb4e3e993cb (patch)
tree71c028b6b7dc0ef56a6f25fdd4f4de6376ee1d69 /docs
parent5ee3cb385fd085bbe76e98e8c208ca2ac7ea4871 (diff)
downloadqmk_firmware-415d683ea71d516dd2a7d4f2f8e43eb4e3e993cb.tar.gz
qmk_firmware-415d683ea71d516dd2a7d4f2f8e43eb4e3e993cb.zip
Remove unused `action_get_macro()` usages in user files (#11165)
Diffstat (limited to 'docs')
-rw-r--r--docs/feature_macros.md113
-rw-r--r--docs/ja/feature_macros.md113
2 files changed, 12 insertions, 214 deletions
diff --git a/docs/feature_macros.md b/docs/feature_macros.md
index 36fa761d2..aa1ebc337 100644
--- a/docs/feature_macros.md
+++ b/docs/feature_macros.md
@@ -4,7 +4,7 @@ Macros allow you to send multiple keystrokes when pressing just one key. QMK has
4 4
5!> **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 a hold of your keyboard will be able to access that information by opening a text editor. 5!> **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 a hold of your keyboard will be able to access that information by opening a text editor.
6 6
7## The New Way: `SEND_STRING()` & `process_record_user` 7## `SEND_STRING()` & `process_record_user`
8 8
9Sometimes you want a key to type out words or phrases. For the most common situations, we've provided `SEND_STRING()`, which will type out a string (i.e. a sequence of characters) for you. All ASCII characters that are easily translatable to a keycode are supported (e.g. `qmk 123\n\t`). 9Sometimes you want a key to type out words or phrases. For the most common situations, we've provided `SEND_STRING()`, which will type out a string (i.e. a sequence of characters) for you. All ASCII characters that are easily translatable to a keycode are supported (e.g. `qmk 123\n\t`).
10 10
@@ -262,15 +262,15 @@ This will clear all keys besides the mods currently pressed.
262This macro will register `KC_LALT` and tap `KC_TAB`, then wait for 1000ms. If the key is tapped again, it will send another `KC_TAB`; if there is no tap, `KC_LALT` will be unregistered, thus allowing you to cycle through windows. 262This macro will register `KC_LALT` and tap `KC_TAB`, then wait for 1000ms. If the key is tapped again, it will send another `KC_TAB`; if there is no tap, `KC_LALT` will be unregistered, thus allowing you to cycle through windows.
263 263
264```c 264```c
265bool is_alt_tab_active = false; # ADD this near the begining of keymap.c 265bool is_alt_tab_active = false; // ADD this near the begining of keymap.c
266uint16_t alt_tab_timer = 0; # we will be using them soon. 266uint16_t alt_tab_timer = 0; // we will be using them soon.
267 267
268enum custom_keycodes { # Make sure have the awesome keycode ready 268enum custom_keycodes { // Make sure have the awesome keycode ready
269 ALT_TAB = SAFE_RANGE, 269 ALT_TAB = SAFE_RANGE,
270}; 270};
271 271
272bool process_record_user(uint16_t keycode, keyrecord_t *record) { 272bool process_record_user(uint16_t keycode, keyrecord_t *record) {
273 switch (keycode) { # This will do most of the grunt work with the keycodes. 273 switch (keycode) { // This will do most of the grunt work with the keycodes.
274 case ALT_TAB: 274 case ALT_TAB:
275 if (record->event.pressed) { 275 if (record->event.pressed) {
276 if (!is_alt_tab_active) { 276 if (!is_alt_tab_active) {
@@ -287,7 +287,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
287 return true; 287 return true;
288} 288}
289 289
290void matrix_scan_user(void) { # The very important timer. 290void matrix_scan_user(void) { // The very important timer.
291 if (is_alt_tab_active) { 291 if (is_alt_tab_active) {
292 if (timer_elapsed(alt_tab_timer) > 1000) { 292 if (timer_elapsed(alt_tab_timer) > 1000) {
293 unregister_code(KC_LALT); 293 unregister_code(KC_LALT);
@@ -296,104 +296,3 @@ void matrix_scan_user(void) { # The very important timer.
296 } 296 }
297} 297}
298``` 298```
299
300---
301
302## **(DEPRECATED)** The Old Way: `MACRO()` & `action_get_macro`
303
304!> This is inherited from TMK, and hasn't been updated - it's recommended that you use `SEND_STRING` and `process_record_user` instead.
305
306By default QMK assumes you don't have any macros. To define your macros you create an `action_get_macro()` function. For example:
307
308```c
309const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
310 if (record->event.pressed) {
311 switch(id) {
312 case 0:
313 return MACRO(D(LSFT), T(H), U(LSFT), T(I), D(LSFT), T(1), U(LSFT), END);
314 case 1:
315 return MACRO(D(LSFT), T(B), U(LSFT), T(Y), T(E), D(LSFT), T(1), U(LSFT), END);
316 }
317 }
318 return MACRO_NONE;
319};
320```
321
322This defines two macros which will be run when the key they are assigned to is pressed. If instead you'd like them to run when the key is released you can change the if statement:
323
324 if (!record->event.pressed) {
325
326### Macro Commands
327
328A macro can include the following commands:
329
330* I() change interval of stroke in milliseconds.
331* D() press key.
332* U() release key.
333* T() type key(press and release).
334* W() wait (milliseconds).
335* END end mark.
336
337### Mapping a Macro to a Key
338
339Use the `M()` function within your keymap to call a macro. For example, here is the keymap for a 2-key keyboard:
340
341```c
342const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
343 [0] = LAYOUT(
344 M(0), M(1)
345 ),
346};
347
348const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
349 if (record->event.pressed) {
350 switch(id) {
351 case 0:
352 return MACRO(D(LSFT), T(H), U(LSFT), T(I), D(LSFT), T(1), U(LSFT), END);
353 case 1:
354 return MACRO(D(LSFT), T(B), U(LSFT), T(Y), T(E), D(LSFT), T(1), U(LSFT), END);
355 }
356 }
357 return MACRO_NONE;
358};
359```
360
361When you press the key on the left it will type "Hi!" and when you press the key on the right it will type "Bye!".
362
363### Naming Your Macros
364
365If 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.
366
367```c
368#define M_HI M(0)
369#define M_BYE M(1)
370
371const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
372 [0] = LAYOUT(
373 M_HI, M_BYE
374 ),
375};
376```
377
378
379## Advanced Example:
380
381### Single-Key Copy/Paste
382
383This example defines a macro which sends `Ctrl-C` when pressed down, and `Ctrl-V` when released.
384
385```c
386const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
387 switch(id) {
388 case 0: {
389 if (record->event.pressed) {
390 return MACRO( D(LCTL), T(C), U(LCTL), END );
391 } else {
392 return MACRO( D(LCTL), T(V), U(LCTL), END );
393 }
394 break;
395 }
396 }
397 return MACRO_NONE;
398};
399```
diff --git a/docs/ja/feature_macros.md b/docs/ja/feature_macros.md
index 14a58ad24..c42a61b5f 100644
--- a/docs/ja/feature_macros.md
+++ b/docs/ja/feature_macros.md
@@ -9,7 +9,7 @@
9 9
10!> **セキュリティの注意**: マクロを使って、パスワード、クレジットカード番号、その他の機密情報のいずれも送信することが可能ですが、それは非常に悪い考えです。あなたのキーボードを手に入れた人は誰でもテキストエディタを開いてその情報にアクセスすることができます。 10!> **セキュリティの注意**: マクロを使って、パスワード、クレジットカード番号、その他の機密情報のいずれも送信することが可能ですが、それは非常に悪い考えです。あなたのキーボードを手に入れた人は誰でもテキストエディタを開いてその情報にアクセスすることができます。
11 11
12## 新しい方法: `SEND_STRING()` と `process_record_user` 12## `SEND_STRING()` と `process_record_user`
13 13
14単語またはフレーズを入力するキーが欲しい時があります。最も一般的な状況のために `SEND_STRING()` を提供しています。これは文字列(つまり、文字のシーケンス)を入力します。簡単にキーコードに変換することができる全ての ASCII 文字がサポートされています (例えば、`qmk 123\n\t`)。 14単語またはフレーズを入力するキーが欲しい時があります。最も一般的な状況のために `SEND_STRING()` を提供しています。これは文字列(つまり、文字のシーケンス)を入力します。簡単にキーコードに変換することができる全ての ASCII 文字がサポートされています (例えば、`qmk 123\n\t`)。
15 15
@@ -267,15 +267,15 @@ SEND_STRING(".."SS_TAP(X_END));
267このマクロは `KC_LALT` を登録し、`KC_TAB` をタップして、1000ms 待ちます。キーが再度タップされると、別の `KC_TAB` が送信されます; タップが無い場合、`KC_LALT` が登録解除され、ウィンドウを切り替えることができます。 267このマクロは `KC_LALT` を登録し、`KC_TAB` をタップして、1000ms 待ちます。キーが再度タップされると、別の `KC_TAB` が送信されます; タップが無い場合、`KC_LALT` が登録解除され、ウィンドウを切り替えることができます。
268 268
269```c 269```c
270bool is_alt_tab_active = false; # keymap.c の先頭付近にこれを追加します 270bool is_alt_tab_active = false; // keymap.c の先頭付近にこれを追加します
271uint16_t alt_tab_timer = 0; # すぐにそれらを使います 271uint16_t alt_tab_timer = 0; // すぐにそれらを使います
272 272
273enum custom_keycodes { # 素晴らしいキーコードを用意してください 273enum custom_keycodes { // 素晴らしいキーコードを用意してください
274 ALT_TAB = SAFE_RANGE, 274 ALT_TAB = SAFE_RANGE,
275}; 275};
276 276
277bool process_record_user(uint16_t keycode, keyrecord_t *record) { 277bool process_record_user(uint16_t keycode, keyrecord_t *record) {
278 switch (keycode) { # これはキーコードを利用したつまらない作業のほとんどを行います。 278 switch (keycode) { // これはキーコードを利用したつまらない作業のほとんどを行います。
279 case ALT_TAB: 279 case ALT_TAB:
280 if (record->event.pressed) { 280 if (record->event.pressed) {
281 if (!is_alt_tab_active) { 281 if (!is_alt_tab_active) {
@@ -292,7 +292,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
292 return true; 292 return true;
293} 293}
294 294
295void matrix_scan_user(void) { # とても重要なタイマー 295void matrix_scan_user(void) { // とても重要なタイマー
296 if (is_alt_tab_active) { 296 if (is_alt_tab_active) {
297 if (timer_elapsed(alt_tab_timer) > 1000) { 297 if (timer_elapsed(alt_tab_timer) > 1000) {
298 unregister_code(KC_LALT); 298 unregister_code(KC_LALT);
@@ -301,104 +301,3 @@ void matrix_scan_user(void) { # とても重要なタイマー
301 } 301 }
302} 302}
303``` 303```
304
305---
306
307## **(非推奨)** 古い方法: `MACRO()` と `action_get_macro`
308
309!> これは TMK から継承されており、更新されていません - 代わりに `SEND_STRING` と `process_record_user` を使うことをお勧めします。
310
311デフォルトでは、QMK はマクロが無いことを前提としています。マクロを定義するには、`action_get_macro()` 関数を作成します。例えば:
312
313```c
314const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
315 if (record->event.pressed) {
316 switch(id) {
317 case 0:
318 return MACRO(D(LSFT), T(H), U(LSFT), T(I), D(LSFT), T(1), U(LSFT), END);
319 case 1:
320 return MACRO(D(LSFT), T(B), U(LSFT), T(Y), T(E), D(LSFT), T(1), U(LSFT), END);
321 }
322 }
323 return MACRO_NONE;
324};
325```
326
327これは割り当てられているキーが押された時に実行される2つのマクロを定義します。キーが放された時にそれらを実行したい場合は、if 文を変更することができます。
328
329 if (!record->event.pressed) {
330
331### マクロコマンド
332
333マクロは以下のコマンドを含めることができます:
334
335* I() はストロークの間隔をミリ秒単位で変更します。
336* D() はキーを押します。
337* U() はキーを放します。
338* T() はキーをタイプ(押して放す)します。
339* W() は待ちます (ミリ秒)。
340* END 終了マーク。
341
342### マクロをキーにマッピングする
343
344マクロを呼び出すにはキーマップ内で `M()` 関数を使います。例えば、2キーのキーボードのキーマップは以下の通りです:
345
346```c
347const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
348 [0] = LAYOUT(
349 M(0), M(1)
350 ),
351};
352
353const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
354 if (record->event.pressed) {
355 switch(id) {
356 case 0:
357 return MACRO(D(LSFT), T(H), U(LSFT), T(I), D(LSFT), T(1), U(LSFT), END);
358 case 1:
359 return MACRO(D(LSFT), T(B), U(LSFT), T(Y), T(E), D(LSFT), T(1), U(LSFT), END);
360 }
361 }
362 return MACRO_NONE;
363};
364```
365
366左側のキーを押すと、"Hi!" を入力し、右側のキーを押すと "Bye!" を入力します。
367
368### マクロに名前を付ける
369
370キーマップを読みやすくしながらキーマップから参照したいマクロがたくさんある場合は、ファイルの先頭で `#define` を使って名前を付けることができます。
371
372```c
373#define M_HI M(0)
374#define M_BYE M(1)
375
376const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
377 [0] = LAYOUT(
378 M_HI, M_BYE
379 ),
380};
381```
382
383
384## 高度な例:
385
386### 単一キーのコピーと貼り付け
387
388この例は、押された時に `Ctrl-C` を送信し、放される時に `Ctrl-V` を送信するマクロを定義します。
389
390```c
391const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
392 switch(id) {
393 case 0: {
394 if (record->event.pressed) {
395 return MACRO( D(LCTL), T(C), U(LCTL), END );
396 } else {
397 return MACRO( D(LCTL), T(V), U(LCTL), END );
398 }
399 break;
400 }
401 }
402 return MACRO_NONE;
403};
404```