Comments and improvements
This commit is contained in:
parent
5a45ca9c46
commit
4cd5cc2620
10
CHANGELOG.md
Normal file
10
CHANGELOG.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
Changelog and Upgrade Instructions
|
||||||
|
==================================
|
||||||
|
|
||||||
|
## 0.2.x to 0.3.x
|
||||||
|
|
||||||
|
Major changes:
|
||||||
|
|
||||||
|
* The `Shell::EV_*` constants have been renamed to `Shell::EVT_*`.
|
||||||
|
* The `configure` method has been removed.
|
||||||
|
* Events are now dispatched using the *NoccyLabs/TinyEvent* library.
|
@ -24,7 +24,7 @@ class MyShell extends Shell
|
|||||||
|
|
||||||
protected $seq = 0;
|
protected $seq = 0;
|
||||||
|
|
||||||
protected function configure()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$context = new MyContext();
|
$context = new MyContext();
|
||||||
$this->pushContext($context);
|
$this->pushContext($context);
|
||||||
|
@ -32,21 +32,48 @@ class Shell
|
|||||||
* @var Context[] The stack of parent contexts
|
* @var Context[] The stack of parent contexts
|
||||||
*/
|
*/
|
||||||
protected $contextStack = [];
|
protected $contextStack = [];
|
||||||
|
/**
|
||||||
protected $listeners = [];
|
* @var object[] Created timers
|
||||||
|
*/
|
||||||
protected $timers = [];
|
protected $timers = [];
|
||||||
|
/**
|
||||||
|
* @var object[] Running subtasks
|
||||||
|
*/
|
||||||
protected $tasks = [];
|
protected $tasks = [];
|
||||||
|
/**
|
||||||
|
* @var string The prompt string
|
||||||
|
*/
|
||||||
protected $prompt = ">";
|
protected $prompt = ">";
|
||||||
|
/**
|
||||||
|
* @var Style The style applied to the prompt
|
||||||
|
*/
|
||||||
protected $prompt_style = null;
|
protected $prompt_style = null;
|
||||||
|
/**
|
||||||
|
* @var Style The style applied to the input text
|
||||||
|
*/
|
||||||
protected $input_style = null;
|
protected $input_style = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
|
$t = $this;
|
||||||
|
register_shutdown_function(function () use (&$t) {
|
||||||
|
if ($t) unset($t);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function __destruct()
|
||||||
|
{
|
||||||
|
if ($this->lineReader) {
|
||||||
|
$this->lineReader = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -159,6 +186,11 @@ class Shell
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the prompt text
|
||||||
|
*
|
||||||
|
* @param string $text The text
|
||||||
|
*/
|
||||||
public function setPrompt($text)
|
public function setPrompt($text)
|
||||||
{
|
{
|
||||||
$this->prompt = $text;
|
$this->prompt = $text;
|
||||||
@ -168,6 +200,11 @@ class Shell
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the prompt style
|
||||||
|
*
|
||||||
|
* @param Style $style The style to apply to the prompt
|
||||||
|
*/
|
||||||
public function setPromptStyle(Style $style)
|
public function setPromptStyle(Style $style)
|
||||||
{
|
{
|
||||||
$this->prompt_style = $style;
|
$this->prompt_style = $style;
|
||||||
@ -177,6 +214,11 @@ class Shell
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the input style
|
||||||
|
*
|
||||||
|
* @param Style $style The style to apply to the text
|
||||||
|
*/
|
||||||
public function setInputStyle(Style $style)
|
public function setInputStyle(Style $style)
|
||||||
{
|
{
|
||||||
$this->input_style = $style;
|
$this->input_style = $style;
|
||||||
@ -220,7 +262,7 @@ class Shell
|
|||||||
* Execute a command with arguments.
|
* Execute a command with arguments.
|
||||||
*
|
*
|
||||||
* @param string $command The command name to execute
|
* @param string $command The command name to execute
|
||||||
* @param string $args Arguments
|
* @param string ...$args Arguments
|
||||||
* @return mixed
|
* @return mixed
|
||||||
* @throws Exception\BadCommandExcception
|
* @throws Exception\BadCommandExcception
|
||||||
*/
|
*/
|
||||||
@ -248,6 +290,13 @@ class Shell
|
|||||||
throw new Exception\BadCommandException("Command {$command} not found");
|
throw new Exception\BadCommandException("Command {$command} not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a built-in command
|
||||||
|
*
|
||||||
|
* @param string $command Command name
|
||||||
|
* @param mixed ...$args Arguments
|
||||||
|
* @return bool True if the command was handled OK
|
||||||
|
*/
|
||||||
public function executeBuiltin($command, ...$args)
|
public function executeBuiltin($command, ...$args)
|
||||||
{
|
{
|
||||||
switch ($command) {
|
switch ($command) {
|
||||||
@ -322,6 +371,10 @@ class Shell
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start the shell
|
||||||
|
*
|
||||||
|
*/
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
@ -391,7 +444,12 @@ class Shell
|
|||||||
$this->lineReader = null;
|
$this->lineReader = null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Helper function to emit an event with shell instance and context included.
|
||||||
|
*
|
||||||
|
* @param string $type The event type
|
||||||
|
* @param array[] $data The userdata of the event
|
||||||
|
*/
|
||||||
private function dispatchEvent($type, array $data=[])
|
private function dispatchEvent($type, array $data=[])
|
||||||
{
|
{
|
||||||
$data['shell'] = $this;
|
$data['shell'] = $this;
|
||||||
@ -400,6 +458,10 @@ class Shell
|
|||||||
$this->emitEvent($type, $event);
|
$this->emitEvent($type, $event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop the shell; calling this method will cause the main run() to return.
|
||||||
|
*
|
||||||
|
*/
|
||||||
public function stop()
|
public function stop()
|
||||||
{
|
{
|
||||||
$this->running = false;
|
$this->running = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user