From 72f417acb5543f24f1de937cef455d8be8add917 Mon Sep 17 00:00:00 2001 From: Florrie Date: Sat, 16 Mar 2019 12:05:11 -0300 Subject: Make tui-app boilerplate support ^Z/suspend --- util/tui-app.js | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'util/tui-app.js') 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); }; -- cgit 1.3.0-6-gf8a5