1
0
forked from aniani/vim

patch 9.0.1762: Not able to get the virtual text property

Problem:  Not able to get the virtual text property
Solution: Make prop_list() return virtual text and alignment

closes: #12860

Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
This commit is contained in:
Yegappan Lakshmanan 2023-08-20 18:27:45 +02:00 committed by Christian Brabandt
parent 654bdbbd32
commit f9037f186a
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
4 changed files with 66 additions and 0 deletions

View File

@ -335,6 +335,10 @@ prop_list({lnum} [, {props}]) *prop_list()*
length length in bytes, one more if line break is length length in bytes, one more if line break is
included included
id property ID id property ID
text text to be displayed before {col}. Only
present for |virtual-text| properties.
text_align alignment property of |virtual-text|.
text_wrap specifies whether |virtual-text| is wrapped.
type name of the property type, omitted if type name of the property type, omitted if
the type was deleted the type was deleted
type_bufnr buffer number for which this type was defined; type_bufnr buffer number for which this type was defined;

View File

@ -4025,4 +4025,39 @@ func Test_text_prop_list_hl_and_sign_highlight()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
" Test for getting the virtual text properties
func Test_virtual_text_get()
new foobar
call setline(1, '12345678')
call prop_type_add('test', #{highlight: 'Search'})
call prop_add(1, 2, #{type: 'test', text: ' virtual text1 '})
call prop_add(1, 3, #{type: 'test'})
call prop_add(1, 0, #{type: 'test', text: ' virtual text2 ',
\ text_align: 'right'})
call prop_add(1, 5, #{type: 'test'})
call prop_add(1, 6, #{type: 'test', text: ' virtual text3 ',
\ text_wrap: 'wrap'})
let p = prop_list(1, #{end_lnum: -1})
call assert_equal(
\ #{lnum: 1, id: -1, col: 2, type_bufnr: 0, end: 1,
\ type: 'test', length: 1, start: 1,
\ text: ' virtual text1 '}, p[0])
call assert_equal(
\ #{lnum: 1, id: 0, col: 3, type_bufnr: 0, end: 1,
\ type: 'test', length: 0, start: 1}, p[1])
call assert_equal(
\ #{lnum: 1, id: 0, col: 5, type_bufnr: 0, end: 1,
\ type: 'test', length: 0, start: 1}, p[2])
call assert_equal(
\ #{lnum: 1, id: -3, col: 6, type_bufnr: 0, end: 1, type: 'test',
\ text_wrap: 'wrap', length: 1, start: 1, text: ' virtual text3 '},
\ p[3])
call assert_equal('right', p[4].text_align)
call prop_type_delete('test')
bwipe!
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@ -990,6 +990,31 @@ prop_fill_dict(dict_T *dict, textprop_T *prop, buf_T *buf)
dict_add_number(dict, "type_bufnr", buf->b_fnum); dict_add_number(dict, "type_bufnr", buf->b_fnum);
else else
dict_add_number(dict, "type_bufnr", 0); dict_add_number(dict, "type_bufnr", 0);
if (prop->tp_id < 0)
{
// virtual text property
garray_T *gap = &buf->b_textprop_text;
char_u *text;
// negate the property id to get the string index
text = ((char_u **)gap->ga_data)[-prop->tp_id - 1];
dict_add_string(dict, "text", text);
// text_align
char_u *text_align = NULL;
if (prop->tp_flags & TP_FLAG_ALIGN_RIGHT)
text_align = (char_u *)"right";
else if (prop->tp_flags & TP_FLAG_ALIGN_ABOVE)
text_align = (char_u *)"above";
else if (prop->tp_flags & TP_FLAG_ALIGN_BELOW)
text_align = (char_u *)"below";
if (text_align != NULL)
dict_add_string(dict, "text_align", text_align);
// text_wrap
if (prop->tp_flags & TP_FLAG_WRAP)
dict_add_string(dict, "text_wrap", (char_u *)"wrap");
}
} }
/* /*

View File

@ -695,6 +695,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1762,
/**/ /**/
1761, 1761,
/**/ /**/