godbout/alfred-workflow-php

该软件包已被废弃且不再维护。作者建议使用 godbout/alfred-workflow-scriptfilter 软件包。

使用 PHP 生成 Alfred 3 或 4 工作流结果,轻松愉快。

2.3.0 2021-01-23 16:58 UTC

This package is auto-updated.

Last update: 2022-02-01 13:15:58 UTC


README

Latest Stable Version Build Status Quality Score Code Coverage Total Downloads

为什么

从 Alfred 3.4.1 版本开始,您可以定义 变量 以供单个项目使用,并为每个项目的各种修饰符(ctrl、cmd、shift、fn、alt)定义变量和图标。这使得使用当前工具渲染 Alfred 的结果比以往更困难,因此有了这个软件包。

如果您不需要 Alfred 3.4.1 和 3.5 引入的新字段,您可能想使用 Joe Tannenbaum 的 软件包。他的 API 可能比我的更轻量。

安装

composer require godbout/alfred-workflow-scriptfilter

使用

主要的 ScriptFilter 类是一个单例。您可以创建其他所有类的多个实例:ItemVariableIconMod 类:CtrlFnnShiftAltCmd

您可以在这里检查 Alfred 脚本过滤 JSON 格式的结构和选项:https://www.alfredapp.com/help/workflows/inputs/script-filter/json/

require __DIR__ . '/../vendor/autoload.php';

use Godbout\Alfred\Workflow\ScriptFilter;

echo ScriptFilter::output();

将导致

{"items":[]}

您可以添加项目、变量、自动重新运行您的脚本

ScriptFilter::add(
    Item::create()
        ->uid('uidd')
        ->title('titlee')
        ->subtitle('subtitlee')
        ->arg('argg')
        ->icon(
            Icon::create('icon path')
        )
        ->valid()
        ->match('matchh')
        ->autocomplete('autocompletee')
        ->mod(
            Ctrl::create()
                ->arg('ctrl arg')
                ->subtitle('ctrl subtitle')
                ->valid()
        )
        ->copy('copyy')
        ->largetype('largetypee')
        ->quicklookurl('quicklookurll')
);

ScriptFilter::add(
    Variable::create('food', 'chocolate'),
    Variable::create('dessert', 'red beans')
);

ScriptFilter::rerun(4.5);

$anotherItem = Item::create()
    ->icon(
        Icon::createFileicon('icon pathh')
    )
    ->mods(
        Shift::create()
            ->subtitle('shift subtitle'),
        Fnn::create()
            ->arg('fn arg')
            ->valid(true)
    );

$thirdItem = Item::create()
    ->variables(
        Variable::create('guitar', 'fender'),
        Variable::create('amplifier', 'orange')
    )
    ->mod(
        Alt::create()
            ->icon(
                Icon::createFileicon('alt icon path')
            )
            ->variables(
                Variable::create('grade', 'colonel'),
                Variable::create('drug', 'power')
            )
    );

ScriptFilter::add($anotherItem, $thirdItem);

echo ScriptFilter::output();

将导致

{
    "rerun":4.5,
    "variables":{
        "food":"chocolate",
        "dessert":"red beans"
    },
    "items":[
        {
            "uid":"uidd",
            "title":"titlee",
            "subtitle":"subtitlee",
            "arg":"argg",
            "icon":{
                "path":"icon path"
            },
            "valid":true,
            "match":"matchh",
            "autocomplete":"autocompletee",
            "mods":{
                "ctrl":{
                    "arg":"ctrl arg",
                    "subtitle":"ctrl subtitle",
                    "valid":true
                }
            },
            "text":{
                "copy":"copyy",
                "largetype":"largetypee"
            },
            "quicklookurl":"quicklookurll"
        },
        {
            "icon":{
                "path":"icon pathh",
                "type":"fileicon"
            },
            "mods":{
                "shift":{
                    "subtitle":"shift subtitle"
                },
                "fn":{
                    "arg":"fn arg",
                    "valid":true
                }
            }
        },
        {
            "mods":{
                "alt":{
                    "icon":{
                        "path":"alt icon path",
                        "type":"fileicon"
                    },
                    "variables":{
                        "grade":"colonel",
                        "drug":"power"
                    }
                }
            },
            "variables":{
                "guitar":"fender",
                "amplifier":"orange"
            }
        }
    ]
}

您可以按升序、降序、标题或其他任何方式对结果进行排序

/**
 * Will sort the items ascendingly
 * based on titles.
 */
ScriptFilter::add(...);
ScriptFilter::sortItems();
ScriptFilter::output();

/**
 * Will sort the items descendingly
 * based on subtitles.
 */
ScriptFilter::add(...);
ScriptFilter::sortItems('desc', 'subtitle');
ScriptFilter::output();

您可以基于项目中的任何字段对结果进行筛选(您可能想用用户的输入来做这个操作)

/**
 * Only items with a title that contains
 * 'start' will show up in the output.
 */
ScriptFilter::add(...);
ScriptFilter::filterItems('start');
ScriptFilter::output();

/**
 * Only items with a subtitle that contains
 * 'end' will show up in the output.
 */
ScriptFilter::add(...);
ScriptFilter::filterItems('end', 'subtitle');
ScriptFilter::output();

助手

有几个助手可以使您的代码编写得更愉快。(或者不是。)

ScriptFilter

可以使用流畅的接口编写 ScriptFilter

ScriptFilter::create()
    ->item($item)
    ->variable(Variable::create('gender', 'undefined'))
    ->items($anotherItem, $oneMoreItem)
    ->variables($aVariable, $anotherVariable)
    ->rerun(4)
    ->item(Item::create());

Item

Item::createDefault();
// same same
Item::create()->default();
// same same
Item::create()->type('default');


Item::createFile();
// same same
Item::create()->file();
// same same
Item::create()->type('file');


Item::createSkipcheck();
// same same
Item::create()->skipcheck();
// same same
Item::create()->type('file:skipcheck');


Item::create()->copy('text to copy');
// same same
Item::create()->text('copy', 'text to copy');


Item::create()->largetype('show large');
// same same
Item::create()->text('largetype', 'show large');

Icon

Icon::create('~/Desktop');
// same same
Icon::create()->path('~/Desktop');


Icon::createFileicon('~/Desktop');
// same same
Icon::create('~/Desktop')->fileicon();


Icon::createFiletype('~/Desktop');
// same same
Icon::create()->path('~/Desktop')->filetype();

Variable

Variable::create('guitar', 'fender');
// same same
Variable::create()->name('guitar')->value('fender');


/**
 * Anywhere you use the ->variable(...) fluent interface
 * you can pass the name and value arguments directly
 * if this is your thing.
 */
...->variable(Variable::create('gender', 'unknown'));
// same same
...->variable('gender', 'unknown');

完整 API

您可能想查看测试以查看完整的 API:tests

API 应该主要帮助您避免输入过多,以及在 Alfred 期望严格数据的地方输入错误的数据。

替代方案