diff mbox series

[v2,1/3] diagnostics: Enable escape sequence processing on windows consoles

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

Commit Message

Peter0x44 May 9, 2024, 5:01 p.m. UTC
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

Peter0x44 May 11, 2024, 11:37 p.m. UTC | #1
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 mbox series

Patch

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".  */