summaryrefslogtreecommitdiff
path: root/src/keyboard.c
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2008-09-09 18:16:48 +0000
committerChong Yidong <cyd@stupidchicken.com>2008-09-09 18:16:48 +0000
commitf1ba6ccdf54c37205c0e5e332c55a86b7a1f38c8 (patch)
treef43564808c8befc56410356a1ba8b0da266e94f9 /src/keyboard.c
parentdaf85753e6067128db2369ffd97e2b25f9168d7c (diff)
downloademacs-f1ba6ccdf54c37205c0e5e332c55a86b7a1f38c8.tar.gz
(read_key_sequence): Reapply translation maps when switching
keyboards.
Diffstat (limited to 'src/keyboard.c')
-rw-r--r--src/keyboard.c18
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;
}
}