Something is wrong with the way aterm uses the termios interface,
at least on OpenBSD.
Start aterm and watch the output of "stty -a".
The "status" special character is set randomly, more often it is not
even a control character, making it impossible to use certain letters
as program input.
The diff below applies to ${PORTSDIR}/x11/aterm.
Please test and comment, or try to come up with a better fix. :-)
At a glance, get_ttymode() could be returning a termios structure
where the c_cc array is only partially initialized. I'm tempted to
blame it on the macro definitions in rxvt.h, but I don't have the
time to take a closer look now.
(By the way: aterm 1.0.0 would likely have the same problem.)
Index: patches/patch-src_command_c
===================================================================
RCS file: /cvs/ports/x11/aterm/patches/patch-src_command_c,v
retrieving revision 1.2
diff -u -p -r1.2 patch-src_command_c
--- patches/patch-src_command_c 16 Sep 2004 17:07:11 -0000 1.2
+++ patches/patch-src_command_c 22 Mar 2006 00:49:48 -0000
@@ -1,5 +1,5 @@
---- src/command.c.orig Thu Sep 6 10:38:07 2001
-+++ src/command.c Wed Sep 15 20:38:55 2004
+--- src/command.c.orig Thu Sep 6 18:38:07 2001
++++ src/command.c Wed Mar 22 01:50:30 2006
@@ -477,6 +477,16 @@ get_pty(void)
ptydev = ttydev = _getpty(&fd, O_RDWR | O_NDELAY, 0622, 0);
if (ptydev == NULL)
@@ -17,7 +17,27 @@
#elif defined (__svr4__) || defined(__CYGWIN32__) || defined(__lnx21__)
{
extern char *ptsname();
-@@ -2148,11 +2158,23 @@ process_x_event(XEvent * ev)
+@@ -759,6 +769,9 @@ debug_ttymode(ttymode_t * ttymode)
+ # ifdef VLNEXT
+ FOO(VLNEXT, "VLNEXT");
+ # endif
++# ifdef VSTATUS
++ FOO(VSTATUS, "VSTATUS");
++# endif
+ fprintf(stderr, "\n\n");
+ # undef FOO
+ # endif /* HAVE_TERMIOS_H */
+@@ -817,6 +830,9 @@ get_ttymode(ttymode_t * tio)
+ # if VTIME != VEOL
+ tio->c_cc[VTIME] = 0;
+ # endif
++# ifdef VSTATUS
++ tio->c_cc[VSTATUS] = CSTATUS;
++# endif
+
+ /* input modes */
+ tio->c_iflag = (BRKINT | IGNPAR | ICRNL | IXON
+@@ -2148,11 +2164,23 @@ process_x_event(XEvent * ev)
static int bypass_keystate = 0;
int reportmode;
static int csrO = 0; /* Hops - csr offset in thumb/slider */
@@ -42,7 +62,7 @@
break;
case ClientMessage:
-@@ -2217,6 +2239,9 @@ process_x_event(XEvent * ev)
+@@ -2217,6 +2245,9 @@ process_x_event(XEvent * ev)
case FocusIn:
if (!TermWin.focus) {