diff --git a/com/isoterminal/VT100.js b/com/isoterminal/VT100.js index 551d91c..1282daf 100644 --- a/com/isoterminal/VT100.js +++ b/com/isoterminal/VT100.js @@ -551,25 +551,28 @@ VT100.prototype.clearpos = function VT100_clearpos(row, col) this.redraw_[row] = 1; } -VT100.prototype.curs_set = function(vis, grab, eventist) +VT100.prototype.curs_set = function(vis, grab, offscreenKB) { + // offscreenKB is a div which receives keys from physical kb's + // but not from touch keyboards (they require an input-field) + // hence setupTouchInputFallback()..this is how we seperate the two this.info("curs_set:: vis: " + vis + ", grab: " + grab); if (vis !== undefined){ this.cursor_vis_ = (vis > 0); } - if (eventist === undefined) - eventist = this.scr_; + if (offscreenKB === undefined) + offscreenKB = this.scr_; if (grab === true || grab === false) { if (grab === this.grab_events_) return; if (grab) { this.grab_events_ = true; VT100.the_vt_ = this; - eventist.addEventListener("keypress", VT100.handle_onkeypress_, false); - eventist.addEventListener("keydown", VT100.handle_onkeypress_, false); + offscreenKB.addEventListener("keypress", VT100.handle_onkeypress_, false); + offscreenKB.addEventListener("keydown", VT100.handle_onkeypress_, false); } else { - eventist.removeEventListener("keypress", VT100.handle_onkeypress_, false); - eventist.removeEventListener("keydown", VT100.handle_onkeypress_, false); + offscreenKB.removeEventListener("keypress", VT100.handle_onkeypress_, false); + offscreenKB.removeEventListener("keydown", VT100.handle_onkeypress_, false); this.grab_events_ = false; VT100.the_vt_ = undefined; } @@ -1337,18 +1340,19 @@ VT100.prototype.setupTouchInputFallback = function(){ this.form.appendChild(this.input) this.scr_.parentElement.appendChild(this.form) - this.input.addEventListener('blur', () => { - this.key_buf_.push('\n') - setTimeout(VT100.go_getch_, 0); - }) - this.input.addEventListener("keydown", VT100.handle_onkeypress_, false); this.input.handler = (e) => { let ch let isEnter = String(e?.code).toLowerCase() == "enter" || e?.code == 13 - ch = isEnter ? '\n' : this.input.value.substr(-1) - if( this.input.lastValue && this.input.value.length < this.input.lastValue.length ) ch = '\b' // naive + let isBackspace = String(e?.code).toLowerCase() == "backspace" || e?.code == 8 + if( isEnter ){ + ch = '\n' + }else if( isBackspace ){ + ch = '\b' // naive + }else{ + ch = this.input.value.substr(-1) + } // detect backspace if( !ch ) return this.key_buf_.push(ch); @@ -1360,15 +1364,33 @@ VT100.prototype.setupTouchInputFallback = function(){ this.scr_.addEventListener('touchend', (e) => this.focus() ) this.scr_.addEventListener('click', (e) => this.focus() ) } + this.useFallbackInput = true this.focus() } VT100.prototype.focus = function(){ setTimeout( () => { - this.input.focus() + const el = this[ this.useFallbackInput ? 'input' : 'scr_' ] + el.focus() + console.dir(el) }, 10 ) } +window.keyboard = function(n){ + let msg = 'unknown keyboard' + if( n == 0 ){ + msg = "using onscreen keyboard" + VT100.the_vt_.useFallbackInput = true + VT100.the_vt_.focus() + } + if( n == 1 ){ + msg = "using offscreen keyboard" + VT100.the_vt_.useFallbackInput = false + VT100.the_vt_.focus() + } + return msg +} + function dump(x) { // Do nothing console.log(x)