mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2025-01-19 11:06:15 +00:00
Merge pull request #1594 from mreishus/feature-readline-support
Use readline in console when supported
This commit is contained in:
commit
5f4feb0729
1 changed files with 19 additions and 0 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue