/// <summary>
        ///     Run the command string from the input line
        /// </summary>
        private void RunCommand()
        {
            var cmd = Input;
            Input = "";
            _inputOffset = 0;
            _inputHistory.Insert(0, cmd);
            PrintLine(ConsoleSettings.PreString + cmd);

            //Run command
            var ct = new CommandParser(cmd, this);

            var cmdName = "";
            var tokens = new List<CommandToken>();

            foreach (CommandToken t in ct.Tokens) {
                switch (t.Kind) {
                    case CommandTokenKind.Word:
                        if (cmdName == "") {
                            cmdName = t.String;
                            if (!CommandDispatcher.Commands.ContainsKey(cmdName)) goto ErrorNotFound;
                        }
                        else tokens.Add(t);
                        break;
                    case CommandTokenKind.Number:
                    case CommandTokenKind.String:
                    case CommandTokenKind.CodeBlock:
                        tokens.Add(t);
                        break;
                }
            }

            ErrorNotFound:
            if (cmdName == "" || !CommandDispatcher.Commands.ContainsKey(cmdName)) {
                PrintError("Command '" + cmdName + "' not found!");
                return;
            }

            var c = CommandDispatcher.Commands[cmdName];
            var i = c.AreTokensValid(tokens);

            if (i < 0) {
                PrintError("Provided arguments are not valid for command '" + cmdName + "'");
                PrintCommandInfo(c);
            }
            else {
                c.Callback(new CommandDispatcher.CommandEventArgs(c.Name, tokens, i));
            }
        }