Projects/mrxvt

About

mrxvt was an attempt at a tabbed manager for Cygwin rxvt windows. It did not actually contain any terminal code, but simply launched rxvt instances and captured them inside its workspace, like so:

Note: The window decoration shown is part of my desktop theme.

Status

mrxvt is currently dead (I can't even find the VB source code for it anymore). The primary reason for discontinuing it was that the W11 library handles focus in such a way that I wasn't able to subclass the window handle properly in VB (they also make a point of using a different window class for each rxvt, which does not help things). There is a feature request for adding tabs to the base rxvt, and that seems the best way to go about this.

I now use screen, which is (finally) stable enough under Cygwin to provide what I want.

Rationale

Being a heavy Cygwin and Mozilla user, I have long wished for tabbed terminals in Windows. Since rxvt works just fine for me and I understand Win32 API calls, I decided to have a go at hacking one myself with the minimum of fuss.

I could have used screen (and I do, every time I get the chance), but there wasn't a stable port of screen for Cygwin at the time, and I used to have all kinds of irritating little issues with it on Cygwin (mosty termcap stuff that I didn't want to have to deal with). That's now gone away.

Design Notes

mrxvt was written in Visual Basic 6.0 (SP5). I did not use or a "proper" programming language because:

  • I can do everything I need (in terms of raw API calls) inside VB
  • It cut down development time to no end (saved me the bother of writing a lot of layout and window management crud in C/C++)
  • Most people already have the necessary runtimes installed - hence a smaller, easier to distribute executable
  • was not very widespread (most people don't have runtimes, etc.)
  • It was supposed to be a very simple solution, not have multitudes of bells and whistles.

Known Issues

  • There was a lot of flickering when launching new rxvt instances. This was due to the way the rxvt port interacts with Windows, but I could not find ways to minimize it.
  • There were no hotkeys to change between windows
  • rxvt processes kept "hanging" (this is an rxvt issue on some systems, not a mrxvt issue, but since it affects usage, it's listed here)

This page is referenced in: