1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-20 19:42:53 -08:00

* keyboard.c (read_key_sequence): Removed the

replay_sequence_new_buffer label; replay_sequence should be here
	instead.

	* keyboard.c (Vlast_event_frame): Arrange for this to exist iff
	MULTI_FRAME is defined.
	[not MULTI_FRAME] (syms_of_keyboard): Don't DEFVAR Vlast_event_frame.
	[not MULTI_FRAME] (read_char): Don't try to set Vlast_event_frame.
	[not MULTI_FRAME] (kbd_buffer_store_event): Don't try to set
	Vlast_event_frame for quit characters.
	[not MULTI_FRAME] (kbd_buffer_get_event): Don't try to generate
	switch-frame events.
This commit is contained in:
Jim Blandy 1992-11-07 07:07:16 +00:00
parent ee9ee63cfa
commit 07d2b8de62

View file

@ -198,16 +198,15 @@ Lisp_Object last_command;
instead of the actual command. */
Lisp_Object this_command;
#ifdef MULTI_FRAME
/* The frame in which the last input event occurred, or Qmacro if the
last event came from a macro.
command_loop_1 will select this frame before running the
command bound to an event sequence, and read_key_sequence will
toss the existing prefix if the user starts typing at a
new frame.
On a non-multi-frame Emacs, this will be either Qmacro or
selected_frame. */
new frame. */
Lisp_Object Vlast_event_frame;
#endif
/* The timestamp of the last input event we received from the X server.
X Windows wants this for selection ownership. */
@ -1135,6 +1134,7 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu)
if (!NILP (Vexecuting_macro))
{
#ifdef MULTI_FRAME
/* We set this to Qmacro; since that's not a frame, nobody will
try to switch frames on us, and the selected window will
remain unchanged.
@ -1145,6 +1145,7 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu)
Vlast_event_frame after each command is read, but events read
from a macro should never cause a new frame to be selected. */
Vlast_event_frame = Qmacro;
#endif
if (executing_macro_index >= XFASTINT (Flength (Vexecuting_macro)))
{
@ -1179,7 +1180,9 @@ read_char (commandflag, nmaps, maps, prev_event, used_mouse_menu)
if (_setjmp (getcjmp))
{
XSET (c, Lisp_Int, quit_char);
#ifdef MULTI_FRAME
XSET (Vlast_event_frame, Lisp_Frame, selected_frame);
#endif
goto non_reread;
}
@ -1492,11 +1495,13 @@ kbd_buffer_store_event (event)
{
extern SIGTYPE interrupt_signal ();
#ifdef MULTI_FRAME
/* If this results in a quit_char being returned to Emacs as
input, set last-event-frame properly. If this doesn't
get returned to Emacs as an event, the next event read
will set Vlast_event_frame again, so this is safe to do. */
Vlast_event_frame = FRAME_FOCUS_FRAME (event->frame);
#endif
last_event_timestamp = event->timestamp;
interrupt_signal ();
@ -1594,33 +1599,38 @@ kbd_buffer_get_event ()
if (kbd_fetch_ptr != kbd_store_ptr)
{
struct input_event *event;
Lisp_Object frame;
event = ((kbd_fetch_ptr < kbd_buffer + KBD_BUFFER_SIZE)
? kbd_fetch_ptr
: kbd_buffer);
last_event_timestamp = event->timestamp;
XSET (frame, Lisp_Frame, XFRAME (FRAME_FOCUS_FRAME (event->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. */
if (! EQ (frame, Vlast_event_frame))
{
Vlast_event_frame = frame;
obj = make_lispy_switch_frame (frame);
}
else
{
obj = make_lispy_event (event);
if (XTYPE (obj) == Lisp_Int)
XSET (obj, Lisp_Int, XINT (obj) & (meta_key ? 0377 : 0177));
{
#ifdef MULTI_FRAME
Lisp_Object 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. */
XSET (frame, Lisp_Frame, XFRAME (FRAME_FOCUS_FRAME (event->frame)));
if (! EQ (frame, Vlast_event_frame))
{
Vlast_event_frame = frame;
obj = make_lispy_switch_frame (frame);
}
else
#endif
{
obj = make_lispy_event (event);
if (XTYPE (obj) == Lisp_Int)
XSET (obj, Lisp_Int, XINT (obj) & (meta_key ? 0377 : 0177));
/* Wipe out this event, to catch bugs. */
event->kind = no_event;
/* Wipe out this event, to catch bugs. */
event->kind = no_event;
kbd_fetch_ptr = event + 1;
}
kbd_fetch_ptr = event + 1;
}
}
}
else if (do_mouse_tracking && mouse_moved)
{
@ -1630,6 +1640,7 @@ kbd_buffer_get_event ()
(*mouse_position_hook) (&frame, &x, &y, &time);
#ifdef MULTI_FRAME
/* Decide if we should generate a switch-frame event. Don't generate
switch-frame events for motion outside of all Emacs frames. */
if (frame && frame != XFRAME (Vlast_event_frame))
@ -1638,6 +1649,7 @@ kbd_buffer_get_event ()
obj = make_lispy_switch_frame (Vlast_event_frame);
}
else
#endif
obj = make_lispy_movement (frame, x, y, time);
}
else
@ -2954,10 +2966,12 @@ read_key_sequence (keybuf, bufsize, prompt)
echo_start = echo_length ();
keys_start = this_command_key_count;
replay_sequence_new_buffer:
replay_sequence:
/* Build our list of keymaps.
If the sequence starts with a mouse click, we may need to switch buffers
and jump back here; that's what replay_sequence_new_buffer is for. */
If we recognize a function key and replace its escape sequence in
keybuf with its symbol, or if the sequence starts with a mouse
click and we need to switch buffers, we jump back here to rebuild
the initial keymaps from the current buffer. */
{
Lisp_Object *maps;
@ -2978,7 +2992,6 @@ read_key_sequence (keybuf, bufsize, prompt)
if (! NILP (submaps[first_binding]))
break;
replay_sequence:
/* We jump here when a function key substitution has forced us to
reprocess the current key sequence. keybuf[0..mock_input] is the
sequence we want to reread. */
@ -3089,7 +3102,7 @@ read_key_sequence (keybuf, bufsize, prompt)
}
set_buffer_internal (XBUFFER (XWINDOW (window)->buffer));
goto replay_sequence_new_buffer;
goto replay_sequence;
}
else if (XTYPE (posn) == Lisp_Symbol)
{
@ -3851,6 +3864,12 @@ init_keyboard ()
do_mouse_tracking = 0;
input_pending = 0;
#ifdef MULTI_FRAME
/* This means that we don't get a switch-frame event before the first
character typed. */
XSET (Vlast_event_frame, Lisp_Frame, selected_frame);
#endif
if (!noninteractive)
{
signal (SIGINT, interrupt_signal);
@ -4074,10 +4093,12 @@ Polling is automatically disabled in all other cases.");
"*Number of complete keys read from the keyboard so far.");
num_input_keys = 0;
#ifdef MULTI_FRAME
DEFVAR_LISP ("last-event-frame", &Vlast_event_frame,
"*The frame in which the most recently read event occurred.\n\
If the last event came from a keyboard macro, this is set to `macro'.");
Vlast_event_frame = Qnil;
#endif
DEFVAR_LISP ("help-char", &help_char,
"Character to recognize as meaning Help.\n\