[erlang-patches] Support ANSI in the console

Pedram Nimreezi <>
Wed Nov 14 14:49:24 CET 2012


The ttsl driver strips ANSI escape sequences from the console.

This commit addresses that and allows for them to be supported.
        https://github.com/DeadZen/otp/compare/maint...ansi-console
        https://github.com/DeadZen/otp/compare/maint...ansi-console.patch

git fetch git://github.com/DeadZen/otp.git ansi-console

Supplemental Note...
  This has been tested, used and abused for nearly a year, and should
apply cleanly to the last few major versions

Initially the patch was simply:
--- a/erts/emulator/drivers/unix/ttsl_drv.c	2011-05-24 07:16:43.000000000 -0400
+++ b/erts/emulator/drivers/unix/ttsl_drv.c	2011-12-10 14:24:23.000000000 -0500
@@ -912,6 +912,15 @@ static int insert_buf(byte *s, int n)
 		lbuf[lpos++] = (CONTROL_TAG | ((Uint32) ch));
 		ch = 0;
 	    } while (lpos % 8);
+	} else if (ch == '\e') {
+	    write_buf(lbuf + buffpos, lpos - buffpos);
+	    outc('\e');
+
+	    if (llen > lpos) {
+		memcpy(lbuf, lbuf + lpos, llen - lpos);
+	    }
+	    llen -= lpos;
+	    lpos = buffpos = 0;	


Recently I've compared various approaches, however, and decided to
push my patch and findings...

For instance I've compared this change to allowing for the ''\e"
control character 27 to these locations:

https://github.com/DeadZen/otp/blob/d3e3d51dbb21f0fdb125becacb80e34d0565fff7/erts/emulator/drivers/unix/ttsl_drv.c#L901
https://github.com/DeadZen/otp/blob/d3e3d51dbb21f0fdb125becacb80e34d0565fff7/erts/emulator/drivers/unix/ttsl_drv.c#L599
https://github.com/DeadZen/otp/blob/d3e3d51dbb21f0fdb125becacb80e34d0565fff7/erts/emulator/drivers/unix/ttsl_drv.c#L609

but believe, the "console display control characters" section and the
smallest possible change would be here:

https://github.com/DeadZen/otp/blob/d3e3d51dbb21f0fdb125becacb80e34d0565fff7/erts/emulator/drivers/unix/ttsl_drv.c#L915

I have thoroughly tested, including using a forked copy of the lager
application at high speed for extended durations here:
git fetch git://github.com/DeadZen/lager.git colors

For this patch I've reduced the affected lines to the smallest degree
I believe possible. Thank you.


-- 
/* Sincerely
--------------------------------------------------------------
Pedram Nimreezi - Chief Technology Officer  */

// The hardest part of design … is keeping features out. - Donald Norman


More information about the erlang-patches mailing list