summaryrefslogtreecommitdiffstats
path: root/src/mbyte.c
diff options
context:
space:
mode:
authorK.Takata <kentkt@csc.jp>2023-01-20 16:00:55 +0000
committerBram Moolenaar <Bram@vim.org>2023-01-20 16:00:55 +0000
commit7193323b7796c05573f3aa89d422e848feb3a8dc (patch)
treeffcff2f43e6fee4264f8da426f0c7e1583688406 /src/mbyte.c
parente446a017ffeaf1941589ac51ce9153b859018e5b (diff)
patch 9.0.1223: cannot use setcellwidths() below 0x100v9.0.1223
Problem: Cannot use setcellwidths() below 0x100. Solution: Also accept characters between 0x80 and 0x100. (Ken Takata, closes #11834)
Diffstat (limited to 'src/mbyte.c')
-rw-r--r--src/mbyte.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/mbyte.c b/src/mbyte.c
index 6d7137ed55..57aa619990 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -1589,19 +1589,26 @@ utf_char2cells(int c)
#endif
};
- if (c >= 0x100)
- {
-#if defined(FEAT_EVAL) || defined(USE_WCHAR_FUNCTIONS)
- int n;
-#endif
-
#ifdef FEAT_EVAL
- n = cw_value(c);
+ // Use the value from setcellwidths() at 0x80 and higher, unless the
+ // character is not printable.
+ if (c >= 0x80 &&
+# ifdef USE_WCHAR_FUNCTIONS
+ wcwidth(c) >= 1 &&
+# endif
+ vim_isprintc(c))
+ {
+ int n = cw_value(c);
if (n != 0)
return n;
+ }
#endif
+ if (c >= 0x100)
+ {
#ifdef USE_WCHAR_FUNCTIONS
+ int n;
+
/*
* Assume the library function wcwidth() works better than our own
* stuff. It should return 1 for ambiguous width chars!
@@ -5661,9 +5668,9 @@ f_setcellwidths(typval_T *argvars, typval_T *rettv UNUSED)
if (i == 0)
{
n1 = lili->li_tv.vval.v_number;
- if (n1 < 0x100)
+ if (n1 < 0x80)
{
- emsg(_(e_only_values_of_0x100_and_higher_supported));
+ emsg(_(e_only_values_of_0x80_and_higher_supported));
vim_free(ptrs);
return;
}