Community
    • Login

    Search in target is sometimes failing

    Scheduled Pinned Locked Moved Notepad++ & Plugin Development
    46 Posts 3 Posters 3.7k 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.
    • Peter GoddardP
      Peter Goddard @Ekopalypse
      last edited by

      @Ekopalypse

      I tell it to search for, “xml version”, but specifically it should find, help3.JPG
      in a text file that looks a bit like this
      help4.JPG

      EkopalypseE 1 Reply Last reply Reply Quote 0
      • EkopalypseE
        Ekopalypse @Peter Goddard
        last edited by

        @Peter-Goddard

        maybe you should, explicitly, set your searchFlags.

        Peter GoddardP 1 Reply Last reply Reply Quote 0
        • Peter GoddardP
          Peter Goddard @Ekopalypse
          last edited by

          @Ekopalypse

          That could be it, but why would it be only working sometimes?

          Michael VincentM EkopalypseE 2 Replies Last reply Reply Quote 0
          • Michael VincentM
            Michael Vincent @Ekopalypse
            last edited by

            @Ekopalypse said in Search in target is sometimes failing:

            only second scintilla

            Not strictly true, if you have two views open and you close the
            main view the second view stays to be the second.

            I second @Ekopalypse. In my plugins, I use:

            HWND getCurScintilla()
            {
                int which = -1;
                ::SendMessage( nppData._nppHandle, NPPM_GETCURRENTSCINTILLA, 0,
                               ( LPARAM )&which );
                return ( which == 0 ) ? nppData._scintillaMainHandle :
                       nppData._scintillaSecondHandle;
            }
            
            [,...]
            
            int start = (int)::SendMessage( getCurScintilla(), SCI_GETSELECTIONSTART, 0, 0 );
            

            This way, I can dynamically get the currently selected Scintilla view (1 or 2).

            As for your code, it works for me with following NppExec mock-up:

            SCI_SENDMSG SCI_TARGETWHOLEDOCUMENT
            
            SCI_SENDMSG SCI_GETSELECTIONSTART
            SET LOCAL START = $(MSG_RESULT)
            SCI_SENDMSG SCI_GETSELECTIONEND
            SET LOCAL END = $(MSG_RESULT)
            SCI_SENDMSG SCI_SETTARGETRANGE $(START) $(END)
            
            SCI_SENDMSG SCI_SEARCHINTARGET 11 "xml version"
            ECHO START=$(START) END=$(END) ==> $(MSG_RESULT)
            

            Running that NppExec script on the following file with NO highlighted text:

            hello there
            xml version
            goodbye there
            

            returns:
            START=38 END=38 ==> -1

            and if I highlight the whole document, it returns:
            START=0 END=38 ==> 12

            I think you may be able to simplify and not bother getting the start, end and SETTARGETRANGE and instead just use a call to SCI_TARGETFROMSELECTION

            Cheers.

            Peter GoddardP 1 Reply Last reply Reply Quote 2
            • Michael VincentM
              Michael Vincent @Peter Goddard
              last edited by

              @Peter-Goddard said in Search in target is sometimes failing:

              That could be it, but why would it be only working sometimes?

              Your search string is ANSI (const char *) but your file is Unicode?

              Peter GoddardP 1 Reply Last reply Reply Quote 2
              • EkopalypseE
                Ekopalypse @Peter Goddard
                last edited by

                @Peter-Goddard

                As said earlier, npp does also use SearchInTarget therefore it could be
                that npp sets flags which aren’t useful in your case.
                For example, having a flag SCFIND_WHOLEWORD might conflict with
                your “xml version”.

                1 Reply Last reply Reply Quote 1
                • Peter GoddardP
                  Peter Goddard @Michael Vincent
                  last edited by

                  @Michael-Vincent

                  I will try and use SCI_TARGETFROMSELECTION. I am not sure what you mean by, “Your search string is ANSI (const char *) but your file is Unicode?”. I am very new to this all, so thanks for the help

                  EkopalypseE 1 Reply Last reply Reply Quote 0
                  • EkopalypseE
                    Ekopalypse @Peter Goddard
                    last edited by Ekopalypse

                    @Peter-Goddard said in Search in target is sometimes failing:

                    I am not sure what you mean by, “Your search string is ANSI (const char *) but your file is Unicode?”

                    this is actually a very advanced topic and MUST be understood by
                    every programmer which handles text.
                    I suggest reading this and you have to understand, that Windows API,
                    internally, handles everything with UTF16 and that a char pointer is start of your nightmares. :-)

                    Peter GoddardP 1 Reply Last reply Reply Quote 2
                    • Peter GoddardP
                      Peter Goddard @Ekopalypse
                      last edited by

                      @Ekopalypse
                      Okay, thanks, as I said, I have limited experience with any of this stuff. I have only just started to program and I really appreciate you helping me out.

                      EkopalypseE Michael VincentM 2 Replies Last reply Reply Quote 0
                      • EkopalypseE
                        Ekopalypse @Peter Goddard
                        last edited by

                        @Peter-Goddard

                        Every big journey starts with a first step but you only reach your
                        destination if you keep walking. ;-)

                        1 Reply Last reply Reply Quote 0
                        • Peter GoddardP
                          Peter Goddard @Michael Vincent
                          last edited by

                          @Michael-Vincent

                          After testing, SCI_TARGETFROMSELECTION, I think you may have been right. This seems to have fixed it

                          EkopalypseE 1 Reply Last reply Reply Quote 0
                          • Michael VincentM
                            Michael Vincent @Peter Goddard
                            last edited by

                            @Peter-Goddard said in Search in target is sometimes failing:

                            Okay, thanks, as I said, I have limited experience with any of this stuff. I have only just started to program and I really appreciate you helping me out.

                            I understand, I’m not a programmer but have muddled my way through Scintilla docs and other N++ plugins and been able to hack together some working code.

                            @Ekopalypse has it right about Unicode / ANSI. By default, all N++ plugins are compiled for Unicode as N++ no longer published an ANSI version. So the difference in your plugin when handling text in N++ documents (like searching for it) is to expect Unicode.

                            You’ll probably see character strings in N++ plugins initialized with:

                            TCHAR cString[MAX_PATH];
                            

                            since this can be ANSI or Unicode depending on compiler switches and that was needed back when there was an ANSI N++.

                            https://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/tchar

                            Cheers.

                            1 Reply Last reply Reply Quote 3
                            • EkopalypseE
                              Ekopalypse @Peter Goddard
                              last edited by

                              @Peter-Goddard

                              By the way, you defined your start and end being ints.
                              But SendMessage returns an LRESULT which is defined as LONG_PTR, so just be careful because a position might overflow it.

                              Peter GoddardP 1 Reply Last reply Reply Quote 3
                              • Peter GoddardP
                                Peter Goddard @Ekopalypse
                                last edited by

                                @Ekopalypse So how would I prevent it from overflowing?

                                EkopalypseE 1 Reply Last reply Reply Quote 0
                                • EkopalypseE
                                  Ekopalypse @Peter Goddard
                                  last edited by Ekopalypse

                                  @Peter-Goddard said in Search in target is sometimes failing:

                                  So how would I prevent it from overflowing?

                                  Not sure I understand this question because I guess you know the obvious answer,
                                  which would be “use a datatype which is big enough to hold the values”, yourself.

                                  Peter GoddardP 1 Reply Last reply Reply Quote 1
                                  • Peter GoddardP
                                    Peter Goddard @Ekopalypse
                                    last edited by

                                    @Ekopalypse As I said, I am very new at this so I thought I would just make sure I am understanding you correctly. I am assuming I use LONG_PTR instead of int, correct?

                                    EkopalypseE 1 Reply Last reply Reply Quote 0
                                    • EkopalypseE
                                      Ekopalypse @Peter Goddard
                                      last edited by

                                      @Peter-Goddard

                                      There are several possible data types that can be used, but without knowing your code and concept, it is hard to say what to use.
                                      Personally, I would use INT_PTR, but if your result is ever converted to long, I would probably use LONG_PTR.

                                      Peter GoddardP 1 Reply Last reply Reply Quote 0
                                      • Peter GoddardP
                                        Peter Goddard @Ekopalypse
                                        last edited by Peter Goddard

                                        @Ekopalypse Would you mind looking at my code for one part of my plugin that is failing?

                                        EkopalypseE 1 Reply Last reply Reply Quote 0
                                        • EkopalypseE
                                          Ekopalypse @Peter Goddard
                                          last edited by

                                          @Peter-Goddard

                                          Sorry, but there is a small, but unfortunately insurmountable problem,
                                          I cannot program in C++, I am a python junkie :-)

                                          Peter GoddardP 1 Reply Last reply Reply Quote 0
                                          • Peter GoddardP
                                            Peter Goddard @Ekopalypse
                                            last edited by

                                            @Ekopalypse No problem. Maybe you could just confirm that this is a memory issue for me? After restarting notepad my plugin seems to work and I can use it over and over again until it fails and then won’t work until I restart notepad. I’m pretty sure this means it’s a memory problem, and I don’t really know where to go from here

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