64 lines
1.4 KiB
PHP
Executable File
64 lines
1.4 KiB
PHP
Executable File
#!/usr/bin/php
|
|
<?php declare(strict_types=1);
|
|
|
|
namespace Kilo;
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// ! App Constants
|
|
// -----------------------------------------------------------------------------
|
|
define('KILO_VERSION', '0.0.1');
|
|
define('KILO_TAB_STOP', 4);
|
|
define('KILO_QUIT_TIMES', 3);
|
|
|
|
// Log notices/errors/warnings to file
|
|
set_error_handler(static function (int $no, $str, $file, $line, $context) {
|
|
$msg = print_r([
|
|
'errno' => $no,
|
|
'message' => $str,
|
|
'file' => $file,
|
|
'line' => $line,
|
|
'context' => $context,
|
|
], TRUE);
|
|
file_put_contents('kilo.log', $msg, FILE_APPEND);
|
|
|
|
}, -1);
|
|
|
|
// Set up autoloading
|
|
require_once __DIR__ . '/src/functions.php';
|
|
require_once __DIR__ . '/src/hldb.php';
|
|
spl_autoload_register(static function ($class) {
|
|
$parts = explode('\\', $class);
|
|
$file = __DIR__ . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . $parts[1] . '.php';
|
|
if (file_exists($file))
|
|
{
|
|
require_once $file;
|
|
}
|
|
});
|
|
|
|
// ! Init with an IIFE
|
|
return (static function (int $argc, array $argv): int {
|
|
enable_raw_mode();
|
|
|
|
$editor = Editor::new();
|
|
|
|
if ($argc >= 2)
|
|
{
|
|
$editor->open($argv[1]);
|
|
}
|
|
|
|
$editor->setStatusMessage('HELP: Ctrl-S = save | Ctrl-Q = quit | Ctrl-F = find');
|
|
|
|
// Input Loop
|
|
while (true)
|
|
{
|
|
$editor->refreshScreen();
|
|
$char = $editor->processKeypress();
|
|
if ($char === NULL)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
})($argc, $argv);
|