KDE System Administration/PlasmaDesktopScripting/Examples: Difference between revisions
(Prepare a wiki page for uploading various plasma scripting examples from the unmaintained kdeexamples repo.) |
(→Advanced Examples: Add a couple more examples.) |
||
Line 58: | Line 58: | ||
} | } | ||
} | } | ||
</syntaxhighlight> | |||
=== Print config values for each instance of a specific widget === | |||
<syntaxhighlight lang="javascript"> | |||
function forEachWidgetInContainmentList(containmentList, callback) { | |||
for (var containmentIndex = 0; containmentIndex < containmentList.length; containmentIndex++) { | |||
var containment = containmentList[containmentIndex]; | |||
var widgets = containment.widgets(); | |||
for (var widgetIndex = 0; widgetIndex < widgets.length; widgetIndex++) { | |||
var widget = widgets[widgetIndex]; | |||
callback(widget, containment); | |||
} | |||
} | |||
} | |||
function forEachWidget(callback) { | |||
forEachWidgetInContainmentList(desktops(), callback); | |||
forEachWidgetInContainmentList(panels(), callback); | |||
} | |||
function forEachWidgetByType(type, callback) { | |||
forEachWidget(function(widget, containment) { | |||
if (widget.type == type) { | |||
callback(widget, containment); | |||
} | |||
}); | |||
} | |||
function logWidget(widget) { | |||
print("" + widget.type + ": "); | |||
var configGroups = widget.configGroups.slice(); // slice is used to clone the array | |||
for (var groupIndex = 0; groupIndex < configGroups.length; groupIndex++) { | |||
var configGroup = configGroups[groupIndex]; | |||
print("\t" + configGroup + ": "); | |||
widget.currentConfigGroup = [configGroup]; | |||
for (var keyIndex = 0; keyIndex < widget.configKeys.length; keyIndex++) { | |||
var configKey = widget.configKeys[keyIndex]; | |||
var configValue = widget.readConfig(configKey); | |||
print("\t\t" + configKey + ": " + configValue); | |||
} | |||
} | |||
} | |||
//------ | |||
forEachWidget(function(widget){ | |||
logWidget(widget); | |||
}); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 88: | Line 141: | ||
} | } | ||
} | } | ||
</syntaxhighlight> | |||
=== Changing a config value for each instance of a specific widget === | |||
<syntaxhighlight lang="javascript"> | |||
// See previous examples for these functions. | |||
function forEachWidgetInContainmentList(containmentList, callback) { ... } | |||
function forEachWidget(callback) { ... } | |||
function forEachWidgetByType(type, callback) { ... } | |||
function widgetSetProperty(args) { | |||
if (!(args.widgetType && args.configKey)) { | |||
return; | |||
} | |||
forEachWidgetByType(args.widgetType, function(widget){ | |||
var configGroups = widget.configGroups.slice(); // slice is used to clone the array | |||
for (var groupIndex = 0; groupIndex < configGroups.length; groupIndex++) { | |||
var configGroup = configGroups[groupIndex]; | |||
widget.currentConfigGroup = [configGroup]; | |||
if (args.configGroup && args.configGroup != configGroup) { | |||
continue; | |||
} | |||
for (var keyIndex = 0; keyIndex < widget.configKeys.length; keyIndex++) { | |||
var configKey = widget.configKeys[keyIndex]; | |||
if (args.configKey != configKey) { | |||
continue; | |||
} | |||
// Delete when done debugging | |||
var configValue = widget.readConfig(configKey); | |||
var valueType = typeof configValue; | |||
print("" + widget.type + " (id: " + widget.id + "):"); | |||
print("\t[" + configGroup + "] " + configKey + ": " + configValue + " (" + valueType + ") => " + args.configValue); | |||
// End debugging | |||
widget.writeConfig(configKey, args.configValue); | |||
} | |||
} | |||
}); | |||
} | |||
widgetSetProperty({ | |||
widgetType: "org.kde.plasma.taskmanager", | |||
configGroup: "", // Optional, will search all groups for configKey if empty. | |||
configKey: "separateLaunchers", | |||
configValue: "false", | |||
}); | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 02:03, 22 August 2019
An older set of examples for Plasma4 can be found here that demonstrate the use of various aspects of Plasma shell scripting.
Simple Examples
Advanced Examples
Iterate all widgets and print their config values
var allDesktops = desktops();
for (var desktopIndex = 0; desktopIndex < allDesktops.length; desktopIndex++) {
var d = allDesktops[desktopIndex];
print(d);
var widgets = d.widgets();
for (var widgetIndex = 0; widgetIndex < widgets.length; widgetIndex++) {
var w = widgets[widgetIndex];
print("\t" + w.type + ": ");
var configGroups = w.configGroups.concat([]); // concat is used to clone the array
for (var groupIndex = 0; groupIndex < configGroups.length; groupIndex++) {
var g = configGroups[groupIndex];
print("\t\t" + g + ": ");
w.currentConfigGroup = [g];
for (var keyIndex = 0; keyIndex < w.configKeys.length; keyIndex++) {
var configKey = w.configKeys[keyIndex];
print("\t\t\t" + configKey + ": " + w.readConfig(configKey));
}
}
}
}
var allPanels = panels();
for (var panelIndex = 0; panelIndex < allPanels.length; panelIndex++) {
var p = allPanels[panelIndex];
print(p);
var widgets = p.widgets();
for (var widgetIndex = 0; widgetIndex < widgets.length; widgetIndex++) {
var w = widgets[widgetIndex];
print("\t" + w.type + ": ");
var configGroups = w.configGroups.concat([]); // concat is used to clone the array
for (var groupIndex = 0; groupIndex < configGroups.length; groupIndex++) {
var g = configGroups[groupIndex];
print("\t\t" + g + ": ");
w.currentConfigGroup = [g];
for (var keyIndex = 0; keyIndex < w.configKeys.length; keyIndex++) {
var configKey = w.configKeys[keyIndex];
print("\t\t\t" + configKey + ": " + w.readConfig(configKey));
}
}
}
}
Print config values for each instance of a specific widget
function forEachWidgetInContainmentList(containmentList, callback) {
for (var containmentIndex = 0; containmentIndex < containmentList.length; containmentIndex++) {
var containment = containmentList[containmentIndex];
var widgets = containment.widgets();
for (var widgetIndex = 0; widgetIndex < widgets.length; widgetIndex++) {
var widget = widgets[widgetIndex];
callback(widget, containment);
}
}
}
function forEachWidget(callback) {
forEachWidgetInContainmentList(desktops(), callback);
forEachWidgetInContainmentList(panels(), callback);
}
function forEachWidgetByType(type, callback) {
forEachWidget(function(widget, containment) {
if (widget.type == type) {
callback(widget, containment);
}
});
}
function logWidget(widget) {
print("" + widget.type + ": ");
var configGroups = widget.configGroups.slice(); // slice is used to clone the array
for (var groupIndex = 0; groupIndex < configGroups.length; groupIndex++) {
var configGroup = configGroups[groupIndex];
print("\t" + configGroup + ": ");
widget.currentConfigGroup = [configGroup];
for (var keyIndex = 0; keyIndex < widget.configKeys.length; keyIndex++) {
var configKey = widget.configKeys[keyIndex];
var configValue = widget.readConfig(configKey);
print("\t\t" + configKey + ": " + configValue);
}
}
}
//------
forEachWidget(function(widget){
logWidget(widget);
});
Adding a widget to the System Tray
var widgetName = "org.kde.plasma.printmanager";
for (i = 0; i < panelIds.length; ++i) { //search through the panels
panel = panelById(pids[i]);
if (!panel) continue;
for (tmpIndex = 0; tmpIndex < panel.widgetIds.length; tmpIndex ++) {
appletWidget = panel.widgetById(panel.widgetIds[tmpIndex]);
if (appletWidget.type == "org.kde.plasma.systemtray") {
systemtrayId = appletWidget.readConfig("SystrayContainmentId");
if (systemtrayId) {
print("systemtray id: " + systemtrayId)
var systray = desktopById(systemtrayId);
systray.currentConfigGroup = ["General"];
var extraItems = systray.readConfig("extraItems").split(",");
if (extraItems.indexOf(widgetName) === -1) {
extraItems.push(widgetName)
systray.writeConfig("extraItems", extraItems);
systray.reloadConfig();
}
}
}
}
}
Changing a config value for each instance of a specific widget
// See previous examples for these functions.
function forEachWidgetInContainmentList(containmentList, callback) { ... }
function forEachWidget(callback) { ... }
function forEachWidgetByType(type, callback) { ... }
function widgetSetProperty(args) {
if (!(args.widgetType && args.configKey)) {
return;
}
forEachWidgetByType(args.widgetType, function(widget){
var configGroups = widget.configGroups.slice(); // slice is used to clone the array
for (var groupIndex = 0; groupIndex < configGroups.length; groupIndex++) {
var configGroup = configGroups[groupIndex];
widget.currentConfigGroup = [configGroup];
if (args.configGroup && args.configGroup != configGroup) {
continue;
}
for (var keyIndex = 0; keyIndex < widget.configKeys.length; keyIndex++) {
var configKey = widget.configKeys[keyIndex];
if (args.configKey != configKey) {
continue;
}
// Delete when done debugging
var configValue = widget.readConfig(configKey);
var valueType = typeof configValue;
print("" + widget.type + " (id: " + widget.id + "):");
print("\t[" + configGroup + "] " + configKey + ": " + configValue + " (" + valueType + ") => " + args.configValue);
// End debugging
widget.writeConfig(configKey, args.configValue);
}
}
});
}
widgetSetProperty({
widgetType: "org.kde.plasma.taskmanager",
configGroup: "", // Optional, will search all groups for configKey if empty.
configKey: "separateLaunchers",
configValue: "false",
});