Example #1
0
        public void PreviousInput(IConsoleState state)
        {
            var inputHistory = state.InputHistory;
            var input        = inputHistory.GetPreviousInput();

            WriteText(state, input);
        }
Example #2
0
        public void MoveCursorRight(IConsoleState state)
        {
            if (state.IsEndOfTextPosition())
            {
                return;
            }

            _console.CursorLeft = ++state.ColPosition;
        }
Example #3
0
        public void MoveCursorLeft(IConsoleState state)
        {
            if (state.IsStartOfTextPosition())
            {
                return;
            }

            _console.CursorLeft = --state.ColPosition;
        }
Example #4
0
        public void MoveCursorUp(IConsoleState state)
        {
            if (state.IsStartOfRowTextPosition())
            {
                return;
            }

            --state.TextRowPosition;
            _console.CursorTop = --state.RowPosition;
        }
Example #5
0
 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;
 }
Example #6
0
        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);
        }
Example #7
0
        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;
        }
Example #8
0
        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);
                }
Example #9
0
 public void WriteChar(IConsoleState state, char inputChar)
 {
     _editCommands.WriteChar(state, inputChar);
 }
Example #10
0
 public void WriteChar(IConsoleState state, char inputChar)
 {
     var endText = state.IsTextEmpty() || state.TextColPosition > state.Text.Length
         ? ""
         : state.CurrentLineText[state.TextColPosition..];