//public void SaveIfDirty2(IVsTextView view, int line, int col) { // string text; // int numLines; // int lastCol; // IVsTextLines buf = null; // var hr = view.GetBuffer(out buf); // Marshal.ThrowExceptionForHR(hr); // hr = buf.GetLineCount(out numLines); // Marshal.ThrowExceptionForHR(hr); // hr = buf.GetLengthOfLine(numLines - 1, out lastCol); // Marshal.ThrowExceptionForHR(hr); // hr = buf.GetLineText(0, 0, numLines - 1, lastCol, out text); // Marshal.ThrowExceptionForHR(hr); // File.WriteAllText(m_dirtyname, text, new UTF8Encoding(false)); // var reply = idetoolsfuncs.GetDirtySuggestions(m_dirtyname, m_filename, line + 1, col + 1, m_projectfile); // decls = new IntelliSense.NimrodDeclarations(reply); //} public static bool SaveIfDirty(string fpath) { bool dirty = false; Microsoft.VisualStudio.Shell.Interop.IVsPersistDocData persistDocData; Microsoft.VisualStudio.Shell.Interop.IVsHierarchy hierarchy; uint vsitemid = Microsoft.VisualStudio.VSConstants.VSITEMID_NIL; uint doccook; VsShellUtilities.GetRDTDocumentInfo(ServiceProvider.GlobalProvider, fpath, out hierarchy, out vsitemid, out persistDocData, out doccook); if (hierarchy == null || doccook == (uint)Microsoft.VisualStudio.Shell.Interop.Constants.VSDOCCOOKIE_NIL) { dirty = false; return(dirty); } if (persistDocData != null) { int docdirty; persistDocData.IsDocDataDirty(out docdirty); dirty = (docdirty != 0); if (!dirty) { return(false); } } Microsoft.VisualStudio.Shell.VsShellUtilities.SaveFileIfDirty(ServiceProvider.GlobalProvider, fpath); System.Diagnostics.Debug.Print(string.Format("NS saved file {0}", fpath)); return(dirty); }
public async Task <(IVsHierarchy hierarchy, uint itemid, IVsPersistDocData docData, uint docCookie)> GetRDTDocumentInfoAsync( IServiceProvider serviceProvider, string fullPath) { await _threadingService.SwitchToUIThread(); VsShellUtilities.GetRDTDocumentInfo(serviceProvider, fullPath, out IVsHierarchy hierarchy, out uint itemid, out IVsPersistDocData persistDocData, out uint docCookie); return(hierarchy, itemid, persistDocData, docCookie); }
/// <summary> /// Saves just the project file (does not save dirty documents) /// </summary> int SaveProject(IReloadableProject project) { IVsSolution solution = _serviceProvider.GetService <IVsSolution, SVsSolution>(); __VSSLNSAVEOPTIONS saveOpts = __VSSLNSAVEOPTIONS.SLNSAVEOPT_SkipDocs; VsShellUtilities.GetRDTDocumentInfo(_serviceProvider, project.ProjectFile, out IVsHierarchy hier, out uint itemid, out IVsPersistDocData docData, out uint docCookie); int hr = solution.SaveSolutionElement((uint)saveOpts, project.VsHierarchy, docCookie); return(hr); }
public static bool IsDocumentDirty(string documentPath, out IVsPersistDocData persistDocData) { var serviceProvider = new ServiceProvider((Microsoft.VisualStudio.OLE.Interop.IServiceProvider)_dte); IVsHierarchy vsHierarchy; uint itemId, docCookie; VsShellUtilities.GetRDTDocumentInfo( serviceProvider, documentPath, out vsHierarchy, out itemId, out persistDocData, out docCookie); if (persistDocData != null) { int isDirty; persistDocData.IsDocDataDirty(out isDirty); return(isDirty == 1); } return(false); }
/// <summary> /// Get document properties from RDT /// </summary> private void GetDocInfo( out bool isOpen, // true if the doc is opened out bool isDirty, // true if the doc is dirty out bool isOpenedByUs, // true if opened by our project out uint docCookie, // VSDOCCOOKIE if open out IVsPersistDocData persistDocData) { isOpen = isDirty = isOpenedByUs = false; docCookie = (uint)ShellConstants.VSDOCCOOKIE_NIL; persistDocData = null; if (this.node == null || this.node.ProjectMgr == null || this.node.ProjectMgr.IsClosed) { return; } IVsHierarchy hierarchy; uint vsitemid = VSConstants.VSITEMID_NIL; VsShellUtilities.GetRDTDocumentInfo(this.node.ProjectMgr.Site, this.node.Url, out hierarchy, out vsitemid, out persistDocData, out docCookie); if (hierarchy == null || docCookie == (uint)ShellConstants.VSDOCCOOKIE_NIL) { return; } isOpen = true; // check if the doc is opened by another project if (Utilities.IsSameComObject(this.node.ProjectMgr, hierarchy)) { isOpenedByUs = true; } if (persistDocData != null) { int isDocDataDirty; ErrorHandler.ThrowOnFailure(persistDocData.IsDocDataDirty(out isDocDataDirty)); isDirty = (isDocDataDirty != 0); } }
/// <summary> /// Determines if the document is dirty by querying the doc data directly /// </summary> public static bool IsDocumentDirty(this DTE dte, string documentPath) { Debug.Assert(dte != null, "dte must not be null."); Debug.Assert(!string.IsNullOrWhiteSpace(documentPath), "!string.IsNullOrWhiteSpace(documentPath)"); var serviceProvider = new ServiceProvider((IServiceProvider)dte); IVsHierarchy vsHierarchy; uint itemId, docCookie; IVsPersistDocData vsPersistDocData; VsShellUtilities.GetRDTDocumentInfo( serviceProvider, documentPath, out vsHierarchy, out itemId, out vsPersistDocData, out docCookie); if (vsPersistDocData != null) { int isDirty; vsPersistDocData.IsDocDataDirty(out isDirty); return(isDirty == 1); } throw new InvalidOperationException("Could not find the doc data in IsDocumentDirty"); }
public void GetRDTDocumentInfo(IServiceProvider serviceProvider, string fullPath, out IVsHierarchy hierarchy, out uint itemid, out IVsPersistDocData persistDocData, out uint docCookie) { VsShellUtilities.GetRDTDocumentInfo(serviceProvider, fullPath, out hierarchy, out itemid, out persistDocData, out docCookie); }