summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-03-16 21:11:39 +0000
committerDana Jansens <danakj@orodu.net>2003-03-16 21:11:39 +0000
commitf8a47de5ec444c452093371e3db16857eb39a490 (patch)
tree31db2567842d98232775f9980f7a8d2586c0ac71 /doc
parent8ba0586bcbdc7fe9648f1063812126d71a041670 (diff)
merge the C branch into HEAD
Diffstat (limited to 'doc')
-rw-r--r--doc/Makefile.am6
-rw-r--r--doc/bsetbg.1142
-rw-r--r--doc/bsetroot.189
-rw-r--r--doc/openbox.1.in859
-rw-r--r--doc/python/client.txt553
-rw-r--r--doc/python/config.txt13
-rw-r--r--doc/python/helpers.txt25
-rw-r--r--doc/python/hooks.txt255
-rw-r--r--doc/python/keyboard.txt59
-rw-r--r--doc/python/keyboarddata.txt35
-rw-r--r--doc/python/openbox.txt208
-rw-r--r--doc/python/pointer.txt130
-rw-r--r--doc/python/pointerdata.txt67
-rw-r--r--doc/themerc.txt54
14 files changed, 1402 insertions, 1093 deletions
diff --git a/doc/Makefile.am b/doc/Makefile.am
index a79bc858..3409d8ca 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,9 +1,9 @@
-CLEANFILES = openbox.1
+#CLEANFILES = openbox.1
MAINTAINERCLEANFILES = Makefile.in
-man_MANS = openbox.1
+#man_MANS = openbox.1
SUBDIRS = doxygen
-EXTRA_DIST = openbox.1.in
+#EXTRA_DIST = openbox.1.in
DEFAULT_MENU=$(pkgdatadir)/menu
diff --git a/doc/bsetbg.1 b/doc/bsetbg.1
deleted file mode 100644
index a233325f..00000000
--- a/doc/bsetbg.1
+++ /dev/null
@@ -1,142 +0,0 @@
-.TH bsetbg 1 "February 2002" "bsetbg" "v2.0"
-.SH NAME
-bsetbg \- utility to manipulate the appearance of the X11 desktop's root window.
-.SH SYNOPSIS
-\fBbsetbg\fR [options] \fIimage\fR
-.SH DESCRIPTION
-\fBbsetbg\fR is intended to provide a standard method for the \fIBlackbox\fR
-window manager to alter the background of the root window
-(although it will work with any other window manager as well). \fBbsetbg\fR
-acts as a wrapper both to \fIbsetroot\fR
-and to a flexible variety of third-party applications that it uses when handling images files.
-
-.SH OPTIONS
-.TP
-\fB\-f\fR, \fB\-full\fR \fIimage\fR
-\fIimage\fR is stretched to fill the entire desktop.
-.TP
-\fB\-t\fR, \fB\-tile\fR \fIimage\fR
-\fIimage\fR is tiled on the desktop.
-.TP
-\fB\-c\fR, \fB\-center\fR \fIimage\fR
-\fIimage\fR is centered on the desktop.
-.TP
-\fB\-e\fR, \fB\-exec\fR \fIprogram\fR \fIoptions\fR \fIfallback\-\fIarg\fR \fIimage\fR
-This option tells \fBbsetbg\fR to run a separate command by executing \fIprogram\fR with
-\fIoptions\fR, where \fIoptions\fR are arguments to \fIprogram\fR.
-
-If a \fIfallback\-arg\fR is supplied (\fB\-full\fR, \fB\-tile\fR, or \fB\-center\fR
-as described above),
-\fBbsetbg\fR will assume that the last argument is a filename. In the case that
-\fIprogram\fR exits non-zero or isn't available on the target system, \fBbsetbg\fR
-will try to handle the file with the fallback argument.
-
-See the \fBEXAMPLES\fR section for more information on \fB\-exec\fR.
-.TP
-\fB\-p\fR, \fB\-post\fR \fIlist\fR
-Specifies a list of arguments to pass to the $POST_COMMAND.
-.TP
-\fB\-d\fR, \fB\-debug\fR
-Debugging mode. \fBbsetbg\fR will print commands without executing them.
-.TP
-\fB\-g\fR, \fB\-generate\fR \fIlist\fR
-Output a list of default configuration values, suitable for redirecting into
-\fI~/.bsetbgrc\fR. Any arguments that are supplied will be considered applications
-to search for in the system path, overriding \fBbsetbg\fR's internal defaults.
-.TP
-\fB\-app\fR \fIimageApp\fR
-Use this flag to specify which image application to use. This
-application may be one of the pre-defined list or any application
-capable of displaying an image on the root window. This flag may be
-used in conjunction with passing application specific parameters to
-the application, in which
-case they should be enclosed in double quotes.
-.TP
-\fB\-v\fR, \fB\-version\fR
-Output version number.
-.TP
-\fB\-h\fR, \fB\-help\fR
-Output a brief usage message.
-
-.SH OTHER OPTIONS
-\fBbsetbg\fR will also accept all of the arguments for \fIbsetroot\fR.
-Consult the \fIbsetroot\fR(1) man page for further information.
-
-.SH CONFIGURATION
-\fBbsetbg\fR will read its configuration values from the file \fI~/.bsetbgrc\fR
-if it exists. Otherwise, it will scan the
-system path for a pre-defined list of image applications to use
-(currently this list consists of qiv, xli, xv, wmsetbg, Esetroot,
-display, and xsetbg).
-\fP
-\fI~/.bsetbgrc\fR should contain the following variables:
-.TP
-\fB CENTER=\fR\fI"string"\fR
-Application and arguments to be used to center an image on the root window
-when the \fB-center\fR argument is specified.
-
-.TP
-\fB FULL=\fR\fI"string"\fR
-Application and arguments to be used to stretch an image to fill the root window
-when the \fB-full\fR argument is specified.
-
-.TP
-\fB TILE=\fR\fI"string"\fR
-Application and arguments to be used to tile an image on the root window
-when the \fB-tile\fR argument is specified.
-
-.TP
-\fB DEFAULT=\fR\fI"string"\fR
-Action to take place by default if none of the above have been specified.
-
-.TP
-The following variables are optional:
-
-.TP
-\fB NO_EXEC=\fR\fI"boolean"\fR
-If this variable is set, bsetbg will never modify the root window.
-
-.TP
-\fB POST_COMMAND=\fR\fI"string"\fR
-This variable specifies a command that \fBbsetbg\fR will run after every
-successful modification of the root window.
-
-.TP
-\fB LOG_LAST_CMD=\fR\fI"boolean"\fR
-If this variable is set, \fBbsetbg\fR will keep a logfile of the last two
-successful commands.
-
-.TP
-\fB LOGFILE=\fR\fI"string"\fR
-This variable can specify the logfile to be used when $LOG_LAST_CMD is defined.
-The default is ~/.bsetbg_last_cmd .
-
-.TP
-As mentioned above, \fBbsetbg\fR will function perfectly for the majority of users without having a configuration file. Power users who want more control over \fBbsetbg\fR's behavior should run \fBbsetbg -g\fR and use the output to create a \fI~/.bsetbgrc\fR which may then be tweaked by hand.
-
-.SH EXAMPLES
-In this example, bsetbg will set the image in centered mode:
-
- bsetbg -center foo.png
-
-An example of the \fB-exec\fR argument:
-
- bsetbg -exec xv -root -quit -rmode 5 -rbg rgb:2/2/2 \\
- -center foo.png
-
-An example in which bsetbg creates a configuration file using xv and qiv:
-
- bsetbg -g xv qiv > ~/.bsetbgrc
-
-An example of the use of the \fB-app\fR argument:
-
- bsetbg -app qiv "-o rgb:d6/c5/a2 -x" -c foo.png
-
-.SH AUTHOR
-The author of
-.B bsetbg
-may be reached at \fItmk@lordzork.com\fR.
-
-.SH SEE ALSO
-\fIblackbox\fR(1), \fIbsetroot\fR(1), \fIqiv\fR(1), \fIxli\fR(1), \fIxv\fR(1), \fIdisplay\fR(1),
-\fIwmsetbg\fR(1)
diff --git a/doc/bsetroot.1 b/doc/bsetroot.1
deleted file mode 100644
index 9445c0d4..00000000
--- a/doc/bsetroot.1
+++ /dev/null
@@ -1,89 +0,0 @@
-.\"
-.\" Man page for Bsetroot
-.\"
-.\" Copyright (c) 2000 by Wilbert Berendsen <wbsoft@xs4all.nl>
-.\"
-.TH bsetroot 1 "June 16th, 2000" "0.60.3"
-.SH NAME
-bsetroot \- Openbox utility to change root window appearance
-.SH SYNOPSIS
-.BR bsetroot " \-help"
-.br
-.B bsetroot
-.RI "[ \-display " display " ] \-solid " color
-.br
-.B bsetroot
-.RI "[ \-display " display " ] \-mod " "x y" " \-fg " color " \-bg " color
-.br
-.B bsetroot
-.RI "[ \-display " display " ] \-gradient " texture " \-from " color " \-to " color
-.SH DESCRIPTION
-Bsetroot is a utility that can control the appearance of the root window in
-three ways: Either give it a solid color, or write a two color modula pattern
-to it, or render a gradient texture, based on two different colors.
-.PP
-Bsetroot resembles
-.IR xsetroot (1)
-in this functionality but it supports multiple screen displays, and gradient
-textures the same way as Openbox does.
-It doesn't handle cursors etc.
-Bsetroot is part of the Openbox package.
-.SH OPTIONS
-Bsetroot operates in three ways, you must choose one of the first 3 options:
-.TP
-.BI \-solid " color"
-Sets the root window to specified color.
-.TP
-.BI \-mod " x y"
-Creates a modula pattern. You must specify
-.BR \-bg " and " \-fg
-colors.
-.TP
-.BI \-gradient " texturestring"
-Renders the specified texture string to the root window.
-For possible texture strings, please refer to
-.IR openbox (1).
-You must also specify both a
-.BR \-from " and a " \-to
-color.
-.TP
-.BI \-display " display"
-Tells Bsetroot to connect to the specified display.
-.TP
-.BI "\-bg, \-background " color
-Background color.
-Needed for
-.B \-mod
-patterns.
-.TP
-.BI "\-fg, \-foreground " color
-Foreground color.
-Needed for
-.B \-mod
-patterns.
-.TP
-.BI \-from " color"
-Start color for rendering textures.
-Needed for
-.B \-gradient
-operation mode.
-.TP
-.BI \-to " color"
-Ending color for rendering textures.
-Needed for
-.B \-gradient
-operation mode.
-.TP
-.B \-help
-Prints version info and short help text.
-.SH AUTHOR
-Bsetroot was written and maintained by Brad Hughes
-.nh \" hyphenation off
-(blackbox@alug.org)
-.hy \" on again
-and Jeff Raven
-.nh
-(jraven@psu.edu).
-.hy
-.SH SEE ALSO
-.IR openbox (1)
diff --git a/doc/openbox.1.in b/doc/openbox.1.in
deleted file mode 100644
index 674d8369..00000000
--- a/doc/openbox.1.in
+++ /dev/null
@@ -1,859 +0,0 @@
-.\"
-.\" Man page for Openbox
-.\"
-.\" Copyright (c) 2000 by Wilbert Berendsen <wbsoft@xs4all.nl>
-.\"
-.\" This manual page may be freely distributed and modified.
-.\" Parts of the text are taken from website and several README's
-.\" by His Great Hughesness himself. Why reinvent wheels?
-.\"
-.\" Created with NEdit, tested with ``man'' and ``tkman.''
-.\" This manpage uses only standard groff and tmac.an macros.
-.\" To all translators who didn't do manpages earlier (like me ;-):
-.\" Read the Man-Page-Mini-HOWTO and the LDP manpage ``man 7 man''
-.\" There's all I needed to know about these macros.
-.\"
-.\" Updated for bb 0.61 at Sat Sep 9 06:56:04 CEST 2000
-.\"
-.\" ..define sort of <blockquote><pre> macro
-.de EX
-.ne 5
-.if n .sp 1
-.if t .sp .5
-.nf
-.in +.5i
-..
-.de EE
-.fi
-.in -.5i
-.if n .sp 1
-.if t .sp .5
-..
-.TH openbox 1 "April 8th, 2002" "@VERSION@"
-.SH NAME
-openbox \- a window manager for X11
-.SH SYNOPSIS
-.BR openbox " \-help | \-version"
-.br
-.B openbox
-.RI "[ \-rc" " rcfile " "] [ \-display" " display " ]
-.SH DESCRIPTION
-.\"
-.\" First few Paragraphs taken from FILLMEINNOW
-.\"
-.\"Openbox is yet another addition to the list of window managers for the Open
-.\"Group's X Window System, Version 11 Release 6 and above.
-.\"Openbox is built with C++, sharing no common code with any other window
-.\"manager (even though the graphics implementation is similar to that of Window
-.\"Maker).
-.\".PP
-.\"From the time the first line of code was written, Openbox has evolved around
-.\"one premise, minimalism.
-.\"It's not meant to be Eye Candy, nor the most Featureful, nor the most Adorned
-.\"for modelling the Widely acclaimed NeXT interface.
-.\"It is just meant to be
-.\".BR fast .
-.\".PP
-.\"Openbox provides configurable window decorations, a root menu to launch
-.\"applications, and a toolbar that shows the current workspace name, the focused
-.\"application name, and the current time.
-.\"There is also a workspace menu to add or remove workspaces. The `slit' can be
-.\"used to dock small applications, e.g. most of the bbtools can use the slit.
-.\".PP
-.\"Openbox features a special kind of icon handling: When you minimize a window,
-.\"no icon appears; instead, you can view all minimized applications in the `Icons'
-.\"submenu of the workspace menu.
-.\"Your desktop will never get cluttered with icons. As an alternative to icons,
-.\"shaded windows are provided: A double click on the titlebar of a window will
-.\"shade it (i.e. the window will disappear; only the titlebar stays visible).
-.\".PP
-.\"Openbox uses its own graphics class to render its images on the fly.
-.\"By using style files, you can determine at a great level how your desktop looks.
-.\"Openbox currently uses the Blackbox protocol to communicate with other clients
-.\"such as the pager. Work is underway to support the new window manager
-.\"specification that both GNOME and KDE use.
-.SH OPTIONS
-Openbox supports the following command line options:
-.TP
-.B \-help
-Display command line options and compiled-in features, then exit.
-.TP
-.B \-version
-Display version info and exit.
-.TP
-.BI \-rc \ rcfile
-Use another rcfile than the default
-.IR "~/.openbox/rc" .
-.TP
-.BI \-display \ display
-Start Openbox on the specified display.
-Programs started by Openbox will have the
-.B DISPLAY
-environment variable set to this value, too.
-.SH RUNNING OPENBOX
-This program is usually started by the user's startup script, most times called
-.IR ~/.xinitrc .
-To run openbox, modify the script by adding
-.EX 0
-exec openbox
-.EE
-as the last executed command of the script.
-When Openbox terminates, the X session will terminate too.
-.PP
-When started, Openbox will try to find a default menu file in
-.IR @defaultmenu@ .
-You can provide a system-wide menu for your users here.
-.PP
-On exit or restart, Openbox will save user defaults in the file
-.I ~/.openbox/rc
-in the user's home directory.
-Some resources in this file can be edited by hand.
-.SH USING OPENBOX
-Openbox does no keyboard handling by itself; instead, it relies on an external
-program
-.IR epist (1)
-or
-.IR bbkeys (1)
-for this.
-So, in this section, we will discuss all mouse commands.
-.SS Root window (background):
-A right click (button 3) will pop up the root menu.
-With this, you can launch your applications.
-You can also customize this menu for your needs. See above for its location.
-A middle click (button 2) will pop up the workspace menu.
-You can add or remove a workspace, view
-applications running on all workspace, inspect your iconified applications,
-and jump directly to any workspace or application.
-.PP
-Left clicking (button 1) on an application in the Workspaces menu will bring
-you to that workspace and raise/focus that application;
-middle clicking (button 2) will warp the application to the current workspace.
-.SS Toolbar:
-The toolbar consists of three fields: a workspace name, the name of the
-window that currently has focus, and a clock.
-A left click on the toolbar will bring it to the foreground, a
-middle click will hide it behind other windows (if AlwaysOnTop is not set), and
-the right button will bring up a little menu.
-.PP
-Using this menu, you can enter a name for the current workspace (when finished,
-press Enter).
-Also, you can choose the toolbar's position, whether or not it
-should be always on top (i.e. it cannot be obscured by other windows),
-and whether it should hide itself when the mouse moves away.
-.PP
-Note: In Openbox versions below 0.60.0, a right click on the toolbar
-immediately entered workspace name edit mode.
-.SS Window Titlebar and Borders:
-A left click on any part of the window's border will raise it.
-Dragging then moves the window.
-Dragging the resize grips at the bottom left and bottom right
-corners resizes the window.
-Middle clicking will immediately lower the window.
-Right clicking on the border or titlebar pops up the window menu,
-containing these commands:
-.TP
-.B Send To...
-Send window to another workspace.
-When you select the workspace with the middle button, Openbox will
-send you, along with the application, to the selected workspace.
-.TP
-.B Shade
-Shade window (display titlebar only).
-.TP
-.B Iconify
-Iconify window.
-The `icon' can be found in the `Icons' submenu of the workspace menu. It will
-*NOT* appear on screen otherwise.
-.TP
-.B Maximize
-(Un)Maximize window.
-When you click the middle button on this item, the
-window will maximize only vertically.
-.TP
-.B Raise
-Raise window.
-.TP
-.B Lower
-Lower window.
-.TP
-.B Stick
-(Un)Stick window.
-A stuck window will always be displayed in the current workspace.
-.TP
-.B Kill Client
-Kill (-SIGKILL) owner of window. Only use this if the client refuses to close.
-.TP
-.B Close
-Close the application cleanly.
-.PP
-When you double click on the titlebar of a window, it will `shade', so
-that only the titlebar stays visible.
-Another double click will redisplay the window contents.
-.SS Window Buttons:
-The button at the left upper corner of a window is the Minimize button.
-Clicking with any button causes the window to be iconified.
-The rightmost button (with the X) closes the application.
-The other button on the right (if present) maximizes the window in three ways:
-Button 1 causes full screen maximization, button 2 maximizes the window only
-vertically, and button 3 only horizontally.
-.SS Any menu:
-Clicking button 3 in a menu will popdown the menu.
-Clicking button 1 on the titlebar of any (sub)menu and then dragging it somewhere
-else will cause the menu to stay visible, and not disappear when you click on
-a menu item.
-.SS Miscellaneous:
-When you want to drag a window, but cannot see either the bottom handle or its
-titlebar, you can press Alt + button 1 anywhere in the window and then
-drag it around.
-You can also use Alt + button 1 to raise a partially visible window.
-Finally, Alt + button 2 lowers a window, and Alt + button 3 resizes the window.
-.SH MENU FILE
-A default menu file is installed in
-.IR @defaultmenu@ .
-Of course, this system-wide menu can be customized for all users at once.
-But it is also possible to create a personal menu.
-It is a convention to use the directory
-.IR "~/.openbox/"
-in your home directory, and to create a menu file, e.g.
-.I menu
-in this directory, or copy the system-wide menu file to this location.
-Next, we have to tell Openbox to load our menu file instead of the default.
-This is accomplished by adding (or changing) a resource value in the
-.I ~/.openbox/rc
-file, e.g.:
-.EX
-session.menuFile: ~/.openbox/menu
-.EE
-For this change to take effect, Openbox has to be restarted.
-Be sure that your menu is usable, then choose `Restart' from the default
-Openbox root menu.
-.SS Menu syntax
-The menu syntax is very simple and very effective.
-There are up to three fields in a menu line.
-They are of the form:
-.EX
-[tag] (label or filename) {command or filename}
-.EE
-The supported tags are as follows:
-.TP
-.B [begin] (label for root menu)
-This tells Openbox to start parsing the menu file.
-This tag is required for Openbox to parse your menu file.
-If it cannot find it, the system default menu is used instead.
-.TP
-.B [end]
-This tells Openbox that it is at the end of a menu.
-This can either be a submenu or the main root menu.
-There must be at least one of these tags in your menu to correspond to the
-required [begin] tag.
-.TP
-.B [exec] (label for command) {shell command}
-Inserts a command item into the menu.
-When you select the menu item from the menu, Openbox runs `shell command.'
-.TP
-.B [exit] (label for exit)
-Inserts an item that shuts down and exits Openbox.
-Any running programs are not closed.
-.TP
-.B [include] (filename)
-Parses the file specified by
-.I filename
-and includes it with the current menu. The filename can be the full path to a
- file, or it can begin with
-.IR ~/ ,
-which will be expanded into your home directory (e.g.
-.EX
-[include] (~/.openbox/stylesmenu)
-.EE
-will include
-.I /home/bhughes/.openbox/stylesmenu
-in my menu).
-.TP
-.B [nop] (label - optional)
-Insert a non-operational item into the current menu.
-This can be used to help format the menu into blocks or sections
-if so desired.
-.B [nop]
-does accept a label, but it is not required, and a blank item will be used
-if none is supplied.
-.TP
-.B [style] (label) {filename}
-This tells Openbox to insert an item that, when selected, reads the style file
-named
-.I filename
-and applies the new textures, colors, and fonts to the current
-running session.
-.TP
-.B [stylesdir] (directory name)
-Reads all filenames (directories are ignored) from the specified directory and
- creates menu items in the current menu for every filename. Openbox assumes
- that each file is a valid style file. When selected by the user, Openbox
-applies the selected style file to the current session.
-The labels that are created in the menu are the filenames of the style files.
-.TP
-.B [stylesmenu] (label) {directory name}
-Creates a submenu entry with
-.I label
-(that is also the title of the new submenu), and inserts in that submenu all
-filenames in the specified directory, in the same way as the
-.B [stylesdir]
-command does.
-.IP
-.RB Both\ [stylesdir] \ and\ [stylesmenu]
-commands make it possible to install style files without editing your menu file.
-.TP
-.B [submenu] (label) {title for menu - optional}
-This tells Openbox to create and parse a new menu.
-This menu is inserted as a submenu into the parent menu.
-These menus are parsed recursively, so there is no limit to the number of levels
-or nested submenus you can have.
-The title for the new menu is optional; if none is supplied,
-the new menu's title is the same as the item label.
-An
-.B [end]
-tag is required to end the submenu.
-.TP
-.B [reconfig] (label)
-When selected, this item rereads the current style, menu files and rc file,
-and applies any changes.
-This is useful for creating a new style or theme, as you don't have to
-constantly restart Openbox every time you save your style.
-However, Openbox automagically rereads the menu whenever it changes.
-.TP
-.B [restart] (label) {shell command - optional}
-This tells Openbox to restart.
-If `shell command' is supplied, it shuts down and runs the command (which is
-commonly the name of another window manager).
-If the command is omitted, Openbox restarts itself.
-.TP
-.B [config] (label)
-Inserts a Openbox generated submenu item containing numerous configuration
-options concerning window placement, focus style, window moving style, etc.
-.TP
-.B [workspaces] (label)
-This tells Openbox to insert a link to the workspaces menu directly
-into your menu.
-This is handy for those users who can't access the
-workspace menu directly (e.g. if you don't have a 3 button mouse).
-.PP
-Any line that starts with a `#' is considered a comment and ignored by Openbox.
-Also, in the labels/commands/filenames fields,
-you can escape any character like so:
-.EX
-[exec] (\\(my cool\\) \\{XTERM\\}) {xterm -T \\"cool XTERM\\"}
-.EE
-Using `\\\\' inserts a literal back-slash into the label/command/filename field.
-.SS Menu example
-Now let's put together some things.
-Here is a short example of a menu file:
-.PP
-.nf
-# Openbox menu file
-[begin] (Openbox @version@)
- [exec] (rxvt) {rxvt -ls}
- [exec] (Mozilla) {mozilla}
- [exec] (The GIMP) {gimp}
- [submenu] (Window Manager)
- [exec] (Edit Menus) {nedit .openbox/Menu}
- [submenu] (Style) {Which Style?}
- [stylesdir] (~/.openbox/styles)
- [stylesmenu] (Openbox Styles) {@pkgdatadir@/styles}
- [end]
- [config] (Config Options)
- [reconfig] (Reconfigure)
- [restart] (Restart)
- [end]
- [exit] (Log Out)
-[end]
-# end of menu file
-.fi
-.SH STYLES
-Openbox enables you to use specialized files that contain
-.IR X (1)
-resources to specify colors, textures, and fonts and therefore
-the overall look of your window borders, menus, and the toolbar.
-.PP
-The default installation of Openbox provides some of these style files.
-Usually they are put in
-.IR @pkgdatadir@/styles .
-You can study or edit these files to grasp how the Openbox style mechanism
-works.
-You can use the
-.BR [style] ", " [stylesdir] " and " [stylesmenu]
-menu commands in your menu file to be able to select and change between styles
-on the fly.
-.PP
-You can also create a directory in your home directory (usually named
-.I ~/.openbox/styles)
-and put your own style files there.
-Of course, you may choose any name for this directory, but many downloadable
-themes will rely on the name
-.I styles
-(following the bb.themes.org naming scheme).
-.PP
-To understand how the style mechanism works, you should have a little knowledge
-of how X resources work.
-.PP
-X resources consist of a key and a value.
-The key is constructed of several smaller keys (sometimes referred to as
-children), delimited by a period (`.').
-Keys may also contain a star (`*') to serve as a wildcard, which means that one
-line of typed text will match several keys.
-This is useful for styles that are based on one or two colors.
-.PP
-Openbox allows you to configure its four main components: the toolbar, the
-slit, the menus, and the window decorations.
-.PP
-The little window that shows the x-y position while dragging windows borrows
-its style from the window's titlebar.
-.PP
-Here are some quick examples:
-.EX
-toolbar.clock.color: green
-.EE
-This sets the color resource of the toolbar clock to `green'. Another example:
-.EX
-menu*color: rgb:3/4/5
-.EE
-This sets the color resource of the menu
-.I and all of its `children'
-to `rgb:3/4/5'.
-(For a description of color names, see
-.IR X (1).)
-So this one also applies to
-.IR menu.title.color " and " menu.frame.color .
-And with
-.EX
-*font: -b&h-lucida-medium-r-normal-*-*-140-*
-.EE
-you set the font resource for all keys to this font name all at once.
-(For information about the fonts installed on your system, you can use a program like
-.IR xfontsel "(1), " gtkfontsel ", or " xlsfonts "(1).)"
-.PP
-Now what makes Openbox just so spectacular is its ability to render textures
-on the fly.
-Texture descriptions are specified in a similar way to the colors shown above
-e.g.:
-.ta \w'toolbar.clock.colorTo:\ 'u
-.EX
-toolbar.clock: Raised Gradient Diagonal Bevel1
-toolbar.clock.color: rgb:8/6/4
-toolbar.clock.colorTo: rgb:4/3/2
-.EE
-Don't worry; we will explain right now!
-A texture description consists of up to five fields, which are as follows:
-.TP
-.B Flat / Raised / Sunken
-gives the component either a flat, raised, or sunken appearance.
-.TP
-.B Gradient / Solid
-tells Openbox to draw either a solid color or a texture with gradient.
-.TP
-.B Horizontal / Vertical / Diagonal / Crossdiagonal / Pipecross / Elliptic / Rectangle / Pyramid
-Select one of these texture types. They only work when
-.B Gradient
-is also specified!
-.TP
-.B Interlaced
-tells Openbox to interlace the texture (darken every other line).
-This option is most commonly used with gradiented textures, but, from Openbox
-version 0.60.3 on, it also works in solid textures.
-.TP
-.B Bevel1 / Bevel2
-tells Openbox which type of bevel to use.
-Bevel1 is the default bevel.
-The shading is placed on the edge of the image.
-Bevel2 is an alternative.
-The shading is placed one pixel in from the edge of the image.
-.PP
-Instead of a texture description, the option
-.B ParentRelative
-is also available, which makes the component appear as a part of its parent, i.e.
-totally transparent.
-.PP
-All gradient textures are composed of two color values: the
-.IR color " and " colorTo " resources."
-color represents the initial color, colorTo represents the final color of the
-gradient.
-When
-.B Interlaced
-is used in
-.B Solid
-mode, the
-.I colorTo
-resource is used to specify the interlacing color.
-.PP
-Well, here is the complete component list; also, all components together with
-which kind of value they can contain.
-Comments are preceded with an exclamation sign (!), which is also used for
-comments in Openbox style c.q. X resource files.
-.PP
-.ta \w'window.button.unfocus.picColor: \ 'u
-.nf
-.\"
-.\" The comments also to be translated!
-.\"
-! The toolbar itself.
-toolbar: Texture
-toolbar.color: Color
-toolbar.colorTo: Color
-
-! The buttons on the toolbar.
-toolbar.button: Texture or \fIParentRelative\fR
-toolbar.button.color: Color
-toolbar.button.colorTo: Color
-
-! Color of the button arrows.
-toolbar.button.picColor: Color
-
-! Buttons in pressed state.
-toolbar.button.pressed: Texture \fI(e.g. Sunken)\fR or \fIParentRelative\fR
-toolbar.button.pressed.color: Color
-toolbar.button.pressed.colorTo: Color
-
-! Color of pressed button arrows.
-toolbar.button.pressed.picColor: Color
-
-! The toolbar workspace label.
-toolbar.label: Texture or \fIParentRelative\fR
-toolbar.label.color: Color
-toolbar.label.colorTo: Color
-toolbar.label.textColor: Color
-
-! The toolbar window label.
-toolbar.windowLabel: Texture or \fIParentRelative\fR
-toolbar.windowLabel.color: Color
-toolbar.windowLabel.colorTo: Color
-toolbar.windowLabel.textColor: Color
-
-! The toolbar clock.
-toolbar.clock: Texture or \fIParentRelative\fR
-toolbar.clock.color: Color
-toolbar.clock.colorTo: Color
-toolbar.clock.textColor: Color
-
-! How the toolbar's text should be justified.
-toolbar.justify: \fIcenter\fR, \fIleft\fR, or \fIright\fR
-
-.ta \w'toolbar.font:\ 'u
-! Font to be used for all toolbar components.
-toolbar.font: Font \fI(e.g. -*-helvetica-medium-r-normal-*-*-100-*)\fR
-
-.ta \w'window.button.unfocus.picColor: \ 'u
-! The menu titlebar.
-menu.title: Texture
-menu.title.color: Color
-menu.title.colorTo: Color
-menu.title.textColor: Color
-menu.title.font: Font
-menu.title.justify: \fIcenter\fR, \fIleft\fR, or \fIright\fR
-
-! The menu frame.
-menu.frame: Texture
-menu.frame.color: Color
-menu.frame.colorTo: Color
-menu.frame.textColor: Color
-menu.frame.disableColor: Color
-menu.frame.font: Font
-menu.frame.justify: \fIcenter\fR, \fIleft\fR, or \fIright\fR
-
-! Bullets for submenu items.
-menu.bullet: \fIempty\fR, \fItriangle\fR, \fIsquare\fR, or \fIdiamond\fR
-menu.bullet.position: \fIright\fR or \fIleft\fR
-
-! The highlighted menu item.
-menu.hilite: Texture (e.g. \fIRaised\fR)
-menu.hilite.color: Color
-menu.hilite.colorTo: Color
-menu.hilite.textColor: Color
-
-! A focused window.
-window.title.focus: Texture
-window.title.focus.color: Color
-window.title.focus.colorTo: Color
-
-! An unfocused window.
-window.title.unfocus: Texture
-window.title.unfocus.color: Color
-window.title.unfocus.colorTo: Color
-
-! Window label.
-window.label.focus: Texture or \fIParentRelative\fR
-window.label.focus.color: Color
-window.label.focus.colorTo: Color
-window.label.focus.textColor: Color
-
-window.label.unfocus: Texture or \fIParentRelative\fR
-window.label.unfocus.color: Color
-window.label.unfocus.colorTo: Color
-window.label.unfocus.textColor: Color
-
-! Handlebar.
-window.handle.focus: Texture
-window.handle.focus.color: Color
-window.handle.focus.colorTo: Color
-
-window.handle.unfocus: Texture
-window.handle.unfocus.color: Color
-window.handle.unfocus.colorTo: Color
-
-! Resize grips.
-window.grip.focus: Texture
-window.grip.focus.color: Color
-window.grip.focus.colorTo: Color
-
-window.grip.unfocus: Texture
-window.grip.unfocus.color: Color
-window.grip.unfocus.colorTo: Color
-
-! Window buttons.
-window.button.focus: Texture or \fIParentRelative\fR
-window.button.focus.color: Color
-window.button.focus.colorTo: Color
-window.button.focus.picColor: Color
-
-window.button.unfocus: Texture or \fIParentRelative\fR
-window.button.unfocus.color: Color
-window.button.unfocus.colorTo: Color
-window.button.unfocus.picColor: Color
-
-window.button.pressed: Texture (e.g. \fISunken\fR)
-window.button.pressed.color: Color
-window.button.pressed.colorTo: Color
-
-.ta \w'window.button.pressed.unfocus.colorTo:\ 'u
-! If either the focused, or unfocused pressed button isn't
-! defined, it will use the normal pressed: resource
-window.button.pressed.focus: Texture (eg. \fISunken\fR)
-window.button.pressed.focus.color: Color
-window.button.pressed.focus.colorTo: Color
-window.button.pressed.unfocus: Texture (eg. \fISunken\fR)
-window.button.pressed.unfocus.color: Color
-window.button.pressed.unfocus.colorTo: Color
-
-.ta \w'window.button.unfocus.picColor:\ 'u
-! Frame around window.
-window.frame.focusColor: Color
-window.frame.unfocusColor: Color
-
-! Font and justification for window labels.
-window.font: Font
-window.justify: \fIcenter\fR, \fIleft\fR, or \fIright\fR
-
-! Miscellaneous resources.
-
-! A border can be drawn around all components.
-borderWidth: a number of pixels, e.g. \fI1\fR
-borderColor: Color
-
-bevelWidth: a number of pixels > 0
-handleWidth: a number of pixels > 0
-
-! Width of the window frame (from version 0.61 on).
-! When not specified, frameWidth defaults to the value of bevelWidth.
-frameWidth: a number of pixels >= 0
-
-! This command is executed whenever this style is selected.
-! Typically it sets the root window to a nice picture.
-rootCommand: Shell command, e.g. \fIbsetroot -mod 4 4 -fg rgb: 5/6/6 -bg grey20\fR
-
-! Some of the bbtools read these old 0.51 resources.
-menuFont: Font
-titleFont: Font
-.fi
-.PP
-Now, this seems a long list, but, remember, when you create your own style, you
-can easily set lots of keys with a single command, e.g.
-.EX
-.ta \w'*unfocus.textColor:\ 'u
-*color: slategrey
-*colorTo: darkslategrey
-*unfocus.color: darkslategrey
-*unfocus.colorTo: black
-*textColor: white
-*unfocus.textColor: lightgrey
-*font: lucidasans-10
-.EE
-This sets already nice defaults for many components.
-.PP
-Openbox also lets you pick what the small graphics in the buttons and in the manu look like. It uses the X Bitmap file format (.xbm extension). The style resources are as follows:
-.EX
-! Close, maximize, sticky and iconify
-! buttons on a window.
-window.button.close.mask: xbm file
-window.button.max.mask: xbm file
-window.button.stick.mask: xbm file
-window.button.icon.mask: xbm file
-
-! The icon for submenus in a menu.
-menu.arrow.mask: xbm file
-
-! The icon for a selected option or workspace
-! in the menus.
-menu.selected.mask: xbm file
-
-! The left and right buttons in the toolbar
-toolbar.button.left.mask: xbm file
-toolbar.button.right.mask: xbm file
-.EE
-If the xbm file value is the path to a .xbm image. If the value is absolute, it uses that file. If the file is just a file name, e.g. `close.xbm', it uses ~/.openbox/buttons/close.xbm.
-.SH THE SLIT
-The slit is a special Openbox window frame that can contain dockable
-applications, e.g. the `bbtools' or WindowMaker's dockapps.
-When applications are run in the slit, they have no window borders of their own;
-instead, they are framed in the slit, and they are always visible in the current
-workspace.
-You can click button 3 on the edge of the slit window to get a menu to
-determine its position, whether its contained applications should be grouped
-horizontally or vertically and whether it should hide itself when the
-mouse moves away.
-.PP
-Most dockable applications use the
-.B -w
-option to run in the slit.
-For example, you could put in your
-.IR ~/.xinitrc :
-.EX
-bbmail -w &
-bbpager -w &
-exec openbox
-.EE
-Of course, to use the slit, you must have slit support compiled in (this is
-the default).
-.SH RESOURCE FILE
-Usually the
-.I ~/.openbox/rc
-resource file is created and maintained by Openbox itself.
-All options from the
-.B [config]
-menu (from 0.60.x on), the last selected style file, your workspace names and
-so on are saved automatically in this file.
-However, there are some resources in it you might want to edit yourself:
-.TP
-.B session.menuFile:
-This tells Openbox where to look for its menu file.
-.TP
-.B session.screen0.toolbar.widthPercent:
-This determines the amount (in %) of space the toolbar will take.
-Default value is:
-.IR 66 .
-.TP
-.B session.screen0.strftimeFormat:
-This adjusts the way the current time is displayed in the toolbar.
-The
-.IR strftime (3)
-format is used.
-Default value is:
-.IR "%I:%M %p" .
-.TP
-.B session.autoRaiseDelay:
-This adjusts the delay (in ms) before focused windows will raise when using the
-Auto Raise option.
-Default value is:
-.IR 250 .
-.TP
-.B session.doubleClickInterval:
-This adjusts the delay (in ms) between mouse clicks for Openbox to consider a double click.
-Default value is:
-.IR 250 .
-.TP
-.B session.screen0.edgeSnapThreshold:
-When moving a window across your screen, Openbox is able to have it `snap' to
-the edges of the screen for easy placement.
-This variable tells Openbox the distance (in pixels) at which the window will
-jump to the edge.
-Default value is:
-.IR 0 .
-.TP
-.B session.cacheMax:
-This tells Openbox how much memory (in Kb) it may use to store cached pixmaps on
-the X server.
-If your machine runs short of memory, you may lower this value.
-Default value is:
-.IR 200 .
-.TP
-.B session.cacheLife:
-This tells Openbox how long (in minutes) unused pixmaps may stay in the X
-server's memory.
-Default value is:
-.IR 5 .
-.TP
-.B session.titleBarLayout:
-The order of the elements of window titlebars. This is a string built
-of the following characters:
-.IP
-.nf I: Iconify button
-L: Label (window title)
-M: Maximize button
-S: Sticky button
-C: Close button
-.fi
-.IP
-The order in which these character appear in the string is the order they will appear in window titlebars. You can also omit an item to not have it appear in the titlebar at all, except for the label which will always appear.
-Default value is:
-.IR ILMC
-.TP
-.B session.colorsPerChannel:
-This tells Openbox how many colors to take from the X server on pseudocolor
-displays. A channel would be red, green, or blue.
-Openbox will allocate this variable ^ 3 colors and make them always available.
-This value must be between 2 and 6.
-When you run Openbox on an 8-bit display, you must set this resource to 4.
-Default value is:
-.IR 4.
-.PP
-When running Openbox in a multiple desktop environment, the
-.B screen0
-key can also be
-.B screen1, 2
-etc. for any appropriate desktop.
-.SH ENVIRONMENT
-.TP
-.B HOME
-Openbox uses
-.RB $ HOME
-to find its
-.I .openbox/rc
-file, and to resolve style file and directory names.
-.TP
-.B DISPLAY
-When no other display was given on the command line, Openbox will start on the
-display specified by this variable.
-.SH AUTHOR and CREDITS
-All of the code was initially written and maintained as Blackbox by Brad Hughes
-.nh \" hyphenation off
-(blackbox@alug.org)
-.hy \" on again
-and then Jeff Raven
-.nh
-(jraven@psu.edu),
-.hy
-and then Sean 'Shaleh' Perry
-.nh
-(shaleh@debian.org)
-.hy
-.hy
-and is now maintained as Openbox by Ben Jansens
-.nh
-(ben@orodu.net)
-.hy
-with contributions and patches merged from
-many individuals around the world.
-.PP
-The official Openbox website:
-.nh
-.B http://openbox.sunsite.dk/
-.hy
-.br
-Many themes and other contributions:
-.nh
-.B http://themes.freshmeat.net/
-.hy
-.PP
-This manpage was put together by Wilbert Berendsen
-.nh
-(wbsoft@xs4all.nl).
-.hy
-Numerous other languages will be available.
-.SH SEE ALSO
-.IR bsetroot (1), \ bbkeys (1), \ xftlsfonts (1), \ epist (1)
diff --git a/doc/python/client.txt b/doc/python/client.txt
new file mode 100644
index 00000000..fbb57006
--- /dev/null
+++ b/doc/python/client.txt
@@ -0,0 +1,553 @@
+ob.Client
+
+----
+
+This document describes the 'ob.Client' class, exposed by Openbox to its python
+scripts. The 'Client' class cannot be instantiated, and can only be
+retrieved by catching events from Openbox, or from the ob.Openbox.clientList()
+method.
+
+A Client instance is associated with a single client window which Openbox is
+managing. When the client window is closed/destroyed/released, the Client
+instance will be marked as invalid (see valid()). Any methods of Client, with
+the exception of valid(), will raise a ReferenceError exception if they are
+called on a non-valid Client instance. For this reason, it is not encouraged to
+keep references to Client instances between events, unless you are tracking the
+hooks.closed hook or check valid() before attempting to reuse a Client
+instance.
+
+----
+
+Methods
+
+----
+
+valid()
+
+Returns if the Client instance is still valid. Client instances are marked as
+invalid when the Client they are associated is closed/destroyed/released.
+
+ Returns: True or False for if the Client instance is valid.
+
+----
+
+title()
+
+Returns the client's title.
+
+ Returns: A string containing the client's title.
+
+----
+
+setTitle(title)
+
+Change the client's title to the given string. This change will be overwritten
+if/when the client changes its title.
+
+ title: A string containing the new title for the client.
+
+----
+
+iconTitle()
+
+Returns's the client's icon title. The icon title is the title to be displayed
+when the client is iconified.
+
+ Returns: A string containing the client's icon title.
+
+----
+
+setIconTitle(title)
+
+Change the client's icon title to the given string. This change will be
+overwritten if/when the client changes its icon title.
+
+ title: A string containing the new icon title for the client.
+
+----
+
+desktop()
+
+Returns the desktop on which the client is visible. This value will always be
+in the range [0, ob.Openbox.numDesktops()), unless it is 0xffffffff. A value of
+0xffffffff indicates the client is visible on all desktops.
+
+ Returns: An integer containing the client's desktop,
+
+----
+
+setDesktop(desktop)
+
+Moves the client to the specified desktop. The desktop must be in the range
+[0, ob.Openbox.numDesktops()), unless it is 0xffffffff. A value of 0xffffffff
+indicates the client is visible on all desktops.
+
+ desktop: The desktop on which to place the client.
+
+----
+
+resName()
+
+Returns the resouce name of the client. The resource name is meant to provide
+an instance name for the client.
+
+ Returns: A string containing the client's resource name.
+
+----
+resClass()
+
+Returns the resouce class of the client. The resource class is meant to provide
+the genereal class of the application. e.g. 'Emacs', 'Xterm', 'XClock',
+'XLoad', and so on.
+
+ Returns: A string containing the client's resource class.
+
+----
+
+role()
+
+Returns the client's role. The role is meant to distinguish between different
+windows of an application. Each window should have a unique role.
+
+ Returns: A string containing the client window's role.
+
+----
+
+transient()
+
+Returns True or False describing if the client is a transient window. Transient
+windows are 'temporary' windows, such as preference dialogs, and usually have
+a parent window, which can be found from transientFor().
+
+ Returns: True or False for if the client is a transient window.
+
+----
+
+transientFor()
+
+Returns the client for which this client is a transient. See transient() for
+a description of transience.
+
+ Returns: A Client containing the client which this client is transient
+ for. None if such a client does not exist.
+
+----
+
+transients()
+
+Returns a tuple containing all the Clients which are transients of this window.
+See transient() for a description of transience.
+
+ Returns: A tuple containing Clients which are transients for this
+ client. The tuple may be empty.
+
+----
+
+type()
+
+Returns the logical type of the window. This is one of the ClientType
+constants. See also normal().
+
+ Returns: The type of the window.
+
+----
+
+normal()
+
+Returns True or False for if the client is a 'normal' window. Normal windows
+make up most applications. Non-normal windows have special rules applied to
+them at times such as for focus handling. An example of a non-normal window
+is 'gnome-panel'. This value is determined from the client's type(), but does
+not imply that the window is ClientType.Normal. Rather this is a more generic
+definition of 'normal' windows, and includes dialogs and others.
+
+ Returns: True or False declaring the client as 'normal' or not.
+
+----
+
+area()
+
+Returns the area of the screen which the client occupies. It may be important
+to note that this is the position and size of the client *with* its
+decorations. If you want the underlying position and size of the client
+itself, you should use clientArea(). See also logicalSize().
+
+ Returns: A tuple containing the area of the client and decorations on
+ the screen. The tuple is in the format (x, y, width, height).
+
+----
+
+setArea(area, [final])
+
+Sets the client's area, moving and resizing it as specified (or as close as can
+be accomidated).
+
+ area: The new area for the client, in a tuple. The tuple should be of
+ the format (x, y, width, height).
+
+ final: Optional True or False for if this is a final change. This
+ should be set to False if the change is only part of a
+ move/resize. Otherwise, it should be set to True. If it is not
+ specified, it will default to True.
+
+----
+
+clientArea()
+
+Returns the area of the screen which the client considers itself to be
+occupying. This value is not what you see and should not be used for most
+things (it should, for example, be used for persisting a client's dimentions
+across sessions). See also area().
+
+ Returns: A tuple containing the area the client considers itself to be
+ occupying. The tuple is in the format (x, y, width, height).
+
+----
+
+setClientArea(area)
+
+Sets the area of the screen which the client considers itself to be occupying.
+This is not the on-screen visible position and size, and should be used with
+care. You probably want to use setArea() to adjust the client. This should be
+used if you want the client window (inside the decorations) to be a specific
+size. Adjusting the client's position with this function is probably always a
+bad idea, because of window gravity.
+
+ area: The new area for the client. in a tuple. The tuple should be of
+ the format (x, y, width, height).
+
+----
+
+frameSize()
+
+Returns the size of the decorations around the client window.
+
+ Returns: A tuple containing the size of the decorations on each side
+ of the client window. The tuple has the format
+ (left, top, right, bottom).
+
+----
+
+strut()
+
+Returns the application's specified strut. The strut is the amount of space
+that should be reserved for the application on each side of the screen.
+
+
+ Returns: A tuple containing the application's strut. The tuple has the
+ format (left, top, right, bottom).
+
+----
+
+logicalSize()
+
+Returns the client's logical size. The logical size is the client's size in
+more user friendly terms. For many apps this is simply the size of the client
+in pixels, however for some apps this will differ (e.g. terminal emulators).
+This value should be used when displaying an applications size to the user.
+
+ Returns: A tuple containing the client's logical size. The tuple has
+ the format (width, height).
+
+----
+
+canFocus()
+
+Returns True or False for if the client can be focused.
+
+ Returns: True or False for if the client can recieve input focus.
+
+----
+
+focus([focus])
+
+Focuses (or unfocuses) the client window. Windows which return False for
+canFocus() or visible() cannot be focused. When this function returns, the
+client's focused() state will not be changed yet. This only sends the request
+through the X server. You should wait for the hooks.focused hook to fire, and
+not assume the client has been focused.
+
+ focus: Optional. If True, the window will be focused. If False, and
+ focused() is True, it will lose its focus. If the argument is
+ not passed, it will default to True.
+
+ Returns: True if the client could be focused, and focus has been sent
+ to the window. False if the client could not be focused.
+
+----
+
+focused()
+
+Returns True or False for if the client has the input focus.
+
+ Returns: True or False for if the client has the input focus.
+
+----
+
+visible()
+
+Returns True or False for if the client is visible. A client is not visible if
+it is iconic() or if its desktop() is not visible.
+
+ Returns: True or False for if the client is visible.
+
+----
+
+setVisible(show)
+
+Shows or hides the client. This has no effect if its current visible() state
+is requested.
+
+ show: True or False specifying if the client should be hidden or shown.
+
+----
+
+modal()
+
+Returns True or False for if the client is a modal window. Modal windows
+indicate that they must be dealt with before the program can continue. When
+a modal window is a transient(), its transientFor() client cannot be focused or
+raised above it.
+
+ Returns: True or False for if the client is a modal window.
+
+----
+
+setModal(modal)
+
+Make the client window modal or non-modal.
+
+ mdal: True or False to make the client modal or not respectively.
+
+----
+
+shaded()
+
+Returns True or False for if the client is shaded. Shaded windows have only
+their titlebar decorations showing.
+
+----
+
+setShaded(shade)
+
+Shade or unshade the client. Shaded windows have only their titlebar
+decorations showing. Windows which do not have a titlebar cannot be shaded.
+
+ shade: True or False to make the client shaded or not respectively.
+
+----
+
+iconic()
+
+Returns True or False for if the window is iconified. Iconified windows are not
+visible on any desktops.
+
+ Returns: True or False for if the client is iconified.
+
+----
+
+setIconic(iconify, [current])
+
+Iconifies or restores the client window. Iconified windows are not visible on
+any desktops. Iconified windows can be restored to the currently visible
+desktop or to their original (native) desktop.
+
+ iconify: True or False to iconify or deiconify the client repectively.
+
+ current: Optional True or False to specify if the client should be
+ restored to the currently visible desktop or to the desktop
+ from which it was iconified. This does not apply to windows
+ who's desktop() is 0xffffffff. If this is not specified, it
+ defaults to True (the current desktop).
+
+----
+
+maximizedHorz()
+
+Returns whether the client is maximized in the horizontal direction.
+
+ Returns: True if the client is maximized horizontally; False if it is
+ not.
+
+----
+
+setMaximizedHorz(max)
+
+Maximizes or restores a client horizontally.
+
+ max: True or False for if the client should be maximized or
+ unmaximized in the horizontal direction.
+
+----
+
+maximizedVert()
+
+Returns whether the client is maximized in the vertical direction.
+
+ Returns: True if the client is maximized vertically; False if it is
+ not.
+
+----
+
+setMaximizedVert(max)
+
+Maximizes or restores a client vertically.
+
+ max: True or False for if the client should be maximized or
+ unmaximized in the vertical direction.
+
+----
+
+maximized()
+
+Returns whether the client is maximized in the horizontal or vertical
+direction.
+
+ Returns: True if the client is maximized horizontally or vertically;
+ False if it is not.
+
+----
+
+setMaximized(max)
+
+Maximizes or restores a client vertically and horzontally.
+
+ max: True or False for if the client should be maximized or
+ unmaximized in the vertical and horizontal direction.
+-
+---
+
+fullscreen()
+
+Returns if the client is in fullscreen mode. Fullscreen windows are kept above
+all other windows and are stretched to fill the entire physical display.
+
+ Returns: True or False for if the client is fullscreen.
+
+----
+
+setFullscreen(full)
+
+Set a client into or out of fullscreen mode. Fullscreen windows are kept above
+all other windows and are stretched to fill the entire physical display.
+
+ full: True or False to set the client into or out of fullscreen mode
+ respectively.
+
+----
+
+stacking()
+
+Returns if the client will be stacked above/below other clients in the same
+layer.
+
+ Returns: An integer > 0 if the client will be stacked above other
+ clients in its layer. An integer < 0 if it will be stacked
+ below other clients. 0 will be returned if the client is
+ stacked as normal amongst other clients in its layer.
+
+----
+
+setStacking(stack)
+
+Set how the client will be stacked according to other clients in its layer.
+
+ stack: An integer > 0 if the client should be stacked above other
+ clients in its layer. An integer < 0 if it should be stacked
+ below other clients. Exactly 0 if the client should be stacked
+ as normal amongst other clients in its layer.
+
+----
+
+raiseWindow()
+
+Raises the window to the top of its stacking layer.
+
+----
+
+lowerWindow()
+
+Lowers the window to the bottom of its stacking layer.
+
+----
+
+skipPager()
+
+Returns if the client has requested to be skipped (not displayed) by pagers.
+
+ Returns: True or False for if the client has requested to be skiped by
+ pagers.
+
+----
+
+setSkipPager(skip)
+
+Set whether the client should be skipped (not displayed) by pagers.
+
+ skip: True or False to make the client be skipped or not skipped by
+ pagers.
+
+----
+
+skipTaskbar()
+
+Returns if the client has requested to be skipped (not displayed) by taskbars.
+
+ Returns: True or False for if the client has requested to be skiped by
+ taskbars.
+
+----
+
+setSkipTaskbar(skip)
+
+Set whether the client should be skipped (not displayed) by taskbars.
+
+ skip: True or False to make the client be skipped or not skipped by
+ taskbars.
+
+----
+
+disableDecorations(titlebar, handle, border)
+
+Choose which decorations to disable on the client. Note that decorations can
+only be disabled, and decorations that would normally not be shown cannot be
+added. These values may have slightly different meanings in different theme
+engines.
+
+ titlebar: True to disable, or False to enable (if possible) the
+ client's titlebar.
+
+ handle: True to disable, or False to enable (if possible) the
+ client's handle.
+
+ border: True to disable, or False to enable (if possible) the
+ client's border.
+
+----
+
+close()
+
+Requests the client to close its window.
+
+----
+
+window()
+
+Returns the client's window id. This is the id by which the X server knows the
+client.
+
+ Returns: An integer containing the client's window id.
+
+----
+
+ob.ClientType
+
+ClientType.Normal: a normal application window.
+ClientType.Dialog: a dialog window (usually a transient()).
+ClientType.Desktop: a desktop (bottom-most) window.
+ClientType.Dock: a dock or panel window.
+ClientType.Toolbar: a toolbar "torn off" from an application.
+ClientType.Menu: a pinnable menu "torn off" from an application.
+ClientType.Utility: a small persistent utility window such as a
+ palette or toolbox.
+ClientType.Splash: a splash screen window.
diff --git a/doc/python/config.txt b/doc/python/config.txt
new file mode 100644
index 00000000..0362fde1
--- /dev/null
+++ b/doc/python/config.txt
@@ -0,0 +1,13 @@
+config.Config
+
+----
+
+This document describes the 'Config' class, exposed by Openbox's 'config'
+module to its python scripts.
+
+----
+
+Methods
+
+----
+
diff --git a/doc/python/helpers.txt b/doc/python/helpers.txt
new file mode 100644
index 00000000..6a11e405
--- /dev/null
+++ b/doc/python/helpers.txt
@@ -0,0 +1,25 @@
+helpers
+
+----
+
+This document describes the 'helpers' module. The 'helpers' module provides
+methods to make writing python scripts easier.
+
+----
+
+Methods
+
+----
+
+execute(path)
+
+Forks and executes a process.
+
+ path: The executable to execute. The $PATH is searched so the full
+ path to the executable is not generally needed.
+
+Example:
+ execute("xterm")
+
+----
+
diff --git a/doc/python/hooks.txt b/doc/python/hooks.txt
new file mode 100644
index 00000000..3bfc2706
--- /dev/null
+++ b/doc/python/hooks.txt
@@ -0,0 +1,255 @@
+*******************************************************************************
+*******************************************************************************
+** CAUTION: changing any value in the hook for that value changing is **
+** dangerous, as this can easily lead to an infinate loop of updating! **
+*******************************************************************************
+*******************************************************************************
+
+hooks
+
+----
+
+This document describes the 'Hook' class, exposed by Openbox's 'hooks' module
+to its python scripts, and the standard hooks exposed in the 'hooks' module.
+
+----
+
+hooks.Hook
+
+----
+
+Methods
+
+----
+
+__call__(args)
+
+Fires the hook, passing the given arguments on to all functions registered with
+the hook. Functions are called in the order in which they were added. If any
+function defined as a hook returns any value other than None, the hook will
+not fire any more functions.
+
+ args: Any number of function arguments, which are passed on to the
+ hook's registered functions.
+
+----
+
+append(func)
+
+Appends a function to the hook.
+
+ func: The function to add to the hook.
+
+----
+
+remove(func)
+
+Removes the function from the hook.
+
+ func: The function to remove from the hook.
+
+----
+
+hooks
+
+----
+
+Hooks
+
+The following standard hooks are defined by Openbox. After each name comes the
+expected format of a function added to the hook. Adding a function of another
+format will lead to an exception when the hook is fired.
+
+----
+
+startup - function()
+
+When Openbox is starting, just before it begins managing clients.
+
+----
+
+shutdown - function()
+
+When Openbox is shutting down, after releasing all clients.
+
+----
+
+visibledesktop - function(new, old)
+
+When the current desktop changes.
+
+ new: An integer containing the new desktop.
+
+ old: An integer containing the old desktop.
+
+----
+
+numdesktops - function(desktops)
+
+When the number of desktops changes.
+
+ desktops: An integer containing the number of available desktops.
+
+----
+
+desktopnames - function()
+
+When the desktops' names have been changed.
+
+----
+
+showdesktop - function(showing)
+
+When Openbox enters or leaves 'showing the desktop' mode. Called after the
+desktop is shown/hidden.
+
+ showing: True if entering 'showing the desktop' mode, False if leaving.
+
+----
+
+screenconfiguration - function(size)
+
+When the screen's size (ob.Openbox.physicalSize()) has changed.
+
+ size: The new size of the screen, as returned by
+ ob.Openbox.physicalSize().
+
+----
+
+screenarea - function()
+
+When the screen's area (ob.Openbox.screenArea()) has changed.
+
+----
+
+managed - function(client)
+
+When a client is managed.
+
+ client: The Client being managed.
+
+----
+
+closed - function(client)
+
+When a client is being closed/destroyed/released.
+
+ client: The Client which has been closed.
+
+----
+
+bell - function(client)
+
+When the system bell is fired.
+
+ client: The Client the bell is associated with, or None. Clients can
+ only be associated with bells through the XKB extension.
+
+----
+
+urgent - function(client)
+
+When a window enters/leaves urgent status.
+
+ client: The client which has become/stopped being urgent.
+
+----
+
+pointerenter - function(client)
+
+When the pointer moves above a client.
+
+ client: The Client that the pointer has move above.
+
+----
+
+pointerleave - function(client)
+
+When the pointer moves off of a client.
+
+ client: The Client that the pointer has moved off of.
+
+----
+
+focused - function(client)
+
+When focus changes.
+
+ client: The Client which has recieved input focus, or None if no client
+ is focused.
+
+----
+
+requestactivate - function(client)
+
+When a request is made to activate a client.
+
+ client: The Client who has been requested to be made active.
+
+----
+
+title - function(client)
+
+When a client's title or icon title changes.
+
+ client: The Client whose title changed.
+
+----
+
+desktop - function(client, new, old)
+
+When a client's desktop changes.
+
+ client: The Client that changed desktops.
+
+ new: An integer containing the client's new desktop.
+
+ old: An integer containing the client's old desktop.
+
+----
+
+iconic - function(client)
+
+When a client's iconic status changes.
+
+ client: The Client that has been (un)iconified.
+
+----
+
+shaded - function(client)
+
+When a client's shaded status changes.
+
+ client: The Client that has been (un)shaded.
+
+----
+
+maximized - function(client)
+
+When a client's maximized status changes.
+
+ client: The Client that has been (un)maximized.
+
+----
+
+fullscreen - function(client)
+
+When a client's fullscreen status changes.
+
+ client: The Client which as been (un)fullscreened.
+
+----
+
+visible - function(client)
+
+When a client becomes visible or hidden, but not for desktop changes.
+
+ client: The Client which has been shown/hidden.
+
+----
+
+configuration - function(client)
+
+When a client's configuration (area/position/size) changes.
+
+ client: The Client which has moved or resized.
diff --git a/doc/python/keyboard.txt b/doc/python/keyboard.txt
new file mode 100644
index 00000000..0cb2caa4
--- /dev/null
+++ b/doc/python/keyboard.txt
@@ -0,0 +1,59 @@
+input.Keyboard
+
+----
+
+This document describes the 'Keyboard' class, exposed by Openbox's 'input'
+module to its python scripts.
+
+All keyboard events which will be generated because of the Keyboard class can
+be caught from the hooks.keyboard hook.
+
+----
+
+Methods
+
+----
+
+bind(keychain, func)
+
+Binds a key-chain to a function. The keychain is a tuple of strings which
+define a chain of key presses. Each member of the tuple has the format
+[Modifier-]...[Key]. Modifiers can be 'mod1', 'mod2', 'mod3', 'mod4', 'mod5',
+'control', and 'shift'. The keys on your keyboard that are bound to each of
+these modifiers can be found by running 'xmodmap'. The Key can be any valid
+key definition. Key definitions can be found by running 'xev', pressing the
+key while its window is focused, and watching its output. Here are some
+examples of valid keychains: ('a'), ('F7'), ('control-a', 'd'),
+('control-mod1-x', 'control-mod4-g'), ('F1', 'space').
+The func must have a definition similar to 'def func(keydata, client)'. The
+arguments passed to the function are a KeyboardData object and a Client object.
+A keychain cannot be bound to more than one function.
+
+ keychain: A tuple containing strings defining a chain of key presses.
+
+ func: A function to bind to the keychain.
+
+----
+
+clearBinds()
+
+Removes all bindings that were previously made by bind().
+
+----
+
+grab(func)
+
+Grabs the entire keyboard, causing all possible keyboard events to be passed
+to the given function. CAUTION: Be sure when you grab() that you also have an
+ungrab() that will execute, or you will not be able to type until you restart
+Openbox. The func must have a definition similar to 'def func(keydata)'. The
+argument passed to the function is a KeyboardData object. The keyboard cannot
+be grabbed if it is already grabbed.
+
+ func: A function to receive all the grabbed keyboard events.
+
+----
+
+ungrab()
+
+Ungrabs the keyboard. The keyboard cannot be ungrabbed if it is not grabbed.
diff --git a/doc/python/keyboarddata.txt b/doc/python/keyboarddata.txt
new file mode 100644
index 00000000..4be55884
--- /dev/null
+++ b/doc/python/keyboarddata.txt
@@ -0,0 +1,35 @@
+KeyboardData
+
+----
+
+This document describes the 'KeyboardData' class, passed to functions bound to
+keyboard events.
+
+----
+
+Attributes
+
+----
+
+keychain
+
+The keychain (in the format that input.Keyboard.bind() expects them) that
+was pressed.
+
+----
+
+state
+
+An integer bitmask of the modifiers pressed down when the key was pressed.
+
+----
+
+keycode
+
+An integer containing the keycode for the key that was pressed.
+
+----
+
+press
+
+True or False for if the event was a key press or a key release
diff --git a/doc/python/openbox.txt b/doc/python/openbox.txt
new file mode 100644
index 00000000..b18c8d3f
--- /dev/null
+++ b/doc/python/openbox.txt
@@ -0,0 +1,208 @@
+ob.Openbox
+
+----
+
+This document describes the 'Openbox' class, exposed by Openbox's 'ob' module
+to its python scripts.
+
+----
+
+Methods
+
+----
+
+shutdown()
+
+Causes Openbox to shutdown and exit.
+
+
+----
+
+restart([path])
+
+Causes Openbox to shutdown and restart. If path is specified, Openbox will
+shutdown and attempt to run the specified executable instead of restarting
+itself. If that fails, however, it will restart itself.
+
+ path: Optional path to replacement executable.
+
+----
+
+state()
+
+Returns Openbox's current state, this will be one of the State constants.
+
+ Returns: One of the State values representing the internal state
+ of Openbox.
+
+----
+
+desktop()
+
+Returns the number of the currently visible desktop. This will be in the range
+of [0, numDesktops()).
+
+ Returns: The currently visible desktop.
+
+----
+
+setDesktop(desktop)
+
+Sets the specified desktop as the visible desktop.
+
+ desktop: The desktop to make visible. Must be in the range of
+ [0, numDesktops()) or a ValueError exception will be raised.
+
+----
+
+setNextDesktop([wrap])
+
+Sets the visible desktop to the next desktop, optionally wrapping around when
+reaching the last.
+
+ wrap: An optional argument which, when True will cause the function to
+ wrap to the first desktop when going past the last. If it is not
+ specified, it defaults to true.
+
+----
+
+setPreviousDesktop([wrap])
+
+Sets the visible desktop to the previous desktop, optionally wrapping around
+when reaching the first.
+
+ wrap: An optional argument which, when True will cause the function to
+ wrap to the last desktop when going past the first. If it is not
+ specified, it defaults to true.
+
+----
+
+numDesktops()
+
+Returns the number of desktops available.
+
+ Returns: The number of available desktops.
+
+----
+
+setNumDesktops(num)
+
+Sets the number of desktops available.
+
+ num: The new number of available desktops. This must be greater than 0.
+
+----
+
+desktopNames()
+
+Returns a tuple of names, containing a name for each desktop. The tuple may
+have a length greater than numDesktops() if more names have been specified.
+
+ Returns: A tuple of names.
+
+----
+
+setDesktopNames(names)
+
+Sets the names for the desktops.
+
+ names: An iterable list of names to apply to the desktops. Can contain
+ more or less names than numDesktops(). If it contains fewer
+ names, then Openbox will give the remaining desktops a
+ placeholder name.
+
+----
+
+showingDesktop()
+
+Returns True or False, depicting if Openbox is in 'showing the desktop' mode.
+In 'showing the desktop' mode, all normal clients are hidden and the desktop
+is given focus if possible.
+
+ Returns: True or False describing if Openbox is in 'showing the
+ desktop' mode.
+
+----
+
+setShowingDesktop(show)
+
+Enters or leaves 'showing the desktop' mode. See showingDesktop() for a
+description of this mode.
+
+ show: True or False to enter or leave 'showing the desktop' mode
+ respectively.
+
+----
+
+screenArea(desktop)
+
+Returns the on-screen available area. This is the area not reserved by
+applications' struts. Windows should be placed within this area, not within
+the physicalSize().
+
+ desktop: The desktop for which to get the available area. 0xffffffff to
+ get the combined area for all desktops (combined
+ subtractively).
+
+ Returns: A tuple of form (x, y, width, height) containing the
+ dimensions of the available on-screen area for the desktop.
+
+
+----
+
+screenStrut(desktop)
+
+Returns the combined strut which has been reserved by all applications on the
+desktops.
+
+ desktop: The desktop for which to get the strut. 0xffffffff to get the
+ combined strut for all desktops (combined additively).
+
+ Returns: A tuple of form (left, top, right, bottom) containing the
+ size of the reserved strut space for the desktop.
+
+----
+
+physicalSize()
+
+Returns the physical size of the display device (in pixels).
+
+ Returns: A tuple of the form (width, height) containing the size of
+ the display device's area.
+
+----
+
+screenNumber()
+
+Returns the number of the screen on which Openbox is running.
+
+ Returns: An integer specifying the screen on which this instance of
+ Openbox is running.
+
+----
+
+rootWindow()
+
+Return the window id of the root window.
+
+ Returns: An integer containing the window id of the root window.
+
+----
+
+clientList()
+
+Returns a all clients currently being managed by Openbox. This list is updated
+as clients are managed and closed/destroyed/released.
+
+ Returns: A list of Clients containing all the clients managed by
+ Openbox.
+
+----
+
+ob.State
+
+State.Starting: Openbox is starting up and has not yet reached its
+ main event loop.
+State.Running: Openbox is running normally.
+State.Exiting: Openbox has left its main event loop and is shutting
+ down.
diff --git a/doc/python/pointer.txt b/doc/python/pointer.txt
new file mode 100644
index 00000000..b2049241
--- /dev/null
+++ b/doc/python/pointer.txt
@@ -0,0 +1,130 @@
+input.Pointer
+
+----
+
+This document describes the 'Pointer' class, exposed by Openbox's 'input'
+module to its python scripts.
+
+All pointer events which will be generated because of the Pointer class can
+be caught from the hooks.pointer hook.
+
+----
+
+Terminology
+
+----
+
+Context -- A context is a string describing a part of a window or screen in
+ which an event can occur. Contexts are used for grabbing and
+ tracking pointer events. A list of possible contexts are exposed by
+ the engine through the contexts() method. The standard list of
+ contexts are:
+ * "none" - no context associated.
+ * "root" - the root window.
+ * "frame" - the client's entire frame. Note: when a button is
+ grabbed in the "frame" context, it will not get passed
+ through to the client.
+ * "client" - client's window.
+ * "titlebar" - a client's titlebar.
+ * "handle" - a client's handle.
+ * "tlcorner" - the top-left corner of a client's decorations.
+ * "trcorner" - the top-right corner of a client's decorations.
+ * "blcorner" - the bottom-left corner of a client's decorations.
+ * "brcorner" - the bottom-right corner of a client's decorations.
+ * "maximize" - the maximize button in the titlebar.
+ * "close" - the close button in the titlebar.
+ * "iconify" - the iconify button in the titlebar.
+ * "alldesktops" - the all-desktops button in the titlebar.
+ * "icon" - the window icon in the titlebar.
+
+ An engine may add to this list as it sees fit (most engines will
+ include "close", "maximize", etc. contexts for titlebar buttons).
+
+----
+
+Methods
+
+----
+
+bind(button, context, action, func)
+
+Binds a pointer button for a context and action to a function. See the
+Terminology section for a decription and list of common contexts. The button is
+a string which defines a modifier and button combination with the format
+[Modifier-]...[Button]. Modifiers can be 'mod1', 'mod2', 'mod3', 'mod4',
+'mod5', 'control', and 'shift'. The keys on your keyboard that are bound to
+each of these modifiers can be found by running 'xmodmap'. The button is the
+number of the button. Button numbers can be found by running 'xev', pressing
+the button with the pointer over its window, and watching its output. Here
+are some examples of valid buttons: 'control-1', '2', 'mod1-shift-5'. The
+action is one of the Action_* constants. The func must have a definition
+similar to 'def func(ptrdata, client)'. The arguments passed to the function
+are a PointerData object and a Client object (or None). A button and context
+may be bound to more than one function.
+
+ button: A string defining the modifiers and button to for which events
+ should be generated.
+
+ context: The context in which the button events should be generated.
+
+ action: One of the Action_* constants specifying the action to bind
+ the function to.
+
+ func: A function to bind to the button/context.
+
+----
+
+clearBinds()
+
+Removes all bindings that were previously made by bind().
+
+----
+
+grab(func)
+
+Grabs the pointer device, causing all possible pointer events to be sent to
+the given function. CAUTION: Be sure when you grab() that you also have an
+ungrab() that will execute, or you will not be able to use the pointer device
+until you restart Openbox. The func must have a definition similar to
+'def func(data)'. The argument passed to the function is a PointerData object.
+The pointer cannot be grabbed if it is already grabbed. When a grab is active,
+no pointer bindings will fire, everything is sent only to the specified func.
+
+ func: A function to receive all the grabbed pointer events.
+
+----
+
+ungrab()
+
+Ungrabs the pointer. The pointer cannot be ungrabbed if it is not grabbed.
+
+----
+
+Constants
+
+----
+
+Action_Press a pointer button press
+Action_Release a pointer button release
+Action_Click a pointer button click (press-release)
+Action_DoubleClick a pointer button double-click
+Action_Motion a pointer drag
+
+----
+
+Configuration options (through the config module)
+
+----
+
+double_click_rate
+
+An integer containing the number of milliseconds in which 2 clicks must be
+received to cause a double-click event.
+
+----
+
+drag_threshold
+
+An integer containing the number of pixels a drag must go before motion events
+start getting generated. Once a drag has begun, the button release will not
+count as a click event.
diff --git a/doc/python/pointerdata.txt b/doc/python/pointerdata.txt
new file mode 100644
index 00000000..8db7f0af
--- /dev/null
+++ b/doc/python/pointerdata.txt
@@ -0,0 +1,67 @@
+PointerData
+
+----
+
+This document describes the 'PointerData' class, passed to functions bound to
+pointer events.
+
+----
+
+Attributes
+
+----
+
+action
+
+The type of event. One of the input.Pointer.Action_* constants.
+
+----
+
+button
+
+The button (in the format that input.Pointer.bind() expects them) that caused
+the event. This will be 'None' if there was no button associated with the
+event. (This can only happen during a pointer grab.)
+
+----
+
+context
+
+A string containing the context of the event. See the Terminology section in
+the Pointer documentation for a decription and list of common contexts.
+
+----
+
+state
+
+An integer bitmask of the modifiers pressed down when the event occured.
+
+----
+
+buttonnum
+
+An integer containing the number of the pointer button associated with the
+event.
+
+----
+
+pos
+
+A tuple containing the current position of the cursor. The tuple has the format
+(x, y). This is only valid when 'action' is 'Action_Motion'.
+
+-----
+
+presspos
+
+A tuple containing the position of the cursor when the drag started. The tuple
+has the format (x, y). This is only valid when 'action' is 'Action_Motion'.
+
+----
+
+pressclientarea
+
+A tuple containing the area of the client when the drag started. The tuple has
+the format (x, y, width, height). This will be None if there is no client
+associated with the event (during a pointer grab, or a drag on the root
+window). This is only valid when 'action' is 'Action_Motion'.
diff --git a/doc/themerc.txt b/doc/themerc.txt
new file mode 100644
index 00000000..95f5290c
--- /dev/null
+++ b/doc/themerc.txt
@@ -0,0 +1,54 @@
+The themerc file dictates which engine and theme openbox will use, as well as
+parameters for the engine.
+
+----
+
+Options for the themerc file are specified as:
+option = value
+
+Lines that begin with # are considered comments.
+
+----
+
+These are the valid options:
+
+engine
+ String value, containing the name of the engine to load.
+ example: 'openbox'
+ default: 'openbox'
+
+theme
+ String value containing the theme to load in the engine. This can be
+ an absolute path to the theme, or simply the theme's name in which case
+ the appropriate paths will be searched for the theme.
+ example: 'mytheme'
+ default: engine-dependant
+
+font
+ String value containing the font to use in the window titlebars. The
+ format of this string is described in:
+ http://keithp.com/~keithp/render/Xft.tutorial
+ example: 'times-12:bold:slant=italic,oblique'
+ default: 'sans-8'
+
+titlebarlayout
+ The layout of the titlebar of windows. This is a string that can
+ consist of only valid characters. The characters are:
+ I - iconify button
+ M - maximize button
+ C - close button
+ D - all-desktops button
+ N - window icon
+ L - text label (window title)
+ example: 'ILMC'
+ default: 'NDLIMC'
+
+----
+
+example themerc:
+
+# My themerc file!
+engine='openbox'
+theme='nyz'
+titlebarlayout='ILMC'
+font='arial,sans-9:bold'