private bool TryGetOpenedDocumentData(RunningDocumentInfo info, out ITextBuffer textBuffer, out string filePath) { textBuffer = null; filePath = string.Empty; if (!info.IsDocumentInitialized) { return(false); } IVsUserData vsUserData = info.DocData as IVsUserData; if (vsUserData == null) { return(false); } // Acquire the text buffer and snapshot from the document vsUserData.GetData(Microsoft.VisualStudio.Editor.DefGuidList.guidDocumentTextSnapshot, out object snapshot); textBuffer = (snapshot as ITextSnapshot)?.TextBuffer; if (textBuffer == null) { return(false); } if (!TextDocumentFactoryService.TryGetTextDocument(textBuffer, out ITextDocument textDocument)) { return(false); } filePath = textDocument.FilePath; return(true); }
public int OnBeforeSave(uint docCookie) { RunningDocumentInfo runningDocumentInfo = autoCheckoutOnSave._rdt.Value.GetDocumentInfo(docCookie); autoCheckoutOnSave.OnBeforeSave(runningDocumentInfo.Moniker); return(VSConstants.S_OK); }
public int OnBeforeSave(uint docCookie) { if (_package.optionPage.FormatOnSave) { RunningDocumentInfo docInfo = _package._runningDocTable.GetDocumentInfo(docCookie); Document doc = _package._dte.Documents.OfType <Document>().SingleOrDefault(x => x.FullName == docInfo.Moniker); if (doc != null) { IVsTextView vsTextView = GetIVsTextView(doc.FullName); if (vsTextView == null) { return(VSConstants.S_OK); } IWpfTextView wpfTextView = GetWpfTextView(vsTextView); if (wpfTextView == null) { return(VSConstants.S_OK); } PrettierCommand cmd; if (wpfTextView.Properties.TryGetProperty <PrettierCommand>("prettierCommand", out cmd)) { ThreadHelper.JoinableTaskFactory.Run(() => cmd.MakePrettierAsync()); } } } return(VSConstants.S_OK); }
private ITextDocument GetTextDocument(RunningDocumentInfo info) { // Get vs buffer IVsTextBuffer docData; try { docData = info.DocData as IVsTextBuffer; } catch (Exception e) { Logger.LogWarn(e, "Error getting IVsTextBuffer for document {0}, skipping document", info.Moniker); return(null); } if (docData == null) { return(null); } // Get ITextDocument var textBuffer = _vsEditorAdaptersFactoryService.GetDocumentBuffer(docData); if (textBuffer == null) { return(null); } ITextDocument document; if (!_textDocumentFactoryService.TryGetTextDocument(textBuffer, out document)) { return(null); } return(document); }
int IVsRunningDocTableEvents.OnAfterDocumentWindowHide(uint docCookie, IVsWindowFrame pFrame) { RunningDocumentTable rdt = new RunningDocumentTable(this); RunningDocumentInfo doc = rdt.GetDocumentInfo(docCookie); return(0); }
public DocumentInfo(RunningDocumentInfo info) { this.ItemId = info.ItemId; this.DocCookie = info.DocCookie; this.HierarchyItem = new VSHierarchyItem(info.Hierarchy, info.ItemId, 0); this.DocumentName = info.Moniker; this.InternalInfo = info; }
/// <summary> /// Base class for all other RDT event wrappers. Each event wrapper /// stores event-specific information and formats it for display /// in the Properties window. /// </summary> /// <param name="rdt">Running Document Table instance</param> /// <param name="message">Message to be displayed in the grid</param> /// <param name="cookie">Cookie to unadvise RDT events</param> public GenericEvent(RunningDocumentTable rdt, string message, uint cookie) { this.message = message; if (rdt == null || cookie == 0) return; rdi = rdt.GetDocumentInfo(cookie); docNameShort = GetShortDocName(rdi.Moniker); }
public static bool IsDirty(this RunningDocumentInfo rdi) { if (pIsDirty == null) { return(false); } return((bool)pIsDirty.GetValue(rdi)); }
/// <summary> /// Base class for all other RDT event wrappers. Each event wrapper /// stores event-specific information and formats it for display /// in the Properties window. /// </summary> /// <param name="rdt">Running Document Table instance</param> /// <param name="message">Message to be displayed in the grid</param> /// <param name="cookie">Cookie to unadvise RDT events</param> public GenericEvent(RunningDocumentTable rdt, string message, uint cookie) { this.message = message; if (rdt == null || cookie == 0) { return; } rdi = rdt.GetDocumentInfo(cookie); docNameShort = GetShortDocName(rdi.Moniker); }
private void OnDocumentClosed(uint docCookie) { RunningDocumentInfo info = _rdt.Value.GetDocumentInfo(docCookie); if (info.Hierarchy != null && _xamlProjects.TryGetValue(info.Hierarchy, out VisualStudioProject project)) { if (project.ContainsSourceFile(info.Moniker)) { project.RemoveSourceFile(info.Moniker); } } }
public int OnAfterSave(uint docCookie) { if (_stillLoading) { return(VSConstants.S_OK); } RunningDocumentInfo document = _runningDocumentTable.GetDocumentInfo(docCookie); string fileName = Path.GetFileName(document.Moniker); if (fileName.EndsWith(".scss", StringComparison.OrdinalIgnoreCase)) { Compile(document.Moniker, document.Hierarchy); } return(VSConstants.S_OK); }
public int OnBeforeSave(uint docCookie) { if (_pkg.RemoveOnSave()) { RunningDocumentInfo runningDocumentInfo = new RunningDocumentInfo(_pkg.rdt, docCookie); EnvDTE.Document document = _pkg.dte.Documents.OfType <EnvDTE.Document>().SingleOrDefault(x => x.FullName == runningDocumentInfo.Moniker); if (document == null) { return(VSConstants.S_OK); } if (document.Object("TextDocument") is TextDocument textDoc) { _pkg.RemoveTrailingWhiteSpaces(textDoc); } } return(VSConstants.S_OK); }
public int OnBeforeSave(uint docCookie) { if (_pkg.removeOnSave()) { RunningDocumentInfo runningDocumentInfo = _pkg.rdt.GetDocumentInfo(docCookie); EnvDTE.Document document = _pkg.dte.Documents.OfType <EnvDTE.Document>().SingleOrDefault(x => x.FullName == runningDocumentInfo.Moniker); if (document == null) { return(VSConstants.S_OK); } var textDoc = document.Object("TextDocument") as TextDocument; if (textDoc != null) { RemoveTrailingWhitespacesPackage.removeTrailingWhiteSpaces(textDoc); } } return(VSConstants.S_OK); }
private void OnDocumentClosed(uint docCookie) { RunningDocumentInfo info = _rdt.Value.GetDocumentInfo(docCookie); AbstractProject project = GetXamlProject(info.Hierarchy); if (project == null) { return; } IVisualStudioHostDocument document = project.GetCurrentDocumentFromPath(info.Moniker); if (document == null) { return; } project.RemoveDocument(document); }
public void OpenFile(string filePath, bool isReadOnly) { ThreadHelper.ThrowIfNotOnUIThread(); var rdt = new RunningDocumentTable(_serviceProvider); IVsWindowFrame?windowFrame = null; try { // Open the document. VsShellUtilities.OpenDocument( _serviceProvider, filePath, VSConstants.LOGVIEWID_Primary, out _, out _, out windowFrame); // Set it as read only if necessary. if (isReadOnly) { RunningDocumentInfo rdtInfo = rdt.GetDocumentInfo(filePath); // Set it as read only if necessary. if (rdtInfo.DocData is IVsTextBuffer textBuffer) { textBuffer.GetStateFlags(out uint flags); textBuffer.SetStateFlags(flags | (uint)BUFFERSTATEFLAGS.BSF_USER_READONLY); } } // Show the document window if (windowFrame != null) { ErrorHandler.ThrowOnFailure(windowFrame.Show()); } } catch (Exception ex) when(!ex.IsCritical()) { windowFrame?.CloseFrame(0); } }
public int OnAfterSave(uint docCookie) { if (_stillLoading) { return(VSConstants.S_OK); } if (!ConfigurationPage.ShouldCompileOnSave) { return(VSConstants.S_OK); } ThreadHelper.ThrowIfNotOnUIThread(); _vsOutWindow?.Clear(); RunningDocumentInfo document = _runningDocumentTable.GetDocumentInfo(docCookie); if (string.Equals(Path.GetExtension(document.Moniker), ".ts", StringComparison.OrdinalIgnoreCase) && document.Hierarchy != null) { RunCompiler(document.Moniker, document.Hierarchy); } System.Diagnostics.Debug.WriteLine($"{nameof(OnAfterSave)} -> {document.Moniker}"); return(VSConstants.S_OK); }
public Task <bool> TryHandleCommandAsync(IImmutableSet <IProjectTree> items, long commandId, bool focused, long commandExecuteOptions, IntPtr variantArgIn, IntPtr variantArgOut) { if (IsOpenCommand(commandId) && items.All(CanOpenFile)) { OpenItems(); return(TaskResult.True); } return(TaskResult.False); void OpenItems() { Assumes.NotNull(_configuredProject.UnconfiguredProject.Services.HostObject); var hierarchy = (IVsUIHierarchy)_configuredProject.UnconfiguredProject.Services.HostObject; var rdt = new RunningDocumentTable(_serviceProvider); // Open all items. RunAllAndAggregateExceptions(items, OpenItem); void OpenItem(IProjectTree item) { IVsWindowFrame?windowFrame = null; try { // Open the document. Guid logicalView = IsOpenWithCommand(commandId) ? LOGVIEWID_UserChooseView : LOGVIEWID.Primary_guid; IntPtr docData = IntPtr.Zero; ErrorHandler.ThrowOnFailure( _uiShellOpenDocument.Value.OpenStandardEditor( (uint)__VSOSEFLAGS.OSE_ChooseBestStdEditor, item.FilePath, ref logicalView, item.Caption, hierarchy, item.GetHierarchyId(), docData, _oleServiceProvider.Value, out windowFrame)); RunningDocumentInfo rdtInfo = rdt.GetDocumentInfo(item.FilePath); // Set it as read only if necessary. bool isReadOnly = item.Flags.Contains(ImportTreeProvider.ProjectImportImplicit); if (isReadOnly && rdtInfo.DocData is IVsTextBuffer textBuffer) { textBuffer.GetStateFlags(out uint flags); textBuffer.SetStateFlags(flags | (uint)BUFFERSTATEFLAGS.BSF_USER_READONLY); } // Detach the document from this project. // Ignore failure. It may be that we've already transferred the item to Miscellaneous Files. _externalFilesManager.Value.TransferDocument(item.FilePath, item.FilePath, windowFrame); // Show the document window if (windowFrame != null) { ErrorHandler.ThrowOnFailure(windowFrame.Show()); } } catch { windowFrame?.CloseFrame(0); throw; } } } }
private static RunningDocumentInfo GetDocumentInfo(IVsRunningDocumentTable rdt, uint docCookie) { RunningDocumentInfo info = new RunningDocumentInfo(); IntPtr docData; int hr = rdt.GetDocumentInfo(docCookie, out info.Flags, out info.ReadLocks, out info.EditLocks, out info.Moniker, out info.Hierarchy, out info.ItemId, out docData); //if (hr == VSConstants.S_OK) //{ // try // { // if (docData != IntPtr.Zero) // info.DocData = Marshal.GetObjectForIUnknown(docData); // return info; // } // finally // { // Marshal.Release(docData); // } //} return info; }
public RunningDocumentInfoWrapper(RunningDocumentInfo info) { this.info = info; }