--- rxvt-unicode/src/keyboard.C 2014/04/26 20:51:12 1.63 +++ rxvt-unicode/src/keyboard.C 2014/04/29 13:17:54 1.65 @@ -104,6 +104,8 @@ if (strncmp (translation, "builtin:", 8) == 0) key->type = keysym_t::BUILTIN; + else if (strncmp (translation, "builtin-string:", 15) == 0) + key->type = keysym_t::BUILTIN_STRING; if (keymap.size () == keymap.capacity ()) keymap.reserve (keymap.size () * 2); @@ -132,7 +134,12 @@ { keysym_t *key = keymap [index]; - if (key->type != keysym_t::BUILTIN) + if (key->type == keysym_t::BUILTIN_STRING) + { + term->tt_write_user_input (kbuf, len); + return true; + } + else if (key->type != keysym_t::BUILTIN) { wchar_t *ws = rxvt_utf8towcs (key->str); char *str = rxvt_wcstombs (ws); @@ -144,14 +151,14 @@ if (strncmp (str, "command:", 8) == 0) term->cmdbuf_append (str + 8, strlen (str) - 8); else if (strncmp (str, "string:", 7) == 0) - term->tt_write (colon + 1, strlen (colon + 1)); + term->tt_write_user_input (colon + 1, strlen (colon + 1)); else if (strncmp (str, "perl:", 8) == 0) HOOK_INVOKE ((term, HOOK_USER_COMMAND, DT_STR, colon + 1, DT_END)); else HOOK_INVOKE ((term, HOOK_KEYBOARD_DISPATCH, DT_STR_LEN, str, colon - str, DT_STR, colon + 1, DT_END)); } else - term->tt_write (str, strlen (str)); + term->tt_write_user_input (str, strlen (str)); free (str);