예제 #1
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="controllers">Controllers</param>
        /// <param name="variables">Variables</param>
        /// <param name="logs">Logs</param>
        /// <param name="networkManager">Network manger</param>
        /// <param name="consoleReaderInit">Console reader init</param>
        /// <param name="consoleWriterInit">Console writer init</param>
        /// <param name="logger">Logger</param>
        /// <param name="blockchain">Blockchain</param>
        /// <param name="vmFactory">VM Factory</param>
        public Prompt
        (
            IEnumerable <IPromptController> controllers,
            IPromptUserVariables variables,
            ILogBag logs,
            INetworkManager networkManager,
            IConsoleReader consoleReaderInit,
            IConsoleWriter consoleWriterInit,
            Core.Logging.ILogger <Prompt> logger,
            IBlockchain blockchain
        )
        {
            _networkManager = networkManager;
            _consoleReader  = consoleReaderInit;
            _consoleWriter  = consoleWriterInit;
            _logger         = logger;
            _blockchain     = blockchain;
            _logs           = logs;
            _variables      = variables;

            // Get controllers

            _commandAutocompleteCache = new AutoCommandComplete();
            _commandCache             = new Dictionary <string[], PromptCommandAttribute>();
            _commandCache.Cache(this, _commandAutocompleteCache);

            foreach (var controller in controllers)
            {
                _commandCache.Cache(controller, _commandAutocompleteCache);
            }
        }
        public ActionResult GetCustRoad(string cond)
        {
            try
            {
                IAutoCompleteHandler handler = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler;
                List <doCustRoad>    lst     = handler.GetCustRoad(cond);


                List <string> strList = new List <string>();
                foreach (doCustRoad r in lst)
                {
                    strList.Add(r.Road);
                }

                //string xml = CommonUtil.ConvertToXml<doCustRoad>(lst);

                return(Json(strList.ToArray()));
            }
            catch (Exception ex)
            {
                ObjectResultData res = new ObjectResultData();
                res.AddErrorMessage(ex);
                return(Json(res));
            }
        }
예제 #3
0
 public OpenModConsoleInputOutput(
     ILoggerFactory loggerFactory,
     IAutoCompleteHandler autoCompleteHandler)
 {
     m_CommandQueue        = new ConcurrentQueue <string>();
     m_AutoCompleteHandler = autoCompleteHandler;
     m_Logger = loggerFactory.CreateLogger("SDG.Unturned");
 }
예제 #4
0
        public ActionResult GetInstrumentCodeAll(string cond)
        {
            ObjectResultData res = new ObjectResultData();

            try
            {
                IAutoCompleteHandler hand = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler;
                res.ResultData = hand.GetInstrumentCodeAll(cond, null);
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }

            return(Json(res));
        }
예제 #5
0
        public ActionResult GetInstrumentCodeExpansionChild(string cond)
        {
            ObjectResultData res = new ObjectResultData();

            try
            {
                IAutoCompleteHandler hand = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler;
                res.ResultData = hand.GetInstrumentCodeAll(cond, ExpansionType.C_EXPANSION_TYPE_CHILD);
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }

            return(Json(res));
        }
예제 #6
0
파일: Prompt.cs 프로젝트: shargon/neo-sharp
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="controllers">Controllers</param>
        /// <param name="variables">Variables</param>
        /// <param name="logs">Logs</param>
        /// <param name="networkManager">Network manger</param>
        /// <param name="consoleHandler">Console handler</param>
        /// <param name="logger">Logger</param>
        /// <param name="blockchain">Blockchain</param>
        /// <param name="vmFactory">VM Factory</param>
        public Prompt
        (
            IEnumerable <IPromptController> controllers,
            IPromptUserVariables variables,
            ILogBag logs,
            INetworkManager networkManager,
            IConsoleHandler consoleHandler,
            Core.Logging.ILogger <Prompt> logger,
            IBlockchain blockchain
        )
        {
            _networkManager = networkManager;
            _consoleHandler = consoleHandler;
            _logger         = logger;
            _blockchain     = blockchain;
            _logs           = logs;
            _variables      = variables;

            // Get controllers

            _commandAutocompleteCache = new AutoCommandComplete();
            _commandCache             = new Dictionary <string[], PromptCommandAttribute>();
            _commandCache.Cache(this, _commandAutocompleteCache);

            foreach (var controller in controllers)
            {
                _commandCache.Cache(controller, _commandAutocompleteCache);
            }

            // Help autocomplete

            var ls = new List <string>();

            foreach (var keys in _commandCache.Keys)
            {
                foreach (var key in keys)
                {
                    if (_commandCache.TryGetValue(keys, out var value) && !ls.Contains(value.Command))
                    {
                        ls.Add(value.Command);
                    }
                }
            }

            CommandAutoCompleteAttribute.Availables = ls.OrderBy(u => u).ToArray();
        }
