| 1 | FAQ for the Parti window manager |
|---|
| 2 | ================================ |
|---|
| 3 | |
|---|
| 4 | What is Parti? |
|---|
| 5 | -------------- |
|---|
| 6 | |
|---|
| 7 | Parti is a tabbing/tiling (one might say "partitioning") window |
|---|
| 8 | manager. Its goal is to bring this superior window management |
|---|
| 9 | interface to modern, mainstream desktop environments. It is written |
|---|
| 10 | in Python, uses GTK+, has an automated test suite, and is released |
|---|
| 11 | under the GPL. |
|---|
| 12 | |
|---|
| 13 | |
|---|
| 14 | Could you say that again, slower? There are like seven thousand |
|---|
| 15 | window managers out there. What makes Parti special? |
|---|
| 16 | ---------------------------------------------------------------- |
|---|
| 17 | |
|---|
| 18 | Parti is a window manager (WM), i.e., it is a program that provides an |
|---|
| 19 | interface for arranging and switching between all the other programs |
|---|
| 20 | you run on your computer. People generally use exactly one WM at a |
|---|
| 21 | time, like KWin or Metacity or, now, Parti. |
|---|
| 22 | |
|---|
| 23 | There are lots of WMs like KWin or Metacity or Compiz that focus on |
|---|
| 24 | integrating cleanly with modern Unix desktops, and looking good while |
|---|
| 25 | doing it. These WMs all use the traditional "desktop" metaphor where |
|---|
| 26 | applications are like sheets of paper that you can put anywhere you |
|---|
| 27 | want and in whatever arrangement makes sense to you. The problem with |
|---|
| 28 | this is that my real-world desk is a total mess, and the windows on my |
|---|
| 29 | computer desktop are not much better. Until they invent |
|---|
| 30 | self-organizing paper, my real-world desktop is a lost cause, but my |
|---|
| 31 | computer desktop doesn't have to be. Those gigahertz in there could |
|---|
| 32 | be doing all sorts of things to help me keep track of windows and |
|---|
| 33 | arrange them for me. |
|---|
| 34 | |
|---|
| 35 | There are also lots of lesser-known WMs like ion or wmii that focus on |
|---|
| 36 | providing exactly this kind of assistance, by helping you pick from a |
|---|
| 37 | few good layouts (tiled, or tabbed, or one window full-screen, etc.), |
|---|
| 38 | and automatically keeping windows arranged for you. The result is |
|---|
| 39 | vastly more usable, because you stop having to screw around arranging |
|---|
| 40 | windows by hand, the resulting arrangements are actually better, and |
|---|
| 41 | more powerful keyboard control becomes possible. The problem with |
|---|
| 42 | these is that they're visually ugly, their desktop integration is |
|---|
| 43 | poor, and their acceptance by the mainstream community is nil. |
|---|
| 44 | |
|---|
| 45 | So Parti attempts to bring the usability of tabbing/tiling WMs to |
|---|
| 46 | modern desktop environments, and serve as a test-bed where people can |
|---|
| 47 | try out new ideas for how the computer can help us keep track of our |
|---|
| 48 | tasks and manage our attention. To make this as easy as possible, |
|---|
| 49 | Parti is written in (almost) pure Python and GTK+. The basic approach |
|---|
| 50 | taken by Parti is to expose client windows as a special Gtk widget, so |
|---|
| 51 | now if you can write a Gtk program, you can write a window manager |
|---|
| 52 | too. |
|---|
| 53 | |
|---|
| 54 | Our development priorities are usability, hackability, and standards |
|---|
| 55 | compliance, in that order. For us a usable program is one that is |
|---|
| 56 | unobtrusive, to the point of becoming an invisible and unnoticed |
|---|
| 57 | extension of the user's will. (It's also nice if it doesn't make our |
|---|
| 58 | eyes hurt while it's doing that.) For us a hackable program is one |
|---|
| 59 | that has as little code as possible, and what code exists is clean and |
|---|
| 60 | has automated tests. For us standards compliance does not include |
|---|
| 61 | conforming to pointless rules that make the code more complicated |
|---|
| 62 | without improving user experience, but it does include defining and |
|---|
| 63 | submitting new standards as it becomes clearer how to improve |
|---|
| 64 | interaction between clients and a tiling WM. |
|---|
| 65 | |
|---|
| 66 | |
|---|
| 67 | So should I start using it? |
|---|
| 68 | --------------------------- |
|---|
| 69 | |
|---|
| 70 | Probably not, it's still really alpha. You can help fix that, though. |
|---|
| 71 | |
|---|
| 72 | |
|---|
| 73 | How is Parti licensed? |
|---|
| 74 | ---------------------- |
|---|
| 75 | |
|---|
| 76 | Copyright (C) 2007 to Nathaniel Smith <njs@pobox.com> |
|---|
| 77 | Released under the terms of the GNU GPL v2 or (at your option) any |
|---|
| 78 | later version. See the file COPYING for details (and note in |
|---|
| 79 | particular the LACK OF ANY WARRANTY). |
|---|
| 80 | |
|---|
| 81 | |
|---|
| 82 | How can I try Parti? |
|---|
| 83 | -------------------- |
|---|
| 84 | |
|---|
| 85 | Running './try-parti' in the source directory will build Parti, and |
|---|
| 86 | start a parti session inside a Xephyr nested X server. Currently you |
|---|
| 87 | may need to hit "tab" to get a client window focused, and you may find |
|---|
| 88 | running the "parti-repl" command interesting. |
|---|
| 89 | |
|---|
| 90 | Running Parti requires at least: |
|---|
| 91 | python |
|---|
| 92 | xlib (including extension libraries like libXtst.so) |
|---|
| 93 | pygobject |
|---|
| 94 | pygtk |
|---|
| 95 | dbus-python |
|---|
| 96 | ipython |
|---|
| 97 | And an X server with support for Composite. |
|---|
| 98 | |
|---|
| 99 | Developing on Parti also requires: |
|---|
| 100 | pyrex |
|---|
| 101 | Xephyr |
|---|
| 102 | Xvfb |
|---|
| 103 | As well as development packages of all of the above (i.e., you need |
|---|
| 104 | all the C header files, which may be split out into a package whose |
|---|
| 105 | name ends in "-dev" or "-devel"). |
|---|
| 106 | |
|---|
| 107 | If you are doing development, it is recommended that you also install: |
|---|
| 108 | nose |
|---|
| 109 | py.test |
|---|
| 110 | as these will allow our test harness to give better diagnostics when |
|---|
| 111 | tests fail. |
|---|
| 112 | |
|---|
| 113 | The ipython dependency should probably become optional (it is only |
|---|
| 114 | needed for the REPL support). Patches accepted. |
|---|
| 115 | |
|---|
| 116 | On Debian-based OSes, try: |
|---|
| 117 | # aptitude install libx11-dev libxtst-dev libxcomposite-dev \ |
|---|
| 118 | libxdamage-dev python-pyrex python-gobject-dev \ |
|---|
| 119 | python-gtk2-dev python-dbus ipython xserver-xephyr \ |
|---|
| 120 | xvfb python-nose python-codespeak-lib |
|---|
| 121 | |
|---|
| 122 | (If you work out a similar line for another OS, like Fedora or FreeBSD |
|---|
| 123 | or whatever, please send it in.) |
|---|
| 124 | |
|---|
| 125 | |
|---|
| 126 | Why GTK+? Don't you know Qt is way better, you Gnome bigot? |
|---|
| 127 | ------------------------------------------------------------ |
|---|
| 128 | |
|---|
| 129 | Yeah, Qt is pretty sweet. Unfortunately, I did have to pick one or |
|---|
| 130 | the other. I started with no experience with either API, and the |
|---|
| 131 | initial prototype actually used Qt; I guess I could have stuck with |
|---|
| 132 | that and then had to answer the same question in reverse... I mostly |
|---|
| 133 | switched to GTK+, though, because the Python Qt bindings seemed to |
|---|
| 134 | make some evil hacks harder. (Window managers need to muck around in |
|---|
| 135 | the guts of X, and getting both Python and the high-level toolkits to |
|---|
| 136 | play along with that means you need a few evil hacks.) |
|---|
| 137 | |
|---|
| 138 | So the important thing is, Parti has no desire to be a Gnome-specific |
|---|
| 139 | kind of thing. We might use some parts of Gnome where appropriate, |
|---|
| 140 | but really we'd like it to be a first class citizen on any desktop |
|---|
| 141 | environment (including the critical polish details like |
|---|
| 142 | auto-configuring to local expectations), and will be happy to accept |
|---|
| 143 | patches to that effect. |
|---|
| 144 | |
|---|
| 145 | Also, because Parti aims for full ICCCM and EWMH compliance (where |
|---|
| 146 | possible for a primarily tiling window manager), it should mostly just |
|---|
| 147 | work on any EWMH-compliant desktop environment (which should be pretty |
|---|
| 148 | much all of them, these days). This is just about the more subtle |
|---|
| 149 | integration details. |
|---|
| 150 | |
|---|
| 151 | |
|---|
| 152 | These answers are all way too temperate. Can't you say the same |
|---|
| 153 | things as a rant? It's not really a window manager without a rant. |
|---|
| 154 | ------------------------------------------------------------------- |
|---|
| 155 | |
|---|
| 156 | Well, if you insist. |
|---|
| 157 | |
|---|
| 158 | These days, let's start by saying, the Unix desktop totally rocks. We |
|---|
| 159 | have beautiful widgets, fantastic hardware integration, best GUI APIs |
|---|
| 160 | ever, highly usable and accessible apps, incredible i18n, you name it. |
|---|
| 161 | |
|---|
| 162 | Except for one thing. Our mainstream window managers suck, suck, |
|---|
| 163 | suck. Fundamentally. Suck. |
|---|
| 164 | |
|---|
| 165 | What do I mean by this? Think about it: the basic job of a window |
|---|
| 166 | manager is to help you manage and switch between the different tasks |
|---|
| 167 | you're engaged in. That's a pretty basic and pervasive part of user |
|---|
| 168 | experience, and so it carries a heavy responsibility. Modern window |
|---|
| 169 | managers rise to this responsibility by... ignoring it totally. We |
|---|
| 170 | have startup notification and wobbly windows and the basic user |
|---|
| 171 | experience of TWM, with windows as boxes dropped on the screen in some |
|---|
| 172 | arbitrary size and position. If you want the windows arranged |
|---|
| 173 | differently, then you, the human, get to reach over and slide them |
|---|
| 174 | around one by one. But at least you're free to have a bunch of |
|---|
| 175 | overlapping partially visible windows that you can't read. |
|---|
| 176 | |
|---|
| 177 | Most of the time I don't really need that freedom. I just want to |
|---|
| 178 | look at one window, or at two windows, or maybe an editor and two |
|---|
| 179 | terminals. These are not complicated layout problems. I think I have |
|---|
| 180 | better things to do with my time than solving them by hand, myself, |
|---|
| 181 | every time. Let the computer do it. It'll do a better job, too; half |
|---|
| 182 | the time I end up leaving big gaps that I can see my desktop through, |
|---|
| 183 | and while my desktop background is very pretty, I have seen it many |
|---|
| 184 | times and on this tiny laptop screen there are probably better things |
|---|
| 185 | those pixels could be doing. |
|---|
| 186 | |
|---|
| 187 | Most of the time, I don't want to do fiddly high-precision work with |
|---|
| 188 | the mouse just to switch to a different window. I'm not even making |
|---|
| 189 | the standard old complaint about moving the hand away from the |
|---|
| 190 | keyboard, that's pretty quick and I can do it without looking; but |
|---|
| 191 | using a pointer accurately is a high-precision motor task. It takes |
|---|
| 192 | careful attention and hand-eye coordination. That's *exactly* the |
|---|
| 193 | kind of distraction I *don't* need when I'm trying to juggle state and |
|---|
| 194 | maintain flow. So perhaps once the computer has become smart enough |
|---|
| 195 | to put windows into two columns, it can devote some extra cycles to |
|---|
| 196 | figuring out how to have a single-key command for "switch to other |
|---|
| 197 | column"? |
|---|
| 198 | |
|---|
| 199 | It's not like I'm the first person to notice this. Think of all the |
|---|
| 200 | hue and cry over tabs in web browsers. This isn't just a geeky |
|---|
| 201 | preoccupation; it's gotten so my mom won't use a browser without tab |
|---|
| 202 | support. Even Microsoft has figured this one out. And then there are |
|---|
| 203 | the tabbed terminals, tabbed editors, tabbed chat clients, on and on. |
|---|
| 204 | In the app space, traditional MDI is dead, and tabbing rules the |
|---|
| 205 | world. |
|---|
| 206 | |
|---|
| 207 | Or in other words, the app developers have universally decided that |
|---|
| 208 | the standard sliding-little-rectangles-around-a-big-rectangle world is |
|---|
| 209 | annoying, to the point that it is considered a major feature if you |
|---|
| 210 | implement a little private tabbed window manager so that users can |
|---|
| 211 | avoid dealing with their main one as much as possible. In the mean |
|---|
| 212 | time, according to the usability studies, lots of users are hacking up |
|---|
| 213 | their work style to approximate between-app tabbed as closely as they |
|---|
| 214 | can, by keeping ever window maximized all the time. So there's some |
|---|
| 215 | room for improvement here. |
|---|
| 216 | |
|---|
| 217 | The app developers have all sorts of cool new ideas, too. Browser |
|---|
| 218 | tabs that show mini progress bars and visually track whether you've |
|---|
| 219 | looked at the tab since it finished loading, chat windows that change |
|---|
| 220 | color to show what sort of activity is going on, the genius iswitchb |
|---|
| 221 | buffer-switching interface for Emacs. Let's give every app this |
|---|
| 222 | richer experience. Let's expose it to the desktop, and make it better |
|---|
| 223 | at the same time -- let's write window managers that, say, let you |
|---|
| 224 | maximize one window on a small laptop screen, and still get the rich |
|---|
| 225 | little notification cues from the apps that aren't visible. Let's do |
|---|
| 226 | something *new*. |
|---|
| 227 | |
|---|
| 228 | Not that the basic idea of tabbing window managers is new. Parti owes |
|---|
| 229 | a huge debt to the likes of pwm, ratpoison, stumpwm, trswm, xmonad and |
|---|
| 230 | especially the brilliant ion and wmii. For some reason, though, the |
|---|
| 231 | previous window managers exploring these ideas seem to all be written |
|---|
| 232 | by extreme minimalists. They like raw Xlib and write rants about |
|---|
| 233 | desktop bloat, and I have nothing against that per se, but honestly I |
|---|
| 234 | just want NetworkManager and pleasant looking fonts *and* the ability |
|---|
| 235 | to switch between tasks without gnashing my teeth. |
|---|
| 236 | |
|---|
| 237 | So here's the Parti line: Parti is aimed first and foremost at |
|---|
| 238 | usability, and for us, a usable program is one that is unobtrusive to |
|---|
| 239 | the point of becoming an invisible and unnoticed extension of the |
|---|
| 240 | user's will. Because we can't do this without fresh blood and |
|---|
| 241 | experimentation, Parti is written in Python, and writing new layout |
|---|
| 242 | schemes is as easy packing some GTK+ widgets. Because this is too big |
|---|
| 243 | a job to do on our own, we use pre-existing libraries whereever |
|---|
| 244 | possible. Because we need seamless integration into the desktop, we |
|---|
| 245 | will reach out to other developers, to extend EWMH and existing apps |
|---|
| 246 | to perfect our user experience. |
|---|
| 247 | |
|---|
| 248 | And our goal is nothing less than acceptance as a, or the, default |
|---|
| 249 | window manager for a major desktop environment. Is that an |
|---|
| 250 | unreasonable goal? Possibly, and there's a long, long way between |
|---|
| 251 | here and there. But let's see how far we can get. |
|---|
| 252 | |
|---|
| 253 | |
|---|
| 254 | I'm making a window manager feature comparison table. Is Parti fast, |
|---|
| 255 | dynamic, light-weight, bloat-free, modern, flexible, and/or clean? |
|---|
| 256 | --------------------------------------------------------------------- |
|---|
| 257 | |
|---|
| 258 | Probably. |
|---|