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); } } } }