!7 srecord AudioSource(S description, S volume, S baseVolume, bool muted, int index) {} module ListAudioSources > DynObjectTable { start { set fieldsInOrder; dontPersist(); doEvery(0.0, 10.0, r updateList); } void updateList enter { LS lines = lines(backtick("pactl list sources")); new Matches m; new L list; for i over lines: if (swic(lines.get(i), "Source #")) { int idx = parseFirstInt(lines.get(i)); AudioSource as = nu(AudioSource, index := idx, description := lines.get(i)); for (int j = i+1; j < l(lines); j++) { S line = lines.get(j); if (!startsWithSpace(line)) break; line = trim(line); if (swic_trim(line, "Description:", m)) as.description = m.rest(); else if (swic_trim(line, "Base Volume:", m)) as.baseVolume = m.rest(); else if (swic_trim(line, "Volume:", m)) as.volume = m.rest(); else if (swic_trim(line, "Mute:", m)) as.muted = isYes(m.rest()); } list.add(as); } setData(list); } }