diff --git a/_docs/hacking-howto b/_docs/hacking-howto index ae48c44..d8c95ca 100644 --- a/_docs/hacking-howto +++ b/_docs/hacking-howto @@ -28,9 +28,9 @@ https://mesonbuild.com/[The Meson Build system]; see https://mesonbuild.com/Quick-guide.html#compiling-a-meson-project[Quickstart Guide → Compiling a Meson project]. In case you’re unfamiliar: - $ mkdir -p build && cd build - $ meson .. - $ ninja + mkdir -p build + meson setup build + meson compile -C build === Build system features diff --git a/_docs/i3bar-workspace-protocol b/_docs/i3bar-workspace-protocol index 016fc96..009b2a1 100644 --- a/_docs/i3bar-workspace-protocol +++ b/_docs/i3bar-workspace-protocol @@ -86,7 +86,7 @@ name (string):: the +name+ as you wish, effectively renaming the buttons of i3bar. visible (boolean):: Defaults to +false+ if not included. +focused+ takes precedence over it, - however +visible+ is important for more than one monitors. + however +visible+ is important for more than one monitor. focused (boolean):: Defaults to +false+ if not included. Generally, exactly one of the workspaces should be +focused+. If not, no button will have the @@ -129,7 +129,7 @@ i3-msg -t subscribe -m '["workspace", "output"]' | { # avoids having an empty bar when starting up. i3-msg -t get_workspaces; # Then, while we receive events, update the workspace information. - while read; do i3-msg -t get_workspaces; done; + while read EVENT; do i3-msg -t get_workspaces; done; } ------------------------------ @@ -139,7 +139,7 @@ i3-msg -t subscribe -m '["workspace", "output"]' | { #!/bin/sh i3-msg -t subscribe -m '["workspace", "output"]' | { i3-msg -t get_workspaces; - while read; do i3-msg -t get_workspaces; done; + while read EVENT; do i3-msg -t get_workspaces; done; } | jq --unbuffered -c '[ .[] | select(.name != "foo" or .focused) ]' ------------------------------ @@ -153,7 +153,7 @@ might mean that you are getting an empty bar until enough events are written. #!/bin/sh i3-msg -t subscribe -m '["workspace", "output"]' | { i3-msg -t get_workspaces; - while read; do i3-msg -t get_workspaces; done; + while read EVENT; do i3-msg -t get_workspaces; done; } | jq --unbuffered -c ' def fake_ws(name): { name: name, @@ -169,7 +169,7 @@ i3-msg -t subscribe -m '["workspace", "output"]' | { #!/bin/sh i3-msg -t subscribe -m '["workspace", "output"]' | { i3-msg -t get_workspaces; - while read; do i3-msg -t get_workspaces; done; + while read EVENT; do i3-msg -t get_workspaces; done; } | jq --unbuffered -c 'sort_by(.name) | reverse' ------------------------------ @@ -179,6 +179,6 @@ i3-msg -t subscribe -m '["workspace", "output"]' | { #!/bin/sh i3-msg -t subscribe -m '["workspace", "output"]' | { i3-msg -t get_workspaces; - while read; do i3-msg -t get_workspaces; done; + while read EVENT; do i3-msg -t get_workspaces; done; } | jq --unbuffered -c '[ .[] | .name |= . + " foo" ]' ------------------------------ diff --git a/_docs/testsuite b/_docs/testsuite index ea70664..22e96ab 100644 --- a/_docs/testsuite +++ b/_docs/testsuite @@ -76,30 +76,20 @@ used to install the testsuite. Many users prefer to use the more modern The tests additionally require +Xephyr(1)+ to run a nested X server. Install +xserver-xephyr+ on Debian or +xorg-server-xephyr+ on Arch Linux. -.Installing testsuite dependencies using cpanminus (preferred) +.Installing testsuite dependencies using cpanminus -------------------------------------------------------------------------------- -$ cd ~/i3/testcases -$ sudo apt-get install cpanminus -$ sudo cpanm . +# Install testsuite system-level dependencies. Xvfb is optional but recommended. +$ sudo apt-get install xcb-proto cpanminus xvfb xserver-xephyr +# Install dependencies in ~/perl5 local library +$ cpanm --local-lib=~/perl5 local::lib App::cpanminus Module::Install +# Activate the local library +$ eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib) +$ cd ~/i3/testcases/ +$ cpanm . $ cd ~/i3/AnyEvent-I3 -$ sudo cpanm Module::Install -$ sudo cpanm . +$ cpanm . -------------------------------------------------------------------------------- -If you don’t want to use cpanminus for some reason, the same works with cpan: - -.Installing testsuite dependencies using cpan --------------------------------------------------------------------------------- -$ cd ~/i3/testcases -$ sudo cpan . -$ cd ~/i3/AnyEvent-I3 -$ sudo cpan Module::Install -$ sudo cpan . --------------------------------------------------------------------------------- - -In case you don’t have root permissions, you can also install into your home -directory, see https://michael.stapelberg.de/cpan/ - === Mechanisms ==== Script: complete-run @@ -119,48 +109,57 @@ tests are run under Xvfb. --------------------------------------- $ cd ~/i3 -$ mkdir -p build && cd build +$ mkdir -p build -$ meson .. +$ meson setup build +$ cd build -$ ninja +$ meson compile # output omitted because it is very long -$ cd testcases - $ ./complete-run.pl # output omitted because it is very long All tests successful. Files=78, Tests=734, 27 wallclock secs ( 0.38 usr 0.48 sys + 17.65 cusr 3.21 csys = 21.72 CPU) Result: PASS -$ ./complete-run.pl t/04-floating.t -[:3] i3 startup: took 0.07s, status = 1 -[:3] Running t/04-floating.t with logfile testsuite-2011-09-24-16-06-04-4.0.2-226-g1eb011a/i3-log-for-04-floating.t -[:3] t/04-floating.t finished -[:3] killing i3 -output for t/04-floating.t: -ok 1 - use X11::XCB::Window; -ok 2 - The object isa X11::XCB::Window -ok 3 - Window is mapped -ok 4 - i3 raised the width to 75 -ok 5 - i3 raised the height to 50 -ok 6 - i3 did not map it to (0x0) -ok 7 - The object isa X11::XCB::Window -ok 8 - i3 let the width at 80 -ok 9 - i3 let the height at 90 -ok 10 - i3 mapped it to x=1 -ok 11 - i3 mapped it to y=18 -ok 12 - The object isa X11::XCB::Window -ok 13 - i3 let the width at 80 -ok 14 - i3 let the height at 90 -1..14 +$ ./complete-run.pl t/005-floating.t +Running tests under Xvfb display :99 +Starting 1 Xephyr instances, starting at :100... + +Rough time estimate for this run: 9.65 seconds + +Writing logfile to 'testsuite-2024-05-01-21-33-45-4.23-28-g5834b7e8/complete-run.log'... +[:100] i3/testcases/t/005-floating.t: finished +completed 0 of 1 tests All tests successful. -Files=1, Tests=14, 0 wallclock secs ( 0.01 usr 0.00 sys + 0.19 cusr 0.03 csys = 0.23 CPU) +Files=1, Tests=13, 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU) Result: PASS -$ less latest/i3-log-for-04-floating.t +The slowest tests are: + i3/testcases/t/005-floating.t with 0.07 seconds + +Test output: +[:100] i3/testcases/t/005-floating.t: starting +[:100] i3/testcases/t/005-floating.t: finished +output for i3/testcases/t/005-floating.t: +ok 1 - An object of class 'X11::XCB::Window' isa 'X11::XCB::Window' +ok 2 - Window is mapped +ok 3 - i3 raised the width to 75 +ok 4 - i3 raised the height to 50 +ok 5 - i3 did not map it to (0x0) +ok 6 - An object of class 'X11::XCB::Window' isa 'X11::XCB::Window' +ok 7 - i3 let the width at 80 +ok 8 - i3 let the height at 90 +ok 9 - i3 mapped it to x=20 +ok 10 - i3 mapped it to y=20 +ok 11 - An object of class 'X11::XCB::Window' isa 'X11::XCB::Window' +ok 12 - i3 let the width at 80 +ok 13 - i3 let the height at 90 +1..13 + +$ less latest/i3-log-for-005-floating.t ---------------------------------------- If your attempt to run the tests with a bare call to ./complete-run.pl fails, try this: @@ -172,37 +171,34 @@ $ ./complete-run.pl --parallel=1 --keep-xserver-output This will show the output of Xephyr, which is the X server implementation we use for testing. -===== make command: +make check+ -Make check runs the i3 testsuite. -You can still use ./testcases/complete-run.pl to get the interactive progress output. +===== ninja command: +ninja test+ ++ninja test+ runs the i3 testsuite. +You can still use ./complete-run.pl to get the interactive progress output. -.Example invocation of +make check+ +.Example invocation of +ninja test+ --------------------------------------- $ cd ~/i3 -$ mkdir -p build && cd build +$ mkdir -p build -$ meson .. +$ meson setup build +$ cd build -$ ninja -# output omitted because it is very long +$ ninja test +[1/102] Generating config.h with a custom command +[1/2] Running all tests. +1/1 complete-run OK 34.39s -$ make check -# output omitted because it is very long -PASS: testcases/complete-run.pl -============================================================================ -Testsuite summary for i3 4.13 -============================================================================ -# TOTAL: 1 -# PASS: 1 -# SKIP: 0 -# XFAIL: 0 -# FAIL: 0 -# XPASS: 0 -# ERROR: 0 -============================================================================ - -$ less test-suite.log +Ok: 1 +Expected Fail: 0 +Fail: 0 +Unexpected Pass: 0 +Skipped: 0 +Timeout: 0 + +Full log written to i3/build/meson-logs/testlog.txt + +$ less latest/complete-run.log ---------------------------------------- ==== Coverage testing diff --git a/_docs/userguide b/_docs/userguide index d211c1d..8bc5aa1 100644 --- a/_docs/userguide +++ b/_docs/userguide @@ -743,8 +743,11 @@ This option determines which border style *new* windows will have. The default +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. -Setting border style to +pixel+ eliminates title bars. The border style +normal+ allows you to -adjust edge border width while keeping your title bar. +Setting border style to +pixel+ eliminates title bars in split layouts. The border style ++normal+ allows you to adjust edge border width while keeping your title bar. + +The title bar is always visible in stacking and tabbed layouts, and this cannot be changed +through configuration. *Syntax*: --------------------------------------------- @@ -789,35 +792,18 @@ The "smart_no_gaps" setting hides edge-specific borders of a container if the container is the only container on its workspace and the gaps to the screen edge are +0+. -*Syntax*: ------------------------------------------------ -hide_edge_borders none|vertical|horizontal|both|smart|smart_no_gaps ------------------------------------------------ - -*Example*: ----------------------- -hide_edge_borders vertical ----------------------- - [[_smart_borders]] -=== Smart borders - -Smart borders will draw borders on windows only if there is more than one window -in a workspace. This feature can also be enabled only if the gap size between -window and screen edge is +0+. ++hide_edge_borders+ has replaced the old +smart_borders+ syntax. Use the former +instead of the latter. *Syntax*: ----------------------------------------------- -smart_borders on|off|no_gaps +hide_edge_borders none|vertical|horizontal|both|smart|smart_no_gaps ----------------------------------------------- *Example*: ---------------------- -# Activate smart borders (always) -smart_borders on - -# Activate smart borders (only when there are effectively no gaps) -smart_borders no_gaps +hide_edge_borders vertical ---------------------- [[for_window]] diff --git a/docs/hacking-howto.html b/docs/hacking-howto.html index bd5f360..fecb511 100644 --- a/docs/hacking-howto.html +++ b/docs/hacking-howto.html @@ -66,9 +66,9 @@

