diff options
author | Florrie <towerofnix@gmail.com> | 2019-03-16 12:05:11 -0300 |
---|---|---|
committer | Florrie <towerofnix@gmail.com> | 2019-03-16 12:05:11 -0300 |
commit | 72f417acb5543f24f1de937cef455d8be8add917 (patch) | |
tree | 654eb880627110219d0e08d75ba2746188f1f17e /util/tui-app.js | |
parent | aa38d1beb78635e5273b89b76c6a2b91428dd62c (diff) |
Make tui-app boilerplate support ^Z/suspend
Diffstat (limited to 'util/tui-app.js')
-rw-r--r-- | util/tui-app.js | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/util/tui-app.js b/util/tui-app.js index 7ee0480..0b845ea 100644 --- a/util/tui-app.js +++ b/util/tui-app.js @@ -28,18 +28,36 @@ module.exports = async function tuiApp(callback) { root.fixAllLayout(); }); - const clean = function() { + const cleanTerminal = function () { process.stdout.write(ansi.cleanCursor()); process.stdout.write(ansi.disableAlternateScreen()); }; - const quitProgram = function(status = 0) { - clean(); + const dirtyTerminal = function () { + process.stdout.write(ansi.enableAlternateScreen()); + process.stdout.write(ansi.startTrackingMouse()); + }; + + const quitProgram = function (status = 0) { + cleanTerminal(); process.exit(status); }; - const startRenderLoop = function() { - process.stdout.write(ansi.enableAlternateScreen()); + const suspendProgram = function () { + cleanTerminal(); + process.kill(process.pid, 'SIGTSTP'); + }; + + const startRenderLoop = function () { + dirtyTerminal(); + + process.on('SIGCONT', () => { + flushable.clearLastFrame(); + process.stdin.setRawMode(false); + process.stdin.setRawMode(true); + dirtyTerminal(); + }); + setInterval(() => { root.renderTo(flushable); flushable.flush(); @@ -50,10 +68,11 @@ module.exports = async function tuiApp(callback) { return await callback({ root, startRenderLoop, + suspendProgram, quitProgram }); } catch (error) { - clean(); + cleanTerminal(); console.error(error); process.exit(1); }; |