diff options
| author | IskandarMa <epiciskandar@gmail.com> | 2022-01-19 02:24:02 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-18 18:24:02 +0000 |
| commit | f6a7f4d4aca4a1808850e2dcd8cc223ae5202062 (patch) | |
| tree | fefc9beff20ea6438e9c1927d83319ed4c85a6b0 /docs/zh-cn/mod_tap.md | |
| parent | 8a3dfe2246c4a6182cf18349e9c4d0d28cae4ec5 (diff) | |
| download | qmk_firmware-f6a7f4d4aca4a1808850e2dcd8cc223ae5202062.tar.gz qmk_firmware-f6a7f4d4aca4a1808850e2dcd8cc223ae5202062.zip | |
update the Chinese translation based on the latest English version (#14924)
Co-authored-by: peepeetee <43021794+peepeetee@users.noreply.github.com>
Co-authored-by: Joy Lee <chang.li@westberrytech.com>
Co-authored-by: LitoMore <LitoMore@users.noreply.github.com>
Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com>
Diffstat (limited to 'docs/zh-cn/mod_tap.md')
| -rw-r--r-- | docs/zh-cn/mod_tap.md | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/docs/zh-cn/mod_tap.md b/docs/zh-cn/mod_tap.md new file mode 100644 index 000000000..5bf18a152 --- /dev/null +++ b/docs/zh-cn/mod_tap.md | |||
| @@ -0,0 +1,143 @@ | |||
| 1 | # Mod-Tap | ||
| 2 | |||
| 3 | <!--- | ||
| 4 | original document: 0.15.12:docs/mod_tap.md | ||
| 5 | git diff 0.15.12 HEAD -- docs/mod_tap.md | cat | ||
| 6 | --> | ||
| 7 | |||
| 8 | Mod-Tap键 `MT(mod, kc)` 在按住时功能为修饰键,在点击时则是常规键码。举例来讲,可以设计出一个按键,当点击时发送Escape,按下时则作为Control或Shift | ||
| 9 | |||
| 10 | 修饰键码及`OSM()`将会被缀以`MOD_`前缀,而非`KC_` | ||
| 11 | |||
| 12 | |修饰键码 |描述 | | ||
| 13 | |----------|------------------------------------------| | ||
| 14 | |`MOD_LCTL`|左Control | | ||
| 15 | |`MOD_LSFT`|左Shift | | ||
| 16 | |`MOD_LALT`|左Alt | | ||
| 17 | |`MOD_LGUI`|左GUI (Windows/Command/Meta键) | | ||
| 18 | |`MOD_RCTL`|右Control | | ||
| 19 | |`MOD_RSFT`|右Shift | | ||
| 20 | |`MOD_RALT`|右Alt (AltGr) | | ||
| 21 | |`MOD_RGUI`|右GUI (Windows/Command/Meta键) | | ||
| 22 | |`MOD_HYPR`|Hyper (左Control, Shift, Alt 及 GUI同时按下)| | ||
| 23 | |`MOD_MEH` |Meh (左Control, Shift, 及 Alt同时按下) | | ||
| 24 | |||
| 25 | 可以通过逻辑或进行组合: | ||
| 26 | |||
| 27 | ```c | ||
| 28 | MT(MOD_LCTL | MOD_LSFT, KC_ESC) | ||
| 29 | ``` | ||
| 30 | |||
| 31 | 此时按住该键将触发左Control及左Shift,点击将发送Escape。 | ||
| 32 | |||
| 33 | 为了方便配列,QMK已包含一些常见的Mod-Tap: | ||
| 34 | |||
| 35 | |键 |别名 |描述 | | ||
| 36 | |------------|-----------------------------------------------------------------|---------------------------------------------| | ||
| 37 | |`LCTL_T(kc)`|`CTL_T(kc)` |按住时为左Control,点击时为 `kc` | | ||
| 38 | |`LSFT_T(kc)`|`SFT_T(kc)` |按住时为左Shift,点击时为 `kc` | | ||
| 39 | |`LALT_T(kc)`|`LOPT_T(kc)`, `ALT_T(kc)`, `OPT_T(kc)` |按住时为左Alt,点击时为 `kc` | | ||
| 40 | |`LGUI_T(kc)`|`LCMD_T(kc)`, `LWIN_T(kc)`, `GUI_T(kc)`, `CMD_T(kc)`, `WIN_T(kc)`|按住时为左GUI,点击时为 `kc` | | ||
| 41 | |`RCTL_T(kc)`| |按住时为右 Control,点击时为 `kc` | | ||
| 42 | |`RSFT_T(kc)`| |按住时为右 Shift,点击时为 `kc` | | ||
| 43 | |`RALT_T(kc)`|`ROPT_T(kc)`, `ALGR_T(kc)` |按住时为右 Alt,点击时为 `kc` | | ||
| 44 | |`RGUI_T(kc)`|`RCMD_T(kc)`, `RWIN_T(kc)` |按住时为右 GUI,点击时为 `kc` | | ||
| 45 | |`LSG_T(kc)` |`SGUI_T(kc)`, `SCMD_T(kc)`, `SWIN_T(kc)` |按住时为左Shift及GUI,点击时为 `kc` | | ||
| 46 | |`LAG_T(kc)` | |按住时为左Alt及GUI,点击时为 `kc` | | ||
| 47 | |`RSG_T(kc)` | |按住时为右 Shift及GUI,点击时为 `kc` | | ||
| 48 | |`RAG_T(kc)` | |按住时为右 Alt及GUI,点击时为 `kc` | | ||
| 49 | |`LCA_T(kc)` | |按住时为左Control及Alt,点击时为 `kc` | | ||
| 50 | |`LSA_T(kc)` | |按住时为左Shift及Alt,点击时为 `kc` | | ||
| 51 | |`RSA_T(kc)` |`SAGR_T(kc)` |按住时为右 Shift及右 Alt (AltGr),点击时为 `kc` | | ||
| 52 | |`RCS_T(kc)` | |按住时为右 Control及右 Shift,点击时为 `kc` | | ||
| 53 | |`LCAG_T(kc)`| |按住时为左Control,Alt及GUI,点击时为 `kc` | | ||
| 54 | |`RCAG_T(kc)`| |按住时为右 Control,Alt及GUI,点击时为 `kc` | | ||
| 55 | |`C_S_T(kc)` | |按住时为左Control及Shift,点击时为 `kc` | | ||
| 56 | |`MEH_T(kc)` | |按住时为左Control,Shift及Alt,点击时为 `kc` | | ||
| 57 | |`HYPR_T(kc)`|`ALL_T(kc)` |按住时为左Control,Shift,Alt及GUI,点击时为 `kc` - 更多[参见这里](https://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)| | ||
| 58 | |||
| 59 | ## 注意 | ||
| 60 | |||
| 61 | 目前 `MT()` 的 `kc`参数限制在[基础键码集](zh-cn/keycodes_basic.md)中,因此不能使用 `LCTL()`,`KC_TILD` 及其它大于 `0xFF` 的键码。原因是,QMK使用16位的键码,其中3位是功能标记,1位标记左右修饰键,4位存储修饰键码,仅剩8位存储键码。当一次Mod-Tap触发时,只要有一个右修饰键被激发,其它的修饰键也都被视为右修饰键,因此无法混搭形如左Control+右Shift的形式,会被视为右Control+右Shift | ||
| 62 | |||
| 63 | 若展开讲就比较复杂了。迁移到32位的键码可以很大程度解决这个问题,但同时会招致配列矩阵大小翻倍,也可能会有其它未知问题。若是想用修饰键配合按键,可以考虑使用[Tap Dance/多击键](zh-cn/feature_tap_dance.md#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys) | ||
| 64 | |||
| 65 | 在使用Windows远程桌面时你可能会发现有些问题,这是因为远程桌面对键码响应过快。若要修复,可以打开远程桌面的“配置”,在“本地资源”页中的键盘属性,调整为“本地计算器”,此时功能即可恢复正常。另一个办法是加大[`TAP_CODE_DELAY`](zh-cn/config_options.md#behaviors-that-can-be-configured)。 | ||
| 66 | |||
| 67 | ## 截获Mod-Taps | ||
| 68 | |||
| 69 | ### 改变点击功能 | ||
| 70 | |||
| 71 | 若要在Mod-Tap中突破基础键码的限制,可以在 `process_record_user` 中实现。如,上档键码 `KC_DQUO` 无法与 `MT()` 共用,因为它实际上是 `LSFT(KC_QUOT)` 的别名,`KC_DQUO` 上的修饰键码会被 `MT()` 覆盖。但可以使用如下代码截获点击,手动发送 `KC_DQUO`: | ||
| 72 | |||
| 73 | ```c | ||
| 74 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||
| 75 | switch (keycode) { | ||
| 76 | case LCTL_T(KC_DQUO): | ||
| 77 | if (record->tap.count && record->event.pressed) { | ||
| 78 | tap_code16(KC_DQUO); // 点击时发送 KC_DQUO | ||
| 79 | return false; // 通过返回false阻止对该键的其它处理 | ||
| 80 | } | ||
| 81 | break; | ||
| 82 | } | ||
| 83 | return true; | ||
| 84 | } | ||
| 85 | ``` | ||
| 86 | |||
| 87 | ### 改变按住功能 | ||
| 88 | |||
| 89 | 类似地,同样可以使用这段自定义代码改变按住功能。下面的例子会在 `LT(0, kc)` (layer-tap键无实际意义,因为layer 0默认被激活)按住时对X,C和V键附加剪切,复制和粘贴功能: | ||
| 90 | |||
| 91 | ```c | ||
| 92 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||
| 93 | switch (keycode) { | ||
| 94 | case LT(0,KC_X): | ||
| 95 | if (record->tap.count && record->event.pressed) { | ||
| 96 | return true; // 返回true来发送常规键码 | ||
| 97 | } else if (record->event.pressed) { | ||
| 98 | tap_code16(C(KC_X)); // 截获按住功能来发送Ctrl-X | ||
| 99 | } | ||
| 100 | return false; | ||
| 101 | case LT(0,KC_C): | ||
| 102 | if (record->tap.count && record->event.pressed) { | ||
| 103 | return true; // 返回true来发送常规键码 | ||
| 104 | } else if (record->event.pressed) { | ||
| 105 | tap_code16(C(KC_C)); // 截获按住功能来发送Ctrl-C | ||
| 106 | } | ||
| 107 | return false; | ||
| 108 | case LT(0,KC_V): | ||
| 109 | if (record->tap.count && record->event.pressed) { | ||
| 110 | return true; // 返回true来发送常规键码 | ||
| 111 | } else if (record->event.pressed) { | ||
| 112 | tap_code16(C(KC_V)); // 截获按住功能来发送Ctrl-V | ||
| 113 | } | ||
| 114 | return false; | ||
| 115 | } | ||
| 116 | return true; | ||
| 117 | } | ||
| 118 | ``` | ||
| 119 | |||
| 120 | 在数字及字母键上使用Mod-Tap时推荐启用 `IGNORE_MOD_TAP_INTERRUPT`,以避免在快速按下下一个键时保持功能优先级。参见[忽略Mod Tap中断](zh-cn/tap_hold.md#ignore-mod-tap-interrupt)。 | ||
| 121 | |||
| 122 | ### 同时改变点击和按住功能 | ||
| 123 | |||
| 124 | 最后一个例子通过 `LT(0,KC_NO)` 实现了点击复制,按住粘贴的功能: | ||
| 125 | |||
| 126 | ```c | ||
| 127 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||
| 128 | switch (keycode) { | ||
| 129 | case LT(0,KC_NO): | ||
| 130 | if (record->tap.count && record->event.pressed) { | ||
| 131 | tap_code16(C(KC_C)); // 截获点击来发送Ctrl-C | ||
| 132 | } else if (record->event.pressed) { | ||
| 133 | tap_code16(C(KC_V)); // 截获按住功能来发送Ctrl-V | ||
| 134 | } | ||
| 135 | return false; | ||
| 136 | } | ||
| 137 | return true; | ||
| 138 | } | ||
| 139 | ``` | ||
| 140 | |||
| 141 | ## 其它信息 | ||
| 142 | |||
| 143 | 在[点按配置](zh-cn/tap_hold.md)中描述了影响Mod-Tap行为的标记。 | ||
