Community
    • Login

    [vi simulator] how to highlight a word

    Scheduled Pinned Locked Moved Notepad++ & Plugin Development
    55 Posts 5 Posters 61.3k 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.
    • Claudia FrankC
      Claudia Frank @dail
      last edited by

      @dail

      I’m not sure about this, but, can we be sure that, if a synchronous action gets called it is more or
      less an atomic action? As far as I understood only the processor can assure atomic executions.
      In addition I thought that plugins running in their own threads, don’t they?

      for example why are indicators getting removed in the example gif Scott provided.

      :-) because of the bug?? :-) I was able to confirm that there must be a bug but my results weren’t
      that bad as Scotts - I assume it is related to the script runner Scott is using or …
      Scott you are using python script 1.0.8.0, do you?

      Cheers
      Claudia

      Scott SumnerS 1 Reply Last reply Reply Quote 0
      • dailD
        dail
        last edited by dail

        if a synchronous action gets called it is more or less an atomic action?

        Yes “atomic” in regards to Scintilla and Notepad++ not able to execute it’s own code.

        In addition I thought that plugins running in their own threads, don’t they?

        No, by default there is no threading involved. It is as simple as a function call (e.g. Notepad++ calling a plugin’s function).

        because of the bug??

        Yes but indicators should only get removed when editor.indicatorClearRange() is called, and assuming the Python code is only ran 1 time, then editor.indicatorClearRange() should only ever be called once…even if it is running asynchronously.

        Claudia FrankC 1 Reply Last reply Reply Quote 0
        • Scott SumnerS
          Scott Sumner @Claudia Frank
          last edited by

          @Claudia-Frank

          Yes, I’m using Pythonscript 1.0.8.0 with Notepad++ 7.2.2.

          When you say your results aren’t as “bad” as mine, I presume you mean that more of the text that should be highlighted remains so after a run of the Pythonscript? For me, I noticed that sometimes I get more “coverage” than I got for the run where I recorded the video, but it tends to run in spurts, meaning that I can’t predict how much coverage I’ll get but that it seems to be common to the previous run. Sometimes I’ll get very good coverage (only a few pieces of text don’t get highlighted), but I have no idea what influences this situation…

          My “script runner” is simply a pythonscript that executes the active .py file, so nothing special there…

          1 Reply Last reply Reply Quote 0
          • Claudia FrankC
            Claudia Frank @dail
            last edited by

            @dail - thank you for clarification.

            Yes but indicators should only get removed when editor.indicatorClearRange() is called, and assuming the Python code is only ran 1 time, then editor.indicatorClearRange() should only ever be called once…even if it is running asynchronously.

            From my test

            it looks like that some found items were not colored instead of the previous are cleared as shown
            by Scotts gif. To be honest, I didn’t really test if the uncolored once are reported as found - I will do so.

            Cheers
            Claudia

            Scott SumnerS 1 Reply Last reply Reply Quote 0
            • Scott SumnerS
              Scott Sumner @Claudia Frank
              last edited by

              @Claudia-Frank

              At one point I had some code in there to count the "if"s so that I could make sure they were all found by the search function…and I always saw a consistent and correct count.

              Claudia FrankC 1 Reply Last reply Reply Quote 0
              • Claudia FrankC
                Claudia Frank @Scott Sumner
                last edited by

                @Scott-Sumner

                I can confirm, I run it 100 times and it always reported it correctly but there is another strange thing
                as soon as I put a print statement (which needs sys.stdout = console redirection) into the while loop I always get all "if"s colored. I even can now put the setIndicatorCurrent out of the loop.

                else:
                    endPos = editor.getTextLength()
                    temp = editor.findText(FINDOPTION.WHOLEWORD | FINDOPTION.MATCHCASE, 0, endPos, 'if')
                    editor.setIndicatorCurrent(indicator)
                    console.clear()
                    while temp != None:
                        print temp
                        (s, e) = temp
                        editor.indicatorFillRange(s, e - s)
                        temp = editor.findText(FINDOPTION.WHOLEWORD | FINDOPTION.MATCHCASE, e, endPos, 'if')  
                print 'Done'
                

                First I thought about a timing issue but replacing the print statement with another time consuming action brings back the issue so … ???

                Cheers
                Claudia

                Scott SumnerS 1 Reply Last reply Reply Quote 0
                • Scott SumnerS
                  Scott Sumner @Claudia Frank
                  last edited by

                  @Claudia-Frank

                  Noticed that, too…sorry I didn’t mention it. :-)

                  Claudia FrankC 1 Reply Last reply Reply Quote 0
                  • Claudia FrankC
                    Claudia Frank @Scott Sumner
                    last edited by

                    @Scott-Sumner, @dail

                    I guess I found the reason. It’s basically what we already assumed. Npp is stepping in.
                    During debugging I noticed, that sometime indicator was reset to value 29 (in such a case it was always 29),
                    which, afaik, is used by smart highlighting.
                    Albeit following code worked by 100 consecutive runs always, there is a potential risk that it fails again.

                    endPos = editor.getTextLength()
                    temp = editor.findText(FINDOPTION.WHOLEWORD | FINDOPTION.MATCHCASE, 0, endPos, 'if')
                    editor.setIndicatorCurrent(indicator)
                    while temp != None:
                        (s, e) = temp
                        editor.indicatorFillRange(s, e - s)
                        if editor.getIndicatorCurrent() != indicator:
                            # print 'getIndicatorCurrent:{}'.format(editor.getIndicatorCurrent())
                            editor.setIndicatorCurrent(indicator)
                            editor.indicatorFillRange(s, e - s)
                        temp = editor.findText(FINDOPTION.WHOLEWORD | FINDOPTION.MATCHCASE, e, endPos, 'if')
                    

                    Cheers
                    Claudia

                    1 Reply Last reply Reply Quote 0
                    • Claudia FrankC
                      Claudia Frank
                      last edited by

                      By the way, disabling smart highlighting doesn’t solve the issue because than another set indicator jumps in.

                      Cheers
                      Claudia

                      1 Reply Last reply Reply Quote 0
                      • dailD
                        dail
                        last edited by

                        another set indicator jumps in.

                        Probably the xml tag highlighting.

                        Claudia FrankC 1 Reply Last reply Reply Quote 0
                        • Claudia FrankC
                          Claudia Frank @dail
                          last edited by

                          @dail

                          correct, if we disable smart and matching tags highlighting then it works as expected
                          but this, at least for me, isn’t desirable.

                          Cheers
                          Claudia

                          1 Reply Last reply Reply Quote 0
                          • dailD
                            dail
                            last edited by

                            @Claudia-Frank

                            but this, at least for me, isn’t desirable

                            Oh I totally agree, it was just to prove it was caused by N++ :)

                            1 Reply Last reply Reply Quote 1
                            • Js jSJ
                              Js jS
                              last edited by

                              This post is deleted!
                              1 Reply Last reply Reply Quote 0
                              • Js jSJ
                                Js jS
                                last edited by Js jS

                                run this with the “if” block on screen
                                and again with the “if” block off screen

                                same result on “normal text” file

                                the “if” block has to be added

                                gets flagged as spam if i include it

                                from timeit import default_timer as timer
                                
                                indicator = 12  # not sure what one is best to use but this works
                                editor.indicSetStyle       (indicator, INDICATORSTYLE.ROUNDBOX)
                                editor.indicSetAlpha       (indicator,  55)
                                editor.indicSetOutlineAlpha(indicator, 255)
                                
                                first =  726
                                last  = 2260 
                                
                                start = timer()
                                for s in range( first, last, 3):
                                    a=s
                                    editor.setIndicatorCurrent(indicator)
                                    editor.indicatorFillRange(s, 2)
                                
                                end = timer()
                                console.write("4:\t%f\n" % (end - start))
                                  
                                start = timer()
                                for s in range( first, last, 3):
                                    a=s
                                    editor.setIndicatorCurrent(indicator)
                                    editor.indicatorClearRange(s, 2)
                                
                                end = timer()
                                console.write("5:\t%f\n" % (end - start))
                                
                                1 Reply Last reply Reply Quote 0
                                • Js jSJ
                                  Js jS
                                  last edited by Js jS

                                  forgot to mention …

                                  open python console

                                  turning off brace matching and smart highlighting makes no difference

                                  npp 7.3.1 32 bit windows7 64bit

                                  1 Reply Last reply Reply Quote 0
                                  • Js jSJ
                                    Js jS
                                    last edited by

                                    addendum:

                                    moving the mouse during the script execution causes misses in highlighting

                                    Claudia FrankC Scott SumnerS 2 Replies Last reply Reply Quote 0
                                    • Claudia FrankC
                                      Claudia Frank @Js jS
                                      last edited by

                                      @Js-jS

                                      for me it is hard to see to whom you want to address to.
                                      May I ask you to add the name of the recipients to your post?
                                      Concerning the post, I’m not quite sure what you try to impart.
                                      Are you surprised about time differences?

                                      Cheers
                                      Claudia

                                      1 Reply Last reply Reply Quote 0
                                      • Scott SumnerS
                                        Scott Sumner @Js jS
                                        last edited by

                                        @Js-jS

                                        I, too, am confused about what you are trying to demonstrate here. I’m more inclined to try code out if there is also a clear description about what it is doing that is odd or interesting. After reading such a description, I can decide if I want to try the code out or not (if there is something about it that is interesting to me…). Anyway, we kind of beat to death the “highlighting IFs” situation a couple of months ago…not sure what new there is to take away from it.

                                        1 Reply Last reply Reply Quote 0
                                        • Js jSJ
                                          Js jS
                                          last edited by

                                          i was just adding my findings, in case anyone was still looking at this issue

                                          my knowledge is fairy limited, so i have not arrived to any real conclusion about the reason for the result

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