Example #1
0
    /// <summary>
    /// Moves the pipe textview's caret to the given character position on the current line.
    /// </summary>
    private void MoveCaret(int charPos)
    {
        TextIter theIter = PipeTextView.Buffer.GetIterAtMark(PipeTextView.Buffer.InsertMark);

        theIter.BackwardChars(theIter.LineOffset);
        theIter.ForwardChars(charPos);
        PipeTextView.Buffer.PlaceCursor(theIter);
    }
Example #2
0
 protected void WriteLog(string text, TextTag tag)
 {
     Gtk.Application.Invoke(delegate
     {
         TextIter endIter = textview1.Buffer.EndIter;
         textview1.Buffer.Insert(ref endIter, text);
         endIter.BackwardChars(text.Length);
         textview1.Buffer.ApplyTag(tag, endIter, textview1.Buffer.EndIter);
         textview1.ScrollToMark(textview1.Buffer.CreateMark("bottom", textview1.Buffer.EndIter, false), 0, true, 0.0, 1.0);
     });
 }
Example #3
0
 // Logging
 private void WriteLog(string text, string tag)
 {
     text += "\n";
     Gtk.Application.Invoke(delegate {
         TextIter endIter = textview1.Buffer.EndIter;
         textview1.Buffer.Insert(ref endIter, text);
         endIter.BackwardChars(text.Length);
         textview1.Buffer.ApplyTag(textview1.Buffer.TagTable.Lookup(tag), endIter, textview1.Buffer.EndIter);
         textview1.ScrollToMark(textview1.Buffer.CreateMark("bottom", textview1.Buffer.EndIter, false), 0, true, 0.0, 1.0);
     });
 }
Example #4
0
        //TextIter iter;
        public void AddEntry(string entry, TextTag tag, bool newline = true)
        {
            int      len   = AddEntry(entry, newline);
            TextIter end   = Buffer.EndIter;
            TextIter start = Buffer.EndIter;

            start.BackwardChars(len);
            InfoTags.Add(new InfoTag {
                start = start.Offset, end = end.Offset, tag = tag
            });
        }
Example #5
0
    /// <summary>
    /// Returns the line of text from the pipe textview that contains the caret.
    /// </summary>
    private string CurrentLine()
    {
        TextIter begIter = PipeTextView.Buffer.GetIterAtMark(PipeTextView.Buffer.InsertMark);
        TextIter endIter = PipeTextView.Buffer.GetIterAtMark(PipeTextView.Buffer.InsertMark);

        begIter.BackwardChars(begIter.LineOffset);
        endIter.BackwardCursorPosition();
        endIter.ForwardToLineEnd();
        string line = PipeTextView.Buffer.GetText(begIter, endIter, false);

        return(line);
    }
        public void CompleteAhead(string what)
        {
            DropCompleteAhead();
            TextIter insertIter = GetIterAtMark(InsertMark);

            InsertWithTags(ref insertIter, what, new TextTag[]
                           { complete_ahead });
            TextIter it = GetIterAtMark(InsertMark);

            MoveMark(complete_end, it);
            it.BackwardChars(what.Length);
            PlaceCursor(it);
        }
