Community
    • Login

    Search in target is sometimes failing

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

                                @Ekopalypse So how would I prevent it from overflowing?

                                EkopalypseE 1 Reply Last reply Reply Quote 0
                                • EkopalypseE Offline
                                  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 Offline
                                    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 Offline
                                      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 Offline
                                        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 Offline
                                          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 Offline
                                            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

                                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                            With your input, this post could be even better 💗

                                            Register Login
                                            • First post
                                              Last post
                                            The Community of users of the Notepad++ text editor.
                                            Powered by NodeBB | Contributors