docs: merge spelling and grammar fixes by sasha (Thanks!)

This commit is contained in:
Michael Stapelberg 2010-03-21 01:50:10 +01:00
parent 77efb29d9f
commit 234ed6c99b
13 changed files with 215 additions and 193 deletions

17
CMDMODE
View File

@ -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> ]

View File

@ -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)

View File

@ -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

View File

@ -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
@ -14,9 +14,9 @@ debugging and/or need further help, do not hesitate to contact us!
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 log files 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 youre at it, putting each run of i3 in a separate logfile with xsession. While youre 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
@ -24,9 +24,9 @@ exec /usr/bin/i3 >/home/michael/i3/i3log-$(date +'%F-%k-%M-%S') 2>&1
== Enabling core dumps == 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 core dumps, 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):
@ -72,7 +72,7 @@ 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 core dump 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
@ -99,6 +99,6 @@ doubt, please send us rather too much information than too less) and the whole
backtrace (if there was a core dump). 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.

View File

@ -24,8 +24,9 @@ some events which normal clients usually dont 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 clients `_WM_STATE` property, but only the `_WM_STATE_FULLSCREEN` . Handle the clients `_WM_STATE` property, but only the `_WM_STATE_FULLSCREEN`
. Handle the clients `WM_NAME` property . Handle the clients `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 users commands: Change focus, Move windows, Switch workspaces, . React to the users 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
youve ever designed one. Especially col- and rowspan work equally. Below you youve 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"]
|======== |========
@ -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
@ -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 dont fit maybe already implemented, not possible for some some reason, or dont 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.

View File

@ -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 dont need in the IPC API is done which breaks compatibility (we hope that we dont 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

View File

@ -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 Xineramas possibilities and lots more. Using the RandR API It offers all of Xineramas 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 dont work with your card)? First of all, you are stuck with driver for some reason (say the free drivers dont 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

View File

@ -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, lets any other window) in the direction you want to expand your table. So, lets
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 windows titlebar with your mouse you can move the window dragging the windows 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.
dont switch layouts and want a clean and simple config file, use keysyms. If you dont 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), youd need to have to match on Firefox means actually displaying it on the screen), youd 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 youve achieved some important goal. Instead jump to your mail client to email your boss that youve 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 dont 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 dont 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 dont need switch to that monitor and then switch to the workspace. This way, you dont
shortcuts to switch to a specific monitor, and you dont need to remember where need shortcuts to switch to a specific monitor, and you dont 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.

View File

@ -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 dont have an own launcher # for now, we dont 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

View File

@ -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!

View File

@ -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

View File

@ -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

View File

@ -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/