From 7a8687e063b3ab22ffd2f1eba03ebe0628745659 Mon Sep 17 00:00:00 2001 From: Jonas 'Sortie' Termansen Date: Mon, 22 Oct 2012 22:46:23 +0200 Subject: [PATCH] Handle ANSI Escape codes in column(1). --- utils/column.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/utils/column.cpp b/utils/column.cpp index 5db25a73..31614b96 100644 --- a/utils/column.cpp +++ b/utils/column.cpp @@ -21,6 +21,7 @@ *******************************************************************************/ #define _SORTIX_SOURCE +#include #include #include #include @@ -37,6 +38,28 @@ size_t lineslength = 0; char** lines = 0; size_t longestline = 0; +size_t measurelength(const char* line) +{ + size_t len = 0; + bool escaped = false; + while ( char c = *line++ ) + { + if ( escaped ) + { + if ( isalpha(c) ) + escaped = false; + continue; + } + if ( c == '\e' ) + { + escaped = true; + continue; + } + len++; + } + return len; +} + bool processline(char* line) { if ( linesused == lineslength ) @@ -50,7 +73,7 @@ bool processline(char* line) } lines[linesused++] = line; - size_t linelen = strlen(line); + size_t linelen = measurelength(line); if ( longestline < linelen ) { longestline = linelen; } return true; }