• Login
Community
  • Login

Smart HighLighting for multiple view !

Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
9 Posts 2 Posters 7.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.
  • M
    Marvin Gerardin
    last edited by Dec 20, 2015, 12:26 AM

    Hello,

    I search a way to display all variables on all view.

    Ex: http://fr.tinypic.com/r/e13ln5/9

    Thank you for your help

    C 1 Reply Last reply Dec 22, 2015, 11:52 PM Reply Quote 0
    • C
      Claudia Frank @Marvin Gerardin
      last edited by Dec 22, 2015, 11:52 PM

      Hello Marvin Gerardin

      I have a python script which could almost do what you want.
      What needs to be done first is described here.

      def clearScintillaCallbacks():
          editor.clearCallbacks([SCINTILLANOTIFICATION.DOUBLECLICK, SCINTILLANOTIFICATION.INDICATORCLICK]) 
      
      clearScintillaCallbacks()
          
      def clearIndicators():
          text_end_position1 = editor1.getLength()
          text_end_position2 = editor2.getLength()
      
          editor1.setIndicatorCurrent(8)
          editor1.indicatorClearRange(0, text_end_position1)
      
          editor2.setIndicatorCurrent(8)
          editor2.indicatorClearRange(0, text_end_position2)
      
      def toggleview():
          # 0 = main_view
          # 1 = second_view
          current_doc_index_main_view = notepad.getCurrentDocIndex(0)
          current_doc_index_second_view = notepad.getCurrentDocIndex(1)
      
          if notepad.getCurrentView() == 0:
              notepad.activateIndex(1, current_doc_index_second_view)
          else:
              notepad.activateIndex(0, current_doc_index_main_view)
      
      def colorize():
      
          selected_text = editor.getSelText()
          
          clearIndicators()
      
          toggleview()
          
          matches = []
          editor.research('\\b{0}\\b'.format(selected_text), lambda m: matches.append(m.span(0)))
      
          for match in matches:
              editor.indicSetStyle(8,INDICATORSTYLE.ROUNDBOX)
              editor.indicSetFore(8,(117,217,117))
              editor.indicSetAlpha(8,255)
              editor.indicSetOutlineAlpha(8,255)
              editor.indicSetUnder(8,True)   
              editor.setIndicatorCurrent(8)
              editor.indicatorFillRange(match[0], match[1] - match[0])  
          
          toggleview()
          
      def sci_callback_DOUBLECLICK(args):
          if editor2:
              colorize()
          else:
              clearScintillaCallbacks()
      
      def sci_callback_INDICATORCLICK(args):
          clearIndicators()
          
      editor.callback(sci_callback_DOUBLECLICK, [SCINTILLANOTIFICATION.DOUBLECLICK]) 
      editor.callback(sci_callback_INDICATORCLICK, [SCINTILLANOTIFICATION.INDICATORCLICK])    
      

      I hope that code itself is self-explaining mostly therefore I only describe
      the critical parts and how it should be used.

      The script itself registers two callback functions,
      sci_callback_DOUBLECLICK and sci_callback_INDICATORCLICK.

      When you doubleclick on a text the function gets called
      and tries to find the selected word in the 2nd view. If it
      can be found it marks it. If you click (only one mouse click)
      on the marked text, highlighting disappears.
      If you click anywhere else only the highlighted text in this view
      loses its markings. If you close the second view and double click
      on a text then all callbacks will be cleared.

      So, after you created the script
      run it
      open both views and
      play with it by double clicking words.

      As already described, 2nd view needs to be active before
      you double click words or callbacks get cleared and you
      need to run the script again.

      One minor issue I discovered while testing.
      It happened to me that words which were already
      highlighted got cleaned again. Not sure why?
      But it looks like this only happens if you
      often double click in short time.

      If this is all greek to you let me know I try to clarify.

      Cheers
      Claudia

      1 Reply Last reply Reply Quote 0
      • M
        Marvin Gerardin
        last edited by Dec 31, 2015, 2:38 PM

        Thank you for your reply.

        This work with 2 identical file (WinMerge)
        http://i66.tinypic.com/xqgm85.png

        what I would like:
        http://i68.tinypic.com/2mma5nr.png

        C 1 Reply Last reply Dec 31, 2015, 4:07 PM Reply Quote 0
        • C
          Claudia Frank @Marvin Gerardin
          last edited by Claudia Frank Dec 31, 2015, 4:08 PM Dec 31, 2015, 4:07 PM

          Hello Marvin-Gerardin

          at the beginning of your script put

          import re
          

          which means import the regular expression module.

          and change the line

          editor.research('\\b{0}\\b'.format(selected_text), lambda m: matches.append(m.span(0)))
          

          with

          editor.research('{0}'.format(selected_text), lambda m: matches.append(m.span(0)),re.IGNORECASE)
          

          which forces the research function to, well, ignore the case. And missing of \\b has the additional feature to ignore
          whether this is a whole word or just part of a word.

          Cheers
          Claudia

          1 Reply Last reply Reply Quote 0
          • M
            Marvin Gerardin
            last edited by Dec 31, 2015, 4:35 PM

            @Claudia-Frank said:

            which forces the research function to, well, ignore the case. And missing of \b has the additional feature to ignore
            whether this is a whole word or just part of a word.

            No work :/ http://i64.tinypic.com/169ruxg.png

            def clearScintillaCallbacks():
            editor.clearCallbacks([SCINTILLANOTIFICATION.DOUBLECLICK, SCINTILLANOTIFICATION.INDICATORCLICK])

            clearScintillaCallbacks()

            def clearIndicators():
            text_end_position1 = editor1.getLength()
            text_end_position2 = editor2.getLength()

            editor1.setIndicatorCurrent(8)
            editor1.indicatorClearRange(0, text_end_position1)
            
            editor2.setIndicatorCurrent(8)
            editor2.indicatorClearRange(0, text_end_position2)
            

            def toggleview():
            # 0 = main_view
            # 1 = second_view
            current_doc_index_main_view = notepad.getCurrentDocIndex(0)
            current_doc_index_second_view = notepad.getCurrentDocIndex(1)

            if notepad.getCurrentView() == 0:
                notepad.activateIndex(1, current_doc_index_second_view)
            else:
                notepad.activateIndex(0, current_doc_index_main_view)
            

            def colorize():

            selected_text = editor.getSelText()
            
            clearIndicators()
            
            toggleview()
            
            matches = []
            editor.research('{0}'.format(selected_text), lambda m: matches.append(m.span(0)),re.IGNORECASE)
            
            for match in matches:
                editor.indicSetStyle(8,INDICATORSTYLE.ROUNDBOX)
                editor.indicSetFore(8,(117,217,117))
                editor.indicSetAlpha(8,255)
                editor.indicSetOutlineAlpha(8,255)
                editor.indicSetUnder(8,True)
                editor.setIndicatorCurrent(8)
                editor.indicatorFillRange(match[0], match[1] - match[0])
            
            toggleview()
            

            def sci_callback_DOUBLECLICK(args):
            if editor2:
            colorize()
            else:
            clearScintillaCallbacks()

            def sci_callback_INDICATORCLICK(args):
            clearIndicators()

            editor.callback(sci_callback_DOUBLECLICK, [SCINTILLANOTIFICATION.DOUBLECLICK])
            editor.callback(sci_callback_INDICATORCLICK, [SCINTILLANOTIFICATION.INDICATORCLICK])

            1 Reply Last reply Reply Quote 0
            • C
              Claudia Frank
              last edited by Dec 31, 2015, 4:41 PM

              Hello,

              I don’t see the

              import re
              

              line, which would break the whole script.
              Could you open console (Plugins->Pytrhon Script->Show Console)
              and run the script again. Do you get any errors?

              Cheers
              Claudia

              1 Reply Last reply Reply Quote 0
              • M
                Marvin Gerardin
                last edited by Dec 31, 2015, 4:59 PM

                is my script:
                https://drive.google.com/file/d/0B884biTIbPZ-ekU3V2VqZGtKXzg/view?usp=sharing

                in :
                C:\Users*\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts

                I do not understand what I have to do in the console :/

                I have a message:
                PluginsManager::runPluginCommand Exception
                Unknown exeception

                and this : http://i64.tinypic.com/4r2hqe.png

                C 1 Reply Last reply Dec 31, 2015, 5:02 PM Reply Quote 0
                • C
                  Claudia Frank @Marvin Gerardin
                  last edited by Dec 31, 2015, 5:02 PM

                  @Marvin-Gerardin
                  sorry have to leave - will come back on this next year ;-)

                  Cheers
                  Claudia

                  1 Reply Last reply Reply Quote 1
                  • C
                    Claudia Frank
                    last edited by Jan 1, 2016, 4:30 AM

                    So let’s summarize.
                    The script worked before but not as expected
                    because the original version matched only whole words
                    and not if the searched word is part of another word.

                    To change this I changed

                    editor.research('\\b{0}\\b'.format(selected_text), lambda m: matches.append(m.span(0)))
                    

                    to

                    editor.research('{0}'.format(selected_text), lambda m: matches.append(m.span(0)))
                    

                    then I thought maybe there can be also a difference in notation
                    therefore I included regex module

                    import re
                    

                    and added the ignorecase flag to the research function.

                    editor.research('{0}'.format(selected_text), lambda m: matches.append(m.span(0)),re.IGNORECASE)
                    

                    Which broke not only your uploaded code, which by the way is working for me,
                    but also the python script plugin??

                    This is weird. There is nothing fancy here. re module is part of the standard python lib.

                    OK, please comment the import re line

                    # import re
                    

                    and change the editor.research … to

                    editor.research('{0}'.format(selected_text), lambda m: matches.append(m.span(0)))
                    

                    and do another test.

                    You do not need to do anything in the python script console, just open it, it serves as an
                    error output window if something within the python code is wrong.
                    For example if you add the re.IGNORECASE flag but you do not import re module first
                    the error would be shown in the console window as soon as you double click on a word.

                    Traceback (most recent call last):
                      File "...\Notepad++\plugins\Config\PythonScript\scripts\Highlight.py", line 42, in sci_callback_DOUBLECLICK
                        colorize()
                      File "...\Notepad++\plugins\Config\PythonScript\scripts\Highlight.py", line 29, in colorize
                        editor.research('{0}'.format(selected_text), lambda m: matches.append(m.span(0)),re.IGNORECASE)
                    NameError: global name 're' is not defined
                    

                    May I ask you which OS, npp and python script plugin version you use?

                    Cheers
                    Claudia

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