« get me outta code hell

Improve cursor display - tui-lib - Pure Node.js library for making visual command-line programs (ala vim, ncdu)
about summary refs log tree commit diff
path: root/ui
diff options
context:
space:
mode:
authorliam4 <towerofnix@gmail.com>2017-07-03 21:13:50 -0300
committerliam4 <towerofnix@gmail.com>2017-07-03 21:13:50 -0300
commitb087c428ba492715626a7875185f9ba18fb30b3e (patch)
treec7ca597804b9cb3b13e43782d95b0a24fb83a73e /ui
parent930d61b9f067346f467d4d84015088f57c54da56 (diff)
Improve cursor display
- Whether the cursor is displayed or not is now based on the
  cursorVisible property rather than whether cursorX and cursorY
  are set or not.
- The actual shell cursor is now invisible... this is objectively
  an act of Evil, though! This doesn't look like too hard to
  fix, thankfully.
- A new cleanCursor function has been added to ansi.js.
Diffstat (limited to 'ui')
-rw-r--r--ui/Root.js6
-rw-r--r--ui/form/FocusElement.js1
-rw-r--r--ui/form/TextInput.js1
3 files changed, 4 insertions, 4 deletions
diff --git a/ui/Root.js b/ui/Root.js
index b170f99..fc494a7 100644
--- a/ui/Root.js
+++ b/ui/Root.js
@@ -50,9 +50,7 @@ module.exports = class Root extends DisplayElement {
     // Render the cursor, based on the cursorX and cursorY of the currently
     // selected element.
     if (
-      this.selected &&
-      typeof this.selected.cursorX === 'number' &&
-      typeof this.selected.cursorY === 'number' &&
+      this.selected && this.selected.cursorVisible &&
       (Date.now() - this.cursorBlinkOffset) % 1000 < 500
     ) {
       writable.write(ansi.moveCursor(
@@ -61,7 +59,7 @@ module.exports = class Root extends DisplayElement {
       writable.write('I')
       writable.write(ansi.resetAttributes())
     }
-    writable.write(ansi.moveCursor(0, 0))
+    writable.write(ansi.hideCursor())
   }
 
   cursorMoved() {
diff --git a/ui/form/FocusElement.js b/ui/form/FocusElement.js
index 5967e26..18f13bf 100644
--- a/ui/form/FocusElement.js
+++ b/ui/form/FocusElement.js
@@ -6,6 +6,7 @@ module.exports = class FocusElement extends DisplayElement {
   constructor() {
     super()
 
+    this.cursorVisible = false
     this.cursorX = 0
     this.cursorY = 0
 
diff --git a/ui/form/TextInput.js b/ui/form/TextInput.js
index fc59cbb..a10a26f 100644
--- a/ui/form/TextInput.js
+++ b/ui/form/TextInput.js
@@ -11,6 +11,7 @@ module.exports = class TextInput extends FocusElement {
     super()
 
     this.value = ''
+    this.cursorVisible = true
     this.cursorIndex = 0
     this.scrollChars = 0
   }