comparison src/keyboard.h @ 11349:3b1d5cf74c93

(single_kboard): Renamed from kboard_locked. All refs renamed. (struct kboard): Renamed from struct KBOARD. Move flag fields to the end, and make them chars. Delete the `unused' field. (KBOARD, etc): Moved from lisp.h.
author Richard M. Stallman <rms@gnu.org>
date Mon, 10 Apr 1995 07:34:53 +0000
parents e309bb9ccdc0
children 12e8599b11c1
comparison
equal deleted inserted replaced
11348:e366abc2c753 11349:3b1d5cf74c93
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with GNU Emacs; see the file COPYING. If not, write to 17 along with GNU Emacs; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ 18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19 19
20 /* Length of echobuf field in each KBOARD. */
21
22 #define ECHOBUFSIZE 300
23
24 /* Each KBOARD represents one logical input stream from which Emacs gets input.
25 If we are using an ordinary terminal, it has one KBOARD object.
26 Usually each X display screen has its own KBOARD,
27 but when two of them are on the same X server,
28 we assume they share a keyboard and give them one KBOARD in common.
29
30 Some Lisp variables are per-kboard; they are stored in the KBOARD structure
31 and accessed indirectly via a Lisp_Misc_Kboard_Objfwd object.
32
33 So that definition of keyboard macros, and reading of prefix arguments,
34 can happen in parallel on various KBOARDs at once,
35 the state information for those activities is stored in the KBOARD.
36
37 Emacs has two states for reading input:
38
39 ** Any kboard. Emacs can accept input from any KBOARD,
40 and as soon as any of them provides a complete command, Emacs can run it.
41
42 ** Single kboard. Then Emacs is running a command for one KBOARD
43 and can only read input from that KBOARD.
44
45 All input, from all KBOARDs, goes together in a single event queue
46 at interrupt level. read_char sees the events sequentially,
47 but deals with them in accord with the current input state.
48
49 In the any-kboard state, read_key_sequence processes input from any KBOARD
50 immediately. When a new event comes in from a particular KBOARD,
51 read_key_sequence switches to that KBOARD. As a result,
52 as soon as a complete key arrives from some KBOARD or other,
53 Emacs starts executing that key's binding. It switches to the
54 single-kboard state for the execution of that command,
55 so that that command can get input only from its own KBOARD.
56
57 While in the single-kboard state, read_char can consider input only
58 from the current KBOARD. If events come from other KBOARDs, they
59 are put aside for later in the KBOARDs' kbd_queue lists.
60 The flag kbd_queue_has_data in a KBOARD is 1 if this has happened.
61 When Emacs goes back to the any-kboard state, it looks at all the KBOARDS
62 to find those; and it tries processing their input right away. */
63
64 typedef struct kboard KBOARD;
65 struct kboard
66 {
67 KBOARD *next_kboard;
68
69 /* The state of a prefix arg. */
70 Lisp_Object prefix_factor, prefix_value;
71 int prefix_sign, prefix_partial;
72
73 /* Unread events specific to this kboard. */
74 Lisp_Object kbd_queue;
75
76 /* Non-nil while a kbd macro is being defined. */
77 Lisp_Object defining_kbd_macro;
78
79 /* The start of storage for the current keyboard macro. */
80 Lisp_Object *kbd_macro_buffer;
81
82 /* Where to store the next keystroke of the macro. */
83 Lisp_Object *kbd_macro_ptr;
84
85 /* The finalized section of the macro starts at kbd_macro_buffer and
86 ends before this. This is not the same as kbd_macro_ptr, because
87 we advance this to kbd_macro_ptr when a key's command is complete.
88 This way, the keystrokes for "end-kbd-macro" are not included in the
89 macro. */
90 Lisp_Object *kbd_macro_end;
91
92 /* Allocated size of kbd_macro_buffer. */
93 int kbd_macro_bufsize;
94
95 /* Last anonymous kbd macro defined. */
96 Lisp_Object Vlast_kbd_macro;
97
98 /* Number of displays using this KBOARD. Normally 1, but can be
99 larger when you have multiple screens on a single X display. */
100 int reference_count;
101
102 /* Where to append more text to echobuf if we want to. */
103 char *echoptr;
104
105 /* The text we're echoing in the modeline - partial key sequences,
106 usually. '\0'-terminated. This really shouldn't have a fixed size. */
107 char echobuf[ECHOBUFSIZE];
108
109 /* This flag indicates that events were put into kbd_queue
110 while Emacs was running for some other KBOARD.
111 The flag means that, when Emacs goes into the any-kboard state again,
112 it should check this KBOARD to see if there is a complete command
113 waiting.
114
115 Note that the kbd_queue field can be non-nil even when
116 kbd_queue_has_data is 0. When we push back an incomplete
117 command, then this flag is 0, meaning we don't want to try
118 reading from this KBOARD again until more input arrives. */
119 char kbd_queue_has_data;
120
121 /* Nonzero means echo each character as typed. */
122 char immediate_echo;
123
124 /* If we have echoed a prompt string specified by the user,
125 this is its length. Otherwise this is -1. */
126 char echo_after_prompt;
127 };
128
129 #ifdef MULTI_KBOARD
130 /* Temporarily used before a frame has been opened, and for termcap frames */
131 extern KBOARD *initial_kboard;
132
133 /* In the single-kboard state, this is the kboard
134 from which input is accepted.
135
136 In the any-kboard state, this is the kboard from which we are
137 right now considering input. We can consider input from another
138 kboard, but doing so requires throwing to wrong_kboard_jmpbuf. */
139 extern KBOARD *current_kboard;
140
141 /* A list of all kboard objects, linked through next_kboard. */
142 extern KBOARD *all_kboards;
143
144 /* Nonzero in the single-kboard state, 0 in the any-kboard state. */
145 extern int single_kboard;
146 #else
147 extern KBOARD the_only_kboard;
148 #define current_kboard (&the_only_kboard)
149 #define all_kboards (&the_only_kboard)
150 #define single_kboard 1
151 #endif
152
20 /* Total number of times read_char has returned. */ 153 /* Total number of times read_char has returned. */
21 extern int num_input_chars; 154 extern int num_input_chars;
22 155
23 /* Total number of times read_char has returned, outside of macros. */ 156 /* Total number of times read_char has returned, outside of macros. */
24 extern int num_nonmacro_input_chars; 157 extern int num_nonmacro_input_chars;