1. Building i3

Guide → Compiling a Meson project. In case you’re unfamiliar:

-
$ mkdir -p build && cd build
-$ meson ..
-$ ninja
+
mkdir -p build
+meson setup build
+meson compile -C build

1.1. Build system features

diff --git a/docs/i3bar-workspace-protocol.html b/docs/i3bar-workspace-protocol.html index b99bb67..d6e47e2 100644 --- a/docs/i3bar-workspace-protocol.html +++ b/docs/i3bar-workspace-protocol.html @@ -138,7 +138,7 @@

1.1. Workspace objects in detail

Defaults to false if not included. focused takes precedence over it, - however visible is important for more than one monitors. + however visible is important for more than one monitor.

@@ -211,7 +211,7 @@

2.2. Re-create the default be # avoids having an empty bar when starting up. i3-msg -t get_workspaces; # Then, while we receive events, update the workspace information. - while read; do i3-msg -t get_workspaces; done; + while read EVENT; do i3-msg -t get_workspaces; done; }

@@ -222,7 +222,7 @@

2.3. Hide works
#!/bin/sh
 i3-msg -t subscribe -m '["workspace", "output"]' | {
     i3-msg -t get_workspaces;
-    while read; do i3-msg -t get_workspaces; done;
+    while read EVENT; do i3-msg -t get_workspaces; done;
 } | jq --unbuffered -c '[ .[] | select(.name != "foo" or .focused) ]'

