<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">
\begin{DoxyItemize}
\item infos = Information about the xfconf plugin is in keys below
\item infos/author = Richard StÃ¶ckl \href{mailto:e11908080@student.tuwien.ac.at}{\texttt{ e11908080@student.\+tuwien.\+ac.\+at}}
\item infos/licence = BSD
\item infos/needs =
\item infos/provides = storage/xfconf
\item infos/recommends =
\item infos/placements = postgetstorage presetstorage
\item infos/status = maintained libc configurable experimental unfinished concept limited memleak
\item infos/metadata =
\item infos/description = storage plugin for xfconf
\end{DoxyItemize}\hypertarget{md_src_plugins_xfconf_README_src_plugins_xfconf_README_md}{}\doxysection{Introduction}\label{md_src_plugins_xfconf_README_src_plugins_xfconf_README_md}
The xfconf plugin is a storage plugin to mount the xfconf configuration settings. This allows to operate on the XFCE configuration with libelektra. As usual, this allows the plugin to read and write to the XFCE configuration.

You can refer to the \href{https://docs.xfce.org/xfce/xfconf/start}{\texttt{ official XFCE documentation of xfconf}} to learn more about it.\hypertarget{md_src_plugins_xfconf_README_autotoc_md609}{}\doxysection{Xfconf Terminology}\label{md_src_plugins_xfconf_README_autotoc_md609}
\hypertarget{md_src_plugins_xfconf_README_autotoc_md610}{}\doxysubsection{Property}\label{md_src_plugins_xfconf_README_autotoc_md610}
A property in xfconf is the same as a key in libelektra i.\+e. it has a name and can hold a value. In contrast to libelektra, the value can be more complex i.\+e. it can be an array. In this case, the value of the property is mapped as multiple keys in libelektra using the array structure.\hypertarget{md_src_plugins_xfconf_README_autotoc_md611}{}\doxysubsection{Channel}\label{md_src_plugins_xfconf_README_autotoc_md611}
A channel is a type of namespace used in the xfconf library. Usually, it is used to separate the properties of different applications which is helpful if different applications rely on a property with the same name but require them to hold different values. For example Thunar uses a channel named {\ttfamily thunar}, Xfwm uses a channel named {\ttfamily xfwm4} and so on. Keep in mind that channels are only used to separate the properties such as namespaces. They are not a security feature i.\+e. every application has read/write access to every channel.

The list of all channels is stored in the {\ttfamily system\+:/elektra/modules/xfconf/channels} which is an array of all channel names. Channels cannot be created manually with libelektra. Instead, when mounting a channel (see \href{\#plugin-configuration}{\texttt{ Plugin Configuration}} how to specify a channel) and setting a key value below the mount, it will be automatically created.\hypertarget{md_src_plugins_xfconf_README_autotoc_md612}{}\doxysubsection{Locks}\label{md_src_plugins_xfconf_README_autotoc_md612}
Xfconf uses so-\/called locks to prevent users or applications to set properties to a new value. They can be referred as a type of constant. As of now, locks cannot be set or unset in xfconf which makes locked properties read-\/only forever.\hypertarget{md_src_plugins_xfconf_README_autotoc_md613}{}\doxysection{Dependencies}\label{md_src_plugins_xfconf_README_autotoc_md613}
The xfconf library from the XFCE project is the main dependency of this plugin. Usually, this library is called something such as {\ttfamily xfconf} (Arch, Fedora, {\ttfamily xfconf-\/devel} for compiling), {\ttfamily libxfconf-\/0} (Debian, {\ttfamily libxfconf-\/0-\/dev} for compmiling) or {\ttfamily xfce4-\/conf} (Free\+BSD) in the package manager. As xfconf itself depends on dbus and glib, these are dependecies too but should be installed with the package manager automatically. This plugin is tested with the xfconf versions {\ttfamily 4.\+16} and above.

Before you can start working with the plugin, you have to make sure dbus is running. If you use a common desktop environment this should already be fulfilled. Otherwise, {\ttfamily export \$(dbus-\/launch)} can be used to start it.

Note that this plugin does not support mac\+OS since Xfce is not commonly used there, Mac Ports only provides a very old version ({\ttfamily 4.\+12}) and Brew does not provide Xfce at all.\hypertarget{md_src_plugins_xfconf_README_autotoc_md614}{}\doxysection{Usage}\label{md_src_plugins_xfconf_README_autotoc_md614}
The usage is identical to most storage plugins except that the channel option during mount must be defined in order to tell xfconf which channel to mount.\hypertarget{md_src_plugins_xfconf_README_autotoc_md615}{}\doxysection{Plugin Configuration}\label{md_src_plugins_xfconf_README_autotoc_md615}
The required {\ttfamily channel} configuration option is used to tell xfconf which channel to mount.\hypertarget{md_src_plugins_xfconf_README_autotoc_md616}{}\doxysection{Examples}\label{md_src_plugins_xfconf_README_autotoc_md616}

\begin{DoxyCode}{0}
\DoxyCodeLine{\# Backup-\/and-\/Restore: user:/tests/xfconf}
\DoxyCodeLine{}
\DoxyCodeLine{\# mount the xfwm channel}
\DoxyCodeLine{kdb mount /dev/null /test/xfwm xfconf "{}channel=xfwm4"{}}
\DoxyCodeLine{}
\DoxyCodeLine{\# store old button layout}
\DoxyCodeLine{set "{}OLD\_LAYOUT=\$(kdb get /test/xfwm/general/button\_layout)"{}}
\DoxyCodeLine{}
\DoxyCodeLine{\# set only a close button}
\DoxyCodeLine{kdb set system:/test/xfwm/general/button\_layout "{}C|"{}}
\DoxyCodeLine{}
\DoxyCodeLine{\# read the new layout}
\DoxyCodeLine{kdb get /test/xfwm/general/button\_layout}
\DoxyCodeLine{\#&gt; C|}
\DoxyCodeLine{}
\DoxyCodeLine{\# restore old layout}
\DoxyCodeLine{kdb set /test/xfwm/general/button\_layout "{}\$OLD\_LAYOUT"{}}
\DoxyCodeLine{}
\DoxyCodeLine{\# umount the channel}
\DoxyCodeLine{kdb umount /test/xfwm}

\end{DoxyCode}
\hypertarget{md_src_plugins_xfconf_README_autotoc_md617}{}\doxysection{Limitations}\label{md_src_plugins_xfconf_README_autotoc_md617}

\begin{DoxyItemize}
\item usage of a dummy file such as {\ttfamily /dev/null}
\item xfconf locks can only be read but not set as this is not possible in xfconf
\item comments and sorting are not implemented due the lack of both in xfconf
\item due to memory leaks in xfconf upstream, valgrind reports errors when running the tests 
\end{DoxyItemize}</pre></body></html>