!7 static new L words; p { long time, lastTime = 0; L tokens, lastTokens = ll(); repeat with ms sleep 500 { S s = sendSilently("Forwarded Recognizer", "text"); if (nempty(s)) { int i = s.indexOf("/"); S sTime = substring(s, 0, i); if (isInteger(sTime)) { time = parseLong(sTime); s = substring(s, smartIndexOf(s, ":")+1); tokens = javaTokC(s); L newTokens = time == lastTime ? dropMatchingPrefixList(tokens, lastTokens) : tokens; lastTokens = tokens; lastTime = time; print("New tokens: " + joinWithSpace(newTokens)); onWords(newTokens); } } } } svoid onWords(L newWords) { words.addAll(newWords); for (int i = 0; i < l(words); i++) { S w = words.get(i); if (eqic(w, "no")) { removeRange(words, 0, i+1); i = -1; } else if (eqicOneOf(w, "yes", "thanks")) { keep(subList(words, 0, i)); removeRange(words, 0, i+1); i = -1; } else if (eqic(get(words, i-1), "thank") && eqic(last(words), "you")) { keep(subList(words, 0, i-1)); removeRange(words, 0, i+1); i = -1; } } } svoid keep(L words) { print("KEEPING: " + joinWithSpace(words)); }