public void PreBackspace(out bool handledCommand) { handledCommand = false; var caretPos = this.GetCaretPosition(); var snapshot = SubjectBuffer.CurrentSnapshot; if (caretPos.HasValue && caretPos.Value.Position > 0 && (caretPos.Value.Position - 1) == OpeningPoint.GetPoint(snapshot).Position && !HasForwardTyping) { using var undo = CreateUndoTransaction(); using var edit = SubjectBuffer.CreateEdit(); var span = new SnapshotSpan(OpeningPoint.GetPoint(snapshot), ClosingPoint.GetPoint(snapshot)); edit.Delete(span); if (edit.HasFailedChanges) { edit.Cancel(); undo.Cancel(); Debug.Fail("Unable to clear braces"); } else { // handle the command so the backspace does // not go through since we've already cleared the braces handledCommand = true; edit.ApplyAndLogExceptions(); undo.Complete(); EndSession(); } } }
private void ApplyBraceCompletionResult(BraceCompletionResult result) { _threadingContext.ThrowIfNotOnUIThread(); using var edit = SubjectBuffer.CreateEdit(); foreach (var change in result.TextChanges) { edit.Replace(change.Span.ToSpan(), change.NewText); } edit.ApplyAndLogExceptions(); try { Contract.ThrowIfFalse(SubjectBuffer.CurrentSnapshot[OpeningPoint.GetPosition(SubjectBuffer.CurrentSnapshot)] == OpeningBrace, "The opening point does not match the opening brace character"); Contract.ThrowIfFalse(SubjectBuffer.CurrentSnapshot[ClosingPoint.GetPosition(SubjectBuffer.CurrentSnapshot) - 1] == ClosingBrace, "The closing point does not match the closing brace character"); } catch (Exception e) when(FatalError.ReportAndCatch(e)) { return; } var caretLine = SubjectBuffer.CurrentSnapshot.GetLineFromLineNumber(result.CaretLocation.Line); TextView.TryMoveCaretToAndEnsureVisible(new VirtualSnapshotPoint(caretLine, result.CaretLocation.Character)); }
private BraceCompletionContext GetBraceCompletionContext(ParsedDocument document) { _threadingContext.ThrowIfNotOnUIThread(); var snapshot = SubjectBuffer.CurrentSnapshot; var closingSnapshotPoint = ClosingPoint.GetPosition(snapshot); var openingSnapshotPoint = OpeningPoint.GetPosition(snapshot); // The user is actively typing so the caret position should not be null. var caretPosition = this.GetCaretPosition().Value.Position; return(new BraceCompletionContext(document, openingSnapshotPoint, closingSnapshotPoint, caretPosition)); }
private BraceCompletionContext?GetBraceCompletionContext() { this.AssertIsForeground(); var snapshot = SubjectBuffer.CurrentSnapshot; var document = snapshot.GetOpenDocumentInCurrentContextWithChanges(); if (document == null) { return(null); } var closingSnapshotPoint = ClosingPoint.GetPosition(snapshot); var openingSnapshotPoint = OpeningPoint.GetPosition(snapshot); // The user is actively typing so the caret position should not be null. var caretPosition = this.GetCaretPosition().Value.Position; return(new BraceCompletionContext(document, openingSnapshotPoint, closingSnapshotPoint, caretPosition)); }