Chris@13: history = []; Chris@13: $this->historySize = $historySize; Chris@13: $this->eraseDups = $eraseDups; Chris@13: } Chris@13: Chris@13: /** Chris@13: * {@inheritdoc} Chris@13: */ Chris@13: public function addHistory($line) Chris@13: { Chris@13: if ($this->eraseDups) { Chris@17: if (($key = \array_search($line, $this->history)) !== false) { Chris@13: unset($this->history[$key]); Chris@13: } Chris@13: } Chris@13: Chris@13: $this->history[] = $line; Chris@13: Chris@13: if ($this->historySize > 0) { Chris@17: $histsize = \count($this->history); Chris@13: if ($histsize > $this->historySize) { Chris@17: $this->history = \array_slice($this->history, $histsize - $this->historySize); Chris@13: } Chris@13: } Chris@13: Chris@17: $this->history = \array_values($this->history); Chris@13: Chris@13: return true; Chris@13: } Chris@13: Chris@13: /** Chris@13: * {@inheritdoc} Chris@13: */ Chris@13: public function clearHistory() Chris@13: { Chris@13: $this->history = []; Chris@13: Chris@13: return true; Chris@13: } Chris@13: Chris@13: /** Chris@13: * {@inheritdoc} Chris@13: */ Chris@13: public function listHistory() Chris@13: { Chris@13: return $this->history; Chris@13: } Chris@13: Chris@13: /** Chris@13: * {@inheritdoc} Chris@13: */ Chris@13: public function readHistory() Chris@13: { Chris@13: return true; Chris@13: } Chris@13: Chris@13: /** Chris@13: * {@inheritdoc} Chris@13: * Chris@13: * @throws BreakException if user hits Ctrl+D Chris@13: * Chris@13: * @return string Chris@13: */ Chris@13: public function readline($prompt = null) Chris@13: { Chris@13: echo $prompt; Chris@13: Chris@17: return \rtrim(\fgets($this->getStdin()), "\n\r"); Chris@13: } Chris@13: Chris@13: /** Chris@13: * {@inheritdoc} Chris@13: */ Chris@13: public function redisplay() Chris@13: { Chris@13: // noop Chris@13: } Chris@13: Chris@13: /** Chris@13: * {@inheritdoc} Chris@13: */ Chris@13: public function writeHistory() Chris@13: { Chris@13: return true; Chris@13: } Chris@13: Chris@13: /** Chris@13: * Get a STDIN file handle. Chris@13: * Chris@13: * @throws BreakException if user hits Ctrl+D Chris@13: * Chris@13: * @return resource Chris@13: */ Chris@13: private function getStdin() Chris@13: { Chris@13: if (!isset($this->stdin)) { Chris@17: $this->stdin = \fopen('php://stdin', 'r'); Chris@13: } Chris@13: Chris@17: if (\feof($this->stdin)) { Chris@13: throw new BreakException('Ctrl+D'); Chris@13: } Chris@13: Chris@13: return $this->stdin; Chris@13: } Chris@13: }