godbout/alfred-workflow-workflow

处理所有 Alfred Glue 的工作,让您只需编写 Workflow 中的特定代码。

1.3.0 2022-05-06 16:25 UTC

This package is auto-updated.

Last update: 2024-08-29 05:37:47 UTC


README

Latest Stable Version Build Status Quality Score Code Coverage Total Downloads

厌倦了重复编写相同的代码来让新的 Workflow 运行起来?我也是。

双重打击 Workflow

一个 Alfred 应用 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。它没有覆盖任何内容,因此遵循所有约定,只定义了它特定的需求。

  1. 您的 Workflow 类只需要定义 Workflow 的可能操作:[链接](https://github.com/godbout/alfred-ploi/blob/0.1.0/src/Workflow.php)
  2. 您的 Entrance 菜单类定义了当 Alfred 用户启动 Workflow 时应该显示的内容:[链接](https://github.com/godbout/alfred-ploi/blob/0.1.0/src/Menus/Entrance.php)。 Entrance 是 Workflow 第一个菜单的约定(尽管您可以将其命名为任何您想要的内容,但那时您需要覆盖 currentMenu 方法。见下文 Alfred Time)。所有其他菜单都可以命名为您想要的任何名称,因为它们将被定义为菜单项的 args
  3. 由 Alfred 调用的脚本只检查您是显示菜单还是调用动作:[链接](https://github.com/godbout/alfred-ploi/blob/0.1.0/src/app.php)

就是这样。只需根据约定传递正确的 argsvariables 即可。

查看 Alfred Ploi Workflow 的 Workflow 框架:[链接](https://github.com/godbout/alfred-ploi/releases/tag/0.1.0)

案例 2:Alfred Kat

此 Workflow 仅覆盖 donotify 方法。

  1. do 方法需要一个特定的参数,因此被覆盖:[链接](https://github.com/godbout/alfred-kat/tree/4.1.0/src/Workflow.php#L10)
  2. 《notify》方法需要发送不同的通知,因此也被重写:[链接](https://github.com/godbout/alfred-kat/tree/4.1.0/src/Workflow.php#L21)
  3. 菜单(在这个情况下只有一个)没有被重写:[链接](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 时间

这是最困难的一个。它重写了

  1. 《do》方法,有时会传递一个参数:[链接](https://github.com/godbout/alfred-time/blob/3.0.0/src/Workflow.php#L37)
  2. 《notify》方法,用于自定义消息:[链接](https://github.com/godbout/alfred-time/blob/3.0.0/src/Workflow.php#L52)
  3. 加载菜单的方式,因为在这个工作流中,菜单被安排在特定的(定时服务)文件夹中:[链接](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)

参数和变量

所以,一个工作流做两件事

  1. 显示一个菜单
  2. 执行一个动作

如何告诉 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)