How to tell that a file is dirty from plugin ( changed without being saved)



  • Hi
    I am developing a plugin that edits code that is stored in a DB not in files.
    So I have my own opening and saving buttons and want to check and on the state of the document and warn of unsaved changes before they close or re-fetch it from the DB.
    What do I do to check if the current scintilla (buffer) has changed and not been saved since loading?

    I have looked at SCN_MODIFIED notification but did not like having to sort out which file was changing and having to store this in a property for each open file, as well it is firing when loading a document and for each key stroke.

    Is there an existing property that I can get to or something?

    Thanks in advance

    Jeff.



  • Hi Jeff,

    unfortunately no. You have to do this with SCN_MODIFIED and keep a list of all open files and their modification stati.

    You can also use other events such as SciMsg.SCN_SAVEPOINTLEFT, SciMsg.SCN_SAVEPOINTREACHED.

    For a complete implementation which you can borrow freely have a look at my upcoming plugin:

    https://github.com/sanastasiou/RTextNpp/blob/master/RTextNpp/DllExport/UnmanagedExports.cs

    Regards

    Btw, there is as of today, not a solution for files that have not been saved while NPP was shutdown… In my case, I just delete the backups so that they aren’t saved at all. I explicitly mention this to the users of my plugin because it’s not the default Npp behavior.



  • Hi
    Thanks, I am using a different strategy to achieve how to know when to store the changes back into the DB.
    I save as a file locally when I open the data from the database. (I did this anyway so the Tab Caption would have the correct name and to do comparisons with what is in the DB)
    I save the local file again every time the user saves to the DB
    I listen to the notification NPPN_FILEBEFORESAVE and save the data to the database. (user click the Save icon etc)
    So if the user closes the application or a file that NPP knows needs saving and NPP asks if the user wants to save then the save is also stored into the DB.

    Thanks
    Jeff


Log in to reply