AFRAME.registerComponent('bind-element-to-finger', { multiple: true, schema: { hand: {type: 'string', default: 'r_handMeshNode'}, finger: {type: 'string', default: 'index-finger-tip'}, target : {type: 'selector'}, }, tick: function (time, timeDelta) { const joint = AFRAME.scenes[0].object3D.getObjectByName(this.data.hand)?.parent.getObjectByName(this.data.finger) if ( joint && this.data.target.object3D.parent == AFRAME.scenes[0].object3D ) this.data.target.object3D.parent = joint } }) window.keyboardTarget = typinghud let kbd = addDrumKeyboard() kbd.addEventListener( "keypressed", e => { document.querySelector("[isoterminal]").components.isoterminal.term.send(e.detail.key) // consider executing the content on ENTER // document.querySelector("[isoterminal]").components.isoterminal.term.exec("ls") // raw keypress, this getting SHFT, ENT, etc })