]> git.sur5r.net Git - i3/i3/blob - website/index.html
Update website (menu, links to the documentation, manpage online)
[i3/i3] / website / index.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
4 <head>
5 <title>i3 - an improved dynamic tiling window manager</title>
6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7 <style type="text/css">
8 body {
9         text-align: justify;
10         max-width: 800px;
11 }
12
13 li {
14         margin-bottom: 10px;
15 }
16 #menu {
17         overflow: hidden;
18         list-style-type: none;
19 }
20 #menu li {
21         margin-left: 30px;
22         margin-right: 30px;
23         float: left;
24 }
25
26 </style>
27 </head>
28 <body>
29
30 <h1>i3 - an improved dynamic tiling window manager</h1>
31
32 <ul id="menu">
33   <li>
34     <a href="/">Goals</a>
35   </li>
36   <li>
37     <a href="/docs/">Documentation</a>
38   </li>
39   <li>
40     <a href="/downloads/">Downloads</a>
41   </li>
42   <li>
43     <a href="/contact/">Contact</a>
44   </li>
45 </ul>
46
47 <p>
48   i3 was created because wmii, our favorite window manager at the time, didn’t
49   provide some features we wanted (Xinerama done right, for example), had some
50   bugs, didn’t progress since quite some time and wasn’t easy to hack at all
51   (source code comments/documentation completely lacking). Still, we think the
52   wmii developers and contributors did a great job. Thank you for inspiring us
53   to create i3.
54 </p>
55
56 <p>
57   Please be aware that i3 is primarily targeted at advanced users and developers.
58 </p>
59
60 <h2>Goals</h2>
61
62 <p>
63   Based upon the experiences we made when wanting to hack/fix wmii, we agreed
64   upon the following goals for i3:
65 </p>
66
67 <ol>
68   <li>
69     Write well readable, well <strong>documented</strong> code. Create additional
70     documentation on how to extend i3 by explaining its internal workings.
71     <br />
72     This includes being modifyable by people who do know how to program but who are
73     not necessarily familiar with all of X11’s internals. That is, document why
74     things happen and when they happen so that the user gets a picture of the whole
75     process a Window Manager is responsible of by just reading the source code.
76   </li>
77   <li>
78     Use xcb as far as possible (it does not provide functions for some features
79     yet, like XKB) instead of Xlib. xcb has a much cleaner API and should be faster
80     in quite a lot of situations.
81   </li>
82   <li>
83     Implement Xinerama correctly, that is by assigning each workspace to a
84     virtual screen. Especially make sure that attaching and detaching new monitors
85     like video projectors works during operation and does the right thing.
86   </li>
87   <li>
88     Use the metaphor of a table for abstraction. You can create horizontal and
89     vertical columns (in wmii, you can only create vertical columns). See the documentation
90     for more information on how this works, it really is an important principle in i3.
91     (TODO: documentation :-))
92   </li>
93   <li>
94     Implement a command mode, like in vim. You can easily combine multiple
95     actions (like focusing, moving, snapping) by using the command mode.
96   </li>
97   <li>
98     Implement XRandR support for flipping monitors.
99   </li>
100   <li>
101     Do <strong>not</strong> use programs such as autoconf/automake for configuration and
102     creating unreadable/broken makefiles. Instead, use a clean makefile which automatically
103     enables/disables features for specific platforms. Also, document the dependencies
104     properly, so that package maintainers have an easy job packaging i3.
105   </li>
106   <li>
107     Provide hooks/callbacks for other programs to integrate. Using this mechanism, one
108     can easily extend i3 in whatever language, without ever touching the C code. Also,
109     to communicate with a running i3 instance, messages can be sent.
110     <br />
111     This approach should be more lightweight than wmii’s usage of the 9P filesystem.
112     Furthermore, core functionality does not depend on a separate program, so that i3
113     runs faster, especially when your system is under load.
114   </li>
115   <li>
116     Be UTF-8 clean.
117   </li>
118   <li>
119     The usual elitism amongst minimal window managers: Don’t be bloated, don’t be fancy
120     (simple borders are the most decoration we want to have), don’t add support for Xft
121     and blurred fonts.
122     <br />
123     However, we do not enforce unnecessary limits such as a maximum amount of source lines
124     of code. If it needs to be a bit bigger, it will be.
125   </li>
126 </ol>
127
128 <h3>Special Features</h3>
129
130 <ul>
131   <li>
132     We can bind on Mode_switch (Alt Gr). Other window managers fail to do that because
133     of an X11-bug, which causes the modifier state to not be correctly set in KeyPress-
134     events. We use XKB for making sure to get the correct state.
135   </li>
136 </ul>
137
138 <h2>Development</h2>
139
140 <p>
141   i3 is currently developed at <a href="http://code.stapelberg.de/git/i3" title="cgit">
142   http://code.stapelberg.de/git/i3</a>. Checkouts of the master branch are intended to
143   be stable and working all the time. Integration of new features happens in a separate branch.
144 </p>
145
146 <h2>License</h2>
147
148 <pre>
149 Copyright © 2009, Michael Stapelberg
150 All rights reserved.
151
152 Redistribution and use in source and binary forms, with or without
153 modification, are permitted provided that the following conditions are met:
154
155     * Redistributions of source code must retain the above copyright
156       notice, this list of conditions and the following disclaimer.
157
158     * Redistributions in binary form must reproduce the above copyright
159       notice, this list of conditions and the following disclaimer in the
160       documentation and/or other materials provided with the distribution.
161
162     * Neither the name of Michael Stapelberg nor the
163       names of contributors may be used to endorse or promote products
164       derived from this software without specific prior written permission.
165
166 THIS SOFTWARE IS PROVIDED BY Michael Stapelberg ''AS IS'' AND ANY
167 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
168 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
169 DISCLAIMED. IN NO EVENT SHALL Michael Stapelberg BE LIABLE FOR ANY
170 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
171 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
172 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
173 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
174 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
175 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
176 </pre>
177
178 </body>
179 </html>