Patch 9.0.0741
Problem:    Cannot specify an ID for each item with prop_add_list(). (Sergey
            Vlasov)
Solution:   Add an optional fifth number to the item. (closes #11360)
Files:      runtime/doc/textprop.txt, src/textprop.c,
            src/testdir/test_textprop.vim


*** ../vim-9.0.0740/runtime/doc/textprop.txt    2022-09-10 20:00:31.117468669 
+0100
--- runtime/doc/textprop.txt    2022-10-13 14:10:43.442417093 +0100
***************
*** 206,222 ****
                property with "text" has been added for a buffer then using a
                negative "id" for any other property will give an error:
                *E1293*
-               Make sure to use a highlight that makes clear to the user that
-               this is virtual text, otherwise it will be very confusing that
-               the text cannot be edited.
-               To separate the virtual text from the buffer text prepend
-               and/or append spaces to the "text" field.
  
                Can also be used as a |method|: >
                        GetLnum()->prop_add(col, props)
  <
                                                *prop_add_list()*
! prop_add_list({props}, [[{lnum}, {col}, {end-lnum}, {end-col}], ...])
                Similar to prop_add(), but attaches a text property at
                multiple positions in a buffer.
  
--- 223,234 ----
                property with "text" has been added for a buffer then using a
                negative "id" for any other property will give an error:
                *E1293*
  
                Can also be used as a |method|: >
                        GetLnum()->prop_add(col, props)
  <
                                                *prop_add_list()*
! prop_add_list({props}, [{item}, ...])
                Similar to prop_add(), but attaches a text property at
                multiple positions in a buffer.
  
***************
*** 228,239 ****
                   type         name of the text property type
                All fields except "type" are optional.
  
!               The second argument is a List of Lists where each list
!               specifies the starting and ending position of the text.  The
!               first two items {lnum} and {col} specify the starting position
!               of the text where the property will be attached and the last
!               two items {end-lnum} and {end-col} specify the position just
!               after the text.
  
                It is not possible to add a text property with a "text" field
                here.
--- 240,257 ----
                   type         name of the text property type
                All fields except "type" are optional.
  
!               The second argument is a List of items, where each {item} is a
!               list that specifies the starting and ending position of the
!               text: [{lnum}, {col}, {end-lnum}, {end-col}]
!               or:   [{lnum}, {col}, {end-lnum}, {end-col}, {id}]
! 
!               The first two items {lnum} and {col} specify the starting
!               position of the text where the property will be attached.
!               The next two items {end-lnum} and {end-col} specify the
!               position just after the text.
!               An optional fifth item {id} can be used to give a different ID
!               to a property.  When omitted the ID from {props} is used,
!               falling back to zero if none are present.
  
                It is not possible to add a text property with a "text" field
                here.
*** ../vim-9.0.0740/src/textprop.c      2022-10-13 14:00:42.223235679 +0100
--- src/textprop.c      2022-10-13 14:12:54.998523119 +0100
***************
*** 396,401 ****
--- 396,404 ----
            end_lnum = list_find_nr(pos_list, 2L, &error);
        if (!error)
            end_col = list_find_nr(pos_list, 3L, &error);
+       int this_id = id;
+       if (!error && pos_list->lv_len > 4)
+           this_id = list_find_nr(pos_list, 4L, &error);
        if (error || start_lnum <= 0 || start_col <= 0
                  || end_lnum <= 0 || end_col <= 0)
        {
***************
*** 403,410 ****
                emsg(_(e_invalid_argument));
            return;
        }
!       if (prop_add_one(buf, type_name, id, NULL, 0, 0, start_lnum, end_lnum,
!                                               start_col, end_col) == FAIL)
            return;
      }
  
--- 406,413 ----
                emsg(_(e_invalid_argument));
            return;
        }
!       if (prop_add_one(buf, type_name, this_id, NULL, 0, 0,
!                            start_lnum, end_lnum, start_col, end_col) == FAIL)
            return;
      }
  
*** ../vim-9.0.0740/src/testdir/test_textprop.vim       2022-10-13 
14:00:42.223235679 +0100
--- src/testdir/test_textprop.vim       2022-10-13 14:32:04.197874165 +0100
***************
*** 367,372 ****
--- 367,382 ----
          \ length: 7, start: 1}], prop_list(3))
    call assert_equal([#{id: 2, col: 1, type_bufnr: 0, end: 1, type: 'one',
          \ length: 5, start: 0}], prop_list(4))
+   call prop_remove(#{id: 2})
+   call assert_equal([], prop_list(1))
+ 
+   call prop_add_list(#{type: 'one', id: 3},
+         \ [[1, 1, 1, 3], [2, 5, 2, 7, 9]])
+   call assert_equal([#{id: 3, col: 1, type_bufnr: 0, end: 1, type: 'one',
+         \ length: 2, start: 1}], prop_list(1))
+   call assert_equal([#{id: 9, col: 5, type_bufnr: 0, end: 1, type: 'one',
+         \ length: 2, start: 1}], prop_list(2))
+ 
    call assert_fails('call prop_add_list([1, 2], [[1, 1, 3]])', 'E1206:')
    call assert_fails('call prop_add_list({}, {})', 'E1211:')
    call assert_fails('call prop_add_list({}, [[1, 1, 3]])', 'E965:')
*** ../vim-9.0.0740/src/version.c       2022-10-13 14:00:42.223235679 +0100
--- src/version.c       2022-10-13 14:33:41.361765057 +0100
***************
*** 701,702 ****
--- 701,704 ----
  {   /* Add new patch number below this line */
+ /**/
+     741,
  /**/

-- 
There are 10 kinds of people: Those who understand binary and those who don't.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20221013133602.249F01C0760%40moolenaar.net.

Raspunde prin e-mail lui