Browse Source

Fix ansi responses not being handling in WSL.

BDisp 8 months ago
parent
commit
6444cc07dd
1 changed files with 7 additions and 7 deletions
  1. 7 7
      Terminal.Gui/ConsoleDrivers/NetDriver/NetEvents.cs

+ 7 - 7
Terminal.Gui/ConsoleDrivers/NetDriver/NetEvents.cs

@@ -77,11 +77,16 @@ internal class NetEvents : IDisposable
                 return Console.ReadKey (intercept);
             }
 
-            if (AnsiEscapeSequenceRequestUtils.IncompleteCkInfos is null && AnsiEscapeSequenceRequests.Statuses.Count > 0)
+            // The delay must be here because it may have a request response after a while
+            // In WSL it takes longer for keys to be available.
+            Task.Delay (100, cancellationToken).Wait (cancellationToken);
+
+            if (!Console.KeyAvailable && AnsiEscapeSequenceRequestUtils.IncompleteCkInfos is null && AnsiEscapeSequenceRequests.Statuses.Count > 0)
             {
                 if (_retries > 1)
                 {
-                    if (AnsiEscapeSequenceRequests.Statuses.TryPeek (out AnsiEscapeSequenceRequestStatus? seqReqStatus) && string.IsNullOrEmpty (seqReqStatus.AnsiRequest.AnsiEscapeSequenceResponse?.Response))
+                    if (AnsiEscapeSequenceRequests.Statuses.TryPeek (out AnsiEscapeSequenceRequestStatus? seqReqStatus)
+                        && string.IsNullOrEmpty (seqReqStatus.AnsiRequest.AnsiEscapeSequenceResponse?.Response))
                     {
                         lock (seqReqStatus.AnsiRequest._responseLock)
                         {
@@ -102,11 +107,6 @@ internal class NetEvents : IDisposable
             {
                 _retries = 0;
             }
-
-            if (!_forceRead)
-            {
-                Task.Delay (100, cancellationToken).Wait (cancellationToken);
-            }
         }
 
         cancellationToken.ThrowIfCancellationRequested ();