在去年 WWDC21 上,Apple 推出的 macOS Monterey 将捷径带到了 macOS 上。不仅给 macOS 带来了一种新的执行重复步骤的方法,还使得捷径的编写方便了许多。

但是美中不足的是,Apple 并没有将 iOS 上的「捷径自动化」功能一并带来。在 iOS 的捷径上,我们通过「捷径自动化」功能在特定的时间、地点或者某个满足某个条件的时候,自动执行某个捷径。为了解决这一个痛点,所以来自德国的开发者 Lars Gerckens 就开发了 Shortery,为 macOS 上的捷径补齐了自动化的功能。

应用介绍

目前可以通过 官网 或者 App Store 下载并安装 Shortery(以下简称为它或者软件),初次打开它会看到如下的界面,左侧是作者已经创建好的触发器,点击左下角的「Add Shortcut Trigger」可以添加新的触发器。此处的触发器,就等同于 iOS 「捷径自动化」功能。

目前该软件可以支持多达 12 种的捷径触发方式,具体包含:

  1. 在应用启动、退出或是处于活跃/非活跃状态运行
  2. 指定时间运行,可选择每分钟,每小时,每天每周重复
  3. 电脑唤醒或休眠时运行
  4. 用户登录或登出时运行
  5. 使用键盘快捷键组合激活运行
  6. 当系统外观处于浅色或深色时运行
  7. 电池电量达到一定的百分比时运行
  8. 专注模式打开或关闭时运行
  9. 屏幕解锁或者锁定时运行
  10. 蓝牙、USB 设备、耳机接口连接或断开时运行
  11. 外接显示器的连接或断开时运行
  12. Wi-Fi 的连接或者断开时运行

点击右上角的 Preferences,可以在里面设置开启开机自启和 debug 模式,对于用户来说,只需要开启勾选「Start at login」即可。

接下来,作者就以一系列具体的例子,来向大家介绍 macOS 上的一些自动化实例。

电脑休眠自动关灯

在作者以前的 文章 中,为了实现关闭屏幕挂灯的同时并让电脑休眠,专门制作了一个捷径,可以一键切换电脑及挂灯的开关,但美中不足的是每次都要呼叫 Siri 或者手动执行一次捷径。

但有了该软件之后,可以省去主动执行的操作,全部由自动化实现。简而言之:添加一个电脑休眠的触发器,如果电脑进入休眠状态,就执行捷径,关闭 HomeKit 里的挂灯。

硬件准备

此处使用的挂灯是否是智能挂灯并不重要,重要的是确认挂灯是否支持断电记忆功能。作者使用的是明基的屏幕挂灯,是支持断电记忆功能的。所以为了能够将挂灯接入 HomeKit,我在挂灯的 USB 电源前面增加了一个智能插座,再将智能插座接入 Home App,这样变相就将挂灯接入 HomeKit 了。

捷径制作

接下来就是捷径制作了,这个案例中捷径也是非常简单的,选中挂灯并将其设置为关闭即可。

Shortery 触发器

打开 Shortery,点击左下角的「Add Shortcut Trigger」增加新的触发器。将触发条件设置为 Wake Up & Sleep,name 可以自定义,比如此处的「关闭挂灯」。在 Shortcut 一栏中选择刚刚创建的捷径,如果看不到刚刚创建的捷径,可以点击下方的「Reload Shortcut List」重新加载捷径列表。

在底部选择 Mac Sleep 的附加条件,即当 Mac 休眠的时候,运行该捷径。最后点击右上角的绿色的「Save」保存该触发器即可。

需要注意的是在 Shortery 初次运行之后,如果关闭了页面,再想开启就需要从状态栏中去开启。

保存好触发器之后,就可以开始测试一下是否好用了,点击左上角的「」选择休眠,然后就可以看到挂灯随之关闭的效果。但我这里还希望用更简单的方式让电脑进入休眠,前往「系统偏好设置 > 桌面与屏幕保护程序 > 触发角」,设置一个角启动屏幕保护程序,当鼠标移动到这个角落,就会启用屏保。屏保时间过了之后,电脑就会进入休眠状态,从而触发了 Shortery 里的触发器。

