From 8a85e071fdaa7448e6ec595bcbeba633e7a95af6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Thu, 27 Oct 2016 00:33:53 +0200 Subject: vis: apply language map only to key values not modifiers The language map translation should not take modifiers into account. For example if `a` is mapped to `b` then `` should also be mapped to ``. Fix #404 --- vis.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'vis.c') diff --git a/vis.c b/vis.c index 085681e..25f7840 100644 --- a/vis.c +++ b/vis.c @@ -864,20 +864,26 @@ static void vis_keys_push(Vis *vis, const char *input, size_t pos, bool record) } static const char *getkey(Vis *vis) { - const char *key = vis->ui->getkey(vis->ui); - if (!key) + TermKeyKey key = { 0 }; + if (!vis->ui->getkey(vis->ui, &key)) return NULL; vis_info_hide(vis); bool use_keymap = vis->mode->id != VIS_MODE_INSERT && vis->mode->id != VIS_MODE_REPLACE && !vis->keymap_disabled; vis->keymap_disabled = false; - if (use_keymap) { - const char *mapped = map_get(vis->keymap, key); - if (mapped) - return mapped; + if (key.type == TERMKEY_TYPE_UNICODE && use_keymap) { + const char *mapped = map_get(vis->keymap, key.utf8); + if (mapped) { + size_t len = strlen(mapped); + if (len < sizeof(key.utf8)) + memcpy(key.utf8, mapped, len); + } } - return key; + + TermKey *termkey = vis->ui->termkey_get(vis->ui); + termkey_strfkey(termkey, vis->key, sizeof(vis->key), &key, TERMKEY_FORMAT_VIM); + return vis->key; } bool vis_signal_handler(Vis *vis, int signum, const siginfo_t *siginfo, const void *context) { -- cgit v1.2.3