Community
    • Login

    Search in target is sometimes failing

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

      @Peter-Goddard

      We don’t talk about casing problem,
      I mean you are searching for “xml version” and expect to find
      “XML version”, do we?

      Peter GoddardP 1 Reply Last reply Reply Quote 0
      • 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
                                            • First post
                                              Last post
                                            The Community of users of the Notepad++ text editor.
                                            Powered by NodeBB | Contributors