让 Caps Lock 键变得实用

来源:互联网 发布:c语言函数调用过程 编辑:程序博客网 时间:2024/06/06 04:56

http://eamesliu.com/post/101419356939/caps-lock-key-to-hyper

在这之前我有将 Caps Lock 键改为 Control 键使用了一段时间。一是因为 Caps Lock 键我使用的次数很少,完全可以用 Shift 键代替其作用。二是因为 Control 键在键盘上的位置不太好按。1 所以将 Control 键改在 Caps Lock 键的位置,用左手小指就可以轻松按到,并且左手可以保持不离开键盘主区域。同时也可以利用 Control 加其它键位形成比较容易按到的快捷键。

不过今天看了 Brett Terpstra 的这篇文章和 Steve Losh 的这篇文章后,我决定尝试一下他们的用法。

Steve 将按键分为三种类型:

  • 一种是按下去之后会改变其它按键的状态,但是只按下它们自己通常不会起任何作用,比如 Shift、Control。
  • 第二种按键是你按下之后释放,它自己就会形成一定功能,但是你通常不会按住它来重复它的功能,比如 Esc。
  • 第三种按键是你有时候只会按一下,有时候需要重复按(或按住),比如按住空格键会输出一连串空格,按住 Delete 键就会就会删除一连串文字。

明显前两种按键有截然不同的使用方式,并且只作用在它们自己的使用方式。所以 Steve 的思路是将这两种按键结合成一个按键,并且不会丢失它们自己的功能。

他将 Caps Lock 键改为按一下是 Esc ,按住不放为 Control + Option + Command + Shift 的组合键,并称这个新的 Caps Lock 键为 Hyper 键。

前面有提到我将 Control 键改到 Caps Lock 位置,但是经过一段时间的使用后我发现自己对 Control 键本身的使用频率并不高,所以改为使用频率更高的 Esc 键或许更好。2 还有我对这个键位更多的使用是和其它按键形成快捷键,比如 Control(Caps Lock 位置)-IKJL 为光标上下左右移动。Hyper 键比 Control 更好的地方在于它不容易与其它快捷键冲突,所以我决定尝试他们的用法。

首先你需要到系统偏好设置里将 Caps Lock 键改为「No Action」。

Caps Lock to No Action

然后下载 Seil(原 PCKeyboardHack),将 Caps Lock 键的 keycode 改为「80」。Keycode 80 也就是 F19 键,但是我们键盘上一般没有这个键,所以不用担心会冲突。

Seil

接下来下载 Karabiner(原 KeyRemap4MacBook),在「Misc & Uninstall」中点击「Open private.xml」,会弹出来一个文档。

Karabiner

