1 Foo DSL 2 ====== 3 The Foo DSL is foo-wm's set of commands which are accepted from the socket. 4 5 ## `get` *`nodeIdentifier`* 6 Gets a json representation of the tree with the parent being the `nodeIdentifier`. For example to get the JSON from what's visible do a: `get tree`. Or get the currently focused window do a `get focus`. 7 8 - *Node Identifiers*: 9 * `tree` 10 * `view` 11 * `focus` 12 13 ## `set` *`propertyName` `propertyValue`* 14 Sets an global `propertyName` to `propertyValue`. For example to make clients border width 30 pixels simply issue a `set client_border_width 30`. The screen_padding_direction globals can be used to make room for a bar such as [dzen](), [conky](), [bar](), or similar minimal X bars. 15 16 - *Properties Names and Types*: 17 * `client_border_width` : (integer) 18 * `container_padding` : (integer) 19 * `client_padding` : (integer) 20 * `screen_padding_top` : (integer) 21 * `screen_padding_left` : (integer) 22 * `screen_padding_right` : (integer) 23 * `screen_padding_bottom` : (integer) 24 25 ## `zoom` *`(-)delta`* 26 Given that the **View Node** tracks what is currently on the screen, you can zoom in and out to see the full tree or only a part of the tree by simply by manipulating the **View Node**. `zoom -1000` would zoom out or travel up a thousand levels in ancestory within the tree. `zoom 3` would zoom in 3 levels. 27 28 In foo-wm there is no fullscreen command, rather issuing zoom until the **View Node** hits the **Focus Node** is equivilant going "fullscreen". Functionality of a fullscreen kind of action can be easily implemented to jump back and forth in maximizing 1 window and then traveling back to a "zoomed out" view via scripting and the get command. 29 30 31 ## `layout` *`type`* 32 Manipulates the **Focus Node**. Sets the layout type of the focus node. This is useful for displaying certain windows within a container node. For example, `layout vertical` tiles nodes vertically. 33 34 * Layout Options 35 - Currently Implemented 36 * `vertical`: Children are arranged side by side vertically 37 * `horizontal`: Children are arranged horizontally 38 * `grid`: Children are arranged to be equal size in a grid 39 * `max`: One child takes up the full view of the container, other children hidden 40 * Planned Implementation 41 * `tabbed`: Exactly like Max, only there is a visual tab indication 42 * `float`: Clients are floated, but bound by the container 43 * `freefloat`: Clients are free to float, even on top of the current view 44 45 ## `focus` *`brother|pc` `(-)delta`* 46 Sets the **Focus Node**, approximating the current **Focus Node**. Good for shifting focus around. For example, to get the focus' brother next in its parent container, simply issue `focus brother 1` or to select the **Focus Node **'s parent, do a `focus pc -1`. 47 48 ## `shift` *`brother|pc` `(-)delta`* 49 Shift the current **Focus Node** in . This wraps around if you attempt to move to a node that doesn't exist. Note, shifting to a positive pc won't do anything, shift pc should only be used with a negative delta to shift a client up toward its parent. 50 51 ## `containerize` 52 If the current **Focus Node** is not an only child, containerize creates a container in place of the currrent **Focus Node**, reparent the old **Focus Node** to this container, and then focuses this child. 53 54 ## `kill` 55 Kills the **Focus Node** and any of its children. Simply issue `kill` to eliminate the **Focus Node** from the tree. 56 57 ## `mark` *`markname`* 58 Marks the current **View Node** so that it can later be `jump`'d back to. To mark the current **View Node** at any point: `mark nameOfMark`. 59 60 ## `jump` *`markname`* 61 Sets the **View Node** set by `mark` at **Mark Name**. Simple syntax of `jump markName`.