summaryrefslogtreecommitdiff
path: root/gcc/diagnostic-color.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2017-10-31 12:57:10 +0100
committerMartin Liska <marxin@gcc.gnu.org>2017-10-31 11:57:10 +0000
commit28f4a4a85f3b95f7ccf7585eaa5cbd50cbe1677d (patch)
tree1cf4d862d50b7877bf04bb3a8fec394f9b192782 /gcc/diagnostic-color.c
parent00da60d4def3782039bef86fbdf07fd620d8b57a (diff)
GCOV: introduce usage of terminal colors.
2017-10-31 Martin Liska <mliska@suse.cz> * color-macros.h: New file. * diagnostic-color.c: Factor out color related to macros to color-macros.h. * doc/gcov.texi: Document -k option. * gcov.c (INCLUDE_STRING): Include string.h. (print_usage): Add -k option. (process_args): Parse it. (pad_count_string): New function. (output_line_beginning): Likewise. (DEFAULT_LINE_START): New macro. (output_lines): Support color output. From-SVN: r254258
Diffstat (limited to 'gcc/diagnostic-color.c')
-rw-r--r--gcc/diagnostic-color.c85
1 files changed, 1 insertions, 84 deletions
diff --git a/gcc/diagnostic-color.c b/gcc/diagnostic-color.c
index b8cf6f2c045..ccbae4ba223 100644
--- a/gcc/diagnostic-color.c
+++ b/gcc/diagnostic-color.c
@@ -24,90 +24,7 @@
# include <windows.h>
#endif
-/* Select Graphic Rendition (SGR, "\33[...m") strings. */
-/* Also Erase in Line (EL) to Right ("\33[K") by default. */
-/* Why have EL to Right after SGR?
- -- The behavior of line-wrapping when at the bottom of the
- terminal screen and at the end of the current line is often
- such that a new line is introduced, entirely cleared with
- the current background color which may be different from the
- default one (see the boolean back_color_erase terminfo(5)
- capability), thus scrolling the display by one line.
- The end of this new line will stay in this background color
- even after reverting to the default background color with
- "\33[m', unless it is explicitly cleared again with "\33[K"
- (which is the behavior the user would instinctively expect
- from the whole thing). There may be some unavoidable
- background-color flicker at the end of this new line because
- of this (when timing with the monitor's redraw is just right).
- -- The behavior of HT (tab, "\t") is usually the same as that of
- Cursor Forward Tabulation (CHT) with a default parameter
- of 1 ("\33[I"), i.e., it performs pure movement to the next
- tab stop, without any clearing of either content or screen
- attributes (including background color); try
- printf 'asdfqwerzxcv\rASDF\tZXCV\n'
- in a bash(1) shell to demonstrate this. This is not what the
- user would instinctively expect of HT (but is ok for CHT).
- The instinctive behavior would include clearing the terminal
- cells that are skipped over by HT with blank cells in the
- current screen attributes, including background color;
- the boolean dest_tabs_magic_smso terminfo(5) capability
- indicates this saner behavior for HT, but only some rare
- terminals have it (although it also indicates a special
- glitch with standout mode in the Teleray terminal for which
- it was initially introduced). The remedy is to add "\33K"
- after each SGR sequence, be it START (to fix the behavior
- of any HT after that before another SGR) or END (to fix the
- behavior of an HT in default background color that would
- follow a line-wrapping at the bottom of the screen in another
- background color, and to complement doing it after START).
- Piping GCC's output through a pager such as less(1) avoids
- any HT problems since the pager performs tab expansion.
-
- Generic disadvantages of this remedy are:
- -- Some very rare terminals might support SGR but not EL (nobody
- will use "gcc -fdiagnostics-color" on a terminal that does not
- support SGR in the first place).
- -- Having these extra control sequences might somewhat complicate
- the task of any program trying to parse "gcc -fdiagnostics-color"
- output in order to extract structuring information from it.
- A specific disadvantage to doing it after SGR START is:
- -- Even more possible background color flicker (when timing
- with the monitor's redraw is just right), even when not at the
- bottom of the screen.
- There are no additional disadvantages specific to doing it after
- SGR END.
-
- It would be impractical for GCC to become a full-fledged
- terminal program linked against ncurses or the like, so it will
- not detect terminfo(5) capabilities. */
-#define COLOR_SEPARATOR ";"
-#define COLOR_NONE "00"
-#define COLOR_BOLD "01"
-#define COLOR_UNDERSCORE "04"
-#define COLOR_BLINK "05"
-#define COLOR_REVERSE "07"
-#define COLOR_FG_BLACK "30"
-#define COLOR_FG_RED "31"
-#define COLOR_FG_GREEN "32"
-#define COLOR_FG_YELLOW "33"
-#define COLOR_FG_BLUE "34"
-#define COLOR_FG_MAGENTA "35"
-#define COLOR_FG_CYAN "36"
-#define COLOR_FG_WHITE "37"
-#define COLOR_BG_BLACK "40"
-#define COLOR_BG_RED "41"
-#define COLOR_BG_GREEN "42"
-#define COLOR_BG_YELLOW "43"
-#define COLOR_BG_BLUE "44"
-#define COLOR_BG_MAGENTA "45"
-#define COLOR_BG_CYAN "46"
-#define COLOR_BG_WHITE "47"
-#define SGR_START "\33["
-#define SGR_END "m\33[K"
-#define SGR_SEQ(str) SGR_START str SGR_END
-#define SGR_RESET SGR_SEQ("")
-
+#include "color-macros.h"
/* The context and logic for choosing default --color screen attributes
(foreground and background colors, etc.) are the following.