接下来就需要设置一下屏保的时间了,前往「系统偏好设置 > 电池」,选择自己认为合适的关闭显示器时间,作者在这里选择的是 15 分钟。macOS 在接入电源和不接入电源的时候,可以使用两套偏好设置,刚才设置的是单纯使用电池的状态,所以需要再切换到「电源适配器」选项,同样去设置一个自己认为合适的休眠时间。

这样两个步骤设置完成后,就可以实现真正的自动化了。当长时间不触碰电脑或者将鼠标移动到右下角 → 启动屏幕保护程序 → 屏幕保护程序显示 15分钟 → 时间到后电脑休眠 → 触发器运行捷径关闭挂灯。要另外说明一下的是,「长时间不触碰电脑」启动屏幕保护程序,需要在「系统偏好设置 > 桌面与屏幕保护程序 」中勾选「此时间段后显示屏幕保护程序」,接下来就来看看效果吧。

有了上面这个例子之后,就可以再创建一个「电脑唤醒之后,自动开灯」的触发器了。简单来来说就是制作一个捷径,控制挂灯开关打开;再新建一个触发器,Weke Up & Sleep 触发条件、运行刚才开灯的捷径、当 App is Mac Wake Up 时触发,点击「Save」保存。

最后效果如下,视频进行了加速处理,实际用时 17 秒,因为 MacBook 唤醒、连接显示器、重新调整窗口等都需要一定的时间。但是十几秒在实际使用中,倒也无所谓了,正好可以趁这个时间,从手边上的热水机上接一杯水,喝水了再开始今天一天新的工作。

文本格式清除

在学习或者工作中,有时候将富文本文字复制到其他编辑器里,可能会将文字的格式一起复制过去。例如我在最近的课程设计要求画程序流程图,从 IDEA 复制到 OmniGraffle 中会带有背景颜色,必须通过其他文本编辑器中转一下,才能去掉这个背景颜色。

在这种情况下,就可以使用快捷键对剪切板的文字清除格式,相当于将捷径做为了格式过滤器使用。新建一个捷径,添加一个文本框,内容来自「剪切板」变量,然后后面跟着一个「拷贝到剪切板」,使用「文本」过滤一下,就可以变成纯文本了。

添加一个新的触发器,这次的触发器类型需要选择 Keyboard,也就是键盘快捷键触发。自定义 Name 为「格式清除」并指定相应的捷径,在底部按下合适的快捷键然后保存即可。

在使用的时候,先复制一串文字,再按下 ⌥+⌘+V 清除格式,使之成为纯文本,再按下 ⌘+V 就可以得到纯文本粘贴效果。相比起打开文本编辑器,在那里面复制粘贴一遍去除格式,节省了一些精力。

文本格式化为中英文加上空格

在互联网上每个人的写作风格不尽相同,有时候如果我们需要摘录其中的一段话,但是这段话和自己日常的写作风格不同,就可以考虑使用捷径来作一个简单的格式化捷径,来对文本进行格式化,例如在中英文之间加上空格。

文本格式化捷径 使用了 JavaScript 实现,从剪切板读取文本,通过 JavaScript 代码代码格式化,然后将结果再拷贝回剪切板。由于该捷径是调用网页内嵌的 JavaScript 实现的,运行速度可能稍微慢一点,所以在最后加入了一个通知,当格式化完成后发送通知提示。

捷径制作好了之后,去 Shortery 里创建快捷键触发器;在使用的时候,先复制一串文字,再按下⌃+⌥+f 为中英文之间加入空格,再按下 ⌘+V 就可以得到纯文本粘贴效果。

前后的对比效果如下图所示:

达到 80% 电量停止充电

