# HG changeset patch # User Stefan Monnier # Date 1192745254 0 # Node ID ca2b443907f8366b88955f71a0191b0b93158840 # Parent 78a8351088a965816a0584b719109ecb35cc7c6a (read_key_sequence): Undo a change introduced by multi-tty which caused key-translation-map to applied repeatedly (thus breaking double-mode). diff -r 78a8351088a9 -r ca2b443907f8 src/ChangeLog --- a/src/ChangeLog Thu Oct 18 21:23:32 2007 +0000 +++ b/src/ChangeLog Thu Oct 18 22:07:34 2007 +0000 @@ -1,3 +1,9 @@ +2007-10-18 Stefan Monnier + + * keyboard.c (read_key_sequence): Undo a change introduced by multi-tty + which caused key-translation-map to applied repeatedly (thus breaking + double-mode). + 2007-10-17 Stefan Monnier * xselect.c (x_own_selection, x_handle_selection_clear) diff -r 78a8351088a9 -r ca2b443907f8 src/keyboard.c --- a/src/keyboard.c Thu Oct 18 21:23:32 2007 +0000 +++ b/src/keyboard.c Thu Oct 18 22:07:34 2007 +0000 @@ -9185,13 +9185,16 @@ orig_keymap = get_local_map (PT, current_buffer, Qkeymap); from_string = Qnil; - /* We jump here when the key sequence has been thoroughly changed, and - we need to rescan it starting from the beginning. When we jump here, - keybuf[0..mock_input] holds the sequence we should reread. */ - replay_sequence: - - /* We may switch keyboards between rescans, so we need to - reinitialize fkey and keytran before each replay. */ + /* The multi-tty merge moved the code below to right after + `replay_sequence' which caused alll 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. */ 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; @@ -9199,6 +9202,11 @@ fkey.start = fkey.end = 0; keytran.start = keytran.end = 0; + /* We jump here when the key sequence has been thoroughly changed, and + we need to rescan it starting from the beginning. When we jump here, + keybuf[0..mock_input] holds the sequence we should reread. */ + replay_sequence: + starting_buffer = current_buffer; first_unbound = bufsize + 1;