This articleneeds additional citations forverification. Please helpimprove this article byadding citations to reliable sources. Unsourced material may be challenged and removed. Find sources: "X resources" – news ·newspapers ·books ·scholar ·JSTOR(September 2011) (Learn how and when to remove this message) |
In theX Window System, theX resources areparameters ofcomputer programs such as the name of thefont used in thebuttons, thebackground color ofmenus, etc. They are used in conjunction with or as an alternative tocommand line parameters andconfiguration files.[1][2]
At the X protocol level, resources are strings that are stored in the server and have no special meaning. The syntax and meaning of these strings is given by client libraries and applications.
Every X resource specifies a parameter for a program or one of its components. A fully specified resource has the following format:
application.component.subcomponent.subcomponent.attribute: valueThis resource specifies the value ofattribute for the component namedcomponent.subcomponent.subcomponent of the programapplication. Resources are often used for specifying the parameters ofwidgets created by the application. Since these widgets are arranged in atree, the sequence of component/subcomponent names is used to identify a widget by giving its path within the tree. The value of the resource is the value of an attribute for this widget, such as its background color, etc.
X resources are also used to specify parameters for the program that are not directly related to its widgets, using the same syntax.
X resources are designed to allow the same parameter to be specified for more than one program or component. This is realized by allowingwildcard characters in a resource specification. In particular, the? character is used to match the application name or a single component. The* character is used to match any number of components. These two characters can be used anywhere but at the end of the resource name. In other words, an attribute cannot be replaced by a wildcard character.
While the resources can be loosely specified via the wildcard characters, queries for the value of a resource must specify that resource exactly. For example, a resource can specify that the background of every component of thexmail program must be red:
xmail*background: redHowever, when a program (e.g., thexmail program itself, when it wants to find out which background color to use) accesses the resource database viaXlib functions, it can only request the value of a specific resource. Contrary to mostdatabases, the stored data can be specified loosely (via wildcard characters), but the interrogation cannot. For example, a program can query for the value ofxmail.main.background or ofxmail.toc.buttons.background, but cannot use? or* to check the background color of several components at once.
Resources can also be specified forclasses of elements: for example,application.widget.widget.attribute: value can be generalized by replacing the application name with its class (e.g.,Mail instead ofxmh), each widget with its type (Pane,Button, etc.), and the attribute with its type.
During Xdisplay server execution, the X resources are stored in two standard locations, depending on whether they apply to all screens or to a particular one:
RESOURCE_MANAGER property of the root window of screen 0SCREEN_RESOURCES property of the root window of an arbitrary screen
X resources are stored in the server rather than in a configuration file to allow programs started from other computers to use them. Indeed, a program connecting to an X display server from another computer can access the resources via theX protocol. Using the old system of storing program parameters in the.Xdefaults file creates the need of copying this file to all other computers where a program can be started.
Resources are manipulated by thexrdb program. In particular, many X display server configurations run xrdb at start up, instructing it to read the resources from the.Xresources file in the user'shome directory. From this point on, every other program finds the resources in the two standard locations.You can view the current resources from a console withxrdb -query.
Xlib contains a number ofconvenience functions for accessing the resources on the server and manipulating them locally. These functions are used both by xrdb and by every other program that needs these resources. Most of these functions manipulate aresource database, which is a local data structure representing a set of resource specifications. The Xlib functions for resource management are:
XResourceManagerString andXScreenResourceString)XrmInitialize,XrmDestroyDatabase,XrmGetFileDatabase,XrmPutFileDatabase,XrmGetStringDatabase,XrmLocaleOfDatabase,XrmSetDatabase,XrmGetDatabase,XrmCombineFileDatabase,XrmCombineDatabase,XrmMergeDatabases,XrmParseCommand)XrmGetResource,XrmQGetResource,XrmQGetSearchList,XrmQGetSearchResource,XrmPutResource,XrmQPutResource,XrmPutStringResource,XrmQPutStringResource,XrmPutLineResource,XrmEnumerateDatabase)In particular, the functionXrmParseCommand allow parsing thecommand line arguments, reading resources that are then added to a local resource database. This way, the resources can be read from the server and used as defaults that are overridden by command line arguments.
For the sake of efficiency, integers calledquarks are defined to represent local strings. Quarks are similar toatoms, but they represent strings stored locally rather than on the server. A number of Xlib functions create an association between strings and quarks. Quarks can be used in place of component names when using one of the above functions; resource names therefore correspond to quark lists.