Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
605a3df6
Commit
605a3df6
authored
Oct 12, 2012
by
Eli Zaretskii
Browse files
Add comments about how non-GUI input works on MS-Windows.
parent
98222ee5
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
1 deletion
+35
-1
src/w32fns.c
src/w32fns.c
+3
-1
src/w32inevt.c
src/w32inevt.c
+32
-0
No files found.
src/w32fns.c
View file @
605a3df6
...
...
@@ -2333,7 +2333,9 @@ w32_name_of_message (UINT msg)
}
#endif /* EMACSDEBUG */
/* Here's an overview of how Emacs input works on MS-Windows.
/* Here's an overview of how Emacs input works in GUI sessions on
MS-Windows. (For description of non-GUI input, see the commentary
before w32_console_read_socket in w32inevt.c.)
System messages are read and processed by w32_msg_pump below. This
function runs in a separate thread. It handles a small number of
...
...
src/w32inevt.c
View file @
605a3df6
...
...
@@ -576,6 +576,38 @@ maybe_generate_resize_event (void)
0
,
0
,
0
);
}
/* Here's an overview of how Emacs input works in non-GUI sessions on
MS-Windows. (For description of the GUI input, see the commentary
before w32_msg_pump in w32fns.c.)
When Emacs is idle, it loops inside wait_reading_process_output,
calling pselect periodically to check whether any input is
available. On Windows, pselect is redirected to sys_select, which
uses MsgWaitForMultipleObjects to wait for input, either from the
keyboard or from any of the Emacs subprocesses. In addition,
MsgWaitForMultipleObjects wakes up when some Windows message is
posted to the input queue of the Emacs's main thread (which is the
thread in which sys_select runs).
When the Emacs's console window has focus, Windows sends input
events that originate from the keyboard or the mouse; these events
wake up MsgWaitForMultipleObjects, which reports that input is
available. Emacs then calls w32_console_read_socket, below, to
read the input. w32_console_read_socket uses
GetNumberOfConsoleInputEvents and ReadConsoleInput to peek at and
read the console input events.
One type of non-keyboard input event that gets reported as input
available is due to the Emacs's console window receiving focus.
When that happens, Emacs gets the FOCUS_EVENT event and sys_select
reports some input; however, w32_console_read_socket ignores such
events when called to read them.
Note that any other Windows message sent to the main thread will
also wake up MsgWaitForMultipleObjects. These messages get
immediately dispatched to their destinations by calling
drain_message_queue. */
int
w32_console_read_socket
(
struct
terminal
*
terminal
,
struct
input_event
*
hold_quit
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment