LINUX.ORG.RU

Разбор конфигурационного файла виджетов KDE Plasma

 , , ,


0

1

Делаю автонастройку рабочего места с DE KDE 5, пока в виде скрипта, потом планирую перевести на Ansible.

Дошла очередь до настройки виджетов на рабочем столе, и тут я выпал в осадок, как сделали конфигурационный файл. ИЧСХ, это не наследие былых времён, а относительно недавно в который раз переписанная среда. В общем, вместо красивого и лаконичного декларативного описания, с нормальными иерархиями, конфигурационный файл виджетов сделан в формате INI и выглядит так:

[ActionPlugins][0]
MidButton;NoModifier=org.kde.paste
RightButton;NoModifier=org.kde.contextmenu
wheel:Vertical;NoModifier=org.kde.switchdesktop

[ActionPlugins][1]
RightButton;NoModifier=org.kde.contextmenu

[Containments][1]
activityId=5aea47af-243c-44ed-8464-71579ca4509f
formfactor=0
immutability=1
lastScreen=0
location=0
plugin=org.kde.plasma.folder
wallpaperplugin=org.kde.image

[Containments][1][Configuration]
PreloadWeight=0

[Containments][1][Wallpaper][org.kde.image][General]
Image=DebianTheme

[Containments][14][General]
extraItems=org.kde.plasma.notifications,org.kde.plasma.networkmanagement,org.kde.discovernotifier,org.kde.plasma.devicenotifier,org.kde.plasma.mediacontroller,org.kde.plasma.battery
knownItems=org.kde.plasma.notifications,org.kde.plasma.volume,org.kde.kdeconnect,org.kde.plasma.networkmanagement,org.kde.plasma.clipboard,org.kde.discovernotifier,org.kde.plasma.devicenotifier,org.kde.plasma.keyboardindicator,org.kde.plasma.mediacontroller,org.kde.plasma.battery
showAllItems=true

[Containments][42]
activityId=
formfactor=2
immutability=1
lastScreen=0
location=4
plugin=org.kde.panel
wallpaperplugin=org.kde.image

[Containments][42][Applets][43][Configuration][General]
favoritesPortedToKAstats=true

[Containments][42][Applets][44]
immutability=1
plugin=org.kde.plasma.pager

[Containments][42][Applets][44][Configuration]
PreloadWeight=34

[Containments][42][Applets][45]
immutability=1
plugin=org.kde.plasma.taskmanager

[Containments][42][Applets][45][Configuration]
PreloadWeight=34

[Containments][42][Applets][45][Configuration][ConfigDialog]
DialogHeight=836
DialogWidth=933

[Containments][42][Applets][45][Configuration][General]
groupingStrategy=0
launchers=applications:org.kde.konsole.desktop,applications:firefox.desktop

[Containments][42][Applets][46]
immutability=1
plugin=org.kde.plasma.systemtray

[Containments][42][Applets][46][Configuration]
PreloadWeight=59
SystrayContainmentId=47

[Containments][42][Applets][48]
immutability=1
plugin=org.kde.plasma.digitalclock

[Containments][42][Applets][48][Configuration]
PreloadWeight=64

[Containments][42][Applets][58]
immutability=1
plugin=org.kde.plasma.kicker

[Containments][42][Applets][58][Configuration]
PreloadWeight=100

[Containments][42][Applets][58][Configuration][General]
favoritesPortedToKAstats=true

[Containments][42][Applets][58][Shortcuts]
global=Alt+F1

[Containments][42][Applets][59]
immutability=1
plugin=org.kde.plasma.digitalclock

[Containments][42][Applets][59][Configuration]
PreloadWeight=54

[Containments][42][Applets][59][Configuration][Appearance]
lastSelectedTimezone=UTC-07:00
selectedTimeZones=UTC-07:00
showDate=true
showLocalTimezone=true

[Containments][42][Applets][59][Configuration][ConfigDialog]
DialogHeight=540
DialogWidth=720

[Containments][42][ConfigDialog]
DialogHeight=84
DialogWidth=1920

[Containments][42][Configuration]
PreloadWeight=34

[Containments][42][General]
AppletOrder=58;44;45;46;59;48

[Containments][47]
activityId=
formfactor=2
immutability=1
lastScreen=0
location=4
plugin=org.kde.plasma.private.systemtray
wallpaperplugin=org.kde.image

[Containments][47][Applets][49][Configuration]
PreloadWeight=42

[Containments][47][Applets][50][Configuration]
PreloadWeight=42

[Containments][47][Applets][51][Configuration]
PreloadWeight=42

[Containments][47][Applets][52]
immutability=1
plugin=org.kde.kdeconnect

[Containments][47][Applets][52][Configuration]
PreloadWeight=39

[Containments][47][Applets][53][Configuration]
PreloadWeight=42

[Containments][47][Applets][54]
immutability=1
plugin=org.kde.plasma.notifications

[Containments][47][Applets][54][Configuration]
PreloadWeight=54

[Containments][47][Applets][55]
immutability=1
plugin=org.kde.plasma.devicenotifier

[Containments][47][Applets][55][Configuration]
PreloadWeight=84

[Containments][47][Applets][56]
immutability=1
plugin=org.kde.plasma.battery

[Containments][47][Applets][56][Configuration]
PreloadWeight=31

[Containments][47][Applets][57]
immutability=1
plugin=org.kde.plasma.networkmanagement

[Containments][47][Applets][57][Configuration]
PreloadWeight=34

[Containments][47][ConfigDialog]
DialogHeight=540
DialogWidth=720

[Containments][47][Configuration]
PreloadWeight=34

[Containments][47][General]
extraItems=org.kde.plasma.notifications,org.kde.kdeconnect,org.kde.plasma.networkmanagement,org.kde.plasma.devicenotifier,org.kde.plasma.battery
knownItems=org.kde.plasma.notifications,org.kde.plasma.volume,org.kde.kdeconnect,org.kde.plasma.networkmanagement,org.kde.plasma.clipboard,org.kde.discovernotifier,org.kde.plasma.devicenotifier,org.kde.plasma.keyboardindicator,org.kde.plasma.mediacontroller,org.kde.plasma.battery
showAllItems=true

[Containments][9][General]
AppletOrder=10;11;15

[General]
immutability=1

[ScreenMapping]
itemsOnDisabledScreens=

Например, я хочу изменить настройки панели задач, отображать только задачи с текущего рабочего стола.

Для этого мне нужно в секцию [Containments][42][Applets][45][Configuration][General] добавить параметр showOnlyCurrentDesktop=true Но эти ID динамически генерируются во время создания конфигурации. Нужно найти апплет с плагином org.kde.plasma.taskmanager Это выглядит так:

[Containments][42][Applets][45]
immutability=1
plugin=org.kde.plasma.taskmanager
Я узнаю, что ID апплета 45 и он находится в Containments с ID 42.

Я сталкивался с иерархиями в INI в виде [A/B/C], но я не видел [A][A_ID][B][B_ID], и какие парсеры смогут по найденому параметру выдать список групп в правильном порядке.

Какие есть идеи, как с этим вообще работать?

Похоже, что нужно будет написать патч для консольной утилиты kreadconfig5 (kconfig/src/kreadconfig/kreadconfig.cpp), добавив опции поиска групп по параметру внутри группы (ключ, значение), и внутри перебрать все доступные параметры в конфиге.

Эта утилита уже работает с KConfig, в которой есть поддержка этих nested groups. Может, в апстрим примут.

Pravorskyi ★★ ()