Mercurial > emacs
changeset 3452:3393f6e53d25
(read_key_sequence) [!USE_TEXT_PROPERTIES]: Fix typo.
(menu_bar_items) [!USE_TEXT_PROPERTIES]: Likewise.
(kbd_buffer_get_event):
Shorten the first MULTI_FRAME conditional.
(lispy_function_keys): Add `remove' key.
(read_key_sequence): Take out previous change.
If we changed buffers during read_char, go to replay_sequence.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 03 Jun 1993 17:46:38 +0000 |
parents | 93757a9629cc |
children | 1fd89e975a78 |
files | src/keyboard.c |
diffstat | 1 files changed, 26 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/keyboard.c Thu Jun 03 17:37:18 1993 +0000 +++ b/src/keyboard.c Thu Jun 03 17:46:38 1993 +0000 @@ -1874,11 +1874,11 @@ #endif } -#ifdef MULTI_FRAME /* If this event is on a different frame, return a switch-frame this time, and leave the event in the queue for next time. */ else { +#ifdef MULTI_FRAME Lisp_Object frame = event->frame_or_window; Lisp_Object focus; @@ -1893,6 +1893,7 @@ && XFRAME (frame) != selected_frame) obj = make_lispy_switch_frame (frame); internal_last_event_frame = frame; +#endif /* MULTI_FRAME */ /* If we didn't decide to make a switch-frame event, go ahead and build a real event from the queue entry. */ @@ -1909,7 +1910,6 @@ kbd_fetch_ptr = event + 1; } } -#endif } else if (do_mouse_tracking && mouse_moved) { @@ -2024,7 +2024,7 @@ { /* X Keysym value */ - 0, 0, 0, 0, 0, 0, 0, 0, /* 0xff00 */ + "remove", 0, 0, 0, 0, 0, 0, 0, /* 0xff00 */ "backspace", "tab", "linefeed", @@ -3097,7 +3097,7 @@ #ifdef USE_TEXT_PROPERTIES maps[nmaps-2] = get_local_map (PT, current_buffer); #else - maps[nmaps-2] = current_buffer->local_map; + maps[nmaps-2] = current_buffer->keymap; #endif maps[nmaps-1] = global_map; } @@ -3632,10 +3632,14 @@ echo_start = echo_length (); keys_start = this_command_key_count; +#if 0 /* This doesn't quite work, because some of the things + that read_char does cannot safely be bypassed. + It seems too risky to try to make this work right. */ /* Read the first char of the sequence specially, before setting up any keymaps, in case a filter runs and switches buffers on us. */ first_event = read_char (!prompt, 0, submaps, last_nonmenu_event, &junk); +#endif /* 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, @@ -3661,7 +3665,7 @@ #ifdef USE_TEXT_PROPERTIES submaps[nmaps-2] = get_local_map (PT, current_buffer); #else - submaps[nmaps-2] = current_buffer->local_map; + submaps[nmaps-2] = current_buffer->keymap; #endif submaps[nmaps-1] = global_map; } @@ -3733,16 +3737,12 @@ /* If not, we should actually read a character. */ else { + struct buffer *buf = current_buffer; + last_real_key_start = t; - if (! NILP (first_event)) - { - key = first_event; - first_event = Qnil; - } - else - key = read_char (!prompt, nmaps, submaps, last_nonmenu_event, - &used_mouse_menu); + key = read_char (!prompt, nmaps, submaps, last_nonmenu_event, + &used_mouse_menu); /* read_char returns -1 at the end of a macro. Emacs 18 handles this by returning immediately with a @@ -3818,6 +3818,10 @@ keybuf[t+1] = key; mock_input = t + 2; + /* If we switched buffers while reading the first event, + replay in case we switched keymaps too. */ + if (buf != current_buffer && t == 0) + goto replay_sequence; goto replay_key; } } @@ -3855,6 +3859,15 @@ } } } + + /* If we switched buffers while reading the first event, + replay in case we switched keymaps too. */ + if (buf != current_buffer && t == 0) + { + keybuf[t++] = key; + mock_input = t; + goto replay_sequence; + } } /* We have finally decided that KEY is something we might want