| 1 | -*-outline-*- |
|---|
| 2 | |
|---|
| 3 | * Version ?.? (? ??? ????) |
|---|
| 4 | |
|---|
| 5 | ** New synthetic events for iconification |
|---|
| 6 | |
|---|
| 7 | When a client window is iconified or deiconified, the synthetic events |
|---|
| 8 | wmevents.ClientIconified and wmevents.ClientDeiconified is sent, |
|---|
| 9 | respectively. |
|---|
| 10 | |
|---|
| 11 | ** border.BorderClient rewritten |
|---|
| 12 | |
|---|
| 13 | The ancient BorderClient mixin has been rewritten to allow more |
|---|
| 14 | dynamic color choosing schemes. It should be backward-compatible, but |
|---|
| 15 | for those willing to change their wm scripts it is now possible to |
|---|
| 16 | choose different colors for different windows. |
|---|
| 17 | |
|---|
| 18 | This is handled by letting client filters map to a certain |
|---|
| 19 | BorderColorManager subclass object. FixedBorderColor gives clients a |
|---|
| 20 | static color, while TitleBorderColor chooses a color based on the |
|---|
| 21 | window title. This is useful to distinguish different xterm windows, |
|---|
| 22 | if e.g. the current directory is included in the window title. |
|---|
| 23 | |
|---|
| 24 | It should be easy to define your own color managers, to get even more |
|---|
| 25 | dynamic colors. |
|---|
| 26 | |
|---|
| 27 | For details, run "pydoc plwm.border". |
|---|
| 28 | |
|---|
| 29 | |
|---|
| 30 | * Version 2.6a (7 Apr 2004) |
|---|
| 31 | |
|---|
| 32 | This is mostly a bug fix release, to get the latest set of fixes out |
|---|
| 33 | the door. |
|---|
| 34 | |
|---|
| 35 | ** Distutils is now used to build and install plwm. |
|---|
| 36 | |
|---|
| 37 | ** We now require Python 2.0 or later. Python 1.5 is no longer supported. |
|---|
| 38 | |
|---|
| 39 | ** Mike Meyer (mwm@mired.org) is now administering PLWM. |
|---|
| 40 | |
|---|
| 41 | ** New mixin: mixer.py. |
|---|
| 42 | |
|---|
| 43 | This is a new mixin for controlling the audio mixer. Currently, it |
|---|
| 44 | only supports "rexima", but it should be easy to extend to "aumix" |
|---|
| 45 | etc. |
|---|
| 46 | |
|---|
| 47 | ** Menu screen mixin is now configurable. |
|---|
| 48 | |
|---|
| 49 | The menu screen mixin has been extended to use menu_font, |
|---|
| 50 | menu_foreground, menu_background, menu_bordercolor, and |
|---|
| 51 | menu_borderwidth when it draws menus on the screen. The default is |
|---|
| 52 | 9x15Bold, black, white, black and 3. menu_seconds is the number of |
|---|
| 53 | seconds the menu will be onscreen before it vanishes of it's own |
|---|
| 54 | accord. The default value is 0, which means to stay until a selection |
|---|
| 55 | is made or the menu is cancelled. |
|---|
| 56 | |
|---|
| 57 | ** Message screen mixin is now configurable. |
|---|
| 58 | |
|---|
| 59 | The message screen mixin can now be configured with message_font, |
|---|
| 60 | message_foreground, message_background, message_bordercolor and |
|---|
| 61 | message_borderwidth. message_seconds controls how long the message is |
|---|
| 62 | displayed for, with a default value of 5 seconds. |
|---|
| 63 | |
|---|
| 64 | ** Screen.system now allows i/o redirection. |
|---|
| 65 | |
|---|
| 66 | The Screen.system method now takes an extra argument, redirect. This |
|---|
| 67 | argument should either be a single integer between 0 and 2 inclusive, |
|---|
| 68 | or a tuple of such integers. These fd's are redirected to pipes, and |
|---|
| 69 | the resulting pipes are returned as a three-tuple. Supplying redirect |
|---|
| 70 | implies that the command will be run in the background. |
|---|
| 71 | |
|---|
| 72 | * Version 2.5 (6 Mar 2002) |
|---|
| 73 | |
|---|
| 74 | This is mostly a get-it-out-of-the-door release, and is identical with |
|---|
| 75 | the preceeding 2.5 alpha. Some of the new features are not |
|---|
| 76 | documented, so you may have to resort to reading code to use them. |
|---|
| 77 | |
|---|
| 78 | ** Abstraction for internal windows |
|---|
| 79 | |
|---|
| 80 | The core class Client now subclasses the new class Window. The new |
|---|
| 81 | class InternalWindow is also a subclass of Window. The main advantage |
|---|
| 82 | of this is that wm-internal windows (e.g. the ModeWindow) can be |
|---|
| 83 | wrapped in an InternalWindow. The internal window can use the same |
|---|
| 84 | event system as Client windows, and also use a number of methods |
|---|
| 85 | previously only provided for Client windows. |
|---|
| 86 | |
|---|
| 87 | ** New extensions: message and input |
|---|
| 88 | |
|---|
| 89 | Message is an abstraction refactored out of menu for displaying |
|---|
| 90 | windows containing text. The new input extension uses this to display |
|---|
| 91 | a text input window. It can e.g. be used to let the user input |
|---|
| 92 | shell commands or python code. |
|---|
| 93 | |
|---|
| 94 | ** New mode window mixin: mw_load |
|---|
| 95 | |
|---|
| 96 | mw_load displays the current load average in the mode window. It |
|---|
| 97 | has support for Linux /proc and the more general Unix |
|---|
| 98 | /usr/bin/uptime. |
|---|
| 99 | |
|---|
| 100 | ** Code reorganization: plwm.misc |
|---|
| 101 | |
|---|
| 102 | The module plwm.misc contains various useful hacks. Most of these |
|---|
| 103 | were previously found in the example wm petliwm.py, but having them |
|---|
| 104 | here makes them easier to use in other peoples wms. Take a look in |
|---|
| 105 | the file to see what is available, it is self-documented. |
|---|
| 106 | |
|---|
| 107 | ** New feature: Screen border allocation |
|---|
| 108 | |
|---|
| 109 | The Screen class now provides the method alloc_border(), which can be |
|---|
| 110 | used by mixins to reserve screen area at the edges. Client windows |
|---|
| 111 | will not be allowed to cover these borders. Initially it is used by |
|---|
| 112 | the mode window. |
|---|
| 113 | |
|---|
| 114 | |
|---|
| 115 | * Version 2.4 (12 Dec 2001) |
|---|
| 116 | |
|---|
| 117 | ** New extensions: panes and menu |
|---|
| 118 | |
|---|
| 119 | Mike Meyer has written two nice extension modules. Panes provides a |
|---|
| 120 | ratpoison-ish, or screen(1)-ish, or Emacs-ish way of handling windows |
|---|
| 121 | on the screen. See the comment at the top of plwm.panes for more |
|---|
| 122 | details, and try out the example window manager example/plpwm.py. |
|---|
| 123 | |
|---|
| 124 | Menu opens a keyboard-controlled menu in the middle of the screen, and |
|---|
| 125 | can be used to start applications, selecting among windows and other |
|---|
| 126 | niceties. |
|---|
| 127 | |
|---|
| 128 | ** Focus management rewritten |
|---|
| 129 | |
|---|
| 130 | There is now a WindowManager method set_current_client() which takes |
|---|
| 131 | care of all the details in switching focus between different clients. |
|---|
| 132 | |
|---|
| 133 | The extension module plwm.focus now uses the new method, much reducing |
|---|
| 134 | the former clutter in that module. The mixin FocusHandler has been |
|---|
| 135 | renamed to PointToFocus, and the mixin FocusClient is no longer |
|---|
| 136 | needed. If the old names are used, a warning is printed. |
|---|
| 137 | |
|---|
| 138 | The method move_focus() has been moved to the new mixin MoveFocus. |
|---|
| 139 | |
|---|
| 140 | ** Internal events collected in plwm.wmevents, and also documented |
|---|
| 141 | |
|---|
| 142 | The various internal events previously scattered over plwm.wmanager |
|---|
| 143 | and plwm.focus has now been collected in the new module plwm.wmevents. |
|---|
| 144 | |
|---|
| 145 | They have also been documented in the manual chapter "Core Events". |
|---|
| 146 | |
|---|
| 147 | ** Dropped support for old xmodewin |
|---|
| 148 | |
|---|
| 149 | The old stand-alone xmodewin, the utilities xmwbiff and xmwclock, and |
|---|
| 150 | the related modules modewinctl and modetitle have been removed. They |
|---|
| 151 | were superceded by the plwm.modewindow and plwm.mw_* extension modules |
|---|
| 152 | in 2.1. |
|---|
| 153 | |
|---|
| 154 | ** View remembers focus, and stores info at exit |
|---|
| 155 | |
|---|
| 156 | Views now also remembers the focused client, and is thus able to give |
|---|
| 157 | it focus no matter where the pointer is located. Very nice when using |
|---|
| 158 | SloppyFocus. |
|---|
| 159 | |
|---|
| 160 | The current view configuration is now stored when exiting the window |
|---|
| 161 | manager, in addition to when switching views. This allows even more |
|---|
| 162 | view configuration to be restored when PLWM is restarted. |
|---|
| 163 | |
|---|
| 164 | ** CycleActivate improved |
|---|
| 165 | |
|---|
| 166 | plwm.cycle.CycleActivate has been improved to work well with both |
|---|
| 167 | iconified and deiconified clients. Inspiration came from Meik |
|---|
| 168 | Hellmund. |
|---|
| 169 | |
|---|
| 170 | ** Fixed bug in Screen.system() |
|---|
| 171 | |
|---|
| 172 | If PLWM was killed by a signal, all programs started with |
|---|
| 173 | Screen.system() also got that signal. This has been fixed by creating |
|---|
| 174 | a new process group for the child process executing the program. |
|---|
| 175 | |
|---|
| 176 | ** WindowOutlineClient added |
|---|
| 177 | |
|---|
| 178 | An outline client mixin drawing the outline using a set of windows has |
|---|
| 179 | been added. It is less effecient than the XorOutlineClient, but |
|---|
| 180 | avoids some of its problems. See the section for the "outline" |
|---|
| 181 | extension in the documentation for further details. |
|---|
| 182 | |
|---|
| 183 | ** NetBSD APM interface added to mw_apm |
|---|
| 184 | |
|---|
| 185 | The modewindow APM mixin can now fetch battery status both from Linux' |
|---|
| 186 | /proc/apm and NetBSD's /dev/apm, thanks to Henrik Rindlöw. |
|---|
| 187 | |
|---|
| 188 | ** Finalization methods added |
|---|
| 189 | |
|---|
| 190 | Mixin classes can now clean up after themselves, by providing the |
|---|
| 191 | appropriate method of __wm_del__, __screen_del__, or __client_del__. |
|---|
| 192 | |
|---|
| 193 | ** Bugfix in MapRequest handling |
|---|
| 194 | |
|---|
| 195 | An if-expression missed a "not", which resulted in that windows |
|---|
| 196 | created after PLWM has started always was mapped, no matter the value |
|---|
| 197 | of Client.start_iconified. Consequently existing windows' map |
|---|
| 198 | requests always was ignored. The first effect is a bug, the second |
|---|
| 199 | one turned out to be the correct behaviour. (This is because Netscape |
|---|
| 200 | 6.1 abuses window mapping by attempting to deiconify whenever a web |
|---|
| 201 | page has loaded. This is _not_ what you want if the Netscape windows |
|---|
| 202 | is iconified because it is on another view than the current one...) |
|---|
| 203 | |
|---|
| 204 | ** Python 2.1 incompitability fixed |
|---|
| 205 | |
|---|
| 206 | It turned out that Python 2.1 is very picky about the __all__ list in |
|---|
| 207 | __init__.py, so installation failed since a now removed module was |
|---|
| 208 | listed in it. Fixed now. |
|---|
| 209 | |
|---|
| 210 | |
|---|
| 211 | * Version 2.3 (29 Aug 2001) |
|---|
| 212 | |
|---|
| 213 | ** Documentation revised |
|---|
| 214 | |
|---|
| 215 | The oldest part of the documentation have been revised for grammar, |
|---|
| 216 | correctness and prettyness. |
|---|
| 217 | |
|---|
| 218 | ** Key handling modified |
|---|
| 219 | |
|---|
| 220 | The key handling of keys.py has been modified so that keymaps can now |
|---|
| 221 | be bound to specific screens or windows. For the first time in the |
|---|
| 222 | history of PLWM, this is a modification that is backward-compatible. |
|---|
| 223 | However, when the old interface is used, a warning is issued. |
|---|
| 224 | |
|---|
| 225 | ** Focus tracking conforms better to ICCCM |
|---|
| 226 | |
|---|
| 227 | focus.py has been somewhat revised to comply more fully with ICCCM. |
|---|
| 228 | Now no-input clients will never get focus, which is required for |
|---|
| 229 | applications like xvkbd. This introduces a new WindowManager |
|---|
| 230 | attribute: current_client. This should replace most instances where |
|---|
| 231 | focus_client previously was used. |
|---|
| 232 | |
|---|
| 233 | A new event is sent when focus changes: CurrentClientChange. The |
|---|
| 234 | modestatus.py code that displays the currently active client has been |
|---|
| 235 | rewritten as a result of this: the Screen mixin ModeFocusedTitle is |
|---|
| 236 | now replaced by the Client mixin ModeFocusedTitleClient together with |
|---|
| 237 | the new Screen mixin ModeFocusedTitleScreen. |
|---|
| 238 | |
|---|
| 239 | ** New modewindow module: mw_apm |
|---|
| 240 | |
|---|
| 241 | mw_apm displays the battery status of laptops, by reading from the |
|---|
| 242 | special file /proc/apm provided by Linux systems. It should be easy |
|---|
| 243 | to extend the module to support other APM systems. |
|---|
| 244 | |
|---|
| 245 | |
|---|
| 246 | * Version 2.2 (6 Feb 2001) |
|---|
| 247 | |
|---|
| 248 | ** Complete documentation available |
|---|
| 249 | |
|---|
| 250 | The documentation has been extended with detailed descriptions for all |
|---|
| 251 | relevant extension modules, plus a chapter on client filters. Now |
|---|
| 252 | there are no excuses for not writing your own plwm.py! |
|---|
| 253 | |
|---|
| 254 | ** Changed default window manager |
|---|
| 255 | |
|---|
| 256 | The old default window manager, examples/petliwm.py, has been |
|---|
| 257 | transformed into something not necessarily useful for other people |
|---|
| 258 | than Petli himself, so now examples/examplewm.py is the default |
|---|
| 259 | instead. It has the same key bindings as the old petliwm.py, though, |
|---|
| 260 | so most default window manager users will not notice any difference. |
|---|
| 261 | |
|---|
| 262 | ** Event system improvements |
|---|
| 263 | |
|---|
| 264 | The core event system has been extended to provide support for file |
|---|
| 265 | events. This allows events to be generated when a file is ready for |
|---|
| 266 | reading or writing. Also, a bug causing the modewindow clock to |
|---|
| 267 | freeze has been fixed. |
|---|
| 268 | |
|---|
| 269 | ** Functionality to inspect the internals of a running PLWM |
|---|
| 270 | |
|---|
| 271 | The module plwm.inspect together with the utility inspect_plwm can be |
|---|
| 272 | used to inspect and modify the internals of a running PLWM. This can |
|---|
| 273 | be thought of as telnetting, or logging in, to the window manager. |
|---|
| 274 | You get a prompt, and any entered expression is evaluated inside the |
|---|
| 275 | running window manager. See the documentation for details. |
|---|
| 276 | |
|---|
| 277 | ** Modewindow cleanups |
|---|
| 278 | |
|---|
| 279 | Modewindow is a little cleaner coded, and now avoids redrawing more of |
|---|
| 280 | the modewindow than necessary. A single Message object can also be |
|---|
| 281 | added to several modewindows. |
|---|
| 282 | |
|---|
| 283 | ** Key grabbing improved |
|---|
| 284 | |
|---|
| 285 | PLWM now grabs all keys that have a certain keysym, not just the first |
|---|
| 286 | one. PLWM also knows about shifting, so a handler for C_Q is |
|---|
| 287 | equivalent to C_S_q. |
|---|
| 288 | |
|---|
| 289 | ** move_focus bug fix |
|---|
| 290 | |
|---|
| 291 | move_focus failed to move focus when there was only one mapped |
|---|
| 292 | window. |
|---|
| 293 | |
|---|
| 294 | |
|---|
| 295 | * Version 2.1 (12 Jan 2001) |
|---|
| 296 | |
|---|
| 297 | ** Python 2.0 fixes. |
|---|
| 298 | |
|---|
| 299 | Some incompatibilities with Python 2.0 has been fixed. |
|---|
| 300 | |
|---|
| 301 | ** Modewindow is now a PLWM module. |
|---|
| 302 | |
|---|
| 303 | xmodewin has been replaced by the module plwm.modewindow. It contains |
|---|
| 304 | a Screen mixin which opens a modewindow on all screens, removing the |
|---|
| 305 | need for separate xmodewin instances. xmwbiff and xmwclock has also |
|---|
| 306 | been replaced by the modules plwm.mw_biff and plwm.mw_clock, |
|---|
| 307 | respectively. These contains WindowManager mixins that perform those |
|---|
| 308 | functions, using plwm.modewindow. |
|---|
| 309 | |
|---|
| 310 | The reason for this change is the quite large footprint of Python |
|---|
| 311 | Xlib, which causes even these very modest applications to be some 3Mb |
|---|
| 312 | large. This makes a PLWM environment somewhat more lightweight. |
|---|
| 313 | |
|---|
| 314 | ** keys: support for handling KeyRelease events. |
|---|
| 315 | |
|---|
| 316 | The keys.KeyHandler has been extended to allow methods to be bound to |
|---|
| 317 | key releases, and not just key presses. This is done by prefixing the |
|---|
| 318 | KeyHandler method name with "R_", e.g. "R_C_Return". |
|---|
| 319 | |
|---|
| 320 | |
|---|
| 321 | * Version 2.0 (8 Jan 2001) |
|---|
| 322 | |
|---|
| 323 | ** Testing completed. |
|---|
| 324 | |
|---|
| 325 | PLWM 2.0a1 has been run for a while, and has uncovered a number of |
|---|
| 326 | bugs and performance problems with Python Xlib. These have been fixed |
|---|
| 327 | in version 0.7 of Python Xlib. No bugs have been found in PLWM 2.0 |
|---|
| 328 | (relatively easy, as there is no new functionality), so lets call this |
|---|
| 329 | a real release. |
|---|
| 330 | |
|---|
| 331 | |
|---|
| 332 | * Version 2.0a1 (21 Dec 2000) |
|---|
| 333 | |
|---|
| 334 | ** plxlib no more |
|---|
| 335 | |
|---|
| 336 | PLWM has been rewritten to use the Python X Library, instead of the |
|---|
| 337 | disgusting pile of C code that was plxlib. Well, it seems to work... |
|---|