How to get breakpoint list ?
-
@Gregory-D said in How to get breakpoint list ?:
Ok, that part work, I get the scintilla for the current document, but for the next part I don’t find example, I tried that:
Here is some NppExec code to iterate the bookmarks in the active document.
SET LOCAL POS = 0 SET LOCAL FOUND = 0 SET LOCAL MASK ~ 1<<24 :LISTNEXT SCI_SENDMSG SCI_MARKERNEXT $(POS) $(MASK) IF $(MSG_RESULT)==-1 GOTO STOP NPP_CONSOLE on SET LOCAL FOUND = 1 SET LOCAL LINE ~ $(MSG_RESULT) + 1 SCI_SENDMSG SCI_GETLINE $(MSG_RESULT) @"" ECHO $(FULL_CURRENT_PATH):$(LINE): $(MSG_LPARAM) SET LOCAL POS = $(LINE) GOTO LISTNEXT :STOP IF $(FOUND)==0 THEN MESSAGEBOX "No Bookmarks Found" ENDIF
The API calls are pretty much the same (SCI_SENDMSG = ::SendMessage(getCurrScintilla(), <MESSAGE>, wParam, lParam)) and you can do C++ looping much cleaner than the GOTO required in NppExec.
I usually try to mock something up in NppExec (or “PerlScript” or PythonScript) before trying to add to a plugin.
Cheers.
-
In my notes on bookmark manipulation I have this thread and specifically THIS POST noted.
The logic flow there can probably help you. -
@Gregory-D said in How to get breakpoint list ?:
you should have just said, "no it’s not too much complicated, you just have to get the current scintilla, like that [little code] and retrieve the bookmark for each line like that [little code].
I don’t know…
Nobody here is going to “spoon feed” you every little detail.
If you’re a plugin writer, a certain level of “sophistication” is assumed.
Pointing you to the documentation should be enough.
Of course, I did point you to the documentation, and a specific function in those docs, but then in your follow-on posting you seemed to ignore that and went with a different function…
I’m not sure what to think.
I wish you good luck with your endeavors. -
I just need help for notepad++ plugin development in c++, you redirect me to scintilla api documentation, which has nothing to do with c++.
@Alan-Kilborn said in How to get breakpoint list ?:
I did point you to the documentation, and a specific function in those docs, but then in your follow-on posting you seemed to ignore that and went with a different function
Sorry I followed your link and see that SCI_MARKERGET returns the bookmark at a specific line, perfect for a test. I tested and it doesn’t work. But even if you’re convinced I’m a bad programmer, you think I would have more chance with SCI_MARKERNEXT that seems more advanced.
If you tell me why I get “0”, I’ll can understand and make both work, but you doesn’t seem to know c++, then just tell me that. -
@Michael-Vincent Thank you for the code, what I don’t understand is how to turn that in c++, the functino is ::SendMessage(getCurrScintilla(), <MESSAGE>, wParam, lParam)), then I need to put pos, mask and the result in wparam and lparam, 3 parameters into 2 ?
-
@Gregory-D said in How to get breakpoint list ?:
long line = 0;
int marker = 0;
::SendMessage(curScintilla, SCI_MARKERGET, line, (LPARAM)&marker);This is :
long line = 0; int marker=::SendMessage(curScintilla, SCI_MARKERGET, line, 0);
Right ?
-
I think maybe you’re not connecting the dots. The Scintilla docs @Alan-Kilborn linked are crucial since the Notepad++ editing component is based on Scintilla. As for “translating” my NppExec script to C++:
[...] HWND getCurScintilla() { int which = -1; ::SendMessage( nppData._nppHandle, NPPM_GETCURRENTSCINTILLA, 0, ( LPARAM )&which ); return ( which == 0 ) ? nppData._scintillaMainHandle : nppData._scintillaSecondHandle; } [...] int line = 0; int mask = 1<<24; SendMessage(getCurScintilla(), SCI_MARKERNEXT, line, mask);
That should get you the first bookmark since N++ uses 24 as the bookmark marker and thus bitshitfted 24 is the mask the Scintilla call requires. You’ll need to put your own C++ code / logic around that to determine if you’ve found them all and how to find the next one, but again, my NppExec “pseudo” code should help you with that - as will the Scintilla docs.
Cheers.
-
@Michael-Vincent said in How to get breakpoint list ?:
SendMessage(getCurScintilla(), SCI_MARKERNEXT, line, mask);
sorry:
int markerAtLine = ::SendMessage(getCurScintilla(), SCI_MARKERNEXT, line, mask);
Cheers.
-
@Michael-Vincent said in How to get breakpoint list ?:
The Scintilla docs @Alan-Kilborn linked are crucial since the Notepad++ editing component is based on Scintilla. As for “translating” my NppExec script to C++:
I’m sure about that, but what Alan Kilborn doesn’t understand is that my problem is not about Scintilla api that is documented but with the c++ conversion.
Then right code is:long line = 1; int mask = (1 << 24); int result=::SendMessage(curScintilla, SCI_MARKERNEXT, line, mask);
You helped me, thanks.
-
@Gregory-D said in How to get breakpoint list ?:
Then right code is:
Yup - methinks that’s correct.
Cheers.
-
Tangential to the topic, but not quite off-topic:
I started working with an older version of Visual Studio recently, due to what is used for certain projects at work.
I notice that its breakpointing symbol is VERY similar to Notepad’s bookmark image, the main difference being coloring:
In the past I’ve had a passing thought of “where did the design for the N++ bookmark come from?” as it isn’t a stock Scintilla indicator symbol like those shown HERE (with a little “scrolldown” from where that link goes).
Perhaps this “red” older-Visual-Studio BP symbol (shown above) was the origin of the N++ bookmark symbol.
The obvious stock Scintilla choice (had it been used) would have been:
BTW, current VS (2019) BP symboling is much less “fancy”; appears rather flat:
-
@Alan-Kilborn said in How to get breakpoint list ?:
The obvious stock Scintilla choice (had it been used) would have been:
Do you have NppExec (or Python Script) that allows a script to run at startup?
SCI_SENDMSG SCI_MARKERDEFINE 24 SC_MARK_BOOKMARK SCI_SENDMSG SCI_MARKERSETFORE 24 255 SCI_SENDMSG SCI_MARKERSETBACK 24 255
(Python Scrip implementation will vary ;-)
Cheers.
-
Yes, that is good information.
The Pythonscript implementation is very similar and straightforward.BTW, I wasn’t complaining about Notepad++'s default bookmark symbol image in any way. Just wondering/commenting on its possible origins. It hadn’t occurred to me that the origins might be with an earlier VS version.
-
@Alan-Kilborn said in How to get breakpoint list ?:
BTW, I wasn’t complaining about Notepad++'s default bookmark symbol image in any way
Didn’t think you were :-) it was more of an exercise to see if I could do it. I have an NppExec ‘marker’ script that adds different colored “bookmarks” by placing normal bookmarks and then converting them. So I though it’d be possible to just change the default symbol / color.
Cheers.