From 47b8e1b7d674f8b20d27d22248054fb2b8eef726 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sat, 28 Feb 2015 15:10:48 +0100 Subject: [PATCH] update docs for 4.9 --- _docs/i3bar-protocol | 5 +- _docs/ipc | 84 ++++++++++--- _docs/testsuite | 25 ++-- _docs/userguide | 78 +++++++++++- docs/i3bar-protocol.html | 9 +- docs/ipc.html | 248 ++++++++++++++++++++++++++++++++++----- docs/layout-saving.html | 4 +- docs/multi-monitor.html | 4 +- docs/testsuite.html | 29 +++-- docs/userguide.html | 137 +++++++++++++++------ docs/wsbar.html | 4 +- 11 files changed, 500 insertions(+), 127 deletions(-) diff --git a/_docs/i3bar-protocol b/_docs/i3bar-protocol index 9276315..8fd51ae 100644 --- a/_docs/i3bar-protocol +++ b/_docs/i3bar-protocol @@ -119,7 +119,8 @@ click_events:: full_text:: The most simple block you can think of is one which just includes the only required key, the +full_text+ key. i3bar will display the string - value and that’s it. + value parsed as + https://developer.gnome.org/pango/stable/PangoMarkupFormat.html[Pango markup]. short_text:: Where appropriate, the +short_text+ (string) entry should also be provided. It will be used in case the status line needs to be shortened @@ -148,7 +149,7 @@ min_width:: when you want to set a sensible minimum width regardless of which font you are using, and at what particular size. align:: - Align text on the +center+ (default), +right+ or +left+ of the block, when + Align text on the +center+, +right+ or +left+ (default) of the block, when the minimum width of the latter, specified by the +min_width+ key, is not reached. name and instance:: diff --git a/_docs/ipc b/_docs/ipc index c976870..ff7c8aa 100644 --- a/_docs/ipc +++ b/_docs/ipc @@ -1,7 +1,7 @@ IPC interface (interprocess communication) ========================================== Michael Stapelberg -February 2014 +October 2014 This document describes how to interface with i3 from a separate process. This is useful for example to remote-control i3 (to write test cases for example) or @@ -156,7 +156,7 @@ following properties: num (integer):: The logical number of the workspace. Corresponds to the command - to switch to this workspace. + to switch to this workspace. For named workspaces, this will be -1. name (string):: The name of this workspace (by default num+1), as changed by the user. Encoded in UTF-8. @@ -316,6 +316,10 @@ window_rect (map):: So, when using the +default+ layout, you will have a 2 pixel border on each side, making the window_rect +{ "x": 2, "y": 0, "width": 632, "height": 366 }+ (for example). +deco_rect (map):: + The coordinates of the *window decoration* inside its container. These + coordinates are relative to the container and do not include the actual + client window. geometry (map):: The original geometry the window specified when i3 mapped it. Used when switching a window to floating mode, for example. @@ -613,7 +617,7 @@ you can register to an event. *Example:* --------------------------------- type: SUBSCRIBE -payload: [ "workspace", "focus" ] +payload: [ "workspace", "output" ] --------------------------------- @@ -638,6 +642,9 @@ window (3):: barconfig_update (4):: Sent when the hidden_state or mode field in the barconfig of any bar instance was updated and when the config is reloaded. +binding (5):: + Sent when a configured command binding is triggered with the keyboard or + mouse *Example:* -------------------------------------------------------------------- @@ -661,15 +668,16 @@ if ($is_event) { This event consists of a single serialized map containing a property +change (string)+ which indicates the type of the change ("focus", "init", -"empty", "urgent"). +"empty", "urgent"). A +current (object)+ property will be present with the +affected workspace whenever the type of event affects a workspace (otherwise, +it will be +null). -Moreover, when the change is "focus", an +old (object)+ and a +current -(object)+ properties will be present with the previous and current -workspace respectively. When the first switch occurs (when i3 focuses -the workspace visible at the beginning) there is no previous -workspace, and the +old+ property will be set to +null+. Also note -that if the previous is empty it will get destroyed when switching, -but will still be present in the "old" property. +When the change is "focus", an +old (object)+ property will be present with the +previous workspace. When the first switch occurs (when i3 focuses the +workspace visible at the beginning) there is no previous workspace, and the ++old+ property will be set to +null+. Also note that if the previous is empty +it will get destroyed when switching, but will still be present in the "old" +property. *Example:* --------------------- @@ -717,9 +725,13 @@ This event consists of a single serialized map containing a property +change (string)+ which indicates the type of the change * +new+ - the window has become managed by i3 +* +close+ - the window has closed * +focus+ - the window has received input focus * +title+ - the window's title has changed * +fullscreen_mode+ - the window has entered or exited fullscreen mode +* +move+ - the window has changed its position in the tree +* +floating+ - the window has transitioned to or from floating +* +urgent+ - the window has become urgent or lost its urgent status Additionally a +container (object)+ field will be present, which consists of the window's parent container. Be aware that for the "new" event, the @@ -745,6 +757,47 @@ This event consists of a single serialized map reporting on options from the barconfig of the specified bar_id that were updated in i3. This event is the same as a +GET_BAR_CONFIG+ reply for the bar with the given id. +=== binding event + +This event consists of a single serialized map reporting on the details of a +binding that ran a command because of user input. The +change (sring)+ field +indicates what sort of binding event was triggered (right now it will always be ++"run"+ but may be expanded in the future). + +The +binding (object)+ field contains details about the binding that was run: + +command (string):: + The i3 command that is configured to run for this binding. +mods (array of strings):: + The modifier keys that were configured with this binding. +input_code (integer):: + If the binding was configured with +bindcode+, this will be the key code + that was given for the binding. If the binding is a mouse binding, it will be + the number of the mouse button that was pressed. Otherwise it will be 0. +symbol (string or null):: + If this is a keyboard binding that was configured with +bindsym+, this + field will contain the given symbol. Otherwise it will be +null+. +input_type (string):: + This will be +"keyboard"+ or +"mouse"+ depending on whether or not this was + a keyboard or a mouse binding. + +*Example:* +--------------------------- +{ + "change": "run", + "binding": { + "command": "nop", + "mods": [ + "shift", + "ctrl" + ], + "input_code": 0, + "symbol": "t", + "input_type": "keyboard" + } +} +--------------------------- + == See also (existing libraries) [[libraries]] @@ -754,15 +807,14 @@ all this on your own). This list names some (if you wrote one, please let me know): C:: - i3 includes a headerfile +i3/ipc.h+ which provides you all constants. - - https://github.com/acrisci/i3ipc-glib + * i3 includes a headerfile +i3/ipc.h+ which provides you all constants. + * https://github.com/acrisci/i3ipc-glib Go:: * https://github.com/proxypoke/i3ipc JavaScript:: * https://github.com/acrisci/i3ipc-gjs Lua:: - * https:/github.com/acrisci/i3ipc-lua + * https://github.com/acrisci/i3ipc-lua Perl:: * https://metacpan.org/module/AnyEvent::I3 Python:: @@ -770,4 +822,4 @@ Python:: * https://github.com/whitelynx/i3ipc (not maintained) * https://github.com/ziberna/i3-py (not maintained) Ruby:: - http://github.com/badboy/i3-ipc + * http://github.com/badboy/i3-ipc diff --git a/_docs/testsuite b/_docs/testsuite index 6c3a36d..29a3521 100644 --- a/_docs/testsuite +++ b/_docs/testsuite @@ -74,6 +74,9 @@ client, simply called +cpan+. It comes with every Perl installation and can be used to install the testsuite. Many users prefer to use the more modern +cpanminus+ instead, though (because it asks no questions and just works): +The tests additionally require +Xephyr(1)+ to run a nested X server. Install ++xserver-xephyr+ on Debian or +xorg-xserver-xephyr+ on Arch Linux. + .Installing testsuite dependencies using cpanminus (preferred) -------------------------------------------------------------------------------- $ cd ~/i3/testcases @@ -102,7 +105,12 @@ more testcases. Also, it takes care of starting up a separate instance of i3 with an appropriate configuration file and creates a folder for each run containing the appropriate i3 logfile for each testcase. The latest folder can always be found under the symlink +latest/+. Unless told differently, it will -run the tests on a separate X server instance (using the Xdummy script). +run the tests on a separate X server instance (using Xephyr). + +Xephyr will open a window where you can inspect the running test. You can run +the tests without an X session with Xvfb, such as with +xvfb-run +./complete-run+. This will also speed up the tests signficantly especially on +machines without a powerful video card. .Example invocation of complete-run.pl+ --------------------------------------- @@ -146,12 +154,11 @@ $ less latest/i3-log-for-04-floating.t If your attempt to run the tests with a bare call to ./complete-run.pl fails, try this: --------------------------------------------------- -$ ./complete-run.pl --parallel=1 --keep-xdummy-output +$ ./complete-run.pl --parallel=1 --keep-xserver-output --------------------------------------------------- -One common cause of failures is not having the X dummy server module -installed. Under Debian and Ubuntu this is the package -+xserver-xorg-video-dummy+. +This will show the output of Xephyr, which is the X server implementation we +use for testing. ==== IPC interface @@ -175,10 +182,9 @@ manager. === Filesystem structure In the git root of i3, the testcases live in the folder +testcases+. This -folder contains the +complete-run.pl+ and +Xdummy+ scripts and a base -configuration file which will be used for the tests. The different testcases -(their file extension is .t, not .pl) themselves can be found in the -conventionally named subfolder +t+: +folder contains the +complete-run.pl+ and a base configuration file which will +be used for the tests. The different testcases (their file extension is .t, not +.pl) themselves can be found in the conventionally named subfolder +t+: .Filesystem structure -------------------------------------------- @@ -197,7 +203,6 @@ conventionally named subfolder +t+: │   │   ├── omitted for brevity │   │   ├── ... │   │   └── 74-regress-focus-toggle.t -│   └── Xdummy -------------------------------------------- == Anatomy of a testcase diff --git a/_docs/userguide b/_docs/userguide index ff46d62..45b05a0 100644 --- a/_docs/userguide +++ b/_docs/userguide @@ -91,7 +91,7 @@ To display a window in fullscreen mode or to go out of fullscreen mode again, press +$mod+f+. There is also a global fullscreen mode in i3 in which the client will span all -available outputs (the command is +fullscreen global+). +available outputs (the command is +fullscreen toggle global+). === Opening other applications @@ -153,6 +153,7 @@ to upgrade to a newer version of i3) you can use +$mod+Shift+r+. === Exiting i3 To cleanly exit i3 without killing your X server, you can use +$mod+Shift+e+. +By default, a dialog will ask you to confirm if you really want to quit. === Floating @@ -366,7 +367,7 @@ bindcode [--release] [Modifiers+]keycode command *Examples*: -------------------------------- # Fullscreen -bindsym $mod+f fullscreen +bindsym $mod+f fullscreen toggle # Restart bindsym $mod+Shift+r restart @@ -393,6 +394,41 @@ umlauts or special characters 'and' having some comfortably reachable key bindings. For example, when typing, capslock+1 or capslock+2 for switching workspaces is totally convenient. Try it :-). +[[mousebindings]] + +=== Mouse bindings + +A mouse binding makes i3 execute a command upon pressing a specific mouse +button in the scope of the clicked container (see <>). You +can configure mouse bindings in a similar way to key bindings. + +*Syntax*: +---------------------------------- +bindsym [--release] [--whole-window] [Modifiers+]button[n] command +---------------------------------- + +By default, the binding will only run when you click on the titlebar of the +window. If the +--whole-window+ flag is given, it will run when any part of the +window is clicked. If the +--release+ flag is given, it will run when the mouse +button is released. + +*Examples*: +-------------------------------- +# The middle button over a titlebar kills the window +bindsym --release button2 kill + +# The middle button and a modifer over any part of the window kills the window +bindsym --whole-window $mod+button2 kill + +# The right button toggles floating +bindsym button3 floating toggle +bindsym $mod+button3 floating toggle + +# The side buttons move the window around +bindsym button9 move left +bindsym button8 move right +-------------------------------- + [[floating_modifier]] === The floating modifier @@ -1069,6 +1105,27 @@ bar { Available modifiers are Mod1-Mod5, Shift, Control (see +xmodmap(1)+). +=== Mouse button commands + +Specifies a command to run when a button was pressed on i3bar to override the +default behavior. Currently only the mouse wheel buttons are supported. This is +useful for disabling the scroll wheel action or running scripts that implement +custom behavior for these buttons. + +*Syntax*: +--------------------- +wheel_up_cmd +wheel_down_cmd +--------------------- + +*Example*: +--------------------- +bar { + wheel_up_cmd nop + wheel_down_cmd exec ~/.i3/scripts/custom_wheel_down +} +--------------------- + === Bar ID Specifies the bar ID for the configured bar instance. If this option is missing, @@ -1446,9 +1503,13 @@ Use +layout toggle split+, +layout stacking+, +layout tabbed+, +layout splitv+ or +layout splith+ to change the current container layout to splith/splitv, stacking, tabbed layout, splitv or splith, respectively. -To make the current window (!) fullscreen, use +fullscreen+, to make -it floating (or tiling again) use +floating enable+ respectively +floating disable+ -(or +floating toggle+): +To make the current window (!) fullscreen, use +fullscreen enable+ (or ++fullscreen enable global+ for the global mode), to leave either fullscreen +mode use +fullscreen disable+, and to toggle between these two states use ++fullscreen toggle+ (or +fullscreen toggle global+). + +Likewise, to make the current window floating (or tiling again) use +floating +enable+ respectively +floating disable+ (or +floating toggle+): *Syntax*: -------------- @@ -1469,7 +1530,7 @@ bindsym $mod+x layout toggle bindsym $mod+x layout toggle all # Toggle fullscreen -bindsym $mod+f fullscreen +bindsym $mod+f fullscreen toggle # Toggle floating/tiling bindsym $mod+t floating toggle @@ -1564,6 +1625,10 @@ container to the next/previous workspace and +move container to workspace curren See <> for how to move a container/workspace to a different RandR output. +Workspace names are parsed as +https://developer.gnome.org/pango/stable/PangoMarkupFormat.html[Pango markup] +by i3bar. + [[back_and_forth]] To switch back to the previously focused workspace, use +workspace back_and_forth+; likewise, you can move containers to the previously focused @@ -1585,6 +1650,7 @@ move [window|container] [to] workspace ------------------------- bindsym $mod+1 workspace 1 bindsym $mod+2 workspace 2 +bindsym $mod+3 workspace 3:vim ... bindsym $mod+Shift+1 move container to workspace 1 diff --git a/docs/i3bar-protocol.html b/docs/i3bar-protocol.html index aee5f07..2bed449 100644 --- a/docs/i3bar-protocol.html +++ b/docs/i3bar-protocol.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - + - + i3: i3bar input protocol @@ -197,7 +197,8 @@ full_text

