Vastiny

Nov 30, 2017

Hammerspoon Part 2: Launcher and Switcher / 启动器

这是 Hammerspoon 的第二部分,主要讲使用 Hammerspoon 做一个程序启动器和切换器。之前有用 Manico 这款优秀的软件,当然还有其它类似的,包括之前使用的 Slate 也有部分这样的功能。

但使用 Hammerspoon 之后发现了 Manico 这种程序启动器的不足,主要是 fork 进程不能比较好的分清。有少见的奇怪情况,比如打不开已经关闭的程序。这两个问题大部分启动器都不能特别好的实现,直到使用了 hammerspoon,可以完美的实现相关的功能。

基本启动器

接着 Hammerspoon part 1init.lua 文件后面写:

1
2
3
4
5
6
7
8
hs.hotkey.bind({'alt'}, '1', function () hs.application.launchOrFocus("Google Chrome") end)
hs.hotkey.bind({'alt'}, '2', function () hs.application.launchOrFocus("Terminal") end)

hs.hotkey.bind({'alt'}, 'e', function () hs.application.launchOrFocus("Finder") end)
hs.hotkey.bind({'alt'}, 'w', function () hs.application.launchOrFocus("Visual Studio Code") end)
hs.hotkey.bind({'alt'}, 'q', function () hs.application.launchOrFocus("Telegram") end)

hs.hotkey.bind({'ctrl', 'shift'}, 'escape', function () hs.application.launchOrFocus("Activity Monitor") end)

保存配置文件后, Hammerspoon 自动重载配置文件,现在按下 Alt + 1 就会打开 Google Chrome 了,按下剩余的快捷键,就会打开对应的程序,就算这个程序关闭了,或者已经最小化了,就可以正常打开。

上面的快捷键都是我自己长期使用积累的,很适合自己,如果实在不喜欢,也可以换成其它。

  • w => Writer (Visual Studio Code)
  • q => 类似 QQ 的聊天工具
  • e => 源自于 Win + e 打开 Windows 的资源管理器快捷键 :P
  • Ctrl + 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

OLDER > < NEWER