Community
    • Login

    Style token not saved

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    30 Posts 8 Posters 11.1k 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.
    • John RomeroJ
      John Romero
      last edited by

      I am a newbie, so hope I am not wasting peoples time. I am using the Style token to ‘highlight’ some lines of code. I save the file and when I reopen it, the highlighting is gone. I have also tried to ‘save session’ but the results are the same.

      Please advise if what I am asking for is possible, or the steps I should be doing to acomplish my goal.

      Thanks in advance for your time to reply.

      John R. in NC

      Alan KilbornA 1 Reply Last reply Reply Quote 0
      • Alan KilbornA
        Alan Kilborn @John Romero
        last edited by

        @John-Romero said:

        Please advise if what I am asking for is possible

        Not currently possible.

        the steps I should be doing to acomplish my goal

        I don’t know that there are any. :(

        1 Reply Last reply Reply Quote 0
        • PeterJonesP
          PeterJones
          last edited by

          @Alan-Kilborn said:

          I don’t know that there are any. :(

          I’m not good with the bookmarks / mark-styles… but I seem to remember there’s been some PythonScript about them before… I’m wondering if a script could be written that could store a session-like record of what’s been marked, and then re-mark when that file is reloaded again.

          Alan KilbornA 1 Reply Last reply Reply Quote 2
          • Alan KilbornA
            Alan Kilborn @PeterJones
            last edited by

            @PeterJones

            It could be done, not sure I remember a script, tho.

            A problem could be that people then start thinking it is a dynamic thing, whereas styling is an on-demand thing.

            Say you had a document with several occurrences of supercalifragilisticexpialidocious in it, and the user styles that as say style #4, and then a script remembers that. From that point forward, if a new occurrence of that word occurs, either by the user typing it out (horror for the example word!) or by a paste of it, the expectation might be that the new occurrence gets the styling. But that goes against the concept of on-demand…

            So I’m not quite sure what to make of this. I (or Eko!) could do a script, but the spec is uncertain.

            1 Reply Last reply Reply Quote 2
            • John RomeroJ
              John Romero
              last edited by

              Thanks for your responses. What I am doing is migrating code code from one financial trading platform to another. No color - means I still need to do something. So, as I migrate a group of lines, I highlight them one color to know what I have / have not done. If I am not migrating them, then I highlight them another color. This way, when I get done, it will be easier for me to see if a line of code I did not migrate, was really needed, or ‘rethink’ how to do it in the new platform.

              Again - to all. Thanks for your time to look at this. I am currently using Word, as it lets me do this, but does not have any of the nice to have as a coder. (matching brackets, etc. in c#)

              John

              Alan KilbornA 2 Replies Last reply Reply Quote 3
              • Alan KilbornA
                Alan Kilborn @John Romero
                last edited by

                Peter said:

                I’m not good with the bookmarks / mark-styles… but I seem to remember there’s been some PythonScript about them before

                Peter was thinking of this I think: https://notepad-plus-plus.org/community/topic/18052/bookmark-by-style

                @John-Romero :

                Sure, this type of thing could be adapted for a Load/Save type functionality. Let me see what I can do. But no promises… [Note, I only go off and do these types of things because there could potentially be value in it for my use as well.]

                1 Reply Last reply Reply Quote 2
                • Alan KilbornA
                  Alan Kilborn @John Romero
                  last edited by

                  So as luck would have it I had some time immediately. :)

                  I would caution users to work with this with documents that are read-only, otherwise be very careful about not changing any data until you’ve reloaded the styles with it from a previous run of N++. Otherwise the styling that is loaded will be “skewed” and will be, well, basically lost and unrecoverable. You’ve been warned. No actual text data will be harmed in any event.

                  Here’s the Pythonscript that works for either saving or loading the styling. It works for the currently loaded Notepad++ file (name doesn’t matter) and saves its info to a fixed-name data file. All this behavior can be changed, but that’s left as an exercise for the reader; I’m just trying to get the core logic expressed here. Error-checking is minimal to non-existent. Niceties: missing-in-acton as well. Much of the core of the script copied from the link referenced earlier.

                  def main():
                  
                      result = notepad.messageBox("SAVE current doc's styling to disk file?\r\n\r\nYES = Yes, please\r\nNO = LOAD styling info from file and apply to current doc\r\nCANCEL = I'm outta here", '', MESSAGEBOXFLAGS.YESNOCANCEL)
                      if result == MESSAGEBOXFLAGS.RESULTCANCEL: return
                      saving_not_loading = True if result == MESSAGEBOXFLAGS.RESULTYES else False
                  
                      # identifiers pulled from N++ source code:
                      SCE_UNIVERSAL_FOUND_STYLE_EXT1 = 25  # N++ style 1 indicator number
                      SCE_UNIVERSAL_FOUND_STYLE_EXT2 = 24  # N++ style 2 indicator number
                      SCE_UNIVERSAL_FOUND_STYLE_EXT3 = 23  # N++ style 3 indicator number
                      SCE_UNIVERSAL_FOUND_STYLE_EXT4 = 22  # N++ style 4 indicator number
                      SCE_UNIVERSAL_FOUND_STYLE_EXT5 = 21  # N++ style 5 indicator number
                      SCE_UNIVERSAL_FOUND_STYLE = 31  # N++ red-"mark" feature highlighting style indicator number
                  
                      indicator_number_list = []
                      indicator_number_list.append(SCE_UNIVERSAL_FOUND_STYLE_EXT1)
                      indicator_number_list.append(SCE_UNIVERSAL_FOUND_STYLE_EXT2)
                      indicator_number_list.append(SCE_UNIVERSAL_FOUND_STYLE_EXT3)
                      indicator_number_list.append(SCE_UNIVERSAL_FOUND_STYLE_EXT4)
                      indicator_number_list.append(SCE_UNIVERSAL_FOUND_STYLE_EXT5)
                      indicator_number_list.append(SCE_UNIVERSAL_FOUND_STYLE)
                  
                      if saving_not_loading:
                  
                          def highlight_indicator_range_tups_generator(indicator_number):
                              '''
                              the following logic depends upon behavior that isn't exactly documented;
                              it was noticed that calling editor.indicatorEnd() will yield the "edge"
                              (either leading or trailing) of the specified indicator greater than the position
                              specified by the caller
                              this is definitely different than the scintilla documentation:
                              "Find the start or end of a range with one value from a position within the range"
                              '''
                              if editor.indicatorEnd(indicator_number, 0) == 0: return
                              indicator_end_pos = 0  # set special value to key a check the first time thru the while loop
                              while True:
                                  if indicator_end_pos == 0 and editor.indicatorValueAt(indicator_number, 0) == 1:
                                      # we have an indicator starting at position 0!
                                      # when an indicator highlight starts at position 0, editor.indicatorEnd()
                                      #  gives us the END of the marking rather than the beginning;
                                      #  have to compensate for that:
                                      indicator_start_pos = 0
                                  else:
                                      indicator_start_pos = editor.indicatorEnd(indicator_number, indicator_end_pos)
                                  indicator_end_pos = editor.indicatorEnd(indicator_number, indicator_start_pos)
                                  if indicator_start_pos == indicator_end_pos: break  # no more matches
                                  yield (indicator_start_pos, indicator_end_pos)
                  
                          with open('styling.txt', 'w') as f:
                              for indic_number in indicator_number_list:
                                  for (styled_start_pos, styled_end_pos) in highlight_indicator_range_tups_generator(indic_number):
                                      f.write('{i} {start} {stop}\n'.format(i=indic_number, start=styled_start_pos, stop=styled_end_pos))
                  
                      else:
                  
                          with open('styling.txt') as f:
                              for line in f:
                                  (indic, start, end) = line.rstrip().split()
                                  editor.setIndicatorCurrent(int(indic))
                                  editor.indicatorFillRange(int(start), int(end) - int(start))
                  
                  main()
                  
                  djinncoyoteD BallardiniFANSB 2 Replies Last reply Reply Quote 3
                  • djinncoyoteD
                    djinncoyote @Alan Kilborn
                    last edited by

                    @alan-kilborn Thank you, Alan!

                    I was looking for something like this, and have verified this Python script still works on Notepad++ v8.1.9.2.

                    For me it saved the styling.txt file in the same folder as the Python scripts, under [install path]\Notepad++\plugins\config\PythonScript\scripts.

                    When I tried to use the Python script to reload/apply the saved styles, at first I got a “No such file or directory” error.

                    That went away after I changed the script to save the styling file in the same folder as the file being edited.
                    I also changed the styling filename to match the name of the file being edited with “_nppStyling.txt” appended.
                    This lets you save multiple styling files, and you can easily see by browsing your folders, which files you’ve saved styles for.

                    To do that, I added these lines to the beginning of the main() method:

                        currentFilePath = notepad.getCurrentFilename()
                        stylingFileName = currentFilePath + '_nppStyling.txt'
                    

                    Then I used the stylingFileName variable in place of ‘styling.txt’.

                    1 Reply Last reply Reply Quote 3
                    • BallardiniFANSB
                      BallardiniFANS @Alan Kilborn
                      last edited by BallardiniFANS

                      @Alan-Kilborn
                      Hi, I know that the topic is so old, but I try the same to explain my problem:

                      I executed your code, but the script returns the following error:

                      SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 16-17: malformed \N character escape

                      Can you help me? I’m not a Python expert, so I don’t understand how to fix this issue. I’m using a v8.4.2 of Notepad++.

                      Thanks

                      Alan KilbornA 1 Reply Last reply Reply Quote 0
                      • Alan KilbornA
                        Alan Kilborn @BallardiniFANS
                        last edited by

                        @BallardiniFANS said in Style token not saved:

                        Can you help me?

                        I’ll certainly try.

                        SyntaxError: (unicode error) ‘unicodeescape’ codec can’t decode bytes in position 16-17: malformed \N character escape

                        A SyntaxError is a problem with the script, not with the data you are running it on.

                        Perhaps as a first step to debugging this problem, try changing the script to put this as line 1 of it:

                        # -*- coding: utf-8 -*-
                        
                        BallardiniFANSB 1 Reply Last reply Reply Quote 0
                        • BallardiniFANSB
                          BallardiniFANS @Alan Kilborn
                          last edited by BallardiniFANS

                          @Alan-Kilborn
                          I tried putting it at the first row.

                          # -*- coding: utf-8 -*-
                          

                          The error is the same :/

                          Alan KilbornA 1 Reply Last reply Reply Quote 0
                          • Alan KilbornA
                            Alan Kilborn @BallardiniFANS
                            last edited by

                            @BallardiniFANS

                            Hmm, at this point, I’m not sure.

                            Does the Notepad++ status bar indicate that your file’s encoding is UTF-8?

                            I just tried the script as written above in a fresh setup of N++ v8.4.7 and PythonScript v3.0.12, as well as also trying it with PS v2.0, and the script ran fine, either with or without the new first line I asked you to add.

                            Aside from having you examine your copy of the script file in a hex editor, to see if somehow an oddball character has crept in (at the position indicated by the error message), I’m not sure what else to do here.

                            Maybe @PeterJones has an idea?

                            BallardiniFANSB 1 Reply Last reply Reply Quote 0
                            • BallardiniFANSB
                              BallardiniFANS @Alan Kilborn
                              last edited by BallardiniFANS

                              @Alan-Kilborn said in Style token not saved:

                              Does the Notepad++ status bar indicate that your file’s encoding is UTF-8?

                              yep, I checked it now, it is setted on: Format -> Coding in UTF-8.
                              However, I explain the step that i’m doing, probably I wrong something:

                              1. This is the path where the script is located : C:\Program Files\Notepad++\plugins\Config\PythonScript

                              In this path I putted also a file called styling.txt

                              1. I’m using Python 3.10 to run the script.
                              Alan KilbornA 1 Reply Last reply Reply Quote 0
                              • Alan KilbornA
                                Alan Kilborn @BallardiniFANS
                                last edited by Alan Kilborn

                                @BallardiniFANS said in Style token not saved:

                                This is the path where the script is located

                                As long as you can see the script when you go here in the N++ menu (as you need to do to run it), the location of the script should be fine:

                                a8fe5330-9a8d-47bf-973f-1f2ef286641d-image.png

                                In this path I putted also a file called styling.txt

                                Well the script puts that file there, not you. So I don’t think knowing this gets us anywhere with the debugging.

                                BallardiniFANSB 1 Reply Last reply Reply Quote 0
                                • BallardiniFANSB
                                  BallardiniFANS @Alan Kilborn
                                  last edited by BallardiniFANS

                                  @Alan-Kilborn
                                  It works now, I see the windows of the script.
                                  Click on yes, the script should save the style token, but when I close and reopen the file .txt the style token of the file is disappear.

                                  4789534564.png

                                  Alan KilbornA BallardiniFANSB 2 Replies Last reply Reply Quote 0
                                  • Alan KilbornA
                                    Alan Kilborn @BallardiniFANS
                                    last edited by Alan Kilborn

                                    @BallardiniFANS said in Style token not saved:

                                    It works now

                                    GREAT!

                                    but when I close and reopen the file .txt the token style of the file is disappear

                                    Are you running the script again, and choosing No this time?

                                    BallardiniFANSB 1 Reply Last reply Reply Quote 0
                                    • BallardiniFANSB
                                      BallardiniFANS @Alan Kilborn
                                      last edited by

                                      @Alan-Kilborn said in Style token not saved:

                                      Are you running the script again, and choosing No this time?

                                      I’m doing these steps:

                                      1. I put a style token on a word.
                                      2. Run the script and click on YES.
                                      3. Close and Reopen the file .txt
                                      4. I don’t see the style token, I Run the script again and click on NO.

                                      After step 4 I see the text without style token.

                                      1 Reply Last reply Reply Quote 0
                                      • BallardiniFANSB
                                        BallardiniFANS @BallardiniFANS
                                        last edited by

                                        @BallardiniFANS said in Style token not saved:

                                        Click on yes, the script should save the style token, but when I close and reopen the file .txt the style token of the file is disappear.

                                        The problem can be due to the Notepad++ version?

                                        BallardiniFANSB 1 Reply Last reply Reply Quote 0
                                        • BallardiniFANSB
                                          BallardiniFANS @BallardiniFANS
                                          last edited by BallardiniFANS

                                          Update: I tried with the v8.1.9.2, but nothing changes.

                                          @Alan-Kilborn Have you any idea? Is it work in your environment?
                                          Let me know, this function is fundamental for me eheh.

                                          Alan KilbornA 1 Reply Last reply Reply Quote 0
                                          • Alan KilbornA
                                            Alan Kilborn @BallardiniFANS
                                            last edited by

                                            @BallardiniFANS

                                            Yes, it works fine for me. I would have mentioned it if it didn’t.

                                            I’m sort of out of ideas on why it isn’t working for you.

                                            It might be nice to have some independent verification from others that the script works fine for them. @PeterJones maybe?

                                            You could certainly try the script with a newer version of Notepad++ than 8.1.* and see if that makes a difference.

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