/* Declarations useful when processing input.
- Copyright (C) 1985, 1986, 1987, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1985, 1986, 1987, 1993, 2002, 2003, 2004,
+ 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Emacs.
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.
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;
};
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 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_BUFFER_SET_POSN(posn,x) (XSETCAR (XCDR (posn), (x)))
+#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;
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 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 int help_char_p P_ ((Lisp_Object));
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,
Lisp_Object, int));
-extern int gen_help_event P_ ((struct input_event *, int, 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));
+
+/* arch-tag: 769cbade-1ba9-4950-b886-db265b061aa3
+ (do not change this comment) */