Mercurial > hg > cmmr2012-drupal-site
diff vendor/psy/psysh/src/Readline/Transient.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children | a9cd425dd02b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/psy/psysh/src/Readline/Transient.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,147 @@ +<?php + +/* + * This file is part of Psy Shell. + * + * (c) 2012-2018 Justin Hileman + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Psy\Readline; + +use Psy\Exception\BreakException; + +/** + * An array-based Readline emulation implementation. + */ +class Transient implements Readline +{ + private $history; + private $historySize; + private $eraseDups; + private $stdin; + + /** + * Transient Readline is always supported. + * + * {@inheritdoc} + */ + public static function isSupported() + { + return true; + } + + /** + * Transient Readline constructor. + */ + public function __construct($historyFile = null, $historySize = 0, $eraseDups = false) + { + // don't do anything with the history file... + $this->history = []; + $this->historySize = $historySize; + $this->eraseDups = $eraseDups; + } + + /** + * {@inheritdoc} + */ + public function addHistory($line) + { + if ($this->eraseDups) { + if (($key = array_search($line, $this->history)) !== false) { + unset($this->history[$key]); + } + } + + $this->history[] = $line; + + if ($this->historySize > 0) { + $histsize = count($this->history); + if ($histsize > $this->historySize) { + $this->history = array_slice($this->history, $histsize - $this->historySize); + } + } + + $this->history = array_values($this->history); + + return true; + } + + /** + * {@inheritdoc} + */ + public function clearHistory() + { + $this->history = []; + + return true; + } + + /** + * {@inheritdoc} + */ + public function listHistory() + { + return $this->history; + } + + /** + * {@inheritdoc} + */ + public function readHistory() + { + return true; + } + + /** + * {@inheritdoc} + * + * @throws BreakException if user hits Ctrl+D + * + * @return string + */ + public function readline($prompt = null) + { + echo $prompt; + + return rtrim(fgets($this->getStdin(), 1024)); + } + + /** + * {@inheritdoc} + */ + public function redisplay() + { + // noop + } + + /** + * {@inheritdoc} + */ + public function writeHistory() + { + return true; + } + + /** + * Get a STDIN file handle. + * + * @throws BreakException if user hits Ctrl+D + * + * @return resource + */ + private function getStdin() + { + if (!isset($this->stdin)) { + $this->stdin = fopen('php://stdin', 'r'); + } + + if (feof($this->stdin)) { + throw new BreakException('Ctrl+D'); + } + + return $this->stdin; + } +}