/* Declarations useful when processing input.
- Copyright (C) 1985, 1986, 1987, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1985, 1986, 1987, 1993, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
You should have received a copy of the GNU General Public License
along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
-/* Length of echobuf field in each KBOARD. */
+#include "systime.h" /* for EMACS_TIME */
-#define ECHOBUFSIZE 300
+/* Length of echobuf field in each KBOARD. */
/* Each KBOARD represents one logical input stream from which Emacs gets input.
If we are using an ordinary terminal, it has one KBOARD object.
from the current KBOARD. If events come from other KBOARDs, they
are put aside for later in the KBOARDs' kbd_queue lists.
The flag kbd_queue_has_data in a KBOARD is 1 if this has happened.
- When Emacs goes back to the any-kboard state, it looks at all the KBOARDS
+ When Emacs goes back to the any-kboard state, it looks at all the KBOARDs
to find those; and it tries processing their input right away. */
typedef struct kboard KBOARD;
other commands. */
Lisp_Object Vreal_last_command;
+ /* Last command that may be repeated by `repeat'. */
+ Lisp_Object Vlast_repeatable_command;
+
/* The prefix argument for the next command, in raw form. */
Lisp_Object Vprefix_arg;
ends before this. This is not the same as kbd_macro_ptr, because
we advance this to kbd_macro_ptr when a key's command is complete.
This way, the keystrokes for "end-kbd-macro" are not included in the
- macro. */
+ macro. This also allows us to throw away the events added to the
+ macro by the last command: all the events between kbd_macro_end and
+ kbd_macro_ptr belong to the last command; see
+ cancel-kbd-macro-events. */
Lisp_Object *kbd_macro_end;
/* Allocated size of kbd_macro_buffer. */
larger when you have multiple screens on a single X display. */
int reference_count;
- /* Where to append more text to echobuf if we want to. */
- char *echoptr;
-
/* The text we're echoing in the modeline - partial key sequences,
- usually. '\0'-terminated. This really shouldn't have a fixed size. */
- char echobuf[ECHOBUFSIZE];
+ usually. This is nil when not echoing. */
+ Lisp_Object echo_string;
/* This flag indicates that events were put into kbd_queue
while Emacs was running for some other KBOARD.
char immediate_echo;
/* If we have echoed a prompt string specified by the user,
- this is its length. Otherwise this is -1. */
+ this is its length in characters. Otherwise this is -1. */
char echo_after_prompt;
};
extern int num_input_events;
/* Total number of times read_char has returned, outside of macros. */
-extern int num_nonmacro_input_events;
+extern EMACS_INT num_nonmacro_input_events;
/* Nonzero means polling for input is temporarily suppressed. */
extern int poll_suppress_count;
Using a Lisp vector to hold this information while we decode it
takes care of protecting all the data from GC. */
extern Lisp_Object item_properties;
-
+
/* This describes the elements of item_properties.
The first element is not a property, it is a pointer to the item properties
that is saved for GC protection. */
#define ITEM_PROPERTY_ITEM 0
/* The item string. */
#define ITEM_PROPERTY_NAME 1
-/* Start of initilize to nil */
+/* Start of initialize to nil */
/* The binding: nil, a command or a keymap. */
#define ITEM_PROPERTY_DEF 2
/* The keymap if the binding is a keymap, otherwise nil. */
#define ITEM_PROPERTY_SELECTED 6
/* Place for a help string. Not yet used. */
#define ITEM_PROPERTY_HELP 7
-/* Start of initilize to t */
+/* Start of initialize to t */
/* Last property. */
/* Not nil if item is enabled. */
#define ITEM_PROPERTY_ENABLE 8
\f
/* Macros for dealing with lispy events. */
-/* True iff EVENT has data fields describing it (i.e. a mouse click). */
+/* True if EVENT has data fields describing it (i.e. a mouse click). */
#define EVENT_HAS_PARAMETERS(event) (CONSP (event))
/* Extract the head from an event.
#define EVENT_END(event) (XCAR (XCDR (XCDR (event))))
/* Extract the click count from a multi-click event. */
-#define EVENT_CLICK_COUNT(event) (Fnth ((event), make_number (2)))
+#define EVENT_CLICK_COUNT(event) (Fnth (make_number (2), (event)))
/* Extract the fields of a position. */
#define POSN_WINDOW(posn) (XCAR (posn))
-#define POSN_BUFFER_POSN(posn) (XCAR (XCDR (posn)))
+#define POSN_POSN(posn) (XCAR (XCDR (posn)))
+#define POSN_SET_POSN(posn,x) (XSETCAR (XCDR (posn), (x)))
#define POSN_WINDOW_POSN(posn) (XCAR (XCDR (XCDR (posn))))
-#define POSN_TIMESTAMP(posn) \
- (XCAR (XCDR (XCDR (XCDR (posn)))))
-#define POSN_SCROLLBAR_PART(posn) (Fnth ((posn), make_number (4)))
+#define POSN_TIMESTAMP(posn) (XCAR (XCDR (XCDR (XCDR (posn)))))
+#define POSN_SCROLLBAR_PART(posn) (Fnth (make_number (4), (posn)))
/* A cons (STRING . STRING-CHARPOS), or nil in mouse-click events.
It's a cons if the click is over a string in the mode line. */
-#define POSN_STRING(POSN) Fnth (make_number (4), (POSN))
+#define POSN_STRING(posn) (Fnth (make_number (4), (posn)))
+
+/* If POSN_STRING is nil, event refers to buffer location. */
+
+#define POSN_INBUFFER_P(posn) (NILP (POSN_STRING (posn)))
+#define POSN_BUFFER_POSN(posn) (Fnth (make_number (5), (posn)))
/* Some of the event heads. */
extern Lisp_Object Qswitch_frame;
/* Forward declaration for prototypes. */
struct input_event;
-extern Lisp_Object get_keymap_1 P_ ((Lisp_Object, int, int));
-EXFUN (Fkeymapp, 1);
extern Lisp_Object parse_modifiers P_ ((Lisp_Object));
extern Lisp_Object reorder_modifiers P_ ((Lisp_Object));
-extern Lisp_Object read_char P_ ((int, int, Lisp_Object *, Lisp_Object, int *));
+extern Lisp_Object read_char P_ ((int, int, Lisp_Object *, Lisp_Object,
+ int *, EMACS_TIME *));
/* User-supplied string to translate input characters through. */
extern Lisp_Object Vkeyboard_translate_table;
-extern Lisp_Object map_prompt P_ ((Lisp_Object));
-
-
extern int parse_menu_item P_ ((Lisp_Object, int, int));
extern void echo_now P_ ((void));
extern void init_kboard P_ ((KBOARD *));
extern void delete_kboard P_ ((KBOARD *));
extern void single_kboard_state P_ ((void));
+extern void not_single_kboard_state P_ ((KBOARD *));
extern void push_frame_kboard P_ ((struct frame *));
extern void pop_frame_kboard P_ ((void));
extern void record_asynch_buffer_change P_ ((void));
-extern void clear_waiting_for_input P_ ((void));
extern SIGTYPE input_poll_signal P_ ((int));
extern void start_polling P_ ((void));
extern void stop_polling P_ ((void));
extern void clear_waiting_for_input P_ ((void));
extern void swallow_events P_ ((int));
extern int help_char_p P_ ((Lisp_Object));
-extern void quit_throw_to_read_char P_ ((void));
+extern void quit_throw_to_read_char P_ ((void)) NO_RETURN;
extern void cmd_error_internal P_ ((Lisp_Object, char *));
-extern void timer_start_idle P_ ((void));
-extern void timer_stop_idle P_ ((void));
extern int lucid_event_type_list_p P_ ((Lisp_Object));
extern void kbd_buffer_store_event P_ ((struct input_event *));
+extern void kbd_buffer_store_event_hold P_ ((struct input_event *,
+ struct input_event *));
+extern void kbd_buffer_unget_event P_ ((struct input_event *));
#ifdef POLL_FOR_INPUT
extern void poll_for_input_1 P_ ((void));
#endif
-extern void show_help_echo P_ ((Lisp_Object, Lisp_Object, Lisp_Object, int));
-extern int gen_help_event P_ ((struct input_event *, Lisp_Object,
- Lisp_Object, Lisp_Object, int));
+extern void show_help_echo P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
+ Lisp_Object, int));
+extern void gen_help_event P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
+ Lisp_Object, int));
extern void kbd_buffer_store_help_event P_ ((Lisp_Object, Lisp_Object));
+extern Lisp_Object menu_item_eval_property P_ ((Lisp_Object));
+extern int kbd_buffer_events_waiting P_ ((int));
+extern void add_user_signals P_ ((int, const char *));
+
+/* arch-tag: 769cbade-1ba9-4950-b886-db265b061aa3
+ (do not change this comment) */