The Grumpy Editor's guide to terminal emulators
| This article is part of the LWN Grumpy Editor series. |
Once upon a time, an ADM-3A
terminal looked like a very nice interface. Those days have passed,
however;
for many of the years
since, the definitive terminal emulator has been xterm, which was
packaged with the original X11R1 release. xterm was, for its time, a
marvel of configurability, with a nice set of menus for controlling its
behavior, setting fonts, and providing that all-important access to the
"reset" function for when it gets stuck in the VT100 graphics mode.
There is one other xterm feature which has never been matched anywhere: no other terminal emulator comes with its own Tektronix 4014 storage tube emulator mode built in. Your editor who, along with many co-workers, had sunburned his face working with real storage-tube terminals appreciated this mode at the time. It has been a while, however, since your editor (or just about anybody else) has had to run software which expects to talk to such a terminal; even so, every xterm still has a Tektronix terminal lurking within it.
In general, little has happened with xterm over the years, with the exception of the addition of color support. For the most part, development in terminal emulators has happened elsewhere. Your editor has finally decided that it is time to take a look around, and, perhaps, move beyond the venerable xterm.
But first: a word on color in terminal emulators; this is a subject on which your editor can get truly grumpy. Many developers have jumped into adding color support to terminal-oriented applications with little regard for basic human factors and usability. A usable terminal should not look like the Las Vegas strip at night. Color usage, to be effective, must be subtle and carefully thought out. In particular:
- Users must be given obvious and easy control over color usage.
Different people have very different combinations of monitors, background
colors, limitations in color perception, and general preferences.
There is no single choice of colors that will work for any substantial
portion of the user community.
- The basic nature of the human visual system is that it separates
objects based on intensity differences, not color differences.
If you are designing colors for a white-background display, every
color you use must be, with few exceptions, a low-intensity color.
Hot pink on white may look snazzy, but people will have to work hard
to read it.
- Dark blue should never be used for anything somebody is expected to read. Short wavelength colors tend to focus just in front of the retina, and will thus always be a little bit blurry.
Color xterm thus fails on all counts. The colors can be configured via the X resource database, but it is not straightforward. The default colors are on the garish side, and they are too bright.
For years, the default replacement for xterm was rxvt. This terminal
emulator is, for all practical purposes, a version of xterm with a lot of
the extra stuff (such as the Tektronix mode) stripped out. It does live up
to its promise of being smaller, taking just over half the virtual memory
required by xterm. rxvt, however, suffers from a lack of maintenance (last
release was November, 2001, with a development version showing a release in
March, 2003), poor default colors, and no
menus for run-time configuration. This terminal emulator has been dropped
from a number of modern distributions.
(As an aside, rxvt, like most other terminal emulators, dropped the xterm/Xaw scrollbar. This is a big loss; no other scrollbar is as useful as the old Xaw implementation, which gives very precise control over just how much the window is scrolled. Wheel mice have made good scrollbars less important, but your editor wishes that developers interested in usability wouldn't so casually drop interaction modes which are clearly better).
If you want to know the current state of the art in terminal emulation, of course, you have to look at what the desktop projects are doing. Your editor is happy to report that neither GNOME nor KDE has neglected the lowly terminal emulator.
GNOME's entry is gnome-terminal. This terminal emulator does all of the
stuff that one would expect of an xterm replacement, with a number of
useful new goodies:
- Tabs. A tabbed terminal emulator turns out to be just as useful as
a tabbed web browser. If you tend to have a lot of things going on at
once and limited desk space, tabs make life much easier.
- Nice configurability. It is easy to eliminate gnome-terminal's most
obnoxious features (blinking cursor, space-wasting menu bar), tweak
fonts and colors, etc. The default colors are also relatively
good, at least for people who work in a white-background mode.
- Multiple profiles. Each tabbed session can have its own fonts, colors, titles, etc. If you tend to keep tabs around for specific purposes (one could, for example, keep a root shell in one tab), you can tweak the presentation to make the current task immediately obvious.
gnome-terminal also has a nice feature in that it makes the pointer fade away as soon as the user starts typing. No more moving the mouse around to get the pointer out of your way. An invisible pointer might seem like a human factors problem in its own right, but the simple fact is that you generally have to move the pointer to find it anyway.
Your editor's biggest complaint about gnome-terminal might be that scrolling with the mouse wheel is a relatively coarse operation; xterm scrolls in smaller steps unless the shift key is held. The number of lines to scroll on a mouse wheel event would be a nice addition to the configuration screen.
Konsole, KDE's
terminal emulator, has most of the features described above.
In addition, Konsole offers:
- Bookmarks. In the Konsole world, a bookmark is just a saved directory
path; selecting a bookmark causes Konsole to feed a cd
command to the underlying shell.
- History browsing. Konsole can search for a string in the past
history, making it easy to go back and see what happened earlier.
- Notifications. When asked, Konsole will monitor a session for activity (or, optionally, the lack thereof) and notify the user when it happens. If you want to know right away when that long make finishes, Konsole can tell you. It also can notify you when something rings a bell in one of your sessions; such sessions are also annotated with a little bell icon in the tab bar.
Konsole, too, will hide the pointer. Unlike gnome-terminal, however, it does not wait until you start typing, but hides it regardless after a few seconds. Konsole comes with a reasonable set of default colors, and provides user control as well. The color editor works by way of "schemas," and is rather awkward to work with. The gnome-terminal profile-based mechanism seems more straightforward.
Both gnome-terminal and Konsole will let you do crazy things, like putting a background image into the terminal window. Such features make for nice screenshot eye candy, but they are not good for usability. Fortunately, nobody seems to set up either emulator with background images by default.
Both Konsole and gnome-terminal make it easy to change fonts - if you like the options provided. Your editor, who long since found a monospace X font which optimizes both readability and screen space, very much misses the ability to chose an arbitrary X font. It is probably possible by digging under the hood somewhere, but the configuration screens are not helpful in this regard. One should also note that both terminal emulators are memory hogs, requiring vastly more virtual and physical memory than xterm to run.
That notwithstanding, it is clear that both desktop projects have managed to improve the state of the art in terminal emulation. Even better, they have both managed to (1) avoid the temptation to ruin usability with flashy eye candy, and (2) retain a full set of configuration options so that this crucial tool can be tweaked to each user's needs. Congratulations would seem to be in order.
[For completeness: other terminal emulators out there include
9term, the Plan 9
entry; aterm, an rxvt-derived
emulator with background image support; and Eterm, an emulator which prioritizes fancy
backgrounds well above readability or usability (see image at left). There are also several
emulators designed around non-western character sets, which your editor is
in no position to review usefully.]