对于电池保养来说,有一个基本原则就是不要过冲过放。虽然 macOS 内置了一个「优化电池充电」的功能,但这个功能需要一定的学习周期,而且一旦某一天充电模式有轻微的改变 macOS 就会自动帮你充满电。市面上即使有第三方的替代品,比如 AlDente,但想要实现维持在一个电量区间往往需要额外进行付费。事实上,我们同样可以通过 Shortery 实现达到 80% 电量停止充电,并将电量维持在一个区间内。

编注:为了不被 macOS 内置的「优化电池充电」干扰这个自动化,请在使用前关闭 macOS 内置的这项功能。

在 macOS 上可以通过设置 SMC 的 CH0B 和 CH0C 两个参数来控制电池是否充电,而 GitHub 上的 battery 就是一个封装好的脚本,可以通过命令行直接设置充电或者停止充电,不过该命令不提供 Homebrew 的安装包,需要手动编译安装。所以接下来就来看看如何编译安装该命令。由于 battery 命令依赖于 smc 命令,所以需要先编译安装 smc,然后才是 battery,接下来就来看看如何编译安装 smc

# 下载 smc 源代码

git clone https://github.com/hholtmann/smcFanControl



# 进入源代码文件夹

cd smcFanControl/smc-command



# 编译命令

make



# 将编译好的命令移动到系统命令目录下

sudo mv smc /usr/local/bin/

在编译过程中会出现一些警告,但是警告不影响程序的正常编译,可以忽略。当输入 smc 命令运行之后,出现如下所示的命令提示即安装成功。

接下来开始安装 battery 命令,编译安装命令如下:

# 下载 battery 源码

git clone https://github.com/actuallymentor/battery



# 进入源代码文件夹

cd battery



# 将 sh 脚本移动到系统命令目录下

sudo mv battery.sh /usr/local/bin/battery



# 赋予脚本可执行权限

chmod +x /usr/local/bin/battery



# 授予 battery 命令永久 root 权限

battery visudo

运行 battery 命令显示出帮助信息页面,根据提示信息手动设置充电或者停止充电,如果没有要求输入用户密码,则表示成功安装并赋权正确。

接下来就是制作捷径的步骤了,添加一个捷径特有的运行 Shell 脚本,将捷径命名为暂停充电,Shell 内运行命令:battery sets CH0B to 02

创建一个基于电量的触发器,当电量达到 80% 以上的时候,运行捷径「停止充电」,点击「Save」保存触发器之后即可。

想要维持一定区间的电量,除了要有暂停充电的捷径,还要有一个「达到一定百分比,继续充电」的捷径,否则一直这么暂停下去,会把电池用到没电的。所以相应地在创建一个名为「继续充电」的捷径,这次的命令需要更换为:battery sets CH0B to 00

再次创建一个基于电量的触发器,当电量低于 70% 的时候,运行捷径「继续充电」,点击「Save」保存触发器之后即可。此处的 70% 可以根据自己的实际需求去设置。

到此,一个可以自动将电量维持在 70% ~ 80% 之间的自动化任务就创建好了,这样可以尽可能地保证电池处于一个比较健康的状态,以延长电池的使用寿命。如果你需要充满电,或者需要将充电管理逻辑重新交还给系统,只需要将上述两个自动化开关重新关上即可。

小结

通过上文的几个例子,相信读者们也能感受到当 Shortcuts 结合了 Shortery 之后的强大之处,本文只使用了「电脑休眠」、「键盘快捷键」以及「电池电量」三个触发条件,相信有兴趣的读者们可以举一反三,做出一些更有趣更加实用的触发器,提高自己的生产效率,或者解放自己的双手。

参考资料

Thread by @Megabits_mzq on Thread Reader App – Thread Reader App

actuallymentor/battery: CLI for managing the battery charging status for M1 Macs

hholtmann/smcFanControl: Control the fans of every Intel Mac to make it run cooler

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀

以下内容于 04 月 24 日更新
更新文中的错误代码

CHoB --> CH0B

CHoC --> CH0C