Important! Make sure you use the --unbuffered flag with jq, otherwise you @@ -236,7 +236,7 @@

2.5. Sort workspaces in
#!/bin/sh
 i3-msg -t subscribe -m '["workspace", "output"]' | {
     i3-msg -t get_workspaces;
-    while read; do i3-msg -t get_workspaces; done;
+    while read EVENT; do i3-msg -t get_workspaces; done;
 } | jq --unbuffered -c 'sort_by(.name) | reverse'

@@ -264,7 +264,7 @@

2.6. Append "foo" to the name
#!/bin/sh
 i3-msg -t subscribe -m '["workspace", "output"]' | {
     i3-msg -t get_workspaces;
-    while read; do i3-msg -t get_workspaces; done;
+    while read EVENT; do i3-msg -t get_workspaces; done;
 } | jq --unbuffered -c '[ .[] | .name |= . + " foo" ]'
diff --git a/docs/testsuite.html b/docs/testsuite.html index d5a17ab..75edffd 100644 --- a/docs/testsuite.html +++ b/docs/testsuite.html @@ -145,27 +145,19 @@

3.1. Installing the dependencies

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

-
Installing testsuite dependencies using cpanminus (preferred)
+
Installing testsuite dependencies using cpanminus
-
$ cd ~/i3/testcases
-$ sudo apt-get install cpanminus
-$ sudo cpanm .
+
# Install testsuite system-level dependencies. Xvfb is optional but recommended.
+$ sudo apt-get install xcb-proto cpanminus xvfb xserver-xephyr
+# Install dependencies in ~/perl5 local library
+$ cpanm --local-lib=~/perl5 local::lib App::cpanminus Module::Install
+# Activate the local library
+$ eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
+$ cd ~/i3/testcases/
+$ cpanm .
 $ cd ~/i3/AnyEvent-I3
