godbout / alfred-workflow-php
2.3.0
2021-01-23 16:58 UTC
Requires
- php: ^7.3 || ^8.0
Requires (Dev)
- codedungeon/phpunit-result-printer: ^0.30
- phpunit/phpunit: ^9.5
- scrutinizer/ocular: ^1.8
- symfony/yaml: ^5.0
README
为什么
从 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
类是一个单例。您可以创建其他所有类的多个实例:Item
、Variable
、Icon
和 Mod
类:Ctrl
、Fnn
、Shift
、Alt
和 Cmd
。
您可以在这里检查 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 期望严格数据的地方输入错误的数据。
替代方案
- alfred-workflow by Joe Tannenbaum