Nov 30, 2017
Hammerspoon Part 2: Launcher and Switcher / 启动器
这是 Hammerspoon 的第二部分,主要讲使用 Hammerspoon 做一个程序启动器和切换器。之前有用 Manico 这款优秀的软件,当然还有其它类似的,包括之前使用的 Slate 也有部分这样的功能。
但使用 Hammerspoon 之后发现了 Manico 这种程序启动器的不足,主要是 fork 进程不能比较好的分清。有少见的奇怪情况,比如打不开已经关闭的程序。这两个问题大部分启动器都不能特别好的实现,直到使用了 hammerspoon,可以完美的实现相关的功能。
基本启动器
接着 Hammerspoon part 1 的 init.lua
文件后面写:
1 | hs.hotkey.bind({'alt'}, '1', function () hs.application.launchOrFocus("Google Chrome") end) |
保存配置文件后, Hammerspoon 自动重载配置文件,现在按下 Alt + 1
就会打开 Google Chrome
了,按下剩余的快捷键,就会打开对应的程序,就算这个程序关闭了,或者已经最小化了,就可以正常打开。
上面的快捷键都是我自己长期使用积累的,很适合自己,如果实在不喜欢,也可以换成其它。
w
=> Writer (Visual Studio Code
)q
=> 类似 QQ 的聊天工具e
=> 源自于Win + e
打开 Windows 的资源管理器快捷键 :PCtrl + Shift + ESC
=> 源自 Windows 的任务管理器,还有一个Force Quit Applications
也很方便,快捷键Alt + Command + ESC
注:Finder 如果是关闭的,使用
Alt + e
会打开 Finder 默认的目录,可以通过Command + ,
快捷键,打开属性设置界面修改。
软件名不起作用
Workflowy
作为我的生产力工具,但它的桌面端做得太差,我使用了自己修改的 Workflowy (Chrome app) 作为日常使用。
但是这种程序名称并不叫 Workflowy.app
所以需要别的方法。每个程序内部包含一个 Info.plist
文件,里面记录的程序的 BundleID
,所以可以通过这个定位到对应的程序。
这里提供两种比较好的方法:
- 使用 osascript 脚本解释器获取:
osascript -e 'id of app "Finder"'
正常情况返回com.apple.finder
- 使用内部命令:
/usr/libexec/PlistBuddy -c 'Print CFBundleIdentifier' /Applications/Safari.app/Contents/Info.plist
直接读取对应的字段
接着就可以根据 BundleID
实现更深入的绑定:
1 | hs.hotkey.bind({'alt'}, '3', function () hs.application.launchOrFocusByBundleID("com.google.Chrome.app.Default-koegeopamaoljbmhnfjbclbocehhgmkm") end) |
这样加入到 init.lua
后,完全实现了市面上大部分启动器的功能了,并且更加快速和顺畅。
最后
仓库地址: yantze/dotfiles/hammerspoon
官方 Wiki 中也提供了其他人的仓库地址:Sample Configurations