Community
    • Login

    Save found files?

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    26 Posts 5 Posters 3.0k 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.
    • Alan KilbornA
      Alan Kilborn @Ekopalypse
      last edited by

      @Ekopalypse

      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… :-)

      EkopalypseE 2 Replies Last reply Reply Quote 1
      • EkopalypseE
        Ekopalypse @Alan Kilborn
        last edited by

        @Alan-Kilborn

        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?

        1 Reply Last reply Reply Quote 1
        • EkopalypseE
          Ekopalypse
          last edited by

          Sorry, Forgot to include the structure reference.

          1 Reply Last reply Reply Quote 1
          • EkopalypseE
            Ekopalypse @Alan Kilborn
            last edited by Ekopalypse

            @Alan-Kilborn

            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}')
            
            Alan KilbornA 1 Reply Last reply Reply Quote 2
            • Alan KilbornA
              Alan Kilborn @Ekopalypse
              last edited by

              @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...
              EkopalypseE 1 Reply Last reply Reply Quote 1
              • EkopalypseE
                Ekopalypse @Alan Kilborn
                last edited by

                @Alan-Kilborn

                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.

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post
                The Community of users of the Notepad++ text editor.
                Powered by NodeBB | Contributors