* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Console; use Symfony\Component\Console\Output\OutputInterface; /** * @author Pierre du Plessis */ final class Cursor { private $output; private $input; public function __construct(OutputInterface $output, $input = null) { $this->output = $output; $this->input = $input ?? (\defined('STDIN') ? \STDIN : fopen('php://input', 'r+')); } public function moveUp(int $lines = 1): self { $this->output->write(sprintf("\x1b[%dA", $lines)); return $this; } public function moveDown(int $lines = 1): self { $this->output->write(sprintf("\x1b[%dB", $lines)); return $this; } public function moveRight(int $columns = 1): self { $this->output->write(sprintf("\x1b[%dC", $columns)); return $this; } public function moveLeft(int $columns = 1): self { $this->output->write(sprintf("\x1b[%dD", $columns)); return $this; } public function moveToColumn(int $column): self { $this->output->write(sprintf("\x1b[%dG", $column)); return $this; } public function moveToPosition(int $column, int $row): self { $this->output->write(sprintf("\x1b[%d;%dH", $row + 1, $column)); return $this; } public function savePosition(): self { $this->output->write("\x1b7"); return $this; } public functio