[v2,1/3] diagnostics: Enable escape sequence processing on windows consoles
Checks
Context |
Check |
Description |
linaro-tcwg-bot/tcwg_gcc_build--master-arm |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_gcc_check--master-aarch64 |
success
|
Testing passed
|
linaro-tcwg-bot/tcwg_gcc_check--master-arm |
success
|
Testing passed
|
Commit Message
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(-)
Comments
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.
@@ -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". */