X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/334a398c80450ac43b2d553d6e408ba3fb32429d..a3b10252a6f892598638bec3c3ecb5537411c188:/src/keyboard.h diff --git a/src/keyboard.h b/src/keyboard.h index 1498880b84..625f40c94d 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -15,7 +15,8 @@ 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ /* Length of echobuf field in each KBOARD. */ @@ -66,13 +67,27 @@ struct kboard { KBOARD *next_kboard; + /* If non-nil, a keymap that overrides all others but applies only to + this KBOARD. Lisp code that uses this instead of calling read-char + can effectively wait for input in the any-kboard state, and hence + avoid blocking out the other KBOARDs. See universal-argument in + lisp/simple.el for an example. */ + Lisp_Object Voverriding_terminal_local_map; + /* Last command executed by the editor command loop, not counting 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; @@ -89,7 +104,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. */ @@ -101,6 +119,9 @@ struct kboard /* Alist of system-specific X windows key symbols. */ Lisp_Object Vsystem_key_alist; + /* Cache for modify_event_symbol. */ + Lisp_Object system_key_syms; + /* Minibufferless frames on this display use this frame's minibuffer. */ Lisp_Object Vdefault_minibuffer_frame; @@ -163,17 +184,14 @@ extern Lisp_Object Vlucid_menu_bar_dirty_flag; extern Lisp_Object Qrecompute_lucid_menubar, Qactivate_menubar_hook; /* Total number of times read_char has returned. */ -extern int num_input_chars; +extern int num_input_events; /* Total number of times read_char has returned, outside of macros. */ -extern int num_nonmacro_input_chars; +extern 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; @@ -185,15 +203,42 @@ extern Lisp_Object Vfunction_key_map; extern Lisp_Object this_command_keys; extern int this_command_key_count; -#ifdef MULTI_FRAME /* The frame in which the last input event occurred, or Qmacro if the last event came from a macro. We use this to determine when to generate switch-frame events. This may be cleared by functions like Fselect_frame, to make sure that a switch-frame event is generated by the next character. */ extern Lisp_Object internal_last_event_frame; -#endif - + +/* 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 initilize 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 initilize to t */ +/* Last property. */ +/* Not nil if item is enabled. */ +#define ITEM_PROPERTY_ENABLE 8 /* Macros for dealing with lispy events. */ @@ -203,23 +248,29 @@ 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))) /* 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_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_WINDOW_POSN(posn) (XCAR (XCDR (XCDR (posn)))) #define POSN_TIMESTAMP(posn) \ - (XCONS (XCONS (XCONS (XCONS (posn)->cdr)->cdr)->cdr)->car) + (XCAR (XCDR (XCDR (XCDR (posn))))) #define POSN_SCROLLBAR_PART(posn) (Fnth ((posn), make_number (4))) +/* 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)) + /* Some of the event heads. */ extern Lisp_Object Qswitch_frame; @@ -239,13 +290,54 @@ 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; -extern Lisp_Object get_keymap_1 (); -extern Lisp_Object Fkeymapp (); -extern Lisp_Object reorder_modifiers (); -extern Lisp_Object read_char (); +/* Forward declaration for prototypes. */ +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 *)); /* User-supplied string to translate input characters through. */ extern Lisp_Object Vkeyboard_translate_table; -extern Lisp_Object map_prompt (); + +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 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 set_poll_suppress_count P_ ((int)); +extern void gobble_input P_ ((int)); +extern int input_polling_used P_ ((void)); +extern void clear_input_pending P_ ((void)); +extern int requeued_events_pending_p P_ ((void)); +extern void bind_polling_period P_ ((int)); +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)) 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 *)); +#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 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));