Просмотр исходного кода

Finally fixed IncompleteCkInfos handling in NetDriver.

BDisp 8 месяцев назад
Родитель
Сommit
c6512e62de
1 измененных файлов с 15 добавлено и 2 удалено
  1. 15 2
      Terminal.Gui/ConsoleDrivers/NetDriver/NetEvents.cs

+ 15 - 2
Terminal.Gui/ConsoleDrivers/NetDriver/NetEvents.cs

@@ -29,7 +29,7 @@ internal class NetEvents : IDisposable
 
 
     public InputResult? DequeueInput ()
     public InputResult? DequeueInput ()
     {
     {
-        while (_inputReadyCancellationTokenSource is { })
+        while (_inputReadyCancellationTokenSource is { Token.IsCancellationRequested: false })
         {
         {
             _waitForStart.Set ();
             _waitForStart.Set ();
 
 
@@ -163,11 +163,20 @@ internal class NetEvents : IDisposable
                             return;
                             return;
                         }
                         }
 
 
+                        var ckiAlreadyResized = false;
+
                         if (AnsiEscapeSequenceRequestUtils.IncompleteCkInfos is { })
                         if (AnsiEscapeSequenceRequestUtils.IncompleteCkInfos is { })
                         {
                         {
+                            ckiAlreadyResized = true;
+
                             _cki = AnsiEscapeSequenceRequestUtils.ResizeArray (consoleKeyInfo, _cki);
                             _cki = AnsiEscapeSequenceRequestUtils.ResizeArray (consoleKeyInfo, _cki);
                             _cki = AnsiEscapeSequenceRequestUtils.InsertArray (AnsiEscapeSequenceRequestUtils.IncompleteCkInfos, _cki);
                             _cki = AnsiEscapeSequenceRequestUtils.InsertArray (AnsiEscapeSequenceRequestUtils.IncompleteCkInfos, _cki);
                             AnsiEscapeSequenceRequestUtils.IncompleteCkInfos = null;
                             AnsiEscapeSequenceRequestUtils.IncompleteCkInfos = null;
+
+                            if (_cki.Length > 1 && _cki [0].KeyChar == '\u001B')
+                            {
+                                _isEscSeq = true;
+                            }
                         }
                         }
 
 
                         if ((consoleKeyInfo.KeyChar == (char)KeyCode.Esc && !_isEscSeq)
                         if ((consoleKeyInfo.KeyChar == (char)KeyCode.Esc && !_isEscSeq)
@@ -205,7 +214,11 @@ internal class NetEvents : IDisposable
                             else
                             else
                             {
                             {
                                 newConsoleKeyInfo = consoleKeyInfo;
                                 newConsoleKeyInfo = consoleKeyInfo;
-                                _cki = AnsiEscapeSequenceRequestUtils.ResizeArray (consoleKeyInfo, _cki);
+
+                                if (!ckiAlreadyResized)
+                                {
+                                    _cki = AnsiEscapeSequenceRequestUtils.ResizeArray (consoleKeyInfo, _cki);
+                                }
 
 
                                 if (Console.KeyAvailable)
                                 if (Console.KeyAvailable)
                                 {
                                 {