!7 srecord RecordingProgram( S processID, S applicationName, int sourceIndex, int index ) {} module ListAudioSources > DynObjectTable { start { set fieldsInOrder; dontPersist(); doEvery(0.0, 10.0, r updateList); } void updateList enter { LS parts = splitByZeroIndent(backtick("pactl list source-outputs")); new L list; for (S part : parts) { int idx = parseFirstInt(lines.get(i)); SS properties = parseEqualsProperties(part); list.add(nu(RecordingProgram, index := idx, applicationName := properties.get("application.name")); } setData(list); } visualize { JComponent c = super.visualize(); ret centerAndEastWithMargins(c, vstackWithSpacing(jlabel("Buttons go here"))); } }