在集智俱乐部注意力与知识管理群里最近讨论起了 Alfred,一位同志建议我使用它,他跟我分享了 alfred-github-workflow 说:「感觉作为入口,它做得很不错了。可以直接搜索我的收藏夹、本地文档(甚至 PDF 内容。不过我用不到)、github、api 文档。极少找不到的时候,回车就跳到 google 搜索」。
但事实上 Alfred 的大部分搜索功能都能靠浏览器的搜索框完成,比如搜索 Steam ,在火狐中需要在搜索框上右键把它添加到收藏夹里: 然后就可以用「设定的搜索引擎关键字 + 空格 + 搜索词」来搜索了。
对于程序员来说,把 https://devdocs.io/ 的搜索框关键词设置为 doc
,未来在 VSCode 里写到一半需要查某个 API 用法的时候,只需 Command + T
唤起浏览器输入框,键入例如 doc compact
回车就能查询 lodash → compact 的用法了。
在 Chrome 上会自动添加用过的搜索引擎,只需要键入部分网址后按 Tab 即可用网址提供的搜索引擎搜索。
以下是我正在使用的部分搜索引擎:
快速唤起浏览器
所以想要实现 Alfred 的功能,我要做的就是用一个快捷键快速唤起浏览器的输入框,就像用快捷键唤起 Alfred 输入框那样。
我很快找到了网上的一段陈年代码,简单改造后如下:
# To run:
# osascript firefox-open-tab.applescript http://technosophos.com
#
# References:
# https://support.mozilla.org/en-US/questions/1130718
# https://stackoverflow.com/questions/3645763/how-do-i-instruct-applescript-to-open-a-new-firefox-window-with-a-link
#on firefoxRunning()
# tell application "System Events" to (name of processes) contains "firefox"
#end firefoxRunning
on run
#if (firefoxRunning() = false) then
# do shell script "open -a Firefox "
# delay 1
#end if
tell application "Firefox"
activate
tell application "System Events" to keystroke "t" using command down
end tell
end run
其中大部分都被注释掉了,因为我平时一直保持火狐狸浏览器在打开状态,不会遇到浏览器关闭的情况。如果想唤起 Chrome ,只需把 "Firefox"
改为 "Chrome"
。
要为这段脚本添加快捷键,需要用 Mac OS 自带的 Automator (自动操作)应用程序,创建一个快捷操作(在「系统设置 → 快捷键」里会显示为「服务」):
然后在「操作」里搜索「script」,并添加 AppleScript 或 JXA (Javascript for Automation):
把「运行 AppleScript」拖动到右侧,并把脚本黏贴进去,点击锤子图标可以高亮代码(苹果的代码编辑器居然不支持即时编译的语言服务器):
保存(默认是保存到 iCloud)后就能在快捷键设置里看到它了:
这时候可以给它加一个方便的快捷键,比如 Alfred 用的 option + space
或者打开新标签页用的 command + T
。
如果出现快捷键冲突,比如想要在访达(Finder)里面使用这个快捷键,但是它与访达的「新建标签页」冲突了,这时可以新增加一个应用快捷键,选取应用程序「访达」,并在菜单标题一栏里填写「新建标签页」,替换一个别的没啥用的功能的快捷键,比如 command + N
,这样在访达里也能快速调用浏览器输入框了:
权限设置
这时在 VSCode 里使用这个快捷键可能会被系统拦下来,说一通「操作“运行 AppleScript”遇到了错误:““System Events”遇到一个错误:“com.automator.runner.xpc”不允许发送按键。”」之类的模棱两可的官腔。
这意味着在使用这个系统服务快捷键前要先在「安全性与隐私 → 辅助功能」里把「自动操作」和「 VSCode 」勾选上:
如果想在其他应用里使用这个快捷键,也得点击「+」把这个应用添加到「辅助功能」列表里并勾选。
如此一来,想要查看某个库的 API 时,只需在 VSCode 里用 Shift + Control + Command + →
扩大选取选中一段文字,比如选中 param.macro
,然后按 Command + T
唤出一个崭新的浏览器输入框,并键入 npm Command+V
就可以搜其 API 了:
其他输入框功能
在火狐浏览器里,输入框也带有「使用其他搜索引擎搜索」的功能,比如装了 Wikipedia + Wikiwand 插件后,使用搜索框下面的图标就能在 Wikiwand 里打开搜索词了。
如果输入的关键字包含在某个已经打开的 Tab 的 Title 里、历史记录里、收藏夹里,那么也会显示在下拉列表里,可以直接打开。
计算器、单位换算、单词句子翻译等等功能是 Google 自带的,输入并回车后半秒就能看到结果,所以也能算是浏览器输入框带有的功能吧。
当然,不得不承认 Alfred 等工具能调用 AppleScript,从而管理大量自定义服务(我刚刚定义的「唤起并打开浏览器新标签页」就是一个自定义服务),可以想见,当我自定义了数十个这样的服务后,可能会记不清其快捷键,这就是 Alfred 上场的时候了。
不过目前我还没想到本地还有什么可以自动化的操作,毕竟现在我的文档都在印象笔记和 Notion 上,代码都在 Github 上,而这些在线服务的搜索引擎都可以被浏览器直接调用。本地其实只是作为 git repo 的缓存而已,没有什么值得搜索和自动化的东西啦。