예제 #7
0
        public ActionResult GetSupplierName(string cond)
        {
            ObjectResultData res = new ObjectResultData();

            try
            {
                IAutoCompleteHandler hand = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler;
                List <string>        lst  = hand.GetSupplierName(cond);


                res.ResultData = lst;
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }
            return(Json(res));
        }
예제 #8
0
        /// <summary>
        /// Get employee code match to cond for auto complete textbox.
        /// </summary>
        /// <param name="cond"></param>
        /// <returns></returns>
        public ActionResult MAS080_EmployeeCode(string cond)
        {
            ObjectResultData res      = new ObjectResultData();
            List <string>    listCode = new List <string>();

            try
            {
                IAutoCompleteHandler handler = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler;
                listCode = handler.GetEmployeeCode(cond);
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }

            res.ResultData = listCode.ToArray();
            return(Json(res));
        }
예제 #9
0
        public ActionResult GetMaker(string cond)
        {
            try
            {
                IAutoCompleteHandler        hand = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler;
                List <dtGetInstrumentMaker> lst  = hand.GetInstrumentMaker(cond);
                List <string> strList            = new List <string>();

                foreach (var l in lst)
                {
                    strList.Add(l.Maker);
                }

                return(Json(strList.ToArray()));
            }
            catch (Exception ex)
            {
                ObjectResultData res = new ObjectResultData();
                res.AddErrorMessage(ex);
                return(Json(res));
            }
        }
예제 #10
0
        public ActionResult GetSubcontractorNameLC(string cond)
        {
            try
            {
                IAutoCompleteHandler         handler = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler;
                List <doSubcontractorNameLC> lst     = handler.GetSubcontractorNameLC(cond);

                List <string> strList = new List <string>();

                foreach (var l in lst)
                {
                    strList.Add(l.SubcontractorName);
                }
                return(Json(strList.ToArray()));
            }
            catch (Exception ex)
            {
                ObjectResultData res = new ObjectResultData();
                res.AddErrorMessage(ex);
                return(Json(res));
            }
        }
예제 #11
0
        public ActionResult GetSiteSubDistrictLC(string cond)
        {
            ObjectResultData res = new ObjectResultData();

            try
            {
                IAutoCompleteHandler       hand = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler;
                List <dtSiteSubDistrictLC> lst  = hand.GetSiteSubDistrictLC(cond);

                List <string> strList = new List <string>();
                foreach (var l in lst)
                {
                    strList.Add(l.SubDistrictLC);
                }
                res.ResultData = strList;
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }
            return(Json(res));
        }
        /// <summary>
        /// Get local billing address match to cond for using in auto complete textbox.
        /// </summary>
        /// <param name="cond"></param>
        /// <returns></returns>
        public ActionResult GetAddressLC(string cond)
        {
            ObjectResultData res           = new ObjectResultData();
            List <string>    listAddressLC = new List <string>();

            try
            {
                IAutoCompleteHandler          hand = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler;
                List <doBillingAddressNameLC> lst  = hand.GetBillingAddressNameLC(cond);

                foreach (var item in lst)
                {
                    listAddressLC.Add(item.AddressLC);
                }
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }
            res.ResultData = listAddressLC.ToArray();
            return(Json(res));
        }
