aboutsummaryrefslogtreecommitdiff
path: root/docs/ja/feature_macros.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/ja/feature_macros.md')
-rw-r--r--docs/ja/feature_macros.md113
1 files changed, 6 insertions, 107 deletions
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```