1
0
forked from aniani/vim

patch 9.0.1212: cannot read back what setcellwidths() has done

Problem:    Cannot read back what setcellwidths() has done.
Solution:   Add getcellwidths(). (Kota Kato, closes #11837)
This commit is contained in:
Kota Kato
2023-01-17 18:31:56 +00:00
committed by Bram Moolenaar
parent f7d1c6e188
commit 66bb9ae70f
7 changed files with 54 additions and 1 deletions

View File

@@ -211,6 +211,7 @@ getbufline({buf}, {lnum} [, {end}])
getbufoneline({buf}, {lnum}) String line {lnum} of buffer {buf} getbufoneline({buf}, {lnum}) String line {lnum} of buffer {buf}
getbufvar({buf}, {varname} [, {def}]) getbufvar({buf}, {varname} [, {def}])
any variable {varname} in buffer {buf} any variable {varname} in buffer {buf}
getcellwidths() List get character cell width overrides
getchangelist([{buf}]) List list of change list items getchangelist([{buf}]) List list of change list items
getchar([expr]) Number or String getchar([expr]) Number or String
get one character from the user get one character from the user
@@ -3262,6 +3263,13 @@ getbufvar({buf}, {varname} [, {def}]) *getbufvar()*
< Can also be used as a |method|: > < Can also be used as a |method|: >
GetBufnr()->getbufvar(varname) GetBufnr()->getbufvar(varname)
< <
getcellwidths() *getcellwidths()*
Returns a |List| of cell widths of character ranges overridden
by |setcellwidths()|. The format is equal to the argument of
|setcellwidths()|. If no character ranges have their cell
widths overridden, an empty List is returned.
getchangelist([{buf}]) *getchangelist()* getchangelist([{buf}]) *getchangelist()*
Returns the |changelist| for the buffer {buf}. For the use Returns the |changelist| for the buffer {buf}. For the use
of {buf}, see |bufname()| above. If buffer {buf} doesn't of {buf}, see |bufname()| above. If buffer {buf} doesn't
@@ -9969,7 +9977,7 @@ typename({expr}) *typename()*
Return a string representation of the type of {expr}. Return a string representation of the type of {expr}.
Example: > Example: >
echo typename([1, 2, 3]) echo typename([1, 2, 3])
list<number> < list<number> ~
undofile({name}) *undofile()* undofile({name}) *undofile()*

View File

@@ -757,6 +757,7 @@ String manipulation: *string-functions*
strwidth() size of string when displayed strwidth() size of string when displayed
strdisplaywidth() size of string when displayed, deals with tabs strdisplaywidth() size of string when displayed, deals with tabs
setcellwidths() set character cell width overrides setcellwidths() set character cell width overrides
getcellwidths() get character cell width overrides
substitute() substitute a pattern match with a string substitute() substitute a pattern match with a string
submatch() get a specific match in ":s" and substitute() submatch() get a specific match in ":s" and substitute()
strpart() get part of a string using byte index strpart() get part of a string using byte index

View File

@@ -1953,6 +1953,8 @@ static funcentry_T global_functions[] =
ret_string, f_getbufoneline}, ret_string, f_getbufoneline},
{"getbufvar", 2, 3, FEARG_1, arg3_buffer_string_any, {"getbufvar", 2, 3, FEARG_1, arg3_buffer_string_any,
ret_any, f_getbufvar}, ret_any, f_getbufvar},
{"getcellwidths", 0, 0, 0, NULL,
ret_list_any, f_getcellwidths},
{"getchangelist", 0, 1, FEARG_1, arg1_buffer, {"getchangelist", 0, 1, FEARG_1, arg1_buffer,
ret_list_any, f_getchangelist}, ret_list_any, f_getchangelist},
{"getchar", 0, 1, 0, arg1_bool, {"getchar", 0, 1, 0, arg1_bool,

View File

@@ -5745,6 +5745,25 @@ f_setcellwidths(typval_T *argvars, typval_T *rettv UNUSED)
redraw_all_later(UPD_CLEAR); redraw_all_later(UPD_CLEAR);
} }
void
f_getcellwidths(typval_T *argvars UNUSED, typval_T *rettv)
{
if (rettv_list_alloc(rettv) == FAIL)
return;
for (size_t i = 0; i < cw_table_size; i++)
{
list_T *entry = list_alloc();
if (entry == NULL)
break;
list_append_number(entry, (varnumber_T)cw_table[i].first);
list_append_number(entry, (varnumber_T)cw_table[i].last);
list_append_number(entry, (varnumber_T)cw_table[i].width);
list_append_list(rettv->vval.v_list, entry);
}
}
void void
f_charclass(typval_T *argvars, typval_T *rettv UNUSED) f_charclass(typval_T *argvars, typval_T *rettv UNUSED)
{ {

View File

@@ -86,5 +86,6 @@ int convert_input_safe(char_u *ptr, int len, int maxlen, char_u **restp, int *re
char_u *string_convert(vimconv_T *vcp, char_u *ptr, int *lenp); char_u *string_convert(vimconv_T *vcp, char_u *ptr, int *lenp);
char_u *string_convert_ext(vimconv_T *vcp, char_u *ptr, int *lenp, int *unconvlenp); char_u *string_convert_ext(vimconv_T *vcp, char_u *ptr, int *lenp, int *unconvlenp);
void f_setcellwidths(typval_T *argvars, typval_T *rettv); void f_setcellwidths(typval_T *argvars, typval_T *rettv);
void f_getcellwidths(typval_T *argvars, typval_T *rettv);
void f_charclass(typval_T *argvars, typval_T *rettv); void f_charclass(typval_T *argvars, typval_T *rettv);
/* vim: set ft=c : */ /* vim: set ft=c : */

View File

@@ -199,6 +199,26 @@ func Test_setcellwidths()
call setcellwidths([]) call setcellwidths([])
endfunc endfunc
func Test_getcellwidths()
call setcellwidths([])
call assert_equal([], getcellwidths())
let widthlist = [
\ [0x1330, 0x1330, 2],
\ [9999, 10000, 1],
\ [0x1337, 0x1339, 2],
\]
let widthlistsorted = [
\ [0x1330, 0x1330, 2],
\ [0x1337, 0x1339, 2],
\ [9999, 10000, 1],
\]
call setcellwidths(widthlist)
call assert_equal(widthlistsorted, getcellwidths())
call setcellwidths([])
endfunc
func Test_setcellwidths_dump() func Test_setcellwidths_dump()
CheckRunVimInTerminal CheckRunVimInTerminal

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 */
/**/
1212,
/**/ /**/
1211, 1211,
/**/ /**/