Example #7
0
    /* NOTES:
     * this method is supposed to check if a iter is editable but it's shit.
     * as of right now it just picks the last actually typed char and checks if it has tags and shit
     * for some reason it doesnt see some tags while it sees others (try running an empty command)
     * it is pure f*****g shit
     * no fukcing clue how to fix this
     * i'm at the f*****g edge man
     * this pain
     * can't take it any longer man
     * fucken hell
     *
     * PS: WHY THE F**K DOES THE THING I ASSIGNED TO CTRL+P WORK THEN WHAT THE F**K
     */
    public bool CheckIfEditable(TextIter givenIter, bool verbose = false)
    {
        TextIter iter = givenIter.Copy();

        iter.BackwardChars(2);

        if (verbose)
        {
            Console.WriteLine("\n\nchar: '" + iter.Char + "'");
        }
        if (verbose)
        {
            Console.WriteLine("tag count: " + iter.Tags.Length);
        }
        if (verbose)
        {
            Console.WriteLine("editable: " + iter.Editable(true));
        }
        if (verbose)
        {
            Console.WriteLine("---");
        }

        bool editable = true;

        foreach (var tag in iter.Tags)
        {
            if (verbose)
            {
                Console.WriteLine(tag.Name + ": " + tag.Editable);
            }
        }

        if (verbose)
        {
            Console.WriteLine("---");
        }

        return(editable);
    }
    // 向上平移文本
    public void MoveUp()
    {
        int topToMove = top - StepSize;

        if (topToMove < 0)
        {
            topToMove = 0;
        }
        int bottomToMove = topToMove + WindowSize;

        if (bottomToMove > Text.Length)
        {
            bottomToMove = Text.Length;
        }

        int topAddBytes       = top - topToMove;
        int bottomDeleteBytes = bottom - bottomToMove;

        if (topAddBytes > 0)
        {
            TextIter iter = TextView.Buffer.StartIter;
            //Console.WriteLine (Text);
            //Console.WriteLine ("MOVEUP:" + top.ToString () + ":" + Text.Substring (topToMove, topAddBytes));
            TextView.Buffer.Insert(ref iter, Text.Substring(topToMove, topAddBytes));
            //TextView.Buffer.Text += Text.Substring (bottom, bottomAddBytes);
        }
        if (bottomDeleteBytes > 0)
        {
            TextIter iterStart = TextView.Buffer.EndIter;
            TextIter iterEnd   = TextView.Buffer.EndIter;
            iterStart.BackwardChars(bottomDeleteBytes);
            TextView.Buffer.Delete(ref iterStart, ref iterEnd);
        }
        top    = topToMove;
        bottom = bottomToMove;
    }
Example #9
0
    protected virtual void PipeTextView_OnKeyReleaseEvent(object o, Gtk.KeyReleaseEventArgs e)
    {
        Gdk.Key theKey  = e.Event.Key;
        char    theChar = (char)e.Event.KeyValue;

        if (commandAutoCompletion)
        {
            bool controlPressed = (e.Event.State & Gdk.ModifierType.ControlMask) != 0;
            bool altPressed     = (e.Event.State & Gdk.ModifierType.Mod1Mask) != 0;

            if (Char.IsLetter(theChar) && ((theKey != Gdk.Key.Home) &&
                                           (theKey != Gdk.Key.Left) && (theKey != Gdk.Key.Right) &&
                                           (theKey != Gdk.Key.Up) && (theKey != Gdk.Key.Down) &&
                                           (theKey != Gdk.Key.Return) && (theKey != Gdk.Key.Delete) &&
                                           (theKey != Gdk.Key.BackSpace) && (theKey != Gdk.Key.End)) &&
                (!controlPressed) && (!altPressed))
            {
                // The character typed is just a letter.

                PipeTextView.Buffer.Changed -= PipeTextBuffer_OnChanged;

                string theLine = CurrentLine();

                int    lineCaretPos = CaretPos();
                string prefix       = theLine.Substring(0, lineCaretPos).TrimStart();

                if (IsAlphabetic(prefix))
                {
                    // The "prefix" is all alphabetic.

                    string suffix = MatchCommand(prefix);
                    int    i      = theLine.IndexOf(' ', lineCaretPos - 1);

                    if (i > -1)
                    {
                        // Found the space following the filter name.

                        int noOfChars = i - lineCaretPos + 1;
                        theLine = theLine.Remove(lineCaretPos - 1, noOfChars);
                        theLine = theLine.Insert(lineCaretPos - 1, suffix);
                    }
                    else
                    {
                        // No space was found.

                        theLine  = theLine.Remove(lineCaretPos - 1);
                        theLine += suffix;
                    }

                    // Update the textview's text buffer:

                    TextIter begIter = PipeTextView.Buffer.GetIterAtMark(PipeTextView.Buffer.InsertMark);
                    TextIter endIter = PipeTextView.Buffer.GetIterAtMark(PipeTextView.Buffer.InsertMark);
                    begIter.BackwardChars(begIter.LineOffset);
                    endIter.BackwardCursorPosition();
                    endIter.ForwardToLineEnd();
                    PipeTextView.Buffer.Delete(ref begIter, ref endIter);
                    PipeTextView.Buffer.Insert(ref begIter, theLine);

                    if (suffix != string.Empty)
                    {
                        // Restore the caret's original position:

                        MoveCaret(lineCaretPos);
                    }
                }

                PipeTextView.Buffer.Changed += PipeTextBuffer_OnChanged;
            }
        }

        UpdCursorLocation(PipeTextView.Buffer);
        UpdateCmdSyntax();
        UpdateControls();
    }