allow vendord
All checks were successful
Build, Push and Deploy / build-and-push (push) Successful in 3m3s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 16s
Build, Push and Deploy / deploy-staging (push) Successful in 32s
Build, Push and Deploy / deploy-production (push) Has been skipped
Build, Push and Deploy / cleanup (push) Successful in 1s
All checks were successful
Build, Push and Deploy / build-and-push (push) Successful in 3m3s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 16s
Build, Push and Deploy / deploy-staging (push) Successful in 32s
Build, Push and Deploy / deploy-production (push) Has been skipped
Build, Push and Deploy / cleanup (push) Successful in 1s
This commit is contained in:
347
vendor/psy/psysh/src/Readline/Hoa/Console.php
vendored
Normal file
347
vendor/psy/psysh/src/Readline/Hoa/Console.php
vendored
Normal file
@@ -0,0 +1,347 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Hoa
|
||||
*
|
||||
*
|
||||
* @license
|
||||
*
|
||||
* New BSD License
|
||||
*
|
||||
* Copyright © 2007-2017, Hoa community. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the Hoa nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
namespace Psy\Readline\Hoa;
|
||||
|
||||
/**
|
||||
* Class \Hoa\Console.
|
||||
*
|
||||
* A set of utils and helpers about the console.
|
||||
*/
|
||||
class Console
|
||||
{
|
||||
/**
|
||||
* Pipe mode: FIFO.
|
||||
*/
|
||||
const IS_FIFO = 0;
|
||||
|
||||
/**
|
||||
* Pipe mode: character.
|
||||
*/
|
||||
const IS_CHARACTER = 1;
|
||||
|
||||
/**
|
||||
* Pipe mode: directory.
|
||||
*/
|
||||
const IS_DIRECTORY = 2;
|
||||
|
||||
/**
|
||||
* Pipe mode: block.
|
||||
*/
|
||||
const IS_BLOCK = 3;
|
||||
|
||||
/**
|
||||
* Pipe mode: regular.
|
||||
*/
|
||||
const IS_REGULAR = 4;
|
||||
|
||||
/**
|
||||
* Pipe mode: link.
|
||||
*/
|
||||
const IS_LINK = 5;
|
||||
|
||||
/**
|
||||
* Pipe mode: socket.
|
||||
*/
|
||||
const IS_SOCKET = 6;
|
||||
|
||||
/**
|
||||
* Pipe mode: whiteout.
|
||||
*/
|
||||
const IS_WHITEOUT = 7;
|
||||
|
||||
/**
|
||||
* Advanced interaction is on.
|
||||
*/
|
||||
private static $_advanced = null;
|
||||
|
||||
/**
|
||||
* Previous STTY configuration.
|
||||
*/
|
||||
private static $_old = null;
|
||||
|
||||
/**
|
||||
* Mode.
|
||||
*/
|
||||
protected static $_mode = [];
|
||||
|
||||
/**
|
||||
* Input.
|
||||
*/
|
||||
protected static $_input = null;
|
||||
|
||||
/**
|
||||
* Output.
|
||||
*/
|
||||
protected static $_output = null;
|
||||
|
||||
/**
|
||||
* Tput.
|
||||
*/
|
||||
protected static $_tput = null;
|
||||
|
||||
/**
|
||||
* Prepare the environment for advanced interactions.
|
||||
*/
|
||||
public static function advancedInteraction(bool $force = false): bool
|
||||
{
|
||||
if (null !== self::$_advanced) {
|
||||
return self::$_advanced;
|
||||
}
|
||||
|
||||
if (\defined('PHP_WINDOWS_VERSION_PLATFORM')) {
|
||||
return self::$_advanced = false;
|
||||
}
|
||||
|
||||
if (false === $force &&
|
||||
true === \defined('STDIN') &&
|
||||
false === self::isDirect(\STDIN)) {
|
||||
return self::$_advanced = false;
|
||||
}
|
||||
|
||||
self::$_old = ConsoleProcessus::execute('stty -g < /dev/tty', false);
|
||||
ConsoleProcessus::execute('stty -echo -icanon min 1 time 0 < /dev/tty', false);
|
||||
|
||||
return self::$_advanced = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore previous interaction options.
|
||||
*/
|
||||
public static function restoreInteraction()
|
||||
{
|
||||
if (null === self::$_old) {
|
||||
return;
|
||||
}
|
||||
|
||||
ConsoleProcessus::execute('stty '.self::$_old.' < /dev/tty', false);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get mode of a certain pipe.
|
||||
* Inspired by sys/stat.h.
|
||||
*/
|
||||
public static function getMode($pipe = \STDIN): int
|
||||
{
|
||||
$_pipe = (int) $pipe;
|
||||
|
||||
if (isset(self::$_mode[$_pipe])) {
|
||||
return self::$_mode[$_pipe];
|
||||
}
|
||||
|
||||
$stat = \fstat($pipe);
|
||||
|
||||
switch ($stat['mode'] & 0170000) {
|
||||
// named pipe (fifo).
|
||||
case 0010000:
|
||||
$mode = self::IS_FIFO;
|
||||
|
||||
break;
|
||||
|
||||
// character special.
|
||||
case 0020000:
|
||||
$mode = self::IS_CHARACTER;
|
||||
|
||||
break;
|
||||
|
||||
// directory.
|
||||
case 0040000:
|
||||
$mode = self::IS_DIRECTORY;
|
||||
|
||||
break;
|
||||
|
||||
// block special.
|
||||
case 0060000:
|
||||
$mode = self::IS_BLOCK;
|
||||
|
||||
break;
|
||||
|
||||
// regular.
|
||||
case 0100000:
|
||||
$mode = self::IS_REGULAR;
|
||||
|
||||
break;
|
||||
|
||||
// symbolic link.
|
||||
case 0120000:
|
||||
$mode = self::IS_LINK;
|
||||
|
||||
break;
|
||||
|
||||
// socket.
|
||||
case 0140000:
|
||||
$mode = self::IS_SOCKET;
|
||||
|
||||
break;
|
||||
|
||||
// whiteout.
|
||||
case 0160000:
|
||||
$mode = self::IS_WHITEOUT;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
$mode = -1;
|
||||
}
|
||||
|
||||
return self::$_mode[$_pipe] = $mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether a certain pipe is a character device (keyboard, screen
|
||||
* etc.).
|
||||
* For example:
|
||||
* $ php Mode.php
|
||||
* In this case, self::isDirect(STDOUT) will return true.
|
||||
*/
|
||||
public static function isDirect($pipe): bool
|
||||
{
|
||||
return self::IS_CHARACTER === self::getMode($pipe);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether a certain pipe is a pipe.
|
||||
* For example:
|
||||
* $ php Mode.php | foobar
|
||||
* In this case, self::isPipe(STDOUT) will return true.
|
||||
*/
|
||||
public static function isPipe($pipe): bool
|
||||
{
|
||||
return self::IS_FIFO === self::getMode($pipe);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether a certain pipe is a redirection.
|
||||
* For example:
|
||||
* $ php Mode.php < foobar
|
||||
* In this case, self::isRedirection(STDIN) will return true.
|
||||
*/
|
||||
public static function isRedirection($pipe): bool
|
||||
{
|
||||
$mode = self::getMode($pipe);
|
||||
|
||||
return
|
||||
self::IS_REGULAR === $mode ||
|
||||
self::IS_DIRECTORY === $mode ||
|
||||
self::IS_LINK === $mode ||
|
||||
self::IS_SOCKET === $mode ||
|
||||
self::IS_BLOCK === $mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set input layer.
|
||||
*/
|
||||
public static function setInput(ConsoleInput $input)
|
||||
{
|
||||
$old = static::$_input;
|
||||
static::$_input = $input;
|
||||
|
||||
return $old;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get input layer.
|
||||
*/
|
||||
public static function getInput(): ConsoleInput
|
||||
{
|
||||
if (null === static::$_input) {
|
||||
static::$_input = new ConsoleInput();
|
||||
}
|
||||
|
||||
return static::$_input;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set output layer.
|
||||
*/
|
||||
public static function setOutput(ConsoleOutput $output)
|
||||
{
|
||||
$old = static::$_output;
|
||||
static::$_output = $output;
|
||||
|
||||
return $old;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get output layer.
|
||||
*/
|
||||
public static function getOutput(): ConsoleOutput
|
||||
{
|
||||
if (null === static::$_output) {
|
||||
static::$_output = new ConsoleOutput();
|
||||
}
|
||||
|
||||
return static::$_output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set tput.
|
||||
*/
|
||||
public static function setTput(ConsoleTput $tput)
|
||||
{
|
||||
$old = static::$_tput;
|
||||
static::$_tput = $tput;
|
||||
|
||||
return $old;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current tput instance of the current process.
|
||||
*/
|
||||
public static function getTput(): ConsoleTput
|
||||
{
|
||||
if (null === static::$_tput) {
|
||||
static::$_tput = new ConsoleTput();
|
||||
}
|
||||
|
||||
return static::$_tput;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether we are running behind TMUX(1).
|
||||
*/
|
||||
public static function isTmuxRunning(): bool
|
||||
{
|
||||
return isset($_SERVER['TMUX']);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Restore interaction.
|
||||
*/
|
||||
\register_shutdown_function([Console::class, 'restoreInteraction']);
|
||||
Reference in New Issue
Block a user