Command and prompt style can be modified

This commit is contained in:
Christopher Vagnetoft 2016-04-29 02:25:57 +02:00
parent 0c64bc2f70
commit 06d879853c
3 changed files with 47 additions and 3 deletions

View File

@ -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)

View File

@ -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;
}
} }
} }

View File

@ -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();