diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2024-03-09 15:03:54 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2024-03-09 15:03:54 -0700 |
commit | df8f1db2a0c771364865be79bf12656a40b7028b (patch) | |
tree | b6f6b9ec8dd46deed2a956249b0e82903c628492 /src/nvim/eval/vars.c | |
parent | 7a7f497b483cd65e340064f23ed1c73425ecba0a (diff) | |
parent | c324271b99eee4c621463f368914d57cd729bd9c (diff) | |
download | rneovim-df8f1db2a0c771364865be79bf12656a40b7028b.tar.gz rneovim-df8f1db2a0c771364865be79bf12656a40b7028b.tar.bz2 rneovim-df8f1db2a0c771364865be79bf12656a40b7028b.zip |
Merge branch 'userreg' into mix_20240309
Diffstat (limited to 'src/nvim/eval/vars.c')
-rw-r--r-- | src/nvim/eval/vars.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/nvim/eval/vars.c b/src/nvim/eval/vars.c index e016c65d90..91ac60d8ea 100644 --- a/src/nvim/eval/vars.c +++ b/src/nvim/eval/vars.c @@ -557,7 +557,7 @@ const char *skip_var_list(const char *arg, int *var_count, int *semicolon) static const char *skip_var_one(const char *arg) { if (*arg == '@' && arg[1] != NUL) { - return arg + 2; + return arg + 1 + utfc_ptr2len(arg + 1); } return find_name_end(*arg == '$' || *arg == '&' ? arg + 1 : arg, NULL, NULL, FNE_INCL_BR | FNE_CHECK_START); @@ -863,16 +863,20 @@ static char *ex_let_register(char *arg, typval_T *const tv, const bool is_const, char *arg_end = NULL; arg++; + + int regname = utf_ptr2char(arg); + int mblen = utf_ptr2len(arg); + if (op != NULL && vim_strchr("+-*/%", (uint8_t)(*op)) != NULL) { semsg(_(e_letwrong), op); } else if (endchars != NULL - && vim_strchr(endchars, (uint8_t)(*skipwhite(arg + 1))) == NULL) { + && vim_strchr(endchars, (uint8_t)(*skipwhite(arg + mblen))) == NULL) { emsg(_(e_letunexp)); } else { char *ptofree = NULL; const char *p = tv_get_string_chk(tv); if (p != NULL && op != NULL && *op == '.') { - char *s = get_reg_contents(*arg == '@' ? '"' : *arg, kGRegExprSrc); + char *s = get_reg_contents(*arg == '@' ? '"' : regname, kGRegExprSrc); if (s != NULL) { ptofree = concat_str(s, p); p = ptofree; @@ -880,8 +884,9 @@ static char *ex_let_register(char *arg, typval_T *const tv, const bool is_const, } } if (p != NULL) { - write_reg_contents(*arg == '@' ? '"' : *arg, p, (ssize_t)strlen(p), false); - arg_end = arg + 1; + write_reg_contents(*arg == '@' ? '"' : regname, + p, (ssize_t)strlen(p), false); + arg_end = arg + mblen; } xfree(ptofree); } |