예제 #13
0
        public ActionResult MAS090_GetInatrumentName(string cond)
        {
            ObjectResultData res          = new ObjectResultData();
            List <string>    listInstName = new List <string>();

            try
            {
                IAutoCompleteHandler    handler = ServiceContainer.GetService <IAutoCompleteHandler>() as IAutoCompleteHandler;
                List <doInstrumentName> lst     = handler.GetInstrumentName(cond);

                foreach (var item in lst)
                {
                    listInstName.Add(item.InstrumentName);
                }
            }
            catch (Exception ex)
            {
                res.AddErrorMessage(ex);
            }

            res.ResultData = listInstName.ToArray();
            return(Json(res));
        }
예제 #14
0
 public OpenModWindowsConsoleInputOutput(
     ILoggerFactory loggerFactory,
     IConfiguration configuration,
     IAutoCompleteHandler autoCompleteHandler) : base(loggerFactory, configuration, autoCompleteHandler)
 {
 }
예제 #15
0
 public SerilogWindowsConsoleInputOutput(
     ILoggerFactory loggerFactory,
     IAutoCompleteHandler autoCompleteHandler) : base(loggerFactory, autoCompleteHandler)
 {
 }
예제 #16
0
        public static void Cache(this IDictionary <string[], PromptCommandAttribute> cache, object instance, IAutoCompleteHandler autoComplete)
        {
            foreach (var mi in instance.GetType().GetMethods
                     (
                         BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance
                     ))
            {
                foreach (var atr in mi.GetCustomAttributes <PromptCommandAttribute>())
                {
                    if (atr == null)
                    {
                        continue;
                    }

                    atr.SetMethod(instance, mi);
                    cache.Add(atr.Commands, atr);

                    if (autoComplete == null)
                    {
                        continue;
                    }

                    if (autoComplete.TryGetValue(atr.Command, out var value))
                    {
                        value.Add(mi.GetParameters());
                    }
                    else
                    {
                        var ls = new List <ParameterInfo[]>
                        {
                            mi.GetParameters()
                        };

                        autoComplete.Add(atr.Command, ls);
                    }
                }
            }
        }
예제 #17
0
 public KeyHandler(IConsole console, List <string> history, IAutoCompleteHandler autoCompleteHandler)
     : this(console, history, autoCompleteHandler, string.Empty)
 {
 }
예제 #18
0
        /// <inheritdoc />
        public string ReadFromConsole(IAutoCompleteHandler autocomplete = null)
        {
            State = ConsoleReaderState.Reading;

            // Write prompt

            WritePrompt();

            // If have something loaded

            if (TryReadManualInput(out var manual))
            {
                State = ConsoleReaderState.ReadingDirty;

                // Print it
                WriteLine(manual, ConsoleOutputStyle.Input);

                // Use it
                State = ConsoleReaderState.None;

                return(manual);
            }

            // Read from console

            var state = new ConsoleInputState(this)
            {
                Autocomplete = autocomplete
            };

            if (IsWindows)
            {
                // In Mac don't work

                Console.CursorSize = !state.InsertMode ? 100 : 25;
            }

            ConsoleKeyInfo i;

            do
            {
                i = Console.ReadKey(true);

                if (_keyHandle.TryGetValue(i.Key, out var action))
                {
                    action(i.Key, state);
                }
                else
                {
                    ReadFromConsole_Default(i, state);
                }

                State = state.Txt.Length > 0 ? ConsoleReaderState.ReadingDirty : ConsoleReaderState.Reading;
            }while (i.Key != ConsoleKey.Enter);

            // Process return

            var ret = state.Txt.ToString();

            // Append to history

            if (_history.LastOrDefault() != ret)
            {
                if (_history.Count > MaxHistorySize)
                {
                    _history.RemoveAt(0);
                }

                _history.Add(ret);
            }

            // return text

            State = ConsoleReaderState.None;

            return(ret);
        }
