diff options
author | Chong Yidong <cyd@stupidchicken.com> | 2008-09-09 18:16:48 +0000 |
---|---|---|
committer | Chong Yidong <cyd@stupidchicken.com> | 2008-09-09 18:16:48 +0000 |
commit | f1ba6ccdf54c37205c0e5e332c55a86b7a1f38c8 (patch) | |
tree | f43564808c8befc56410356a1ba8b0da266e94f9 /src/keyboard.c | |
parent | daf85753e6067128db2369ffd97e2b25f9168d7c (diff) | |
download | emacs-f1ba6ccdf54c37205c0e5e332c55a86b7a1f38c8.tar.gz |
(read_key_sequence): Reapply translation maps when switching
keyboards.
Diffstat (limited to 'src/keyboard.c')
-rw-r--r-- | src/keyboard.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/src/keyboard.c b/src/keyboard.c index 086ba110337..5015155d97f 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -9154,16 +9154,10 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last, orig_keymap = get_local_map (PT, current_buffer, Qkeymap); from_string = Qnil; - /* The multi-tty merge moved the code below to right after - `replay_sequence' which caused all these translation maps to be applied - repeatedly, even tho their doc says very clearly they are not applied to - their own output. - The reason for this move was: "We may switch keyboards between rescans, - so we need to reinitialize fkey and keytran before each replay". - This move was wrong (even if we switch keyboards, keybuf still holds the - keys we've read already from the original keyboard and some of those keys - may have already been translated). So there may still be a bug out there - lurking. */ + /* We jump here when we need to reinitialize fkey and keytran; this + happens if we switch keyboards between rescans. */ + replay_entire_sequence: + indec.map = indec.parent = current_kboard->Vinput_decode_map; fkey.map = fkey.parent = current_kboard->Vlocal_function_key_map; keytran.map = keytran.parent = Vkey_translation_map; @@ -9360,7 +9354,7 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last, /* Don't touch interrupted_kboard when it's been deleted. */ delayed_switch_frame = Qnil; - goto replay_sequence; + goto replay_entire_sequence; } if (!NILP (delayed_switch_frame)) @@ -9392,7 +9386,7 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last, mock_input = 0; orig_local_map = get_local_map (PT, current_buffer, Qlocal_map); orig_keymap = get_local_map (PT, current_buffer, Qkeymap); - goto replay_sequence; + goto replay_entire_sequence; } } |