!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(part); SS properties = parseEqualsProperties(part); list.add(nu(RecordingProgram, index := idx, applicationName := unquote(properties.get("application.name")), processID := unquote(properties.get("application.process.id")), sourceIndex := parseInt(properties.get("Source")))); } setData(list); } visualize { JComponent c = super.visualize(); ret centerAndEastWithMargins(c, vstackWithSpacing(jlabel("Buttons go here"))); } }