paint-brush
Hellfred 或:我如何学会自动化 macOS 并变得非常高效经过@bradblundell
2,958 讀數
2,958 讀數

Hellfred 或:我如何学会自动化 macOS 并变得非常高效

经过 Brad Blundell9m2022/08/12
Read on Terminal Reader
Read this story w/o Javascript

太長; 讀書

Hellfred 应用程序构建在 Hammerspoon 之上,因此您可以通过将快捷方式编程到日常工作流程中来自动执行任务并提高工作效率。

Companies Mentioned

Mention Thumbnail
Mention Thumbnail

Coin Mentioned

Mention Thumbnail
featured image - Hellfred 或:我如何学会自动化 macOS 并变得非常高效
Brad Blundell HackerNoon profile picture


我想要速度。我需要速度。


所有这些点击、所有这些搜索、所有重复性的思考和精神开销都阻碍了实际完成工作。


我需要机器人为我做这项工作。


在 Windows 上使用 AutoHotkey 多年后,我最近搬到了 macOS。


作为一个相对的 Mac 菜鸟,我开始与AlfredKarabiner一起玩,并很快以 Hammerspoon 的形式找到了慰藉。


啊,锤子勺。是的,我已经使用了超级聪明的人编码和扩展 Hammerspoon 的代码和模块——“Spoons”,这让我获得了一些很大的收获,但我需要更多


然后,有Lua。我想提高 Lua 的技能。
最好的方法是什么?

编码一些东西。




进入Hellfred一个基于 3 个迷你应用程序的集合锤子勺因此,您可以通过将快捷方式编程到日常工作流程中来自动执行任务、提高生产力并消除浪费时间。


这是一种将重复、耗时的任务映射到键序列、命令或可搜索文本的方法。



地狱之声。模糊搜索、选择行为映射器。


地狱火。键到行为映射器。


地狱提示。一个命令到行为的映射器。


TL;博士

所以你想要速射?跳到下面的安装和教程部分或下载回购checkout basics分支。


 git checkout basics



应用程序

地狱火

一个快速启动、基于模式的热键到动作映射实用程序。

  • 支持单键触发器以及作为触发器的键和弦序列。
  • 几乎暴露了键盘上的每个键,包括用作触发器的修饰键。
  • 模式允许相同的触发器在不同的上下文中具有不同的行为。


请问英文好吗?

当我键入一个字符或一系列字符时,然后执行特定功能,但前提是我处于特定模式。


好的。也许是一个例子?

  • 当我输入c然后运行函数launchGoogleChromeApp (但仅当我处于默认模式时)
  • 当我输入w后跟m然后运行函数changeToWindowManagerMode (同样,在默认模式下)
  • 当我键入c然后运行功能centerWindowOnScreen (在 WindowManager 模式下)


地狱之声

具有选择到动作映射的模糊搜索选择器实用程序。

  • 支持多级(嵌套)选择集。


请问英文好吗?

当我搜索选项列表并选择一个时,然后执行特定功能。如果我的选择有子选择(想想: parent => children ),然后显示这些,以便我可以搜索它们。


好的。也许是一个例子?

假设你有这样的结构:

  • 当我输入“ goog ”时,突出显示“打开谷歌”选项。选择此选项将执行函数openGoogleInBrowser
  • 或者,如果我输入“应用程序”,则突出显示“启动应用程序”选项。选择此选项会将当前选项替换为TerminalNotesCalendarLaunch Apps选项的子集)
  • 当我通过这些模糊搜索并选择一个时,Hellfuzz 将使用所选应用程序执行launchOrOpenApp


地狱提示

具有基本字符串匹配支持的类似命令行的实用程序。


请问英文好吗?

当我输入命令并提交它时,然后检查我的命令是否有任何匹配的字符串模式并执行与该命令相关的函数。


好的。也许是一个例子?

  • 当我输入命令' open notes '然后按enter ,然后执行任何带有filter的功能(例如命令必须以单词' open '开头)和适合打开Notes的行为(例如打开与' notes '相关的应用程序)应用程序。

  • 当我键入“ browse github ”然后按enter键时,然后执行任何带有过滤器的函数(例如,命令以“ browse ”开头)和适合打开链接的行为(打开与“ github ”相关的 url)。



安装:Firestarter

  1. 下载并安装Hammerspoon
  2. 安装 Hellfred:将存储库克隆到您的 ` ~/.hammerspoon ` 目录:


 git clone https://github.com/braddevelop/hellfred.git ~/.hammerspoon

引导程序:点亮它

有一个带有预配置设置的 Hellfred引导文件。让我们在 Hammerspoon 的init.lua文件中引用它。

https://gist.github.com/braddevelop/bac92b6797c087ca42f9363aab4972e0

保存文件并重新加载配置(或节省一些时间并使用花式重装)


盒子里装了什么?试用预配置

3 个 Hellfred 应用程序开箱即用,并且预配置了快速启动示例。让我们对其进行测试,以确保一切正常并启动。

