diff -ruN erts/emulator/drivers/unix/ttsl_drv.c erts/emulator/drivers/unix/ttsl_drv.c --- erts/emulator/drivers/unix/ttsl_drv.c 2008-06-10 07:47:20.000000000 -0500 +++ erts/emulator/drivers/unix/ttsl_drv.c 2008-06-16 13:40:53.000000000 -0500 @@ -61,7 +61,7 @@ /* Terminal capabilites in which we are interested. */ static char *capbuf; -static char *up, *down, *left, *right; +static char *up, *down, *left, *right, *clear; static int cols, xn; static volatile int cols_needs_update = FALSE; @@ -71,6 +71,7 @@ #define OP_INSC 2 #define OP_DELC 3 #define OP_BEEP 4 +#define OP_CLEAR 5 /* Control op */ #define CTRL_OP_GET_WINSIZE 100 @@ -344,6 +345,9 @@ case OP_BEEP: outc('\007'); break; + case OP_CLEAR: + tputs(clear, lpos, outc); + break; default: /* Unknown op, just ignore. */ break; @@ -686,7 +690,8 @@ if (!(left = tgetflag("bs") ? "\b" : tgetstr("bc", &c))) left = "\b"; /* Can't happen - but does on Solaris 2 */ right = tgetstr("nd", &c); - if (up && down && left && right) + clear = tgetstr("cl", &c); + if (up && down && left && right && clear) return TRUE; false: if (env && env != capbuf) diff -ruN lib/kernel/src/user_drv.erl lib/kernel/src/user_drv.erl --- lib/kernel/src/user_drv.erl 2007-11-26 12:55:44.000000000 -0600 +++ lib/kernel/src/user_drv.erl 2008-06-16 13:47:13.000000000 -0500 @@ -28,6 +28,7 @@ -define(OP_INSC,2). -define(OP_DELC,3). -define(OP_BEEP,4). +-define(OP_CLEAR,5). % Control op -define(CTRL_OP_GET_WINSIZE,100). @@ -212,6 +213,10 @@ port_bytes([$\^G|_Bs], Iport, Oport, _Curr, User, Gr) -> handle_escape(Iport, Oport, User, Gr); +port_bytes([$\^L|_Bs], Iport, Oport, Curr, User, Gr) -> + Oport ! {self(),{command,[?OP_CLEAR]}}, + server_loop(Iport, Oport, Curr, User, Gr); + port_bytes([$\^C|_Bs], Iport, Oport, Curr, User, Gr) -> interrupt_shell(Iport, Oport, Curr, User, Gr);