diff options
author | Florrie <towerofnix@gmail.com> | 2017-12-10 11:13:22 -0400 |
---|---|---|
committer | Florrie <towerofnix@gmail.com> | 2017-12-10 11:14:29 -0400 |
commit | ce20598ca90b922592e1ddf38eb8f218cc9daa73 (patch) | |
tree | 7590ed9b83b0e0fb1d36d44550dbe79a7536869d /util/ansi.js | |
parent | d6495a9cfddb65fb9b3cb09771ee0bef88d5d9f7 (diff) |
Clean up old state code in ANSI interpreter
Diffstat (limited to 'util/ansi.js')
-rw-r--r-- | util/ansi.js | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/util/ansi.js b/util/ansi.js index cfe7b1f..a303cd6 100644 --- a/util/ansi.js +++ b/util/ansi.js @@ -119,7 +119,10 @@ const ansi = { }, - interpret(text, scrRows, scrCols, oldChars = null, lastChar = null) { + interpret(text, scrRows, scrCols, { + oldChars = null, oldLastChar = null, + oldCursorRow = 0, oldCursorCol = 0 + } = {}) { // Interprets the given ansi code, more or less. const blank = { @@ -360,7 +363,7 @@ const ansi = { // Character concatenation ----------- - lastChar = lastChar || { + let lastChar = oldLastChar || { char: '', attributes: [] } @@ -397,9 +400,17 @@ const ansi = { } } + // If anything changed *or* the cursor moved, we need to put it back where + // it was before: + if (result.length || cursorCol !== oldCursorCol || cursorRow !== oldCursorRow) { + result.push(ansi.moveCursor(cursorRow, cursorCol)) + } + return { - newChars: newChars.slice(), - lastChar: Object.assign({}, lastChar), + oldChars: newChars.slice(), + oldCursorRow: cursorRow, + oldCursorCol: cursorCol, + oldLastChar: Object.assign({}, lastChar), screen: result.join('') } } |