aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index af6e7e470d..4427179633 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -4963,9 +4963,17 @@ static int get_string_tv(char_u **arg, typval_T *rettv, int evaluate)
++name;
break;
- // Special key, e.g.: "\<C-W>"
+ // Special key, e.g.: "\<C-W>" or "\{C-W}"
case '<':
- extra = trans_special((const char_u **)&p, STRLEN(p), name, true, true, true, NULL);
+ case '{': {
+ int flags = FSK_KEYCODE | FSK_IN_STRING;
+
+ if (*p == '<') {
+ flags |= FSK_SIMPLIFY;
+ } else {
+ flags |= FSK_CURLY;
+ }
+ extra = trans_special((const char_u **)&p, STRLEN(p), name, flags, NULL);
if (extra != 0) {
name += extra;
if (name >= rettv->vval.v_string + len) {
@@ -4973,6 +4981,7 @@ static int get_string_tv(char_u **arg, typval_T *rettv, int evaluate)
}
break;
}
+ }
FALLTHROUGH;
default: