X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/d748a3dbdc6351ca3fc773ef54d3ec86321c94ef..f9d64bb358607b8bb771c5d61eccaea2859d3e5f:/src/keyboard.h diff --git a/src/keyboard.h b/src/keyboard.h index 73aec908e2..08cb934d3f 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -20,8 +20,6 @@ Boston, MA 02111-1307, USA. */ /* Length of echobuf field in each KBOARD. */ -#define ECHOBUFSIZE 300 - /* Each KBOARD represents one logical input stream from which Emacs gets input. If we are using an ordinary terminal, it has one KBOARD object. Usually each X display screen has its own KBOARD, @@ -59,7 +57,7 @@ Boston, MA 02111-1307, USA. */ 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; @@ -78,9 +76,16 @@ struct kboard commands that set the prefix argument. */ Lisp_Object Vlast_command; + /* Normally same as last-command, but never modified by + other commands. */ + Lisp_Object Vreal_last_command; + /* The prefix argument for the next command, in raw form. */ Lisp_Object Vprefix_arg; + /* Saved prefix argument for the last command, in raw form. */ + Lisp_Object Vlast_prefix_arg; + /* Unread events specific to this kboard. */ Lisp_Object kbd_queue; @@ -97,7 +102,10 @@ struct kboard 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. */ @@ -119,12 +127,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. @@ -142,7 +147,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; }; @@ -177,14 +182,11 @@ 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; -/* Nonzero if polling_for_input is actually being used. */ -extern int polling_for_input; - /* Keymap mapping ASCII function key sequences onto their preferred forms. Initialized by the terminal-specific lisp files. */ extern Lisp_Object Vfunction_key_map; @@ -203,6 +205,36 @@ extern int this_command_key_count; generated by the next character. */ extern Lisp_Object internal_last_event_frame; +/* This holds a Lisp vector that holds the properties of a single + menu item while decoding it in parse_menu_item. + 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 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_MAP 3 +/* Nil, :radio or :toggle. */ +#define ITEM_PROPERTY_TYPE 4 +/* Nil or a string describing an equivalent key binding. */ +#define ITEM_PROPERTY_KEYEQ 5 +/* Not nil if a selected toggle box or radio button, otherwise nil. */ +#define ITEM_PROPERTY_SELECTED 6 +/* Place for a help string. Not yet used. */ +#define ITEM_PROPERTY_HELP 7 +/* Start of initialize to t */ +/* Last property. */ +/* Not nil if item is enabled. */ +#define ITEM_PROPERTY_ENABLE 8 + /* Macros for dealing with lispy events. */ /* True iff EVENT has data fields describing it (i.e. a mouse click). */ @@ -211,22 +243,32 @@ extern Lisp_Object internal_last_event_frame; /* Extract the head from an event. This works on composite and simple events. */ #define EVENT_HEAD(event) \ - (EVENT_HAS_PARAMETERS (event) ? XCONS (event)->car : (event)) + (EVENT_HAS_PARAMETERS (event) ? XCAR (event) : (event)) /* Extract the starting and ending positions from a composite event. */ -#define EVENT_START(event) (XCONS (XCONS (event)->cdr)->car) -#define EVENT_END(event) (XCONS (XCONS (XCONS (event)->cdr)->cdr)->car) +#define EVENT_START(event) (XCAR (XCDR (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) (XCONS (posn)->car) -#define POSN_BUFFER_POSN(posn) (XCONS (XCONS (posn)->cdr)->car) -#define POSN_WINDOW_POSN(posn) (XCONS (XCONS (XCONS (posn)->cdr)->cdr)->car) -#define POSN_TIMESTAMP(posn) \ - (XCONS (XCONS (XCONS (XCONS (posn)->cdr)->cdr)->cdr)->car) -#define POSN_SCROLLBAR_PART(posn) (Fnth ((posn), make_number (4))) +#define POSN_WINDOW(posn) (XCAR (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 (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))) + +/* 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; @@ -247,28 +289,28 @@ extern Lisp_Object Qscroll_bar_movement; (Fget ((event_head), Qevent_kind)) /* Symbols to use for non-text mouse positions. */ -extern Lisp_Object Qmode_line, Qvertical_line; +extern Lisp_Object Qmode_line, Qvertical_line, Qheader_line; /* 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 *)); /* 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)); @@ -282,9 +324,22 @@ extern void stuff_buffered_input P_ ((Lisp_Object)); 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 *)); +#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 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) */