@@ -89,6 +89,7 @@ static void f_inputsecret(typval_T *argvars, typval_T *rettv);
8989static void f_interrupt (typval_T * argvars , typval_T * rettv );
9090static void f_invert (typval_T * argvars , typval_T * rettv );
9191static void f_islocked (typval_T * argvars , typval_T * rettv );
92+ static void f_keytrans (typval_T * argvars , typval_T * rettv );
9293static void f_last_buffer_nr (typval_T * argvars , typval_T * rettv );
9394static void f_libcall (typval_T * argvars , typval_T * rettv );
9495static void f_libcallnr (typval_T * argvars , typval_T * rettv );
@@ -2058,6 +2059,8 @@ static funcentry_T global_functions[] =
20582059 ret_string , f_json_encode },
20592060 {"keys" , 1 , 1 , FEARG_1 , arg1_dict_any ,
20602061 ret_list_string , f_keys },
2062+ {"keytrans" , 1 , 1 , FEARG_1 , arg1_string ,
2063+ ret_string , f_keytrans },
20612064 {"last_buffer_nr" , 0 , 0 , 0 , NULL , // obsolete
20622065 ret_number , f_last_buffer_nr },
20632066 {"len" , 1 , 1 , FEARG_1 , arg1_len ,
@@ -7135,6 +7138,24 @@ f_islocked(typval_T *argvars, typval_T *rettv)
71357138 clear_lval (& lv );
71367139}
71377140
7141+ /*
7142+ * "keytrans()" function
7143+ */
7144+ static void
7145+ f_keytrans (typval_T * argvars , typval_T * rettv )
7146+ {
7147+ char_u * escaped ;
7148+
7149+ rettv -> v_type = VAR_STRING ;
7150+ if (check_for_string_arg (argvars , 0 ) == FAIL
7151+ || argvars [0 ].vval .v_string == NULL )
7152+ return ;
7153+ // Need to escape K_SPECIAL and CSI for mb_unescape().
7154+ escaped = vim_strsave_escape_csi (argvars [0 ].vval .v_string );
7155+ rettv -> vval .v_string = str2special_save (escaped , TRUE, TRUE);
7156+ vim_free (escaped );
7157+ }
7158+
71387159/*
71397160 * "last_buffer_nr()" function.
71407161 */
0 commit comments