(linenum→info "unix/slp.c:2238")

emacs/22.1/src/keyboard.h

    1: /* Declarations useful when processing input.
    2:    Copyright (C) 1985, 1986, 1987, 1993, 2001, 2002, 2003, 2004,
    3:                  2005, 2006, 2007  Free Software Foundation, Inc.
    4: 
    5: This file is part of GNU Emacs.
    6: 
    7: GNU Emacs is free software; you can redistribute it and/or modify
    8: it under the terms of the GNU General Public License as published by
    9: the Free Software Foundation; either version 2, or (at your option)
   10: any later version.
   11: 
   12: GNU Emacs is distributed in the hope that it will be useful,
   13: but WITHOUT ANY WARRANTY; without even the implied warranty of
   14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   15: GNU General Public License for more details.
   16: 
   17: You should have received a copy of the GNU General Public License
   18: along with GNU Emacs; see the file COPYING.  If not, write to
   19: the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
   20: Boston, MA 02110-1301, USA.  */
   21: 
   22: #include "systime.h"            /* for EMACS_TIME */
   23: 
   24: /* Length of echobuf field in each KBOARD.  */
   25: 
   26: /* Each KBOARD represents one logical input stream from which Emacs gets input.
   27:    If we are using an ordinary terminal, it has one KBOARD object.
   28:    Usually each X display screen has its own KBOARD,
   29:    but when two of them are on the same X server,
   30:    we assume they share a keyboard and give them one KBOARD in common.
   31: 
   32:    Some Lisp variables are per-kboard; they are stored in the KBOARD structure
   33:    and accessed indirectly via a Lisp_Misc_Kboard_Objfwd object.
   34: 
   35:    So that definition of keyboard macros, and reading of prefix arguments,
   36:    can happen in parallel on various KBOARDs at once,
   37:    the state information for those activities is stored in the KBOARD.
   38: 
   39:    Emacs has two states for reading input:
   40: 
   41:    ** Any kboard.  Emacs can accept input from any KBOARD,
   42:    and as soon as any of them provides a complete command, Emacs can run it.
   43: 
   44:    ** Single kboard.  Then Emacs is running a command for one KBOARD
   45:    and can only read input from that KBOARD.
   46: 
   47:    All input, from all KBOARDs, goes together in a single event queue
   48:    at interrupt level.  read_char sees the events sequentially,
   49:    but deals with them in accord with the current input state.
   50: 
   51:    In the any-kboard state, read_key_sequence processes input from any KBOARD
   52:    immediately.  When a new event comes in from a particular KBOARD,
   53:    read_key_sequence switches to that KBOARD.  As a result,
   54:    as soon as a complete key arrives from some KBOARD or other,
   55:    Emacs starts executing that key's binding.  It switches to the
   56:    single-kboard state for the execution of that command,
   57:    so that that command can get input only from its own KBOARD.
   58: 
   59:    While in the single-kboard state, read_char can consider input only
   60:    from the current KBOARD.  If events come from other KBOARDs, they
   61:    are put aside for later in the KBOARDs' kbd_queue lists.
   62:    The flag kbd_queue_has_data in a KBOARD is 1 if this has happened.
   63:    When Emacs goes back to the any-kboard state, it looks at all the KBOARDs
   64:    to find those; and it tries processing their input right away.  */
   65: 
   66: typedef struct kboard KBOARD;
   67: struct kboard
   68:   {
   69:     KBOARD *next_kboard;
   70: 
   71:     /* If non-nil, a keymap that overrides all others but applies only to
   72:        this KBOARD.  Lisp code that uses this instead of calling read-char
   73:        can effectively wait for input in the any-kboard state, and hence
   74:        avoid blocking out the other KBOARDs.  See universal-argument in
   75:        lisp/simple.el for an example.  */
   76:     Lisp_Object Voverriding_terminal_local_map;
   77: 
   78:     /* Last command executed by the editor command loop, not counting
   79:        commands that set the prefix argument.  */
   80:     Lisp_Object Vlast_command;
   81: 
   82:     /* Normally same as last-command, but never modified by
   83:        other commands.  */
   84:     Lisp_Object Vreal_last_command;
   85: 
   86:     /* The prefix argument for the next command, in raw form.  */
   87:     Lisp_Object Vprefix_arg;
   88: 
   89:     /* Saved prefix argument for the last command, in raw form.  */
   90:     Lisp_Object Vlast_prefix_arg;
   91: 
   92:     /* Unread events specific to this kboard.  */
   93:     Lisp_Object kbd_queue;
   94: 
   95:     /* Non-nil while a kbd macro is being defined.  */
   96:     Lisp_Object defining_kbd_macro;
   97: 
   98:     /* The start of storage for the current keyboard macro.  */
   99:     Lisp_Object *kbd_macro_buffer;
  100: 
  101:     /* Where to store the next keystroke of the macro.  */
  102:     Lisp_Object *kbd_macro_ptr;
  103: 
  104:     /* The finalized section of the macro starts at kbd_macro_buffer and
  105:        ends before this.  This is not the same as kbd_macro_ptr, because
  106:        we advance this to kbd_macro_ptr when a key's command is complete.
  107:        This way, the keystrokes for "end-kbd-macro" are not included in the
  108:        macro.  This also allows us to throw away the events added to the
  109:        macro by the last command: all the events between kbd_macro_end and
  110:        kbd_macro_ptr belong to the last command; see
  111:        cancel-kbd-macro-events.  */
  112:     Lisp_Object *kbd_macro_end;
  113: 
  114:     /* Allocated size of kbd_macro_buffer.  */
  115:     int kbd_macro_bufsize;
  116: 
  117:     /* Last anonymous kbd macro defined.  */
  118:     Lisp_Object Vlast_kbd_macro;
  119: 
  120:     /* Alist of system-specific X windows key symbols.  */
  121:     Lisp_Object Vsystem_key_alist;
  122: 
  123:     /* Cache for modify_event_symbol.  */
  124:     Lisp_Object system_key_syms;
  125: 
  126:     /* Minibufferless frames on this display use this frame's minibuffer.  */
  127:     Lisp_Object Vdefault_minibuffer_frame;
  128: 
  129:     /* Number of displays using this KBOARD.  Normally 1, but can be
  130:        larger when you have multiple screens on a single X display.  */
  131:     int reference_count;
  132: 
  133:     /* The text we're echoing in the modeline - partial key sequences,
  134:        usually.  This is nil when not echoing.  */
  135:     Lisp_Object echo_string;
  136: 
  137:     /* This flag indicates that events were put into kbd_queue
  138:        while Emacs was running for some other KBOARD.
  139:        The flag means that, when Emacs goes into the any-kboard state again,
  140:        it should check this KBOARD to see if there is a complete command
  141:        waiting.
  142: 
  143:        Note that the kbd_queue field can be non-nil even when
  144:        kbd_queue_has_data is 0.  When we push back an incomplete
  145:        command, then this flag is 0, meaning we don't want to try
  146:        reading from this KBOARD again until more input arrives.  */
  147:     char kbd_queue_has_data;
  148: 
  149:     /* Nonzero means echo each character as typed.  */
  150:     char immediate_echo;
  151: 
  152:     /* If we have echoed a prompt string specified by the user,
  153:        this is its length in characters.  Otherwise this is -1.  */
  154:     char echo_after_prompt;
  155:   };
  156: 
  157: #ifdef MULTI_KBOARD
  158: /* Temporarily used before a frame has been opened, and for termcap frames */
  159: extern KBOARD *initial_kboard;
  160: 
  161: /* In the single-kboard state, this is the kboard
  162:    from which input is accepted.
  163: 
  164:    In the any-kboard state, this is the kboard from which we are
  165:    right now considering input.  We can consider input from another
  166:    kboard, but doing so requires throwing to wrong_kboard_jmpbuf.  */
  167: extern KBOARD *current_kboard;
  168: 
  169: /* A list of all kboard objects, linked through next_kboard.  */
  170: extern KBOARD *all_kboards;
  171: 
  172: /* Nonzero in the single-kboard state, 0 in the any-kboard state.  */
  173: extern int single_kboard;
  174: #else
  175: extern KBOARD the_only_kboard;
  176: #define current_kboard (&the_only_kboard)
  177: #define all_kboards (&the_only_kboard)
  178: #define single_kboard 1
  179: #endif
  180: ^L
  181: extern Lisp_Object Vlucid_menu_bar_dirty_flag;
  182: extern Lisp_Object Qrecompute_lucid_menubar, Qactivate_menubar_hook;
  183: 
  184: /* Total number of times read_char has returned.  */
  185: extern int num_input_events;
  186: 
  187: /* Total number of times read_char has returned, outside of macros.  */
  188: extern EMACS_INT num_nonmacro_input_events;
  189: 
  190: /* Nonzero means polling for input is temporarily suppressed.  */
  191: extern int poll_suppress_count;
  192: 
  193: /* Keymap mapping ASCII function key sequences onto their preferred forms.
  194:    Initialized by the terminal-specific lisp files.  */
  195: extern Lisp_Object Vfunction_key_map;
  196: 
  197: /* Vector holding the key sequence that invoked the current command.
  198:    It is reused for each command, and it may be longer than the current
  199:    sequence; this_command_key_count indicates how many elements
  200:    actually mean something.  */
  201: extern Lisp_Object this_command_keys;
  202: extern int this_command_key_count;
  203: 
  204: /* The frame in which the last input event occurred, or Qmacro if the
  205:    last event came from a macro.  We use this to determine when to
  206:    generate switch-frame events.  This may be cleared by functions
  207:    like Fselect_frame, to make sure that a switch-frame event is
  208:    generated by the next character.  */
  209: extern Lisp_Object internal_last_event_frame;
  210: ^L
  211: /* This holds a Lisp vector that holds the properties of a single
  212:    menu item while decoding it in parse_menu_item.
  213:    Using a Lisp vector to hold this information while we decode it
  214:    takes care of protecting all the data from GC.  */
  215: extern Lisp_Object item_properties;
  216: 
  217: /* This describes the elements of item_properties.
  218:    The first element is not a property, it is a pointer to the item properties
  219:    that is saved for GC protection. */
  220: #define ITEM_PROPERTY_ITEM 0
  221: /* The item string.  */
  222: #define ITEM_PROPERTY_NAME 1
  223: /* Start of initialize to nil */
  224: /* The binding: nil, a command or a keymap.  */
  225: #define ITEM_PROPERTY_DEF 2
  226: /* The keymap if the binding is a keymap, otherwise nil.  */
  227: #define ITEM_PROPERTY_MAP 3
  228: /* Nil, :radio or :toggle.  */
  229: #define ITEM_PROPERTY_TYPE 4
  230: /* Nil or a string describing an equivalent key binding.  */
  231: #define ITEM_PROPERTY_KEYEQ 5
  232: /* Not nil if a selected toggle box or radio button, otherwise nil.  */
  233: #define ITEM_PROPERTY_SELECTED 6
  234: /* Place for a help string. Not yet used.  */
  235: #define ITEM_PROPERTY_HELP 7
  236: /* Start of initialize to t */
  237: /* Last property. */
  238: /* Not nil if item is enabled.  */
  239: #define ITEM_PROPERTY_ENABLE 8
  240: ^L
  241: /* Macros for dealing with lispy events.  */
  242: 
  243: /* True iff EVENT has data fields describing it (i.e. a mouse click).  */
  244: #define EVENT_HAS_PARAMETERS(event) (CONSP (event))
  245: 
  246: /* Extract the head from an event.
  247:    This works on composite and simple events.  */
  248: #define EVENT_HEAD(event) \
  249:   (EVENT_HAS_PARAMETERS (event) ? XCAR (event) : (event))
  250: 
  251: /* Extract the starting and ending positions from a composite event.  */
  252: #define EVENT_START(event) (XCAR (XCDR (event)))
  253: #define EVENT_END(event) (XCAR (XCDR (XCDR (event))))
  254: 
  255: /* Extract the click count from a multi-click event.  */
  256: #define EVENT_CLICK_COUNT(event) (Fnth (make_number (2), (event)))
  257: 
  258: /* Extract the fields of a position.  */
  259: #define POSN_WINDOW(posn) (XCAR (posn))
  260: #define POSN_POSN(posn) (XCAR (XCDR (posn)))
  261: #define POSN_SET_POSN(posn,x) (XSETCAR (XCDR (posn), (x)))
  262: #define POSN_WINDOW_POSN(posn) (XCAR (XCDR (XCDR (posn))))
  263: #define POSN_TIMESTAMP(posn) (XCAR (XCDR (XCDR (XCDR (posn)))))
  264: #define POSN_SCROLLBAR_PART(posn)       (Fnth (make_number (4), (posn)))
  265: 
  266: /* A cons (STRING . STRING-CHARPOS), or nil in mouse-click events.
  267:    It's a cons if the click is over a string in the mode line.  */
  268: 
  269: #define POSN_STRING(posn) (Fnth (make_number (4), (posn)))
  270: 
  271: /* If POSN_STRING is nil, event refers to buffer location.  */
  272: 
  273: #define POSN_INBUFFER_P(posn) (NILP (POSN_STRING (posn)))
  274: #define POSN_BUFFER_POSN(posn) (Fnth (make_number (5), (posn)))
  275: 
  276: /* Some of the event heads.  */
  277: extern Lisp_Object Qswitch_frame;
  278: 
  279: /* Properties on event heads.  */
  280: extern Lisp_Object Qevent_kind, Qevent_symbol_elements;
  281: 
  282: /* Getting an unmodified version of an event head.  */
  283: #define EVENT_HEAD_UNMODIFIED(event_head) \
  284:   (Fcar (Fget ((event_head), Qevent_symbol_elements)))
  285: 
  286: /* The values of Qevent_kind properties.  */
  287: extern Lisp_Object Qfunction_key, Qmouse_click, Qmouse_movement;
  288: extern Lisp_Object Qscroll_bar_movement;
  289: 
  290: /* Getting the kind of an event head.  */
  291: #define EVENT_HEAD_KIND(event_head) \
  292:   (Fget ((event_head), Qevent_kind))
  293: 
  294: /* Symbols to use for non-text mouse positions.  */
  295: extern Lisp_Object Qmode_line, Qvertical_line, Qheader_line;
  296: 
  297: /* Forward declaration for prototypes.  */
  298: struct input_event;
  299: 
  300: extern Lisp_Object parse_modifiers P_ ((Lisp_Object));
  301: extern Lisp_Object reorder_modifiers P_ ((Lisp_Object));
  302: extern Lisp_Object read_char P_ ((int, int, Lisp_Object *, Lisp_Object,
  303:                                   int *, EMACS_TIME *));
  304: /* User-supplied string to translate input characters through.  */
  305: extern Lisp_Object Vkeyboard_translate_table;
  306: 
  307: extern int parse_menu_item P_ ((Lisp_Object, int, int));
  308: 
  309: extern void echo_now P_ ((void));
  310: extern void init_kboard P_ ((KBOARD *));
  311: extern void delete_kboard P_ ((KBOARD *));
  312: extern void single_kboard_state P_ ((void));
  313: extern void not_single_kboard_state P_ ((KBOARD *));
  314: extern void push_frame_kboard P_ ((struct frame *));
  315: extern void pop_frame_kboard P_ ((void));
  316: extern void record_asynch_buffer_change P_ ((void));
  317: extern SIGTYPE input_poll_signal P_ ((int));
  318: extern void start_polling P_ ((void));
  319: extern void stop_polling P_ ((void));
  320: extern void set_poll_suppress_count P_ ((int));
  321: extern void gobble_input P_ ((int));
  322: extern int input_polling_used P_ ((void));
  323: extern void clear_input_pending P_ ((void));
  324: extern int requeued_events_pending_p P_ ((void));
  325: extern void bind_polling_period P_ ((int));
  326: extern void stuff_buffered_input P_ ((Lisp_Object));
  327: extern void clear_waiting_for_input P_ ((void));
  328: extern void swallow_events P_ ((int));
  329: extern int help_char_p P_ ((Lisp_Object));
  330: extern void quit_throw_to_read_char P_ ((void)) NO_RETURN;
  331: extern void cmd_error_internal P_ ((Lisp_Object, char *));
  332: extern int lucid_event_type_list_p P_ ((Lisp_Object));
  333: extern void kbd_buffer_store_event P_ ((struct input_event *));
  334: extern void kbd_buffer_store_event_hold P_ ((struct input_event *,
  335:                                              struct input_event *));
  336: extern void kbd_buffer_unget_event P_ ((struct input_event *));
  337: #ifdef POLL_FOR_INPUT
  338: extern void poll_for_input_1 P_ ((void));
  339: #endif
  340: extern void show_help_echo P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
  341:                                 Lisp_Object, int));
  342: extern void gen_help_event P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
  343:                                Lisp_Object, int));
  344: extern void kbd_buffer_store_help_event P_ ((Lisp_Object, Lisp_Object));
  345: extern Lisp_Object menu_item_eval_property P_ ((Lisp_Object));
  346: extern int  kbd_buffer_events_waiting P_ ((int));
  347: extern void add_user_signals P_ ((int, const char *));
  348: 
  349: /* arch-tag: 769cbade-1ba9-4950-b886-db265b061aa3
  350:    (do not change this comment) */
Syntax (Markdown)