Message ID | 20240509170157.8534-1-peter0x44@disroot.org |
---|---|
State | New |
Headers | show |
Series | [v2,1/3] diagnostics: Enable escape sequence processing on windows consoles | expand |
9 May 2024 6:02:34 pm Peter Damianov <peter0x44@disroot.org>: > Since windows 10 release v1511, the windows console has had support for > VT100 > escape sequences. We should try to enable this, and utilize it where > possible. > > gcc/ChangeLog: > * diagnostic-color.cc (should_colorize): Enable processing of VT100 > escape sequences on windows consoles > > Signed-off-by: Peter Damianov <peter0x44@disroot.org> > --- > > Forgot to add -v2 to git send-email the first time I sent. Sorry for > the spam. > > gcc/diagnostic-color.cc | 21 ++++++++++++++++----- > 1 file changed, 16 insertions(+), 5 deletions(-) > > diff --git a/gcc/diagnostic-color.cc b/gcc/diagnostic-color.cc > index f01a0fc2e37..3af198654af 100644 > --- a/gcc/diagnostic-color.cc > +++ b/gcc/diagnostic-color.cc > @@ -213,12 +213,23 @@ should_colorize (void) > pp_write_text_to_stream() in pretty-print.cc calls fputs() on > that stream. However, the code below for non-Windows doesn't > seem > to care about it either... */ > - HANDLE h; > - DWORD m; > + HANDLE handle; > + DWORD mode; > + BOOL isconsole = false; > > - h = GetStdHandle (STD_ERROR_HANDLE); > - return (h != INVALID_HANDLE_VALUE) && (h != NULL) > - && GetConsoleMode (h, &m); > + handle = GetStdHandle (STD_ERROR_HANDLE); > + > + if ((handle != INVALID_HANDLE_VALUE) && (handle != NULL)) > + isconsole = GetConsoleMode (handle, &mode); > + > + if (isconsole) > + { > + /* Try to enable processing of VT100 escape sequences */ > + mode |= ENABLE_PROCESSED_OUTPUT | > ENABLE_VIRTUAL_TERMINAL_PROCESSING; > + SetConsoleMode (handle, mode); > + } > + > + return isconsole; > #else > char const *t = getenv ("TERM"); > /* emacs M-x shell sets TERM="dumb". */ > -- > 2.39.2 I asked a windows terminal maintainer to review the patches here: https://github.com/microsoft/terminal/discussions/17219#discussioncomment-9375044 And got an "LGTM". I tested the patches with windows terminal, conhost.exe, and conhost.exe with the "use legacy console" box checked, and they all worked correctly. I think this is okay for trunk.
diff --git a/gcc/diagnostic-color.cc b/gcc/diagnostic-color.cc index f01a0fc2e37..3af198654af 100644 --- a/gcc/diagnostic-color.cc +++ b/gcc/diagnostic-color.cc @@ -213,12 +213,23 @@ should_colorize (void) pp_write_text_to_stream() in pretty-print.cc calls fputs() on that stream. However, the code below for non-Windows doesn't seem to care about it either... */ - HANDLE h; - DWORD m; + HANDLE handle; + DWORD mode; + BOOL isconsole = false; - h = GetStdHandle (STD_ERROR_HANDLE); - return (h != INVALID_HANDLE_VALUE) && (h != NULL) - && GetConsoleMode (h, &m); + handle = GetStdHandle (STD_ERROR_HANDLE); + + if ((handle != INVALID_HANDLE_VALUE) && (handle != NULL)) + isconsole = GetConsoleMode (handle, &mode); + + if (isconsole) + { + /* Try to enable processing of VT100 escape sequences */ + mode |= ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING; + SetConsoleMode (handle, mode); + } + + return isconsole; #else char const *t = getenv ("TERM"); /* emacs M-x shell sets TERM="dumb". */
Since windows 10 release v1511, the windows console has had support for VT100 escape sequences. We should try to enable this, and utilize it where possible. gcc/ChangeLog: * diagnostic-color.cc (should_colorize): Enable processing of VT100 escape sequences on windows consoles Signed-off-by: Peter Damianov <peter0x44@disroot.org> --- Forgot to add -v2 to git send-email the first time I sent. Sorry for the spam. gcc/diagnostic-color.cc | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-)