mac 使用Karabiner配置键盘映射(2)-核心标签的解读
KeyOverlaidModifier
使用场景:一般用在 改变Modifier(控制键,例如ctrl,command,alt等)的行为.
例如正常情况下,单独按下control或command 是没有反应(动作的),
但是我们可以通过KeyOverlaidModifier 增加反应.
实例:
目标:单独按下右边的command 触发Alfred
所以单独按下右边的command,触发F17就行:
COMMAND_R to F17 (COMMAND_R Only, send F17) private.command_r_only2f17 --KeyOverlaidModifier-- KeyCode::COMMAND_R, KeyCode::COMMAND_R, KeyCode::F17
为什么使用F17?因为F17不占用实体键
解说:
对KeyOverlaidModifier 下的行逐行解释:
第一行:原始按键;
第二行:和其他键组合按下时要映射的键(先按下该键,hold住,再按下其他键);
第三行:单独按下要映射的键.
单独按下右边的command,相当于按下F17,
和其他键组合按下时不变.
2.实例解说
OPTION_L to PAGEUP (OPTION_L Only, send PAGEUP) private.option_l2pageup --KeyOverlaidModifier-- KeyCode::OPTION_L, ModifierFlag::OPTION_L | ModifierFlag::NONE, KeyCode::OPTION_L, KeyCode::T,ModifierFlag::COMMAND_L
第一行多了 ModifierFlag::OPTION_L | ModifierFlag::NONE
什么意思呢?
表示按下左边的option时,不能按下其他控制键.
先按下command(不松开),再按下左边的option 不会触发;
先按下右边的option,再按下左边的option 不会触发;
如果去掉ModifierFlag::OPTION_L | ModifierFlag::NONE,会是什么效果呢?
先按下command(不松开),再按下左边的option 会触发;
先按下右边的option,再按下左边的option 会触发;
3.__KeyOverlaidModifier__的高级用法
目标:把space映射成为右边的command,但是单独按下时仍然是space.
按下space,不松开(hold住),再按下其他键,那么space映射成为command;
space+C:复制
space+V:黏贴
松开space时,在没有其他键按下的情况下,space的效果就是空格
源码:
__KeyOverlaidModifier__ KeyCode::SPACE, ModifierFlag::NONE, @begin KeyCode::COMMAND_R, @end @begin KeyCode::SPACE, @end Option::KEYTOKEY_AFTER_KEYUP, KeyCode::VK_CONFIG_FORCE_OFF_notsave_samples_keyoverlaidmodifier_use_separator_1, KeyCode::VK_CONFIG_FORCE_OFF_notsave_samples_keyoverlaidmodifier_use_separator_2,
4,进阶:为什么要使用ModifierFlag::
解说:
(1)第一个autogen 的效果:
单独按下左边的option,触发IDEA中通过接口路径搜索(原始快捷键:command+T)
(2)第二个autogen的效果:
先按下space(hold住),再按下左边的option,触发:
option+space(先按下option,再按下space)
说白了,我要达到的目的是:option_left和space,不管哪个先按下(为了兼容手误),效果都是一样的.
重点:去掉上图标红1的ModifierFlag::OPTION_L | ModifierFlag::NONE 之后,
实现第二个autogen时,会触发第一个autogen,
因为第二个autogen 中也是单独按下了左边的option,
在按下左边的option之后还有按下其他键吗?没有,见上面的先按下space(hold住),再按下左边的option
源码:
OPTION_L to PAGEUP (OPTION_L Only, send PAGEUP) private.option_l2pageup --KeyOverlaidModifier-- KeyCode::OPTION_L, ModifierFlag::OPTION_L | ModifierFlag::NONE, KeyCode::OPTION_L, KeyCode::T,ModifierFlag::COMMAND_L --KeyOverlaidModifier-- KeyCode::OPTION_L, ModifierFlag::OPTION_L |ModifierFlag::COMMAND_R | ModifierFlag::NONE, KeyCode::OPTION_L, KeyCode::SPACE,ModifierFlag::OPTION_L
参考:
https://github.com/tekezo/Karabiner/blob/version_10.22.0/src/core/server/Resources/include/checkbox/samples.xml
https://my.oschina.net/huangweiindex/blog/1649219
https://my.oschina.net/huangweiindex/blog/1786668