Merge pull request #1594 from mreishus/feature-readline-support

Use readline in console when supported
This commit is contained in:
José Lorenzo Rodríguez 2013-09-01 15:51:32 -07:00
commit 5f4feb0729

View file

@ -32,12 +32,24 @@ class ConsoleInput {
*/
protected $_input;
/**
* Can this instance use readline?
* Two conditions must be met:
* 1. Readline support must be enabled.
* 2. Handle we are attached to must be stdin.
* Allows rich editing with arrow keys and history when inputting a string.
*
* @var bool
*/
protected $_canReadline;
/**
* Constructor
*
* @param string $handle The location of the stream to use as input.
*/
public function __construct($handle = 'php://stdin') {
$this->_canReadline = extension_loaded('readline') && $handle == 'php://stdin' ? true : false;
$this->_input = fopen($handle, 'r');
}
@ -47,6 +59,13 @@ class ConsoleInput {
* @return mixed The value of the stream
*/
public function read() {
if ($this->_canReadline) {
$line = readline('');
if (!empty($line)) {
readline_add_history($line);
}
return $line;
}
return fgets($this->_input);
}