Only refresh screen when a key is pressed
Some checks failed
timw4mail/php-kilo/pipeline/head There was a failure building this commit
Some checks failed
timw4mail/php-kilo/pipeline/head There was a failure building this commit
This commit is contained in:
parent
07fded57e8
commit
5887faf7d4
@ -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;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user