PluginProbe ʕ •ᴥ•ʔ
Matomo Analytics – Powerful, Privacy-First Insights for WordPress / trunk
Matomo Analytics – Powerful, Privacy-First Insights for WordPress vtrunk
5.11.1 5.11.0 5.10.2 5.10.1 trunk 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.3.2 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.10.0 4.11.0 4.12.0 4.13.0 4.13.2 4.13.3 4.13.4 4.13.5 4.14.0 4.14.1 4.14.2 4.15.0 4.15.1 4.15.2 4.15.3 4.2.0 4.3.0 4.3.1 4.4.1 4.4.2 4.5.0 4.6.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.10.0 5.2.0 5.2.1 5.2.2 5.3.0 5.3.1 5.3.2 5.3.3 5.6.0 5.6.1 5.7.0 5.7.1 5.8.0 5.8.1 5.8.2
matomo / app / vendor / prefixed / symfony / console / Cursor.php
matomo / app / vendor / prefixed / symfony / console Last commit date
Attribute 1 year ago CI 1 year ago Command 1 year ago CommandLoader 2 years ago Completion 1 year ago DependencyInjection 1 year ago Descriptor 1 year ago Event 1 year ago EventListener 2 years ago Exception 2 years ago Formatter 1 year ago Helper 1 year ago Input 1 year ago Logger 1 year ago Output 1 year ago Question 1 year ago Resources 1 year ago SignalRegistry 1 year ago Style 1 year ago Tester 1 year ago Application.php 1 year ago Color.php 1 year ago ConsoleEvents.php 2 years ago Cursor.php 2 years ago LICENSE 2 years ago README.md 2 years ago SingleCommandApplication.php 1 year ago Terminal.php 1 year ago
Cursor.php
168 lines
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 Matomo\Dependencies\Symfony\Component\Console;
12
13 use Matomo\Dependencies\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