예제 #19
0
        private AutoCompleteCommand[] SearchCommands(CommandToken[] tokens, IAutoCompleteHandler autocomplete)
        {
            if (autocomplete == null)
            {
                return(null);
            }

            var ret = new Dictionary <string, AutoCompleteCommand>();

            foreach (var entry in autocomplete.Commands)
            {
                var entryTokens = entry.SplitCommandLine().ToArray();

                // check start with

                var exact    = true;
                var parIndex = 0;
                var error    = false;

                for (var max = Math.Min(tokens.Length, entryTokens.Length); parIndex < max; parIndex++)
                {
                    var a = entryTokens[parIndex].Value;
                    var b = tokens[parIndex].Value;

                    if (!string.Equals(a, b, StringComparison.InvariantCultureIgnoreCase))
                    {
                        if (parIndex == max - 1)
                        {
                            if (!a.StartsWith(b, StringComparison.InvariantCultureIgnoreCase))
                            {
                                error = true;
                                break;
                            }

                            exact = false;
                        }
                        else
                        {
                            error = true;
                            break;
                        }
                    }
                }

                if (error)
                {
                    continue;
                }

                if (!ret.TryGetValue(entry, out var value))
                {
                    value = new AutoCompleteCommand()
                    {
                        IsExact             = exact,
                        ParameterStartIndex = parIndex,
                        Method  = entry,
                        Methods = new List <ParameterInfo[]>()
                    };

                    ret.Add(entry, value);
                }

                // return the entry

                if (autocomplete.TryGetMethods(entry, out var avalue))
                {
                    foreach (var ls in avalue)
                    {
                        value.Methods.Add(ls.ToArray());
                    }
                }
            }

            // Return the find

            return(ret.Count > 0 ? ret.Values.OrderBy(u => u.IsExact).ThenBy(u => u.Method).ToArray() : null);
        }
예제 #20
0
        public KeyHandler(IConsole console, List <string> history, IAutoCompleteHandler autoCompleteHandler)
        {
            Console2 = console;

            _history      = history ?? new List <string>();
            _historyIndex = _history.Count;
            _text         = new StringBuilder();
            _keyActions   = new Dictionary <string, Action>();

            _keyActions["LeftArrow"]  = MoveCursorLeft;
            _keyActions["Home"]       = MoveCursorHome;
            _keyActions["End"]        = MoveCursorEnd;
            _keyActions["ControlA"]   = MoveCursorHome;
            _keyActions["ControlB"]   = MoveCursorLeft;
            _keyActions["RightArrow"] = MoveCursorRight;
            _keyActions["ControlF"]   = MoveCursorRight;
            _keyActions["ControlE"]   = MoveCursorEnd;
            _keyActions["Backspace"]  = Backspace;
            _keyActions["Delete"]     = Delete;
            _keyActions["ControlD"]   = Delete;
            _keyActions["ControlH"]   = Backspace;
            _keyActions["ControlL"]   = ClearLine;
            _keyActions["Escape"]     = ClearLine;
            _keyActions["UpArrow"]    = PrevHistory;
            _keyActions["ControlP"]   = PrevHistory;
            _keyActions["DownArrow"]  = NextHistory;
            _keyActions["ControlN"]   = NextHistory;
            _keyActions["ControlU"]   = () =>
            {
                while (!IsStartOfLine())
                {
                    Backspace();
                }
            };
            _keyActions["ControlK"] = () =>
            {
                int pos = _cursorPos;
                MoveCursorEnd();
                while (_cursorPos > pos)
                {
                    Backspace();
                }
            };
            _keyActions["ControlW"] = () =>
            {
                while (!IsStartOfLine() && _text[_cursorPos - 1] != ' ')
                {
                    Backspace();
                }
            };
            _keyActions["ControlT"] = TransposeChars;

            _keyActions["Tab"] = () =>
            {
                if (IsInAutoCompleteMode())
                {
                    NextAutoComplete();
                }
                else
                {
                    if (autoCompleteHandler == null || !IsEndOfLine())
                    {
                        return;
                    }

                    string text = _text.ToString();

                    _completionStart = text.LastIndexOfAny(autoCompleteHandler.Separators);
                    _completionStart = _completionStart == -1 ? 0 : _completionStart + 1;

                    _completions = autoCompleteHandler.GetSuggestions(text, _completionStart);
                    _completions = _completions?.Length == 0 ? null : _completions;

                    if (_completions == null)
                    {
                        return;
                    }

                    StartAutoComplete();
                }
            };

            _keyActions["ShiftTab"] = () =>
            {
                if (IsInAutoCompleteMode())
                {
                    PreviousAutoComplete();
                }
            };
        }
