]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.0200: cursor wrong if 'nowrap' and two right aligned text props v9.0.0200
authorBram Moolenaar <Bram@vim.org>
Sat, 13 Aug 2022 18:35:05 +0000 (19:35 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 13 Aug 2022 18:35:05 +0000 (19:35 +0100)
Problem:    cursor in a wrong positoin if 'wrap' is off and using two right
            aligned text props in one line.
Solution:   Count an extra line for a right aligned text property after a
            below or right aligned text property. (issue #10909)

src/testdir/dumps/Test_prop_with_text_after_nowrap_1.dump
src/testdir/dumps/Test_prop_with_text_after_nowrap_2.dump
src/testdir/dumps/Test_prop_with_text_after_nowrap_3.dump [new file with mode: 0644]
src/testdir/test_textprop.vim
src/textprop.c
src/version.c

index f90110f753a8f55d21f07ceed9be13c3adf001fe..610f14f7862b72db304c496df97aa802f0b1b715 100644 (file)
@@ -3,7 +3,9 @@
 |t|w|o| @56
 |a+0&#ffff4012|n|o|t|h|e|r| +0&#ffffff0@52
 |O+0#ffffff16#e000002|n|e| |M|o|r|e| |H|e|r|e| +0#0000000#ffffff0@46
-|t|h|r|e>e| @54
+|t|h|r|e>e| @41|r+0&#ffff4012|i|g|h|t| |a|l|i|g|n|e|d
+| +0&#ffffff0@41|a+0&#ffff4012|l|s|o| |r|i|g|h|t| |a|l|i|g|n|e|d
+|f+0&#ffffff0|o|u|r| @55
 |~+0#4040ff13&| @58
 |~| @58
 |~| @58
index 7030c9ca2a455de4dd1f126fc94400932d9eb1ad..48da426910abec5a54fadf74b8115235999ca7bf 100644 (file)
@@ -3,7 +3,9 @@
 | +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|w|o| @51
 | +0#0000e05#a8a8a8255@4|a+0#0000000#ffff4012|n|o|t|h|e|r| +0&#ffffff0@47
 | +0#0000e05#a8a8a8255@4|O+0#ffffff16#e000002|n|e| |M|o|r|e| |H|e|r|e| +0#0000000#ffffff0@41
-| +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|h|r|e>e| @49
+| +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|h|r|e>e| @36|r+0&#ffff4012|i|g|h|t| |a|l|i|g|n|e|d
+| +0#0000e05#a8a8a8255@4| +0#0000000#ffffff0@36|a+0&#ffff4012|l|s|o| |r|i|g|h|t| |a|l|i|g|n|e|d
+| +0#0000e05#a8a8a8255@4|f+0#0000000#ffffff0|o|u|r| @50
 |~+0#4040ff13&| @58
 |~| @58
 |~| @58
diff --git a/src/testdir/dumps/Test_prop_with_text_after_nowrap_3.dump b/src/testdir/dumps/Test_prop_with_text_after_nowrap_3.dump
new file mode 100644 (file)
index 0000000..d96f1ec
--- /dev/null
@@ -0,0 +1,12 @@
+| +0#0000e05#a8a8a8255@4|o+0#0000000#ffffff0|n|e| +0&#ffd7ff255|A|f|t|e|r| |t|h|e| |t|e|x|t| +0&#ffffff0@26|r+0&#ffd7ff255|i|g|h|t| |h|e|r|e
+| +0#0000e05#a8a8a8255@4| +0#ffffff16#e000002|B|e|l|o|w| |t|h|e| |l|i|n|e| | +0#0000000#ffffff0@38
+| +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|w|o| @51
+| +0#0000e05#a8a8a8255@4|a+0#0000000#ffff4012|n|o|t|h|e|r| +0&#ffffff0@47
+| +0#0000e05#a8a8a8255@4|O+0#ffffff16#e000002|n|e| |M|o|r|e| |H|e|r|e| +0#0000000#ffffff0@41
+| +0#0000e05#a8a8a8255@4|t+0#0000000#ffffff0|h|r|e@1| @36|r+0&#ffff4012|i|g|h|t| |a|l|i|g|n|e|d
+| +0#0000e05#a8a8a8255@4| +0#0000000#ffffff0@36|a+0&#ffff4012|l|s|o| |r|i|g|h|t| |a|l|i|g|n|e|d
+| +0#0000e05#a8a8a8255@4|f+0#0000000#ffffff0|o|u>r| @50
+|~+0#4040ff13&| @58
+|~| @58
+|~| @58
+| +0#0000000&@41|4|,|4| @10|A|l@1| 
index b012f69082013a4d8ed055eb1a145669217cbe7b..5e9dd20388de931c86e27a7a821ef01a2411d71c 100644 (file)
@@ -2743,7 +2743,7 @@ func Test_props_with_text_after_nowrap()
 
   let lines =<< trim END
       set nowrap
-      call setline(1, ['one', 'two', 'three'])
+      call setline(1, ['one', 'two', 'three', 'four'])
       call prop_type_add('belowprop', #{highlight: 'ErrorMsg'})
       call prop_type_add('anotherprop', #{highlight: 'Search'})
       call prop_type_add('someprop', #{highlight: 'DiffChange'})
@@ -2752,15 +2752,21 @@ func Test_props_with_text_after_nowrap()
       call prop_add(2, 0, #{type: 'belowprop', text: 'One More Here', text_align: 'below'})
       call prop_add(1, 0, #{type: 'someprop', text: 'right here', text_align: 'right'})
       call prop_add(1, 0, #{type: 'someprop', text: ' After the text', text_align: 'after'})
-      normal G$
+      normal 3G$
+
+      call prop_add(3, 0, #{type: 'anotherprop', text: 'right aligned', text_align: 'right'})
+      call prop_add(3, 0, #{type: 'anotherprop', text: 'also right aligned', text_align: 'right'})
   END
   call writefile(lines, 'XscriptPropsAfterNowrap')
-  let buf = RunVimInTerminal('-S XscriptPropsAfterNowrap', #{rows: 10, cols: 60})
+  let buf = RunVimInTerminal('-S XscriptPropsAfterNowrap', #{rows: 12, cols: 60})
   call VerifyScreenDump(buf, 'Test_prop_with_text_after_nowrap_1', {})
 
   call term_sendkeys(buf, ":set signcolumn=yes foldcolumn=3\<CR>")
   call VerifyScreenDump(buf, 'Test_prop_with_text_after_nowrap_2', {})
 
+  call term_sendkeys(buf, "j")
+  call VerifyScreenDump(buf, 'Test_prop_with_text_after_nowrap_3', {})
+
   call StopVimInTerminal(buf)
   call delete('XscriptPropsAfterNowrap')
 endfunc
index 7d594da161fead8e4496d27748c2311b8ac78d20..88156c272e1ce0a02a2e0d48696758ad27200f2e 100644 (file)
@@ -590,6 +590,8 @@ get_text_props(buf_T *buf, linenr_T lnum, char_u **props, int will_change)
 
 /*
  * Return the number of text properties with "below" alignment in line "lnum".
+ * A "right" aligned property also goes below after a "below" or other "right"
+ * aligned property.
  */
     int
 prop_count_below(buf_T *buf, linenr_T lnum)
@@ -599,14 +601,25 @@ prop_count_below(buf_T *buf, linenr_T lnum)
     int                result = 0;
     textprop_T prop;
     int                i;
+    int                next_right_goes_below = FALSE;
 
     if (count == 0)
        return 0;
     for (i = 0; i < count; ++i)
     {
        mch_memmove(&prop, props + i * sizeof(prop), sizeof(prop));
-       if (prop.tp_col == MAXCOL && (prop.tp_flags & TP_FLAG_ALIGN_BELOW))
-           ++result;
+       if (prop.tp_col == MAXCOL)
+       {
+           if ((prop.tp_flags & TP_FLAG_ALIGN_BELOW)
+                   || (next_right_goes_below
+                                    && (prop.tp_flags & TP_FLAG_ALIGN_RIGHT)))
+           {
+               next_right_goes_below = TRUE;
+               ++result;
+           }
+           else if (prop.tp_flags & TP_FLAG_ALIGN_RIGHT)
+               next_right_goes_below = TRUE;
+       }
     }
     return result;
 }
index 2d1b5ccfef6151211a5f86b717f2d081e77b6299..0c7a1023f700616e8d67a8e19da97de4b96167e7 100644 (file)
@@ -735,6 +735,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    200,
 /**/
     199,
 /**/