2010-10-08 (Fri)

It’s been a while since I’ve actually pulled together a release, but thanks to everyone’s great feedback and encouraging messages, there are a bunch of new features and bug-fixes that need to get out of the SVN tree.

Configurable Ctrl character – if you don’t like Ctrl-A, (maybe it makes using screen to hard?) you can change it using action_key

Terminal settings sets – You can choose an alternative terminal settings set (colors, fonts, etc) to use, instead of the default, when opening csshX terminal windows. One use case is to have a settings set without the audible bell, so csshX doesn’t deafen you when you trigger a beep in 20 windows). See master_settings_set and slave_settings_set

Hosts files – you can provide a list of hosts to connect to, and optionally remote commands to run, in a file or even piped through stdin. See hosts.

More window sorting options – including interleave so you can have your terminals sorted vertically instead of horizontally

Bug fixes:

Many spelling corrections – thanks to Mitch Silverstein

Reduced memory footprint of the slaves by delaying the loading of modules (15MB per slave, down to 6MB on my box)

As you may remember, I ran into problems with the release of 64bit Snow Leopard. This was due to Apple dropping carbon support in 64bit perl. The work-around at the time was to run the program using 32bit perl. Obviously this was not the long-term solution.

To control Terminal.app, instead of using the, carbon based, MacPerl module to call the Applescript, the advice was to use the NSAppleScript cocoa class through the PerlObjCBridge perl module. Although this worked great for calling scripts, getting the return value from scripts was extremely messy (NSAppleScript seems only half finished). I then had a look at the ScriptingBridgeSBApplication class. This gives me an Objective-C like interface to applescript (although it is much more deceptive than it looks). This was much more suitable and so csshX was changed to use it*.

The downside of this is that 10.4 does not support the ScriptingBridge and so any legacy 10.4 user out there (are there any?) will be stuck on csshX 0.65 forever (0.65 is just a minor bug-fix release to 0.64).

The new csshX 0.70 is a major rewrite of the Terminal.app handling. This appears to make things a lot more responsive, but of course, it may have introduced other bugs. One major benefit is that I can now reliably get handles back for the windows created – this means no more race conditions if you click on any Terminal window while csshX is starting.

Other new features (as way of a bribe to get you to try this) are:

Growl messages for certain events. This is experimental, so please let me know if you would like more information, or if it’s too annoying (see the man page for how to disable it).

–ssh command line switch to specify the ssh command (handy if you have some wrapper script).

Keyboard cursor based move/resize in the bounds-setting mode (in case you hate reaching for the mouse).

* Nearly.. there is a bug introduced in 10.6 PerlObjCBridge that prevents it calling functions that return boolean values (quite common in Applescript). A bug report has been opened with Apple. In the interim, some of the ScriptingBridge calls are actually being substituted with NSAppleScript ones.

2009-04-20 (Mon)

Main new feature is draggable bounds changing. This allows you to resize or move your window set after it has been opened. Bounds changing is accessible using Ctrl-a b. Once you select the new area for the windows to use, press Enter to accept it.

* Note, dragging between Spaces on 10.5 does not work. I cannot find a way to ask a window which space it has been moved to, nor tell another window to move to a space.

You can also now hide your window (rather than minimise them) with Ctrl-a h. This is much faster than minimise, and I find Ctrl-a h, Apple-m is a great way to clear my csshX screens away temporarily. Window hiding has also allowed me to improve the retiling performance.

Other changes are minor, including one fix to the nasty infinite loop bug when using enable mode selection.

As always, please report any issues you may come across, preferably on the issues page.

2009-04-09 (Thu)

Thanks to some great publicity from Mac OS X Hints, I have received lots of feedback and bug reports.

Number one issue has been multi-monitor support, and problems related to it. This is now working.

To use it, add a –screen n to your command line, where n is the screen number. It will default to screen zero if omitted.

This was actually a nasty problem since there is no quick AppleScript solution, and the only way to get screen counts and sizes is by calling the AppKit frameworks. This is Objective-C only and since csshX is written in perl, I had to mess with the PerlObjCBridge (or Foundation.pm as it’s known) to get the NSFrame. To make matters worse, NSFrame is not even Objective C, rather it’s a pure C struct. In the end, I use NSValue to give me a string “description” of the data, and parse this with regex’s (differenet for 10.4 and 10.5 naturally!).