Save found files?
-
@Alan-Kilborn FANTASTIC! Thank you so much, it works perfectly. My colleague and I are delighted. :))
Thank you other guys as well.
Awesome forum.
-
My script code has a .getText function on the FindResultPanel object.
With it I can, obviously, get the text of the Find-result window.
However, I’d like to be able to get the matching text, but I don’t know how to accomplish this.
Visually, I can see the hit results in the window as red text on a yellow background.
Anyone know how I can pull this information? -
Why not using the styling information to identify the matched text?
-
@Ekopalypse said in Save found files?:
Why not using the styling information to identify the matched text?
Well, TBH when I earlier went searching in the N++ source code for
SCE_SEARCHRESULT_
*, I saw no occurrences ofSCE_SEARCHRESULT_WORD2SEARCH
occurring at all, so I was confused as to how it worked and was thinking it might not be possible at all to get this info via PS, even with ctypes usage.But with some experimentation with
SCI_GETSTYLEAT
it seems that I can recall the info; for example, in my “hit” text I get a style result of 4, which is indeedSCE_SEARCHRESULT_WORD2SEARCH
.Is N++ source using hardcoded magic numbers for this instead of the “tags”, or some other mechanism that is strange or at least isn’t clear to me?
Hmm, had a thought to search the Scintilla part of N++, where I do see
SCE_SEARCHRESULT_WORD2SEARCH
used. That must be how it is done. -
BTW, I’m still confused after looking at N++ source on how N++ identifies the hit text, so that the “search result” lexer knows where it is, so if you can shed any light on that… if you’re sufficiently interested in doing so… :-)
-
Is N++ source using hardcoded magic numbers for this instead of
Not sure I understand the question correctly.
Every lexer has hard coded style ids, which then get mapped
with a color via stylers.xml. See searchResult.how N++ identifies the hit text
It uses an internal struct MarkingsStruct which seems to be filled and provided
as a property to the document. Maybe something you can use to your advantage? -
Sorry, Forgot to include the structure reference.
-
Made me a bit of a headache because I assumed that the pointer was an integer data type
but the npp code actually said that it was a const char pointer.
In short, here’s a python script that can determine the positions of the matches.I leave the changes from py3 to py2 to you :-)
class SearchResultMarking(ctypes.Structure): _fields_ = [('_start', ctypes.c_long), ('_end', ctypes.c_long)] class SearchResultMarkings(ctypes.Structure): _fields_ = [('_length', ctypes.c_long), ('_markings', ctypes.POINTER(SearchResultMarking))] # const char *addrMarkingsStruct = (styler.pprops)->Get("@MarkingsStruct"); addrMarkingsStruct = f_editor.getProperty("@MarkingsStruct").encode() # SearchResultMarkings* pMarkings = NULL; pMarkings = ctypes.pointer(SearchResultMarkings()) # sscanf(addrMarkingsStruct, "%p", (void**)&pMarkings); ctypes.cdll.msvcrt.sscanf(addrMarkingsStruct, b"%p", ctypes.byref(pMarkings)) for i in range(pMarkings.contents._length): print(f'line {i} start:{pMarkings.contents._markings[i]._start} - end:{pMarkings.contents._markings[i]._end}')
-
@Ekopalypse said in Save found files?:
I leave the changes from py3 to py2 to you
Not a big burden, only the “print” line for that…
But…What’s your magic behind
f_editor
? Instead of that I would have expected something like what I did in the earlier code I posted in this thread; something much messier, like:ctypes.WinDLL('SciLexer.dll', use_last_error=True).Scintilla_DirectFunction(self.direct_pointer, 2182, length_of_text, text_of_document)``` but using a different number than `2182` and different parameters, of course...
-
Not a big burden, only the “print” line for that…
and the encode is not needed as py2 returns bytes
as well as the b before the “%p”.But…What’s your magic behind f_editor?
Nothing, this is just my object which represents the editor in the find in files window.
As you said, what you would have expected must be done on your side.