<?xml version="1.0" encoding="UTF-8"?> <!-- -*- nxml -*- --> <!-- xml Schema for the openbox windowmanager configuration file Changes: Son Aug 10 15:49:10 CEST 2003 - pch(a)myzel.net restrictions added, up to current format Don Aug 14 21:10:27 CEST 2003 - pch(a)myzel.net up to current (from action.c,config.c) Don Aug 21 23:07:30 CEST 2003 - pch(a)myzel.net new element - follow Mon Sep 1 00:57:55 CEST 2003 - pch(a)myzel.net up to alpha7 Mit Sep 3 12:40:10 CEST 2003 - pch(a)myzel.net up to alpha8, a little documentation Mon Sep 8 11:52:07 CEST 2003 - pch(a)myzel.net up to cvs 1.12 Mon Sep 15 14:27:42 CEST 2003 - pch(a)myzel.net up to cvs 1.14 Die Sep 16 20:56:37 CEST 2003 - pch(a)myzel.net use a namespace Fri Sep 19 14:36:33 EDT 2003 - xor(a)orodu.net use openbox.org for namespace Mon Sep 22 02:34:53 EDT 2003 - xor(a)orodu.net add the focusLast and raiseOnFocus options fix some capitalization Mon Sep 22 14:08:16 EDT 2003 - xor(a)orodu.net update hideTimeout to hideDelay Thu Apr 22 12:33:11 UTC 2004 - mikachu(a)openbox.org add diffs between 3.1 and 3.2 Sun Oct 31 10:08:34 UTC 2004 - mikachu(a)openbox.org we haven't remembered to update this changelog in a while, adding desktopMenuIcons. Thu Nov 4 12:07:08 UTC 2004 - mikachu(a)openbox.org Add fourCorners to resize context. Sat Feb 12 01:57:16 UTC 2005 - mikachu(a)openbox.org Add the group option to raise/lower stuff. Sun Sep 25 14:44:21 UTC 2005 - mikachu(a)openbox.org Add showDelay for the dock Tue Jul 18 23:43:15 CEST 2006 - jonaskoelker(a)gnu.org hack code for great justice Tue Oct 31 03:30:26 UTC 2006 - mikachu(a)openbox.org Add movefromedge* actions Sun Mar 4 12:12:19 EST 2007 - danakj(a)orodu.net Add font section to theme section Sun Mar 4 13:49:37 EST 2007 - danakj(a)orodu.net Removing font shadows - they are going back into the themerc --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://openbox.org/" xmlns:ob="http://openbox.org/" elementFormDefault="qualified"> <!-- root node --> <xs:element name="openbox_config"> <xs:annotation> <xs:documentation>all these elements are expected in a openbox config file</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="resistance" type="ob:resistance"/> <xs:element name="focus" type="ob:focus"/> <xs:element name="placement" type="ob:placement"/> <xs:element name="theme" type="ob:theme"/> <xs:element name="desktops" type="ob:desktops"/> <xs:element name="resize" type="ob:resize"/> <xs:element name="dock" type="ob:dock"/> <xs:element name="keyboard" type="ob:keyboard"/> <xs:element name="mouse" type="ob:mouse"/> <xs:element name="menu" type="ob:menu"/> <xs:element name="applications" type="ob:applications"/> </xs:sequence> </xs:complexType> </xs:element> <!-- complex types --> <xs:complexType name="resistance"> <xs:annotation> <xs:documentation>defines behaviour of windows when close to each other or the screen edge</xs:documentation> </xs:annotation> <xs:sequence> <xs:element minOccurs="0" name="strength" type="xs:integer"/> <xs:element minOccurs="0" name="screen_edge_strength" type="xs:integer"/> <xs:element minOccurs="0" name="edges_hit_layers_below" type="ob:bool"/> </xs:sequence> </xs:complexType> <xs:complexType name="focus"> <xs:annotation> <xs:documentation>defines aspects of window focus</xs:documentation> </xs:annotation> <xs:sequence> <xs:element minOccurs="0" name="focusNew" type="ob:bool"/> <xs:element minOccurs="0" name="focusLast" type="ob:bool"/> <xs:element minOccurs="0" name="followMouse" type="ob:bool"/> <xs:element minOccurs="0" name="focusDelay" type="xs:integer"/> <xs:element minOccurs="0" name="raiseOnFocus" type="ob:bool"/> </xs:sequence> </xs:complexType> <xs:complexType name="placement"> <xs:annotation> <xs:documentation>defines how new windows are placed</xs:documentation> </xs:annotation> <xs:sequence> <xs:element name="policy" type="ob:placementpolicy"/> </xs:sequence> </xs:complexType> <xs:complexType name="theme"> <xs:sequence> <xs:element minOccurs="0" name="name" type="xs:string"/> <xs:element minOccurs="0" name="titleLayout" type="xs:string"/> <xs:element minOccurs="0" name="titleNumber" type="ob:bool"/> <xs:element minOccurs="0" name="keepBorder" type="ob:bool"/> <xs:element minOccurs="0" name="hideDisabled" type="ob:bool"/> <xs:element minOccurs="0" name="font" type="ob:font"/> </xs:sequence> </xs:complexType> <xs:complexType name="font"> <xs:sequence> <xs:element minOccurs="0" name="name" type="xs:string"/> <xs:element minOccurs="0" name="size" type="xs:integer"/> <xs:element minOccurs="0" name="weight" type="ob:fontweight"/> <xs:element minOccurs="0" name="slant" type="ob:fontslant"/> </xs:sequence> </xs:complexType> <xs:complexType name="desktops"> <xs:annotation> <xs:documentation>defines the number and names of desktops</xs:documentation> </xs:annotation> <xs:sequence> <xs:element minOccurs="0" name="number" type="xs:integer"/> <xs:element minOccurs="0" name="firstdesk" type="xs:integer"/> <xs:element minOccurs="0" name="names"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="name" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="resize"> <xs:sequence> <xs:element minOccurs="0" name="drawContents" type="ob:bool"/> <xs:element minOccurs="0" name="fourCorners" type="ob:bool"/> <xs:element minOccurs="0" name="popupShow" type="ob:popupshow"/> <xs:element minOccurs="0" name="popupPosition" type="ob:popupposition"/> </xs:sequence> </xs:complexType> <xs:complexType name="dock"> <xs:sequence> <xs:element minOccurs="0" name="position" type="ob:dock_position"/> <xs:element minOccurs="0" name="floatingX" type="xs:integer"/> <xs:element minOccurs="0" name="floatingY" type="xs:integer"/> <xs:element minOccurs="0" name="noStrut" type="ob:bool"/> <xs:element minOccurs="0" name="stacking" type="ob:layer"/> <xs:element minOccurs="0" name="direction" type="ob:direction"/> <xs:element minOccurs="0" name="autoHide" type="ob:bool"/> <xs:element minOccurs="0" name="hideDelay" type="xs:integer"/> <xs:element minOccurs="0" name="showDelay" type="xs:integer"/> <xs:element minOccurs="0" name="moveButton" type="ob:button"/> </xs:sequence> </xs:complexType> <xs:complexType name="action"> <xs:sequence> <xs:element minOccurs="0" name="execute" type="xs:string"/> <xs:element minOccurs="0" name="menu" type="xs:string"/> <xs:element minOccurs="0" name="delta" type="xs:integer"/> <xs:element minOccurs="0" name="x" type="xs:integer"/> <xs:element minOccurs="0" name="y" type="xs:integer"/> <xs:element minOccurs="0" name="left" type="xs:integer"/> <xs:element minOccurs="0" name="right" type="xs:integer"/> <xs:element minOccurs="0" name="up" type="xs:integer"/> <xs:element minOccurs="0" name="down" type="xs:integer"/> <xs:element minOccurs="0" name="desktop" type="xs:integer"/> <xs:element minOccurs="0" name="wrap" type="ob:bool"/> <xs:element minOccurs="0" name="follow" type="ob:bool"/> <xs:element minOccurs="0" name="dialog" type="ob:bool"/> <xs:element minOccurs="0" name="panels" type="ob:bool"/> <xs:element minOccurs="0" name="here" type="ob:bool"/> <xs:element minOccurs="0" name="linear" type="ob:bool"/> <xs:element minOccurs="0" name="group" type="ob:bool"/> </xs:sequence> <xs:attribute name="name" type="ob:actionname" use="required"/> </xs:complexType> <xs:complexType name="keybind"> <xs:sequence> <xs:element maxOccurs="unbounded" name="action" type="ob:action"/> </xs:sequence> <xs:attribute name="key" type="ob:keyname" use="required"/> </xs:complexType> <xs:complexType name="keyboard"> <xs:sequence> <xs:element minOccurs="0" name="chainQuitKey" type="ob:keyname"/> <xs:element maxOccurs="unbounded" name="keybind" type="ob:keybind"/> </xs:sequence> </xs:complexType> <xs:complexType name="mousebind"> <xs:sequence> <xs:element maxOccurs="unbounded" name="action" type="ob:action"/> </xs:sequence> <xs:attribute name="action" type="ob:mouseaction" use="required"/> <xs:attribute name="button" type="ob:button" use="required"/> </xs:complexType> <xs:complexType name="context"> <xs:sequence> <xs:element maxOccurs="unbounded" name="mousebind" type="ob:mousebind"/> </xs:sequence> <xs:attribute name="name" type="ob:contextname" use="required"/> </xs:complexType> <xs:complexType name="mouse"> <xs:sequence> <xs:element minOccurs="0" name="dragThreshold" type="xs:integer"/> <xs:element minOccurs="0" name="doubleClickTime" type="xs:integer"/> <xs:element maxOccurs="unbounded" name="context" type="ob:context"/> </xs:sequence> </xs:complexType> <xs:complexType name="menu"> <xs:sequence> <xs:element maxOccurs="unbounded" name="file" type="xs:string"/> <xs:element minOccurs="0" name="warpPointer" type="ob:bool"/> <xs:element minOccurs="0" name="xorStyle" type="ob:bool"/> <xs:element minOccurs="0" name="hideDelay" type="xs:integer"/> <xs:element minOccurs="0" name="middle" type="ob:bool"/> <xs:element minOccurs="0" name="submenuShowDelay" type="xs:integer"/> <xs:element minOccurs="0" name="desktopMenuIcons" type="ob:bool"/> </xs:sequence> </xs:complexType> <xs:complexType name="window_position"> <xs:sequence> <xs:element name="x" type="ob:center_or_int"/> <xs:element name="y" type="ob:center_or_int"/> </xs:sequence> </xs:complexType> <xs:complexType name="application"> <xs:sequence> <xs:element minOccurs="0" name="decor" type="xs:string"/> <xs:element minOccurs="0" name="shade" type="ob:bool"/> <xs:element minOccurs="0" name="position" type="ob:window_position"/> <xs:element minOccurs="0" name="focus" type="xs:string"/> <xs:element minOccurs="0" name="desktop" type="xs:integer"/> <xs:element minOccurs="0" name="head" type="xs:string"/> <xs:element minOccurs="0" name="layer" type="ob:layer"/> <xs:element minOccurs="0" name="iconic" type="ob:bool"/> <xs:element minOccurs="0" name="skip_pager" type="ob:bool"/> <xs:element minOccurs="0" name="skip_taskbar" type="ob:bool"/> <xs:element minOccurs="0" name="fullscreen" type="ob:bool"/> <xs:element minOccurs="0" name="maximized" type="ob:maximization"/> </xs:sequence> <!-- at least one of these must be present --> <xs:attribute name="name" type="xs:string"/> <xs:attribute name="class" type="xs:string"/> <xs:attribute name="role" type="xs:string"/> </xs:complexType> <xs:complexType name="applications"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="application" type="ob:application"/> </xs:sequence> </xs:complexType> <!-- simple types / restrictions --> <xs:simpleType name="actionname"> <xs:restriction base="xs:string"> <xs:enumeration value="Activate"/> <xs:enumeration value="Close"/> <xs:enumeration value="Desktop"/> <xs:enumeration value="DesktopDown"/> <xs:enumeration value="DesktopLast"/> <xs:enumeration value="DesktopLeft"/> <xs:enumeration value="DesktopNext"/> <xs:enumeration value="DesktopPrevious"/> <xs:enumeration value="DesktopRight"/> <xs:enumeration value="DesktopUp"/> <xs:enumeration value="DirectionalFocusEast"/> <xs:enumeration value="DirectionalFocusNorth"/> <xs:enumeration value="DirectionalFocusNortheast"/> <xs:enumeration value="DirectionalFocusNorthwest"/> <xs:enumeration value="DirectionalFocusSouth"/> <xs:enumeration value="DirectionalFocusSoutheast"/> <xs:enumeration value="DirectionalFocusSouthwest"/> <xs:enumeration value="DirectionalFocusWest"/> <xs:enumeration value="Execute"/> <xs:enumeration value="Exit"/> <xs:enumeration value="Focus"/> <xs:enumeration value="FocusToBottom"/> <xs:enumeration value="GrowToEdgeEast"/> <xs:enumeration value="GrowToEdgeNorth"/> <xs:enumeration value="GrowToEdgeSouth"/> <xs:enumeration value="GrowToEdgeWest"/> <xs:enumeration value="Iconify"/> <xs:enumeration value="Kill"/> <xs:enumeration value="Lower"/> <xs:enumeration value="MaximizeFull"/> <xs:enumeration value="MaximizeHorz"/> <xs:enumeration value="MaximizeVert"/> <xs:enumeration value="Move"/> <xs:enumeration value="MoveRelative"/> <xs:enumeration value="MoveRelativeHorz"/> <xs:enumeration value="MoveRelativeVert"/> <xs:enumeration value="MoveToCenter"/> <xs:enumeration value="MoveFromEdgeEast"/> <xs:enumeration value="MoveFromEdgeNorth"/> <xs:enumeration value="MoveFromEdgeSouth"/> <xs:enumeration value="MoveFromEdgeWest"/> <xs:enumeration value="MoveToEdgeEast"/> <xs:enumeration value="MoveToEdgeNorth"/> <xs:enumeration value="MoveToEdgeSouth"/> <xs:enumeration value="MoveToEdgeWest"/> <xs:enumeration value="NextWindow"/> <xs:enumeration value="PreviousWindow"/> <xs:enumeration value="Raise"/> <xs:enumeration value="RaiseLower"/> <xs:enumeration value="Reconfigure"/> <xs:enumeration value="Resize"/> <xs:enumeration value="ResizeRelative"/> <xs:enumeration value="ResizeRelativeHorz"/> <xs:enumeration value="ResizeRelativeVert"/> <xs:enumeration value="Restart"/> <xs:enumeration value="SendToBottomLayer"/> <xs:enumeration value="SendToDesktop"/> <xs:enumeration value="SendToDesktopDown"/> <xs:enumeration value="SendToDesktopLeft"/> <xs:enumeration value="SendToDesktopNext"/> <xs:enumeration value="SendToDesktopPrevious"/> <xs:enumeration value="SendToDesktopRight"/> <xs:enumeration value="SendToDesktopUp"/> <xs:enumeration value="SendToNormalLayer"/> <xs:enumeration value="SendToTopLayer"/> <xs:enumeration value="Shade"/> <xs:enumeration value="ShadeLower"/> <xs:enumeration value="ShowDesktop"/> <xs:enumeration value="ShowMenu"/> <xs:enumeration value="ToggleAlwaysOnBottom"/> <xs:enumeration value="ToggleAlwaysOnTop"/> <xs:enumeration value="ToggleDecorations"/> <xs:enumeration value="ToggleDockAutoHide"/> <xs:enumeration value="ToggleFullscreen"/> <xs:enumeration value="ToggleMaximizeFull"/> <xs:enumeration value="ToggleMaximizeHorz"/> <xs:enumeration value="ToggleMaximizeVert"/> <xs:enumeration value="ToggleOmnipresent"/> <xs:enumeration value="ToggleShade"/> <xs:enumeration value="ToggleShowDesktop"/> <xs:enumeration value="Unfocus"/> <xs:enumeration value="UnmaximizeFull"/> <xs:enumeration value="UnmaximizeHorz"/> <xs:enumeration value="UnmaximizeVert"/> <xs:enumeration value="Unshade"/> <xs:enumeration value="UnshadeRaise"/> <xs:enumeration value="UnShowDesktop"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="bool"> <!-- this is copied to maximization. Keep that in sync. --> <xs:restriction base="xs:string"> <xs:enumeration value="yes"/> <xs:enumeration value="no"/> <xs:enumeration value="true"/> <xs:enumeration value="false"/> <xs:enumeration value="on"/> <xs:enumeration value="off"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="fontweight"> <xs:restriction base="xs:string"> <xs:enumeration value="normal"/> <xs:enumeration value="bold"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="fontslant"> <xs:restriction base="xs:string"> <xs:enumeration value="normal"/> <xs:enumeration value="italic"/> <xs:enumeration value="opaque"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="button"> <xs:restriction base="xs:string"> <xs:enumeration value="Left"/> <xs:enumeration value="Middle"/> <xs:enumeration value="Right"/> <xs:enumeration value="Up"/> <xs:enumeration value="Down"/> <xs:enumeration value="A-Left"/> <xs:enumeration value="A-Middle"/> <xs:enumeration value="A-Right"/> <xs:enumeration value="A-Up"/> <xs:enumeration value="A-Down"/> <xs:enumeration value="C-A-Left"/> <xs:enumeration value="C-A-Middle"/> <xs:enumeration value="C-A-Right"/> <xs:enumeration value="C-A-Up"/> <xs:enumeration value="C-A-Down"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="center_or_int"> <xs:restriction base="xs:string"> <!-- ob: atoi($_) unless $_ eq 'center'; --> <!-- I think the regexp DTRT WRT atoi. --> <xs:pattern value="center|0|[1-9][0-9]*"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="contextname"> <xs:restriction base="xs:string"> <xs:enumeration value="Desktop"/> <xs:enumeration value="Client"/> <xs:enumeration value="Titlebar"/> <xs:enumeration value="Handle"/> <xs:enumeration value="Frame"/> <xs:enumeration value="TLCorner"/> <xs:enumeration value="TRCorner"/> <xs:enumeration value="BLCorner"/> <xs:enumeration value="BRCorner"/> <xs:enumeration value="Maximize"/> <xs:enumeration value="AllDesktops"/> <xs:enumeration value="Shade"/> <xs:enumeration value="Iconify"/> <xs:enumeration value="Icon"/> <xs:enumeration value="Close"/> <xs:enumeration value="MoveResize"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="direction"> <xs:restriction base="xs:string"> <xs:enumeration value="Horizontal"/> <xs:enumeration value="Vertical"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="dock_position"> <xs:restriction base="xs:string"> <xs:enumeration value="TopLeft"/> <xs:enumeration value="Top"/> <xs:enumeration value="TopRight"/> <xs:enumeration value="Right"/> <xs:enumeration value="BottomRight"/> <xs:enumeration value="Bottom"/> <xs:enumeration value="BottomLeft"/> <xs:enumeration value="Left"/> <xs:enumeration value="Floating"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="keyname"> <xs:restriction base="xs:string"> <!-- FIXME: M, Mod2, Mod5 in addition to S, A, C --> <!-- how do we do all substrings and permutations? --> <xs:pattern value="(A-)?(S-)?(A-)?(C-)?(A-)?(S-)?(A-)?[a-zA-Z0-9]*"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="layer"> <xs:restriction base="xs:string"> <xs:enumeration value="Top"/> <xs:enumeration value="Normal"/> <xs:enumeration value="Bottom"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="maximization"> <xs:restriction base="xs:string"> <xs:enumeration value="Horizontal"/> <xs:enumeration value="Vertical"/> <!-- this is a copy of ob:bool. Keep it in sync. --> <xs:enumeration value="yes"/> <xs:enumeration value="no"/> <xs:enumeration value="true"/> <xs:enumeration value="false"/> <xs:enumeration value="on"/> <xs:enumeration value="off"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="mouseaction"> <xs:restriction base="xs:string"> <xs:enumeration value="Click"/> <xs:enumeration value="DoubleClick"/> <xs:enumeration value="Drag"/> <xs:enumeration value="Press"/> <xs:enumeration value="Release"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="placementpolicy"> <xs:restriction base="xs:string"> <xs:enumeration value="Smart"/> <xs:enumeration value="UnderMouse"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="popupposition"> <xs:restriction base="xs:string"> <xs:enumeration value="Top"/> <xs:enumeration value="Center"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="popupshow"> <xs:restriction base="xs:string"> <xs:enumeration value="Always"/> <xs:enumeration value="Never"/> <xs:enumeration value="Nonpixel"/> </xs:restriction> </xs:simpleType> </xs:schema>