-$ sudo cpanm Module::Install
-$ sudo cpanm .
+$ cpanm .
-

If you don’t want to use cpanminus for some reason, the same works with cpan:

-
-
Installing testsuite dependencies using cpan
-
-
$ cd ~/i3/testcases
-$ sudo cpan .
-$ cd ~/i3/AnyEvent-I3
-$ sudo cpan Module::Install
-$ sudo cpan .
-
-

In case you don’t have root permissions, you can also install into your home -directory, see https://michael.stapelberg.de/cpan/

3.2. Mechanisms

@@ -185,48 +177,57 @@

3.2.1. Script: complete-run

$ cd ~/i3
 
-$ mkdir -p build && cd build
+$ mkdir -p build
 
-$ meson ..
+$ meson setup build
+$ cd build
 
-$ ninja
+$ meson compile
 # output omitted because it is very long
 
-$ cd testcases
-
 $ ./complete-run.pl
 # output omitted because it is very long
 All tests successful.
 Files=78, Tests=734, 27 wallclock secs ( 0.38 usr  0.48 sys + 17.65 cusr  3.21 csys = 21.72 CPU)
 Result: PASS
 
-$ ./complete-run.pl t/04-floating.t
-[:3] i3 startup: took 0.07s, status = 1
-[:3] Running t/04-floating.t with logfile testsuite-2011-09-24-16-06-04-4.0.2-226-g1eb011a/i3-log-for-04-floating.t
-[:3] t/04-floating.t finished
-[:3] killing i3
-output for t/04-floating.t:
-ok 1 - use X11::XCB::Window;
-ok 2 - The object isa X11::XCB::Window
-ok 3 - Window is mapped
-ok 4 - i3 raised the width to 75
-ok 5 - i3 raised the height to 50
-ok 6 - i3 did not map it to (0x0)
-ok 7 - The object isa X11::XCB::Window
-ok 8 - i3 let the width at 80
-ok 9 - i3 let the height at 90
-ok 10 - i3 mapped it to x=1
-ok 11 - i3 mapped it to y=18
-ok 12 - The object isa X11::XCB::Window
-ok 13 - i3 let the width at 80
-ok 14 - i3 let the height at 90
-1..14
+$ ./complete-run.pl t/005-floating.t
+Running tests under Xvfb display :99
+Starting 1 Xephyr instances, starting at :100...
+
+Rough time estimate for this run: 9.65 seconds
+
+Writing logfile to 'testsuite-2024-05-01-21-33-45-4.23-28-g5834b7e8/complete-run.log'...
+[:100] i3/testcases/t/005-floating.t: finished
+completed 0 of 1 tests
 
 All tests successful.
