Command and prompt style can be modified
This commit is contained in:
parent
0c64bc2f70
commit
06d879853c
@ -43,6 +43,8 @@ class MyShell extends Shell
|
|||||||
$lt = $t + 5;
|
$lt = $t + 5;
|
||||||
echo date("Y-m-d h:i:s")."\n";
|
echo date("Y-m-d h:i:s")."\n";
|
||||||
}
|
}
|
||||||
|
$fg = ($this->seq % 7) + 1;
|
||||||
|
$this->setPromptStyle("3{$fg}");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function onCommand($buffer)
|
protected function onCommand($buffer)
|
||||||
|
@ -26,6 +26,10 @@ class LineRead
|
|||||||
|
|
||||||
protected $sttyOld;
|
protected $sttyOld;
|
||||||
|
|
||||||
|
protected $commandStyle;
|
||||||
|
|
||||||
|
protected $promptStyle;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
stream_set_blocking(STDIN, false);
|
stream_set_blocking(STDIN, false);
|
||||||
@ -58,7 +62,20 @@ class LineRead
|
|||||||
$prompt = $this->prompt;
|
$prompt = $this->prompt;
|
||||||
$buffer = $this->buffer;
|
$buffer = $this->buffer;
|
||||||
$cursor = strlen($this->prompt) + 1 + $this->posCursor - $this->posScroll;
|
$cursor = strlen($this->prompt) + 1 + $this->posCursor - $this->posScroll;
|
||||||
fprintf(STDOUT, "\r\e[2K\e[32;1m%s\e[37m%s\e[%dG\e[0m", $prompt, $buffer, $cursor);
|
|
||||||
|
$promptStyle = $this->styleToAnsi($this->promptStyle);
|
||||||
|
$commandStyle = $this->styleToAnsi($this->commandStyle);
|
||||||
|
$endStyle = "\e[0m";
|
||||||
|
|
||||||
|
fprintf(STDOUT, "\r\e[2K{$promptStyle}%s{$commandStyle}%s\e[%dG{$endStyle}", $prompt, $buffer, $cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function styleToAnsi($style)
|
||||||
|
{
|
||||||
|
if (!$style) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return "\e[0;".$style."m";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function handleInput()
|
protected function handleInput()
|
||||||
@ -137,10 +154,18 @@ class LineRead
|
|||||||
fprintf(STDERR, "\n%s\n", substr($code,1));
|
fprintf(STDERR, "\n%s\n", substr($code,1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setCommandStyle($style)
|
||||||
|
{
|
||||||
|
$this->commandStyle = $style;
|
||||||
|
}
|
||||||
|
|
||||||
public function setPrompt($prompt)
|
public function setPrompt($prompt, $style=null)
|
||||||
{
|
{
|
||||||
$this->prompt = $prompt;
|
$this->prompt = $prompt;
|
||||||
|
if ($style) {
|
||||||
|
$this->promptStyle = $style;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,11 @@ use NoccyLabs\Shell\LineRead;
|
|||||||
|
|
||||||
abstract class Shell
|
abstract class Shell
|
||||||
{
|
{
|
||||||
|
|
||||||
|
protected $promptStyle;
|
||||||
|
|
||||||
|
protected $commandStyle;
|
||||||
|
|
||||||
public function __construct(array $config=[])
|
public function __construct(array $config=[])
|
||||||
{
|
{
|
||||||
$this->configure($config);
|
$this->configure($config);
|
||||||
@ -71,14 +76,26 @@ abstract class Shell
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setPromptStyle($style)
|
||||||
|
{
|
||||||
|
$this->promptStyle = $style;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setCommandStyle($style)
|
||||||
|
{
|
||||||
|
$this->commandStyle = $style;
|
||||||
|
}
|
||||||
|
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
$lineRead = new LineRead();
|
$lineRead = new LineRead();
|
||||||
|
|
||||||
|
$lineRead->setCommandStyle($this->commandStyle);
|
||||||
|
|
||||||
$this->running = true;
|
$this->running = true;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
$lineRead->setPrompt($this->getPrompt());
|
$lineRead->setPrompt($this->getPrompt(), $this->promptStyle);
|
||||||
$buffer = $lineRead->update();
|
$buffer = $lineRead->update();
|
||||||
if ($buffer == "\x03") {
|
if ($buffer == "\x03") {
|
||||||
$this->stop();
|
$this->stop();
|
||||||
|
Loading…
Reference in New Issue
Block a user