The current virtual bindings are stored in one of two possible properties on the root window of screen #0. There can be only one set of active virtual bindings at the same time on a given display as there exists only one keyboard per display. Therefore the current bindings are always stored in a property of the root window of screen #0. Please note that they are not attached to the root window of the default screen, as the default screen can be any screen of a given display and may even change from application to application (see figure ). The storage for the current virtual bindings is provided by one of the following properties (both of type XA_STRING):
If none of the two properties exist, LESSTIF's startup-code first tries to find user-specific bindings and if it succeeds, it sticks them to the _MOTIF_BINDINGS property. Otherwise the starup-code figures out the default virtual bindings (according to the display) and loads them into the _MOTIF_DEFAULT_BINDINGS property. In every case, after starting a LESSTIF application the root window of screen #0 contains a property specifying the current virtual bindings.
The xmbind client can be used to change or setup the properties related to the virtual bindings. This client is remarkable simple, as most of the functionality needed is already laid down in the LESSTIF library (mostly in the form of ``undocumented'' functions). Following is the pseudo-code of xmbind (the source resides in (LESSTIF_ROOT)/clients/xmbind/xmbind.c):
if (°user specified a file on the command line°) { °delete the° _MOTIF_DEFAULT_BINDINGS °property° °load the file into the° _MOTIF_BINDINGS °property° } else { if (°there is a° .motifbind °file°) { °delete the° _MOTIF_DEFAULT_BINDINGS °property° °load the file into the° _MOTIF_BINDINGS °property° } else { °delete the° _MOTIF_BINDINGS °property° °load fallback bindings into the ° _MOTIF_DEFAULT_BINDINGS °property° } } °flush the connection to the display and terminate°