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

This commit is contained in:
Timothy Warren 2022-08-23 14:09:00 -04:00
parent 07fded57e8
commit 5887faf7d4

View File

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