aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman <[email protected]>1993-06-03 17:46:38 +0000
committerRichard M. Stallman <[email protected]>1993-06-03 17:46:38 +0000
commita6d53864110ca6bbc66831c54560d0f85cec267d (patch)
tree33347a8c62e56a03c29b132a635790b248c0df72
parentffb4fddebf3a09f96705926ba93d57d98df1afe9 (diff)
(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.
-rw-r--r--src/keyboard.c39
1 files changed, 26 insertions, 13 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index 8dba1d098e..66885c2902 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -1874,11 +1874,11 @@ kbd_buffer_get_event ()
#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 @@ kbd_buffer_get_event ()
&& 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_buffer_get_event ()
kbd_fetch_ptr = event + 1;
}
}
-#endif
}
else if (do_mouse_tracking && mouse_moved)
{
@@ -2024,7 +2024,7 @@ static char *lispy_function_keys[] =
{
/* 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 @@ menu_bar_items ()
#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 @@ read_key_sequence (keybuf, bufsize, prompt)
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 @@ read_key_sequence (keybuf, bufsize, prompt)
#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 @@ read_key_sequence (keybuf, bufsize, prompt)
/* 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 @@ read_key_sequence (keybuf, bufsize, prompt)
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 @@ read_key_sequence (keybuf, bufsize, prompt)
}
}
}
+
+ /* 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