Mercurial > emacs
changeset 85427:ca2b443907f8
(read_key_sequence): Undo a change introduced by multi-tty
which caused key-translation-map to applied repeatedly (thus breaking
double-mode).
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Thu, 18 Oct 2007 22:07:34 +0000 |
parents | 78a8351088a9 |
children | ad84adc0e027 |
files | src/ChangeLog src/keyboard.c |
diffstat | 2 files changed, 21 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- 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 <monnier@iro.umontreal.ca> + + * 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 <monnier@iro.umontreal.ca> * xselect.c (x_own_selection, x_handle_selection_clear)
--- 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;