!7 srecord RecordingProgram( S processID, S applicationName, S sourceName, int sourceIndex, int index ) {} cmodule ListRecordingPrograms > DynObjectTable { start { set fieldsInOrder; dontPersist(); doEvery(0.0, 10.0, r updateList); } void updateList enter { LS parts = withoutEmptyAfterTrims(splitByZeroIndent(backtick("pactl list source-outputs"))); new L list; for (S part : parts) { int idx = parseFirstInt(part); SS properties1 = parseColonProperties(part); SS properties2 = parseEqualsProperties(part); int sourceIndex = parseIntOrMinus1(properties1.get("Source")); S sourceName = cast dm_findAndCallModule("#1020375/ListAudioSources", 'getSourceName, sourceIndex); list.add(nu(RecordingProgram, index := idx, applicationName := unquote(properties2.get("application.name")), processID := unquote(properties2.get("application.process.id")), +sourceIndex, +sourceName)); } setData(list); } visualize { JComponent c = super.visualize(); ret centerAndEastWithMargins(c, vstackWithSpacing(jlabel("Buttons go here"))); } }