public bool TryGetTextUndoHistory(Workspace editorWorkspace, ITextBuffer textBuffer, out ITextUndoHistory undoHistory) { undoHistory = null; if (!(editorWorkspace is VisualStudioWorkspaceImpl) && !(editorWorkspace is MiscellaneousFilesWorkspace)) { return false; } // TODO: Handle undo if context changes var documentId = editorWorkspace.GetDocumentIdInCurrentContext(textBuffer.AsTextContainer()); if (documentId == null) { return false; } var document = GetDocument(editorWorkspace, documentId); if (document == null) { return false; } undoHistory = document.GetTextUndoHistory(); return true; }
public bool CanNavigateToPosition(Workspace workspace, DocumentId documentId, int position, int virtualSpace = 0) { // Navigation should not change the context of linked files and Shared Projects. documentId = workspace.GetDocumentIdInCurrentContext(documentId); if (!IsSecondaryBuffer(workspace, documentId)) { return true; } var document = workspace.CurrentSolution.GetDocument(documentId); var text = document.GetTextAsync(CancellationToken.None).WaitAndGetResult(CancellationToken.None); var vsTextSpan = text.GetVsTextSpanForPosition(position, virtualSpace); return CanMapFromSecondaryBufferToPrimaryBuffer(workspace, documentId, vsTextSpan); }
public bool TryNavigateToSpan(Workspace workspace, DocumentId documentId, TextSpan textSpan, OptionSet options) { // Navigation should not change the context of linked files and Shared Projects. documentId = workspace.GetDocumentIdInCurrentContext(documentId); if (!IsForeground()) { throw new InvalidOperationException(ServicesVSResources.Navigation_must_be_performed_on_the_foreground_thread); } var document = OpenDocument(workspace, documentId, options); if (document == null) { return false; } var text = document.GetTextAsync(CancellationToken.None).WaitAndGetResult(CancellationToken.None); var textBuffer = text.Container.GetTextBuffer(); var vsTextSpan = text.GetVsTextSpanForSpan(textSpan); if (IsSecondaryBuffer(workspace, documentId) && !vsTextSpan.TryMapSpanFromSecondaryBufferToPrimaryBuffer(workspace, documentId, out vsTextSpan)) { return false; } return NavigateTo(textBuffer, vsTextSpan); }