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:
committed by
Bram Moolenaar
parent
f7d1c6e188
commit
66bb9ae70f
@@ -211,6 +211,7 @@ getbufline({buf}, {lnum} [, {end}])
|
||||
getbufoneline({buf}, {lnum}) String line {lnum} of buffer {buf}
|
||||
getbufvar({buf}, {varname} [, {def}])
|
||||
any variable {varname} in buffer {buf}
|
||||
getcellwidths() List get character cell width overrides
|
||||
getchangelist([{buf}]) List list of change list items
|
||||
getchar([expr]) Number or String
|
||||
get one character from the user
|
||||
@@ -3262,6 +3263,13 @@ getbufvar({buf}, {varname} [, {def}]) *getbufvar()*
|
||||
< Can also be used as a |method|: >
|
||||
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()*
|
||||
Returns the |changelist| for the buffer {buf}. For the use
|
||||
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}.
|
||||
Example: >
|
||||
echo typename([1, 2, 3])
|
||||
list<number>
|
||||
< list<number> ~
|
||||
|
||||
|
||||
undofile({name}) *undofile()*
|
||||
|
@@ -757,6 +757,7 @@ String manipulation: *string-functions*
|
||||
strwidth() size of string when displayed
|
||||
strdisplaywidth() size of string when displayed, deals with tabs
|
||||
setcellwidths() set character cell width overrides
|
||||
getcellwidths() get character cell width overrides
|
||||
substitute() substitute a pattern match with a string
|
||||
submatch() get a specific match in ":s" and substitute()
|
||||
strpart() get part of a string using byte index
|
||||
|
@@ -1953,6 +1953,8 @@ static funcentry_T global_functions[] =
|
||||
ret_string, f_getbufoneline},
|
||||
{"getbufvar", 2, 3, FEARG_1, arg3_buffer_string_any,
|
||||
ret_any, f_getbufvar},
|
||||
{"getcellwidths", 0, 0, 0, NULL,
|
||||
ret_list_any, f_getcellwidths},
|
||||
{"getchangelist", 0, 1, FEARG_1, arg1_buffer,
|
||||
ret_list_any, f_getchangelist},
|
||||
{"getchar", 0, 1, 0, arg1_bool,
|
||||
|
19
src/mbyte.c
19
src/mbyte.c
@@ -5745,6 +5745,25 @@ f_setcellwidths(typval_T *argvars, typval_T *rettv UNUSED)
|
||||
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
|
||||
f_charclass(typval_T *argvars, typval_T *rettv UNUSED)
|
||||
{
|
||||
|
@@ -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_ext(vimconv_T *vcp, char_u *ptr, int *lenp, int *unconvlenp);
|
||||
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);
|
||||
/* vim: set ft=c : */
|
||||
|
@@ -199,6 +199,26 @@ func Test_setcellwidths()
|
||||
call setcellwidths([])
|
||||
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()
|
||||
CheckRunVimInTerminal
|
||||
|
||||
|
@@ -695,6 +695,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1212,
|
||||
/**/
|
||||
1211,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user