public void PreviousInput(IConsoleState state) { var inputHistory = state.InputHistory; var input = inputHistory.GetPreviousInput(); WriteText(state, input); }
public void MoveCursorRight(IConsoleState state) { if (state.IsEndOfTextPosition()) { return; } _console.CursorLeft = ++state.ColPosition; }
public void MoveCursorLeft(IConsoleState state) { if (state.IsStartOfTextPosition()) { return; } _console.CursorLeft = --state.ColPosition; }
public void MoveCursorUp(IConsoleState state) { if (state.IsStartOfRowTextPosition()) { return; } --state.TextRowPosition; _console.CursorTop = --state.RowPosition; }
public InteractiveLoop(IConsole console, IConsoleKeyHandler consoleKeyHandler, IConsoleWriter consoleWriter, IReplEngine replEngine, ILoop loop, IConsoleState consoleState) { _console = console; _consoleKeyHandler = consoleKeyHandler; _consoleWriter = consoleWriter; _replEngine = replEngine; _loop = loop; _consoleState = consoleState; }
public async Task Completions(IConsoleState state) { var text = state.Text; var inputHistory = state.InputHistory; var variables = state.Variables; var currentCode = text.ToString(); var allCode = $"{inputHistory.AllInputsAsString()}{Environment.NewLine}{currentCode}"; await _completionsWriter.WriteAllCompletions(allCode, variables); WriteFullLine(state.Prompt, currentCode); }
private void WriteText(IConsoleState state, string?text) { // remove old lines var oldCodeLines = state.TextSplitLines; for (var index = oldCodeLines.Length - 1; index >= 0; index--) { _console.ClearLine(); // if a single or last line of code do not move up in console if (index == 0) { break; } _console.CursorTop -= 1; } // add new lines state.Text.ReplaceWith(text); var codeLines = state.TextSplitLines; var lastLine = ""; for (var index = 0; index < codeLines.Length; index++) { var line = codeLines[index]; var prompt = index == 0 ? state.Prompt : Prompt.Continue; // if not the last line keep adding newline before writing to console var endOfLine = index == codeLines.Length - 1 ? "" : Environment.NewLine; var code = $"{line}{endOfLine}"; _console.Write($"{prompt} {code}"); lastLine = line; } var position = state.Prompt.Length + lastLine.Length + 1; _console.CursorLeft = position; state.ColPosition = position; }
public string Process(IConsoleState state) { var inputKeyCommandMap = _consoleKeyCommands.GetInputKeyCommandMap(); while (true) { var input = _console.ReadKey(intercept: true); if (input.Key == ConsoleKey.Enter) { // set current row position back to bottom of text area especially if multiline edit _console.CursorTop += state.TextSplitLines.Length; break; } if (inputKeyCommandMap.TryGetValue((input.Key, input.Modifiers), out var runCommand)) { runCommand(state); }
public void WriteChar(IConsoleState state, char inputChar) { _editCommands.WriteChar(state, inputChar); }
public void WriteChar(IConsoleState state, char inputChar) { var endText = state.IsTextEmpty() || state.TextColPosition > state.Text.Length ? "" : state.CurrentLineText[state.TextColPosition..];