Only refresh screen when a key is pressed
timw4mail/php-kilo/pipeline/head There was a failure building this commit Details

This commit is contained in:
Timothy Warren 2022-08-23 14:09:00 -04:00
parent 07fded57e8
commit 5887faf7d4
1 changed files with 20 additions and 11 deletions

View File

@ -126,10 +126,15 @@ class Editor {
*/
public function run(): void
{
$this->refreshScreen();
while ( ! $this->shouldQuit)
{
$this->refreshScreen();
$this->processKeypress();
// Don't redraw unless the screen actually needs to update!
if ($this->processKeypress() !== false)
{
$this->refreshScreen();
}
}
}
@ -602,29 +607,31 @@ class Editor {
/**
* Input processing
*
* Returns `false` on no keypress
*/
protected function processKeypress(): void
protected function processKeypress(): bool|null
{
$c = Terminal::readKey();
if ($c === RawKeyCode::NULL || $c === RawKeyCode::EMPTY)
{
return;
return false;
}
switch ($c)
{
case RawKeyCode::CTRL('q'):
$this->quitAttempt();
return;
return true;
case RawKeyCode::CTRL('s'):
$this->save();
break;
case RawKeyCode::CTRL('s'):
$this->save();
break;
case RawKeyCode::CTRL('f'):
$this->find();
break;
case RawKeyCode::CTRL('f'):
$this->find();
break;
case KeyType::Delete:
case KeyType::Backspace:
@ -658,6 +665,8 @@ class Editor {
$this->quitTimes = KILO_QUIT_TIMES;
$this->setStatusMessage('');
}
return true;
}
// ------------------------------------------------------------------------