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); }
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); }