-Files=1, Tests=14,  0 wallclock secs ( 0.01 usr  0.00 sys +  0.19 cusr  0.03 csys =  0.23 CPU)
+Files=1, Tests=13,  0 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)
 Result: PASS
 
-$ less latest/i3-log-for-04-floating.t
+The slowest tests are: + i3/testcases/t/005-floating.t with 0.07 seconds + +Test output: +[:100] i3/testcases/t/005-floating.t: starting +[:100] i3/testcases/t/005-floating.t: finished +output for i3/testcases/t/005-floating.t: +ok 1 - An object of class 'X11::XCB::Window' isa 'X11::XCB::Window' +ok 2 - Window is mapped +ok 3 - i3 raised the width to 75 +ok 4 - i3 raised the height to 50 +ok 5 - i3 did not map it to (0x0) +ok 6 - An object of class 'X11::XCB::Window' isa 'X11::XCB::Window' +ok 7 - i3 let the width at 80 +ok 8 - i3 let the height at 90 +ok 9 - i3 mapped it to x=20 +ok 10 - i3 mapped it to y=20 +ok 11 - An object of class 'X11::XCB::Window' isa 'X11::XCB::Window' +ok 12 - i3 let the width at 80 +ok 13 - i3 let the height at 90 +1..13 + +$ less latest/i3-log-for-005-floating.t

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

@@ -236,37 +237,34 @@

3.2.1. Script: complete-run

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

-
make command: make check
-

Make check runs the i3 testsuite. -You can still use ./testcases/complete-run.pl to get the interactive progress output.

+
ninja command: ninja test
+

ninja test runs the i3 testsuite. +You can still use ./complete-run.pl to get the interactive progress output.

-
Example invocation of make check
+
Example invocation of ninja test
$ cd ~/i3
 
-$ mkdir -p build && cd build
+$ mkdir -p build
 
-$ meson ..
+$ meson setup build
+$ cd build
 
-$ ninja
-# output omitted because it is very long
+$ ninja test
+[1/102] Generating config.h with a custom command
+[1/2] Running all tests.
+1/1 complete-run OK              34.39s
 
-$ make check
-# output omitted because it is very long
-PASS: testcases/complete-run.pl
-============================================================================
-Testsuite summary for i3 4.13
-============================================================================
-# TOTAL: 1
-# PASS:  1
-# SKIP:  0
-# XFAIL: 0
-# FAIL:  0
-# XPASS: 0
-# ERROR: 0
-============================================================================
-
-$ less test-suite.log
+Ok: 1 +Expected Fail: 0 +Fail: 0 +Unexpected Pass: 0 +Skipped: 0 +Timeout: 0 + +Full log written to i3/build/meson-logs/testlog.txt + +$ less latest/complete-run.log
diff --git a/docs/userguide.html b/docs/userguide.html index f12071f..c3b4674 100644 --- a/docs/userguide.html +++ b/docs/userguide.html @@ -855,8 +855,10 @@

4.12. Default border style for new windows

This option determines which border style new windows will have. The default is 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.

-

Setting border style to pixel eliminates title bars. The border style normal allows you to -adjust edge border width while keeping your title bar.

+

Setting border style to pixel eliminates title bars in split layouts. The border style +normal allows you to adjust edge border width while keeping your title bar.

+

The title bar is always visible in stacking and tabbed layouts, and this cannot be changed +through configuration.

Syntax:

@@ -894,6 +896,8 @@

4.13. Hiding borders adjacent to the screen ed

The "smart_no_gaps" setting hides edge-specific borders of a container if the container is the only container on its workspace and the gaps to the screen edge are 0.

+

hide_edge_borders has replaced the old smart_borders syntax. Use the former +instead of the latter.

Syntax:

@@ -906,27 +910,7 @@

4.13. Hiding borders adjacent to the screen ed

-

4.14. Smart borders

-

Smart borders will draw borders on windows only if there is more than one window -in a workspace. This feature can also be enabled only if the gap size between -window and screen edge is 0.

-

Syntax:

-
-
-
smart_borders on|off|no_gaps
-
-

Example:

-
-
-
# Activate smart borders (always)
-smart_borders on
-
-# Activate smart borders (only when there are effectively no gaps)
-smart_borders no_gaps
-
-
-
-

4.15. Arbitrary commands for specific windows (for_window)

+

4.14. Arbitrary commands for specific windows (for_window)

With the for_window directive, 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.

