diff options
author | Kota Kato <github@kat0h.com> | 2023-01-17 18:31:56 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-01-17 18:31:56 +0000 |
commit | 66bb9ae70f7371456ed76518076d2a344f8ab417 (patch) | |
tree | 5906d7f03baeb9d2d5fd1c27f4eb7cbc5358f655 | |
parent | f7d1c6e1884c76680980571f1cf15e0928d247b5 (diff) | |
download | vim-git-66bb9ae70f7371456ed76518076d2a344f8ab417.tar.gz |
patch 9.0.1212: cannot read back what setcellwidths() has donev9.0.1212
Problem: Cannot read back what setcellwidths() has done.
Solution: Add getcellwidths(). (Kota Kato, closes #11837)
-rw-r--r-- | runtime/doc/builtin.txt | 10 | ||||
-rw-r--r-- | runtime/doc/usr_41.txt | 1 | ||||
-rw-r--r-- | src/evalfunc.c | 2 | ||||
-rw-r--r-- | src/mbyte.c | 19 | ||||
-rw-r--r-- | src/proto/mbyte.pro | 1 | ||||
-rw-r--r-- | src/testdir/test_utf8.vim | 20 | ||||
-rw-r--r-- | src/version.c | 2 |
7 files changed, 54 insertions, 1 deletions
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index f202da058..3544b5df8 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -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()* diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt index 559707737..7a706af3c 100644 --- a/runtime/doc/usr_41.txt +++ b/runtime/doc/usr_41.txt @@ -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 diff --git a/src/evalfunc.c b/src/evalfunc.c index 7639af8b2..923a75024 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -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, diff --git a/src/mbyte.c b/src/mbyte.c index 07cd9c6e6..4f6c8502a 100644 --- a/src/mbyte.c +++ b/src/mbyte.c @@ -5746,6 +5746,25 @@ f_setcellwidths(typval_T *argvars, typval_T *rettv UNUSED) } 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) { if (check_for_string_arg(argvars, 0) == FAIL diff --git a/src/proto/mbyte.pro b/src/proto/mbyte.pro index c429adcf8..1bd3aa0bb 100644 --- a/src/proto/mbyte.pro +++ b/src/proto/mbyte.pro @@ -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 : */ diff --git a/src/testdir/test_utf8.vim b/src/testdir/test_utf8.vim index 935af7ebf..d71d7ad03 100644 --- a/src/testdir/test_utf8.vim +++ b/src/testdir/test_utf8.vim @@ -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 diff --git a/src/version.c b/src/version.c index a38801961..3496b3af8 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1212, +/**/ 1211, /**/ 1210, |