Mono.Terminal.LineEditor.CmdTabOrComplete C# (CSharp) Method

CmdTabOrComplete() public method

public CmdTabOrComplete ( ) : void
return void
        void CmdTabOrComplete()
        {
            bool complete = false;

            if (AutoCompleteEvent != null)
            {
                if (TabAtStartCompletes)
                    complete = true;
                else
                {
                    for (int i = 0; i < cursor; i++)
                    {
                        if (!Char.IsWhiteSpace(text[i]))
                        {
                            complete = true;
                            break;
                        }
                    }
                }

                if (complete)
                {
                    Completion completion = AutoCompleteEvent(text.ToString(), cursor);
                    string[] completions = completion.Result;
                    if (completions == null)
                        return;

                    int ncompletions = completions.Length;
                    if (ncompletions == 0)
                        return;

                    if (completions.Length == 1)
                    {
                        InsertTextAtCursor(completions[0]);
                    }
                    else
                    {
                        int last = -1;

                        for (int p = 0; p < completions[0].Length; p++)
                        {
                            char c = completions[0][p];

                            for (int i = 1; i < ncompletions; i++)
                            {
                                if (completions[i].Length < p)
                                    goto mismatch;

                                if (completions[i][p] != c)
                                {
                                    goto mismatch;
                                }
                            }
                            last = p;
                        }
                    mismatch:
                        if (last != -1)
                        {
                            InsertTextAtCursor(completions[0].Substring(0, last + 1));
                        }
                        Console.WriteLine();
                        foreach (string s in completions)
                        {
                            Console.Write(completion.Prefix);
                            Console.Write(s);
                            Console.Write(' ');
                        }
                        Console.WriteLine();
                        Render();
                        ForceCursor(cursor);
                    }
                }
                else
                    HandleChar('\t');
            }
            else
                HandleChar('t');
        }