写博客动机:
其实这个是心血来潮,看到键盘hhkb想买ˊ_>ˋ
修改mac上的键盘映射,让键盘功能更加紧凑,顺便解决小拇指每次像瞎子一样摸来摸去的问题。。。。
App:Karabiner
A powerful and stable keyboard customizer for OS X.
- You can easily customize from prepared settings.
- You can also add your own settings by XML.
最后,这个博客发表之后才发现的,原来<kbd>
标签在CSDN博客里面是显示不出来的,但是在编辑器里面同步显示是正常的。
并且,CSDN这个编辑器好像是仿的StackEdit,布局加使用说明都好像……
最最后想吐槽的是,每次看着同步显示的都挺好,发表之后就丑得让人不想看第二次……
正文
对于我来说,平时很少用到右侧的 command 和option,而比较多用到的是delete和\,以及方向键,方向键准备用ctrl加F/B/E/A/P/N来替换。
又学会了一招,
<kbd>keyboard</kbd>
效果keyboard。然后一段话里如果出现两个<kbd>`</kbd>这里是测试<kbd>`</kbd>
的效果是——</kbd>这里是测试<kbd>
,所以最好转义一下:<kbd>\`</kbd>
,效果——`这里是测试`。Ctrl+F 光标前进一个字符,相当于右键(F = Forward)
Ctrl+B 光标后退一个字符,相当于左键(B = Backward)
Ctrl+A 移动到一行的开头(A = Ahead)
Ctrl+E 移动到一行的结尾(E = End)
Ctrl+P 上移一行,相当于上键(P = Previous)
Ctrl+N 下移一行,相当于下键(N = Next)
具体需求说明:
由于ctrl在一个角落里,而caps lock属于不经常用的键,所以我将它们两个互换(这个我在系统偏好设置>键盘>修饰键
里面已经换好了),换完之后记得每一个都试一下,看有没有冲突,比如我的Ctrl+N就和一个app(MiniNote)冲突了,将该快捷键删除之后(这时可能在系统偏好设置>快捷键
里面找不到,在app的Preferences
里面找找),方向键经测试,都可以正常使用。
接下来就要个性化定制了,因为我打字比较快,经常打错,感觉delete有点远,将它映射到不常用的右边的command-R,另外我用Markdown
编辑数学公式的时候经常会用到\,所以准备将它映射到右边的option-R,然后`换到右边大一点的delete,原来`的地方放esc。最后的键盘布局就是:
ok,现在要做的就是装好Karabiner,修改映射。
好了,我要开动啦!
现有的可以直接勾选,没有的一个(将右边的option设置为\)需要自己设置。
修改设置流程: How to add your own settings
参考配置修改文档:private.xml Reference Manual
基本语法
可以通过<item>
来增加一个新的设置:
<?xml version="1.0"?>
<root>
<item>
<name>Name of Setting</name>
<appendix>Optional Description of Setting</appendix>
<identifier>Unique Identifier of Setting</identifier>
<autogen>Behavior Definition</autogen>
<autogen>Behavior Definition</autogen>
</item>
<item>...</item>
<item>...</item>
</root>
在<item>
标签中再用<name>
, <identifier>
, <autogen>
。
<name>
<appendix>
: These values are used in Preference Pane.
<identifier>
: This value is used to identify setting. You need to specify a unique value. We recommend you to add a “private.” prefix to your identifier. It prevents conflicts with identifiers of prepared settings.
<autogen>
: Definition of this setting behavior.
For example,__KeyToKey__
,__PointingButtonToKey__
.
关键在于<autogen>
标签中的映射要写对。
实施ing:
由于它给出了KeyCode和ModifierFlag两个列表,所以一开始误以为键值分为两种类型(KeyCode和ModifierFlag)映射的时候要互相对应,实际上不是。
找到相关例子:change option_r to semicolon:
在文件夹
/Applications/Karabiner.app/Contents/Resources/
下找到现有各种设置的XML文件,包含上述例子的这个文件在
/Applications/Karabiner.app/Contents/Resources/include/checkbox/standards/option.xml
其中option_r是我以为的KeyCode
,而semicolon是我以为的ModifierFlag
。
从上述例子可以看出单个使用的键都标记为KeyCode
,修饰键做组合用时才标记为ModifierFlag
。
所以将我需要的那个设置写到Preferences>Misc & Uninstall>Custom Setting
下的private.xml
中:
<?xml version="1.0"?>
<item>
<name>Option_R to Backslash</name>
<identifier>remap.optionR2backslash</identifier>
<autogen>__KeyToKey__ KeyCode::OPTION_R, KeyCode::BACKSLASH</autogen>
</item>
</root>
然后在Preferences>Change Key
中Reload XML
。
勾选需要的映射,最终的设置:
其它复杂的设置可以参考:__KeyToKey__ syntax
.
另一个需要注意的地方:
key repeat
部分:要选on,否则一个键长按也只相当于敲击一次,删除时要一个字母一个字母点很不方便。
至于按多久触发(Delay until repeat)和重复的灵敏度(Key repeat),这两个参数可以按自己的喜好设置。