Command and prompt style can be modified
This commit is contained in:
		@@ -43,6 +43,8 @@ class MyShell extends Shell
 | 
			
		||||
            $lt = $t + 5;
 | 
			
		||||
            echo date("Y-m-d h:i:s")."\n";
 | 
			
		||||
        }
 | 
			
		||||
        $fg = ($this->seq % 7) + 1;
 | 
			
		||||
        $this->setPromptStyle("3{$fg}");
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    protected function onCommand($buffer)
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,10 @@ class LineRead
 | 
			
		||||
    
 | 
			
		||||
    protected $sttyOld;
 | 
			
		||||
 | 
			
		||||
    protected $commandStyle;
 | 
			
		||||
    
 | 
			
		||||
    protected $promptStyle;
 | 
			
		||||
 | 
			
		||||
    public function __construct()
 | 
			
		||||
    {
 | 
			
		||||
        stream_set_blocking(STDIN, false);
 | 
			
		||||
@@ -58,7 +62,20 @@ class LineRead
 | 
			
		||||
        $prompt = $this->prompt;
 | 
			
		||||
        $buffer = $this->buffer;
 | 
			
		||||
        $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()
 | 
			
		||||
@@ -138,9 +155,17 @@ class LineRead
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public function setPrompt($prompt)
 | 
			
		||||
    public function setCommandStyle($style)
 | 
			
		||||
    {
 | 
			
		||||
        $this->commandStyle = $style;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setPrompt($prompt, $style=null)
 | 
			
		||||
    {
 | 
			
		||||
        $this->prompt = $prompt;
 | 
			
		||||
        if ($style) {
 | 
			
		||||
            $this->promptStyle = $style;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,11 @@ use NoccyLabs\Shell\LineRead;
 | 
			
		||||
 | 
			
		||||
abstract class Shell
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    protected $promptStyle;
 | 
			
		||||
    
 | 
			
		||||
    protected $commandStyle;
 | 
			
		||||
 | 
			
		||||
    public function __construct(array $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()
 | 
			
		||||
    {
 | 
			
		||||
        $lineRead = new LineRead();
 | 
			
		||||
        
 | 
			
		||||
        $lineRead->setCommandStyle($this->commandStyle);
 | 
			
		||||
 | 
			
		||||
        $this->running = true;
 | 
			
		||||
 | 
			
		||||
        do {
 | 
			
		||||
            $lineRead->setPrompt($this->getPrompt());
 | 
			
		||||
            $lineRead->setPrompt($this->getPrompt(), $this->promptStyle);
 | 
			
		||||
            $buffer = $lineRead->update();
 | 
			
		||||
            if ($buffer == "\x03") {
 | 
			
		||||
                $this->stop();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user