Macro script when txt content changes
-
the path to the file is “\SERVER\Disco_C\rds.txt”
…on the local network LAN, not locally -
@Mirko-Rossi said in Macro script when txt content changes:
it’s enough?
Yes. I was worried that it was going to be extremely long. That one is of a moderate length so that it would not be too difficult for someone to reverse engineer what it does.
-
@Mirko-Rossi said in Macro script when txt content changes:
path to the file is “\SERVER\Disco_C\rds.txt”
…on the local network LAN, not locallyDo you mean
\\SERVER\Disco_C\rds.txt
? (the forum treats\\
as an escaped backslash, so only displayed one)[macro contents…]
it’s enough?That is the macro code, yes, so that can be translated into equivalent PythonScript commands.
But I think you still haven’t responded to when @Ekopalypse asked,
What puzzles me a bit is the document monitor, when it is on, the document is read-only from the Npp point of view, isn’t it? If you are willing to explain in more detail what needs to be done, …
In case you didn’t understand, often times with document-monitoring turned on, the file is marked as read-only, so that Notepad++ cannot edit it while it’s being written to by some external process. Otherwise, you get in the dangerous condition where both the external process and Notepad++ both try to write the file to disk at the same time. It might be nice to know how often the external process writes to the file, because that might influence whether or not there’s enough time to safely run your commands and save the file before the next time that the external process writes to it. (Then again, since you seem able to run the macro manually between refreshes, without adverse effects, it’s probably okay for the script, too.)
The process you want, as I understand it:
- The Document Monitor plugin will be used to refresh the contents of the editor window periodically
- You want to check the contents after such a refresh, and see if the contents have changed
- If they have changed, run the Macro you listed (or the equivalent translation into Python Script commands), then save the file
- Repeat ad infinitum
Please answer about “read only” status, and please add any additional details not captured in my summary of the process. After that, there will probably be enough for someone who understands @Ekopalypse’s SC_MOD_INSERTCHECK suggestion to implement a possible script.
-
It might be nice to know how often the external process writes to the file, because that might influence whether or not there’s enough time to safely…
Here’s a hint:
the txt is updated every song change
I’m envisioning a DJ type situation, including disco ball…roughly 3 minute songs. Could be totally wrong, though!
-
Ok, I misunderstood what was meant by “Document Monitor”.
I assumed we are talking about this oneSo, as @PeterJones already mentioned, this one is generating a buffer activated event, which means your could do something like this
from Npp import notepad, editor, NOTIFICATION import hashlib def md5sum(): return hashlib.md5(editor.getText()).hexdigest() def on_buffer_activate(args): global CURRENT_HASH if args['bufferID'] == FILE_TO_BE_MONITORED: NEW_HASH = md5sum() if CURRENT_HASH != NEW_HASH: CURRENT_HASH = NEW_HASH notepad.runMenuCommand('Macro', 'YOUR_MACRO_NAME') FILE_TO_BE_MONITORED = notepad.getCurrentBufferID() CURRENT_HASH = md5sum() notepad.callback(on_buffer_activate, [NOTIFICATION.BUFFERACTIVATED])
You have to give the document, which is monitored, the focus and run the script. I how this does what you want it to be done.
If you are running a localized version of npp, you need to replace Macro with the localized name.
-
it seems not to work.
I created and ran the script from the plugin menu. Am I wrong some steps?This is the script code:
from Npp import notepad, editor, NOTIFICATION import hashlib def md5sum(): return hashlib.md5(editor.getText()).hexdigest() def on_buffer_activate(args): global CURRENT_HASH if args['bufferID'] == FILE_TO_BE_MONITORED: NEW_HASH = md5sum() if CURRENT_HASH != NEW_HASH: CURRENT_HASH = NEW_HASH notepad.runMenuCommand('\\SERVER\Disco_C\rds.txt', 'intero') FILE_TO_BE_MONITORED = notepad.getCurrentBufferID() CURRENT_HASH = md5sum() notepad.callback(on_buffer_activate, [NOTIFICATION.BUFFERACTIVATED])
@Ekopalypse said in Macro script when txt content changes:
notepad.runMenuCommand('Macro', 'YOUR_MACRO_NAME')
i think i didn’t understand how to compile
-
\\SERVER\Disco_C\rds.txt
is the file which is monitored, correct? Andintero
is the name of the macro?If so, call
notepad.runMenuCommand('Macro', 'intero')
but only, if Macro is the name of the menu. -
ok, it starts up but doesn’t work properly. The macro, if called manually, works correctly; if called via script (automatically) it compares badly.
I write an example…
Original txt, starting: “Shake you down - Gregory Abbott”
This is the result with the automatic script: Shake you dow - regory Abbott
This is the result if I run the macro manually: Gregory Abbott - Shake you downstrange, right?
thanks -
another example
txt original: “No woman no cry - Bob Marley”
no script: Bob Marley - No woman no cry
with script: No woman no cr - ob Marleydeletes one more character, next to the final leading quotes "
-
that is strange, indeed. May I ask you how exactly you did it?
I expect the following:- The file \SERVER\Disco_C\rds.txt is open in npp.
- You start the document monitor
- You start the script via the PythonScript menu, BUT only once. If you call it multiple times, the macro will be called the same number of times. I should have mentioned that before, sorry.
For testing, open the PythonScript console (via menu) and run
notepad.clearCallbacks()
after each try to be sure that no
callback is active anymore. Or add this line beforenotepad.callback(on_buffer_activate, [NOTIFICATION.BUFFERACTIVATED])
-
@Ekopalypse said in Macro script when txt content changes:
You start the script via the PythonScript menu, BUT only once. If you call it multiple times, the macro will be called the same number of times. I should have mentioned that before, sorry.
ahahah you are right :) The title and the interpreter are reversed twice … I should have guessed it.
It seems to work perfectly.
now, I just have a txt encoding problem but that goes beyond this postthank you all