试试地狱火

  • 使用热键shift + + h打开Hellfire
  • 输入字符c
  • Hellfred 的 repo 将在浏览器中打开。

试试地狱法兹

  • 使用热键shift + + h打开Hellfuzz
  • 输入单词' wiki '
  • 这突出显示了“打开 Hellfred wiki ”选项
  • 点击enter ,Hellfred 的 wiki 将在浏览器中打开

试试地狱提示

  • 使用热键shift + ^ + h打开Hellprompt
  • 键入“开放代码
  • 点击enter ,Hellfred 的代码仓库将在浏览器中打开



HellfireHellfuzzHellprompt实现的是将触发器输入映射到动作行为if-this-then-that ,虽然我们刚刚演示了使用每个应用程序来实现相同的结果,但您会发现每个应用程序更适合某些用例比其他用例。



教程:基本设置

我们将要编程的内容

现在让我们调高温度并配置一些更有用的东西。我们将对每个应用程序进行编程以解决以下场景,以便您掌握事情的窍门:

  1. 一个简单的应用程序启动器
  2. 常用链接的 url 启动器


您可以在存储库基础分支的hellfred/extend/basics目录中找到本演练的最终文件。


需要注意的模式

每个应用程序都遵循一组类似的步骤。

  1. 使用热键绑定初始化应用程序
  2. 配置 ` Subscriber对象(这可以在hellfred-bootstrap.lua中完成,但我们将创建单独的文件以保持干净。我们将利用工厂方法使对象创建变得轻而易举)
  3. 使用应用程序注册订阅者
  4. 运行应用程序的热键
  5. 销毁耗时的任务


地狱火的设置

地狱火的工作原理是这样的:


应用程序启动器

初始化应用程序

这已经通过hellfred-bootstrap.lua中的预配置完成。随意将热键更改为其他内容。
https://gist.github.com/braddevelop/49c7e7c7c62350d93e7798ff2bf40541


配置Subscriber对象

triggerscallbacks是用户定义的,并包装在简单的配置对象中。这些对象在注册到相应的应用程序时充当subscribers ,并在应用程序内部发生重要事件时通知。


Hellfire 的订阅者对象遵循以下结构:

https://gist.github.com/braddevelop/20c9c5b97a85a9a5c4cb924b511e494a

注意:如果fireIfModeIs ,Hellfire 将默认设置ANY模式,这意味着回调将在触发时以任何模式触发。


如果不存在,则创建以下目录结构: hellfred/extend/basics

然后在名为hellfirepack-applications.luabasics目录中创建一个新的 Lua 文件——文件命名约定并不重要。


添加此代码:

https://gist.github.com/braddevelop/c12d37d64ce75b83a195666317a10aa2


使用应用程序注册订阅者

回到hellfred-bootstrap.lua ,我们需要注册我们刚刚配置的订阅者包。

https://gist.github.com/braddevelop/2298469b805978062421f5a09d01d11a


运行应用程序

输入 Hellfire ( shift + + h ) 并键入任何新触发器:
f打开 Finder 应用程序, t打开终端或n打开 Notes 应用程序。


链接启动器(使用地狱火模式)

配置Subscriber对象

好的,现在让我们为我们的 Common Links url 启动器配置订阅者。在hellfred/extend/basics中创建一个名为hellfirepack-common-links.lua的新 Lua 文件


添加此代码:

https://gist.github.com/braddevelop/7d637464f45d2d9a4641e365ad2f20a1


使用应用程序注册订阅者

回到hellfred-bootstrap.lua ,我们需要注册我们刚刚配置的订阅者包。
https://gist.github.com/braddevelop/f0dafb518797620747044afbc20da060


运行应用程序

输入 Hellfire ( shift + + h ) 并输入任何新触发器: tghs


不挂断!您是否注意到输入触发器会启动终端打开 TechCrunch t ?这可能不是我们想要发生的。让我们利用地狱火的模式功能


模式提供了一种方法,可以让相同的触发器在不同的上下文中表现不同。


默认情况下,Hellfire 以一种名为……你猜对了……“默认”模式进行初始化。
我们可以配置一些自定义模式以与 Hellfire 一起使用,以便触发器在不同模式下的行为有所不同——或者如果您愿意,可以使用“命名空间”。


考虑这个流程:

hellfred/extend/basics中创建一个名为 hellfire hellfire-modes-extended.lua的新 Lua 文件。

我们将为通用链接触发器创建一个单独的模式来触发。


添加此代码:

https://gist.github.com/braddevelop/1e3f345076a8cd5c4cdf843cad785c9e


我们将在hellfred-bootstrap.lua中需要这个文件,所以它是全球无障碍。我们将对Hellfire Modes 文件执行相同的操作,以便我们可以在应用程序的其他部分访问 Hellfire 的内置模式。


hellfred-bootstrap.lua中添加以下代码(在元数据部分下,朝向文件顶部)

https://gist.github.com/braddevelop/04a4ec21aab06f50760d1082b216426f


现在我们需要一种方法将模式更改为新的公共链接模式。

我们将使用c后跟l的键序列。

我们还需要能够回到默认模式

我们将使用分号;作为触发器。


那就是接下来……


配置触发模式更改的Subscriber对象

hellfred/extend/basics中创建一个名为 hellfire hellfire-mode-triggers.lua的新 Lua 文件


添加此代码:

https://gist.github.com/braddevelop/283acacb9634590208c3b29b6039dc12


使用应用程序注册订阅者

hellfred-bootstrap.lua中,为新模式触发器注册订阅者:

https://gist.github.com/braddevelop/8afc4a576d550415f22c3c6fbf4152f1


测试模式之间的切换

现在输入 Hellfire ( shift + + h ) 并在两种模式之间切换。模式 FTW!


更新订阅者以在模式下工作

现在我们需要在hellfirepack-common-links.lua中更新我们的订阅者,以便它们仅在Common Links 模式处于活动状态时触发。

我们将更新工厂方法并将_G.HELLFIRE_MODES_EXTENDED.COMMON_LINKS分配给fireIfModeIs而不是nil


更新后的方法应如下所示:

https://gist.github.com/braddevelop/152a16f87efe55f08e7ed7139225f757


我们还需要在hellfirepack-applications.lua中更新我们的订阅者,以便它们仅在Hellfire 的默认模式处于活动状态时触发。


更新后的方法应如下所示:

https://gist.github.com/braddevelop/8ed8dea04397b0471299c8c89f8a9ae0


运行应用程序

输入 Hellfire ( shift + + h ) 并在模式之间切换。触发器t现在的行为会根据地狱火所处的模式而有所不同。地狱是的!


地狱提示的设置

这是 Hellprompt 的功能:

应用程序和 URL 启动器

初始化应用程序

这已经通过hellfred-bootstrap.lua中的预配置完成。随意将热键更改为其他内容。

https://gist.github.com/braddevelop/11e9b4871182f90c57313ab6ffa939a4


配置Subscriber对象

Hellprompt 的订阅者采用与 Hellfire 不同的结构。

考虑这个结构:

https://gist.github.com/braddevelop/c247d1d1429234c96f3e8c7d8a0b48df

注意:如果未定义filter ,则将始终执行回调。


hellfred/extend/basics中创建一个名为hellpromptpack-commands.lua的新 Lua 文件

添加此代码:

https://gist.github.com/braddevelop/6b18219f83fcf69826083d5dfce5d06f


使用应用程序注册订阅者

回到hellfred-bootstrap.lua ,我们需要注册我们刚刚配置的订阅者包。

https://gist.github.com/braddevelop/f1b75646b7330fcb1c993a5737fd7d61


运行应用程序
输入 Hellprompt ( shift + ^ + h ) 并测试这些命令。地狱!

尝试:

 browse news

和:

 open terminal


Hellfuzz 的设置

这就是 Hellfuzz 的工作原理:

应用程序启动器

初始化应用程序

这已经通过hellfred-bootstrap.lua中的预配置完成。随意将热键更改为其他内容。
https://gist.github.com/braddevelop/b18f575ec347503628e7457217b6e187


配置Subscriber对象

Hellfuzz 的订阅者采用与其他应用程序不同的结构。

考虑这个结构:

https://gist.github.com/braddevelop/56e9c22c6f921575637c73d60920d208

注意:如果定义nextChoicesFn ,则忽略callback


为了让事情变得更简单,我们将使用一个帮助方法来为 Hellfuzz 配置订阅者


hellfred/extend/basics中创建一个名为hellfuzzpack-apps-and-links.lua的新 Lua 文件


添加此代码:

https://gist.github.com/braddevelop/3564ad1ec286a30eca1abb94cfd6a69a


使用应用程序注册订阅者

hellfred-bootstrap.lua中,注册订阅者包。

https://gist.github.com/braddevelop/a90f9d5635377d74b145a892845c8273


运行应用程序

输入 Hellfuzz ( shift + + h ) 并输入命令。例如,开始输入单词'Terminal' ,您会看到打开终端的选项被突出显示。按enter终端打开。冒着热气!


链接启动器(使用嵌套选择集)

Hellfuzz 的一个方便的功能是嵌套选择集的能力。

考虑这个更新的流程:


让我们在Link Launcher任务上尝试一下,我们将创建以下分层选择结构:

hellfuzzpack-apps-and-links.lua中的代码更新为以下内容:

https://gist.github.com/braddevelop/384b0ae9629faca95d5d4cb519cd8e61


现在输入 Hellfuzz ( shift + + h ) 并开始搜索“公共链接”。您可以选择“ Common links ”选项, commonLinkNextChoices中的选项子集将被显示并可进行模糊搜索。选择任何链接选项将打开相应的 url。



扩展:火上浇油。

通过查看extend分支,在 repo 上寻找即将到来的 Hellfred 实验和扩展。

 git checkout extend




现在去提高地狱\m/