X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/df631feb82b05fd52cf18894b0b35d3ebad8e9d7..1398509c21ea8ab4ec8be1a445355c0b281dd04e:/src/keyboard.h diff --git a/src/keyboard.h b/src/keyboard.h index d9cc41f6ba..ea147cad48 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -1,11 +1,12 @@ /* 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 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, @@ -15,12 +16,12 @@ GNU General Public License for more details. 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. @@ -82,6 +83,9 @@ struct 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; @@ -129,12 +133,9 @@ struct kboard 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. @@ -152,7 +153,7 @@ struct 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; }; @@ -187,7 +188,7 @@ extern Lisp_Object Qrecompute_lucid_menubar, Qactivate_menubar_hook; 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; @@ -215,7 +216,7 @@ extern Lisp_Object internal_last_event_frame; 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. */ @@ -242,7 +243,7 @@ extern Lisp_Object item_properties; /* 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. @@ -255,21 +256,25 @@ extern Lisp_Object item_properties; #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; @@ -297,17 +302,18 @@ struct input_event; 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)); @@ -326,17 +332,22 @@ extern void swallow_events P_ ((int)); 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)); +extern void add_user_signals P_ ((int, const char *)); + +/* arch-tag: 769cbade-1ba9-4950-b886-db265b061aa3 + (do not change this comment) */