mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-10 13:40:36 -08:00
(keyboard_descriptor): New variable.
(wait_reading_process_input, init_keyboard): Use it. Also call change_input_fd. (change_keyboard_wait_descriptor): New function.
This commit is contained in:
parent
64e971c33b
commit
dd2281ae2a
1 changed files with 35 additions and 16 deletions
|
|
@ -73,6 +73,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
#include "commands.h"
|
||||
#include "frame.h"
|
||||
|
||||
Lisp_Object Qprocessp;
|
||||
Lisp_Object Qrun, Qstop, Qsignal, Qopen, Qclosed;
|
||||
/* Qexit is declared and initialized in eval.c. */
|
||||
|
||||
|
|
@ -150,7 +151,7 @@ char *sys_siglist[] =
|
|||
|
||||
/* t means use pty, nil means use a pipe,
|
||||
maybe other values to come. */
|
||||
Lisp_Object Vprocess_connection_type;
|
||||
static Lisp_Object Vprocess_connection_type;
|
||||
|
||||
#ifdef SKTPAIR
|
||||
#ifndef HAVE_SOCKETS
|
||||
|
|
@ -159,10 +160,10 @@ Lisp_Object Vprocess_connection_type;
|
|||
#endif /* SKTPAIR */
|
||||
|
||||
/* Number of events of change of status of a process. */
|
||||
int process_tick;
|
||||
static int process_tick;
|
||||
|
||||
/* Number of events for which the user or sentinel has been notified. */
|
||||
int update_tick;
|
||||
static int update_tick;
|
||||
|
||||
#ifdef FD_SET
|
||||
/* We could get this from param.h, but better not to depend on finding that.
|
||||
|
|
@ -187,19 +188,19 @@ int update_tick;
|
|||
|
||||
/* Mask of bits indicating the descriptors that we wait for input on */
|
||||
|
||||
SELECT_TYPE input_wait_mask;
|
||||
static SELECT_TYPE input_wait_mask;
|
||||
|
||||
int delete_exited_processes;
|
||||
/* Descriptor to use for keyboard input. */
|
||||
static int keyboard_descriptor;
|
||||
|
||||
/* Nonzero means delete a process right away if it exits. */
|
||||
static int delete_exited_processes;
|
||||
|
||||
/* Indexed by descriptor, gives the process (if any) for that descriptor */
|
||||
Lisp_Object chan_process[MAXDESC];
|
||||
static Lisp_Object chan_process[MAXDESC];
|
||||
|
||||
/* Alist of elements (NAME . PROCESS) */
|
||||
Lisp_Object Vprocess_alist;
|
||||
|
||||
Lisp_Object Qprocessp;
|
||||
|
||||
Lisp_Object get_process ();
|
||||
static Lisp_Object Vprocess_alist;
|
||||
|
||||
/* Buffered-ahead input char from process, indexed by channel.
|
||||
-1 means empty (no char is buffered).
|
||||
|
|
@ -207,7 +208,9 @@ Lisp_Object get_process ();
|
|||
output from the process is to read at least one char.
|
||||
Always -1 on systems that support FIONREAD. */
|
||||
|
||||
int proc_buffered_char[MAXDESC];
|
||||
static int proc_buffered_char[MAXDESC];
|
||||
|
||||
static Lisp_Object get_process ();
|
||||
|
||||
/* Compute the Lisp form of the process status, p->status, from
|
||||
the numeric status that was returned by `wait'. */
|
||||
|
|
@ -1753,7 +1756,7 @@ wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
|
|||
but that led to lossage handling selection_request events:
|
||||
within one, we would start to handle another. */
|
||||
if (! XINT (read_kbd))
|
||||
FD_CLR (0, &Available);
|
||||
FD_CLR (keyboard_descriptor, &Available);
|
||||
|
||||
/* If frame size has changed or the window is newly mapped,
|
||||
redisplay now, before we start to wait. There is a race
|
||||
|
|
@ -1816,7 +1819,8 @@ wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
|
|||
error("select error: %s", sys_errlist[xerrno]);
|
||||
}
|
||||
#if defined(sun) && !defined(USG5_4)
|
||||
else if (nfds > 0 && FD_ISSET (0, &Available) && interrupt_input)
|
||||
else if (nfds > 0 && FD_ISSET (keyboard_descriptor, &Available)
|
||||
&& interrupt_input)
|
||||
/* System sometimes fails to deliver SIGIO.
|
||||
|
||||
David J. Mackenzie says that Emacs doesn't compile under
|
||||
|
|
@ -1851,7 +1855,8 @@ wait_reading_process_input (time_limit, microsecs, read_kbd, do_display)
|
|||
In that case, there really is no input and no SIGIO,
|
||||
but select says there is input. */
|
||||
|
||||
if (XINT (read_kbd) && interrupt_input && (FD_ISSET (fileno (stdin), &Available)))
|
||||
if (XINT (read_kbd) && interrupt_input
|
||||
&& (FD_ISSET (keyboard_descriptor, &Available)))
|
||||
kill (0, SIGIO);
|
||||
#endif
|
||||
|
||||
|
|
@ -2930,7 +2935,10 @@ init_process ()
|
|||
#endif
|
||||
|
||||
FD_ZERO (&input_wait_mask);
|
||||
FD_SET (0, &input_wait_mask);
|
||||
|
||||
keyboard_descriptor = 0;
|
||||
FD_SET (keyboard_descriptor, &input_wait_mask);
|
||||
|
||||
Vprocess_alist = Qnil;
|
||||
for (i = 0; i < MAXDESC; i++)
|
||||
{
|
||||
|
|
@ -2939,6 +2947,17 @@ init_process ()
|
|||
}
|
||||
}
|
||||
|
||||
/* From now on, assume keyboard input comes from descriptor DESC. */
|
||||
|
||||
void
|
||||
change_keyboard_wait_descriptor (desc)
|
||||
int desc;
|
||||
{
|
||||
FD_CLR (keyboard_descriptor, &input_wait_mask);
|
||||
keyboard_descriptor = desc;
|
||||
FD_SET (keyboard_descriptor, &input_wait_mask);
|
||||
}
|
||||
|
||||
syms_of_process ()
|
||||
{
|
||||
#ifdef HAVE_SOCKETS
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue