예제 #1
0
        public override void Complete(TextArea textArea, ISegment completionSegment, EventArgs insertionRequestEventArgs)
        {
            var text        = textArea.Document.Text;
            var caretOffset = textArea.Caret.Offset;
            int startOffset = 0;

            string word = "";

            for (int i = caretOffset - 1; i >= 0; i--)
            {
                var ch = text[i];

                if (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r' || ch == '(')
                {
                    startOffset = i + 1;
                    break;
                }

                word = text[i] + word;
            }

            var segment = new TextSegment();

            segment.StartOffset = startOffset;
            segment.EndOffset   = caretOffset;

            textArea.Document.Replace(segment, "");

            _snippet.CreateAvalonEditSnippet(null).Insert(textArea);
        }
예제 #2
0
            public void Execute(object parameter)
            {
                if (editor.SelectionLength == 0)
                {
                    int wordStart = DocumentUtilitites.FindPrevWordStart(editor.Adapter.Document, editor.CaretOffset);
                    if (wordStart > 0)
                    {
                        string      word    = editor.Adapter.Document.GetText(wordStart, editor.CaretOffset - wordStart);
                        CodeSnippet snippet = SnippetManager.Instance.FindSnippet(Path.GetExtension(editor.Adapter.FileName),
                                                                                  word);
                        if (snippet != null)
                        {
                            snippet.TrackUsage("CustomTabCommand");

                            using (editor.Document.RunUpdate()) {
                                editor.Adapter.Document.Remove(wordStart, editor.CaretOffset - wordStart);
                                snippet.CreateAvalonEditSnippet(editor.Adapter).Insert(editor.TextArea);
                            }
                            return;
                        }
                    }
                }
                baseCommand.Execute(parameter);
            }