打开该文档,将下面的代码替换进去:

 <?xml version="1.0"?> <root> <item> <name>F19 to F19</name> <appendix>(F19 to Hyper (ctrl+shift+cmd+opt) + F19 Only, send escape)</appendix> <identifier>private.f192f19_escape</identifier> <autogen> --KeyOverlaidModifier-- KeyCode::F19, KeyCode::COMMAND_L, ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L, KeyCode::ESCAPE </autogen> </item> <item> <name>Hyper K to Down</name> <appendix>(Hyper-K to Down arrow)</appendix> <identifier>private.hyper-k-down</identifier> <autogen> --KeyToKey-- KeyCode::K, ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L, KeyCode::CURSOR_DOWN </autogen> </item> <item> <name>Hyper I to Up</name> <appendix>(Hyper-I to Up arrow)</appendix> <identifier>private.hyper-i-up</identifier> <autogen> --KeyToKey-- KeyCode::I, ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L, KeyCode::CURSOR_UP </autogen> </item> <item> <name>Hyper J to Left</name> <appendix>(Hyper-J to Left arrow)</appendix> <identifier>private.hyper-j-left</identifier> <autogen> --KeyToKey-- KeyCode::J, ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L, KeyCode::CURSOR_LEFT </autogen> </item> <item> <name>Hyper L to Right</name> <appendix>(Hyper-L to Right arrow)</appendix> <identifier>private.hyper-l-right</identifier> <autogen> --KeyToKey-- KeyCode::L, ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L, KeyCode::CURSOR_RIGHT </autogen> </item> <item> <name>Hyper H to Beginning of Line</name> <appendix>(Hyper-H to Beginning of Line)</appendix> <identifier>private.hyper-h-beginning-of-line</identifier> <autogen> --KeyToKey-- KeyCode::H, ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L, KeyCode::CURSOR_LEFT, ModifierFlag::COMMAND_L </autogen> </item> <item> <name>Hyper ; to End of Line</name> <appendix>(Hyper-; to End of Line)</appendix> <identifier>private.hyper-;-end-of-line</identifier> <autogen> --KeyToKey-- KeyCode::SEMICOLON, ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L, KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L </autogen> </item> <item> <name>Hyper U to Top</name> <appendix>(Hyper-U to Top)</appendix> <identifier>private.hyper-u-top</identifier> <autogen> --KeyToKey-- KeyCode::U, ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L, KeyCode::CURSOR_UP, ModifierFlag::COMMAND_L </autogen> </item> <item> <name>Hyper M to Bottom</name> <appendix>(Hyper-M to Bottom)</appendix> <identifier>private.hyper-m-bottom</identifier> <autogen> --KeyToKey-- KeyCode::M, ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L, KeyCode::CURSOR_DOWN, ModifierFlag::COMMAND_L </autogen> </item> <item> <name>Disable Sysdiagnose DOT Key</name> <appendix>Disable Sysdiagnose DOT Key</appendix> <identifier>private.disable_sysdiagnose_dot_key</identifier> <autogen> --KeyToKey-- KeyCode::DOT, ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L | ModifierFlag::COMMAND_L, KeyCode::VK_NONE </autogen> </item>   <item> <name>Disable Sysdiagnose COMMA Key</name> <appendix>Disable Sysdiagnose COMMA Key</appendix> <identifier>private.disable_sysdiagnose_comma_key</identifier> <autogen> --KeyToKey-- KeyCode::COMMA, ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L | ModifierFlag::COMMAND_L, KeyCode::VK_NONE </autogen> </item>   <item> <name>Disable Sysdiagnose Foward Slash Key</name> <appendix>Disable Sysdiagnose FORWARD SLASH Key</appendix> <identifier>private.disable_sysdiagnose_forward_slash</identifier> <autogen> --KeyToKey-- KeyCode::SLASH, ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L | ModifierFlag::COMMAND_L, KeyCode::VK_NONE </autogen> </item> </root>   <root> <inputsourcedef> <name>MY_keylayout_zh_Hans</name> <inputsourceid_prefix>com.apple.inputmethod.SCIM.ITABC</inputsourceid_prefix> </inputsourcedef>   <item> <name>Markdown</name> <identifier>private.quick_dotOfEnglish</identifier> <inputsource_only>MY_keylayout_zh_Hans</inputsource_only<!--<uielementrole_only>AXTextArea, AXTextField</uielementrole_only>-->   <!-- ` --> <autogen>__KeyToKey__ KeyCode::BACKQUOTE, KeyCode::CAPSLOCK, KeyCode::BACKQUOTE, KeyCode::CAPSLOCK, </autogen>   <!-- - --> <autogen>__KeyToKey__ KeyCode::MINUS, KeyCode::CAPSLOCK, KeyCode::MINUS, KeyCode::CAPSLOCK, </autogen>   <!-- # --> <autogen>__KeyToKey__ KeyCode::KEY_3, ModifierFlag::SHIFT_R, KeyCode::CAPSLOCK, KeyCode::KEY_3, ModifierFlag::SHIFT_R, KeyCode::CAPSLOCK, </autogen> <autogen>__KeyToKey__ KeyCode::KEY_3, ModifierFlag::SHIFT_L, KeyCode::CAPSLOCK, KeyCode::KEY_3, ModifierFlag::SHIFT_L, KeyCode::CAPSLOCK, </autogen>   <!-- * --> <autogen>__KeyToKey__ KeyCode::KEY_8, ModifierFlag::SHIFT_R, KeyCode::CAPSLOCK, KeyCode::KEY_8, ModifierFlag::SHIFT_R, KeyCode::CAPSLOCK, </autogen> <autogen>__KeyToKey__ KeyCode::KEY_8, ModifierFlag::SHIFT_L, KeyCode::CAPSLOCK, KeyCode::KEY_8, ModifierFlag::SHIFT_L, KeyCode::CAPSLOCK, </autogen> </item> </root>
view rawprivate.xml hosted with ❤ by GitHub

然后回到「Change Key」中点击「ReloadXML」,就会看到下面图片中的选项了:

Hyper

我对 Brett Terpstra 的代码进行了一些修改,比如他的 Hyper-J 和 Hyper-K 是将光标移到最底端和最顶端,Hyper-H 和 Hyper-L 是将光标移到行首和行尾。我修改后的版本是:

  • Hyper-I / Hyper-K / Hyper-J / Hyper-L:光标上下左右移动一格。
  • Hyper-H / Hyper-;:光标移动到行首和行尾。
  • Hyper-U / Hyper-M:光标移动到段首和段尾。

如果你有别的需求,可以参考官方文档进行定制。

你也可以用 Hyper 键来做一些快捷启动,比如我设置了 Hyper-F 启动 Finder,Hyper-B 启动 Safari,Hyper-N 启动 nvALT,Hyper-P 启动 1Password mini,Hyper-D 是欧陆词典的 Light Peek,Hype-C 是用 Chrome 打开 Safari 当前的网页,Hyper-V 是 LaunchBar 的剪切板功能快捷键。这些快捷键都可以在应用内、BetterTouchTool 或者 Keyboard Maestro 中设置。

最后一个需要注意的地方是,在 Karabiner > Key Repeat > Key Overlaid Modifier 中,「Timeout」的值可以调小一点,比如调为 300ms(原始值为 1000ms)。这个值的意思是,你按下 Caps Lock 键后,300ms 内松开它都是作用为 Esc 键。超过 300ms,就作用为 Hyper 键。

Timeout

Enjoy your Caps Lock key.


  1. 既不是大拇指能轻松够到的 Command 键和 Option 键位置,也不是左下角 Fn 键这种容易辨认的位置。而且我习惯打字时将双手靠在触控板的两边上(我使用 MacBook 默认的键盘),所以 Control 键一般处于被掌短肌覆盖的位置,如果想要按到 Control 键的话会使我的整个左手偏离键盘主区域。不过也有一些键盘直接将 Control 键做到了 Caps Lock 键的位置上,比如 HHKB。 ↩

  2. 为了习惯这个新的 Esc 键,我将原来的 Esc 键改为 Dashboard,目前还有一两个小插件需要用到 Dashboard。也许以后会将 Esc 键改为其它更实用的按键。(Update:干掉了 Dashboard,将 Esc 键改成 Show Desktop。) ↩


0 0
原创粉丝点击