annotate gcc/color-macros.h @ 144:8f4e72ab4e11

fix segmentation fault caused by nothing next cur_op to end
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Sun, 23 Dec 2018 21:23:56 +0900
parents 84e7813d76e9
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* Terminal color manipulation macros.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 Copyright (C) 2005-2018 Free Software Foundation, Inc.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 This file is part of GCC.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 GCC is free software; you can redistribute it and/or modify it under
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 the terms of the GNU General Public License as published by the Free
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 Software Foundation; either version 3, or (at your option) any later
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 version.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 for more details.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 along with GCC; see the file COPYING3. If not see
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 <http://www.gnu.org/licenses/>. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 #ifndef GCC_COLOR_MACROS_H
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 #define GCC_COLOR_MACROS_H
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 /* Select Graphic Rendition (SGR, "\33[...m") strings. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 /* Also Erase in Line (EL) to Right ("\33[K") by default. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 /* Why have EL to Right after SGR?
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 -- The behavior of line-wrapping when at the bottom of the
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 terminal screen and at the end of the current line is often
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 such that a new line is introduced, entirely cleared with
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 the current background color which may be different from the
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 default one (see the boolean back_color_erase terminfo(5)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 capability), thus scrolling the display by one line.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 The end of this new line will stay in this background color
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 even after reverting to the default background color with
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 "\33[m', unless it is explicitly cleared again with "\33[K"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 (which is the behavior the user would instinctively expect
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 from the whole thing). There may be some unavoidable
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 background-color flicker at the end of this new line because
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 of this (when timing with the monitor's redraw is just right).
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 -- The behavior of HT (tab, "\t") is usually the same as that of
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 Cursor Forward Tabulation (CHT) with a default parameter
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 of 1 ("\33[I"), i.e., it performs pure movement to the next
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 tab stop, without any clearing of either content or screen
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 attributes (including background color); try
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 printf 'asdfqwerzxcv\rASDF\tZXCV\n'
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 in a bash(1) shell to demonstrate this. This is not what the
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 user would instinctively expect of HT (but is ok for CHT).
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 The instinctive behavior would include clearing the terminal
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 cells that are skipped over by HT with blank cells in the
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 current screen attributes, including background color;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 the boolean dest_tabs_magic_smso terminfo(5) capability
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 indicates this saner behavior for HT, but only some rare
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 terminals have it (although it also indicates a special
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53 glitch with standout mode in the Teleray terminal for which
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 it was initially introduced). The remedy is to add "\33K"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 after each SGR sequence, be it START (to fix the behavior
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 of any HT after that before another SGR) or END (to fix the
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 behavior of an HT in default background color that would
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58 follow a line-wrapping at the bottom of the screen in another
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 background color, and to complement doing it after START).
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60 Piping GCC's output through a pager such as less(1) avoids
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 any HT problems since the pager performs tab expansion.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 Generic disadvantages of this remedy are:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 -- Some very rare terminals might support SGR but not EL (nobody
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65 will use "gcc -fdiagnostics-color" on a terminal that does not
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 support SGR in the first place).
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 -- Having these extra control sequences might somewhat complicate
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 the task of any program trying to parse "gcc -fdiagnostics-color"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 output in order to extract structuring information from it.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 A specific disadvantage to doing it after SGR START is:
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 -- Even more possible background color flicker (when timing
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 with the monitor's redraw is just right), even when not at the
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73 bottom of the screen.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 There are no additional disadvantages specific to doing it after
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 SGR END.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 It would be impractical for GCC to become a full-fledged
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78 terminal program linked against ncurses or the like, so it will
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 not detect terminfo(5) capabilities. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 #define COLOR_SEPARATOR ";"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 #define COLOR_NONE "00"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83 #define COLOR_BOLD "01"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 #define COLOR_UNDERSCORE "04"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 #define COLOR_BLINK "05"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 #define COLOR_REVERSE "07"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 #define COLOR_FG_BLACK "30"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 #define COLOR_FG_RED "31"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 #define COLOR_FG_GREEN "32"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90 #define COLOR_FG_YELLOW "33"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 #define COLOR_FG_BLUE "34"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 #define COLOR_FG_MAGENTA "35"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 #define COLOR_FG_CYAN "36"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 #define COLOR_FG_WHITE "37"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 #define COLOR_BG_BLACK "40"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96 #define COLOR_BG_RED "41"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 #define COLOR_BG_GREEN "42"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98 #define COLOR_BG_YELLOW "43"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 #define COLOR_BG_BLUE "44"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 #define COLOR_BG_MAGENTA "45"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 #define COLOR_BG_CYAN "46"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 #define COLOR_BG_WHITE "47"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 #define SGR_START "\33["
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104 #define SGR_END "m\33[K"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 #define SGR_SEQ(str) SGR_START str SGR_END
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106 #define SGR_RESET SGR_SEQ("")
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108 #endif /* GCC_COLOR_MACROS_H */