!7 module ListAudioSources > DynObjectTable { start { doEvery(10.0, r updateList); } void updateList enter { LS lines = lines(backtick("pactl list sources")); new Matches m; new LS list; for i over lines: if (swic(lines.get(i), "Source #")) { int idx = parseFirstInt(lines.get(i)); assertEquals("Source index", idx, l(list)); S desc = lines.get(i); for (int j = i+1; j < l(lines); j++) if (swic_trim(trim(lines.get(j)), "Description: ", m)) break with desc = m.rest(); list.add(desc); } setData(list); } }