示例#1
0
 private void RedirectedHandling()
 {
     // For cases in which input has been redirected from a file
     while (true)
     {
         ByteRead?.Invoke(Console.Read());
     }
 }
        private void HandleInput()
        {
            var mappings = new Dictionary <ConsoleKey, byte[]>()
            {
                { ConsoleKey.Enter, new [] { (byte)'\n' } },
                { ConsoleKey.UpArrow, new [] { ESCCode, CSICode, (byte)'A' } },
                { ConsoleKey.DownArrow, new [] { ESCCode, CSICode, (byte)'B' } },
                { ConsoleKey.RightArrow, new [] { ESCCode, CSICode, (byte)'C' } },
                { ConsoleKey.LeftArrow, new [] { ESCCode, CSICode, (byte)'D' } },
                { ConsoleKey.Delete, new [] { ESCCode, CSICode, (byte)'3', (byte)'~' } },
                { ConsoleKey.Tab, new [] { (byte)'\t' } },
                { ConsoleKey.Backspace, new [] { (byte)127 } }
            };

            while (true)
            {
                var key = Console.ReadKey(true);
                // this is to support Home/End keys
                if (key.Key == (ConsoleKey)0 && (key.Modifiers & ConsoleModifiers.Alt) != 0)
                {
                    ByteRead?.Invoke(ESCCode);
                    ByteRead?.Invoke(CSICode);
                    continue;
                }

                if (mappings.TryGetValue(key.Key, out var sequence))
                {
                    foreach (var b in sequence)
                    {
                        ByteRead?.Invoke(b);
                    }
                }
                else
                {
                    foreach (var b in checker.UTF8Encoder.GetBytes(new [] { key.KeyChar }))
                    {
                        ByteRead?.Invoke(b);
                    }
                }
            }
        }