The most simple block you can think of is one which just includes the only required key, the full_text key. i3bar will display the string - value and that’s it. + value parsed as + Pango markup.

@@ -250,7 +251,7 @@ align

- Align text on the center (default), right or left of the block, when + Align text on the center, right or left (default) of the block, when the minimum width of the latter, specified by the min_width key, is not reached.

diff --git a/docs/ipc.html b/docs/ipc.html index 1771a14..7ecaaea 100644 --- a/docs/ipc.html +++ b/docs/ipc.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - + - + i3: IPC interface (interprocess communication) @@ -31,7 +31,7 @@ document.addEventListener("DOMContentLoaded", function(){asciidoc.footnotes(); a

IPC interface (interprocess communication)

Michael Stapelberg
<michael@i3wm.org>
-February 2014 +October 2014
Table of Contents
@@ -299,7 +299,7 @@ num (integer)

The logical number of the workspace. Corresponds to the command - to switch to this workspace. + to switch to this workspace. For named workspaces, this will be -1.

@@ -584,6 +584,16 @@ window_rect (map)

+deco_rect (map) +
+
+

+ The coordinates of the window decoration inside its container. These + coordinates are relative to the container and do not include the actual + client window. +

+
+
geometry (map)
@@ -1080,7 +1090,7 @@ you can register to an event.

type: SUBSCRIBE
-payload: [ "workspace", "focus" ]
+payload: [ "workspace", "output" ]
@@ -1134,6 +1144,15 @@ barconfig_update (4) instance was updated and when the config is reloaded.

+
+binding (5) +
+
+

+ Sent when a configured command binding is triggered with the keyboard or + mouse +

+

Example:

@@ -1158,14 +1177,15 @@ if ($is_event) {

4.3. workspace event

This event consists of a single serialized map containing a property change (string) which indicates the type of the change ("focus", "init", -"empty", "urgent").

-

Moreover, when the change is "focus", an old (object) and a current -(object) properties will be present with the previous and current -workspace respectively. When the first switch occurs (when i3 focuses -the workspace visible at the beginning) there is no previous -workspace, and the old property will be set to null. Also note -that if the previous is empty it will get destroyed when switching, -but will still be present in the "old" property.

+"empty", "urgent"). A current (object) property will be present with the +affected workspace whenever the type of event affects a workspace (otherwise, +it will be +null).

+

When the change is "focus", an old (object) property will be present with the +previous workspace. When the first switch occurs (when i3 focuses the +workspace visible at the beginning) there is no previous workspace, and the +old property will be set to null. Also note that if the previous is empty +it will get destroyed when switching, but will still be present in the "old" +property.

Example:

@@ -1219,6 +1239,11 @@ mode is simply named default.

  • +close - the window has closed +

    +
  • +
  • +

    focus - the window has received input focus

  • @@ -1232,6 +1257,21 @@ mode is simply named default.

    fullscreen_mode - the window has entered or exited fullscreen mode

    +
  • +

    +move - the window has changed its position in the tree +

    +
  • +
  • +

    +floating - the window has transitioned to or from floating +

    +
  • +
  • +

    +urgent - the window has become urgent or lost its urgent status +

    +
  • Additionally a container (object) field will be present, which consists of the window’s parent container. Be aware that for the "new" event, the @@ -1257,6 +1297,77 @@ this point get the window title as "urxvt").

    barconfig of the specified bar_id that were updated in i3. This event is the same as a GET_BAR_CONFIG reply for the bar with the given id.

    +
    +

    4.8. binding event

    +

    This event consists of a single serialized map reporting on the details of a +binding that ran a command because of user input. The change (sring) field +indicates what sort of binding event was triggered (right now it will always be +"run" but may be expanded in the future).

    +

    The binding (object) field contains details about the binding that was run:

    +
    +
    +command (string) +
    +
    +

    + The i3 command that is configured to run for this binding. +

    +
    +
    +mods (array of strings) +
    +
    +

    + The modifier keys that were configured with this binding. +

    +
    +
    +input_code (integer) +
    +
    +

    + If the binding was configured with bindcode, this will be the key code + that was given for the binding. If the binding is a mouse binding, it will be + the number of the mouse button that was pressed. Otherwise it will be 0. +

    +
    +
    +symbol (string or null) +
    +
    +

    + If this is a keyboard binding that was configured with bindsym, this + field will contain the given symbol. Otherwise it will be null. +

    +
    +
    +input_type (string) +
    +
    +

    + This will be "keyboard" or "mouse" depending on whether or not this was + a keyboard or a mouse binding. +

    +
    +
    +

    Example:

    +
    +
    +
    {
    + "change": "run",
    + "binding": {
    +  "command": "nop",
    +  "mods": [
    +    "shift",
    +    "ctrl"
    +  ],
    +  "input_code": 0,
    +  "symbol": "t",
    +  "input_type": "keyboard"
    + }
    +}
    +
    +
    @@ -1270,27 +1381,100 @@ know):

    C
    +
      +
    • - i3 includes a headerfile i3/ipc.h which provides you all constants. +i3 includes a headerfile i3/ipc.h which provides you all constants.

      -
      -
      -
              https://github.com/acrisci/i3ipc-glib
      -Go::
      -        * https://github.com/proxypoke/i3ipc
      -JavaScript::
      -        * https://github.com/acrisci/i3ipc-gjs
      -Lua::
      -        * https:/github.com/acrisci/i3ipc-lua
      -Perl::
      -        * https://metacpan.org/module/AnyEvent::I3
      -Python::
      -        * https://github.com/acrisci/i3ipc-python
      -        * https://github.com/whitelynx/i3ipc (not maintained)
      -        * https://github.com/ziberna/i3-py (not maintained)
      -Ruby::
      -        http://github.com/badboy/i3-ipc
      -
      +
    • +
    • +

      +https://github.com/acrisci/i3ipc-glib +

      +
    • +
    +
    +
    +Go +
    +
    + +
    +
    +JavaScript +
    +
    + +
    +
    +Lua +
    +
    + +
    +
    +Perl +
    +
    + +
    +
    +Python +
    +
    + +
    +
    +Ruby +
    +
    +
    diff --git a/docs/layout-saving.html b/docs/layout-saving.html index e35ce5e..0eabbfc 100644 --- a/docs/layout-saving.html +++ b/docs/layout-saving.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - + - + i3: Layout saving in i3 diff --git a/docs/multi-monitor.html b/docs/multi-monitor.html index 26ddcaa..3209372 100644 --- a/docs/multi-monitor.html +++ b/docs/multi-monitor.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - + - + i3: The multi-monitor situation diff --git a/docs/testsuite.html b/docs/testsuite.html index ca7b75f..7897170 100644 --- a/docs/testsuite.html +++ b/docs/testsuite.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - + - + i3: i3 testsuite @@ -138,6 +138,8 @@ to install all of them.

    client, simply called cpan. It comes with every Perl installation and can be used to install the testsuite. Many users prefer to use the more modern cpanminus instead, though (because it asks no questions and just works):

    +

    The tests additionally require Xephyr(1) to run a nested X server. Install +xserver-xephyr on Debian or xorg-xserver-xephyr on Arch Linux.

    Installing testsuite dependencies using cpanminus (preferred)
    @@ -165,7 +167,11 @@ more testcases. Also, it takes care of starting up a separate instance of i3 with an appropriate configuration file and creates a folder for each run containing the appropriate i3 logfile for each testcase. The latest folder can always be found under the symlink latest/. Unless told differently, it will -run the tests on a separate X server instance (using the Xdummy script).

    +run the tests on a separate X server instance (using Xephyr).

    +

    Xephyr will open a window where you can inspect the running test. You can run +the tests without an X session with Xvfb, such as with xvfb-run +./complete-run. This will also speed up the tests signficantly especially on +machines without a powerful video card.

    Example invocation of complete-run.pl+
    @@ -208,11 +214,10 @@ $ less latest/i3-log-for-04-floating.t

    If your attempt to run the tests with a bare call to ./complete-run.pl fails, try this:

    -
    $ ./complete-run.pl --parallel=1 --keep-xdummy-output
    +
    $ ./complete-run.pl --parallel=1 --keep-xserver-output
    -

    One common cause of failures is not having the X dummy server module -installed. Under Debian and Ubuntu this is the package -xserver-xorg-video-dummy.

    +

    This will show the output of Xephyr, which is the X server implementation we +use for testing.

    3.2.2. IPC interface

    @@ -236,10 +241,9 @@ manager.

    3.3. Filesystem structure

    In the git root of i3, the testcases live in the folder testcases. This -folder contains the complete-run.pl and Xdummy scripts and a base -configuration file which will be used for the tests. The different testcases -(their file extension is .t, not .pl) themselves can be found in the -conventionally named subfolder t:

    +folder contains the complete-run.pl and a base configuration file which will +be used for the tests. The different testcases (their file extension is .t, not +.pl) themselves can be found in the conventionally named subfolder t:

    Filesystem structure
    @@ -257,8 +261,7 @@ conventionally named subfolder t:

    │   │   ├── ... │   │   ├── omitted for brevity │   │   ├── ... -│   │   └── 74-regress-focus-toggle.t -│   └── Xdummy +│   │   └── 74-regress-focus-toggle.t
    diff --git a/docs/userguide.html b/docs/userguide.html index 8192d6a..90ec283 100644 --- a/docs/userguide.html +++ b/docs/userguide.html @@ -2,9 +2,9 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> - + - + i3: i3 User’s Guide @@ -148,7 +148,7 @@ stacking and $mod+w for tabbed.

    To display a window in fullscreen mode or to go out of fullscreen mode again, press $mod+f.

    There is also a global fullscreen mode in i3 in which the client will span all -available outputs (the command is fullscreen global).

    +available outputs (the command is fullscreen toggle global).

    2.4. Opening other applications

    @@ -205,7 +205,8 @@ to upgrade to a newer version of i3) you can use $mod+Shift+r.

    2.10. Exiting i3

    -

    To cleanly exit i3 without killing your X server, you can use $mod+Shift+e.

    +

    To cleanly exit i3 without killing your X server, you can use $mod+Shift+e. +By default, a dialog will ask you to confirm if you really want to quit.

    2.11. Floating

    @@ -430,7 +431,7 @@ bindcode [--release] [Modifiers+]keycode command
    # Fullscreen
    -bindsym $mod+f fullscreen
    +bindsym $mod+f fullscreen toggle
     
     # Restart
     bindsym $mod+Shift+r restart
    @@ -469,7 +470,39 @@ workspaces is totally convenient. Try it :-).
     
    -

    4.4. The floating modifier

    +

    4.4. Mouse bindings

    +

    A mouse binding makes i3 execute a command upon pressing a specific mouse +button in the scope of the clicked container (see [command_criteria]). You +can configure mouse bindings in a similar way to key bindings.

    +

    Syntax:

    +
    +
    +
    bindsym [--release] [--whole-window] [Modifiers+]button[n] command
    +
    +

    By default, the binding will only run when you click on the titlebar of the +window. If the --whole-window flag is given, it will run when any part of the +window is clicked. If the --release flag is given, it will run when the mouse +button is released.

    +

    Examples:

    +
    +
    +
    # The middle button over a titlebar kills the window
    +bindsym --release button2 kill
    +
    +# The middle button and a modifer over any part of the window kills the window
    +bindsym --whole-window $mod+button2 kill
    +
    +# The right button toggles floating
    +bindsym button3 floating toggle
    +bindsym $mod+button3 floating toggle
    +
    +# The side buttons move the window around
    +bindsym button9 move left
    +bindsym button8 move right
    +
    +
    +
    +

    4.5. The floating modifier

    To move floating windows with your mouse, you can either grab their titlebar or configure the so called floating modifier which you can then press and click anywhere in the window itself to move it. The most common setup is to @@ -492,7 +525,7 @@ ratio will be preserved).

    -

    4.5. Constraining floating window size

    +

    4.6. Constraining floating window size

    The maximum and minimum dimensions of floating windows can be specified. If either dimension of floating_maximum_size is specified as -1, that dimension will be unconstrained with respect to its maximum value. If either dimension of @@ -513,7 +546,7 @@ floating_maximum_size -1 x -1

    -

    4.6. Orientation for new workspaces

    +

    4.7. Orientation for new workspaces

    New workspaces get a reasonable default orientation: Wide-screen monitors (anything wider than high) get horizontal orientation, rotated monitors (anything higher than wide) get vertical orientation.

    @@ -531,7 +564,7 @@ behavior.

    -

    4.7. Layout mode for new containers

    +

    4.8. Layout mode for new containers

    This option determines in which mode new containers on workspace level will start.

    Syntax:

    @@ -546,7 +579,7 @@ start.

    -

    4.8. Border style for new windows

    +

    4.9. Border style for new windows

    This option determines which border style new windows will have. The default is "normal". Note that new_float applies only to windows which are starting out as floating windows, e.g. dialog windows.

    @@ -574,7 +607,7 @@ new_window pixel 3
    -

    4.9. Hiding vertical borders

    +

    4.10. Hiding vertical borders

    You can hide vertical borders adjacent to the screen edges using hide_edge_borders. This is useful if you are using scrollbars, or do not want to waste even two pixels in displayspace. Default is none.

    @@ -590,7 +623,7 @@ to waste even two pixels in displayspace. Default is none.

    -

    4.10. Arbitrary commands for specific windows (for_window)

    +

    4.11. Arbitrary commands for specific windows (for_window)

    With the for_window command, you can let i3 execute any command when it encounters a specific window. This can be used to set windows to floating or to change their border style, for example.

    @@ -616,7 +649,7 @@ for_window [title="x200: ~/work"] floating enable

    The valid criteria are the same as those for commands, see [command_criteria].

    -

    4.11. Variables

    +

    4.12. Variables

    As you learned in the section about keyboard bindings, you will have to configure lots of bindings containing modifier keys. If you want to save yourself some typing and be able to change the modifier you use later, @@ -640,7 +673,7 @@ you should create a little script which generates a configuration file and run it before starting i3 (for example in your ~/.xsession file).

    -

    4.12. Automatically putting clients on specific workspaces

    +

    4.13. Automatically putting clients on specific workspaces

    To automatically make a specific window show up on a specific workspace, you can use an assignment. You can match windows by using any criteria, see [command_criteria]. It is recommended that you match on window classes @@ -709,7 +742,7 @@ exec --no-startup-id i3-msg 'workspace 3; exec iceweasel; workspace 1'

    -

    4.13. Automatically starting applications on i3 startup

    +

    4.14. Automatically starting applications on i3 startup

    By using the exec keyword outside a keybinding, you can configure which commands will be performed by i3 on initial startup. exec commands will not run when restarting i3, if you need a command to run @@ -733,7 +766,7 @@ exec --no-startup-id urxvt

    The flag --no-startup-id is explained in [exec].

    -

    4.14. Automatically putting workspaces on specific screens

    +

    4.15. Automatically putting workspaces on specific screens

    If you assign clients to workspaces, it might be handy to put the workspaces on specific screens. Also, the assignment of workspaces to screens will determine which workspace i3 uses for a new screen when adding screens @@ -757,7 +790,7 @@ workspace "2: vim" output VGA1

    -

    4.15. Changing colors

    +

    4.16. Changing colors

    You can change all colors which i3 uses to draw the window decorations.

    Syntax:

    @@ -840,7 +873,7 @@ single windows within a split container, which are otherwise indistinguishable from single windows outside of a split container.

    -

    4.16. Interprocess communication

    +

    4.17. Interprocess communication

    i3 uses Unix sockets to provide an IPC interface. This allows third-party programs to get information from i3, such as the current workspaces (to display a workspace bar), and to control i3.

    @@ -862,7 +895,7 @@ user can create that directory.

    the next section.

    -

    4.17. Focus follows mouse

    +

    4.18. Focus follows mouse

    By default, window focus follows your mouse movements. However, if you have a setup where your mouse usually is in your way (like a touchpad on your laptop which you do not want to disable completely), you might want to disable focus @@ -881,7 +914,7 @@ links in your browser window).

    -

    4.18. Mouse warping

    +

    4.19. Mouse warping

    By default, when switching focus to a window on a different output (e.g. focusing a window on workspace 3 on output VGA-1, coming from workspace 2 on LVDS-1), the mouse cursor is warped to the center of that window.

    @@ -900,7 +933,7 @@ behavior described above.

    -

    4.19. Popups during fullscreen mode

    +

    4.20. Popups during fullscreen mode

    When you are in fullscreen mode, some applications still open popup windows (take Xpdf for example). This is because these applications may not be aware that they are in fullscreen mode (they do not check the corresponding hint). @@ -937,7 +970,7 @@ Leave fullscreen mode.

    -

    4.20. Focus wrapping

    +

    4.21. Focus wrapping

    When being in a tabbed or stacked container, the first container will be focused when you use focus down on the last container — the focus wraps. If however there is another stacked/tabbed container in that direction, focus will @@ -959,7 +992,7 @@ will always wrap.

    -

    4.21. Forcing Xinerama

    +

    4.22. Forcing Xinerama

    As explained in-depth in http://i3wm.org/docs/multi-monitor.html, some X11 video drivers (especially the nVidia binary driver) only provide support for Xinerama instead of RandR. In such a situation, i3 must be told to use the @@ -982,7 +1015,7 @@ that’s it).

    Xinerama, instead they are counted up, starting at 0: xinerama-0, xinerama-1, …

    -

    4.22. Automatic back-and-forth when switching to the current workspace

    +

    4.23. Automatic back-and-forth when switching to the current workspace

    This configuration directive enables automatic workspace back_and_forth (see [back_and_forth]) when switching to the workspace that is currently focused.

    For instance: Assume you are on workspace "1: www" and switch to "2: IM" using @@ -1000,7 +1033,7 @@ came from now, you can just press $mod+2 again to switch back to "1: www".

    -

    4.23. Delaying urgency hint reset on workspace change

    +

    4.24. Delaying urgency hint reset on workspace change

    If an application on another workspace sets an urgency hint, switching to this workspace may lead to immediate focus of the application, which also means the window decoration color would be immediately reset to client.focused. This @@ -1149,7 +1182,28 @@ modifier <Modifier>

    Available modifiers are Mod1-Mod5, Shift, Control (see xmodmap(1)).

    -

    5.4. Bar ID

    +

    5.4. Mouse button commands

    +

    Specifies a command to run when a button was pressed on i3bar to override the +default behavior. Currently only the mouse wheel buttons are supported. This is +useful for disabling the scroll wheel action or running scripts that implement +custom behavior for these buttons.

    +

    Syntax:

    +
    +
    +
    wheel_up_cmd <command>
    +wheel_down_cmd <command>
    +
    +

    Example:

    +
    +
    +
    bar {
    +    wheel_up_cmd nop
    +    wheel_down_cmd exec ~/.i3/scripts/custom_wheel_down
    +}
    +
    +
    +
    +

    5.5. Bar ID

    Specifies the bar ID for the configured bar instance. If this option is missing, the ID is set to bar-x, where x corresponds to the position of the embedding bar block in the config file (bar-0, bar-1, …).

    @@ -1167,7 +1221,7 @@ bar block in the config file (bar-0, bar-1, …).

    -

    5.5. Position

    +

    5.6. Position

    This option determines in which edge of the screen i3bar should show up.

    The default is bottom.

    Syntax:

    @@ -1184,7 +1238,7 @@ bar block in the config file (bar-0, bar-1, …).

    -

    5.6. Output(s)

    +

    5.7. Output(s)

    You can restrict i3bar to one or more outputs (monitors). The default is to handle all outputs. Restricting the outputs is useful for using different options for different outputs by using multiple bar blocks.

    @@ -1218,7 +1272,7 @@ bar {
    -

    5.7. Tray output

    +

    5.8. Tray output

    i3bar by default provides a system tray area where programs such as NetworkManager, VLC, Pidgin, etc. can place little icons.

    You can configure on which output (monitor) the icons should be displayed or @@ -1251,7 +1305,7 @@ bar {

    -

    5.8. Font

    +

    5.9. Font

    Specifies the font to be used in the bar. See [fonts].

    Syntax:

    @@ -1268,7 +1322,7 @@ bar {
    -

    5.9. Workspace buttons

    +

    5.10. Workspace buttons

    Specifies whether workspace buttons should be shown or not. This is useful if you want to display a statusline-only bar containing additional information.

    The default is to show workspace buttons.

    @@ -1286,7 +1340,7 @@ you want to display a statusline-only bar containing additional information.

    -

    5.10. Strip workspace numbers

    +

    5.11. Strip workspace numbers

    Specifies whether workspace numbers should be displayed within the workspace buttons. This is useful if you want to have a named workspace that stays in order on the bar according to its number without displaying the number prefix.

    @@ -1309,7 +1363,7 @@ workspaces to "1:I", "2:II", "3:III", "4:IV", …

    -

    5.11. Binding Mode indicator

    +

    5.12. Binding Mode indicator

    Specifies whether the current binding mode indicator should be shown or not. This is useful if you want to hide the workspace buttons but still be able to see the current binding mode indicator. @@ -1329,7 +1383,7 @@ For an example of a mode definition, see [res

    -

    5.12. Colors

    +

    5.13. Colors

    As with i3, colors are in HTML hex format (#rrggbb). The following colors can be configured at the moment:

    @@ -1599,9 +1653,12 @@ bindsym $mod+h split horizontal

    Use layout toggle split, layout stacking, layout tabbed, layout splitv or layout splith to change the current container layout to splith/splitv, stacking, tabbed layout, splitv or splith, respectively.

    -

    To make the current window (!) fullscreen, use fullscreen, to make -it floating (or tiling again) use floating enable respectively floating disable -(or floating toggle):

    +

    To make the current window (!) fullscreen, use fullscreen enable (or +fullscreen enable global for the global mode), to leave either fullscreen +mode use fullscreen disable, and to toggle between these two states use +fullscreen toggle (or fullscreen toggle global).

    +

    Likewise, to make the current window floating (or tiling again) use floating +enable respectively floating disable (or floating toggle):

    Syntax:

    @@ -1622,7 +1679,7 @@ bindsym $mod+x layout toggle bindsym $mod+x layout toggle all # Toggle fullscreen -bindsym $mod+f fullscreen +bindsym $mod+f fullscreen toggle # Toggle floating/tiling bindsym $mod+t floating toggle @@ -1748,6 +1805,9 @@ container to the next/previous workspace and move container to workspace cur (the last one makes sense only when used with criteria).

    See [move_to_outputs] for how to move a container/workspace to a different RandR output.

    +

    Workspace names are parsed as +Pango markup +by i3bar.

    To switch back to the previously focused workspace, use workspace back_and_forth; likewise, you can move containers to the previously focused workspace using move container to workspace back_and_forth.

    @@ -1768,6 +1828,7 @@ move [window|container] [to] workspace <prev|next|current>
    bindsym $mod+1 workspace 1
     bindsym $mod+2 workspace 2
    +bindsym $mod+3 workspace 3:<span foreground="red">vim</span>
     ...
     
     bindsym $mod+Shift+1 move container to workspace 1
    diff --git a/docs/wsbar.html b/docs/wsbar.html
    index a50da7f..8d47446 100644
    --- a/docs/wsbar.html
    +++ b/docs/wsbar.html
    @@ -2,9 +2,9 @@
         "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
     
     
    -
    +
     
    -
    +
     i3: External workspace bars
     
     
    -- 
    2.39.5