Community
    • Login

    Search++: A work in progress

    Scheduled Pinned Locked Moved Notepad++ & Plugin Development
    193 Posts 11 Posters 58.8k Views 3 Watching
    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.
    • CoisesC Online
      Coises
      last edited by Coises

      Search++ version 0.7.0.2 is a test of my second attempt at improved bookmark handling. Help and change log have not been updated.

      @guy038, @peterjones, @astewart77 and anyone else interested, please let me know if this is better than the last attempt, and anything you would like to be different.

      • Fixed right-click in Find or Search box causing next left-click on a Search++ menu to act as if it were a right-click.
      • Some changes in the wording and organization of the Configure bookmarks dialog.
      • Separated Invert and Synchronize into sub-menus on the Tools menu, with all sub-menu choices now independent of the Configure bookmarks settings.

      Hopefully the Configure bookmarks dialog is a little more clear now. I rearranged it as @guy038 suggested, putting the Bookmark lines when marking text check box at the top and disabling everything when it is not checked, and I made some changes in wording:

      ca283686-805c-46c7-9061-d5ea1c5bfb12-image.jpeg

      In version 0.7.0.1, the Invert marked text and Synchronize bookmarks to marked text commands on the Tools menu were affected by some settings in the Configure bookmarks dialog but not by others. It was confusing.

      In version 0.7.0.2 the dialog is more explicit about what commands respond to the settings in the bottom box. The commands that were previously exceptions are now on sub-menus, Invert marks or bookmarks and Synchronize marks and bookmarks. Each sub-menu has several options, none of which depend on settings in the Configure bookmarks dialog.

      A downside to this is that there are no keyboard shortcuts for the items on the sub-menus. (There are only a couple available shortcuts left, and I can’t see how I could prioritize one over another.)

      • The sub-menu options that are qualified with “excluding line endings” mark entire lines to match bookmarks, but avoid marking the line ending characters.
      • “Add (book)marks” vs “(Book)Mark only” distinguishes adding to preexisting marks or bookmarks from clearing them first.

      All feedback is welcome and appreciated.

      1 Reply Last reply Reply Quote 0
      • guy038G Offline
        guy038
        last edited by guy038

        Hi, @coises,

        Yesterday, I did not have time to thoroughly test your 0.7.0.1 release. So, today, I downloaded your last v0.7.0.2 release that I’m presently testing !

        See you later, in the evening ( in France ! )

        BR

        guy038

        1 Reply Last reply Reply Quote 1
        • guy038G Offline
          guy038
          last edited by guy038

          Hello, @coises,

          For, the tests below, I needed, of course, to un-check the Always unmark all text before Mark command. (Otherwise add to existing marked text.) option in Settings

          Regarding the present Synchronize marks and bookmarks sub-mneu, below :

          Add a bookmark to each line with marked text
          Add a bookmark to the first line of each span of marked text
          
          Bookmark only lines with marked text
          Bookmark only the first line of each span of marked text
          
          Bookmark visible lines
          
          Add marks to all text in bookmarked lines
          Mark only text in bookmarked lines
          
          Add marks to all text in bookmarked lines, excluding line endings
          Mark only text in bookmarked lines,excluding line endings
          

          Two observations :

          1 I don’t think that the options which mark only the first line of each span of marked text are really useful. Actually, the goal is more to mark all the lines that meet a certain criterion, in order to navigate between these lines, copy / cut theses lines for pasting in a other location or file or deleting these ones !

          2 With native N++, whatever you use the ^.* or ^.*\R regex to mark AND boomark lines, then using the Copy Bookmarked lines of N++ and pasting in an other document, even with an other kind of EOL, just paste the bookmarked lines according to the EOL of the pasting document

          So, most of the time, taking the line-breaks in account is not necessary ! However, adding the line-breaks characters is useful as it also includes the true empty lines !


          Thus, this would simplify the Synchronize marks and bookmarks sub-menu to the following one :

          Bookmark only lines containing marked text
          Clear all bookmarks, then bookmark only lines containing marked text
          
          Bookmark visible lines
          
          Mark all text and EOLs of the bookmarked lines
          Clear all marks, then mark all text and EOLs of the bookmarked lines
          

          Now, regarding the present Invert marks or bookmarks sub menu, below :

          A Invert marked text
            Invert marked text, excluding unmarked line endings
          
          C Invert marked text and sync bookmarks
            Invert marked text, excluding unmarked line endings, and sync bookmarks
          
          B Invert bookmarks
          D Invert bookmarks and mark only bookmarked lines
            Invert bookmarks and mark only bookmarked lines, excluding line endings
          

          This time, I would avoid any option that excludes the EOLs and I propose this new sub-menu :

          A Invert only the marked text
          
          B Invert only the bookmarks
          
          D Invert bookmarks, then mark all text and EOL of the bookmarked lines
          
          C Invert marked text, then bookmark all lines containing marked text
          

          Remarks :

          • The letters preceding the options serve to link this present submenu to the future possible submenu !

          • Note that running, consecutively, the A and B actions is equivalent to the D action

          • Note also that in these two sub-menus, I specified, when necessary, the two consecutive steps to make it easier to understand :

          For example :

          • Clear all bookmarks, then bookmark only lines containing marked text

          • Clear all marks, then mark all text and EOLs of the bookmarked lines

          • D Invert bookmarks, then mark all text and EOL of the bookmarked lines

          • C Invert marked text, then bookmark all lines containing marked text

          It’s easier to see the first action done : on the bookmarks OR on the marks

          BR

          guy038

          Again, I forgot to thank you for the fix when you do a first right-click within the Find or Replace boxes !

          CoisesC 4 Replies Last reply Reply Quote 1
          • guy038G Offline
            guy038
            last edited by

            Hi, @coises,

            Oh…, my God, I’m just realizing that I did all my previous tests with the main Bookmark lines with marking text option OFF, so with the Search++ Configure bookmark dialog all greyed !

            Thus, my tests are quite incomplete :-(( I’ll continue testing … !

            BR

            guy038

            1 Reply Last reply Reply Quote 0
            • guy038G Offline
              guy038
              last edited by

              Hello, @coises and All,

              Thus, I chose these options within the Search++: Configure bookmarks dialog :

              2056c175-9a25-44dc-813e-b3830706ef40-image.jpeg


              And ultimately, given the chosen options, the only differences are :

              • When you mark something, it automatically bookmarks the associated line

              • When you unmark something, it automatically removes the bookmark of the associated line

              Best Regards

              guy038

              CoisesC 1 Reply Last reply Reply Quote 1
              • CoisesC Online
                Coises @guy038
                last edited by

                @guy038 said:

                And ultimately, given the chosen options, the only differences are :

                • When you mark something, it automatically bookmarks the associated line

                • When you unmark something, it automatically removes the bookmark of the associated line

                Yes, that is one of the changes from 0.7.0.1 to 0.7.0.2, that Invert and Synchronize (previously commands, now sub-menus of commands) are no longer affected by the Configure bookmarks settings at all. That made it sensible to put all the settings under Bookmark lines when marking text. and disable them when that option is unchecked.

                1 Reply Last reply Reply Quote 1
                • CoisesC Online
                  Coises @guy038
                  last edited by

                  @guy038 said:

                  For, the tests below, I needed, of course, to un-check the Always unmark all text before Mark command. (Otherwise add to existing marked text.) option in Settings

                  I don’t know if it’s clear, but that only affects Mark search commands. It doesn’t affect any commands on the Tools menu.

                  There are two times when a successful Mark search command unmarks existing text first. (A command that doesn’t find a match never unmarks.) One is when that option is checked: in that case, all Mark search commands clear existing marks before marking matching text. The other case is Mark in Marked text. When that command is chosen or defaulted, existing marks are cleared before marking the first match regardless of whether Always unmark… is checked, because otherwise the command could not accomplish anything: it would only be marking text that is already marked.

                  The Configure bookmarks option Mark commands that unmark before searching also clear bookmarks. is related to this. If either of the above cases applies and that box is checked and Bookmark lines when marking text is checked, bookmarks are cleared as well as marks.

                  Hopefully that does what most people would want and expect without them having to think through all those details.

                  Regarding the present Synchronize marks and bookmarks sub-mneu, below :

                  Add a bookmark to each line with marked text
                  Add a bookmark to the first line of each span of marked text
                  
                  Bookmark only lines with marked text
                  Bookmark only the first line of each span of marked text
                  
                  Bookmark visible lines
                  
                  Add marks to all text in bookmarked lines
                  Mark only text in bookmarked lines
                  
                  Add marks to all text in bookmarked lines, excluding line endings
                  Mark only text in bookmarked lines,excluding line endings
                  

                  Two observations :

                  1 I don’t think that the options which mark only the first line of each span of marked text are really useful. Actually, the goal is more to mark all the lines that meet a certain criterion, in order to navigate between these lines, copy / cut theses lines for pasting in a other location or file or deleting these ones !

                  Yes, I have wondered if any of that, in the Synchronize sub-menu or in the Configure bookmarks dialog, is useful. It was how I expected bookmarks would work with search and that’s how I first implemented it; then I saw that Notepad++ doesn’t just bookmark the lines where each match began, it marks every line containing any part of a match.

                  I suspect it’s a lot less common to search for matches that span multiple lines than for matches contained in a single line, so maybe few people even notice the difference.

                  I think I would either leave it in both the Configure bookmarks dialog and the Synchronize menu or take it out of both. I left it out of the Invert sub-menu because I couldn’t figure out a way to make it make much sense when doing inversion with bookmarks.

                  2 With native N++, whatever you use the ^.* or ^.*\R regex to mark AND boomark lines, then using the Copy Bookmarked lines of N++ and pasting in an other document, even with an other kind of EOL, just paste the bookmarked lines according to the EOL of the pasting document

                  So, most of the time, taking the line-breaks in account is not necessary ! However, adding the line-breaks characters is useful as it also includes the true empty lines !


                  Thus, this would simplify the Synchronize marks and bookmarks sub-menu to the following one :

                  Bookmark only lines containing marked text
                  Clear all bookmarks, then bookmark only lines containing marked text
                  
                  Bookmark visible lines
                  
                  Mark all text and EOLs of the bookmarked lines
                  Clear all marks, then mark all text and EOLs of the bookmarked lines
                  

                  I have to think about this some more. I can agree that having line endings / no line endings variants in those menus makes them more complex to read and use.

                  Inverting marked text can yield some strange results. For example, say you matched a full line, but not its line ending, so it alone is marked and bookmarked. Now you Invert marked text and sync bookmarks. The line ending on that line wasn’t marked, so when you invert marks it is marked; since there is a mark on the line (though you can’t see it if you don’t show line endings), the line is also bookmarked. Every line in the document is now bookmarked, including the originally marked and bookmarked line that now has no visible marks (they’re hidden along with the line endings).

                  Though I don’t think I should ignore line endings on the programming side — as per my example above — it could be that I can “hide” the unexpected behavior from users so they don’t have to think about it. The tricky bit is being confident that I really have covered all the cases that would be confusing to a user if I don’t force them to think about line endings.

                  1 Reply Last reply Reply Quote 1
                  • CoisesC Online
                    Coises @guy038
                    last edited by Coises

                    @guy038 said:

                    This time, I would avoid any option that excludes the EOLs and I propose this new sub-menu :

                    A Invert only the marked text
                    
                    B Invert only the bookmarks
                    
                    D Invert bookmarks, then mark all text and EOL of the bookmarked lines
                    
                    C Invert marked text, then bookmark all lines containing marked text
                    
                    • Note that running, consecutively, the A and B actions is equivalent to the D action

                    No, it isn’t. If you search for something using the Mark command, only the text that actually matches is marked. Invert marked text marks everything that wasn’t marked and unmarks everything that was marked, so it marks the text surrounding the matches but leaves gaps where the matches were. Potentially useful if you want to search only text that the last search didn’t match.

                    If you had Bookmark lines when marking text checked when you did that Mark command, there will have been a bookmark on every line that contained any marked text. If you then Invert bookmarks, the bookmarks will be only on lines that had no marked text at all.

                    Put the two together and you’ll have marked text with gaps where the original matches were, and bookmarks only on lines that have no gaps.

                    Invert bookmarks and mark only bookmarked lines would bookmark the same lines as the above process, but every bookmarked line (that is, every line that originally contained no part of any match) would have all its text marked. The details of which parts of lines matched and which didn’t would be completely lost.

                    An additional complication is zero-length matches. It is impossible to mark a zero-length match; but when marking with Bookmark lines when marking text checked, the lines containing zero-length matches are still bookmarked.

                    When you invert bookmarks, a line containing one or more zero-length matches will then not be bookmarked. If you invert bookmarks first and then mark the bookmarked lines, that line won’t be bookmarked or marked. If you invert the marks and the bookmarks separately, the line will be fully marked (because it had no marked text), but not bookmarked.

                    You might have meant to say that A followed by B is equivalent to C, rather than D. However, in the zero-length match case, option C would bookmark the line that previously contained only zero-length matches (since it would now be fully marked).

                    I’m still not sure what will be useful and what won’t be; I just wanted to note that it does make a difference whether you invert marks and bookmarks separately or whether you invert one and then derive the other by synchronizing.

                    And of course, if you have marked text that wasn’t marked with bookmarking on, or if you added or removed bookmarks by hand, that would also lead to different results for the various operations.

                    1 Reply Last reply Reply Quote 0
                    • CoisesC Online
                      Coises @guy038
                      last edited by

                      @guy038 said:

                      Now, regarding the present Invert marks or bookmarks sub menu, below :

                      A Invert marked text
                        Invert marked text, excluding unmarked line endings
                      
                      C Invert marked text and sync bookmarks
                        Invert marked text, excluding unmarked line endings, and sync bookmarks
                      
                      B Invert bookmarks
                      D Invert bookmarks and mark only bookmarked lines
                        Invert bookmarks and mark only bookmarked lines, excluding line endings
                      

                      This time, I would avoid any option that excludes the EOLs and I propose this new sub-menu :

                      A Invert only the marked text
                      
                      B Invert only the bookmarks
                      
                      D Invert bookmarks, then mark all text and EOL of the bookmarked lines
                      
                      C Invert marked text, then bookmark all lines containing marked text
                      

                      Since Notepad++ already has an Inverse Bookmarks command, what would you think of going back to a single Invert marked text command (no sub-menu) and just leaving it to users to use the Notepad++ command and/or follow up with a command from the Synchronize marks and bookmarks menu if they want one of the other results?

                      1 Reply Last reply Reply Quote 0
                      • CoisesC Online
                        Coises @guy038
                        last edited by Coises

                        @guy038 said:

                        I would avoid any option that excludes the EOLs

                        Let me try to give an example of what I think is the problematic behavior. I agree that making users worry about whether or not to include line endings is not good.

                        Copy this into a new tab:

                        Consider this:
                        I see them all.
                        You know I see them all.
                        Do you understand?
                        

                        Turn on display of line endings.
                        Make sure there are only four lines: if copying added a trailing CRLF, remove that.

                        Now, Mark using Regex with the following find text:
                        I see.*$
                        and Dot matches line breaks not checked.

                        db38d386-9f2c-4bac-a6c7-ffb9be59cf53-image.jpeg

                        Now, observe what happens with each of these three seemingly reasonable sequences (after each, remove marks and bookmarks, and start fresh with a new Mark command):

                        Invert Marked Text then Invert Bookmarks:

                        4968c3eb-b556-4a09-bcd7-101e0d09958c-image.jpeg

                        Invert marked text then Bookmark only lines with marked text:

                        a2ad05bb-5ff2-4804-a297-d80ff34cd100-image.jpeg

                        Invert bookmarks then Mark only text in bookmarked lines:

                        22d172c5-69d4-4c2b-9cda-24042de57f84-image.jpeg

                        The result you probably would expect only comes from Invert marked text, excluding unmarked line endings, and sync bookmarks:

                        08ead0b2-7c33-4ecc-8878-5ac36b20d745-image.jpeg

                        I did this with line endings displayed so you can follow what is happening. Now go back and imagine how it looks to a user with line endings not displayed.

                        1 Reply Last reply Reply Quote 0
                        • guy038G Offline
                          guy038
                          last edited by guy038

                          Hello, @coises and All,

                          @coises, you said :

                          Since Notepad++ already has an Inverse Bookmarks command, what would you think of going back to a single Invert marked text command (no sub-menu) and just leaving it to users to use the Notepad++ command and/or follow up with a command from the Synchronize marks and bookmarks menu if they want one of the other results?

                          Oh, yes, of course, no need to reinvent the wheel !


                          In that case, you could add, in the section speaking of the Invert marked text option within the documentation, that the Invert bookmarked lines command can be run directly from N++ and that, for a better readability, you may follow the N++ command by, either :

                          • The Mark only text in bookmarked lines option

                          • The Mark only text in bookmarked lines, excluding line endings option

                          of the present Synchronize marks and bookmarks sub menu !

                          OR the options :

                          • Clear all marks, then mark all text and EOLs of the bookmarked lines

                          • Clear all marks, then mark all text of the bookmarked lines, excluding EOLs

                          From my suggested Synchronize marks and bookmarks sub-menu !

                          Best Regards

                          guy038

                          CoisesC 1 Reply Last reply Reply Quote 0
                          • guy038G Offline
                            guy038
                            last edited by

                            Hi, @coies and All,

                            Oh, sorry, @coises. I did not notice that you had posted something in the meantime. So, give me some minutes to understand your post !

                            BR

                            guy038

                            1 Reply Last reply Reply Quote 0
                            • guy038G Offline
                              guy038
                              last edited by

                              Hello, @coises,

                              Personally, after an Invert bookmarks action, I would expect a Mark only text in bookmarked lines action OR a Mark only text in bookmarked lines, excluding line endings action,as I explained in my last post !

                              Best Regards

                              guy038

                              1 Reply Last reply Reply Quote 0
                              • CoisesC Online
                                Coises @guy038
                                last edited by Coises

                                @guy038 said:

                                OR the options :

                                • Clear all marks, then mark all text and EOLs of the bookmarked lines

                                • Clear all marks, then mark all text of the bookmarked lines, excluding EOLs

                                From my suggested Synchronize marks and bookmarks sub-menu !

                                Previously you suggested:

                                So, most of the time, taking the line-breaks in account is not necessary ! However, adding the line-breaks characters is useful as it also includes the true empty lines !


                                Thus, this would simplify the Synchronize marks and bookmarks sub-menu to the following one :

                                Bookmark only lines containing marked text
                                Clear all bookmarks, then bookmark only lines containing marked text
                                
                                Bookmark visible lines
                                
                                Mark all text and EOLs of the bookmarked lines
                                Clear all marks, then mark all text and EOLs of the bookmarked lines
                                

                                But then, just a moment ago, you wrote:

                                Personally, after an Invert bookmarks action, I would expect a Mark only text in bookmarked lines action OR a Mark only text in bookmarked lines, excluding line endings action,as I explained in my last post !

                                so it sounds like you have changed your mind (unless I misunderstood your first suggestion) and believe users do need the ability to control whether line endings are included.


                                The ideas at the front of my mind now are:

                                1. Make Invert marked text a single command (no Invert sub-menu) which does only and exactly that one thing: mark every unmarked character and unmark every marked character. No bookmark changes, and no special treatment for line ending characters.

                                2. Eliminate the “Bookmark first line of marked text” options. If you’re manipulating bookmarks based on marked text, trying to keep track of what is the “first line” is probably useless, confusing or both. (I still might remove that whole section of the Configure bookmarks dialog, too.)

                                3. For the Synchronize commands which Bookmark lines containing marked text, apply these rules:

                                  • Lines containing only a line ending (empty lines) are bookmarked if the line ending is marked.
                                  • Lines containing characters other than the line ending character(s) are bookmarked if any character other than the line ending character(s) is marked; the line ending is ignored.

                                That third point is clumsy to explain (and certainly won’t fit in a menu item), but I think it makes synchronizing bookmarks to marks behave sensibly without introducing variants in either Invert marked text or [Clear bookmarks and] Bookmark lines containing marked text.

                                I’m curious if you can think of situations where that would not behave as a user would expect.


                                So, back to the situation where it’s the bookmarks that are primary, and you want update marks to follow bookmarks. I gather you do think it’s important to give the user control of whether line endings are included or not.

                                Do you have specific cases or workflows in mind where each of these is useful? (I know, I’m the one that included the distinction in the first place, and now I’m trying to get rid of it if I can.)

                                And/or perhaps there should be a separate option to expand marks to full lines (that is, if there is any marked text on a line, mark the entire line), with a choice to include or exclude line endings.

                                There is also the possibility of turning Synchronize into a dialog instead of a sub-menu. That would allow for more options that could work separately or together without a huge menu of hard-to-read items, at the expense of slowing users’ workflow a bit more than a sub-menu.

                                I’m still undecided; all observations and ideas are welcome.

                                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