说明
用快捷键打开指定 APP,如果已经打开就在这个 APP 打开的窗口中循环切换。
快捷键为“CapsLock + 字母”,详见下表(可自定义)。单按 CapsLock 还是本身的锁定大小写功能。
CapsLock + e 打开 Finder.app CapsLock + t 打开 Terminal.app CapsLock + a 打开 Affinity Photo.app CapsLock + b 打开 Bear.app CapsLock + d 打开 DBeaver.app CapsLock + f 打开 Fork.app CapsLock + g 打开 Google Chrome.app CapsLock + m 打开 Activity Monitor.app CapsLock + o 打开 wpsoffice.app CapsLock + q 打开 QQ.app CapsLock + s 打开 System Preferences.app CapsLock + v 打开 Visual Studio Code.app CapsLock + w 打开 wechatwebdevtools.app CapsLock + x 打开 Xcode.app
其它设置:
CapsLock + / 显示所有的 CapsLock 快捷建,“/”在“?”键上,可以理解为 CapsLock + ? CapsLock + shift + t 在终端中打开 finder 里选中的文件夹(这项在系统设置里键盘的快捷方式中设置) CapsLock + r F5,部分 App 上的刷新不是 cmd+r 而是 F5,而 F5 可能藏在 touchbar 里 CapsLock + space 打开 Spotlight 搜索,要先在设置中将 cmd+space 换成 cmd+opt+ctrl+space
预览快捷键提醒:
需要的软件
Hammerspoon - 用快捷键打开指定 APP Karabiner-Elements - 按下 CapsLock 变成按下 Ctrl + Option + Command(单按还是大小写锁定)
配置文件
Hammerspoon 的配置 ~/.hammerspoon/init.lua
--[[ 建议将下边的代码放入 hotkey.lua 中 然后在 init.lua 中使用 require "hotkey" 来引入 init.lua 中尽量放一些全局的配置 --]] -- 需要打开的常用工具 apps = { {key = 'e', app = '/System/Library/CoreServices/Finder.app'}, {key = 't', app = '/System/Applications/Utilities/Terminal.app'}, {key = 'a', app = '/Applications/Affinity Photo.app'}, {key = 'b', app = '/Applications/Bear.app'}, {key = 'd', app = '/Applications/DBeaver.app'}, {key = 'f', app = '/Applications/Fork.app'}, {key = 'g', app = '/Applications/Google Chrome.app'}, {key = 'm', app = '/System/Applications/Utilities/Activity Monitor.app'}, {key = 'o', app = '/Applications/wpsoffice.app'}, {key = 'q', app = '/Applications/QQ.app'}, {key = 's', app = '/System/Applications/System Preferences.app'}, {key = 'v', app = '/Applications/Visual Studio Code.app'}, {key = 'w', app = '/Applications/wechatwebdevtools.app'}, {key = 'x', app = '/Applications/Xcode.app'} } -- 打开/切换到App(可以在当前 APP 的窗口间切换) local launchOrFocusWindowByPath = function(path) return function() local curApp = hs.application.frontmostApplication() if curApp:path() == path then -- 当前 APP 就是要打开的 APP 时找到当前 APP 的下一个窗口 -- APP 的所有窗口(不含 toast、scrollarea 等窗体) local wins = hs.fnutils.filter(curApp:allWindows(), function(item) return item:role() == "AXWindow" end) -- APP 没有窗口或只有一个窗口时直接返回(关闭所有窗口后程序并没有退出,所以写的是 <= 而不是 =,finder 有一个窗口是“桌面”) if #wins <= 1 then return end -- 显示当前 APP 的下一个窗口 local curWin = curApp:focusedWindow() table.sort(wins, function(x, y) return x:id() < y:id() end) wins[#wins + 1] = wins[1] -- 把第一个窗口追加到末尾,用于当前窗口是最后一个窗口时可以快速找到下一个窗口 for k, v in ipairs(wins) do if v:id() == curWin:id() then wins[k + 1]:focus() return end end else -- 当前 APP 不是要打开的 APP 时直接切到 APP 不用切换 APP 的窗口 hs.application.launchOrFocus(path) end end end -- 为常用工具绑定快捷键 hs.fnutils.each( apps, function(entry) hs.hotkey.bind( {'ctrl', 'alt', 'cmd'}, entry.key, nil, -- function() -- hs.application.launchOrFocus(entry.app) -- end launchOrFocusWindowByPath(entry.app) ) end ) alertStyle = { strokeColor = {white = 1, alpha = 0.25 }, radius = 5, textFont = 'Monaco', textSize = 16, atScreenEdge = 0 } -- 获得当前 APP 的信息 hs.hotkey.bind( {'ctrl', 'alt', 'cmd'}, '.', function() hs.alert.closeAll() hs.alert.show( string.format( '%s\n%s\n%s\n%sj', hs.window.focusedWindow():application():title(), hs.application.frontmostApplication():bundleID(), hs.window.focusedWindow():application():path(), hs.keycodes.currentSourceID() ), alertStyle ) end ) -- 显示可用快捷键清单 hs.hotkey.bind( {'ctrl', 'alt', 'cmd'}, '/', function() hs.alert.closeAll(); local info = '' if hs.application.frontmostApplication():path() == '/System/Library/CoreServices/Finder.app' then info = info .. 'Caps-T Terminal Here\n' end for k, v in ipairs(apps) do info = info .. 'Caps-' .. v.key .. ' ' .. string.match(v.app, '/([%w%s]+).app$') .. '\n' end info = info .. 'Caps-r F5' -- 最后一项加 \n 会多一个空行 hs.alert.show( info, alertStyle ) end )
Karabiner-Elements 的配置 ~/.config/karabiner/assets/complex_modifications/capslock-enhancement.json
{ "title": "CapsLock Enhancement", "rules": [ { "description": "Hyper: 按住 CapsLock", "manipulators": [ { "from": { "key_code": "caps_lock", "modifiers": { "optional": ["any"] } }, "to": [ { "key_code": "right_control", "modifiers": ["right_command", "right_option"] } ], "to_if_alone": { "hold_down_milliseconds": 100, "key_code": "caps_lock" }, "type": "basic" } ] }, { "description": "CapsLock + r to F5", "manipulators": [ { "type": "basic", "from": { "key_code": "r", "modifiers": { "mandatory": [ "right_command", "right_control", "right_option" ] } }, "to": [ { "key_code": "f5" } ] } ] } ] }