1. 11 Mar, 1993 1 commit
  2. 07 Mar, 1993 3 commits
    • Richard M. Stallman's avatar
      Include intervals.h. · 497ba7a1
      Richard M. Stallman authored
      (read_key_sequence): Use get_local_map.
      497ba7a1
    • Richard M. Stallman's avatar
      (read_key_sequence): · d3cc13fa
      Richard M. Stallman authored
      Use meta_modifier for meta keys when handling function_key_map.
      d3cc13fa
    • Richard M. Stallman's avatar
      (follow_key): Downcase shift_modifier as well as ASCII. · 86e5706b
      Richard M. Stallman authored
      (command_loop_1): Run pre-command-hook and post-command-hook.
      Set this_command before running pre-command-hook.
      (syms_of_keyboard): Set up vars for those hooks.
      
      (syms_of_keyboard): Handle gaps in modifier_names.
      (modifier_names): Reorder to match termhooks.h.
      
      (parse_modifiers_uncached): Detect `s-', not `super-'.
      (apply_modifiers_uncached): Make `s-', not `super-'.
      
      (lispy_function_keys): Add codes starting at 0xff00
      and running through 0xffff.
      
      (read_char): Move metabit when fetching from string macro.
      
      (command_loop_1): Clear Vdeactivate_mark before cmd.
      Clear mark_active if command set Vdeactivate_mark.
      Run deactivate-mark-hook at that time, or activate-mark-hook.
      (syms_of_keyboard): Define variable deactivate-mark.
      
      (syms_of_keyboard): New lisp var unread-command-char.
      (Finput_pending_p): Test unread_command_char.
      (Fdiscard_input, quit_throw_to_read_char, init_keyboard): Set it.
      (read_char): Fetch from it.
      
      (Fthis_command_keys, Fread_key_sequence):
      Fix calls to make_event_array.
      
      (make_lispy_event): Put meta and shift modifiers
      into an integer.
      (read_avail_input): Set the modifiers field in the events read.
      (kbd_buffer_get_event): Pass thru integer event untruncated.
      (read_char): Likewise.
      (read_key_sequence, read_char): Only -1 means EOF.
      (kbd_buffer_store_event): Don't ignore 0200 bit in quit char.
      (follow_key): Use new meta bit flag.
      86e5706b
  3. 02 Mar, 1993 1 commit
    • Jim Blandy's avatar
      * keyboard.c (kbd_buffer_get_event): Protect assignment to · 3c370943
      Jim Blandy authored
      	Vlast_event_frame in a "#ifdef MULTI_FRAME" clause.
      
      	Use the term `scroll bar', instead of `scrollbar'.
      	* alloc.c, frame.c, frame.h, indent.c, keyboard.c, keyboard.h,
      	lisp.h, term.c, termhooks.h, window.c, window.h, xdisp.c, xfns.c,
      	xterm.c, xterm.h: Terminology changed.
      
              Don't generate switch-frame events by checking Vlast_event_frame;
      	use a separate variable for that bookkeeping.  In order to
      	generate them properly, we may need to fiddle with it.
      	* keyboard.c (internal_last_event_frame): New variable.
      	(command_loop_1): Check internal_last_event_frame, not
      	Vlast_event_frame.
      	(read_char, kbd_buffer_store_event): Set both Vlast_event_frame and
      	internal_last_event_frame.
      	(kbd_buffer_get_event): Check internal_last_event_frame to decide
      	whether to generate a switch-frame event.  Set Vlast_event_frame
      	after each event.
      	(init_keyboard): Initialize both Vlast_event_frame and
      	internal_last_event_frame.
      	* keyboard.h (internal_last_event_frame): Add extern declaration
      	for this.
      	* frame.c (Vlast_event_frame): Remove external declaration for
      	this.
      	(Fselect_frame): Set internal_last_event_frame to Qnil to force a
      	switch-frame event, not Vlast_event_frame; the latter is supposed
      	to convey information to the user.
      
      	* keyboard.c (syms_of_keyboard): Doc fix for unread_command_events.
      3c370943
  4. 26 Feb, 1993 1 commit
  5. 23 Feb, 1993 1 commit
  6. 22 Feb, 1993 1 commit
    • Jim Blandy's avatar
      * keyboard.c (init_keyboard): Recognize HAVE_TERMIOS as well as · cb5df6ae
      Jim Blandy authored
      	HAVE_TERMIO.
      
      	* keyboard.c (echo_char): Apply XINT to c before passing it to
      	push_key_description.
      
      	* keyboard.c (recursive_edit_1, command_loop_1): Pass the proper
      	number of arguments to unbind_to.
      	* lread.c (Feval_buffer): Same.
      	* window.c (Fscroll_other_window): Same.
      
      	* keyboard.c (command_loop_1): Apply XINT to c before passing it
      	to internal_self_insert and direct_output_for_insert.
      
      	* keyboard.c (make_lispy_movement): Rename the variable `part'
      	declared in the block handling scrollbar movement to `part_sym',
      	to avoid potential conflicts with the argument named `part'.
      	Apparently the semantics of expressions like this are unclear.
      
      	* keyboard.c (Fread_key_sequence): Backslash the newlines in this
      	docstring.
      	* textprop.c (Fget_text_property): Same.
      cb5df6ae
  7. 21 Feb, 1993 1 commit
  8. 19 Feb, 1993 2 commits
  9. 07 Feb, 1993 1 commit
  10. 26 Jan, 1993 1 commit
  11. 15 Jan, 1993 1 commit
  12. 14 Jan, 1993 1 commit
    • Jim Blandy's avatar
      * termhooks.h (mouse_position_hook): Doc fix. · 7b4aedb9
      Jim Blandy authored
      	(set_vertical_scrollbar_hook): This doesn't return anything any
      	more, and doesn't take a struct scrollbar * argument any more.
      	(condemn_scrollbars_hook, redeem_scrollbar_hook,
      	judge_scrollbars_hook): Doc fixes.
      	* term.c (mouse_position_hook): Doc fix.
      	(set_vertical_scrollbar_hook): This doesn't return
      	anything any more.  Doc fixes.
      	* keyboard.c (kbd_buffer_get_event): Receive the scrollbar's
      	window from *mouse_position_hook and pass it to
      	make_lispy_movement, instead of working with a pointer to a struct
      	scrollbar.
      	(make_lispy_event): We don't need a window_from_scrollbar function
      	anymore; we are given the window directly in *EVENT.
      	Unify the code which generates
      	text-area mouse clicks and scrollbar clicks; use the same code to
      	distinguish clicks from drags on the scrollbar as in the text area.
      	Distinguish clicks from drags by storing a copy of the lispy
      	position list returned as part of the event.
      	(button_down_location): Make this a lisp vector, rather than an
      	array of random structures.
      	(struct mouse_position): Remove this; it's been replaced by a lisp
      	list.
      	(make_lispy_movement): Accept the scrollbar's window as a
      	parameter, rather than the scrollbar itself.
      	If FRAME is zero, assume that the other arguments are garbage.
      	(syms_of_keyboard): No need to staticpro each window of
      	button_down_location now; just initialize and staticpro it.
      	* window.c (window_from_scrollbar): Function deleted; no longer
      	needed.
      	* xdisp.c (redisplay_window): Just pass the window to
      	set_vertical_scrollbar hook; don't pass the scrollbar object too.
      	* xterm.c (XTmouse_position): Don't return a pointer to the
      	scrollbar for scrollbar motion; instead, return the scrollbar's
      	window.
      
      	* keyboard.c (apply_modifiers): Don't assume that the Qevent_kind
      	property of BASE is set when we first create the new modified
      	symbol.  Check that the Qevent_kind property is properly set each
      	time we return any symbol.
      
      	* termhooks.h (struct input_event): Replace the frame member with
      	a Lisp_Object member by the name of frame_or_window.  Doc fixes.
      	Remove the scrollbar member; instead, use frame_or_window to hold the
      	window whose scrollbar was clicked.
      	* keyboard.c (kbd_buffer_store_event, kbd_buffer_get_event,
      	make_lispy_event): Adjust references to frame member of struct
      	input_event to use frame_or_window now.
      	* xterm.c (construct_mouse_click, XTread_socket): Same.
      
      	* keyboard.c (kbd_buffer_frames): Renamed to
      	kbd_buffer_frame_or_window, and made to exist even when
      	MULTI_FRAME isn't defined; single-frame systems might have
      	scrollbars.  Use it to GCPRO the frame_or_window field in the
      	event queue.
      	(kbd_buffer_store_event, kbd_buffer_get_event,
      	stuff_buffered_input): Set and clear the
      	appropriate element of kbd_buffer_frame_or_window, whether or not
      	MULTI_FRAME is #defined.
      	(read_avail_input): When reading characters directly from stdin,
      	set the frame_or_window field of the event appropriately,
      	depending on whether or not MULTI_FRAME is #defined.
      	(Fdiscard_input, init_keyboard): Zap kbd_buffer_frame_or_window,
      	not kbd_buffer_frames.
      	(syms_of_keyboard): Initialize and staticpro
      	kbd_buffer_frame_or_window, whether or not MULTI_FRAME is
      	#defined.
      
      	* keyboard.c (head_table): Make Qscrollbar_movement have a
      	Qevent_kind property of Qmouse_movement, not Qscrollbar_movement.
      
      	* keyboard.c (read_key_sequence): If we decide to throw away a
      	mouse event which has prefix symbols (`mode-line',
      	`vertical-scrollbar', etcetera), remember that we may have to
      	unwind two characters, not just one.
      
      	* keyboard.c (read_key_sequence): Doc fixes.
      
      	* keyboard.c (kbd_buffer_store_event): Fix reversed sense of test
      	for focus redirection.
      
      	* keyboard.c (read_char): Don't echo mouse movements.
      7b4aedb9
  13. 24 Dec, 1992 1 commit
    • Jim Blandy's avatar
      * keyboard.c: Protect all references to kbd_buffer_frames with · 4bb994d1
      Jim Blandy authored
      	#ifdef MULTI_FRAME.
      
      	* frame.h (struct frame): New fields `can_have_scrollbars' and
      	`has_vertical_scrollbars'.
      	(FRAME_CAN_HAVE_SCROLLBARS, FRAME_HAS_VERTICAL_SCROLLBARS): New
      	accessors, for both the MULTI_FRAME and non-MULTI_FRAME.
      	(VERTICAL_SCROLLBAR_WIDTH, WINDOW_VERTICAL_SCROLLBAR,
      	WINDOW_VERTICAL_SCROLLBAR_COLUMN,
      	WINDOW_VERTICAL_SCROLLBAR_HEIGHT): New macros.
      	* window.h (struct window): New field `vertical_scrollbar'.
      	* xterm.h (struct x_display): vertical_scrollbars,
      	judge_timestamp, vertical_scrollbar_extra: New fields.
      	(struct scrollbar): New struct.
      	(VERTICAL_SCROLLBAR_PIXEL_WIDTH, VERTICAL_SCROLLBAR_PIXEL_HEIGHT,
      	VERTICAL_SCROLLBAR_LEFT_BORDER, VERTICAL_SCROLLBAR_RIGHT_BORDER,
      	VERTICAL_SCROLLBAR_TOP_BORDER, VERTICAL_SCROLLBAR_BOTTOM_BORDER,
      	CHAR_TO_PIXEL_WIDTH, CHAR_TO_PIXEL_HEIGHT, PIXEL_TO_CHAR_WIDTH,
      	PIXEL_TO_CHAR_HEIGHT): New accessors and macros.
      	* frame.c (make_frame): Initialize the `can_have_scrollbars' and
      	`has_vertical_scrollbars' fields of the frame.
      	* term.c (term_init): Note that TERMCAP terminals don't support
      	scrollbars.
      	(mouse_position_hook): Document new args.
      	(set_vertical_scrollbar_hook, condemn_scrollbars_hook,
      	redeem_scrollbar_hook, judge_scrollbars_hook): New hooks.
      	* termhooks.h: Declare and document them.
      	(enum scrollbar_part): New type.
      	(struct input_event): Describe the new form of the scrollbar_click
      	event type.  Change `part' from a Lisp_Object to an enum
      	scrollbar_part.  Add a new field `scrollbar'.
      	* keyboard.c (kbd_buffer_get_event): Pass appropriate new
      	parameters to *mouse_position_hook, and make_lispy_movement.
      	* xfns.c (x_set_vertical_scrollbar): New function.
      	(x_figure_window_size): Use new macros to calculate frame size.
      	(Fx_create_frame): Note that X Windows frames do support scroll
      	bars.  Default to "yes".
      	* xterm.c: #include <X11/cursorfont.h> and "window.h".
      	(x_vertical_scrollbar_cursor): New variable.
      	(x_term_init): Initialize it.
      	(last_mouse_bar, last_mouse_bar_frame, last_mouse_part,
      	last_mouse_scroll_range_start, last_mouse_scroll_range_end): New
      	variables.
      	(XTmouse_position): Use them to return scrollbar movement events.
      	Take new arguments, for that purpose.
      	(x_window_to_scrollbar, x_scrollbar_create,
      	x_scrollbar_set_handle, x_scrollbar_remove, x_scrollbar_move,
      	XTset_scrollbar, XTcondemn_scrollbars, XTredeem_scrollbar,
      	XTjudge_scrollbars, x_scrollbar_expose,
      	x_scrollbar_background_expose, x_scrollbar_handle_click,
      	x_scrollbar_handle_motion): New functions to implement scrollbars.
      	(x_term_init): Set the termhooks.h hooks to point to them.
      	(x_set_window_size): Use new macros to calculate frame size.  Set
      	vertical_scrollbar_extra field.
      	(x_make_frame_visible): Use the frame accessor
      	FRAME_HAS_VERTICAL_SCROLLBARS to decide if we need to map the
      	frame's subwindows as well.
      	(XTread_socket): Use new size-calculation macros from xterm.h when
      	processing ConfigureNotify events.
      	(x_wm_set_size_hint): Use PIXEL_TO_CHAR_WIDTH and
      	PIXEL_TO_CHAR_HEIGHT macros.
      	* ymakefile (xdisp.o): This now depends on termhooks.h.
      	(xterm.o): This now depends on window.h.
      
      	* keyboard.c (Qscrollbar_movement, Qvertical_scrollbar,
      	Qabove_handle, Qhandle, Qbelow_handle): New symbols.
      	(make_lispy_event): New code to build scrollbar clicks.
      	(make_lispy_movement): New code to handle scrollbar movement.
      	(head_table): Include Qscrollbar_movement in the event heads.
      	(syms_of_keyboard): Init and staticpro Qvertical_scrollbar,
      	Qabove_handle, Qhandle, and Qbelow_handle.
      	* keyboard.h (Qscrollbar_movement): Declare this along with the
      	other event types.
      	* lisp.h (Qvertical_scrollbar): Declare this.
      	* window.c (window_from_scrollbar): New function.
      
      	* xterm.h (struct x_display): Delete v_scrollbar, v_thumbup,
      	v_thumbdown, v_slider, h_scrollbar, h_thumbup,
      	h_thumbdown, h_slider, v_scrollbar_width, h_scrollbar_height
      	fields.
      	* keyboard.c (Qvscrollbar_part, Qvslider_part, Qvthumbup_part,
      	Qvthumbdown_part, Qhscrollbar_part, Qhslider_part, Qhthumbup_part,
      	Qhthumbdown_part, Qscrollbar_click): Deleted; part of an obsolete
      	interface.
      	(head_table): Removed from here as well.
      	(syms_of_keyboard): And here.
      	* keyboard.h: And here.
      	(POSN_SCROLLBAR_BUTTON): Removed.
      	* xscrollbar.h: File removed - no longer necessary.
      	* xfns.c: Don't #include it any more.
      	(Qhorizontal_scroll_bar, Qvertical_scroll_bar): Deleted.
      	(syms_of_xfns): Don't initialize or staticpro them.
      	(gray_bits): Salvaged from xscrollbar.h.
      	(x_window_to_scrollbar): Deleted.
      	(x_set_horizontal_scrollbar): Deleted.
      	(enum x_frame_parm, x_frame_parms): Remove references to
      	x_set_horizontal_scrollbar.
      	(x_set_foreground_color, x_set_background_color,
      	x_set_border_pixel): Remove special code to support scrollbars.
      	(Fx_create_frame): Remove old scrollbar setup code.
      	(install_vertical_scrollbar, install_horizontal_scrollbar,
      	adjust_scrollbars, x_resize_scrollbars): Deleted.
      	* xterm.c (construct_mouse_click): This doesn't need to take care of
      	scrollbar clicks anymore.
      	(XTread_socket): Remove old code to support scrollbars.  Call new
      	functions instead for events which occur in scrollbar windows.
      	(XTupdate_end): Remove call to adjust_scrollbars; the main
      	redisplay code takes care of that now.
      	(enum window_type): Deleted.
      	* ymakefile: Note that xfns.o no longer depends on xscrollbar.h.
      
      	* keyboard.c (Fread_key_sequence): Doc fix.
      
      	* keyboard.c (make_lispy_event): Buttons are numbered starting
      	with zero now.
      
      	* keyboard.c (make_lispy_event): Use the proper accessors when
      	manipulating the `x' and `y' fields of struct input_event.
      
      	* keyboard.c (parse_modifiers_uncached): Remember that strncmp
      	returns zero if the two substrings are equal.
      
      	* keyboard.c (do_mouse_tracking, Ftrack_mouse): Doc fix.
      
      	* keyboard.c (read_char): Don't put mouse movements in
      	this_command_keys.
      
      	Change the meaning of focus redirection to make switching windows
      	work properly.  Fredirect_frame_focus has the details.
      	* frame.h (focus_frame): Doc fix.
      	[not MULTI_FRAME] (FRAME_FOCUS_FRAME): Make this Qnil, which
      	indicates no focus redirection, instead of zero, which is
      	selected_frame.
      	* frame.c (make_frame): Initialize f->focus_frame to Qnil, rather
      	than making it point to frame itself.
      	(Fselect_frame): If changing the selected frame from FOO to BAR,
      	make all redirections to FOO shift to BAR as well.  Doc fix.
      	(Fredirect_frame_focus): Doc fix.  Accept nil as a valid
      	redirection, not just as a default for FRAME.
      	(Fframe_focus): Doc fix.
      	* keyboard.c (kbd_buffer_store_event, kbd_buffer_get_event): Deal
      	with focus redirections being nil.
      	* xterm.c (XTframe_rehighlight): Doc fix.  Deal with focus
      	redirections being nil.
      
      	* keyboard.c (kbd_buffer_frames): New vector, to GCPRO frames in
      	kbd_buffer.
      	(kbd_buffer_store_event): When we add an event to kbd_buffer, make
      	sure to store its frame in kbd_buffer_frames.
      	(kbd_buffer_get_event): When we remove an event from kbd_buffer,
      	make sure to set the corresponding element of kbd_buffer_frames to
      	Qnil, to allow the frame to get GC'd.
      	(Fdiscard_input, init_keyboard): Clear all elements of
      	kbd_buffer_frames to nil.
      	(syms_of_keyboard): Create and staticpro kbd_buffer_frames.
      4bb994d1
  14. 06 Dec, 1992 1 commit
  15. 16 Nov, 1992 1 commit
    • Jim Blandy's avatar
      * keyboard.c (unread_switch_frame): Don't declare this static. · 8f805655
      Jim Blandy authored
      	* keyboard.c (Vlast_event_frame): Doc fix.
      
      	* keyboard.c (read_char): Write composite events to the dribble
      	file properly.
      
      	* keyboard.c (init_keyboard): Initialize Vlast_event_frame to
      	Qnil, rather than the selected frame.
      
      	* keyboard.c (lispy_modifier_list): Added sanity check before
      	indexing into modifier_symbols.
      
      	* keyboard.c (add_command_key): When copying the contents of the
      	old this_command_keys to new_keys, remember to multiply size by
      	sizeof (Lisp_Object) to get the amount we really need to copy.
      
      	Rename unread_command_char to unread_command_event; it has
      	subtly different semantics now, and we should use
      	`make-obsolete-variable' to warn people.
      	* keyboard.c (unread_command_char): Rename.
      	(command_loop_1, read_char, Finput_pending, Fdiscard_input,
      	quit_throw_to_read_char, init_keyboard, syms_of_keyboard): Change
      	references.
      
      	* keyboard.c (read_key_sequence): Don't use
      	save_excursion_{save,restore} to protect the caller against buffer
      	switches; use Fset_buffer and Fcurrent_buffer; redisplay might
      	change point, and we don't want to undo that.
      
      	* keyboard.c (kbd_buffer_get_event): When checking a mouse
      	movement for a frame switch, don't assume Vlast_event_frame
      	contains a Lisp_Frame object.
      8f805655
  16. 07 Nov, 1992 1 commit
    • Jim Blandy's avatar
      * keyboard.c (read_key_sequence): Removed the · 07d2b8de
      Jim Blandy authored
      	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.
      07d2b8de
  17. 31 Oct, 1992 1 commit
    • Jim Blandy's avatar
      * keyboard.c: #include dispextern.h. · f4255cd1
      Jim Blandy authored
      	(recursive_edit_unwind, command_loop, Fthis_command_keys): Declare
      	these to return Lisp_Objects at the very top of the file, to avoid
      	having them implicitly declared as ints.
      	(echo_char): Use EQ to compare C to help_char.
      	(read_char): Remember to apply XFASTINT to the return value of
      	Flength before using it.  Apply XINT to c when clearing its high
      	bits and meta bits, and when writing it to the dribble file.
      	(read_char_menu_prompt): Use EQ to compare obj with
      	menu_prompt_more_char and its control-character analog.
      	(read_key_sequence): Declare PROMPT to be char *, not a
      	Lisp_Object.  Use the appropriate accessors on keybuf when looking
      	for ASCII function key sequences.
      
      	* keyboard.c (echobuf): Make this 300 characters, not 100.  This
      	isn't a real fix, but it's quick.
      
      	* keyboard.c (read_char): When returning an unread switch-frame
      	event, jump to reread_first to return it, rather than reread; this
      	makes sure the event gets echoed (if appropriate) and goes into
      	this_command_keys.
      
      	* keyboard.c (read_key_sequence): If the key sequence starts with
      	a mouse click, read the key sequence using the keymaps of the
      	buffer clicked on, not the current buffer.
      
      	* keyboard.c (unread_switch_frame): Make this static, to indicate
      	that nobody outside of this file uses it.
      
      	* keyboard.c (follow_key): Ask get_keymap_1 to perform autoloads.
      	(read_key_sequence): When pursuing potential bindings in the
      	function key map, ask get_keymap_1 to perform autoloading.  This
      	is hardly important, but it's consistent.
      f4255cd1
  18. 20 Oct, 1992 1 commit
  19. 19 Oct, 1992 1 commit
    • Jim Blandy's avatar
      * keyboard.c (this_command_keys): Make this a vector, instead of · 6569cc8d
      Jim Blandy authored
      	an array of Lisp_Objects.
      	(this_command_keys_size): Deleted.
      	(echo, add_command_key, Fthis_command_keys): Adjusted
      	appropriately.
      	(init_keyboard): Don't allocate it here.
      	(syms_of_keyboard): Allocate it here, and staticpro it.
      
      	* keyboard.c (read_char): Call ourselves with the appropriate
      	number of arguments.
      	(read_char_menu_prompt): If USED_MOUSE_MENU is zero, don't try to
      	store things in it.
      
      	* keyboard.c (modify_event_symbol): Arrange to set the
      	click_modifier bit on otherwise unmodified mouse clicks.
      
      	* keyboard.c (kbd_buffer_get_event): Remember that
      	*mouse_position_hook may set *FRAME to 0; don't generate
      	switch-frame events in this case.  Fix fencepost bug in fetching
      	events from keyboard buffer.
      6569cc8d
  20. 12 Oct, 1992 2 commits
  21. 11 Oct, 1992 1 commit
    • Jim Blandy's avatar
      * keyboard.c (Vlast_event_frame): Make this variable exist even · cd21b839
      Jim Blandy authored
      	when MULTI_FRAME isn't #defined.  People might find it
      	necessary for writing correct programs, even when the programs
      	don't explicitly use multiple frames.
      	(read_char, kbd_buffer_store_event, kbd_buffer_get_event): No need
      	to test MULTI_FRAME before setting Vlast_event_frame.
      	(syms_of_keyboard): DEFVAR Vlast_event_frame whether or not
      	MULTI_FRAME is defined.
      
              * keyboard.c: Add switch-frame events.
      	(Qswitch_frame): New event header symbol.
      	(head_table): Include Qswitch_frame in the table of event heads.
      	(kbd_buffer_get_event): Detect when a frame switch has occurred,
      	and return a frame switch event before the enqueued event.
      	(make_lispy_switch_frame): New function.
      	(unread_switch_frame): New variable.
      	(read_key_sequence): Don't throw away the key sequence if the user
      	switches frames in the middle of the sequence.  Instead, when we
      	receive a switch-frame event in the middle of a key sequence, save
      	it, and stuff it into unread_switch_frame when the sequence
      	is complete.
      	(read_char): If unread_switch_frame is set, return that value.
      	(command_loop_1): No need to check Vlast_event_frame and select
      	new frames here; that's taken care of by switch-frame events now.
      	(syms_of_keyboard): Initialize and staticpro unread_switch_frame.
      
      	* keyboard.c (follow_key, read_key_sequence): Call access_keymap
      	with T_OK true.
      
      	* keyboard.c (apply_modifiers): Copy the value of BASE's
      	Qevent_kind property to the new symbol.
      
      	* keyboard.c (syms_of_keyboard): Qevent_kind should be initialized
      	to intern ("event-kind"), not intern ("event-type").
      cd21b839
  22. 03 Oct, 1992 2 commits
    • Jim Blandy's avatar
      * keyboard.c (read_key_sequence): Treat mouse clicks on non-text · 0a7f1fc0
      Jim Blandy authored
      	areas as if they were prefixed with the symbol denoting the
      	area clicked on - `mode-line', etcetera.
      	When we throw away an unbound `down-' event, reset mock_input as
      	well.
      
      	* keyboard.c (Qevent_symbol_element_mask, Qmodifier_cache): Two
      	new symbols, used to implement caches on event heads.  These take
      	the place of some of the caching that modify_event_symbol used to do.
      	(parse_modifiers_uncached, apply_modifiers_uncached,
      	lispy_modifier_list, parse_modifiers, apply_modifiers): New
      	functions, which replace format_modifiers and reorder_modifiers;
      	they can be useful elsewhere too.
      	(reorder_modifiers, modify_event_symbol): Re-implement these in
      	terms of parse_modifiers and apply_modifiers.  modify_event_symbol
      	now uses a much simpler cache, and takes advantage of the caches
      	maintained by parse_ and apply_modifiers.
      	(follow_key): Don't modify NEXT if KEY has no bindings.
      	(read_key_sequence): Drop unbound `down-' events, and turn unbound
      	`drag-' events into clicks if that would make them bound.  This
      	benefits from the rewriting of the modifier key handling code.
      	(syms_of_keyboard): Initialize and intern
      	Qevent_symbol_element_mask and Qmodifier_cache.
      
      	* keyboard.c (echo_prompt): Terminate the echo buffer properly
      	even when the string is too long to display in the minibuffer.
      	(echo_truncate): Just return echoptr - echobuf, rather than
      	calling strlen on echobuf.
      
      	* keyboard.c (modifier_names): The modifier is named "control",
      	not "ctrl".
      0a7f1fc0
    • Jim Blandy's avatar
      * keyboard.c (modify_event_symbol): Make sure that the unmodified · 13b5e56c
      Jim Blandy authored
      	event header gets the proper properties set on it, by recursing
      	and letting the same code build the properties for all event symbols.
      
      	* keyboard.c (Qmouse_click): Fix typo which assigned `mouse-click'
      	symbol to Qmouse_movement.
      13b5e56c
  23. 02 Oct, 1992 1 commit
    • Jim Blandy's avatar
      * keyboard.c (echo_char, read_char): Apply EVENT_HEAD without first · 88cb0656
      Jim Blandy authored
      	testing for EVENT_HAS_PARAMETERS; EVENT_HEAD works properly on
      	all sorts of events now.
      	(read_key_sequence): Use the new accessors to decide in which window
      	an event occurred.
      
      	* keyboard.c (Qevent_unmodified): Replaced by...
      	(Qevent_symbol_elements): New property.
      	(syms_of_keyboard): initialize and staticpro the latter, not the
      	former.
      
      	* keyboard.c (readable_events): This doesn't need to scan and
      	discard mouse release events anymore; it just uses
      	EVENT_QUEUES_EMPTY.
      	(kbd_buffer_get_event): No need to skip past mouse release events.
      
      	* keyboard.c (button_down_location): New variable, which
      	stores the location at which each button was pressed, so we
      	can build a complete drag event when the button is released.
      	(make_lispy_event): When a button is pressed, record its
      	location in button_down_location, and turn it into a `down'
      	event.  When a button is released, compare its release
      	location with its press location, and decide whether to call
      	it a `click' or `drag' event.
      	Change mouse movement events to be arranged like click events.
      	(format_modifiers): Note that the click modifier has no
      	written representation.
      	(modifier_names, modifer_symbols): New variables, used to
      	create the Qevent_symbol_elements property.
      	(modify_event_symbol): Change the format of the modified
      	symbol cache; there are too many modifier bits now to use a
      	vector indexed by a modifier mask.  Use an assoc-list instead.
      	Document the format of the cache.
      	Put the Qevent_symbol_elements property on each new symbol,
      	instead of a Qevent_unmodified property.
      	(symbols_of_keyboard): Put Qevent_symbol_elements properties on
      	the symbols specified in head_table, not Qevent_unmodifed properties.
      	Initialize and staticpro modifier_symbols, and staticpro the
      	window elements of button_down_location.
      88cb0656
  24. 29 Sep, 1992 2 commits
  25. 28 Sep, 1992 1 commit
    • Jim Blandy's avatar
      * keyboard.c (read_char): If we're returning an event from a · fce33686
      Jim Blandy authored
      	macro, set Vlast_event_frame to Qmacro, instead of leaving it set
      	to the frame of the previous real event.
      	(read_key_sequence): If Vlast_event_frame isn't a frame, don't
      	bother switching buffers.
      	(syms_of_keyboard): Doc fix for Vlast_event_frame.
      	(Vlast_event_frame): Doc fix.
      
      	* keyboard.c (format_modifiers, reorder_modifiers): Handle the new
      	modifier bits.
      fce33686
  26. 14 Sep, 1992 1 commit
  27. 13 Sep, 1992 1 commit
    • Jim Blandy's avatar
      * keyboard.c (kbd_buffer_get_event): When performing the · 2ce30ea2
      Jim Blandy authored
      	FRAME_FOCUS_FRAME redirection, don't modify the frame field of
      	the event; that fatally corrupts mouse click events.  Instead,
      	just perform the redirection on the value assigned to
      	Vlast_event_frame.
      
      	* keyboard.c (input_available_signal): Declare this to return
      	SIGTYPE.
      2ce30ea2
  28. 12 Sep, 1992 1 commit
  29. 11 Sep, 1992 1 commit
  30. 05 Sep, 1992 1 commit
    • Richard M. Stallman's avatar
      (last_nonmenu_event): New var. · 7d6de002
      Richard M. Stallman authored
      (syms_of_keyboard): New Lisp var.
      (read_key_sequence): Use that instead of prev_event.
      
      (read_char): Call read_char_menu_prompt here.
      Accept 4 new args to pass to it.  Include them in recursive call.
      Don't delay before starting echo if prev_event was a mouse event.
      Test for eof in batch mode now understands C is a Lisp_Object.
      (read_key_sequence): Don't call it here; always call read_char.
      Don't change last_event_buffer after a mouse menu input.
      (read_char_menu_prompt): Arg PROMPT deleted.
      Return nil if nothing to do.
      
      (read_key_sequence): Keep track of prev_event.
      Pass new proper args to read_char_menu_prompt.
      (read_char_menu_prompt): New arg prev_event.  Use Fx_popup_menu.
      Handle any number of keymaps, not just LOCAL and GLOBAL.
      Invert meaning of arg PROMPT.  Test of menu_prompting was backwards.
      
      (keymap_table): No longer static.
      7d6de002
  31. 29 Aug, 1992 1 commit
  32. 19 Aug, 1992 1 commit
    • Jim Blandy's avatar
      * keyboard.c (init_keyboard): Changed "#endif SIGIO" to · 8ea0a720
      Jim Blandy authored
      	"#endif /* SIGIO */"
      
      	* keyboard.c (Fexecute_mouse_event): dyked-out function deleted.
      	We're not going to use this mouse interface.
      	(Vmouse_window, Vmouse_event, Vmouse_event_function,
      	Vmouse_left_hook, Vmap_frame_hook, Vunmap_frame_hook,
      	Vmouse_motion_handler): Variables deleted; they were to be used by
      	Fexecute_mouse_event.
      	(syms_of_keyboard): Same.
      	(command_loop_1): Remove dyked-out code to support
      	Fexecute_mouse_event.
      	(read_char): Same.
      
      	* keyboard.c (Vlast_event_frame): Don't define this window if
      	MULTI_FRAME is not #defined.
      	(syms_of_keyboard): Same.
      	(kbd_buffer_store_event): Don't try to work with Vlast_event_frame
      	if MULTI_FRAME is not #defined.
      	(kbd_buffer_get_event): Same.
      
      	* keyboard.c (Fdiscard_input): Removed dyked-out code from when
      	unread_command_char's quiescent value was -1, not nil.
      8ea0a720
  33. 14 Aug, 1992 1 commit
    • Jim Blandy's avatar
      * keyboard.c (Fexecute_mouse_event): dyked-out function deleted. · 3e51c7b7
      Jim Blandy authored
      	We're not going to use this mouse interface.
      	(Vmouse_window, Vmouse_event, Vmouse_event_function,
      	Vmouse_left_hook, Vmap_frame_hook, Vunmap_frame_hook,
      	Vmouse_motion_handler): Variables deleted; they were to be used by
      	Fexecute_mouse_event.
      	(syms_of_keyboard): Same.
      	(command_loop_1): Remove dyked-out code to support
      	Fexecute_mouse_event.
      	(read_char): Same.
      
      	* keyboard.c (Vlast_event_frame): Don't define this window if
      	MULTI_FRAME is not #defined.
      	(syms_of_keyboard): Same.
      	(kbd_buffer_store_event): Don't try to work with Vlast_event_frame
      	if MULTI_FRAME is not #defined.
      	(kbd_buffer_get_event): Same.
      
      	* keyboard.c (Fdiscard_input): Removed dyked-out code from when
      	unread_command_char's quiescent value was -1, not nil.
      3e51c7b7
  34. 12 Aug, 1992 1 commit
    • Jim Blandy's avatar
      * keyboard.c (Fsuspend_emacs): Call change_frame_size with the · d5045cf9
      Jim Blandy authored
      	proper arguments - the height and width are the second and third
      	arguments, not the first and second.  Pass 0 for DELAY.
      
      	* keyboard.c (FRAME_IS_TERMCAP, FRAME_IS_X,
      	FRAME_HAS_MINIBUF): Renamed these to FRAME_TERMCAP_P,
      	FRAME_X_P, and FRAME_HAS_MINIBUF_P, for consistency with the
      	rest of the frame macros.
      d5045cf9