!7 sclass FakeFake > DynModule { transient JTextArea ta; S text; LS log = synchroList(); start { onSpeechRecognized(voidfunc(fS s) { log("Heard: " + s); trigger(); }); } void trigger { swing { if (!dm_visible() || ta == null) ret; fS line = firstLine(text); if (empty(line)) ret; log("Said: " + line); setText(ta, dropFirstLine(text)); // TODO: move cursor thread { dm_say(line); } } } void log(S s) { log.add(print(s)); persistMe(); } visualize { ta = jLiveValueWordWrapTypeWriterTextArea_bothWays(dm_fieldLiveValue('text)); onCtrlEnter(ta, r trigger); ret ta; } }