예제 #21
0
        /// <inheritdoc />
        public string ReadFromConsole(IAutoCompleteHandler autocomplete = null)
        {
            State = ConsoleReaderState.Reading;

            // Write prompt
            _consoleWriter.WritePrompt();

            // If have something loaded
            if (_manualInputs.Count > 0)
            {
                State = ConsoleReaderState.ReadingDirty;

                // Get first loaded command
                var input = _manualInputs[0];
                _manualInputs.RemoveAt(0);

                if (!string.IsNullOrEmpty(input))
                {
                    // Print it
                    _consoleWriter.WriteLine(input, ConsoleOutputStyle.Input);

                    // Use it
                    State = ConsoleReaderState.None;

                    return(input);
                }
            }

            // Read from console
            string ret;
            var    cursor       = 0;
            var    historyIndex = 0;
            var    insertMode   = true;
            var    txt          = new StringBuilder();

            if (IsWindows)
            {
                // In Mac don't work

                Console.CursorSize = !insertMode ? 100 : 25;
            }

            _consoleWriter.GetCursorPosition(out var startX, out var startY);

            var i = new ConsoleKeyInfo();

            do
            {
                i = Console.ReadKey(true);

                switch (i.Key)
                {
                // Accept
                case ConsoleKey.Enter:
                {
                    _consoleWriter.WriteLine("", ConsoleOutputStyle.Input);
                    break;
                }

                // Remove
                case ConsoleKey.Delete:
                {
                    if (cursor >= txt.Length)
                    {
                        break;
                    }

                    txt.Remove(cursor, 1);

                    if (txt.Length - cursor != 0)
                    {
                        _consoleWriter.SetCursorPosition(startX + cursor, startY);
                        _consoleWriter.Write(txt.ToString().Substring(cursor) + " \b", ConsoleOutputStyle.Input);
                        _consoleWriter.SetCursorPosition(startX + cursor, startY);
                    }
                    else
                    {
                        _consoleWriter.Write(" \b", ConsoleOutputStyle.Input);
                    }

                    break;
                }

                case ConsoleKey.Backspace:
                {
                    if (cursor > 0)
                    {
                        txt.Remove(cursor - 1, 1);
                        cursor--;
                    }
                    else if (cursor == 0)
                    {
                        break;
                    }

                    int l = txt.Length - cursor;
                    if (l > 0)
                    {
                        _consoleWriter.Write("".PadLeft(l, ' '), ConsoleOutputStyle.Input);
                        _consoleWriter.SetCursorPosition(startX + cursor, startY);
                        _consoleWriter.Write(txt.ToString().Substring(cursor), ConsoleOutputStyle.Input);
                        _consoleWriter.SetCursorPosition(startX + cursor, startY);
                    }
                    else
                    {
                        _consoleWriter.Write("\b \b", ConsoleOutputStyle.Input);
                    }

                    break;
                }

                // Move
                case ConsoleKey.LeftArrow:
                case ConsoleKey.RightArrow:
                {
                    if (i.Key == ConsoleKey.LeftArrow)
                    {
                        cursor = Math.Max(0, cursor - 1);
                    }
                    else
                    {
                        cursor = Math.Min(txt.Length, cursor + 1);
                    }

                    _consoleWriter.SetCursorPosition(startX + cursor, startY);
                    break;
                }

                case ConsoleKey.Home:
                case ConsoleKey.End:
                {
                    if (i.Key != ConsoleKey.End)
                    {
                        cursor = 0;
                    }
                    else
                    {
                        cursor = txt.Length;
                    }

                    _consoleWriter.SetCursorPosition(startX + cursor, startY);
                    break;
                }

                // History
                case ConsoleKey.UpArrow:
                case ConsoleKey.PageUp:
                case ConsoleKey.DownArrow:
                case ConsoleKey.PageDown:
                {
                    string strH = "";
                    if (_history.Count > 0)
                    {
                        historyIndex = (historyIndex + (i.Key == ConsoleKey.DownArrow || i.Key == ConsoleKey.PageDown ? 1 : -1));

                        if (historyIndex < 0)
                        {
                            historyIndex = _history.Count - 1;
                        }
                        else if (historyIndex > _history.Count - 1)
                        {
                            historyIndex = 0;
                        }

                        strH = _history[historyIndex];

                        txt.Clear();
                        txt.Append(strH);
                        cursor = txt.Length;
                    }

                    CleanFromThisPoint(startX, startY);
                    _consoleWriter.Write(strH, ConsoleOutputStyle.Input);

                    break;
                }

                // Autocomplete
                case ConsoleKey.Tab:
                {
                    string   cmd     = txt.ToString().ToLowerInvariant();
                    string[] matches = autocomplete?.Keys.Where(key => key.StartsWith(cmd)).OrderBy(u => u).ToArray();

                    if (matches == null || matches.Length <= 0)
                    {
                        // No match

                        break;
                    }

                    int max = 0;

                    if (matches.Length == 1)
                    {
                        // 1 found

                        txt.Clear();
                        txt.Append(matches[0] + " ");
                        cursor = txt.Length;
                        max    = matches[0].Length;
                    }
                    else
                    {
                        // Search match

                        cmd = matches[0];
                        for (int x = 1, m = cmd.Length; x <= m; x++)
                        {
                            var ok    = true;
                            var split = cmd.Substring(0, x);

                            foreach (string s in matches)
                            {
                                if (s.StartsWith(split))
                                {
                                    continue;
                                }

                                ok = false;
                                break;
                            }

                            if (ok)
                            {
                                max = x;
                            }
                            else
                            {
                                break;
                            }
                        }

                        // Take coincidences

                        txt.Clear();
                        txt.Append(matches[0].Substring(0, max));
                        cursor = txt.Length;
                    }

                    // Print found

                    _consoleWriter.WriteLine("", ConsoleOutputStyle.Input);

                    foreach (var var in matches)
                    {
                        _consoleWriter.Write(var.Substring(0, max), ConsoleOutputStyle.AutocompleteMatch);
                        _consoleWriter.WriteLine(var.Substring(max), ConsoleOutputStyle.Autocomplete);
                    }

                    // Prompt

                    _consoleWriter.WritePrompt();
                    _consoleWriter.GetCursorPosition(out startX, out startY);

                    _consoleWriter.Write(txt.ToString(), ConsoleOutputStyle.Input);
                    _consoleWriter.SetCursorPosition(startX + cursor, startY);

                    break;
                }

                // Special
                case ConsoleKey.Insert:
                {
                    insertMode         = !insertMode;
                    Console.CursorSize = !insertMode ? 100 : 25;
                    break;
                }

                // Write
                default:
                {
                    txt.Insert(cursor, i.KeyChar);
                    cursor++;

                    if (!insertMode)
                    {
                        _consoleWriter.Write(i.KeyChar.ToString(), ConsoleOutputStyle.Input);

                        if (cursor < txt.Length)
                        {
                            txt.Remove(cursor, 1);
                        }
                    }
                    else
                    {
                        _consoleWriter.Write(txt.ToString().Substring(cursor - 1), ConsoleOutputStyle.Input);

                        if (cursor != txt.Length)
                        {
                            _consoleWriter.SetCursorPosition(startX + cursor, startY);
                        }
                    }

                    break;
                }
                }

                State = txt.Length > 0 ? ConsoleReaderState.ReadingDirty : ConsoleReaderState.Reading;
            }while (i.Key != ConsoleKey.Enter);

            ret = txt.ToString();

            // Append to history

            if (_history.LastOrDefault() != ret)
            {
                if (_history.Count > MaxHistorySize)
                {
                    _history.RemoveAt(0);
                }

                _history.Add(ret);
            }

            // return text

            State = ConsoleReaderState.None;

            return(ret);
        }