Go to file
R. Eric Wheeler 1a03ecde81 Merge branch '1.x' into 'master'
Merge 1.x into master

See merge request olive/PHP/getch!1
2022-05-17 17:29:22 +00:00
src/Console Merge 1.x into master 2022-05-17 17:29:20 +00:00
tests Merge 1.x into master 2022-05-17 17:29:20 +00:00
.gitignore Add tests 2021-01-25 12:35:32 -08:00
.gitlab-ci.yml 1.x 2021-03-01 19:10:51 +00:00
.php_cs.dist Initial commit 2020-12-22 14:19:32 -08:00
LICENSE Initial commit 2020-12-22 14:19:32 -08:00
README.md Merge 1.x into master 2022-05-17 17:29:20 +00:00
composer.json Merge 1.x into master 2022-05-17 17:29:20 +00:00
composer.lock Merge 1.x into master 2022-05-17 17:29:20 +00:00
functions.php Merge 1.x into master 2022-05-17 17:29:20 +00:00
header.txt Initial commit 2020-12-22 14:19:32 -08:00
phpunit.xml Add tests 2021-01-25 12:35:32 -08:00

README.md

getch

This simply uses the FFI extension to enable _getch and _ungetch in Windows and linux.

Pipeline status Coverage report Latest Release

$ composer require olivebbs/getch
 use Olive\Console\Getch;
 $g = new Getch($linuxLibrary = null); // can also be a library that implements a function called _getch;
                                       // by default uses the bundled Resources/libgetch.so
                                       // on windows uses the built in _getch function.
 $ord = $g->getch();
 print \chr($ord);
 
 $ord = $g->ungetch('A');
 $res = $g->getch();
 $ord === $res // 65

Note that if you want to put a word into the STDIN stack, you need to do it in reverse.


    foreach(\str_split(\strrev('Hello World!')) as $char) {
        ungetch($char);
    }

    $result = '';

    do {
        $ord = getch();
        $result .= \chr($ord);
   } while($ord !== ord('!'));

   print $result; // Hello World!

There are also helper functions called getch() and ungetch();

use function Olive\Console\getch;
$ord = getch($linuxLibrary = null);
print \chr($ord);

$ord = ungetch('B');
$res = getch();
 $ord === $res // 66

Tests

vendor/bin/phpunit