diff options
author | Peter Wu <lekensteyn@gmail.com> | 2013-12-07 17:44:12 +0100 |
---|---|---|
committer | Peter Wu <lekensteyn@gmail.com> | 2013-12-07 17:44:12 +0100 |
commit | 4ec4c36e111254ebdfa8001f845003a99e81193e (patch) | |
tree | 22d227c31e8d75e5bb3f346e560b421a26621801 | |
parent | 621061e800447bc083a25cca60fe3a8062fe097e (diff) | |
download | scripts-4ec4c36e111254ebdfa8001f845003a99e81193e.tar.gz |
common-bytes: fix color termination
Previously, the colors were not cleared as an attempt to optimize
printing. New approach (requiring less LOC as well): print color if
it does not equal the current state (previous color).
-rwxr-xr-x | common-bytes.py | 39 |
1 files changed, 17 insertions, 22 deletions
diff --git a/common-bytes.py b/common-bytes.py index 1210ec0..2376fb6 100755 --- a/common-bytes.py +++ b/common-bytes.py @@ -129,12 +129,19 @@ def mark_skippable(colormap, line_width): return skip_mask +colors = { +CELL_ALLSAME: CLEAR_COLOR, +CELL_COMMON: "\033[0;32m", # green, +CELL_COMMON_SHARED: "\033[0;33m", # yellow +CELL_OUTLIER: "\033[1;31m", # red +} + # Display input, coloring changes def display_changes(lines, line_width, colormap, skip_mask, enable_skip): skipping = False for lineno, line in enumerate(lines): line_out = "" - is_colored = False + prev_color = CLEAR_COLOR line_color = colormap[lineno] for col in range(0, line_width): # skip common cells? @@ -144,37 +151,25 @@ def display_changes(lines, line_width, colormap, skip_mask, enable_skip): continue elif skip_mask[col] > 0: # N columns can be skipped (N = skip_mask[col]) - line_out += "\033[1;30m..{}..".format(skip_mask[col]) - is_colored = True + prev_color = "\033[1;30m" + line_out += prev_color + "..{}..".format(skip_mask[col]) skipping = True continue else: # end of skippable columns skipping = False - # only change colors if not skipping - if skip_mask[col] != -1: - coloring = line_color[col] - if coloring == CELL_ALLSAME: - if is_colored: - line_out += CLEAR_COLOR - is_colored = False - elif coloring == CELL_COMMON: - line_out += "\033[0;32m" # green - is_colored = True - elif coloring == CELL_COMMON_SHARED: - line_out += "\033[0;33m" # yellow - is_colored = True - elif coloring == CELL_OUTLIER: - line_out += "\033[1;31m" # red - is_colored = True - else: - raise AssertionError("Invalid coloring state") + # apply coloring + coloring = line_color[col] + new_color = colors[coloring] + if prev_color != new_color: + line_out += new_color + prev_color = new_color line_out += line[col] # Any colors must be cleared at the end of the line - if is_colored: + if prev_color != CLEAR_COLOR: line_out += CLEAR_COLOR print(line_out) |