Saving settings for extensions

Christoph Holtermann c.holtermann at
Sat May 23 09:48:41 EDT 2015

Hello Geert,

thank you very much for your extensive answer. I'll work through
it and ask again. As I've said it's something I've been wondering
about for a while. For some python scripts I've used external
config files but I think it makes more sense to have config stored
in one place.



Am 23.05.2015 um 11:16 schrieb Geert Janssens:
> On Monday 11 May 2015 10:29:17 Christoph Holtermann wrote:
>> Dear developers,
>> I have been wondering for some while if it is possible
>> for extensions like in the python bindings to save settings
>> in the place gnucash does.
>> regards,
>> Christoph Holtermann
> Hi Christoph,
> That's a short question which requires a long answer.
> To start there are several places where gnucash stores settings 
> depending on the scope of these settings.
> Settings that affect all the user's books are stored via the gsettings 
> mechanism (which has different backends depending on the OS).
> Settings that are related to a book are stored in a file in 
> .gnucash/books. These settings mostly save gui state so as such they may 
> be of less interest.
> The gsettings interface is wrapped via the gnc_prefs api in gnucash. The 
> gnc_prefs api is described here:
> Via this api it should be relatively easy to read or modify any setting 
> that is defined in the gnucash code.
> And there's the catch. Only settings that are defined can easily be 
> manipulated. That's a limitation of the underlying gsettings interface.
> Nothing however is stopping you from defining your own set of 
> preferences in an extension written using the python bindings. It will 
> likely be more complicated to write such an extension, mainly due to the 
> way gsettings works.
> New preference options are defined as a "schema" in an xml file. You 
> will find several such schema files in the gnucash source tree in the 
> various gchemas directories (for example: src/gnome-utils/gschemas).
> This schema file then has to be compiled and installed in a place where 
> the gsettings library can find it. If you don't want to or can't install 
> the compiled schema in the system libraries, you can also install it in 
> a non-standard location and set the XDG_DATA_DIRS environment variable 
> properly so your schema file will be found. GnuCash uses this mechanism 
> itself when it's configured to be installed in a directory other than 
> the default (/usr/bin). An example can be found in 
> $PREFIX/etc/gnucash/environment in such a case. Note that this file is 
> not using shell script notation, so if you want to set the environment 
> variable, you will have to transliterate the example (; -> : and adding 
> $ signs for inclusion of other environment variables).
> So depending on the build system surrounding your python extension, 
> wanting to use the gnc preferences system suddenly adds quite a bit of 
> overhead. I have no idea if gsettings has some useful python bindings 
> itself that may simplify this.
> The above is a rough overview only. If you need more details or 
> specifics feel free to ask.
> Regards,
> Geert

--- Nachricht gesendet von C. Holtermann ---
-                                          -
-  Verschlüsselte Nachrichten können über  -
- den öffentlichen Schlüssel auf folgendem -
- Keyserver an mich gesendet werden:       -

More information about the gnucash-devel mailing list