dpeuscher / alfred-symfony-tools
Requires
- php: ^7.1
- ext-ctype: *
- ext-iconv: *
- joetannenbaum/alfred-workflow: ^0.1.1
- makbari/dot-env-editor: ^0.1.4
- monolog/monolog: ^1.23
- symfony/console: ^4.1
- symfony/dotenv: ^4.1
- symfony/framework-bundle: ^4.0
- symfony/yaml: ^4.1
Requires (Dev)
- phpunit/phpunit: ^7.2
README
alfred-symfony-tools
用于将 Alfred 工作流程与 Symfony4 框架命令集成的工具包
此工具包有助于您使用 Symfony 命令结构时。您可以轻松地添加自动完成参数,无需过多考虑 Alfred 工作流程会在您输入每个字符时启动新进程的想法。还有一个可以从中扩展以允许您通过 Alfred 设置 .env 参数的命令。
自动完成列表
为了为您的 Alfred 工作流程用户提供一种轻松地浏览其选项的方法,您必须提供您参数的允许值列表。有了这个列表,用户就可以轻松地使用 Alfred 界面遍历所有选项。
要创建一个能够执行此操作的命令,您需要从以下两个中扩展: Dpeuscher\AlfredSymfonyTools\CommandExtension\AlfredInteractiveContainerAwareCommand
或 Dpeuscher\AlfredSymfonyTools\CommandExtension\AlfredInteractiveCommand
。然后您可以在定义参数时定义允许值,在 configure()
方法中(适用于静态参数,其值是硬编码的)或稍后在命令的 initialize()
方法中。
硬编码的参数列表
protected function configure() { $this ->setName('commandname') ->addArgument('arg1', InputArgument::OPTIONAL, ['option1', 'option2']) ->addArgument('arg2', InputArgument::OPTIONAL, ['shortoption2.1' => 'longoption2.1', 'shortoption2.2' => 'longoption2.2']) ->addArgument('arg3', InputArgument::OPTIONAL, ['option3.1'], true) ->addArgument('arg4', InputArgument::OPTIONAL) ->addArgument('arg5', InputArgument::OPTIONAL + InputArgument::IS_ARRAY); }
您可以看到,可以使用数字或关联选项列表。如果您使用数字列表(arg1),选择器将自动由标识您的选项的第一个单词组合定义。对于关联列表(arg2),键将被用作标识符。您可以通过将 $allowNew
参数设置为 true 允许添加不在列表中的选择(arg3)。您还可以混合自动完成参数和一般参数(arg4,arg5)。
动态加载的参数列表
protected function initialize(InputInterface $input, OutputInterface $output) { $options4 = $this->getContainer()->getParameter('options4'); $this->addArgumentsAllowedValues('arg4', $options4); }
由于在 configure()
方法中容器不可用,您可能希望在 initialize()
方法中添加选项,这些选项是在配置或 .env 文件中设置的参数。您可以使用 addArgumentsAllowedValues()
方法来实现这一点,它也支持 $allowNew
参数。
执行操作
现在您可能想根据不同的输入以不同的方式处理。为自动完成参数提供了预定义的输入处理程序,但您可以使用 addInputHandler($setArguments, $handlerCallable)
方法轻松覆盖它们。只需定义您希望为哪些参数集定义处理程序,并定义它。处理程序本身可以是闭包或命令类中的方法。它将接收到一个包含给定变量和可能的自动完成值的数组以及通用结果的参数,这样您就可以快速更改结果。如果不返回任何内容,则默认为(可能对齐的)参数数组中的通用结果条目。
要将 arg3 选项的标题设置为在选中 option1 作为 arg1 时具有首字母大写,您可以这样做
protected function initialize(InputInterface $input, OutputInterface $output) { // ... $this->addInputHandler(['arg1', 'arg2'], function ($arguments) { if ($arguments['arg1'] === 'option1') { foreach ($arguments['genericResults'] as $result) { $result->setTitle(ucwords($result->getTitle())); } } }); }
参数的顺序很重要。在上面的示例中,
['arg2', 'arg1']
永远不会匹配!
WorkflowResult
类仅是 Alfred 工作流程 json 定义的格式表示。它支持以下方法
- uid
- title
- subtitle
- quicklookurl
- type
- valid
- icon
- autocomplete
- largetype
- arg
- copy
要了解其含义,请参阅 Alfred 文档。另外,如果您提供 URL 作为图标,WorkflowHelper
将将其复制到您的 tmp 文件夹(您可以在构造函数中更改它),并对其进行格式化后使用,因为 Alfred 本身只能处理本地图像。
ConfigureCommand
要使用 ConfigureCommand 将数据写入您的 .env 文件,您必须在命令文件夹中扩展它以使其可分发。然后,您必须定义您想要通过 Alfred 更改的变量,并在配置中的 configValues
键中定义它们。它应该是一个数值数组,其中包含变量的名称作为值。如果您想定义一个数组,请在名称后添加 []
。
configValues: - CONFIG1 - CONFIG2 - CONFIGARRAY3[]
然后,如果您在应用程序中调用 config
路由,就可以设置这些值。
DotEnvEditor
要使用 ConfigureCommand,您必须创建一个特殊的配置,该配置必须命名为 dotenveditor.php,并应位于您的 config/ 文件夹中。如果您想将其放在其他位置,可以将配置参数 configDotEnvFileConfiguration 设置为可找到的路径。该文件需要返回一个数组,其中至少包含键 pathToEnv
,该键链接到您的 .env 文件。您可以可选地提供一个 backupPath
以进行备份。默认配置的示例文件如下
config/dotenveditor.php:
<?php $root = dirname(__DIR__); return [ 'pathToEnv' => $root . '/.env', 'backupPath' => $root . '/var/backups/', ];
Alfred 工作流程
alfred.php
为了正确工作,您需要一个特殊的 alfred-bin 文件。它不应包含 bin/console 脚本的 shebang 行,因为这会破坏有效的 json 输出。因此,最简单的方法是将 bin/console 复制到 bin/alfred.php。您也可以使用此存储库示例文件夹中提供的 alfred.php。
为了进行适当的转义,您应该在控制台文件(示例文件夹中的 alfred.php)的使用语句下方添加以下行
if (!isset($alfredArgv)) { $alfredArgv = implode(' ', $argv); } $_SERVER['argv'] = explode(' ', iconv("UTF-8-MAC", "UTF-8", $alfredArgv)); $argv = $_SERVER['argv'];
创建工作流程
您可以通过单击底部栏中的 "+" 并选择“Blank Workflow”来创建一个新的 Alfred 工作流程。然后,选择您的流程,在空白空间中右键单击,选择“Input”并选择“Script Filter”。双击页面上的“Script Filter”项并定义一个占位符。根据您的喜好配置占位符设置。使用以下脚本以使分发工作
$alfredArgv = "bin/console command {query}"; include 'bin/alfred.php';
您必须将语言选择为 "/usr/bin/php",“with input as {query}",在底部的“Escaping”选择中勾选“Double Quotes”,“Backslashes”和“Dollars"。
将脚本和关键词部分中的 "command" 替换为您想要使用的命令
技巧
环境变量
输出命令可以使用您通过 WorkflowHelper
类的 variables()
方法传递的变量。您可以在命令中以受保护的参数 $workflowHelper
的形式访问它
protected function initialize(InputInterface $input, OutputInterface $output) { $this->workflowHelper->variable('var', 'value'); }
在连接的脚本中,您可以通过调用环境变量来访问它。以下是一些访问方式
- Applescript
(do shell script "echo $var")
- Bash
echo ${var}
- PHP
echo $_ENV['var'];
配置命令
激活“Argument Optional”而不是“Argument Required”。配置脚本的脚本如下
$alfredArgv = "bin/console config {query}"; include 'bin/alfred.php';
它与以下脚本的“Run Script”项相关联
$alfredArgv = "bin/console config -x {query}"; include 'bin/alfred.php';
“Run Script”的其他设置应类似于“Script Input”项。
示例
在此找到原型: dpeuscher/alfred-movie-rating