console : manage the Ctrl+C to clean the line if needed
git-svn-id: https://svn.fournier38.fr/svn/ProgSVN/trunk@4241 bf3deb0d-5f1a-0410-827f-c0cc1f45334c
This commit is contained in:
20
console.php
20
console.php
@@ -8,6 +8,11 @@
|
|||||||
* When using this class, you must use the $console::echo method and not
|
* When using this class, you must use the $console::echo method and not
|
||||||
* display directely on screen
|
* display directely on screen
|
||||||
* Like readline, but all in PHP
|
* Like readline, but all in PHP
|
||||||
|
* Manage the historical of the provided commands
|
||||||
|
* Allow the user to use arrow keys and the shortcuts Ctrl+arrow, Ctrl+L,
|
||||||
|
* Ctrl+U, Ctrl+W
|
||||||
|
* To not allow the stop of the program by Ctrl+C, you can add
|
||||||
|
* exec ("stty intr ^J");
|
||||||
*/
|
*/
|
||||||
class console
|
class console
|
||||||
{
|
{
|
||||||
@@ -29,7 +34,7 @@ private $usleep = 0;
|
|||||||
/** List of non printable chars in decimal. The non printable chars are not
|
/** List of non printable chars in decimal. The non printable chars are not
|
||||||
* displayed but are correctely captured
|
* displayed but are correctely captured
|
||||||
*/
|
*/
|
||||||
private $nonWriteableChar = array (1, 2, 4, 6, 8, 9, 16, 18,
|
private $nonWriteableChar = array (1, 2, 3, 4, 6, 8, 9, 16, 18,
|
||||||
20, 21, 22, 23, 24, 25, 27,
|
20, 21, 22, 23, 24, 25, 27,
|
||||||
127);
|
127);
|
||||||
/* The history list in an array
|
/* The history list in an array
|
||||||
@@ -69,6 +74,8 @@ private $usleep = 0;
|
|||||||
// Set the terminal to return the value each time a key is pressed.
|
// Set the terminal to return the value each time a key is pressed.
|
||||||
// Do not display anything, so we don't see the characters when the user is
|
// Do not display anything, so we don't see the characters when the user is
|
||||||
// deleting.
|
// deleting.
|
||||||
|
// 'intr ^J' allow to redefine the interruption from Ctrl+C to Ctrl+J. It
|
||||||
|
// allow to manage the Ctrl+C key to clean the entry
|
||||||
exec ("stty -echo -icanon min 1 time 0");
|
exec ("stty -echo -icanon min 1 time 0");
|
||||||
$this->updateTerminalSize ();
|
$this->updateTerminalSize ();
|
||||||
}
|
}
|
||||||
@@ -121,7 +128,8 @@ private $usleep = 0;
|
|||||||
}
|
}
|
||||||
// }}}
|
// }}}
|
||||||
|
|
||||||
/** Display a text on screen
|
/** Display a text on screen. Must be used before "readline" method because
|
||||||
|
* the provided message will not be deleted by readline process.
|
||||||
* @param string $message The message to display
|
* @param string $message The message to display
|
||||||
*/
|
*/
|
||||||
public function echo ($message)
|
public function echo ($message)
|
||||||
@@ -326,10 +334,16 @@ private $usleep = 0;
|
|||||||
$this->moveCursor ($cursorPos);
|
$this->moveCursor ($cursorPos);
|
||||||
}
|
}
|
||||||
// }}}
|
// }}}
|
||||||
|
elseif (ord ($char) === 3)
|
||||||
|
// Abort (Ctrl+C)
|
||||||
|
{
|
||||||
|
$this->clearLine ();
|
||||||
|
return "";
|
||||||
|
}
|
||||||
elseif (ord ($char) === 4)
|
elseif (ord ($char) === 4)
|
||||||
|
// Logout (Ctrl+D)
|
||||||
// {{{
|
// {{{
|
||||||
{
|
{
|
||||||
// Logout (Ctrl+D)
|
|
||||||
$string = "exit";
|
$string = "exit";
|
||||||
$this->rewriteLine ($prompt.$string);
|
$this->rewriteLine ($prompt.$string);
|
||||||
return $string;
|
return $string;
|
||||||
|
|||||||
Reference in New Issue
Block a user