Skip to content

Commit 0bb7394

Browse files
s-showshelaf
authored andcommitted
update feature_tap_dance.md translation (qmk#13496)
* update feature_tap_dance.md translation * Update docs/ja/feature_tap_dance.md Co-authored-by: shela <[email protected]> * update based on comment. Co-authored-by: shela <[email protected]>
1 parent ab06887 commit 0bb7394

File tree

1 file changed

+88
-82
lines changed

1 file changed

+88
-82
lines changed

docs/ja/feature_tap_dance.md

Lines changed: 88 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# タップダンス: 1つのキーが3つ、5つまたは100の異なる動作をします
22

33
<!---
4-
original document: 0.10.33:docs/feature_tap_dance.md
5-
git diff 0.10.33 HEAD -- docs/feature_tap_dance.md | cat
4+
original document: 0.13.15:docs/feature_tap_dance.md
5+
git diff 0.13.15 HEAD -- docs/feature_tap_dance.md | cat
66
-->
77

88
## イントロダクション :id=introduction
@@ -22,7 +22,7 @@
2222
2323
`TAPPING_TERM` の時間は、あなたのタップダンスのキーのタップとタップの間の時間として許可された最大の時間で、ミリ秒単位で計測されます。例えば、もし、あなたがこの上にある `#define` ステートメントを使い、1回タップすると `Space` が送信され、2回タップすると `Enter` が送信されるタップダンスキーをセットアップした場合、175ミリ秒以内に2回キーをタップすれば `ENT` だけが送信されるでしょう。もし、1回タップしてから175ミリ秒以上待ってからもう一度タップすると、`SPC SPC` が送信されます。
2424
25-
次に、いくつかのタップダンスのキーを定義するためには、`TD()` マクロを使うのが最も簡単です。これは数字を受け取り、この数字は後で `tap_dance-actions` 配列のインデックスとして使われます。
25+
次に、いくつかのタップダンスのキーを定義するためには、`TD()` マクロを使うのが最も簡単です。これは数字を受け取り、この数字は後で `tap_dance_actions` 配列のインデックスとして使われます。
2626
2727
その後、`tap_dance_actions` 配列を使って、タップダンスキーを押した時のアクションを定義します。現在は、5つの可能なオプションがあります:
2828
@@ -85,7 +85,7 @@ qk_tap_dance_action_t tap_dance_actions[] = {
8585
[TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS),
8686
};
8787
88-
// キーコードの代わりにタップダンスキーを追加します
88+
// キーマップにキーコードの代わりにタップダンスの項目を追加します
8989
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
9090
// ...
9191
TD(TD_ESC_CAPS)
@@ -215,28 +215,30 @@ qk_tap_dance_action_t tap_dance_actions[] = {
215215
`keymap.c` ファイルの先頭、つまりキーマップの前に、以下のコードを追加します。
216216
217217
```c
218+
typedef enum {
219+
TD_NONE,
220+
TD_UNKNOWN,
221+
TD_SINGLE_TAP,
222+
TD_SINGLE_HOLD,
223+
TD_DOUBLE_TAP,
224+
TD_DOUBLE_HOLD,
225+
TD_DOUBLE_SINGLE_TAP, // Send two single taps
226+
TD_TRIPLE_TAP,
227+
TD_TRIPLE_HOLD
228+
} td_state_t;
229+
218230
typedef struct {
219231
bool is_press_action;
220-
uint8_t state;
221-
} tap;
222-
223-
enum {
224-
SINGLE_TAP = 1,
225-
SINGLE_HOLD,
226-
DOUBLE_TAP,
227-
DOUBLE_HOLD,
228-
DOUBLE_SINGLE_TAP, // シングルタップを2回送信
229-
TRIPLE_TAP,
230-
TRIPLE_HOLD
231-
};
232+
td_state_t state;
233+
} td_tap_t;
232234
233235
// タップダンスの列挙型
234236
enum {
235237
X_CTL,
236238
SOME_OTHER_DANCE
237239
};
238240
239-
uint8_t cur_dance(qk_tap_dance_state_t *state);
241+
td_state_t cur_dance(qk_tap_dance_state_t *state);
240242
241243
// xタップダンスのための関数。キーマップで利用できるようにするため、ここに置きます。
242244
void x_finished(qk_tap_dance_state_t *state, void *user_data);
@@ -273,63 +275,63 @@ void x_reset(qk_tap_dance_state_t *state, void *user_data);
273275
* 一般的な単語で2回続けて使われる文字でないこと。例えば 'pepper' 中の 'p'。もしタップダンス機能が
274276
* 文字 'p' に存在する場合、'pepper' という単語は入力するのが非常にいらだたしいものになるでしょう。
275277
*
276-
* 3つ目の点については、'DOUBLE_SINGLE_TAP' が存在しますが、これは完全にはテストされていません
278+
* 3つ目の点については、'TD_DOUBLE_SINGLE_TAP' が存在しますが、これは完全にはテストされていません
277279
*
278280
*/
279-
uint8_t cur_dance(qk_tap_dance_state_t *state) {
281+
td_state_t cur_dance(qk_tap_dance_state_t *state) {
280282
if (state->count == 1) {
281-
if (state->interrupted || !state->pressed) return SINGLE_TAP;
283+
if (state->interrupted || !state->pressed) return TD_SINGLE_TAP;
282284
// キーは割り込まれていませんが、まだ押し続けられています。'HOLD' を送信することを意味します。
283-
else return SINGLE_HOLD;
285+
else return TD_SINGLE_HOLD;
284286
} else if (state->count == 2) {
285-
// DOUBLE_SINGLE_TAP は "pepper" と入力することと、'pp' と入力したときに実際に
287+
// TD_DOUBLE_SINGLE_TAP は "pepper" と入力することと、'pp' と入力したときに実際に
286288
// ダブルタップしたい場合とを区別するためのものです。
287289
// この戻り値の推奨されるユースケースは、'ダブルタップ' 動作やマクロではなく、
288290
// そのキーの2つのキー入力を送信したい場合です。
289-
if (state->interrupted) return DOUBLE_SINGLE_TAP;
290-
else if (state->pressed) return DOUBLE_HOLD;
291-
else return DOUBLE_TAP;
291+
if (state->interrupted) return TD_DOUBLE_SINGLE_TAP;
292+
else if (state->pressed) return TD_DOUBLE_HOLD;
293+
else return TD_DOUBLE_TAP;
292294
}
293295

294296
// 誰も同じ文字を3回入力しようとしていないと仮定します(少なくとも高速には)。
295297
// タップダンスキーが 'KC_W' で、"www." と高速に入力したい場合、ここに例外を追加して
296-
// 'TRIPLE_SINGLE_TAP' を返し、'DOUBLE_SINGLE_TAP' のようにその列挙型を定義する必要があります。
298+
// 'TD_TRIPLE_SINGLE_TAP' を返し、'TD_DOUBLE_SINGLE_TAP' のようにその列挙型を定義する必要があります。
297299
if (state->count == 3) {
298-
if (state->interrupted || !state->pressed) return TRIPLE_TAP;
299-
else return TRIPLE_HOLD;
300-
} else return 8; // マジックナンバー。いつかこのメソッドはより多くの押下に対して機能するよう拡張されるでしょう
300+
if (state->interrupted || !state->pressed) return TD_TRIPLE_TAP;
301+
else return TD_TRIPLE_HOLD;
302+
} else return TD_UNKNOWN;
301303
}
302304

303-
//'x' タップダンスの 'tap' のインスタンスを生成します。
304-
static tap xtap_state = {
305+
//'x' タップダンスの 'td_tap_t' のインスタンスを生成します。
306+
static td_tap_t xtap_state = {
305307
.is_press_action = true,
306-
.state = 0
308+
.state = TD_NONE
307309
};
308310

309311
void x_finished(qk_tap_dance_state_t *state, void *user_data) {
310312
xtap_state.state = cur_dance(state);
311313
switch (xtap_state.state) {
312-
case SINGLE_TAP: register_code(KC_X); break;
313-
case SINGLE_HOLD: register_code(KC_LCTRL); break;
314-
case DOUBLE_TAP: register_code(KC_ESC); break;
315-
case DOUBLE_HOLD: register_code(KC_LALT); break;
314+
case TD_SINGLE_TAP: register_code(KC_X); break;
315+
case TD_SINGLE_HOLD: register_code(KC_LCTRL); break;
316+
case TD_DOUBLE_TAP: register_code(KC_ESC); break;
317+
case TD_DOUBLE_HOLD: register_code(KC_LALT); break;
316318
// 最後の case は高速入力用です。キーが `f` であると仮定します:
317319
// 例えば、`buffer` という単語を入力するとき、`Esc` ではなく `ff` を送信するようにします。
318320
// 高速入力時に `ff` と入力するには、次の文字は `TAPPING_TERM` 以内に入力する必要があります。
319321
// `TAPPING_TERM` はデフォルトでは 200ms です。
320-
case DOUBLE_SINGLE_TAP: tap_code(KC_X); register_code(KC_X);
322+
case TD_DOUBLE_SINGLE_TAP: tap_code(KC_X); register_code(KC_X);
321323
}
322324
}
323325

324326
void x_reset(qk_tap_dance_state_t *state, void *user_data) {
325327
switch (xtap_state.state) {
326-
case SINGLE_TAP: unregister_code(KC_X); break;
327-
case SINGLE_HOLD: unregister_code(KC_LCTRL); break;
328-
case DOUBLE_TAP: unregister_code(KC_ESC); break;
329-
case DOUBLE_HOLD: unregister_code(KC_LALT);
330-
case DOUBLE_SINGLE_TAP: unregister_code(KC_X);
328+
case TD_SINGLE_TAP: unregister_code(KC_X); break;
329+
case TD_SINGLE_HOLD: unregister_code(KC_LCTRL); break;
330+
case TD_DOUBLE_TAP: unregister_code(KC_ESC); break;
331+
case TD_DOUBLE_HOLD: unregister_code(KC_LALT);
332+
case TD_DOUBLE_SINGLE_TAP: unregister_code(KC_X);
331333
}
332-
xtap_state.state = 0;
334+
xtap_state.state = TD_NONE;
333335
}
334336

335337
qk_tap_dance_action_t tap_dance_actions[] = {
@@ -357,9 +359,11 @@ enum td_keycodes {
357359
358360
// 必要な数のタップダンス状態を含むタイプを定義します
359361
typedef enum {
360-
SINGLE_TAP,
361-
SINGLE_HOLD,
362-
DOUBLE_SINGLE_TAP
362+
TD_NONE,
363+
TD_UNKNOWN,
364+
TD_SINGLE_TAP,
365+
TD_SINGLE_HOLD,
366+
TD_DOUBLE_SINGLE_TAP
363367
} td_state_t;
364368
365369
// タップダンスの状態の型のグローバルインスタンスを作ります
@@ -368,7 +372,7 @@ static td_state_t td_state;
368372
// タップダンス関数を宣言します:
369373
370374
// 現在のタップダンスの状態を特定するための関数
371-
uint8_t cur_dance(qk_tap_dance_state_t *state);
375+
td_state_t cur_dance(qk_tap_dance_state_t *state);
372376
373377
// それぞれのタップダンスキーコードに適用する `finished` と `reset` 関数
374378
void altlp_finished(qk_tap_dance_state_t *state, void *user_data);
@@ -379,42 +383,42 @@ void altlp_reset(qk_tap_dance_state_t *state, void *user_data);
379383

380384
```c
381385
// 返却するタップダンス状態を特定します
382-
uint8_t cur_dance(qk_tap_dance_state_t *state) {
386+
td_state_t cur_dance(qk_tap_dance_state_t *state) {
383387
if (state->count == 1) {
384-
if (state->interrupted || !state->pressed) return SINGLE_TAP;
385-
else return SINGLE_HOLD;
388+
if (state->interrupted || !state->pressed) return TD_SINGLE_TAP;
389+
else return TD_SINGLE_HOLD;
386390
}
387391

388-
if (state->count == 2) return DOUBLE_SINGLE_TAP;
389-
else return 3; // 上記で返却する最大の状態の値より大きい任意の数
392+
if (state->count == 2) return TD_DOUBLE_SINGLE_TAP;
393+
else return TD_UNKNOWN; // 上記で返却する最大の状態の値より大きい任意の数
390394
}
391395

392396
// 定義する各タップダンスキーコードのとりうる状態を制御します:
393397

394398
void altlp_finished(qk_tap_dance_state_t *state, void *user_data) {
395399
td_state = cur_dance(state);
396400
switch (td_state) {
397-
case SINGLE_TAP:
401+
case TD_SINGLE_TAP:
398402
register_code16(KC_LPRN);
399403
break;
400-
case SINGLE_HOLD:
404+
case TD_SINGLE_HOLD:
401405
register_mods(MOD_BIT(KC_LALT)); // レイヤータップキーの場合、ここでは `layer_on(_MY_LAYER)` を使います
402406
break;
403-
case DOUBLE_SINGLE_TAP: // タップ時間内に2つの括弧 `((` の入れ子を可能にします
407+
case TD_DOUBLE_SINGLE_TAP: // タップ時間内に2つの括弧 `((` の入れ子を可能にします
404408
tap_code16(KC_LPRN);
405409
register_code16(KC_LPRN);
406410
}
407411
}
408412

409413
void altlp_reset(qk_tap_dance_state_t *state, void *user_data) {
410414
switch (td_state) {
411-
case SINGLE_TAP:
415+
case TD_SINGLE_TAP:
412416
unregister_code16(KC_LPRN);
413417
break;
414-
case SINGLE_HOLD:
418+
case TD_SINGLE_HOLD:
415419
unregister_mods(MOD_BIT(KC_LALT)); // レイヤータップキーの場合、ここでは `layer_off(_MY_LAYER)` を使います
416420
break;
417-
case DOUBLE_SINGLE_TAP:
421+
case TD_DOUBLE_SINGLE_TAP:
418422
unregister_code16(KC_LPRN);
419423
}
420424
}
@@ -431,20 +435,22 @@ qk_tap_dance_action_t tap_dance_actions[] = {
431435
432436
タップダンスは、MO(layer) と TG(layer) 機能を模倣することにも使用できます。この例では、1回タップすると `KC_QUOT` 、1回押してそのまま押し続けたら `MO(_MY_LAYER)` 、2回タップしたときは `TG(_MY_LAYER)` として機能するキーを設定します。
433437
434-
最初のステップは、あなたの `keymap.c` ファイルの最初のあたりに以下のコードを追加します
438+
最初のステップは、あなたの `keymap.c` ファイルの最初のあたりに以下のコードを追加することです
435439
436440
```c
441+
// 必要な数のタップダンス状態のタイプを定義します
442+
typedef enum {
443+
TD_NONE,
444+
TD_UNKNOWN,
445+
TD_SINGLE_TAP,
446+
TD_SINGLE_HOLD,
447+
TD_DOUBLE_TAP
448+
} td_state_t;
449+
437450
typedef struct {
438451
bool is_press_action;
439-
uint8_t state;
440-
} tap;
441-
442-
// 必要な数のタップダンス状態のタイプを定義します
443-
enum {
444-
SINGLE_TAP = 1,
445-
SINGLE_HOLD,
446-
DOUBLE_TAP
447-
};
452+
td_state_t state;
453+
} td_tap_t;
448454
449455
enum {
450456
QUOT_LAYR, // カスタムタップダンスキー。他のタップダンスキーはこの列挙型に追加します
@@ -453,7 +459,7 @@ enum {
453459
// タップダンスキーで使われる関数を宣言します
454460
455461
// 全てのタップダンスに関連する関数
456-
uint8_t cur_dance(qk_tap_dance_state_t *state);
462+
td_state_t cur_dance(qk_tap_dance_state_t *state);
457463
458464
// 個別のタップダンスに関連する関数
459465
void ql_finished(qk_tap_dance_state_t *state, void *user_data);
@@ -464,31 +470,31 @@ void ql_reset(qk_tap_dance_state_t *state, void *user_data);
464470

465471
```c
466472
// 現在のタップダンスの状態を決定します
467-
uint8_t cur_dance(qk_tap_dance_state_t *state) {
473+
td_state_t cur_dance(qk_tap_dance_state_t *state) {
468474
if (state->count == 1) {
469-
if (!state->pressed) return SINGLE_TAP;
470-
else return SINGLE_HOLD;
471-
} else if (state->count == 2) return DOUBLE_TAP;
472-
else return 8;
475+
if (!state->pressed) return TD_SINGLE_TAP;
476+
else return TD_SINGLE_HOLD;
477+
} else if (state->count == 2) return TD_DOUBLE_TAP;
478+
else return TD_UNKNOWN;
473479
}
474480

475481
// この例のタップダンスキーに関連付けられた "tap" 構造体を初期化します
476-
static tap ql_tap_state = {
482+
static td_tap_t ql_tap_state = {
477483
.is_press_action = true,
478-
.state = 0
484+
.state = TD_NONE
479485
};
480486

481487
// タップダンスキーの動作をコントロールする関数
482488
void ql_finished(qk_tap_dance_state_t *state, void *user_data) {
483489
ql_tap_state.state = cur_dance(state);
484490
switch (ql_tap_state.state) {
485-
case SINGLE_TAP:
491+
case TD_SINGLE_TAP:
486492
tap_code(KC_QUOT);
487493
break;
488-
case SINGLE_HOLD:
494+
case TD_SINGLE_HOLD:
489495
layer_on(_MY_LAYER);
490496
break;
491-
case DOUBLE_TAP:
497+
case TD_DOUBLE_TAP:
492498
// レイヤーが既にセットされているか確認します
493499
if (layer_state_is(_MY_LAYER)) {
494500
// レイヤーが既にセットされていたら、オフにします。
@@ -503,10 +509,10 @@ void ql_finished(qk_tap_dance_state_t *state, void *user_data) {
503509

504510
void ql_reset(qk_tap_dance_state_t *state, void *user_data) {
505511
// キーを押し続けていて今離したら、レイヤーをオフに切り替えます。
506-
if (ql_tap_state.state == SINGLE_HOLD) {
512+
if (ql_tap_state.state == TD_SINGLE_HOLD) {
507513
layer_off(_MY_LAYER);
508514
}
509-
ql_tap_state.state = 0;
515+
ql_tap_state.state = TD_NONE;
510516
}
511517

512518
// タップダンスキーを機能に関連付けます
@@ -519,7 +525,7 @@ qk_tap_dance_action_t tap_dance_actions[] = {
519525
520526
`cur_dance()` と `ql_tap_state` の使い方は、上の例と似ています。
521527
522-
`ql_finished` 関数における `case:SINGLE_TAP` は、上の例と似ています。`SINGLE_HOLD` の case では、`ql_reset()` と連動してタップダンスキーを押している間 `_MY_LAYER` に切り替わり、キーを離した時に `_MY_LAYER` から離れます。これは、`MO(_MY_LAYER)` に似ています。`DOUBLE_TAP` の case では、`_MY_LAYER` がアクティブレイヤーかどうかを確認することによって動きます。そして、その結果に基づいてレイヤーのオン・オフをトグルします。これは `TG(_MY_LAYER)` に似ています。
528+
`ql_finished` 関数における `case: TD_SINGLE_TAP` は、上の例と似ています。`TD_SINGLE_HOLD` の case では、`ql_reset()` と連動してタップダンスキーを押している間 `_MY_LAYER` に切り替わり、キーを離した時に `_MY_LAYER` から離れます。これは、`MO(_MY_LAYER)` に似ています。`TD_DOUBLE_TAP` の case では、`_MY_LAYER` がアクティブレイヤーかどうかを確認することによって動きます。そして、その結果に基づいてレイヤーのオン・オフをトグルします。これは `TG(_MY_LAYER)` に似ています。
523529
524530
`tap_dance_actions[]` は、上の例に似ています。 `ACTION_TAP_DANCE_FN_ADVANCED()` の代わりに `ACTION_TAP_DANCE_FN_ADVANCED_TIME()` を使ったことに注意してください。
525531
この理由は、私は、非タップダンスキーを使うにあたり `TAPPING_TERM` が短い(175ミリ秒以内)方が好きなのですが、タップダンスのアクションを確実に完了させるには短すぎるとわかったからです——そのため、ここでは時間を275ミリ秒に増やしています。

0 commit comments

Comments
 (0)