mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-12 19:21:33 +00:00
updated streamline-setup v2
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
<?php
|
||||
|
||||
namespace Laravel\Prompts;
|
||||
|
||||
use RuntimeException;
|
||||
use Symfony\Component\Console\Terminal as SymfonyTerminal;
|
||||
|
||||
class Terminal
|
||||
{
|
||||
/**
|
||||
* The initial TTY mode.
|
||||
*/
|
||||
protected ?string $initialTtyMode;
|
||||
|
||||
/**
|
||||
* The number of columns in the terminal.
|
||||
*/
|
||||
protected int $cols;
|
||||
|
||||
/**
|
||||
* The number of lines in the terminal.
|
||||
*/
|
||||
protected int $lines;
|
||||
|
||||
/**
|
||||
* Read a line from the terminal.
|
||||
*/
|
||||
public function read(): string
|
||||
{
|
||||
$input = fread(STDIN, 1024);
|
||||
|
||||
return $input !== false ? $input : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the TTY mode.
|
||||
*/
|
||||
public function setTty(string $mode): void
|
||||
{
|
||||
$this->initialTtyMode ??= $this->exec('stty -g');
|
||||
|
||||
$this->exec("stty $mode");
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore the initial TTY mode.
|
||||
*/
|
||||
public function restoreTty(): void
|
||||
{
|
||||
if (isset($this->initialTtyMode)) {
|
||||
$this->exec("stty {$this->initialTtyMode}");
|
||||
|
||||
$this->initialTtyMode = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of columns in the terminal.
|
||||
*/
|
||||
public function cols(): int
|
||||
{
|
||||
return $this->cols ??= (new SymfonyTerminal())->getWidth();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of lines in the terminal.
|
||||
*/
|
||||
public function lines(): int
|
||||
{
|
||||
return $this->lines ??= (new SymfonyTerminal())->getHeight();
|
||||
}
|
||||
|
||||
/**
|
||||
* Exit the interactive session.
|
||||
*/
|
||||
public function exit(): void
|
||||
{
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the given command and return the output.
|
||||
*/
|
||||
protected function exec(string $command): string
|
||||
{
|
||||
$process = proc_open($command, [
|
||||
1 => ['pipe', 'w'],
|
||||
2 => ['pipe', 'w'],
|
||||
], $pipes);
|
||||
|
||||
if (! $process) {
|
||||
throw new RuntimeException('Failed to create process.');
|
||||
}
|
||||
|
||||
$stdout = stream_get_contents($pipes[1]);
|
||||
$stderr = stream_get_contents($pipes[2]);
|
||||
$code = proc_close($process);
|
||||
|
||||
if ($code !== 0 || $stdout === false) {
|
||||
throw new RuntimeException(trim($stderr ?: "Unknown error (code: $code)"), $code);
|
||||
}
|
||||
|
||||
return $stdout;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user