Community
    • Login

    [v.7.8.6] Vertical Edge Settings no longer works with Split Lines (Ctrl-I)

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    30 Posts 8 Posters 4.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.
    • Michael VincentM
      Michael Vincent @Matthew Au
      last edited by

      @Matthew-Au

      I believe it is an unintended consequence of the feature add of multiedge support : Preferences => Editing => Vertical Edge Settings.

      Vertical edge is now implemented always as SCI_MULTIEDGEADDLINE(), not as SCI_SETEDGEMODE() / SCI_SETEDGECOLUMN() as previously done. I understood that putting only 1 value in the text box should do the latter, but I have only 80 in that box (for a single vertical edge at column 80) and after N++ is launched, I use NppExec to query the edge mode and get back:

      SCI_SENDMSG SCI_GETEDGEMODE
      ================ READY ================
      ECHO $(MSG_RESULT)
      3
      

      Which you can see is Multiedge mode.

      I believe this is a “regression” bug where a new feature broke an existing operation. If I manually set to line mode at column 80:

      SCI_SENDMSG SCI_SETEDGEMODE EDGE_LINE
      ================ READY ================
      SCI_SENDMSG SCI_SETEDGECOLUMN 80
      

      Edit => Line Operations => Split Lines

      now works for me with long lines over 80 columns.

      Cheers.

      1 Reply Last reply Reply Quote 3
      • Matthew AuM
        Matthew Au
        last edited by

        Thanks for reply. Can this issue be workaround via GUI? And shall I raise this as an issue in N++ Github?

        EkopalypseE Alan KilbornA Michael VincentM 3 Replies Last reply Reply Quote 1
        • EkopalypseE
          Ekopalypse @Matthew Au
          last edited by Ekopalypse

          @Matthew-Au said in [v.7.8.6] Vertical Edge Settings no longer works with Split Lines (Ctrl-I):

          Can this issue be workaround via GUI?

          It seems choosing background mode is working, more or less, like you want.

          If this would be set to EDGE_LINE I assume it would cover previous and current feature set.

          1 Reply Last reply Reply Quote 1
          • Alan KilbornA
            Alan Kilborn @Matthew Au
            last edited by

            @Matthew-Au said in [v.7.8.6] Vertical Edge Settings no longer works with Split Lines (Ctrl-I):

            And shall I raise this as an issue in N++ Github?

            I would say YES to this.

            1 Reply Last reply Reply Quote 1
            • Michael VincentM
              Michael Vincent @Matthew Au
              last edited by

              @Matthew-Au said in [v.7.8.6] Vertical Edge Settings no longer works with Split Lines (Ctrl-I):

              And shall I raise this as an issue in N++ Github

              Yes please. And reference / link this discussion please.

              @Matthew-Au said in [v.7.8.6] Vertical Edge Settings no longer works with Split Lines (Ctrl-I):

              Can this issue be workaround via GUI?

              I didn’t notice this because I use NppExec to run a startup script (as soon as N++ launches) and among other things, it force sets Edge Line mode and column 80. I added it after this new release that changed the way vertical edge was done. I hadn’t noticed your issue since I was always forcing Edge Line mode.

              Cheers.

              1 Reply Last reply Reply Quote 1
              • Matthew AuM
                Matthew Au
                last edited by

                @Ekopalypse Thanks, the “background mode” does the job (for now).

                @Alan-Kilborn I’ve submitted a bug report here.

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

                  Hello, @matthew-au, @michael-Vincent, @ekopalypse and All,

                  I fully understand the problem ! In order to get the Split Lines feature to work, here is my work-around :

                  • Open the Settings > Preferences... > Editing > Vertical Edge Settings option

                  • If the window contains several column numbers, delete all these numbers

                  • Now, type in an unique column number where you want the lines to be splitted

                  • Tick the Background mode option ( IMPORTANT )

                  • If preferred, you can untick this option, immediately !

                  • Now the Ctrl + I feature should be fucntional, as soon as a selection have been made, whatever the Background or Line mode is chosen ;-))

                  • If you want, you may rewrite all your previous column numbers

                  • But, beware that any subsequent Ctrl + I operation will refer to the unique number noticed while ticking the Background mode option !!

                  Here is my debug info :

                  Notepad++ v7.8.6   (32-bit)
                  Build time : Apr 18 2020 - 22:32:17
                  Path : D:\@@\786\notepad++.exe
                  Admin mode : OFF
                  Local Conf mode : ON
                  OS Name : Microsoft Windows XP (32-bit) 
                  OS Build : 2600.0
                  Plugins : Explorer.dll mimeTools.dll NppConverter.dll NppExport.dll 
                  

                  Best Regards

                  guy038

                  Alan KilbornA EkopalypseE 2 Replies Last reply Reply Quote 2
                  • Alan KilbornA
                    Alan Kilborn @guy038
                    last edited by

                    @guy038 said in [v.7.8.6] Vertical Edge Settings no longer works with Split Lines (Ctrl-I):

                    beware that any subsequent Ctrl + I operation will refer to the unique number noticed while ticking the Background mode option !!

                    Hidden feature!! :-)

                    1 Reply Last reply Reply Quote 0
                    • EkopalypseE
                      Ekopalypse @guy038
                      last edited by

                      @guy038 but works only as long as you don’t restart npp, correct?

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

                        Hi, @matthew-au, @michael-Vincent, @ekopalypse, @alan-kilborn and All,

                        @ekopalypse, Ah yes ! As soon as I restarted Notepad++, it simply showed the two edge lines that I had previously set ( 30 and 60 )

                        However, remember that, by default, if no vertical setting or several vertical settings are set, then the CTRL + I feature splits lines, roughly, to the windows text width !

                        Cheers,

                        guy038

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

                          Hello, @matthew-au, @michael-Vincent, @ekopalypse, @alan-kilborn and All,

                          The last N++ v7.8.6 version now supports the new Vertical Multi-Edge lines feature. Unfortunately, as a consequence, this definitively breaks the native Split Lines feature ( Ctrl + I )

                          A work-around has been found but needs to choose one column number only and tick once on the Background mode option ! But this prevent you from easily using multiple vertical lines, which is a pity :-(

                          So, I imagined a regex S/R, that exactly simulates the N++ Split Lines feature ;-))

                          Just one constraint : If your text contains some tabulation chars, you must run, first, the Edit > BLank Operations > TAB to Space option, in order to change any tab character with the appropriate number of space chars. Indeed, the regex S/R assumes that each character displayed takes the place of exactly one character. !

                          The generic regex S/R, for any splitting column C is :

                          SEARCH (?-s)^(?=.{C})(.{1,C-3}\x20|.{C-1})\K

                          REPLACE \r\n    ( or \n if Unix files )

                          So, let’s suppose that you want to split text, at column C = 80. In that case, the regex S/R must be changed as below :

                          • SEARCH (?-s)^(?=.{80})(.{1,77}\x20|.{79})\K

                          • REPLACE \r\n    ( or \n if Unix files )

                          • Tick the Wrap around option

                          • Select the Regular expression search mode

                          • CLick on Replace All button, exclusively ( Do not use the Replace button ! )


                          After numerous tests, I verified that the split texts are strictly identical :

                          • Whatever the Split Lines option ( Ctrl + I ) or the Regex S/R is used

                          • Whatever the In selection option is set or not, in the Replace dialog

                          • Whatever the Line or Background mode is used, in Settings > Preferences... > Editing > Vertical Edge Settings

                          • Whatever the View > Word wrap option is set or not

                          • Whatever the View > Show Symbol > Show All Characters option is set or not

                          • Whatever the current font used is a MonoSpace or a Proportional font, in the Style Configurator...

                          In case of a proportional font, do not trust the visual vertical edge line, but rely on the real column, indicated in Settings > Preferences... > Editing > Vertical Edge Settings ! BTW, the Line mode is generally recommended for monospace fonts and the Background mode should be preferred for proportional fonts !


                          As a test, we’ll simply use the License.txt file and split its contents at column 80 :

                          • First of all, make sure that the single number 80 is shown in Settings > Preferences... > Editing > Vertical Edge Settings

                          • Copy the License.txt file in two new tabs ( new 1 and new 2 )

                          • In the new 1 file :

                            • Ctrl + A

                            • Ctrl + I ( Split Lines option )

                          • In the new 2 file :

                            • Open the Replace dialog ( Ctrl + H )

                              • SEARCH (?-s)^(?=.{80})(.{1,77}\x20|.{79})\K

                              • REPLACE \r\n    ( or \n if Unix files )

                              • Tick the Wrap around option

                              • Select the Regular expression search mode

                              • Click on Replace All button, exclusively ( Do not use the Replace button ! )

                          • Now, compare the two tabs with, for instance, the Compare plugin or with an external compare tool => The two tabs should be strictly identical ;-))

                          Remark : Of course, this regex S/R supposed that the splitting vertical line was at position 80. So, adapt the generic regex, above, according to the real column needed !

                          Best Regards,

                          guy038

                          Alan KilbornA 1 Reply Last reply Reply Quote 3
                          • Alan KilbornA
                            Alan Kilborn
                            last edited by

                            Seems to be relevant to this current discussion: https://github.com/notepad-plus-plus/notepad-plus-plus/issues/7814

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

                              @guy038

                              Any reason for the capturing group usage?:

                              0389f62c-6ef5-4e32-b7c0-646a2b3ef5ff-image.png

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

                                Hi, @alan-kilborn and All,

                                You’re perfectly right about it : No need of a capturing group for that purpose ! So, the generic search regex can be changed as below :

                                SEARCH (?-s)^(?=.{C})(?:.{1,C-3}\x20|.{C-1})\K

                                And the corresponding search regex for C = 80 is :

                                SEARCH (?-s)^(?=.{80})(?:.{1,77}\x20|.{79})\K

                                Indeed, although the maximum of characters, caught in group 1, not exceeds, either, C-2 or C-1 chars, the fact of using a non-capturing group should speed up the replacement process, in case of huge files !

                                Cheers,

                                guy038

                                1 Reply Last reply Reply Quote 2
                                • Patrick SheppardP
                                  Patrick Sheppard
                                  last edited by

                                  Not sure this is worth a new thread … I used the following NppExec / Scintilla script to set the vertical edge column to the current column (super useful in my usage). It is now broken. Any recommendations for how to fix is appreciated. I did try what I thought was the obvious update and it didn’t work…

                                  ::NPXEdgeColumSetToCurrent
                                  NPP_CONSOLE ?
                                  SCI_SENDMSG SCI_SETEDGECOLUMN $(CURRENT_COLUMN)

                                  Michael VincentM 1 Reply Last reply Reply Quote 1
                                  • Michael VincentM
                                    Michael Vincent @Patrick Sheppard
                                    last edited by

                                    @Patrick-Sheppard said in [v.7.8.6] Vertical Edge Settings no longer works with Split Lines (Ctrl-I):

                                    It is now broken

                                    What version of Notepad++ - please post your debug info (menu ? => Debug Info…). I’ll assume you’re using the new 7.8.6 version as that is an easy fix. As of N++ 7.8.6, the vertical edge mode changed to multiedge by default so you can add multiple edges. You can try:

                                    SCI_SENDMSG SCI_GETEDGEMODE
                                    ================ READY ================
                                    ECHO $(MSG_RESULT)
                                    1
                                    

                                    to verify. I’m assuming you’ll get back “3” as in EDGE_MULTILINE. You can modify your script to be:

                                    ::NPXEdgeColumSetToCurrent
                                    NPP_CONSOLE ?
                                    SCI_SENDMSG SCI_SETEDGEMODE EDGE_LINE
                                    SCI_SENDMSG SCI_SETEDGECOLUMN $(CURRENT_COLUMN)
                                    

                                    Cheers.

                                    1 Reply Last reply Reply Quote 4
                                    • Patrick SheppardP
                                      Patrick Sheppard
                                      last edited by

                                      Thanks, Michael.

                                      I had downgraded to 7.8.5 because of this issue and was reluctant to jump back up, but I just did and your modification works a charm.

                                      Appreciated.

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

                                        Hello, @matthew-au, @i-neuw, @michael-Vincent, @ekopalypse, @alan-kilborn, @peterjones, @terry-r and All,

                                        I revisited my previous posts of that discussion about the new Vertical Multi-Edge lines feature !

                                        First, when I said :

                                        A work-around has been found but needs to choose one column number only and tick once on the Background mode option !

                                        I want to insist that the fact of ticking on the Background mode option, then unticking it, is needed to update the sole edge boundary value, displayed ! Even with the last 7.9.0 N++ version, this step is necessary !


                                        Now, I did some additional tests, on, both, the final version of my regex and the native Split Lines N++ feature ( Ctrl + I ), using the license.txt file !

                                        • Using my regex S/R method, to split the lines, we get the same result :

                                          • Whatever the Line or Background mode is used, in Settings > Preferences... > Editing > Vertical Edge Settings

                                          • Whatever the View > Word wrap option is set or not

                                          • Whatever the View > Show Symbol > Show All Characters option is set or not

                                          • Whatever the current font used is a MonoSpaced or a Proportional font, in the Style Configurator...

                                        provided that you previously ran the Edit > BLank Operations > TAB to Space option if your file contains some TAB characters !


                                        • Using the native Edit > Line Operations > Split Lines feature, we get the same result

                                          • Whatever the Line or Background mode is used, in Settings > Preferences... > Editing > Vertical Edge Settings

                                          • Whatever the View > Word wrap option is set or not


                                        But, unlike what I said in my first post, the results of the Ctrl + I feature are totally different depending on whether :

                                        • The View > Show Symbol > Show All Characters option is set or not

                                        • The current font used is a Monospaced or a Proportional font, in the Style Configurator...


                                        So, regarding my previous argumentation, my regex method and the native Split Lines N++ feature give the same results ONLY IF :

                                        • A monospaced font is currently used

                                        • The EOL symbol ( CRLF ) is not displayed

                                        • The column number is superior to a minimum of about 15 for normal text. When I say “normal”, I refer, for instance, to the license.txt text, from line 28 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 till the end of file !

                                        Note also that, with these hypotheses, the splitting operation of a selection of lines with, both, the regex S/R and the native Split Lines feature gives the same text contents !


                                        IMPORTANT : My regex S/R is built in order to exactly replace the native Split Lines N++ feature, with the hypotheses above. But, of course, you may decide to not follow this rule and use, instead, a more simple search regex as, for instance :

                                        SEARCH (?-s)^.{75,}?\K\x20+

                                        REPLACE \r\n

                                        which would split lines, roughly, after 80 characters

                                        Best Regards,

                                        guy038

                                        1 Reply Last reply Reply Quote 2
                                        • Michael AldenM
                                          Michael Alden
                                          last edited by Michael Alden

                                          Posting this in case it’s useful to anyone else. I worked around this issue using this plugin: dail8859/LuaScript: Notepad++ plugin for Lua scripting capabilities. Specifically, I added this code to my Lua startup script.

                                          -- Lua function for Scintilla colors
                                          local function RGB(red, green, blue)
                                              return red | green << 8 | blue << 16
                                          end
                                          
                                          -- Teal color value same as default used in Notepad++
                                          local COLOR_TEAL = RGB(128, 255, 255)
                                          
                                          -- Set line mode to EDGE_Line at 80 characters with teal color
                                          npp.SendEditor(SCI_SETEDGEMODE, EDGE_LINE)
                                          npp.SendEditor(SCI_SETEDGECOLUMN, 80)
                                          npp.SendEditor(SCI_SETEDGECOLOUR, COLOR_TEAL)
                                          

                                          So, every time Notepad++ starts it resets the column marker. This has the same affect as if one were to toggle the “Background mode” setting.

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

                                            @Michael-Alden

                                            Thanks for your contribution.
                                            It is a Lua variation on @Michael-Vincent 's original NppExec solution.
                                            There hasn’t been a Pythonscript implementation, so I’ll add that now:

                                            editor.setEdgeMode(1)
                                            editor.setEdgeColumn(80)
                                            
                                            Michael VincentM 1 Reply Last reply Reply Quote 2
                                            • First post
                                              Last post
                                            The Community of users of the Notepad++ text editor.
                                            Powered by NodeBB | Contributors