| 08 September 2008 |
| |
| * 256 colour support. tmux attempts to autodetect the terminal by looking |
| both at what ncurses reports (usually wrong for xterm) and checking if |
| the TERM contains "256col". For xterm TERM=xterm-256color is needed (as |
| well as a build that support 256 colours); this seems to work for rxvt |
| as well. On non-256 colour terminals, high colours are translated to white |
| foreground and black background. |
| |
| 28 August 2008 |
| |
| * Support OS X/Darwin thanks to bsd-poll.c from OpenSSH. Also convert |
| from clock_gettime(2) to gettimeofday(2) as OS X doesn't support the |
| former; microsecond accuracy will have to be sufficient ;-). |
| |
| 07 August 2008 |
| |
| * Lose some unused/useless wrapper functions. |
| |
| 25 July 2008 |
| |
| * Shell variables may now be defined and used in configuration file. Define |
| variables with: |
| |
| VAR=1 |
| |
| And use with: |
| |
| renamew ${VAR} |
| renamew "x${VAR}x" |
| |
| Also some other fixes to make, for example, "abc""abc" work similarly to |
| the shell. |
| |
| 24 July 2008 |
| |
| * Finally lose inconsistently-used SCREEN_DEF* defines. |
| * If cursor mode is on, switch the arrow keys from \033[A to \033OA. |
| * Support the numeric keypad in both application and numbers mode. This is |
| different from screen which always keeps it in application mode. |
| |
| 19 July 2008 |
| |
| * Unbreak "set status" - tmux thought it was ambiguous, reported by rivo nurges. |
| |
| 02 July 2008 |
| |
| * Split vi and emacs mode keys into two tables and add an option (mode-keys) |
| to select between them. Default is emacs, use, |
| |
| tmux set mode-keys vi |
| |
| to change to vi. |
| |
| vi mode uses space to start selection, enter to copy selection and escape |
| to clear selection. |
| |
| 01 July 2008 |
| |
| * Protocol versioning. Clients which identify as a different version from the |
| server will be rejected. |
| * tmux 0.4 released. |
| |
| 29 June 2008 |
| |
| * Zombie windows. These are not closed when the child process dies. May be |
| set for a window with the new "remain-on-exit" option; the default setting |
| of this flag for new windows may be set with the "remain-by-default" session |
| option. |
| |
| A window may be restarted with the respawn-window command: |
| |
| respawn-window [-k] [command] |
| |
| If -k is given, any existing process running in the window is killed; |
| if command is omitted, the same command as when the window was first |
| created is used. |
| |
| 27 June 2008 |
| |
| * Handle nonexistent session or client to -t properly. |
| |
| 25 June 2008 |
| |
| * select-prompt command to allow a window to be selected at a prompt. Only |
| windows in the current session may be selected. Bound to ' by default. |
| Suggested by merdely. |
| * move-window command. Requested by merdely. |
| * Support binding alt keys (prefixed with M-). Change default to use |
| C- for ctrl keys (^ is still accepted as an alternative). |
| * Slim down default key bindings: support lowercase only. |
| * Handle escaped keys properly (parse eg \033b into a single key code) and |
| use this to change copy mode next/previous work to M-f and M-b to match |
| emacs. |
| |
| 24 June 2008 |
| |
| * Next word (C-n/w) and previous word (C-b/b) in copy mode. |
| |
| 23 June 2008 |
| |
| * list-commands command (alias lscm). |
| * Split information about options into a table and use it to parse options |
| on input (allowing abbreviations) and to print them with show-options |
| (meaning that bell-action gets a proper string). This turned out a bit ugly |
| though :-/. |
| |
| 22 June 2008 |
| |
| * Do not translate black and white into default if the terminal supports |
| default colours. This was nice to force programs which didn't use default |
| colours to be properly transparent in rxvt/aterm windows with a background |
| image, but it causes trouble if someone redefines the default foreground and |
| background (to have black on white or something). |
| |
| 21 June 2008 |
| |
| * Naive tab completion in the command prompt. This only completes command |
| names if a) they are at the start of the text b) the cursor is at |
| the end of the text c) the text contains no spaces. |
| * Only attempt to set the title where TERM looks like an xterm (contains |
| "xterm", "rxvt" or is "screen"). I hate this but I don't see a better way: |
| setting the title actually kills some other terminals pretty much dead. |
| * Strip padding out of terminfo(5) strings. Currently the padding is just |
| ignored, this may need to be altered if there are any software terminals |
| out there that actually need it. |
| |
| 20 June 2008 |
| |
| * buffer-limit option to set maximum size of buffer stack. Default is 9. |
| * Initial buffer improvements. Each session has a stack of buffers and each |
| buffer command takes a -b option to manipulate items on the stack. If -b |
| is omitted, the top entry is used. The following commands are currently |
| available: |
| |
| set-buffer [-b index] [-t target-session] string |
| paste-buffer [-d] [-b index] [-t target-window] |
| delete-buffer [-b index] [-t target-session] |
| show-buffers [-t target-session] |
| show-buffer [-b index] [-t target-session] |
| |
| -d to paste-buffer deletes the buffer after pasting it. |
| * New option, display-time, sets the time status line messages stay on screen |
| (unless a key is pressed). Set in milliseconds, default is 750 (0.75 seconds). |
| The timer is only checked every 100 ms or so. |
| |
| 19 June 2008 |
| |
| * Use "status" consistently for status line option, and prefix for "prefix" key |
| option. |
| * Allow commands to be entered at a prompt. This is triggered with the |
| command-prompt command, bound to : by default. |
| * Show status messages properly, without blocking the server. |
| |
| 18 June 2008 |
| |
| * New option, set-titles. On by default, this attempts to set the window title |
| using the \e]2;...\007 xterm code. |
| |
| Note that elinks requires the STY environment variable (used by screen) to be |
| set before it will set the window title. So, if you want window titles set by |
| elinks, set STY before running it (any value will do). I can't do this for all |
| windows since setting it to an invalid value breaks screen. |
| * Show arrows at either end of status line when scrolled if more windows |
| exist. Highlight the arrow if a hidden window has activity or bell. |
| * Scroll the status line to show the current window if necessary. Also handle |
| windows smaller than needed better (show a blank status line instead of |
| hanging or crashing). |
| |
| 17 June 2008 |
| |
| * tmux 0.3 released. |
| |
| 16 June 2008 |
| |
| * Add some information messages when window options are changed, suggested by |
| Mike Erdely. Also add a -q command-line option to suppress them. |
| * show-window-options (showw) command. |
| |
| 15 June 2008 |
| |
| * show-options (show) command to show one or all options. |
| |
| 14 June 2008 |
| |
| * New window options: force-width and force-height. This will force a window |
| to an arbitrary width and height (0 for the default unlimited). This is |
| neat for emacs which doesn't have a sensible way to force hard wrapping at 80 |
| columns. Also, don't try to be clever and use clr_eol when redrawing the |
| whole screen, it causes trouble since the redraw functions are used to draw |
| the blank areas too. |
| * Clear the blank area below windows properly when they are smaller than client, |
| also add an indicator line to show the vertical limit. |
| * Don't die on empty strings in config file, reported by Will Maier. |
| |
| 08 June 2008 |
| |
| * Set socket mode +x if any sessions are attached and -x if not. |
| |
| 07 June 2008 |
| |
| * Make status-interval actually changable. |
| |
| 06 June 2008 |
| |
| * New window option: aggressive-resize. Normally, windows are resized to the |
| size of the smallest attached session to which they are linked. This means a |
| window only changes size when sessions are detached or attached, or they are |
| linked or unlinked from a session. This flag changes a window to be the size |
| of the smallest attached session for which it is the current window - it is |
| resized every time a session changes to it or away from it. This is nice for |
| things that handle SIGWINCH well (like irssi) and bad for things like shells. |
| * The server now exits when no sessions remain. |
| * Fix bug with inserting characters with TERM=xterm-color. |
| |
| 05 June 2008 |
| |
| * Completely reorganise command parsing. Much more common code in cmd-generic.c |
| and a new way of specifying windows, clients or sessions. Now, most commands |
| take a -t argument, which specifies a client, a session, or a window target. |
| Clients and sessions are given alone (sessions are fnmatch(3)d and |
| clients currently not), windows are give by (client|session):index. For |
| example, if a user is in session "1" window 0 on /dev/ttypi, these should all |
| be equivalent: |
| |
| tmux renamew newname (current session and window) |
| tmux renamew -t: newname (current session and window) |
| tmux renamew -t:0 newname (current session, window 0) |
| tmux renamew -t0 newname (current session, window 0) |
| tmux renamew -t1:0 newname (session 1, window 0) |
| tmux renamew -t1: newname (session 1's current window) |
| tmux renamew -t/dev/ttypi newname (client /dev/ttypi's current |
| session and window) |
| tmux renamew -t/dev/ttypi: newname (client /dev/ttypi's current |
| session and window) |
| tmux renamew -t/dev/ttypi:0 newname (client /dev/ttypi's current |
| session, window 0) |
| |
| This does have some downsides, for example, having to use -t on selectw, |
| |
| tmux selectw -t7 |
| |
| is annoying. But then using non-flagged arguments would mean renaming the |
| current window would need to be something like: |
| |
| tmux renamew : newname |
| |
| It might be better not to try and be so consistent; comments to the usual |
| address ;-). |
| * Infrastructure for printing arguments in list-keys output. Easy ones only for |
| now. |
| |
| 04 June 2008 |
| |
| * Add some vi(1) key bindings in copy mode, and support binding ^[, ^\, ^] |
| ^^ and ^_. Both from/prompted by Will Maier. |
| * setw monitor-activity and set status without arguments now toggle the current |
| value; suggested by merdely. |
| * New command set-window-option (alias setw) to set the single current window |
| option: monitor-activity to determine whether window activity is shown in |
| the status bar for that window (default off). |
| * Change so active/bell windows are inverted in status line. |
| * Activity monitoring - window with activity are marked in status line. No |
| way to disable this/filter windows yet. |
| * Brought select-window command into line with everything else; it now uses |
| -i for the window index. |
| * Strings to display on the left and right of the status bar may now be set |
| with the status-left and status-right options. These are passed through |
| strftime(3) before being displayed. The status bar is automatically updated |
| at an interval set by the status-interval option. The default is to display |
| nothing on the left and the date and time on the left; the default update |
| interval is 15 seconds. |
| |
| 03 June 2008 |
| |
| * Per session options. Setting options without specifying a session sets the |
| global options as normal (global options are inherited by all sessions); |
| passing -c or -s will set the option only for that session. |
| * Because a client has a session attached, any command needing a session can |
| take a client and use its session. So, anything that used to accept -s now |
| accepts -c as well. |
| * -s to specify session name now supports fnmatch(3) wildcards; if multiple |
| sessions are found, or if no -s is specified, the most newly created is used. |
| * If no command is specified, assume new-session. As a byproduct, clean up |
| command default values into seperate init functions. |
| * kill-server command. |
| |
| 02 June 2008 |
| |
| * New command, start-server (alias "start"), to start the tmux server and do |
| nothing else. This is good if you have a configuration file which creates |
| windows or sessions (like me): in that case, starting the server the first |
| time tmux new is run is bad since it creates a new session and window (as |
| it is supposed to - starting the server is a side-effect). |
| |
| Instead, I have a little script which does the equivalent of: |
| |
| tmux has -s0 2>/dev/null || tmux start |
| tmux attach -d -s0 |
| |
| And I use it to start the server if necessary and attach to my primary |
| session. |
| * Basic configuration file in ~/.tmux.conf or specified with -f. This is file |
| contains a set of tmux commands that are run the first time the server is |
| started. The configuration commands are executed before any others, so |
| if you have a configuration file that contains: |
| |
| new -d |
| neww -s0 |
| |
| And you do the following without an existing server running: |
| |
| tmux new |
| |
| You will end up with two sessions, session 0 with two windows (created by |
| the configuration file) and your client attached to session 1 with one |
| window (created by the command-line command). I'm not completely happy with |
| this, it seems a little non-obvious, but I haven't yet decided what to do |
| about it. |
| |
| There is no environment variable handling or other special stuff yet. |
| |
| In the future, it might be nice to be able to have per-session configuration |
| settings, probably by having conditionals in the file (so you could, for |
| example, have commands to define a particular window layout that would only |
| be invoked if you called tmux new -smysession and mysession did not already |
| exist). |
| * BIG CHANGE: -s and -c to specify session name and client name are now passed |
| after the command rather than before it. So, for example: |
| |
| tmux -s0 neww |
| |
| Becomes: |
| |
| tmux neww -s0 |
| |
| This is to allow them to be used in the (forthcoming) configuration file |
| THIS WILL BREAK ANY CURRENT SCRIPTS OR ALIASES USING -s OR -c. |
| |
| 01 June 2008 |
| |
| * Bug fix: don't die if -k passed to link-window and the destination doesn't |
| exist. |
| * New command, send-keys, will send a set of keys to a window. |
| |
| 31 May 2008 |
| |
| * Fix so tmux doesn't hang if the initial window fails for some reason. This |
| was highlighted by problems on Darwin, thanks to Elias Pipping for the report |
| and access to a test account. (tmux still won't work on Darwin since its |
| poll(2) is broken.) |
| |
| 02 January 2008 |
| |
| * Don't attempt to reset the tty on exit if it has been closed externally. |
| |
| 06 December 2007 |
| |
| * Restore checks for required termcap entries and add a few more obvious |
| emulations. |
| * Another major reorganisation, this time of screen handling. A new set of |
| functions, screen_write_*, are now used to write to a screen and a tty |
| simultaneously. These are used by the input parser to update the base |
| window screen and also by the different modes which now interpose their own |
| screen. |
| |
| 30 November 2007 |
| |
| * Support \ek...\e\ to set window name. |
| |
| 27 November 2007 |
| |
| * Enable/disable mouse when asked, if terminal claims to support it. Mouse |
| sequences are just passed through unaltered for the moment. |
| * Big internal reorganisation. Rather than leaving control of the tty solely in |
| the client and piping all data through a socket to it, change so that the |
| server opens the tty again and reads and writes to it directly. This avoids |
| a lot of buffering and copying. Also reorganise the redrawing stuff so that |
| everything goes through screen_draw_* - this makes the code simpler, but |
| still needs broken up more, and all the ways of writing to screens should be |
| more consistent. |
| |
| 26 November 2007 |
| |
| * Rather than shifting up one line at a time once the history is full, |
| shift by 10% of the history each time. This is faster. |
| * Add ^A and ^E to copy mode to move to start-of-line/end-of-line. |
| |
| 24 November 2007 |
| |
| * Support for alt charset mode (VT100 graphics characters). |
| |
| 23 November 2007 |
| |
| * Mostly complete copy & paste. Copy mode entered with C-b [ (copy-mode |
| command). In copy mode, arrow keys/page up/page down/hjkl/C-u/C-f navigate, |
| space or C-space starts selection, and enter or C-w copies and (important!) |
| exits copy mode. C-b ] (paste-buffer) pastes into current window. No |
| extra utility keys (bol/eol/clear selection/etc), only one single buffer, |
| and no buffer manipulation commands (clear/view/etc) yet. The code is also |
| fugly :-(. |
| * history-limit option to set maximum history. Does not apply retroactively to |
| existing windows! Lines take up a variable amount of space, but a reasonable |
| guess for an 80-column terminal is 250 KB per 1000 lines (of history used, |
| an empty history takes no space). |
| |
| 21 November 2007 |
| |
| * Create every line as zero length and only expand it as data is written, |
| rather than creating at full size immediately. |
| * Make command output (eg list-keys) go to a scrollable window similar to |
| scroll mode. |
| * Redo screen redrawing so it is a) readable b) split into utility functions |
| that can be used outside screen.c. Use these to make scroll mode only |
| redraw what it has to which gets rid of irritating flickering status box and |
| makes it much faster. |
| * Full line width memory and horizontal scrolling in history. |
| * Initial support for scroll history. = to enter scrolling mode, and then |
| vi keys or up/down/pgup/pgdown to navigate. Q to exit. No horizontal history |
| yet (need per-line sizes) and a few kinks to be worked out (resizing while in |
| history mode will probably cause trouble). |
| |
| 20 November 2007 |
| |
| * Fix format string error with "must specify a client" message. Also |
| sprinkle some printflike tags. |
| * tmux 0.1 released. |
| |
| 17 November 2007 |
| |
| * (nicm) Add -k option to link-window to kill target window if it exists. |
| |
| 16 November 2007 |
| |
| * (nicm) Split in-client display into two columns. This is a hack but not a lot |
| more so than that bit is already and it helps with lots of keys. |
| * (nicm) switch-client command to switch client between different sessions. This |
| is pretty cool: |
| |
| $ tmux bind q switch 0 |
| $ tmux bind w switch 1 |
| |
| Then you can switch between sessions 0 and 1 with a key :-). |
| * (nicm) Accept "-c client-tty" on command line to allow client manipulation |
| commands, and change detach-/refresh-session to detach-/refresh-client (this |
| loses the -a behaviour, but at some point -session versions may return, and |
| -c will allow fnmatch(3)). |
| * (nicm) List available commands on ambiguous command. |
| |
| 12 November 2007 |
| |
| * (nicm) If the terminal supports default colours (AX present), force black |
| background and white foreground to default. This is useful on transparent |
| *terms for programs which don't do it themselves (like most(1)). |
| * (nicm) Fill in the rest of the man page. |
| * (nicm) kill-session command. |
| |
| 09 November 2007 |
| |
| * (nicm) C-space is now "^ " not "^@". |
| * (nicm) Support tab (\011). |
| * (nicm) Initial man page outline. |
| * (nicm) -V to show version. |
| * (nicm) rename-session command. |
| |
| 08 November 2007 |
| |
| * (nicm) Check for required terminal capabilities on start. |
| |
| 31 October 2007 |
| |
| * (nicm) Linux port. |
| |
| 30 October 2007 |
| |
| * (nicm) swap-window command. Same as link-window but swaps windows. |
| |
| 26 October 2007 |
| |
| * (nicm) Saving scroll region on \e7 causes problems with ncmpc so I guess |
| it is not required. |
| * (nicm) unlink-window command. |
| * (nicm) link-window command to link an existing window into another session |
| (or another index in the same session). Syntax: |
| |
| tmux -s dstname link-window [-i dstidx] srcname srcidx |
| |
| * (nicm) Redo window data structures. The global array remains, but each per- |
| session list is now a RB tree of winlink structures. This disassociates the |
| window index from the array size (allowing arbitrary indexes) which still |
| allowing windows to have multiple indexes. |
| |
| 25 October 2007 |
| |
| * (nicm) has-session command: checks if session exists. |
| |
| 24 October 2007 |
| |
| * (nicm) Support for \e6n to request cursor position. resize(1) now works. |
| * (nicm) Support for \e7, \e8 save/restore cursor and attribute sequences. |
| Currently don't save mode (probably should). Also change some cases where |
| out-of-bound values are ignored to limit them to within range (there are |
| others than need to be checked too). |
| |
| 23 October 2007 |
| |
| * (nicm) Lift limit on session name passed with -s. |
| * (nicm) Show size in session/window lists. |
| * (nicm) Pass tty up to server when client identifies and add a list-clients |
| command to list connected clients. |
| |
| 20 October 2007 |
| |
| * (nicm) Add default-command option and change default to be $SHELL rather than |
| $SHELL -l. Also try to read shell from passwd db if $SHELL isn't present. |
| |
| 19 October 2007 |
| |
| * (nicm) -n on new-session is now -s, and -n is now the initial window name. |
| This was documented but not implemented :-/. |
| * (nicm) kill-window command, bound to & by default (because it should be hard |
| to hit accidently). |
| * (nicm) bell-style option with three choices: "none" completely ignore bell; |
| "any" pass through a bell in any window to current; "current" ignore bells |
| except in current window. This applies only to the bell terminal signal, |
| the status bar always reflects any bells. |
| * (nicm) Refresh session command. |
| |
| 12 October 2007 |
| |
| * (nicm) Add a warning if $TMUX exists on new/attach. |
| * (nicm) send-prefix command. Bound to C-b by default. |
| * (nicm) set status, status-fg, status-bg commands. fg and bg are as a number |
| from 0 to 8 or a string ("red", "blue", etc). status may be 1/0, on/off, |
| yes/no. |
| * (nicm) Make status line mark window in yellow on bell. |
| |
| 04 October 2007 |
| |
| * (nicm) -d option to attach to detach all other clients on the same session. |
| * (nicm) Partial resizing support. Still buggy. A C-b S and back sometimes fixes |
| it when it goes wonky. |
| * (mxey) Added my tmux start script as an example (examples/start-tmux.sh). |
| * (mxey) New sessions can now be given a command for their first window. |
| * (mxey) Fixed usage statement for new-window. |
| * (nicm) attach-session (can't believe I forgot it until now!) and list-windows |
| commands. |
| * (nicm) rename-window and select-window commands. |
| * (nicm) set-option command (alias set): "tmux set-option prefix ^A". |
| * (nicm) Key binding and unbinding is back. |
| |
| 03 October 2007 |
| |
| * (nicm) {new,next,last,previous}-window. |
| * (nicm) Rewrite command handling so commands are much more generic and the |
| same commands are used for command line and keys (although most will probably |
| need to check how they are called). Currently incomplete (only new/detach/ls |
| implemented). Change: -s is now passed before command again! |
| * (nicm) String number arguments. So you can do: tmux bind ^Q create "blah". |
| * (nicm) Key binding. tmux bind key command [argument] and tmux unbind key. |
| Key names are in a table in key-string.c, plus A is A, ^A is ctrl-A. |
| Possible commands are in cmd.c (look at cmd_bind_table). |
| * (nicm) Move command parsing into the client. Also rename some messages and |
| tidy up a few bits. Lots more tidying up needed :-/. |
| |
| 02 October 2007 |
| |
| * (nicm) Redraw client status lines on rename. |
| * (nicm) Error on ambiguous command. |
| |
| 01 October 2007 |
| |
| * (nicm) Restore window title handling. |
| * (nicm) Simple uncustomisable status line with window list. |
| |
| 30 September 2007 |
| |
| * (nicm) Window info command for debugging, C-b I. |
| |
| 29 September 2007 |
| |
| * (nicm) Deleting/inserting lines should follow scrolling region. Fix. |
| * (nicm) Allow creation of detached sessions: "tmux new-session -d". |
| * (nicm) Permit error messages to be passed back for transient clients like |
| rename. Also make rename -i work. |
| * (nicm) Pass through bell in any window to current. |
| |
| 28 September 2007 |
| |
| * (nicm) Major rewrite of input parser: |
| - Lose the old weirdness in favour of a state machine. |
| - Merge in parsing from screen.c. |
| - Split key parsing off into a separate file. |
| This is step one towards hopefully allowing a status line. It requires |
| that we output data as if the terminal had one line less than it really does - |
| a serious problem when it comes to things like scrolling. This change |
| consolidates all the range checking and limiting together which should make |
| it easier. |
| * (mxey) Added window remaming, like "tmux rename [-s session] [-i index] name" |
| |
| 27 September 2007 |
| |
| * Split "tmux list" into "tmux list-sessions" (ls) and "list-windows" (lsw). |
| * New command session selection: |
| - if name is specified, look for it and use it if it exists, otherwise |
| error |
| - if no name specified, try the current session from $TMUX |
| - if $TMUX doesn't exist, and there is only one session, use it, |
| otherwise error |
| |
| 26 September 2007 |
| |
| * Add command aliases, so "ls" is an alias for "list". |
| * Rename some commands and alter syntax to take options after a la CVS. Also |
| change some flags. So: |
| |
| tmux -s/socket -nabc new |
| |
| Becomes: |
| |
| tmux -S/socket new -sabc |
| |
| * Major tidy and split of client/server code. |
| |
| 22 September 2007 |
| |
| * Window list command (C-b W). Started by Maximilian Gass, finished by me. |
| |
| 20 September 2007 |
| |
| * Specify meta via environment variable (META). |
| * Record last window and ^L key to switch to it. Largely from Maximilian Gass. |
| * Reset ignored signals in child after forkpty, makes ^C work. |
| * Wrap on next/previous. From Maximilian Gass. |
| |
| 19 September 2007 |
| |
| * Don't renumber windows on close. |
| |
| 28 August 2007 |
| |
| * Scrolling region (\e[r) support. |
| |
| 27 August 2007 |
| |
| * Change screen.c to work more logically and hopefully fix heap corruption. |
| |
| 09 July 2007 |
| |
| * Initial import to CVS. Basic functions are working, albeit with a couple of |
| showstopper memory bugs and many missing features. Detaching, reattaching, |
| creating new sessions, listing sessions work acceptably for using with shells. |
| Simple curses programs (top, systat, tetris) and more complicated ones (mutt, |
| emacs) that don't require scrolling regions (ESC[r) mostly work fine |
| (including mutt, emacs). No status bar yet and no key remapping or other |
| customisation. |
| |
| $Id: CHANGES,v 1.158 2008-09-08 17:40:50 nicm Exp $ |