Throughout this guide, the keyword $mod will be used to refer to the
configured modifier. This is the Alt key (Mod1) by default, with the Windows
-key (Mod4) being a popular alternative.
+key (
Mod4) being a popular alternative that largely prevents conflicts with
+application-defined shortcuts.
2.1. Opening terminals and moving around
One very basic operation is opening a new terminal. By default, the keybinding
@@ -248,7 +248,7 @@ finally the windows themselves. In previous versions of i3 we had multiple lists
out to be complicated to use (snapping), understand and implement.
3.1. The tree consists of Containers
-
The building blocks of our tree are so called Containers. A Container can
+
The building blocks of our tree are so-called Containers. A Container can
host a window (meaning an X11 window, one that you can actually see and use,
like a browser). Alternatively, it could contain one or more Containers. A
simple example is the workspace: When you start i3 with a single monitor, a
@@ -576,7 +576,7 @@ mode "$mode_launcher" {
4.6. 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
+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
use the same key you use for managing windows (Mod1 for example). Then
you can press Mod1, click into a window using your left mouse button, and drag
@@ -651,33 +651,35 @@ start.
-
4.10. Border style for new windows
+
4.10. Default 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
+normal. Note that default_floating_border applies only to windows which are starting out as
floating windows, e.g., dialog windows, but not windows that are floated later on.
-
new_window normal|none|pixel
-new_window normal|pixel <px>
-new_float normal|none|pixel
-new_float normal|pixel <px>
+
default_border normal|none|pixel
+default_border normal|pixel <px>
+default_floating_border normal|none|pixel
+default_floating_border normal|pixel <px>
+
Please note that new_window and new_float have been deprecated in favor of the above options
+and will be removed in a future release. We strongly recommend using the new options instead.
-
new_window pixel
+
default_border pixel
The "normal" and "pixel" border styles support an optional border width in
pixels:
-
# The same as new_window none
-new_window pixel 0
+# The same as default_border none
+default_border pixel 0
# A 3 px border
-new_window pixel 3
+default_border pixel 3
@@ -810,13 +812,17 @@ starts up being named Firefox, and only when Vimperator is loaded does the
title change. As i3 will get the title as soon as the application maps the
window (mapping means actually displaying it on the screen), youâd need to have
to match on Firefox in this case.
+
You can also assign a window to show up on a specific output. You can use RandR
+names such as VGA1 or names relative to the output with the currently focused
+workspace such as left and down.
Assignments are processed by i3 in the order in which they appear in the config
file. The first one which matches the window wins and later assignments are not
considered.
-
assign <criteria> [â] [workspace] <workspace>
+
assign <criteria> [â] [workspace] [number] <workspace>
+assign <criteria> [â] output left|right|up|down|primary|<output>
@@ -833,10 +839,27 @@ assign [class="^URxvt$"] â 2
# Assignment to a named workspace
assign [class="^URxvt$"] â work
+# Assign to the workspace with number 2, regardless of name
+assign [class="^URxvt$"] â number 2
+
+# You can also specify a number + name. If the workspace with number 2 exists, assign will skip the text part.
+assign [class="^URxvt$"] â number "2: work"
+
# Start urxvt -name irssi
-assign [class="^URxvt$" instance="^irssi$"] â 3
+assign [class="^URxvt$" instance="^irssi$"] â 3
+
+# Assign urxvt to the output right of the current one
+assign [class="^URxvt$"] â output right
+
+# Assign urxvt to the primary output
+assign [class="^URxvt$"] â output primary
+
+
Note that you might not have a primary output configured yet. To do so, run:
+
+
+
xrandr --output <output> --primary
-
Note that the arrow is not required, it just looks good :-). If you decide to
+
Also, the arrow is not required, it just looks good :-). If you decide to
use it, it has to be a UTF-8 encoded arrow, not -> or something like that.
To get the class and instance, you can use xprop. After clicking on the
window, you will see the following output:
@@ -848,7 +871,7 @@ window, you will see the following output:
The first part of the WM_CLASS is the instance ("irssi" in this example), the
second part is the class ("URxvt" in this example).
Note that if you want to start an application just once on a specific
@@ -909,6 +932,16 @@ the second screen and so on).
The output is the name of the RandR output you attach your screen to. On a
laptop, you might have VGA1 and LVDS1 as output names. You can see the
available outputs by running xrandr --current.
+
If your X server supports RandR 1.5 or newer, i3 will use RandR monitor objects
+instead of output objects. Run xrandr --listmonitors to see a list. Usually,
+a monitor object contains exactly one output, and has the same name as the
+output; but should that not be the case, you may specify the name of either the
+monitor or the output in i3’s configuration. For example, the Dell UP2414Q uses
+two scalers internally, so its output names might be âDP1â and âDP2â, but the
+monitor name is âDell UP2414Qâ.
+
(Note that even if you specify the name of an output which doesn’t span the
+entire monitor, i3 will still use the entire area of the containing monitor
+rather than that of just the output’s.)
If you use named workspaces, they must be quoted:
@@ -1103,29 +1136,40 @@ Leave fullscreen mode.
4.24. 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
-be set on that container. This is the default behavior so you can navigate to
-all your windows without having to use focus parent.
+
By default, when in a container with several windows or child containers, the
+opposite window will be focused when trying to move the focus over the edge of
+a container (and there are no other containers in that direction) — the focus
+wraps.
+
If desired, you can disable this behavior by setting the focus_wrapping
+configuration directive to the value no.
+
When enabled, focus wrapping does not occur by default if there is another
+window or container in the specified direction, and focus will instead be set
+on that window or container. This is the default behavior so you can navigate
+to all your windows without having to use focus parent.
If you want the focus to always wrap and you are aware of using focus
-parent to switch to different containers, you can use the
-force_focus_wrapping configuration directive. After enabling it, the focus
-will always wrap.
+parent to switch to different containers, you can instead set
focus_wrapping
+to the value
force.
-
force_focus_wrapping yes|no
+
focus_wrapping yes|no|force
+
+# Legacy syntax, equivalent to "focus_wrapping force"
+force_focus_wrapping yes
-
+
-
force_focus_wrapping yes
+
# Disable focus wrapping
+focus_wrapping no
+
+# Force focus wrapping
+focus_wrapping force