PluginProbe
Independent Analytics – WordPress Analytics Plugin / 1.23.1
Independent Analytics – WordPress Analytics Plugin v1.23.1
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 All 120 releases
independent-analytics / vendor / symfony / console / Cursor.php
Cursor.php
168 lines 4.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11 namespace IAWP_SCOPED\Symfony\Component\Console;
12
13 use IAWP_SCOPED\Symfony\Component\Console\Output\OutputInterface;
14 /**
15 * @author Pierre du Plessis <pdples@gmail.com>
16 */
17 final class Cursor
18 {
19 private $output;
20 private $input;
21 /**
22 * @param resource|null $input
23 */
24 public function __construct(OutputInterface $output, $input = null)
25 {
26 $this->output = $output;
27 $this->input = $input ?? (\defined('STDIN') ? \STDIN : \fopen('php://input', 'r+'));
28 }
29 /**
30 * @return $this
31 */
32 public function moveUp(int $lines = 1) : self
33 {
34 $this->output->write(\sprintf("\x1b[%dA", $lines));
35 return $this;
36 }
37 /**
38 * @return $this
39 */
40 public function moveDown(int $lines = 1) : self
41 {
42 $this->output->write(\sprintf("\x1b[%dB", $lines));
43 return $this;
44 }
45 /**
46 * @return $this
47 */
48 public function moveRight(int $columns = 1) : self
49 {
50 $this->output->write(\sprintf("\x1b[%dC", $columns));
51 return $this;
52 }
53 /**
54 * @return $this
55 */
56 public function moveLeft(int $columns = 1) : self
57 {
58 $this->output->write(\sprintf("\x1b[%dD", $columns));
59 return $this;
60 }
61 /**
62 * @return $this
63 */
64 public function moveToColumn(int $column) : self
65 {
66 $this->output->write(\sprintf("\x1b[%dG", $column));
67 return $this;
68 }
69 /**
70 * @return $this
71 */
72 public function moveToPosition(int $column, int $row) : self
73 {
74 $this->output->write(\sprintf("\x1b[%d;%dH", $row + 1, $column));
75 return $this;
76 }
77 /**
78 * @return $this
79 */
80 public function savePosition() : self
81 {
82 $this->output->write("\x1b7");
83 return $this;
84 }
85 /**
86 * @return $this
87 */
88 public function restorePosition() : self
89 {
90 $this->output->write("\x1b8");
91 return $this;
92 }
93 /**
94 * @return $this
95 */
96 public function hide() : self
97 {
98 $this->output->write("\x1b[?25l");
99 return $this;
100 }
101 /**
102 * @return $this
103 */
104 public function show() : self
105 {
106 $this->output->write("\x1b[?25h\x1b[?0c");
107 return $this;
108 }
109 /**
110 * Clears all the output from the current line.
111 *
112 * @return $this
113 */
114 public function clearLine() : self
115 {
116 $this->output->write("\x1b[2K");
117 return $this;
118 }
119 /**
120 * Clears all the output from the current line after the current position.
121 */
122 public function clearLineAfter() : self
123 {
124 $this->output->write("\x1b[K");
125 return $this;
126 }
127 /**
128 * Clears all the output from the cursors' current position to the end of the screen.
129 *
130 * @return $this
131 */
132 public function clearOutput() : self
133 {
134 $this->output->write("\x1b[0J");
135 return $this;
136 }
137 /**
138 * Clears the entire screen.
139 *
140 * @return $this
141 */
142 public function clearScreen() : self
143 {
144 $this->output->write("\x1b[2J");
145 return $this;
146 }
147 /**
148 * Returns the current cursor position as x,y coordinates.
149 */
150 public function getCurrentPosition() : array
151 {
152 static $isTtySupported;
153 if (null === $isTtySupported && \function_exists('proc_open')) {
154 $isTtySupported = (bool) @\proc_open('echo 1 >/dev/null', [['file', '/dev/tty', 'r'], ['file', '/dev/tty', 'w'], ['file', '/dev/tty', 'w']], $pipes);
155 }
156 if (!$isTtySupported) {
157 return [1, 1];
158 }
159 $sttyMode = \shell_exec('stty -g');
160 \shell_exec('stty -icanon -echo');
161 @\fwrite($this->input, "\x1b[6n");
162 $code = \trim(\fread($this->input, 1024));
163 \shell_exec(\sprintf('stty %s', $sttyMode));
164 \sscanf($code, "\x1b[%d;%dR", $row, $col);
165 return [$col, $row];
166 }
167 }
168