Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4138594
Transient.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
Transient.php
View Options
<?php
/*
* This file is part of Psy Shell.
*
* (c) 2012-2023 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace
Psy\Readline
;
use
Psy\Exception\BreakException
;
/**
* An array-based Readline emulation implementation.
*/
class
Transient
implements
Readline
{
private
array
$history
;
private
int
$historySize
;
private
bool
$eraseDups
;
/** @var resource */
private
$stdin
;
/**
* Transient Readline is always supported.
*
* {@inheritdoc}
*/
public
static
function
isSupported
():
bool
{
return
true
;
}
/**
* {@inheritdoc}
*/
public
static
function
supportsBracketedPaste
():
bool
{
return
false
;
}
/**
* Transient Readline constructor.
*/
public
function
__construct
(
$historyFile
=
null
,
$historySize
=
0
,
$eraseDups
=
false
)
{
// don't do anything with the history file...
$this
->
history
=
[];
$this
->
historySize
=
$historySize
;
$this
->
eraseDups
=
$eraseDups
??
false
;
}
/**
* {@inheritdoc}
*/
public
function
addHistory
(
string
$line
):
bool
{
if
(
$this
->
eraseDups
)
{
if
((
$key
=
\array_search
(
$line
,
$this
->
history
))
!==
false
)
{
unset
(
$this
->
history
[
$key
]);
}
}
$this
->
history
[]
=
$line
;
if
(
$this
->
historySize
>
0
)
{
$histsize
=
\count
(
$this
->
history
);
if
(
$histsize
>
$this
->
historySize
)
{
$this
->
history
=
\array_slice
(
$this
->
history
,
$histsize
-
$this
->
historySize
);
}
}
$this
->
history
=
\array_values
(
$this
->
history
);
return
true
;
}
/**
* {@inheritdoc}
*/
public
function
clearHistory
():
bool
{
$this
->
history
=
[];
return
true
;
}
/**
* {@inheritdoc}
*/
public
function
listHistory
():
array
{
return
$this
->
history
;
}
/**
* {@inheritdoc}
*/
public
function
readHistory
():
bool
{
return
true
;
}
/**
* {@inheritdoc}
*
* @throws BreakException if user hits Ctrl+D
*
* @return false|string
*/
public
function
readline
(?
string
$prompt
=
null
)
{
echo
$prompt
;
return
\rtrim
(
\fgets
(
$this
->
getStdin
()),
"
\n\r
"
);
}
/**
* {@inheritdoc}
*/
public
function
redisplay
()
{
// noop
}
/**
* {@inheritdoc}
*/
public
function
writeHistory
():
bool
{
return
true
;
}
/**
* Get a STDIN file handle.
*
* @throws BreakException if user hits Ctrl+D
*
* @return resource
*/
private
function
getStdin
()
{
if
(!
isset
(
$this
->
stdin
))
{
$this
->
stdin
=
\fopen
(
'php://stdin'
,
'r'
);
}
if
(
\feof
(
$this
->
stdin
))
{
throw
new
BreakException
(
'Ctrl+D'
);
}
return
$this
->
stdin
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Wed, Aug 19, 14:43 (3 w, 4 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
6b/75/96e531329bb913fefee949fb145b
Default Alt Text
Transient.php (2 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment