Attempt to verify tput exists before using it
Gitea - Tutorials/php-kilo/master This commit looks good Details

This commit is contained in:
Timothy Warren 2019-12-05 11:00:03 -05:00
parent 5ffa267e15
commit 8c159dd5bc
1 changed files with 21 additions and 4 deletions

View File

@ -10,6 +10,17 @@ use Aviat\Kilo\Enum\{
Highlight, Highlight,
}; };
/**
* See if tput exists for fallback terminal size detection
*
* @return bool
* @codeCoverageIgnore
*/
function has_tput(): bool
{
return shell_exec('type tput') === 0;
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// ! Terminal size // ! Terminal size
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -29,10 +40,16 @@ function get_window_size(): array
if ($res === -1 || $ws->ws_col === 0) if ($res === -1 || $ws->ws_col === 0)
{ {
$rows = trim(shell_exec('tput lines')); if (has_tput())
$cols = trim(shell_exec('tput cols')); {
$rows = trim(shell_exec('tput lines'));
$cols = trim(shell_exec('tput cols'));
return [(int)$rows, (int)$cols]; return [(int)$rows, (int)$cols];
}
// Worst-case, return an arbitrary 'standard' size
return [80, 25];
} }
return [$ws->ws_row, $ws->ws_col]; return [$ws->ws_row, $ws->ws_col];
@ -110,7 +127,7 @@ function is_digit(string $char): bool
*/ */
function is_space(string $char): bool function is_space(string $char): bool
{ {
$ws = [' ', "\t", "\n", "\r", "\xa", "\xb", "\xc"]; $ws = [' ', "\t", "\n", "\r", "\v", "\f"];
return is_ascii($char) && in_array($char, $ws, TRUE); return is_ascii($char) && in_array($char, $ws, TRUE);
} }