@@ -953,7 +937,7 @@

4.15. Arbitrary commands for specific windows (for_window)[list_of_commands].

-

4.16. Don’t focus window upon opening

+

4.15. Don’t focus window upon opening

When a new window appears, it will be focused. The no_focus directive allows preventing this from happening and must be used in combination with [command_criteria].

Note that this does not apply to all cases, e.g., when feeding data into a running application @@ -974,7 +958,7 @@

4.16. Don’t focus window upon opening

-

4.17. Variables

+

4.16. 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, @@ -1000,7 +984,7 @@

4.17. Variables

loaded from the X resource database.

-

4.18. X resources

+

4.17. X resources

[variables] can also be created using a value configured in the X resource database. This is useful, for example, to avoid configuring color values within the i3 configuration. Instead, the values can be configured, once, in the X @@ -1028,7 +1012,7 @@

4.18. X resources

-

4.19. Automatically putting clients on specific workspaces

+

4.18. 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]. The difference between assign and @@ -1130,7 +1114,7 @@

4.19. Automatically putting clients on specific worksp

-

4.20. Automatically starting applications on i3 startup

+

4.19. 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 @@ -1157,7 +1141,7 @@

4.20. Automatically

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

-

4.21. Automatically putting workspaces on specific screens

+

4.20. 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 @@ -1193,7 +1177,7 @@

4.21. Automatically putting workspaces on specific scr

-

4.22. Changing colors

+

4.21. Changing colors

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

Syntax:

@@ -1290,7 +1274,7 @@

4.22. Changing colors

from single windows outside of a split container.

-

4.23. Interprocess communication

+

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

@@ -1313,7 +1297,7 @@

4.23. Interprocess communication

[list_of_commands].

-

4.24. Focus follows mouse

+

4.23. Focus follows mouse

By default, window focus follows your mouse movements as the mouse crosses window borders. 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 @@ -1332,7 +1316,7 @@

4.24. Focus follows mouse

-

4.25. Mouse warping

+

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

@@ -1351,7 +1335,7 @@

4.25. Mouse warping

-

4.26. Popups during fullscreen mode

+

4.25. 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 might not be aware that they are in fullscreen mode (they do not check the corresponding hint). @@ -1388,7 +1372,7 @@

4.26. Popups during fullscreen mode

-

4.27. Focus wrapping

+

4.26. Focus wrapping

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 @@ -1425,7 +1409,7 @@

4.27. Focus wrapping

-

4.28. Forcing Xinerama

+

4.27. Forcing Xinerama

As explained in-depth in https://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 @@ -1448,7 +1432,7 @@

4.28. Forcing Xinerama

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

-

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

+

4.28. 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 @@ -1466,7 +1450,7 @@

4.29. Automatic back-and-forth when switc

-

4.30. Delaying urgency hint reset on workspace change

+

4.29. Delaying urgency hint reset on workspace change

If an application on another workspace sets an urgency hint, switching to this workspace might lead to immediate focus of the application, which also means the window decoration color would be immediately reset to client.focused. This @@ -1488,7 +1472,7 @@

4.30. Delaying urgency

-

4.31. Focus on window activation

+

4.30. Focus on window activation

If a window is activated, e.g., via google-chrome www.google.com, it may request to take focus. Since this might not be preferable, different reactions can be configured.

Note that this might not affect windows that are being opened. To prevent new windows @@ -1536,7 +1520,7 @@

4.31. Focus on window activation

-

4.32. Drawing marks on window decoration

+

4.31. Drawing marks on window decoration

If activated, marks (see [vim_like_marks]) on windows are drawn in their window decoration. However, any mark starting with an underscore in its name (_) will not be drawn even if this option is activated.

@@ -1553,7 +1537,7 @@

4.32. Drawing marks on window decoration

-

4.33. Line continuation

+

4.32. Line continuation

Config files support line continuation, meaning when you end a line in a backslash character (\), the line-break will be ignored by the parser. This feature can be used to create more readable configuration files. @@ -1569,7 +1553,7 @@

4.33. Line continuation

-

4.34. Tiling drag

+

4.33. Tiling drag

You can configure how to initiate the tiling drag feature (see [tiling_drag]).

The default is modifier.

Syntax:

@@ -1592,7 +1576,7 @@

4.34. Tiling drag

-

4.35. Gaps

+

4.34. Gaps

Since i3 4.22, you can configure window gaps. “Gaps” are added spacing between windows (or split containers) and to the screen edges: