2009-02-22 22:22:40 -05:00
|
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
|
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
2009-02-19 12:04:16 -05:00
|
|
|
|
<head>
|
2009-02-22 22:22:40 -05:00
|
|
|
|
<title>i3 - an improved dynamic tiling window manager</title>
|
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
2009-02-19 12:04:16 -05:00
|
|
|
|
<style type="text/css">
|
|
|
|
|
body {
|
|
|
|
|
text-align: justify;
|
|
|
|
|
max-width: 800px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
li {
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
}
|
2009-03-13 20:15:54 -04:00
|
|
|
|
#menu {
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
list-style-type: none;
|
|
|
|
|
}
|
|
|
|
|
#menu li {
|
|
|
|
|
margin-left: 30px;
|
|
|
|
|
margin-right: 30px;
|
|
|
|
|
float: left;
|
|
|
|
|
}
|
|
|
|
|
|
2009-02-19 12:04:16 -05:00
|
|
|
|
</style>
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
|
|
|
|
|
<h1>i3 - an improved dynamic tiling window manager</h1>
|
|
|
|
|
|
2009-03-13 20:15:54 -04:00
|
|
|
|
<ul id="menu">
|
|
|
|
|
<li>
|
|
|
|
|
<a href="/">Goals</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<a href="/docs/">Documentation</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<a href="/downloads/">Downloads</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<a href="/contact/">Contact</a>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
2009-02-19 12:04:16 -05:00
|
|
|
|
<p>
|
|
|
|
|
i3 was created because wmii, our favorite window manager at the time, didn’t
|
2009-02-22 22:22:40 -05:00
|
|
|
|
provide some features we wanted (Xinerama done right, for example), had some
|
|
|
|
|
bugs, didn’t progress since quite some time and wasn’t easy to hack at all
|
|
|
|
|
(source code comments/documentation completely lacking). Still, we think the
|
|
|
|
|
wmii developers and contributors did a great job. Thank you for inspiring us
|
|
|
|
|
to create i3.
|
2009-02-19 12:04:16 -05:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-02-23 10:28:48 -05:00
|
|
|
|
Please be aware that i3 is primarily targeted at advanced users and developers.
|
2009-02-19 12:04:16 -05:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<h2>Goals</h2>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Based upon the experiences we made when wanting to hack/fix wmii, we agreed
|
|
|
|
|
upon the following goals for i3:
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<ol>
|
|
|
|
|
<li>
|
|
|
|
|
Write well readable, well <strong>documented</strong> code. Create additional
|
|
|
|
|
documentation on how to extend i3 by explaining its internal workings.
|
2009-02-22 22:22:40 -05:00
|
|
|
|
<br />
|
2009-02-19 12:04:16 -05:00
|
|
|
|
This includes being modifyable by people who do know how to program but who are
|
|
|
|
|
not necessarily familiar with all of X11’s internals. That is, document why
|
|
|
|
|
things happen and when they happen so that the user gets a picture of the whole
|
|
|
|
|
process a Window Manager is responsible of by just reading the source code.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Use xcb as far as possible (it does not provide functions for some features
|
|
|
|
|
yet, like XKB) instead of Xlib. xcb has a much cleaner API and should be faster
|
|
|
|
|
in quite a lot of situations.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Implement Xinerama correctly, that is by assigning each workspace to a
|
|
|
|
|
virtual screen. Especially make sure that attaching and detaching new monitors
|
2009-02-23 10:28:48 -05:00
|
|
|
|
like video projectors works during operation and does the right thing.
|
2009-02-19 12:04:16 -05:00
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Use the metaphor of a table for abstraction. You can create horizontal and
|
|
|
|
|
vertical columns (in wmii, you can only create vertical columns). See the documentation
|
|
|
|
|
for more information on how this works, it really is an important principle in i3.
|
|
|
|
|
(TODO: documentation :-))
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Implement a command mode, like in vim. You can easily combine multiple
|
|
|
|
|
actions (like focusing, moving, snapping) by using the command mode.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Implement XRandR support for flipping monitors.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Do <strong>not</strong> use programs such as autoconf/automake for configuration and
|
|
|
|
|
creating unreadable/broken makefiles. Instead, use a clean makefile which automatically
|
|
|
|
|
enables/disables features for specific platforms. Also, document the dependencies
|
|
|
|
|
properly, so that package maintainers have an easy job packaging i3.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Provide hooks/callbacks for other programs to integrate. Using this mechanism, one
|
|
|
|
|
can easily extend i3 in whatever language, without ever touching the C code. Also,
|
|
|
|
|
to communicate with a running i3 instance, messages can be sent.
|
2009-02-22 22:22:40 -05:00
|
|
|
|
<br />
|
2009-02-19 12:04:16 -05:00
|
|
|
|
This approach should be more lightweight than wmii’s usage of the 9P filesystem.
|
|
|
|
|
Furthermore, core functionality does not depend on a separate program, so that i3
|
|
|
|
|
runs faster, especially when your system is under load.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
Be UTF-8 clean.
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
The usual elitism amongst minimal window managers: Don’t be bloated, don’t be fancy
|
|
|
|
|
(simple borders are the most decoration we want to have), don’t add support for Xft
|
|
|
|
|
and blurred fonts.
|
2009-02-22 22:22:40 -05:00
|
|
|
|
<br />
|
2009-02-19 12:04:16 -05:00
|
|
|
|
However, we do not enforce unnecessary limits such as a maximum amount of source lines
|
|
|
|
|
of code. If it needs to be a bit bigger, it will be.
|
|
|
|
|
</li>
|
|
|
|
|
</ol>
|
|
|
|
|
|
|
|
|
|
<h3>Special Features</h3>
|
|
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
|
<li>
|
|
|
|
|
We can bind on Mode_switch (Alt Gr). Other window managers fail to do that because
|
|
|
|
|
of an X11-bug, which causes the modifier state to not be correctly set in KeyPress-
|
|
|
|
|
events. We use XKB for making sure to get the correct state.
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<h2>Development</h2>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-02-22 22:22:40 -05:00
|
|
|
|
i3 is currently developed at <a href="http://code.stapelberg.de/git/i3" title="cgit">
|
|
|
|
|
http://code.stapelberg.de/git/i3</a>. Checkouts of the master branch are intended to
|
|
|
|
|
be stable and working all the time. Integration of new features happens in a separate branch.
|
2009-02-19 12:04:16 -05:00
|
|
|
|
</p>
|
|
|
|
|
|
2009-02-22 22:22:40 -05:00
|
|
|
|
<h2>License</h2>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
Copyright © 2009, Michael Stapelberg
|
|
|
|
|
All rights reserved.
|
|
|
|
|
|
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
|
|
|
modification, are permitted provided that the following conditions are met:
|
|
|
|
|
|
|
|
|
|
* Redistributions of source code must retain the above copyright
|
|
|
|
|
notice, this list of conditions and the following disclaimer.
|
|
|
|
|
|
|
|
|
|
* Redistributions in binary form must reproduce the above copyright
|
|
|
|
|
notice, this list of conditions and the following disclaimer in the
|
|
|
|
|
documentation and/or other materials provided with the distribution.
|
|
|
|
|
|
|
|
|
|
* Neither the name of Michael Stapelberg nor the
|
|
|
|
|
names of contributors may be used to endorse or promote products
|
|
|
|
|
derived from this software without specific prior written permission.
|
|
|
|
|
|
|
|
|
|
THIS SOFTWARE IS PROVIDED BY Michael Stapelberg ''AS IS'' AND ANY
|
|
|
|
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
|
DISCLAIMED. IN NO EVENT SHALL Michael Stapelberg BE LIABLE FOR ANY
|
|
|
|
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
|
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
|
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
|
|
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
</pre>
|
|
|
|
|
|
2009-02-19 12:04:16 -05:00
|
|
|
|
</body>
|
|
|
|
|
</html>
|