2022-03-05 22:41:29 +05:00

73 lines
2.6 KiB
Python

#!/bin/env python3
import os
import sys
import xml.dom.minidom
from xml.dom.minidom import parse
########
# This application loops through installed applets and extracts the config XML file
# Output is then presented in mediawiki format for copying and pasting to https://userbase.kde.org/KDE_System_Administration/PlasmaDesktopScripting#Configuration_Keys
# app should be kept flexible enough to port to a different format in future
#set plasmoid installation path manually if applicable
xdg_data_dir = ""
if not xdg_data_dir:
xdg_data_dirs = os.getenv("XDG_DATA_DIRS").split(":")
xdg_data_dirs.append("/usr/share")
xdg_data_dir = xdg_data_dirs[0]
root = xdg_data_dir + "/plasma/plasmoids"
plasmoids = os.listdir(root)
plasmoids.sort()
for plasmoid in plasmoids:
configPath = "/contents/config/main.xml"
path = root + "/" + plasmoid + configPath
try:
dom = xml.dom.minidom.parse(path).documentElement
print ("===" + plasmoid + "===")
for group in dom.getElementsByTagName("group"):
groupName = group.getAttribute("name")
print ("======" + groupName + "======")
for entry in group.getElementsByTagName("entry"):
name = entry.getAttribute("name")
type = entry.getAttribute("type")
default = ""
description = ""
if entry.hasAttribute("hidden") and entry.getAttribute("hidden") == "true":
continue
defaultTags = entry.getElementsByTagName("default")
if (defaultTags.length > 0 and defaultTags[0].childNodes.length > 0):
default = defaultTags[0].childNodes[0].data
if (default == ""):
if (type == "Bool"):
default = "false"
elif (type == "Int"):
default = "0"
elif (type == "StringList"):
default = "empty list"
elif (type == "String"):
default = "empty string"
else:
default = "null"
labelTags = entry.getElementsByTagName("label")
if (labelTags.length > 0 and labelTags[0].childNodes.length > 0):
description = labelTags[0].childNodes[0].data
print ("* '''%s''' (''%s'', default ''%s'') %s" % (name , type, default, description))
except IOError:
sys.stderr.write("No config in " + plasmoid +"\n")
#abort on other errors so we can find them