docs: merge spelling and grammar fixes by sasha (Thanks!)
This commit is contained in:
parent
77efb29d9f
commit
234ed6c99b
17
CMDMODE
17
CMDMODE
|
@ -2,7 +2,8 @@
|
||||||
- Command mode
|
- Command mode
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
This is the grammar for the command mode (your configuration file uses these commands, too).
|
This is the grammar for the 'command mode' (your configuration file
|
||||||
|
uses these commands, too).
|
||||||
|
|
||||||
left := <h> | <cursor-left>
|
left := <h> | <cursor-left>
|
||||||
right := <l> | <cursor-right>
|
right := <l> | <cursor-right>
|
||||||
|
@ -17,12 +18,14 @@ cmd := [ <times> ] [ <move> | <snap> ] <where>
|
||||||
with := <w> { [ <times> ] <where> }+ <space> <cmd>
|
with := <w> { [ <times> ] <where> }+ <space> <cmd>
|
||||||
jump := [ "<window class>[/<window title>]" | <workspace> [ <column> <row> ] ]
|
jump := [ "<window class>[/<window title>]" | <workspace> [ <column> <row> ] ]
|
||||||
focus := focus [ <times> | floating | tiling | ft ]
|
focus := focus [ <times> | floating | tiling | ft ]
|
||||||
(travels the focus stack backwards the given amount of times (by default 1), so
|
(travels the focus stack backwards, <times> number of times (by default 1).
|
||||||
it selects the window which had the focus before you focused the current one when
|
So by specifying "focus 1" it selects the window which last had the focus
|
||||||
specifying "focus 1".
|
before you focused the current one window.
|
||||||
The special values 'floating' (select the next floating window), 'tiling'
|
The following 3 special values are also valid:
|
||||||
(select the next tiling window), 'ft' (if the current window is floating,
|
'floating' (select the next floating window).
|
||||||
select the next tiling window and vice-versa) are also valid)
|
'tiling' (select the next tiling window).
|
||||||
|
'ft' (toggle tiling/floating: if the current window is floating,
|
||||||
|
select the next tiling window and vice-versa)
|
||||||
special := [ exec <path> | kill | exit | restart ]
|
special := [ exec <path> | kill | exit | restart ]
|
||||||
|
|
||||||
input := [ <cmd> | <with> | <jump> | <focus> | <special> ]
|
input := [ <cmd> | <with> | <jump> | <focus> | <special> ]
|
||||||
|
|
7
DEPENDS
7
DEPENDS
|
@ -1,6 +1,7 @@
|
||||||
You need the following libraries. The version given is to be understand as the minimum
|
You need the following libraries. The version given is to be understood as the
|
||||||
version. However, if any of these libraries changes the API, i3 may not compile anymore.
|
minimum version required. However, if any of these libraries changes the API,
|
||||||
In that case, please try using the versions mentioned below until a fix is provided.
|
i3 may not compile anymore. In that case, please try using the versions
|
||||||
|
mentioned below until a fix is provided.
|
||||||
|
|
||||||
* xcb-proto-1.3 (2008-12-10)
|
* xcb-proto-1.3 (2008-12-10)
|
||||||
* libxcb-1.1.93 (2008-12-11)
|
* libxcb-1.1.93 (2008-12-11)
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
Dear package maintainer,
|
Dear package maintainer,
|
||||||
|
|
||||||
thanks for packaging i3. By doing so, you are improving your distribution and i3 in general.
|
thanks for packaging i3. By doing so, you are improving your distribution
|
||||||
|
and i3 in general.
|
||||||
|
|
||||||
Please read the file DEPENDS now, so you know which libraries are necessary and where to
|
Please read the file DEPENDS now, so you know which libraries are necessary
|
||||||
get them from if your distribution does not already have packages for them.
|
and where to get them from if your distribution does not already have
|
||||||
|
packages for them.
|
||||||
|
|
||||||
|
Please make sure the manpage for i3 will be properly created and installed
|
||||||
|
in your package.
|
||||||
|
|
||||||
Please make sure the manpage for i3 will be properly created and installed in your package.
|
|
||||||
On debian, this looks like this:
|
On debian, this looks like this:
|
||||||
|
|
||||||
# Compilation
|
# Compilation
|
||||||
|
@ -17,10 +21,11 @@ On debian, this looks like this:
|
||||||
mkdir -p $(CURDIR)/debian/i3-wm/usr/share/man/man1
|
mkdir -p $(CURDIR)/debian/i3-wm/usr/share/man/man1
|
||||||
cp man/i3.1 $(CURDIR)/debian/i3-wm/usr/share/man/man1
|
cp man/i3.1 $(CURDIR)/debian/i3-wm/usr/share/man/man1
|
||||||
|
|
||||||
If you got any questions, ideas, hints, problems or whatever, please do not
|
If you have any questions, ideas, hints, problems or whatever, please do not
|
||||||
hesitate to contact me. I will help you out. Just drop me an E-Mail (find the address at
|
hesitate to contact me. I will help you out. Just drop me an E-Mail (find the
|
||||||
http://michael.stapelberg.de/Kontakt, scroll down to bottom), contact me using the same
|
address at http://michael.stapelberg.de/Kontakt, scroll down to bottom),
|
||||||
address in jabber or ask on our IRC channel (#i3 on irc.twice-irc.de).
|
contact me using the same address in jabber or ask on our IRC channel:
|
||||||
|
(#i3 on irc.twice-irc.de).
|
||||||
|
|
||||||
Thanks again for your efforts,
|
Thanks again for your efforts,
|
||||||
Michael
|
Michael
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Debugging i3: How To
|
Debugging i3: How To
|
||||||
==================
|
====================
|
||||||
Michael Stapelberg <michael+i3@stapelberg.de>
|
Michael Stapelberg <michael+i3@stapelberg.de>
|
||||||
April 2009
|
April 2009
|
||||||
|
|
||||||
|
@ -13,22 +13,22 @@ debugging and/or need further help, do not hesitate to contact us!
|
||||||
== Enabling logging
|
== Enabling logging
|
||||||
|
|
||||||
i3 spits out much information onto stdout. To have a clearly defined place
|
i3 spits out much information onto stdout. To have a clearly defined place
|
||||||
where logfiles will be saved, you should redirect stdout and stderr in
|
where log files will be saved, you should redirect stdout and stderr in
|
||||||
xsession. While you’re at it, putting each run of i3 in a separate logfile with
|
xsession. While you’re at it, putting each run of i3 in a separate log file
|
||||||
date/time in it is a good idea to not get confused about the different logfiles
|
with date/time in it is a good idea to not get confused about the different
|
||||||
later on.
|
log files later on.
|
||||||
|
|
||||||
--------------------------------------------------------------------
|
--------------------------------------------------------------------
|
||||||
exec /usr/bin/i3 >/home/michael/i3/i3log-$(date +'%F-%k-%M-%S') 2>&1
|
exec /usr/bin/i3 >/home/michael/i3/i3log-$(date +'%F-%k-%M-%S') 2>&1
|
||||||
--------------------------------------------------------------------
|
--------------------------------------------------------------------
|
||||||
|
|
||||||
== Enabling coredumps
|
== Enabling core dumps
|
||||||
|
|
||||||
When i3 crashes, often you have the chance of getting a coredump (an image of
|
When i3 crashes, often you have the chance of getting a 'core dump' (an image
|
||||||
the memory of the i3 process which can be loaded into a debugger). To get a
|
of the memory of the i3 process which can be loaded into a debugger). To get a
|
||||||
core-dump, you have to make sure that the user limit for core dump files is set
|
core dump, you have to make sure that the user limit for core dump files is set
|
||||||
high enough. Many systems ship with a default value which even forbids core
|
high enough. Many systems ship with a default value which even forbids core
|
||||||
dumps completely. To disable the limit completely and thus enable coredumps,
|
dumps completely. To disable the limit completely and thus enable core dumps,
|
||||||
use the following command (in your .xsession, before starting i3):
|
use the following command (in your .xsession, before starting i3):
|
||||||
|
|
||||||
-------------------
|
-------------------
|
||||||
|
@ -49,7 +49,7 @@ process id (%p) in it. You can save this setting across reboots using
|
||||||
|
|
||||||
== Compiling with debug symbols
|
== Compiling with debug symbols
|
||||||
|
|
||||||
To actually get useful coredumps, you should make sure that your version of i3
|
To actually get useful core dumps, you should make sure that your version of i3
|
||||||
is compiled with debug symbols, that is, that they are not stripped during the
|
is compiled with debug symbols, that is, that they are not stripped during the
|
||||||
build process. You can check whether your executable contains symbols by
|
build process. You can check whether your executable contains symbols by
|
||||||
issuing the following command:
|
issuing the following command:
|
||||||
|
@ -72,15 +72,15 @@ stripping. If nothing helps, please build i3 from source.
|
||||||
== Generating a backtrace
|
== Generating a backtrace
|
||||||
|
|
||||||
Once you have made sure that your i3 is compiled with debug symbols and that
|
Once you have made sure that your i3 is compiled with debug symbols and that
|
||||||
coredumps are enabled, you can start getting some sense out of the coredumps.
|
core dumps are enabled, you can start making sense out of the core dumps.
|
||||||
|
|
||||||
Because the coredump depends on the original executable (and its debug
|
Because the core dump depends on the original executable (and its debug
|
||||||
symbols), please do this as soon as you encounter the problem. If you
|
symbols), please do this as soon as you encounter the problem. If you
|
||||||
re-compile i3, your coredump might be useless afterwards.
|
re-compile i3, your core dump might be useless afterwards.
|
||||||
|
|
||||||
Please install +gdb+, a debugger for C. No worries, you don’t need to learn it
|
Please install +gdb+, a debugger for C. No worries, you don’t need to learn it
|
||||||
now. Start gdb using the following command (replacing the actual name of the
|
now. Start gdb using the following command (replacing the actual name of the
|
||||||
coredump of course):
|
core dump of course):
|
||||||
|
|
||||||
----------------------------
|
----------------------------
|
||||||
gdb $(which i3) core.i3.3849
|
gdb $(which i3) core.i3.3849
|
||||||
|
@ -92,13 +92,13 @@ Then, generate a backtrace using:
|
||||||
backtrace full
|
backtrace full
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
== Sending bugreports/debugging on IRC
|
== Sending bug reports/debugging on IRC
|
||||||
|
|
||||||
When sending bugreports, please paste the relevant part of the log (if in
|
When sending bug reports, please paste the relevant part of the log (if in
|
||||||
doubt, please send us rather too much information than too less) and the whole
|
doubt, please send us rather too much information than too less) and the whole
|
||||||
backtrace (if there was a coredump).
|
backtrace (if there was a core dump).
|
||||||
|
|
||||||
When debugging with us in IRC, be prepared to use a so called nopaste service
|
When debugging with us in IRC, be prepared to use a so called nopaste service
|
||||||
such as http://nopaste.info because pasting large amounts of text in IRC
|
such as http://nopaste.info or http://pastebin.com because pasting large
|
||||||
sometimes leads to incomplete lines (servers have line length limitations) or
|
amounts of text in IRC sometimes leads to incomplete lines (servers have line
|
||||||
flood kicks.
|
length limitations) or flood kicks.
|
||||||
|
|
|
@ -24,8 +24,9 @@ some events which normal clients usually don’t handle.
|
||||||
In the case of i3, the tasks (and order of them) are the following:
|
In the case of i3, the tasks (and order of them) are the following:
|
||||||
|
|
||||||
. Grab the key bindings (events will be sent upon keypress/keyrelease)
|
. Grab the key bindings (events will be sent upon keypress/keyrelease)
|
||||||
. Iterate through all existing windows (if the window manager is not started as the first
|
. Iterate through all existing windows (if the window manager is not started as
|
||||||
client of X) and manage them (= reparent them, create window decorations)
|
the first client of X) and manage them (reparent them, create window
|
||||||
|
decorations, etc.)
|
||||||
. When new windows are created, manage them
|
. When new windows are created, manage them
|
||||||
. Handle the client’s `_WM_STATE` property, but only the `_WM_STATE_FULLSCREEN`
|
. Handle the client’s `_WM_STATE` property, but only the `_WM_STATE_FULLSCREEN`
|
||||||
. Handle the client’s `WM_NAME` property
|
. Handle the client’s `WM_NAME` property
|
||||||
|
@ -35,8 +36,8 @@ In the case of i3, the tasks (and order of them) are the following:
|
||||||
. Handle button (as in mouse buttons) presses for focus/raise on click
|
. Handle button (as in mouse buttons) presses for focus/raise on click
|
||||||
. Handle expose events to re-draw own windows such as decorations
|
. Handle expose events to re-draw own windows such as decorations
|
||||||
. React to the user’s commands: Change focus, Move windows, Switch workspaces,
|
. React to the user’s commands: Change focus, Move windows, Switch workspaces,
|
||||||
Change the layout mode of a container (default/stacking), Start a new application,
|
Change the layout mode of a container (default/stacking/tabbed), start a new
|
||||||
Restart the window manager
|
application, restart the window manager
|
||||||
|
|
||||||
In the following chapters, each of these tasks and their implementation details
|
In the following chapters, each of these tasks and their implementation details
|
||||||
will be discussed.
|
will be discussed.
|
||||||
|
@ -46,8 +47,8 @@ will be discussed.
|
||||||
Traditionally, there are two approaches to managing windows: The most common
|
Traditionally, there are two approaches to managing windows: The most common
|
||||||
one nowadays is floating, which means the user can freely move/resize the
|
one nowadays is floating, which means the user can freely move/resize the
|
||||||
windows. The other approach is called tiling, which means that your window
|
windows. The other approach is called tiling, which means that your window
|
||||||
manager distributing windows to use as much space as possible while not
|
manager distributes windows to use as much space as possible while not
|
||||||
overlapping.
|
overlapping each other.
|
||||||
|
|
||||||
The idea behind tiling is that you should not need to waste your time
|
The idea behind tiling is that you should not need to waste your time
|
||||||
moving/resizing windows while you usually want to get some work done. After
|
moving/resizing windows while you usually want to get some work done. After
|
||||||
|
@ -90,8 +91,9 @@ When moving terminal 2 to the bottom, the table will be expanded again.
|
||||||
|========
|
|========
|
||||||
|
|
||||||
You can really think of the layout table like a traditional HTML table, if
|
You can really think of the layout table like a traditional HTML table, if
|
||||||
you’ve ever designed one. Especially col- and rowspan work equally. Below you
|
you’ve ever designed one. Especially col- and rowspan work similarly. Below,
|
||||||
see an example of colspan=2 for the first container (which has T1 as window).
|
you see an example of colspan=2 for the first container (which has T1 as
|
||||||
|
window).
|
||||||
|
|
||||||
[width="15%",cols="^asciidoc"]
|
[width="15%",cols="^asciidoc"]
|
||||||
|========
|
|========
|
||||||
|
@ -112,7 +114,7 @@ Contains data definitions used by nearly all files. You really need to read
|
||||||
this first.
|
this first.
|
||||||
|
|
||||||
include/*.h::
|
include/*.h::
|
||||||
Contains forward definitions for all public functions, aswell as
|
Contains forward definitions for all public functions, as well as
|
||||||
doxygen-compatible comments (so if you want to get a bit more of the big
|
doxygen-compatible comments (so if you want to get a bit more of the big
|
||||||
picture, either browse all header files or use doxygen if you prefer that).
|
picture, either browse all header files or use doxygen if you prefer that).
|
||||||
|
|
||||||
|
@ -131,7 +133,7 @@ Contains all functions which are specific to a certain client (make it
|
||||||
fullscreen, see if its class/name matches a pattern, kill it, …).
|
fullscreen, see if its class/name matches a pattern, kill it, …).
|
||||||
|
|
||||||
src/commands.c::
|
src/commands.c::
|
||||||
Parsing commands and actually execute them (focussing, moving, …).
|
Parsing commands and actually executing them (focusing, moving, …).
|
||||||
|
|
||||||
src/config.c::
|
src/config.c::
|
||||||
Parses the configuration file.
|
Parses the configuration file.
|
||||||
|
@ -143,7 +145,7 @@ src/floating.c::
|
||||||
Contains functions for floating mode (mostly resizing/dragging).
|
Contains functions for floating mode (mostly resizing/dragging).
|
||||||
|
|
||||||
src/handlers.c::
|
src/handlers.c::
|
||||||
Contains all handlers for all kind of X events (new window title, new hints,
|
Contains all handlers for all kinds of X events (new window title, new hints,
|
||||||
unmapping, key presses, button presses, …).
|
unmapping, key presses, button presses, …).
|
||||||
|
|
||||||
src/ipc.c::
|
src/ipc.c::
|
||||||
|
@ -212,7 +214,7 @@ screen you are currently on.
|
||||||
=== Workspace
|
=== Workspace
|
||||||
|
|
||||||
A workspace is identified by its number. Basically, you could think of
|
A workspace is identified by its number. Basically, you could think of
|
||||||
workspaces as different desks in your bureau, if you like the desktop
|
workspaces as different desks in your office, if you like the desktop
|
||||||
methaphor. They just contain different sets of windows and are completely
|
methaphor. They just contain different sets of windows and are completely
|
||||||
separate of each other. Other window managers also call this ``Virtual
|
separate of each other. Other window managers also call this ``Virtual
|
||||||
desktops''.
|
desktops''.
|
||||||
|
@ -288,7 +290,7 @@ So, why do we need to grab keycodes actively? Because X does not set the
|
||||||
state-property of keypress/keyrelease events properly. The Mode_switch bit is
|
state-property of keypress/keyrelease events properly. The Mode_switch bit is
|
||||||
not set and we need to get it using XkbGetState. This means we cannot pass X
|
not set and we need to get it using XkbGetState. This means we cannot pass X
|
||||||
our combination of modifiers containing Mode_switch when grabbing the key and
|
our combination of modifiers containing Mode_switch when grabbing the key and
|
||||||
therefore need to grab the keycode itself without any modiffiers. This means,
|
therefore need to grab the keycode itself without any modifiers. This means,
|
||||||
if you bind Mode_switch + keycode 38 ("a"), i3 will grab keycode 38 ("a") and
|
if you bind Mode_switch + keycode 38 ("a"), i3 will grab keycode 38 ("a") and
|
||||||
check on each press of "a" if the Mode_switch bit is set using XKB. If yes, it
|
check on each press of "a" if the Mode_switch bit is set using XKB. If yes, it
|
||||||
will handle the event, if not, it will replay the event.
|
will handle the event, if not, it will replay the event.
|
||||||
|
@ -344,7 +346,7 @@ moved/resized so that the currently active layout (default/stacking/tabbed mode)
|
||||||
is rendered correctly. To move/resize windows, a window is ``configured'' in
|
is rendered correctly. To move/resize windows, a window is ``configured'' in
|
||||||
X11-speak.
|
X11-speak.
|
||||||
|
|
||||||
Some applications, such as MPlayer obivously assume the window manager is
|
Some applications, such as MPlayer obviously assume the window manager is
|
||||||
stupid and try to configure their windows by themselves. This generates an
|
stupid and try to configure their windows by themselves. This generates an
|
||||||
event called configurerequest. i3 handles these events and tells the window the
|
event called configurerequest. i3 handles these events and tells the window the
|
||||||
size it had before the configurerequest (with the exception of not yet mapped
|
size it had before the configurerequest (with the exception of not yet mapped
|
||||||
|
@ -374,7 +376,7 @@ characters (every special character contained in your font).
|
||||||
|
|
||||||
== Size hints
|
== Size hints
|
||||||
|
|
||||||
Size hints specify the minimum/maximum size for a given window aswell as its
|
Size hints specify the minimum/maximum size for a given window as well as its
|
||||||
aspect ratio. This is important for clients like mplayer, who only set the
|
aspect ratio. This is important for clients like mplayer, who only set the
|
||||||
aspect ratio and resize their window to be as small as possible (but only with
|
aspect ratio and resize their window to be as small as possible (but only with
|
||||||
some video outputs, for example in Xv, while when using x11, mplayer does the
|
some video outputs, for example in Xv, while when using x11, mplayer does the
|
||||||
|
@ -447,10 +449,10 @@ floating windows:
|
||||||
(+grabwin+)
|
(+grabwin+)
|
||||||
* Another window, 2px width and as high as your screen (or vice versa for
|
* Another window, 2px width and as high as your screen (or vice versa for
|
||||||
horizontal resizing) is created. Its background color is the border color and
|
horizontal resizing) is created. Its background color is the border color and
|
||||||
it is only there to signalize the user how big the container will be (it
|
it is only there to inform the user how big the container will be (it
|
||||||
creates the impression of dragging the border out of the container).
|
creates the impression of dragging the border out of the container).
|
||||||
* The +drag_pointer+ function of +src/floating.c+ is called to grab the pointer
|
* The +drag_pointer+ function of +src/floating.c+ is called to grab the pointer
|
||||||
and enter an own event loop which will pass all events (expose events) but
|
and enter its own event loop which will pass all events (expose events) but
|
||||||
motion notify events. This function then calls the specified callback
|
motion notify events. This function then calls the specified callback
|
||||||
(+resize_callback+) which does some boundary checking and moves the helper
|
(+resize_callback+) which does some boundary checking and moves the helper
|
||||||
window. As soon as the mouse button is released, this loop will be
|
window. As soon as the mouse button is released, this loop will be
|
||||||
|
@ -497,7 +499,7 @@ http://git-scm.com/documentation
|
||||||
|
|
||||||
When you want to send a patch because you fixed a bug or implemented a cool
|
When you want to send a patch because you fixed a bug or implemented a cool
|
||||||
feature (please talk to us before working on features to see whether they are
|
feature (please talk to us before working on features to see whether they are
|
||||||
maybe already implemented, not possible because of some reason or don’t fit
|
maybe already implemented, not possible for some some reason, or don’t fit
|
||||||
into the concept), please use git to create a patchfile.
|
into the concept), please use git to create a patchfile.
|
||||||
|
|
||||||
First of all, update your working copy to the latest version of the master
|
First of all, update your working copy to the latest version of the master
|
||||||
|
@ -519,4 +521,4 @@ apply to the branch, preserving your commit message and name:
|
||||||
git format-patch origin
|
git format-patch origin
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
Just send us the generated file via mail.
|
Just send us the generated file via email.
|
||||||
|
|
16
docs/ipc
16
docs/ipc
|
@ -28,10 +28,10 @@ my $sock = IO::Socket::UNIX->new(Peer => '/tmp/i3-ipc.sock');
|
||||||
|
|
||||||
To send a message to i3, you have to format in the binary message format which
|
To send a message to i3, you have to format in the binary message format which
|
||||||
i3 expects. This format specifies a magic string in the beginning to ensure
|
i3 expects. This format specifies a magic string in the beginning to ensure
|
||||||
the integrity of messages (to prevent follow-up errors). Afterwards follows
|
the integrity of messages (to prevent follow-up errors). Following the magic
|
||||||
the length of the payload of the message as 32-bit integer and the type of
|
string comes the length of the payload of the message as 32-bit integer, and
|
||||||
the message as 32-bit integer (the integers are not converted, so they are
|
the type of the message as 32-bit integer (the integers are not converted, so
|
||||||
in native byte order).
|
they are in native byte order).
|
||||||
|
|
||||||
The magic string currently is "i3-ipc" and will only be changed when a change
|
The magic string currently is "i3-ipc" and will only be changed when a change
|
||||||
in the IPC API is done which breaks compatibility (we hope that we don’t need
|
in the IPC API is done which breaks compatibility (we hope that we don’t need
|
||||||
|
@ -75,11 +75,11 @@ sub format_ipc_command {
|
||||||
}
|
}
|
||||||
|
|
||||||
$sock->write(format_ipc_command("exit"));
|
$sock->write(format_ipc_command("exit"));
|
||||||
------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
== Receiving replies from i3
|
== Receiving replies from i3
|
||||||
|
|
||||||
Replies of i3 usually consist of a simple string (the length of the string
|
Replies from i3 usually consist of a simple string (the length of the string
|
||||||
is the message_length, so you can consider them length-prefixed) which in turn
|
is the message_length, so you can consider them length-prefixed) which in turn
|
||||||
contain the JSON serialization of a data structure. For example, the
|
contain the JSON serialization of a data structure. For example, the
|
||||||
GET_WORKSPACES message returns an array of workspaces (each workspace is a map
|
GET_WORKSPACES message returns an array of workspaces (each workspace is a map
|
||||||
|
@ -240,8 +240,8 @@ that the requests to i3 are processed in order. This means, the following
|
||||||
situation can happen: You send a GET_WORKSPACES request but you receive a
|
situation can happen: You send a GET_WORKSPACES request but you receive a
|
||||||
"workspace" event before receiving the reply to GET_WORKSPACES. If your
|
"workspace" event before receiving the reply to GET_WORKSPACES. If your
|
||||||
program does not want to cope which such kinds of race conditions (an
|
program does not want to cope which such kinds of race conditions (an
|
||||||
event based library may not have a problem here), I advise to create a separate
|
event based library may not have a problem here), I suggest you create a
|
||||||
connection to receive events.
|
separate connection to receive events.
|
||||||
|
|
||||||
=== Subscribing to events
|
=== Subscribing to events
|
||||||
|
|
||||||
|
|
|
@ -3,12 +3,13 @@ The multi-monitor situation
|
||||||
Michael Stapelberg <michael+i3@stapelberg.de>
|
Michael Stapelberg <michael+i3@stapelberg.de>
|
||||||
March 2010
|
March 2010
|
||||||
|
|
||||||
…or: oh no, I have an nvidia graphics card!
|
…or: oh no, I have an nVidia graphics card!
|
||||||
|
|
||||||
== The quick fix
|
== The quick fix
|
||||||
|
|
||||||
If you are using the nvidia binary graphics driver, you need to use the
|
If you are using the nVidia binary graphics driver (also known as 'blob')
|
||||||
+--force-xinerama+ flag when starting i3, like so (in your xsession):
|
you need to use the +--force-xinerama+ flag (in your .xsession) when starting
|
||||||
|
i3, like so:
|
||||||
|
|
||||||
.Example:
|
.Example:
|
||||||
----------------------------------------------
|
----------------------------------------------
|
||||||
|
@ -18,7 +19,7 @@ exec i3 --force-xinerama -V >>~/.i3/i3log 2>&1
|
||||||
== The explanation
|
== The explanation
|
||||||
|
|
||||||
Starting with version 3.ε, i3 uses the RandR (Rotate and Resize) API instead
|
Starting with version 3.ε, i3 uses the RandR (Rotate and Resize) API instead
|
||||||
of Xinerama. This is due to the reason that RandR provides more information
|
of Xinerama. The reason for this, is that RandR provides more information
|
||||||
about your outputs and connected screens than Xinerama does. To be specific,
|
about your outputs and connected screens than Xinerama does. To be specific,
|
||||||
the code which handled on-the-fly screen reconfiguration (meaning without
|
the code which handled on-the-fly screen reconfiguration (meaning without
|
||||||
restarting the X server) was a very messy heuristic and most of the time did
|
restarting the X server) was a very messy heuristic and most of the time did
|
||||||
|
@ -27,29 +28,30 @@ Xinerama offers (just a list of screen resolutions, no identifiers for the
|
||||||
screens or any additional information). Xinerama simply was not designed
|
screens or any additional information). Xinerama simply was not designed
|
||||||
for dynamic configuration.
|
for dynamic configuration.
|
||||||
|
|
||||||
So, RandR came up as a more powerful alternative (RandR 1.2 to be specific).
|
So RandR came along, as a more powerful alternative (RandR 1.2 to be specific).
|
||||||
It offers all of Xinerama’s possibilities and lots more. Using the RandR API
|
It offers all of Xinerama’s possibilities and lots more. Using the RandR API
|
||||||
made our code much more robust and clean. Also, you can now reliably assign
|
made our code much more robust and clean. Also, you can now reliably assign
|
||||||
workspaces to output names instead of some rather unreliable screen identifier
|
workspaces to output names instead of some rather unreliable screen identifier
|
||||||
(position inside the list of screens, which could change, and so on…).
|
(position inside the list of screens, which could change, and so on…).
|
||||||
|
|
||||||
As RandR is around for about three years, it seemed like a very good idea to
|
As RandR has been around for about three years as of this writing, it seemed
|
||||||
us and it still is a very good one. What we did not expect, however, was the
|
like a very good idea to us, and it still is a very good one. What we did not
|
||||||
nVidia binary driver. It still does not support RandR (as of March 2010), even
|
expect, however, was the nVidia binary driver. It still does not support RandR
|
||||||
though nVidia announced that it will support RandR eventually. What does this
|
(as of March 2010), even though nVidia has announced that it will support RandR
|
||||||
mean for you, if you are stuck with the binary driver for some reason (say
|
eventually. What does this mean for you, if you are stuck with the binary
|
||||||
the free drivers don’t work with your card)? First of all, you are stuck with
|
driver for some reason (say the free drivers don’t work with your card)? First
|
||||||
TwinView and cannot use +xrandr+. While this ruins the user experience, the
|
of all, you are stuck with TwinView and cannot use +xrandr+. While this ruins
|
||||||
more grave problem is that the nVidia driver not only does not support dynamic
|
the user experience, the more grave problem is that the nVidia driver not only
|
||||||
configuration using RandR, it also does not even expose correct multi-monitor
|
does not support dynamic configuration using RandR, it also does not expose
|
||||||
information via the RandR API. So, in some setups, i3 will not find any
|
correct multi-monitor information via the RandR API. So, in some setups, i3
|
||||||
screens, in others it will find one large screen which actually contains both
|
will not find any screens; in others, it will find one large screen which
|
||||||
of your physical screens (but it will not know that these are two screens).
|
actually contains both of your physical screens (but it will not know that
|
||||||
|
these are two screens).
|
||||||
|
|
||||||
For this very reason, we decided to implement the following workaround: As
|
For this very reason, we decided to implement the following workaround: As
|
||||||
long as the nVidia driver does not support RandR, an option called
|
long as the nVidia driver does not support RandR, an option called
|
||||||
+--force-xinerama+ is available in i3. This option gets the list of screens
|
+--force-xinerama+ is available in i3. This option gets the list of screens
|
||||||
*once* when starting and never updates it. As the nVidia driver cannot do
|
*once* when starting, and never updates it. As the nVidia driver cannot do
|
||||||
dynamic configuration anyways, this is not a big deal.
|
dynamic configuration anyways, this is not a big deal.
|
||||||
|
|
||||||
== See also
|
== See also
|
||||||
|
|
183
docs/userguide
183
docs/userguide
|
@ -21,8 +21,8 @@ image:keyboard-layer1.png["Keys to use with Mod1 (alt)",width=600,link="keyboard
|
||||||
image:keyboard-layer2.png["Keys to use with Shift+Mod1",width=600,link="keyboard-layer2.png"]
|
image:keyboard-layer2.png["Keys to use with Shift+Mod1",width=600,link="keyboard-layer2.png"]
|
||||||
|
|
||||||
As i3 uses keycodes in the default configuration, it does not matter which
|
As i3 uses keycodes in the default configuration, it does not matter which
|
||||||
keyboard layout you actually use. The key positions are what matters (of course you can
|
keyboard layout you actually use. The key positions are what matters (of course
|
||||||
also use keysymbols, see below).
|
you can also use keysymbols, see below).
|
||||||
|
|
||||||
The red keys are the modifiers you need to press (by default), the blue keys
|
The red keys are the modifiers you need to press (by default), the blue keys
|
||||||
are your homerow.
|
are your homerow.
|
||||||
|
@ -40,7 +40,8 @@ image:single_terminal.png[Single terminal]
|
||||||
|
|
||||||
It is important to keep in mind that i3 uses a table to manage your windows. At
|
It is important to keep in mind that i3 uses a table to manage your windows. At
|
||||||
the moment, you have exactly one column and one row which leaves you with one
|
the moment, you have exactly one column and one row which leaves you with one
|
||||||
cell. In this cell there is a container which is where your new terminal is opened.
|
cell. In this cell there is a container, which is where your new terminal is
|
||||||
|
opened.
|
||||||
|
|
||||||
If you now open another terminal, you still have only one cell. However, the
|
If you now open another terminal, you still have only one cell. However, the
|
||||||
container in that cell holds both of your terminals. So, a container is just a
|
container in that cell holds both of your terminals. So, a container is just a
|
||||||
|
@ -52,12 +53,12 @@ image:two_terminals.png[Two terminals]
|
||||||
To move the focus between the two terminals, you use the direction keys which
|
To move the focus between the two terminals, you use the direction keys which
|
||||||
you may know from the editor +vi+. However, in i3, your homerow is used for
|
you may know from the editor +vi+. However, in i3, your homerow is used for
|
||||||
these keys (in +vi+, the keys are shifted to the left by one for compatibility
|
these keys (in +vi+, the keys are shifted to the left by one for compatibility
|
||||||
with most keyboard layouts). Therefore, +Mod1+J+ is left, +Mod1+K+ is down, +Mod1+L+
|
with most keyboard layouts). Therefore, +Mod1+J+ is left, +Mod1+K+ is down,
|
||||||
is up and `Mod1+;` is right. So, to switch between the terminals, use +Mod1+K+ or
|
+Mod1+L+ is up and `Mod1+;` is right. So, to switch between the terminals,
|
||||||
+Mod1+L+.
|
use +Mod1+K+ or +Mod1+L+.
|
||||||
|
|
||||||
To create a new row/column (and a new cell), you can simply move a terminal (or
|
To create a new row/column (and a new cell), you can simply move a terminal (or
|
||||||
any other window) to the direction you want to expand your table. So, let’s
|
any other window) in the direction you want to expand your table. So, let’s
|
||||||
expand the table to the right by pressing `Mod1+Shift+;`.
|
expand the table to the right by pressing `Mod1+Shift+;`.
|
||||||
|
|
||||||
image:two_columns.png[Two columns]
|
image:two_columns.png[Two columns]
|
||||||
|
@ -118,8 +119,8 @@ another workspace, press +Mod1+num+ where +num+ is the number of the workspace
|
||||||
you want to use. If the workspace does not exist yet, it will be created.
|
you want to use. If the workspace does not exist yet, it will be created.
|
||||||
|
|
||||||
A common paradigm is to put the web browser on one workspace, communication
|
A common paradigm is to put the web browser on one workspace, communication
|
||||||
applications (+mutt+, +irssi+, ...) on another one and the ones with which you
|
applications (+mutt+, +irssi+, ...) on another one, and the ones with which you
|
||||||
work on the third one. Of course, there is no need to follow this approach.
|
work, on the third one. Of course, there is no need to follow this approach.
|
||||||
|
|
||||||
If you have multiple screens, a workspace will be created on each screen at
|
If you have multiple screens, a workspace will be created on each screen at
|
||||||
startup. If you open a new workspace, it will be bound to the screen you
|
startup. If you open a new workspace, it will be bound to the screen you
|
||||||
|
@ -135,10 +136,10 @@ it does not yet exist.
|
||||||
|
|
||||||
=== Resizing columns/rows
|
=== Resizing columns/rows
|
||||||
|
|
||||||
To resize columns or rows just grab the border between the two columns/rows
|
To resize columns or rows, just grab the border between the two columns/rows
|
||||||
and move it to the wanted size. Please keep in mind that each cell of the table
|
and move it to the wanted size. Please keep in mind that each cell of the table
|
||||||
holds a +container+ and thus you cannot horizontally resize single windows. If
|
holds a +container+ and thus you cannot horizontally resize single windows. If
|
||||||
you need applications with different horizontal sizes place them in seperate
|
you need applications with different horizontal sizes, place them in seperate
|
||||||
cells one above the other.
|
cells one above the other.
|
||||||
|
|
||||||
See <<resizingconfig>> for how to configure i3 to be able to resize
|
See <<resizingconfig>> for how to configure i3 to be able to resize
|
||||||
|
@ -146,7 +147,7 @@ columns/rows with your keyboard.
|
||||||
|
|
||||||
=== Restarting i3 inplace
|
=== Restarting i3 inplace
|
||||||
|
|
||||||
To restart i3 inplace (and thus get into a clean state if there is a bug or
|
To restart i3 inplace (and thus get into a clean state if there is a bug, or
|
||||||
to upgrade to a newer version of i3) you can use +Mod1+Shift+r+. Be aware,
|
to upgrade to a newer version of i3) you can use +Mod1+Shift+r+. Be aware,
|
||||||
though, that this kills your current layout and all the windows you have opened
|
though, that this kills your current layout and all the windows you have opened
|
||||||
will be put in a default container in only one cell. Saving layouts will be
|
will be put in a default container in only one cell. Saving layouts will be
|
||||||
|
@ -173,7 +174,7 @@ by pressing +Mod1+Control+k+ (or snap container 2 rightwards).
|
||||||
Floating mode is the opposite of tiling mode. The position and size of a window
|
Floating mode is the opposite of tiling mode. The position and size of a window
|
||||||
are not managed by i3, but by you. Using this mode violates the tiling
|
are not managed by i3, but by you. Using this mode violates the tiling
|
||||||
paradigm but can be useful for some corner cases like "Save as" dialog
|
paradigm but can be useful for some corner cases like "Save as" dialog
|
||||||
windows or toolbar windows (GIMP or similar).
|
windows, or toolbar windows (GIMP or similar).
|
||||||
|
|
||||||
You can enable floating mode for a window by pressing +Mod1+Shift+Space+. By
|
You can enable floating mode for a window by pressing +Mod1+Shift+Space+. By
|
||||||
dragging the window’s titlebar with your mouse you can move the window
|
dragging the window’s titlebar with your mouse you can move the window
|
||||||
|
@ -235,18 +236,19 @@ A keyboard binding makes i3 execute a command (see below) upon pressing a
|
||||||
specific key. i3 allows you to bind either on keycodes or on keysyms (you can
|
specific key. i3 allows you to bind either on keycodes or on keysyms (you can
|
||||||
also mix your bindings, though i3 will not protect you from overlapping ones).
|
also mix your bindings, though i3 will not protect you from overlapping ones).
|
||||||
|
|
||||||
* A keysym (key symbol) is a description for a specific symbol, like "a" or "b",
|
* A keysym (key symbol) is a description for a specific symbol, like "a"
|
||||||
but also more strange ones like "underscore" instead of "_". These are the ones
|
or "b", but also more strange ones like "underscore" instead of "_". These
|
||||||
you use in Xmodmap to remap your keys. To get the current mapping of your
|
are the ones you use in Xmodmap to remap your keys. To get the current
|
||||||
keys, use +xmodmap -pke+.
|
mapping of your keys, use +xmodmap -pke+.
|
||||||
|
|
||||||
* Keycodes do not need to have a symbol assigned (handy for some hotkeys
|
* Keycodes do not need to have a symbol assigned (handy for some hotkeys
|
||||||
on some notebooks) and they will not change their meaning as you switch to a
|
on some notebooks) and they will not change their meaning as you switch to a
|
||||||
different keyboard layout (when using +xmodmap+).
|
different keyboard layout (when using +xmodmap+).
|
||||||
|
|
||||||
My recommendation is: If you often switch keyboard layouts but you want to keep
|
My recommendation is: If you often switch keyboard layouts but you want to keep
|
||||||
your bindings in the same physical location on the keyboard use keycodes. If you
|
your bindings in the same physical location on the keyboard, use keycodes.
|
||||||
don’t switch layouts and want a clean and simple config file, use keysyms.
|
If you don’t switch layouts, and want a clean and simple config file, use
|
||||||
|
keysyms.
|
||||||
|
|
||||||
*Syntax*:
|
*Syntax*:
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
@ -287,9 +289,9 @@ 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
|
you can press Mod1, click into a window using your left mouse button, and drag
|
||||||
it to the position you want.
|
it to the position you want.
|
||||||
|
|
||||||
When holding the floating modifier, you can resize a floating window by pressing
|
When holding the floating modifier, you can resize a floating window by
|
||||||
the right mouse button on it and moving around while holding it. If you hold the
|
pressing the right mouse button on it and moving around while holding it. If
|
||||||
shift button as well, the resize will be proportional.
|
you hold the shift button as well, the resize will be proportional.
|
||||||
|
|
||||||
*Syntax*:
|
*Syntax*:
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
@ -359,13 +361,13 @@ configuration file and run it before starting i3 (for example in your
|
||||||
|
|
||||||
[[assign_workspace]]
|
[[assign_workspace]]
|
||||||
|
|
||||||
It is recommended that you match on window classes whereever possible because
|
It is recommended that you match on window classes wherever possible because
|
||||||
some applications first create their window and then worry about setting the
|
some applications first create their window, and then worry about setting the
|
||||||
correct title. Firefox with Vimperator comes to mind. The window starts up
|
correct title. Firefox with Vimperator comes to mind. The window starts up
|
||||||
being named Firefox and only when Vimperator is loaded the title changes. As
|
being named Firefox, and only when Vimperator is loaded does the title change.
|
||||||
i3 will get the title as soon as the application maps the window (mapping means
|
As i3 will get the title as soon as the application maps the window (mapping
|
||||||
actually displaying it on the screen), you’d need to have to match on Firefox
|
means actually displaying it on the screen), you’d need to have to match on
|
||||||
in this case.
|
'Firefox' in this case.
|
||||||
|
|
||||||
You can prefix or suffix workspaces with a `~` to specify that matching clients
|
You can prefix or suffix workspaces with a `~` to specify that matching clients
|
||||||
should be put into floating mode. If you specify only a `~`, the client will
|
should be put into floating mode. If you specify only a `~`, the client will
|
||||||
|
@ -389,11 +391,11 @@ assign "xv/MPlayer" → ~
|
||||||
Note that the arrow is not required, it just looks good :-). If you decide to
|
Note that 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.
|
use it, it has to be a UTF-8 encoded arrow, not "->" or something like that.
|
||||||
|
|
||||||
=== Automatically starting applications on startup
|
=== Automatically starting applications on i3 startup
|
||||||
|
|
||||||
By using the +exec+ keyword outside a keybinding, you can configure which
|
By using the +exec+ keyword outside a keybinding, you can configure which
|
||||||
commands will be performed by i3 on initial startup (not when restarting inplace
|
commands will be performed by i3 on initial startup (not when restarting i3
|
||||||
however). These commands will be run in order.
|
in-place however). These commands will be run in order.
|
||||||
|
|
||||||
*Syntax*:
|
*Syntax*:
|
||||||
------------
|
------------
|
||||||
|
@ -420,7 +422,7 @@ the second screen and so on).
|
||||||
workspace <number> output <output>
|
workspace <number> output <output>
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
|
||||||
The output is the name of the RandR output you attach your screen to. On a
|
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
|
laptop, you might have VGA1 and LVDS1 as output names. You can see the
|
||||||
available outputs by running +xrandr --current+.
|
available outputs by running +xrandr --current+.
|
||||||
|
|
||||||
|
@ -441,7 +443,7 @@ workspace <number> <name>
|
||||||
workspace <number> output <output> name
|
workspace <number> output <output> name
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
For more details about the output-part of this command, see above.
|
For more details about the 'output' part of this command, see above.
|
||||||
|
|
||||||
*Examples*:
|
*Examples*:
|
||||||
--------------------------
|
--------------------------
|
||||||
|
@ -486,15 +488,15 @@ Colors are in HTML hex format (#rrggbb), see the following example:
|
||||||
client.focused #2F343A #900000 #FFFFFF
|
client.focused #2F343A #900000 #FFFFFF
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
|
|
||||||
Note that for the window decorations the color around the child window is the
|
Note that for the window decorations, the color around the child window is the
|
||||||
background color and the border color is only the two thin lines at the top of
|
background color, and the border color is only the two thin lines at the top of
|
||||||
the window.
|
the window.
|
||||||
|
|
||||||
=== Interprocess communication
|
=== Interprocess communication
|
||||||
|
|
||||||
i3 uses unix sockets to provide an IPC interface. This allows third-party
|
i3 uses unix sockets to provide an IPC interface. This allows third-party
|
||||||
programs to get information like the current workspaces to display a workspace
|
programs to get information from i3, such as the current workspaces
|
||||||
bar, and to control i3.
|
(to display a workspace bar), and to control i3.
|
||||||
|
|
||||||
To enable it, you have to configure a path where the unix socket will be
|
To enable it, you have to configure a path where the unix socket will be
|
||||||
stored. The default path is +/tmp/i3-ipc.sock+.
|
stored. The default path is +/tmp/i3-ipc.sock+.
|
||||||
|
@ -504,14 +506,14 @@ stored. The default path is +/tmp/i3-ipc.sock+.
|
||||||
ipc-socket /tmp/i3-ipc.sock
|
ipc-socket /tmp/i3-ipc.sock
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
You can then use the +i3-msg+ application to perform any command listed in the next
|
You can then use the +i3-msg+ application to perform any command listed in
|
||||||
section.
|
the next section.
|
||||||
|
|
||||||
=== Disable focus follows mouse
|
=== Disable focus follows mouse
|
||||||
|
|
||||||
If you have a setup where your mouse usually is in your way (like a touchpad
|
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
|
on your laptop which you do not want to disable completely), you might want
|
||||||
to disable focus follows mouse and control focus only by using your keyboard.
|
to disable 'focus follows mouse' and control focus only by using your keyboard.
|
||||||
The mouse will still be useful inside the currently active window (for example
|
The mouse will still be useful inside the currently active window (for example
|
||||||
to click on links in your browser window).
|
to click on links in your browser window).
|
||||||
|
|
||||||
|
@ -550,13 +552,13 @@ bindsym Mod1+Shift+f fg
|
||||||
bindsym Mod1+t t
|
bindsym Mod1+t t
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
=== Focussing/Moving/Snapping clients/containers/screens
|
=== Focusing/Moving/Snapping clients/containers/screens
|
||||||
|
|
||||||
To change the focus, use one of the +h+, +j+, +k+ and +l+ commands, meaning
|
To change the focus, use one of the +h+, +j+, +k+ and +l+ commands, meaning
|
||||||
left, down, up, right (respectively). To focus a container, prefix it with +wc+,
|
left, down, up, right (respectively). To focus a container, prefix it with
|
||||||
to focus a screen, prefix it with +ws+.
|
+wc+. To focus a screen, prefix it with +ws+.
|
||||||
|
|
||||||
The same principle applies for moving and snapping, just prefix the command
|
The same principle applies for moving and snapping: just prefix the command
|
||||||
with +m+ when moving and with +s+ when snapping:
|
with +m+ when moving and with +s+ when snapping:
|
||||||
|
|
||||||
*Examples*:
|
*Examples*:
|
||||||
|
@ -590,9 +592,9 @@ To change to a specific workspace, the command is just the number of the
|
||||||
workspace, e.g. +1+ or +3+. To move the current client to a specific workspace,
|
workspace, e.g. +1+ or +3+. To move the current client to a specific workspace,
|
||||||
prefix the number with an +m+.
|
prefix the number with an +m+.
|
||||||
|
|
||||||
You can also switch to the next and previous workspace with the
|
You can also switch to the next and previous workspace with the commands +nw+
|
||||||
commands +nw+ and +pw+, which is handy, for example, if you have workspace
|
and +pw+, which is handy, for example, if you have workspace 1, 3, 4 and 9 and
|
||||||
1, 3, 4 and 9 and you want to cycle through them with a single key combination.
|
you want to cycle through them with a single key combination.
|
||||||
|
|
||||||
*Examples*:
|
*Examples*:
|
||||||
-------------------------
|
-------------------------
|
||||||
|
@ -645,11 +647,11 @@ bindsym Mod1+r mode resize
|
||||||
|
|
||||||
=== Jumping to specific windows
|
=== Jumping to specific windows
|
||||||
|
|
||||||
Often when in a multi-monitor environment, you want to quickly jump to a specific
|
Often when in a multi-monitor environment, you want to quickly jump to a
|
||||||
window. For example while working on workspace 3 you may want to jump to
|
specific window. For example, while working on workspace 3 you may want to
|
||||||
your mailclient to mail your boss that you’ve achieved some important goal. Instead
|
jump to your mail client to email your boss that you’ve achieved some
|
||||||
of figuring out how to navigate to your mailclient, it would be more convenient to
|
important goal. Instead of figuring out how to navigate to your mailclient,
|
||||||
have a shortcut.
|
it would be more convenient to have a shortcut.
|
||||||
|
|
||||||
*Syntax*:
|
*Syntax*:
|
||||||
----------------------------------------------------
|
----------------------------------------------------
|
||||||
|
@ -657,8 +659,9 @@ jump ["]window class[/window title]["]
|
||||||
jump workspace [ column row ]
|
jump workspace [ column row ]
|
||||||
----------------------------------------------------
|
----------------------------------------------------
|
||||||
|
|
||||||
You can either use the same matching algorithm as in the +assign+ command (see above)
|
You can either use the same matching algorithm as in the +assign+ command
|
||||||
or you can specify the position of the client if you always use the same layout.
|
(see above) or you can specify the position of the client if you always use
|
||||||
|
the same layout.
|
||||||
|
|
||||||
*Examples*:
|
*Examples*:
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
|
@ -673,9 +676,9 @@ bindsym Mod1+a jump "urxvt/VIM"
|
||||||
This feature is like the jump feature: It allows you to directly jump to a
|
This feature is like the jump feature: It allows you to directly jump to a
|
||||||
specific window (this means switching to the appropriate workspace and setting
|
specific window (this means switching to the appropriate workspace and setting
|
||||||
focus to the windows). However, you can directly mark a specific window with
|
focus to the windows). However, you can directly mark a specific window with
|
||||||
an arbitrary label and use it afterwards. You do not need to ensure
|
an arbitrary label and use it afterwards. You do not need to ensure that your
|
||||||
that your windows have unique classes or titles, and you do not need to change
|
windows have unique classes or titles, and you do not need to change your
|
||||||
your configuration file.
|
configuration file.
|
||||||
|
|
||||||
As the command needs to include the label with which you want to mark the
|
As the command needs to include the label with which you want to mark the
|
||||||
window, you cannot simply bind it to a key. +i3-input+ is a tool created
|
window, you cannot simply bind it to a key. +i3-input+ is a tool created
|
||||||
|
@ -702,16 +705,16 @@ seperate bindings for a specific set of labels and then only use those labels.
|
||||||
|
|
||||||
=== Traveling the focus stack
|
=== Traveling the focus stack
|
||||||
|
|
||||||
This mechanism can be thought of as the opposite of the +jump+ command. It travels
|
This mechanism can be thought of as the opposite of the +jump+ command.
|
||||||
the focus stack and jumps to the window which had focus previously.
|
It travels the focus stack and jumps to the window which had focus previously.
|
||||||
|
|
||||||
*Syntax*:
|
*Syntax*:
|
||||||
--------------
|
--------------
|
||||||
focus [number] | floating | tiling | ft
|
focus [number] | floating | tiling | ft
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
Where +number+ by default is 1 meaning that the next client in the focus stack will
|
Where +number+ by default is 1 meaning that the next client in the focus stack
|
||||||
be selected.
|
will be selected.
|
||||||
|
|
||||||
The special values have the following meaning:
|
The special values have the following meaning:
|
||||||
|
|
||||||
|
@ -720,8 +723,8 @@ floating::
|
||||||
tiling::
|
tiling::
|
||||||
The next tiling window is selected.
|
The next tiling window is selected.
|
||||||
ft::
|
ft::
|
||||||
If the current window is floating, the next tiling window will be selected
|
If the current window is floating, the next tiling window will be
|
||||||
and vice-versa.
|
selected; and vice-versa.
|
||||||
|
|
||||||
=== Changing border style
|
=== Changing border style
|
||||||
|
|
||||||
|
@ -772,9 +775,9 @@ You can make i3 reload its configuration file with +reload+. You can also
|
||||||
restart i3 inplace with the +restart+ command to get it out of some weird state
|
restart i3 inplace with the +restart+ command to get it out of some weird state
|
||||||
(if that should ever happen) or to perform an upgrade without having to restart
|
(if that should ever happen) or to perform an upgrade without having to restart
|
||||||
your X session. However, your layout is not preserved at the moment, meaning
|
your X session. However, your layout is not preserved at the moment, meaning
|
||||||
that all open windows will be in a single container in default layout. To exit
|
that all open windows will end up in a single container in default layout
|
||||||
i3 properly, you can use the +exit+ command, however you don’t need to (e.g.,
|
after the restart. To exit i3 properly, you can use the +exit+ command,
|
||||||
simply killing your X session is fine as well).
|
however you don’t need to (simply killing your X session is fine as well).
|
||||||
|
|
||||||
*Examples*:
|
*Examples*:
|
||||||
----------------------------
|
----------------------------
|
||||||
|
@ -791,33 +794,33 @@ As you can see in the goal list on the website, i3 was specifically developed
|
||||||
with support for multiple monitors in mind. This section will explain how to
|
with support for multiple monitors in mind. This section will explain how to
|
||||||
handle multiple monitors.
|
handle multiple monitors.
|
||||||
|
|
||||||
When you have only one monitor things are simple. You usually start with
|
When you have only one monitor, things are simple. You usually start with
|
||||||
workspace 1 on your monitor and open new ones as you need them.
|
workspace 1 on your monitor and open new ones as you need them.
|
||||||
|
|
||||||
When you have more than one monitor, each monitor will get an initial
|
When you have more than one monitor, each monitor will get an initial
|
||||||
workspace. The first monitor gets 1, the second gets 2 and a possible third would
|
workspace. The first monitor gets 1, the second gets 2 and a possible third
|
||||||
get 3. When you switch to a workspace on a different monitor, i3 will switch
|
would get 3. When you switch to a workspace on a different monitor, i3 will
|
||||||
to that monitor and then switch to the workspace. This way, you don’t need
|
switch to that monitor and then switch to the workspace. This way, you don’t
|
||||||
shortcuts to switch to a specific monitor, and you don’t need to remember where
|
need shortcuts to switch to a specific monitor, and you don’t need to remember
|
||||||
you put which workspace. New workspaces will be opened on the currently active
|
where you put which workspace. New workspaces will be opened on the currently
|
||||||
monitor. It is not possible to have a monitor without a workspace.
|
active monitor. It is not possible to have a monitor without a workspace.
|
||||||
|
|
||||||
The idea of making workspaces global is based on the observation that most users
|
The idea of making workspaces global is based on the observation that most
|
||||||
have a very limited set of workspaces on their additional monitors. They are
|
users have a very limited set of workspaces on their additional monitors.
|
||||||
often used for a specific task (browser, shell) or for monitoring several
|
They are often used for a specific task (browser, shell) or for monitoring
|
||||||
things (mail, IRC, syslog, …). Thus, using one workspace on one monitor and
|
several things (mail, IRC, syslog, …). Thus, using one workspace on one monitor
|
||||||
"the rest" on the other monitors often makes sense. However, as you can
|
and "the rest" on the other monitors often makes sense. However, as you can
|
||||||
create an unlimited number of workspaces in i3 and tie them to specific screens,
|
create an unlimited number of workspaces in i3 and tie them to specific
|
||||||
you can have the "traditional" approach of having X workspaces per screen by
|
screens, you can have the "traditional" approach of having X workspaces per
|
||||||
changing your configuration (using modes, for example).
|
screen by changing your configuration (using modes, for example).
|
||||||
|
|
||||||
=== Configuring your monitors
|
=== Configuring your monitors
|
||||||
|
|
||||||
To help you get going if you have never used multiple monitors before, here is a
|
To help you get going if you have never used multiple monitors before, here is
|
||||||
short overview of the xrandr options which will probably be of interest to you.
|
a short overview of the xrandr options which will probably be of interest to
|
||||||
It is always useful to get an overview of the current screen configuration.
|
you. It is always useful to get an overview of the current screen configuration.
|
||||||
Just run "xrandr" and you will get an output like the following:
|
Just run "xrandr" and you will get an output like the following:
|
||||||
--------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
$ xrandr
|
$ xrandr
|
||||||
Screen 0: minimum 320 x 200, current 1280 x 800, maximum 8192 x 8192
|
Screen 0: minimum 320 x 200, current 1280 x 800, maximum 8192 x 8192
|
||||||
VGA1 disconnected (normal left inverted right x axis y axis)
|
VGA1 disconnected (normal left inverted right x axis y axis)
|
||||||
|
@ -837,9 +840,9 @@ course, it is the internal flat panel) but +VGA1+ is not. If you have a monitor
|
||||||
connected to one of the ports but xrandr still says "disconnected", you should
|
connected to one of the ports but xrandr still says "disconnected", you should
|
||||||
check your cable, monitor or graphics driver.
|
check your cable, monitor or graphics driver.
|
||||||
|
|
||||||
The maximum resolution you can see at the end of the first line
|
The maximum resolution you can see at the end of the first line is the maximum
|
||||||
is the maximum combined resolution of your monitors. By default, it is usually
|
combined resolution of your monitors. By default, it is usually too low and has
|
||||||
too low and has to be increased by editing +/etc/X11/xorg.conf+.
|
to be increased by editing +/etc/X11/xorg.conf+.
|
||||||
|
|
||||||
So, say you connected VGA1 and want to use it as an additional screen:
|
So, say you connected VGA1 and want to use it as an additional screen:
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
|
@ -848,7 +851,7 @@ xrandr --output VGA1 --auto --left-of LVDS1
|
||||||
This command makes xrandr try to find the native resolution of the device
|
This command makes xrandr try to find the native resolution of the device
|
||||||
connected to +VGA1+ and configures it to the left of your internal flat panel.
|
connected to +VGA1+ and configures it to the left of your internal flat panel.
|
||||||
When running "xrandr" again, the output looks like this:
|
When running "xrandr" again, the output looks like this:
|
||||||
-----------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
$ xrandr
|
$ xrandr
|
||||||
Screen 0: minimum 320 x 200, current 2560 x 1024, maximum 8192 x 8192
|
Screen 0: minimum 320 x 200, current 2560 x 1024, maximum 8192 x 8192
|
||||||
VGA1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
|
VGA1 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 338mm x 270mm
|
||||||
|
@ -869,7 +872,7 @@ LVDS1 connected 1280x800+1280+0 (normal left inverted right x axis y axis) 261mm
|
||||||
720x400 85.0
|
720x400 85.0
|
||||||
640x400 85.1
|
640x400 85.1
|
||||||
640x350 85.1
|
640x350 85.1
|
||||||
-----------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Please note that i3 uses exactly the same API as xrandr does, so it will see
|
Please note that i3 uses exactly the same API as xrandr does, so it will see
|
||||||
only what you can see in xrandr.
|
only what you can see in xrandr.
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ bind Mod1+36 exec /usr/bin/urxvt
|
||||||
bind Mod1+Shift+24 kill
|
bind Mod1+Shift+24 kill
|
||||||
|
|
||||||
# Mod1+v starts dmenu and launches the selected application
|
# Mod1+v starts dmenu and launches the selected application
|
||||||
# for now, we don’t have an own launcher
|
# for now, we don’t have a launcher of our own.
|
||||||
bind Mod1+55 exec /usr/bin/dmenu_run
|
bind Mod1+55 exec /usr/bin/dmenu_run
|
||||||
|
|
||||||
# Mod1+Shift+e exits i3
|
# Mod1+Shift+e exits i3
|
||||||
|
|
13
i3.welcome
13
i3.welcome
|
@ -1,6 +1,6 @@
|
||||||
1.) Welcome to i3!
|
1.) Welcome to i3!
|
||||||
|
|
||||||
This message provides you with an overview of the default keybindings to use i3.
|
This message provides an overview of the default keybindings to use i3.
|
||||||
Please also make sure to have a look at the man page and the user's guide:
|
Please also make sure to have a look at the man page and the user's guide:
|
||||||
http://i3.zekjur.net/docs/userguide.html
|
http://i3.zekjur.net/docs/userguide.html
|
||||||
|
|
||||||
|
@ -8,7 +8,8 @@ http://i3.zekjur.net/docs/userguide.html
|
||||||
2.) Configuration Files
|
2.) Configuration Files
|
||||||
|
|
||||||
/etc/i3/config is the default configuration. It is recommended to copy it and
|
/etc/i3/config is the default configuration. It is recommended to copy it and
|
||||||
afterwards edit it to suit your needs (you can especially disable this message):
|
afterwards edit it to suit your needs (in particular, you may want to disable
|
||||||
|
this message):
|
||||||
|
|
||||||
cp /etc/i3/config ~/.i3/config
|
cp /etc/i3/config ~/.i3/config
|
||||||
|
|
||||||
|
@ -17,7 +18,7 @@ afterwards edit it to suit your needs (you can especially disable this message):
|
||||||
|
|
||||||
The following explanation is related to the QWERTY layout, but as the default
|
The following explanation is related to the QWERTY layout, but as the default
|
||||||
configuration uses keycodes instead of keysymbols for binding, you still have
|
configuration uses keycodes instead of keysymbols for binding, you still have
|
||||||
to press the same keys, regardless of your keyboard layout.
|
to press the same physical keys, regardless of your keyboard layout.
|
||||||
|
|
||||||
The Mod1 key is usually bound to the "Alt" key on your keyboard.
|
The Mod1 key is usually bound to the "Alt" key on your keyboard.
|
||||||
|
|
||||||
|
@ -28,15 +29,15 @@ The directional keys are j(left), k(down), l(up) and ;(right). You can also use
|
||||||
the arrow keys on your keyboard, if you prefer them.
|
the arrow keys on your keyboard, if you prefer them.
|
||||||
|
|
||||||
Mod1+<directional key> moves the focus to the window in the given direction
|
Mod1+<directional key> moves the focus to the window in the given direction
|
||||||
Mod1+Shift+<directional key> moves the window to the given direction,
|
Mod1+Shift+<directional key> moves the window to the given direction
|
||||||
Mod1+<number> opens the corresponding workspace
|
Mod1+<number> opens the corresponding workspace
|
||||||
Mod1+Shift+<number> moves a window to the wished workspace
|
Mod1+Shift+<number> moves a window to the selected workspace
|
||||||
Mod1+h sets the mode of a container to stacking
|
Mod1+h sets the mode of a container to stacking
|
||||||
Mod1+e sets the mode back to default
|
Mod1+e sets the mode back to default
|
||||||
Mod1+f toggles fullscreen mode for the current window
|
Mod1+f toggles fullscreen mode for the current window
|
||||||
Mod1+Shift+Space toggles floating mode for the current window
|
Mod1+Shift+Space toggles floating mode for the current window
|
||||||
Mod1+Shift+q closes a window
|
Mod1+Shift+q closes a window
|
||||||
Mod1+Shift+r restarts i3 in-place (you will lose your layout, though)
|
Mod1+Shift+r restarts i3 in-place (at this time, you will lose your layout)
|
||||||
Mod1+Shift+e exits i3
|
Mod1+Shift+e exits i3
|
||||||
|
|
||||||
If you have any questions, please don't hesitate to ask!
|
If you have any questions, please don't hesitate to ask!
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
i3-input(1)
|
i3-input(1)
|
||||||
=========
|
=========
|
||||||
|
|
||||||
Michael Stapelberg <michael+i3@stapelberg.de>
|
Michael Stapelberg <michael+i3@stapelberg.de>
|
||||||
v3.delta, November 2009
|
v3.delta, November 2009
|
||||||
|
|
||||||
== NAME
|
== NAME
|
||||||
|
|
||||||
i3-input - interactively take a command for i3
|
i3-input - interactively take a command for i3 window manager
|
||||||
|
|
||||||
== SYNOPSIS
|
== SYNOPSIS
|
||||||
|
|
||||||
|
@ -13,8 +14,9 @@ i3-input [-s <socket>] [-p <prefix>] [-l <limit>] [-P <prompt>] [-v]
|
||||||
|
|
||||||
== DESCRIPTION
|
== DESCRIPTION
|
||||||
|
|
||||||
i3-input is a tool to take commands (or parts of a command) and then send it
|
i3-input is a tool to take commands (or parts of a command) composed by
|
||||||
to i3. This is useful for example for the mark/goto command.
|
the user, and send it/them to i3. This is useful, for example, for the
|
||||||
|
mark/goto command.
|
||||||
|
|
||||||
== EXAMPLE
|
== EXAMPLE
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
i3-msg(1)
|
i3-msg(1)
|
||||||
=========
|
=========
|
||||||
|
|
||||||
Michael Stapelberg <michael+i3@stapelberg.de>
|
Michael Stapelberg <michael+i3@stapelberg.de>
|
||||||
v3.delta, November 2009
|
v3.delta, November 2009
|
||||||
|
|
||||||
== NAME
|
== NAME
|
||||||
|
|
||||||
i3-msg - send messages to i3
|
i3-msg - send messages to i3 window manager
|
||||||
|
|
||||||
== SYNOPSIS
|
== SYNOPSIS
|
||||||
|
|
||||||
|
|
14
man/i3.man
14
man/i3.man
|
@ -132,7 +132,8 @@ support that, the window will be killed and it depends on the application what
|
||||||
happens.
|
happens.
|
||||||
|
|
||||||
Mod1+Shift+r::
|
Mod1+Shift+r::
|
||||||
Restarts i3 in place (without losing any windows, but the layout).
|
Restarts i3 in place (without losing any windows, but at this time, the layout
|
||||||
|
and placement of windows is not retained).
|
||||||
|
|
||||||
Mod1+Shift+e::
|
Mod1+Shift+e::
|
||||||
Exits i3.
|
Exits i3.
|
||||||
|
@ -283,14 +284,15 @@ exec /usr/bin/i3 >> ~/.i3/logfile
|
||||||
|
|
||||||
== TODO
|
== TODO
|
||||||
|
|
||||||
There is still lot of work to do. Please check our bugtracker for up-to-date information
|
There is still lot of work to do. Please check our bugtracker for up-to-date
|
||||||
about tasks which are still not finished.
|
information about tasks which are still not finished.
|
||||||
|
|
||||||
== SEE ALSO
|
== SEE ALSO
|
||||||
|
|
||||||
You should have a copy of the userguide (featuring nice screenshots/graphics which is why this
|
You should have a copy of the userguide (featuring nice screenshots/graphics
|
||||||
is not integrated into this manpage), the debugging guide and the "how to hack" guide. If you
|
which is why this is not integrated into this manpage), the debugging guide,
|
||||||
are building from source, run +make -C docs+.
|
and the "how to hack" guide. If you are building from source, run:
|
||||||
|
+make -C docs+
|
||||||
|
|
||||||
You can also access these documents online at http://i3.zekjur.net/
|
You can also access these documents online at http://i3.zekjur.net/
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue