foo-wm

(Archived) Experimental Zooming IPC-based WM
git clone http://milesalan.com/git/foo-wm
Log | Files | Refs | Mirror | README | LICENSE

FOO-DSL.md (3726B)


      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`.