godbout / alfred-workflow-workflow
处理所有 Alfred Glue 的工作,让您只需编写 Workflow 中的特定代码。
Requires
- php: ^8.0.2
- godbout/alfred-workflow-scriptfilter: ^2.4
Requires (Dev)
- codedungeon/phpunit-result-printer: ^0.32
- phpunit/phpunit: ^9.5
- scrutinizer/ocular: ^1.8
- symfony/yaml: ^5
This package is auto-updated.
Last update: 2024-08-29 05:37:47 UTC
README
厌倦了重复编写相同的代码来让新的 Workflow 运行起来?我也是。
双重打击 Workflow
1. show results
2. do an action
2.5. ok send a notification, maybe
这意味着,为什么总是重复输入相同的内容。我说停止浪费键盘按键。(尤其是如果你在 MacBook 上工作,因为键盘很快就会坏。)
但这到底是什么呢?
基本上,它是一组基本类和一些约定,以及一个 Alfred Workflow 框架,让您快速入门。遵循约定,您只需要创建菜单和动作。所有无聊的其余部分都由框架和这个包处理。公共粘合剂已经处理好。您只需关注 Workflow 的特定性。
安装
composer require godbout/alfred-workflow-workflow
约定
这里很有趣,因为我仍然不确定如何表达。目前最好的方法是通过不同的用例一起进行。看看下面的三个案例。
案例 1:Alfred Ploi
这是一个最直接的 Workflow。它没有覆盖任何内容,因此遵循所有约定,只定义了它特定的需求。
- 您的 Workflow 类只需要定义 Workflow 的可能操作:[链接](https://github.com/godbout/alfred-ploi/blob/0.1.0/src/Workflow.php)
- 您的
Entrance
菜单类定义了当 Alfred 用户启动 Workflow 时应该显示的内容:[链接](https://github.com/godbout/alfred-ploi/blob/0.1.0/src/Menus/Entrance.php)。Entrance
是 Workflow 第一个菜单的约定(尽管您可以将其命名为任何您想要的内容,但那时您需要覆盖currentMenu
方法。见下文 Alfred Time)。所有其他菜单都可以命名为您想要的任何名称,因为它们将被定义为菜单项的args
。 - 由 Alfred 调用的脚本只检查您是显示菜单还是调用动作:[链接](https://github.com/godbout/alfred-ploi/blob/0.1.0/src/app.php)
就是这样。只需根据约定传递正确的 args
和 variables
即可。
查看 Alfred Ploi Workflow 的 Workflow 框架:[链接](https://github.com/godbout/alfred-ploi/releases/tag/0.1.0)
案例 2:Alfred Kat
此 Workflow 仅覆盖 do
和 notify
方法。
do
方法需要一个特定的参数,因此被覆盖:[链接](https://github.com/godbout/alfred-kat/tree/4.1.0/src/Workflow.php#L10)- 《notify》方法需要发送不同的通知,因此也被重写:[链接](https://github.com/godbout/alfred-kat/tree/4.1.0/src/Workflow.php#L21)
- 菜单(在这个情况下只有一个)没有被重写:[链接](https://github.com/godbout/alfred-kat/tree/4.1.0/src/Menus/Entrance.php)
其余的所有连接都是由这个包和 Alfred 工作流骨架处理的:[链接](https://github.com/godbout/alfred-kat/releases/tag/4.1.0)
案例 3:Alfred 时间
这是最困难的一个。它重写了
- 《do》方法,有时会传递一个参数:[链接](https://github.com/godbout/alfred-time/blob/3.0.0/src/Workflow.php#L37)
- 《notify》方法,用于自定义消息:[链接](https://github.com/godbout/alfred-time/blob/3.0.0/src/Workflow.php#L52)
- 加载菜单的方式,因为在这个工作流中,菜单被安排在特定的(定时服务)文件夹中:[链接](https://github.com/godbout/alfred-time/blob/3.0.0/src/Workflow.php#L30)
尽管如此,在这个案例中,大多数代码只是针对这个特定工作流的特定代码。大多数的 Alfred 连接都是由这个包和 Workflow 骨架处理的:[链接](https://github.com/godbout/alfred-time/releases/tag/3.0.0)
参数和变量
所以,一个工作流做两件事
- 显示一个菜单
- 执行一个动作
如何告诉 Alfred 显示哪个菜单或运行哪个动作?通过《args》和《variables》。
例如,在你的《Entrance》菜单类中,你显示一个菜单
class Entrance extends BaseMenu { public static function scriptFilter() { ScriptFilter::add( Item::create() ->title('Choose your Project') ->arg('choose_project') ); // ... }
Alfred 然后将调用你的《src/Menus/ChooseProject.class》类及其《scriptFilter》方法,在那里你设计下一菜单中显示的内容。
任何不同于《do》的《arg》都被视为菜单,从《src/Menus》文件夹加载(默认约定,如《Alfred-Time》所见,你可以覆盖菜单的加载方式和位置)。
执行动作
class SelectFile extends BaseMenu { public static function scriptFilter() { ScriptFilter::add( Item::create() ->title('Delete File') ->arg('do') ->variable('action', 'deleteFile'), Item::create() ->title('Copy File') ->arg('do') ->variable('action', 'copyFile'); ); // ... } }
对于第一个项目,Alfred 将调用你的《Workflow》类及其《deleteFile》方法。对于第二个项目,是《copyFile》方法。
例如,请参阅《Alfred Ploi 工作流源》以获取简单示例:[链接](https://github.com/godbout/alfred-ploi/tree/master/src)