• Login
Community
  • Login

New API to fix eventual regression regarding SCN_MODIFIED for some plugins

Scheduled Pinned Locked Moved Notepad++ & Plugin Development
32 Posts 12 Posters 5.2k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R
    rdipardo @mkupper
    last edited by Feb 11, 2025, 6:57 AM

    @mkupper said in New API to fix eventual regression regarding SCN_MODIFIED for some plugins:

    It definitely looks like something that we should attempt to reproduce.

    I doubt that. The only way a plugin could misuse SCN_MODIFIED would be to program a callback that caused another SCN_MODIFIED event to fire, recursively. Like, say the modificationType field of the scn notification header contained the SC_MOD_DELETETEXT flag, and the callback took the header’s text field and put it back into the document with ::SendMessage(scn->nmhdr.idFrom, SCI_INSERTTEXT, scn->position, scn->text), or something equally stupid.

    In other words, a plugin would have to deliberately behave like malware to create such a performance-degrading feedback loop; changing the default event mask as happened in v8.7.7 would not have that effect.

    1 Reply Last reply Reply Quote 3
    • M
      mkupper @Eric Pendergrass
      last edited by Feb 11, 2025, 6:50 PM

      @rdipardo I have a bit more than casual interest in what @Eric-Pendergrass reported as I too have seen some unexpected behavior. A couple of weeks ago I noticed that Npp seemed to be writing to disk every 7 seconds despite Notepad++ being idle/unused at the time. However, by the time I had a chance to dig into what was happening the problem went away.

      Luckily, it’s happening again to me right now and so I was able to track down what is happening but don’t understand why. I have also confirmed that the issue is not a recent regression and is not related to the SCN_MODIFIED changes. We likely should shift this topic drift to a new forum thread.

      However, Notepad++'s behavior still bothers me or at least it is unexpected. What I am seeing is that if a file/tab has been dirtied since I started Notepad++.exe that Notepad++ starts writing that file to the backup folder every 7 seconds when it is the active tab. This occurs with npp versions v8.7.5, v8.7.6, and v8.7.7. This still occurs when Notepad++.exe is started with -noPlugin

      @Lycan-Thrope says this is “by design” but it still surprises me. Why does Notepad++ need to flush the current tab’s file to disk every 7 seconds even when Notepad++ is sitting idle in the background? I can stop the continuous flushing either by exiting and restarting Notepad++, by switching to a tab/file that has not been modified since I started Notepad++.exe, or by saving the current tab to disk via Ctrl+S.

      If a file was already using the npp/backup copy (red tab) when I started Notepad++.exe then Notepad++ does not flush the file(s) to disk every 7 seconds. The continuous every-7-seconds flushing starts as soon as I type a single letter into a file. It does does not stop when I use Ctrl+Z undo to restore the file back to the state it was in when I started Notepad++.exe.

      @Eric-Pendergrass likely has his Notepad++\backup folder included the things monitored by OneDrive as he wants his off-machine backup to stay up to date. Normally we’d give a person an all-thumbs-up for doing that.

      @Eric-Pendergrass - you can work around the issue by switching to another file/tab in Notepad++ that has not had any changes made to it since you started Notepad++.exe. If the current active tab has had any changes made to it since you started Notepad++.exe then Notepad++ writes it to disk every 7 seconds meaning your OneDrive updates the Internet based copy of the file even though you are not making any changes.

      A D 2 Replies Last reply Feb 12, 2025, 12:48 PM Reply Quote 7
      • A
        Alan Kilborn @mkupper
        last edited by Feb 12, 2025, 12:48 PM

        @mkupper said:

        What I am seeing is that if a file/tab has been dirtied since I started Notepad++.exe that Notepad++ starts writing that file to the backup folder every 7 seconds when it is the active tab

        I can confirm this behavior with 8.7.6 and 8.7.7; I didn’t try any other versions
        I would add to @mkupper’s description: “…and there is no need to write the file because the data has not changed”.
        @mkupper Are you going to put in an “issue” on github about this behavior?

        L M 2 Replies Last reply Feb 13, 2025, 1:51 AM Reply Quote 3
        • L
          Lycan Thrope @Alan Kilborn
          last edited by Feb 13, 2025, 1:51 AM

          @Alan-Kilborn ,
          I’m just not sure if it really is an issue. It seems, according to @mkupper solutions, it would seem that on selection and change of a tab, the session 7 second back up kicks in…happening every 7 seconds. Once you change tabs, or save the document, I’m guessing, it flushes the signal to back up that particular document, so…If I use logic on this scenario, it appears it’s working as designed, unless you change the value of back up frequency, or you turn if off, at which point, you now don’t have snapshot backup. Double-edged sword.

          A 1 Reply Last reply Feb 13, 2025, 2:04 AM Reply Quote 0
          • A
            Alan Kilborn @Lycan Thrope
            last edited by Feb 13, 2025, 2:04 AM

            @Lycan-Thrope

            If the data hasn’t changed, there’s no reason to bother the file system. Period, end of story.

            L 1 Reply Last reply Feb 13, 2025, 3:08 AM Reply Quote 1
            • L
              Lycan Thrope @Alan Kilborn
              last edited by Lycan Thrope Feb 13, 2025, 3:14 AM Feb 13, 2025, 3:08 AM

              @Alan-Kilborn ,
              Perhaps. But maybe making the first change, and not saving it, causes it to continually back it up regardless, until an event happens that stops it from focusing on that document/tab, and turns its attention to other tabs/documents that aren’t changed yet. It’s just a thought, since I’m not sure how the developer implemented that situation. Could it be that it doesn’t check to see if there was a change, after the first one signaled a change occurred that started it?
              Maybe before putting in a report of the bug, try shutting off the Session Snapshot and periodic backup or varying it’s frequency, and see if the behavior stops or changes, first. Then we’ve isolated it to just that particular routine/implementation.

              P 1 Reply Last reply Feb 13, 2025, 2:39 PM Reply Quote 0
              • M
                mkupper @Alan Kilborn
                last edited by Feb 13, 2025, 8:19 AM

                Thank you for the feedback @Alan-Kilborn and @Lycan-Thrope. Hopefully I was able to integrate that into the github ticket.

                I have created an issue at https://github.com/notepad-plus-plus/notepad-plus-plus/issues/16186
                https://community.notepad-plus-plus.org/user/

                I recall some changes a while back to prevent spurious backups of the non-active tabs. I now suspect that those changes resulted in Notepad++ never clearing its internal “file dirty” flag when it saves a file to the backup system. This flag is not same as the user-visible file-modified flag that causes the tabs to turn red. The issue started with v8.7.1 though the release notes for that version don’t mention changes to the backup system.

                1 Reply Last reply Reply Quote 3
                • P
                  PeterJones @Lycan Thrope
                  last edited by PeterJones Feb 13, 2025, 2:45 PM Feb 13, 2025, 2:39 PM

                  @Lycan-Thrope,

                  Perhaps. But maybe making the first change, and not saving it, causes it to continually back it up regardless, until an event happens that stops it from focusing on that document/tab, and turns its attention to other tabs/documents that aren’t changed yet.

                  The point is, that’s not how it used to be, and that’s not how it should be.

                  Using the definitions

                  • make snapshot = automated system writes its temporary copy to disk in the backups\ folder
                  • to save = the user does File > Save or equivalent, to write a permanent copy to the user’s specified directory

                  The old, intended desired behavior:

                  1. user edits active file
                  2. 7 seconds later, N++ makes snapshot of the file
                  3. user doesn’t edit the file for 70 seconds, so no new snapshots are made
                  4. user edits active file
                  5. 7 seconds later, N++ makes snapshot #2 of the file

                  The new, bad user experience behavior:

                  1. user edits active file
                  2. 7 seconds later, N++ makes snapshot of the file
                  3. user doesn’t edit the file for 70 seconds, but N++ snapshots the exact same contents 10 more times unnecessarily
                  4. user edits active file
                  5. 7 seconds later, N++ makes snapshot #12 of the file

                  The old behavior is what happened for all the years of Notepad++ “session snapshot and periodic backup” existence, until v8.7.1 changed the behavior.
                  update: per Don’s comments in the linked issue, and the issue it linked back to, apparently, the always-write was always the intention, and implied that it’s always been the behavior, but I didn’t remember it doing that; either my memory is wrong, or …

                  A 1 Reply Last reply Feb 13, 2025, 3:37 PM Reply Quote 5
                  • A
                    Alan Kilborn @PeterJones
                    last edited by Alan Kilborn Feb 13, 2025, 3:41 PM Feb 13, 2025, 3:37 PM

                    @PeterJones said :

                    the always-write was always the intention

                    Isn’t that the “lazy coder’s” way of doing it? And what’s the advantage?
                    Say it’s a huge file/buffer; isn’t that possibly going to take appreciable time to do a redundant save? (annoying the user as he can’t do other things while that is going on – I’d think).
                    I stand by my original stance that there’s no point in rewriting the same thing every so many seconds…
                    EDIT: Think of how many problems and discussion points simply wouldn’t exist if the “snapshot” capability itself never existed!

                    P 1 Reply Last reply Feb 13, 2025, 3:48 PM Reply Quote 4
                    • P
                      PeterJones @Alan Kilborn
                      last edited by Feb 13, 2025, 3:48 PM

                      @Alan-Kilborn said in New API to fix eventual regression regarding SCN_MODIFIED for some plugins:

                      Think of how many problems and discussion points simply wouldn’t exist if the “snapshot” capability itself never existed!

                      Interestingly, the “app” version of MS Notepad recently informed me that it’s started to perpetually save – I don’t know whether that’s implemented like snapshot or the MS Sticky Notes (where it saves to a hidden file instead of your main file), or whether it’s done like N++'s AutoSave plugin.

                      … A quick web search tells me that MS has gone down the “session / snapshot” path, not saving over the original unless you hit SAVE, so MS is copying Don at this point. Next thing you know, they are going to implement Lexilla syntax highlighting instead of hooking it to an LSP. ;-)

                      A 1 Reply Last reply Feb 13, 2025, 4:04 PM Reply Quote 3
                      • A
                        Alan Kilborn @PeterJones
                        last edited by Feb 13, 2025, 4:04 PM

                        @PeterJones said:

                        “app” version of MS Notepad recently informed me that it’s started to perpetually save
                        MS has gone down the “session / snapshot” path, not saving over the original unless you hit SAVE

                        Yes. More reasons to NOT use it. :-)

                        Off-topic: FWIW, Mac’s TextEdit does this as well, and most Mac programs have always auto-saved everything. This drives me nuts because often I do things that I don’t want saved, just to “try something out”. Then I have to stop and figure out what I’ve ended up with when I’m done; something I want or something I don’t want. It’s happening more and more in the PC world now too, sadly (to me).

                        We’re in a world where less and less users care about the concept of a “file”. As one who creates data that then is likely to get moved elsewhere to a final archival spot, I definitely care about the notion of “file”.

                        Yep, I’m old school and want to be in charge of what gets saved, so I want the intentional save. And I definitely want it in Notepad++ (and luckily I can have that) – just mentioning N++ here to bring things back on-topic. :-)

                        M 1 Reply Last reply Feb 14, 2025, 3:26 AM Reply Quote 4
                        • M
                          mkupper @Alan Kilborn
                          last edited by Feb 14, 2025, 3:26 AM

                          @all that are interested.

                          I took a look at the v8.7.7 code and it does appear to be “by design” in that there is no effort, at within the Notepad++ part of the code, made to maintain a dirty or modified flag. Notepad++ just loops and copies the current file to the backup.

                          There are still two puzzles but I’m too wiped out at the moment to dig into figuring them out.

                          1. If a file has a red tab meaning it has been modified and you exit/restart Notepad++ then Notepad++ loads the file from the backup, sets the tab to red, but then does not start saving the file to the backup file every seen seconds until you make more changes the file. This implies there is some sort of internal modified/dirty flag.

                          2. I started to look at the v8.7 code which is the last version that updated the backup once and then did not continue to update the backup file every seven seconds. So far, the relevant code seems identical to v8.7.7. I need to do a more thorough inspection if v8.7 vs v8.7.7 when the brain is more functional.

                          I was editing some large files today and having the internal modified flag always set definitely cause lags when I switch tabs. Notepad++ used to quietly update the backup within 7 second and to clear the internal modified flag. I’m happy though in that I now know why I have been experiencing far too many inexplicable lags when switching tabs.

                          L 1 Reply Last reply Feb 14, 2025, 5:02 AM Reply Quote 2
                          • L
                            Lycan Thrope @mkupper
                            last edited by Lycan Thrope Feb 14, 2025, 5:10 AM Feb 14, 2025, 5:02 AM

                            @mkupper said in New API to fix eventual regression regarding SCN_MODIFIED for some plugins:

                            If a file has a red tab meaning it has been modified and you exit/restart Notepad++ then Notepad++ loads the file from the backup, sets the tab to red, but then does not start saving the file to the backup file every seen seconds until you make more changes the file. This implies there is some sort of internal modified/dirty flag.

                            It could be, that the tab has it’s own notification flag that gets set, separate from the Session Snapshot and backup routine(s). There’s nothing saying that the one is directly connected/dependent on the other.

                            User changes document, message sent of change, that triggers a tab notification and also triggers the Snapshot/backup routines, that then loop on their own. When the document is reloaded from the last snapshot, it’s not changed, as it was saved in the last snapshot form from the last session, the session sets the tab flag as it was and on we go. So there is no need to start recording changes again… unless and until another change occurs again and initiates the process all over again.

                            I don’t agree with @Alan-Kilborn’s assessment, that it was lazy programming, more like, there’s so many moving parts, that trying to interlace them all into one homogenous blob of code would be daunting for anyone to even fathom, let alone produce. So for that reason, I can see the design choice, but now that someone has focused on it, as I read in @donho’s notes on it, says, if someone has a better idea and implementation…let’s hear… meaning it begs for someone to imagine/implement a better system. :-)

                            A 1 Reply Last reply Feb 14, 2025, 10:52 AM Reply Quote 0
                            • A
                              Alan Kilborn @Lycan Thrope
                              last edited by Feb 14, 2025, 10:52 AM

                              @Lycan-Thrope said :

                              there’s so many moving parts, that trying to interlace them all into one homogenous blob of code would be daunting for anyone to even fathom, let alone produce

                              If this is the thinking, the project is in trouble.

                              1 Reply Last reply Reply Quote 0
                              • D
                                donho @mkupper
                                last edited by donho Feb 24, 2025, 7:53 PM Feb 24, 2025, 6:25 PM

                                @PeterJones said in New API to fix eventual regression regarding SCN_MODIFIED for some plugins:

                                update: per Don’s comments in the linked issue, and the issue it linked back to, apparently, the always-write was always the intention, and implied that it’s always been the behavior, but I didn’t remember it doing that; either my memory is wrong, or …

                                Sorry I’ve provided the wrong information. Here’s the correct one:
                                https://github.com/notepad-plus-plus/notepad-plus-plus/issues/16186#issuecomment-2678965165

                                @mkupper said in New API to fix eventual regression regarding SCN_MODIFIED for some plugins:

                                A couple of weeks ago I noticed that Npp seemed to be writing to disk every 7 seconds despite Notepad++ being idle/unused at the time.

                                It’s a regression, and it should be fixed in the PR:
                                https://github.com/notepad-plus-plus/notepad-plus-plus/pull/16225

                                The fix will go into the v8.7.8.

                                1 Reply Last reply Reply Quote 3
                                • ThosRTannerT
                                  ThosRTanner
                                  last edited by Mar 31, 2025, 6:16 AM

                                  Just a quick question - when will the plugintemplate repo be updated to include the new message?

                                  Thanks

                                  1 Reply Last reply Reply Quote 0
                                  • P PeterJones unpinned this topic on May 19, 2025, 3:12 PM
                                  • P PeterJones pinned this topic on May 19, 2025, 3:12 PM
                                  • First post
                                    Last post
                                  The Community of users of the Notepad++ text editor.
                                  Powered by NodeBB | Contributors