public static selectRange ClearAndPrint(this cursorZone zone, cursor c, String content) { selectRange before = null; before = zone.ClearZoneAndSet(); Console.CursorLeft = zone.x; Console.CursorTop = zone.innerHeight; consoleWriteLine(content); Console.CursorLeft = zone.innerLeftPosition + c.x; Console.CursorTop = zone.innerHeight + c.y; return(before); }
public void run() { Console.CursorVisible = true; //ConsoleKey output = ConsoleKey.NoName; // = new Boolean(); zone = new cursorZone(Console.BufferWidth, 1, 0); //Console.WriteLine(); DateTime startTime = DateTime.Now; DateTime lastReminder = DateTime.Now; doRedraw(); while (active) { String input = ""; Boolean redraw = false; if (Console.KeyAvailable == false) { Thread.Sleep(100); continue; } if (Console.KeyAvailable) { redraw = true; ConsoleKeyInfo cki = Console.ReadKey(false); if (cki.Modifiers.HasFlag(ConsoleModifiers.Alt)) { input = "ALT+"; } if (cki.Modifiers.HasFlag(ConsoleModifiers.Control)) { input = "CTRL+"; } if (cki.Modifiers.HasFlag(ConsoleModifiers.Shift)) { input = "SHIFT+"; } input += cki.Key.ToString(); switch (cki.Key) { case ConsoleKey.F1: case ConsoleKey.F2: case ConsoleKey.F3: case ConsoleKey.F4: case ConsoleKey.F5: case ConsoleKey.F6: case ConsoleKey.F7: case ConsoleKey.F8: case ConsoleKey.F9: case ConsoleKey.F10: case ConsoleKey.F11: case ConsoleKey.F12: case ConsoleKey.Escape: current = input + cki.Key.ToString(); specialCall = cki.Key; active = false; break; case ConsoleKey.DownArrow: if (historyIndex > 0) { historyIndex--; } break; case ConsoleKey.UpArrow: if (historyIndex < history.Count()) { historyIndex--; } break; case ConsoleKey.Tab: break; case ConsoleKey.Enter: active = false; break; case ConsoleKey.Home: c.x = 0; break; case ConsoleKey.End: c.moveTo(current.Length, c.y); break; case ConsoleKey.LeftArrow: c.prev(); break; case ConsoleKey.RightArrow: c.next(); break; case ConsoleKey.Delete: if (c.x < current.Length) { current = current.Remove(c.x, 1); } break; case ConsoleKey.Backspace: c.prev(1); if (c.x < current.Length) { current = current.Remove(c.x, 1); } break; case ConsoleKey.Spacebar: default: if (cki.KeyChar != char.MinValue) { if (c.x < current.Length) { current = current.Insert(c.x, cki.KeyChar.ToString()); } else { current = current + cki.KeyChar.ToString(); } c.next(false); } break; } } else { if (startTime.Subtract(lastReminder).TotalSeconds > 5) { lastReminder = DateTime.Now; redraw = true; } else { //Thread.Sleep(500); } } if (redraw) { doRedraw(); // Loop until input is entered. } } zone.ClearZoneAndSet(); Console.CursorLeft = 0; }