Karabiner很强,但是有一个问题一直困扰着我:
访达的各种快捷键不能定义为单个按键,比方说回车打开文件,退格返回上一级。于是很自然的就有一个解决方案是,用Karabiner将单个按键映射为组合键,而且可以设定为只在访达触发。
但是这又带来另一个问题:当使用Raycast或者聚焦的那个搜索框的时候,又需要使用退格和回车本来触发的按键,而非Karabiner映射的那个组合键。而这类没有标题栏的窗口,不会被Karabiner识别为一个当前最前的窗口,所以它还会适用对访达触发的映射规则。于是在Raycast中,按回车就会触发打开的组合键,回车原本的功能不起作用了。
这时候就需要另一个工具:Hammerspoon。这是一个可以跑lua脚本,在系统的某些事件发生的时候触发某些操作的东西。用这个工具就可以检测Raycast这类窗口是否focus。当Raycast focus的时候,使用Karabiner的命令行工具,将一个自定义的变量设置为1,然后隐藏的时候再设置为0。然后Karabiner可以设定某些映射规则仅在这个变量为0的时候才启动。
这样就能实现在访达里可以用回车打开文件,退格返回上一级(跟Windows一模一样),并且可以正常使用全局搜索框了。
访达的各种快捷键不能定义为单个按键,比方说回车打开文件,退格返回上一级。于是很自然的就有一个解决方案是,用Karabiner将单个按键映射为组合键,而且可以设定为只在访达触发。
但是这又带来另一个问题:当使用Raycast或者聚焦的那个搜索框的时候,又需要使用退格和回车本来触发的按键,而非Karabiner映射的那个组合键。而这类没有标题栏的窗口,不会被Karabiner识别为一个当前最前的窗口,所以它还会适用对访达触发的映射规则。于是在Raycast中,按回车就会触发打开的组合键,回车原本的功能不起作用了。
这时候就需要另一个工具:Hammerspoon。这是一个可以跑lua脚本,在系统的某些事件发生的时候触发某些操作的东西。用这个工具就可以检测Raycast这类窗口是否focus。当Raycast focus的时候,使用Karabiner的命令行工具,将一个自定义的变量设置为1,然后隐藏的时候再设置为0。然后Karabiner可以设定某些映射规则仅在这个变量为0的时候才启动。
这样就能实现在访达里可以用回车打开文件,退格返回上一级(跟Windows一模一样),并且可以正常使用全局搜索框了。