This package provides automatic (tab) completion in BASH and ZSH for Symfony Console Component based applications. With zero configuration, this package allows completion of available command names and the options they provide. User code can define custom completion behaviour for argument and option values.
Example of zero-config use with Composer:
If you don't need any custom completion behaviour, you can simply add the completion command to your application:
Install stecman/symfony-console-completion
using composer by running:
$ composer require stecman/symfony-console-completion
For standalone Symfony Console applications, add an instance of CompletionCommand
to your application's Application::getDefaultCommands()
method:
protected function getDefaultCommands()
{
//...
$commands[] = new \Stecman\Component\Symfony\Console\BashCompletion\CompletionCommand();
//...
}
For Symfony Framework applications, register the CompletionCommand
as a service in app/config/services.yml
:
services:
#...
console.completion_command:
class: Stecman\Component\Symfony\Console\BashCompletion\CompletionCommand
tags:
- { name: console.command }
#...
Register completion for your application by running one of the following in a terminal, replacing [program]
with the command you use to run your application (eg. 'composer'):
# BASH ~4.x, ZSH
source <([program] _completion --generate-hook)
# BASH ~3.x, ZSH
[program] _completion --generate-hook | source /dev/stdin
# BASH (any version)
eval $([program] _completion --generate-hook)
By default this registers completion for the absolute path to you application, which will work if the program is accessible on your PATH. You can specify a program name to complete for instead using the --program
option, which is required if you're using an alias to run the program.
If you want the completion to apply automatically for all new shell sessions, add the command from step 3 to your shell's profile (eg. ~/.bash_profile
or ~/.zshrc
)
Note: The type of shell (ZSH/BASH) is automatically detected using the SHELL
environment variable at run time. In some circumstances, you may need to explicitly specify the shell type with the --shell-type
option.
The --generate-hook
option of CompletionCommand
generates a small shell script that registers a function with your shell's completion system to act as a bridge between the shell and the completion command in your application. When you request completion for your program (by pressing tab with your program name as the first word on the command line), the bridge function is run; passing the current command line contents and cursor position to [program] _completion
, and feeding the resulting output back to the shell.
By default, no completion results will be returned for option and argument values. There are two ways of defining custom completion values for values: extend CompletionCommand
, or implement CompletionAwareInterface
.
CompletionAwareInterface
CompletionAwareInterface
allows a command to be responsible for completing its own option and argument values. When completion is run with a command name specified (eg. myapp mycommand ...
) and the named command implements this interface, the appropriate interface method is called automatically:
class MyCommand extends Command implements CompletionAwareInterface
{
...
public function completeOptionValues($optionName, CompletionContext $context)
{
if ($optionName == 'some-option') {
return ['myvalue', 'other-value', 'word'];
}
}
public function completeArgumentValues($argumentName, CompletionContext $context)
{
if ($argumentName == 'package') {
return $this->getPackageNamesFromDatabase($context->getCurrentWord());
}
}
}
This method of generating completions doesn't support use of CompletionInterface
implementations at the moment, which make it easy to share completion behaviour between commands. To use this functionality, you'll need write your value completions by extending CompletionCommand
.
CompletionCommand
Argument and option value completions can also be defined by extending CompletionCommand
and overriding the configureCompletion
method:
class MyCompletionCommand extends CompletionCommand
{
protected function configureCompletion(CompletionHandler $handler)
{
$handler->addHandlers([
// Instances of Completion go here.
// See below for examples.
]);
}
}
Completion
classThe following snippets demonstrate how the Completion
class works with CompletionHandler
, and some possible configurations. The examples are for an application with the signature:
`myapp (walk|run) [-w|--weather=""] direction`
$handler->addHandler(
new Completion(
'walk', // match command name
'direction', // match argument/option name
Completion::TYPE_ARGUMENT, // match definition type (option/argument)
[ // array or callback for results
'north',
'east',
'south',
'west'
]
)
);
This will complete the direction
argument for this:
$ myapp walk [tab]
but not this:
$ myapp run [tab]
$handler->addHandler(
new Completion(
Completion::ALL_COMMANDS,
'direction',
Completion::TYPE_ARGUMENT,
function() {
return range(1, 10);
}
)
);
This will complete the direction
argument for both commands:
$ myapp walk [tab]
$ myapp run [tab]
Option handlers work the same way as argument handlers, except you use Completion::TYPE_OPTION
for the type.
$handler->addHandler(
new Completion(
Completion::ALL_COMMANDS,
'weather',
Completion::TYPE_OPTION,
[
'raining',
'sunny',
'everything is on fire!'
]
)
);
To have a completion run for both options and arguments matching the specified name, you can use the type Completion::ALL_TYPES
. Combining this with Completion::ALL_COMMANDS
and consistent option/argument naming throughout your application, it's easy to share completion behaviour between commands, options and arguments:
$handler->addHandler(
new Completion(
Completion::ALL_COMMANDS,
'package',
Completion::ALL_TYPES,
function() {
// ...
}
)
);
new Completion(
Completion::ALL_COMMANDS,
'ref',
Completion::TYPE_OPTION,
function () {
$raw = shell_exec('git show-ref --abbr');
if (preg_match_all('/refs\/(?:heads|tags)?\/?(.*)/', $raw, $matches)) {
return $matches[1];
}
}
)
This library provides the completion implementation ShellPathCompletion
which defers path completion to the shell's built-in path completion behaviour rather than implementing it in PHP, so that users get the path completion behaviour they expect from their shell.
new Completion\ShellPathCompletion(
Completion::ALL_COMMANDS,
'path',
Completion::TYPE_OPTION
)
--option="value"
style of passing a value to an option, however --option value
and --option "value"
work and are functionally identical.InputOption::VALUE_OPTIONAL
since there is currently no way to determine the desired behaviour from the command line contents (ie. skip the optional value or complete for it)Symfony console autocomplete Enables shell autocompletion for tools based on theSymfony Console(Symfony framework, Composer, PHPSpec, Behat, etc.) Prerequisites Make sure the global composer project i
Console模块用于跟踪调试的API,可根据调试需求输出日志,协助开发人员定位业务逻辑问题。 方法: log: 记录用户日志 info: 记录用户提示信息 warn: 记录用户警告信息 error: 记录用户错误信息 assert: 断言操作 权限: 5+功能模块(permissions) { // ... "permissions":{ // ... "Console": { "de
Console模块用于跟踪调试的API,可根据调试需求输出日志,协助开发人员定位业务逻辑问题。 方法: log: 记录用户日志 info: 记录用户提示信息 warn: 记录用户警告信息 error: 记录用户错误信息 assert: 断言操作 权限: 5+功能模块(permissions) { // ... "permissions":{ // ... "Console": { "de
This plugin is meant to ensure that console.log() is as useful as it can be. It adds additional function for iOS, Ubuntu, Windows Phone 8, and Windows. If you are happy with how console.log() works fo
Node.js console是一个全局对象,用于向stdout和stderr打印不同级别的消息。 有内置方法可用于打印信息,警告和错误消息。 它在目标是文件或终端时以同步方式使用,而在目标是管道时以异步方式使用。 控制台方法 以下是控制台全局对象可用的方法列表。 Sr.No. 方法和描述 1 console.log([data][, ...]) 用换行符打印到stdout。 这个函数可以在pri
MOAC developed based on the Ethereum project. It also implements a javascript runtime environment (JSRE) that can be used in either interactive (console) or non-interactive (script) mode. MOAC Javascr