aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaiki Ueno2015-03-23 12:40:29 +0900
committerDaiki Ueno2015-03-23 16:27:29 +0900
commit47e0e319329a1ecf9da4fa1afd2b9f2738fada67 (patch)
tree6260b8887776e71e448a62a707d6d15b5e3a1fcc
parent165bea78008ec7545698f2e893821b4090f20c79 (diff)
downloademacs-47e0e319329a1ecf9da4fa1afd2b9f2738fada67.tar.gz
emacs-47e0e319329a1ecf9da4fa1afd2b9f2738fada67.zip
Generalize start-process with keyword args
* src/process.c (Fmake_process): New function. (create_process, create_pty): Check p->pty_flag instead of Vprocess_connection_type. (syms_of_process): Register QCcommand, QCconnection_type, Qpty, Qpipe, and Smake_process. Unregister Sstart_process. * lisp/subr.el (start-process): New function, ported from the C implementation. * doc/lispref/processes.texi (Asynchronous Processes): Mention `make-process'. * etc/NEWS: Mention `make-process'.
-rw-r--r--doc/lispref/ChangeLog4
-rw-r--r--doc/lispref/processes.texi55
-rw-r--r--etc/ChangeLog4
-rw-r--r--etc/NEWS5
-rw-r--r--lisp/ChangeLog5
-rw-r--r--lisp/subr.el24
-rw-r--r--src/ChangeLog8
-rw-r--r--src/process.c175
8 files changed, 237 insertions, 43 deletions
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index 3644d40fabf..ff1f8148e81 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,3 +1,7 @@
12015-03-23 Daiki Ueno <ueno@gnu.org>
2
3 * processes.texi (Asynchronous Processes): Mention `make-process'.
4
12015-03-18 Eli Zaretskii <eliz@gnu.org> 52015-03-18 Eli Zaretskii <eliz@gnu.org>
2 6
3 * minibuf.texi (Basic Completion): Fix a typo. (Bug#20108) 7 * minibuf.texi (Basic Completion): Fix a typo. (Bug#20108)
diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi
index 177cd684f5c..3e9cc50de52 100644
--- a/doc/lispref/processes.texi
+++ b/doc/lispref/processes.texi
@@ -692,6 +692,61 @@ use the function @code{process-tty-name} (@pxref{Process
692Information}). 692Information}).
693@end defvar 693@end defvar
694 694
695@defun make-process &rest args
696This function is like @code{start-process}, but takes keyword arguments.
697
698The arguments @var{args} are a list of keyword/argument pairs.
699Omitting a keyword is always equivalent to specifying it with value
700@code{nil}. Here are the meaningful keywords:
701
702@table @asis
703@item :name @var{name}
704Use the string @var{name} as the process name. It is modified if
705necessary to make it unique.
706
707@item :buffer @var{buffer}
708Use @var{buffer} as the process buffer.
709
710@item :command @var{command}
711Use @var{command} as the command line of the process. @var{command}
712is a list starting with the program's executable file name, followed
713by strings to give to program as arguments.
714
715@item :coding @var{coding}
716If @var{coding} is a symbol, it specifies the coding system to be
717used for both reading and writing of data from and to the
718connection. If @var{coding} is a cons cell
719@w{@code{(@var{decoding} . @var{encoding})}}, then @var{decoding}
720will be used for reading and @var{encoding} for writing.
721
722If @var{coding} is @code{nil}, the default rules for finding the
723coding system will apply. @xref{Default Coding Systems}.
724
725@item :connection-type @var{TYPE}
726Initialize the type of device used to communicate with the subprocess.
727Possible values are @code{pty} to use a pty, @code{pipe} to use a
728pipe, or @code{nil} to use the default derived from the value of
729the @code{process-connection-type} variable.
730
731@item :noquery @var{query-flag}
732Initialize the process query flag to @var{query-flag}.
733@xref{Query Before Exit}.
734
735@item :stop @var{stopped}
736If @var{stopped} is non-@code{nil}, start the process in the
737``stopped'' state.
738
739@item :filter @var{filter}
740Initialize the process filter to @var{filter}.
741
742@item :sentinel @var{sentinel}
743Initialize the process sentinel to @var{sentinel}.
744@end table
745
746The original argument list, modified with the actual connection
747information, is available via the @code{process-contact} function.
748@end defun
749
695@node Deleting Processes 750@node Deleting Processes
696@section Deleting Processes 751@section Deleting Processes
697@cindex deleting processes 752@cindex deleting processes
diff --git a/etc/ChangeLog b/etc/ChangeLog
index c94e12296ed..e146f786f6f 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,7 @@
12015-03-23 Daiki Ueno <ueno@gnu.org>
2
3 * NEWS: Mention `make-process'.
4
12015-03-21 Titus von der Malsburg <malsburg@posteo.de> 52015-03-21 Titus von der Malsburg <malsburg@posteo.de>
2 6
3 * NEWS: Mention `default-font-width', `window-font-height', 7 * NEWS: Mention `default-font-width', `window-font-height',
diff --git a/etc/NEWS b/etc/NEWS
index 7cdb24b402e..3b848dc6539 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -651,6 +651,11 @@ word syntax, use `\sw' instead.
651 651
652* Lisp Changes in Emacs 25.1 652* Lisp Changes in Emacs 25.1
653 653
654** New function `make-process' provides an alternative interface to
655`start-process'. It allows programs to set process parameters such as
656process filter, sentinel, etc., through keyword arguments (similar to
657`make-network-process').
658
654** `read-buffer' takes a new `predicate' argument. 659** `read-buffer' takes a new `predicate' argument.
655 660
656** Emacs Lisp now supports generators. 661** Emacs Lisp now supports generators.
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 596b6e2ccb5..8f1534a3284 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
12015-03-23 Daiki Ueno <ueno@gnu.org>
2
3 * subr.el (start-process): New function, ported from the C
4 implementation.
5
12015-03-23 Daniel Colascione <dancol@dancol.org> 62015-03-23 Daniel Colascione <dancol@dancol.org>
2 7
3 Automatically adjust process window sizes. 8 Automatically adjust process window sizes.
diff --git a/lisp/subr.el b/lisp/subr.el
index deadca6efa0..163a1c419d4 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -1901,6 +1901,30 @@ and the file name is displayed in the echo area."
1901 1901
1902;;;; Process stuff. 1902;;;; Process stuff.
1903 1903
1904(defun start-process (name buffer program &rest program-args)
1905 "Start a program in a subprocess. Return the process object for it.
1906NAME is name for process. It is modified if necessary to make it unique.
1907BUFFER is the buffer (or buffer name) to associate with the process.
1908
1909Process output (both standard output and standard error streams) goes
1910at end of BUFFER, unless you specify an output stream or filter
1911function to handle the output. BUFFER may also be nil, meaning that
1912this process is not associated with any buffer.
1913
1914PROGRAM is the program file name. It is searched for in `exec-path'
1915\(which see). If nil, just associate a pty with the buffer. Remaining
1916arguments are strings to give program as arguments.
1917
1918If you want to separate standard output from standard error, invoke
1919the command through a shell and redirect one of them using the shell
1920syntax."
1921 (unless (fboundp 'make-process)
1922 (error "Emacs was compiled without subprocess support"))
1923 (apply #'make-process
1924 (append (list :name name :buffer buffer)
1925 (if program
1926 (list :command (cons program program-args))))))
1927
1904(defun process-lines (program &rest args) 1928(defun process-lines (program &rest args)
1905 "Execute PROGRAM with ARGS, returning its output as a list of lines. 1929 "Execute PROGRAM with ARGS, returning its output as a list of lines.
1906Signal an error if the program returns with a non-zero exit status." 1930Signal an error if the program returns with a non-zero exit status."
diff --git a/src/ChangeLog b/src/ChangeLog
index 79feb611f3d..6c7955a2fc0 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,11 @@
12015-03-23 Daiki Ueno <ueno@gnu.org>
2
3 * process.c (Fmake_process): New function.
4 (create_process, create_pty): Check p->pty_flag instead of
5 Vprocess_connection_type.
6 (syms_of_process): Register QCcommand, QCconnection_type, Qpty,
7 Qpipe, and Smake_process. Unregister Sstart_process.
8
12015-03-22 Jan Djärv <jan.h.d@swipnet.se> 92015-03-22 Jan Djärv <jan.h.d@swipnet.se>
2 10
3 * fontset.c (fontset_pattern_regexp): Replace + 1 with + 3 for 11 * fontset.c (fontset_pattern_regexp): Replace + 1 with + 3 for
diff --git a/src/process.c b/src/process.c
index 1d935ba8a3e..5abe7489d0d 100644
--- a/src/process.c
+++ b/src/process.c
@@ -1355,34 +1355,63 @@ DEFUN ("process-list", Fprocess_list, Sprocess_list, 0, 0, 0,
1355 1355
1356static void start_process_unwind (Lisp_Object proc); 1356static void start_process_unwind (Lisp_Object proc);
1357 1357
1358DEFUN ("start-process", Fstart_process, Sstart_process, 3, MANY, 0, 1358DEFUN ("make-process", Fmake_process, Smake_process, 0, MANY, 0,
1359 doc: /* Start a program in a subprocess. Return the process object for it. 1359 doc: /* Start a program in a subprocess. Return the process object for it.
1360NAME is name for process. It is modified if necessary to make it unique.
1361BUFFER is the buffer (or buffer name) to associate with the process.
1362 1360
1363Process output (both standard output and standard error streams) goes 1361This is similar to `start-process', but arguments are specified as
1364at end of BUFFER, unless you specify an output stream or filter 1362keyword/argument pairs. The following arguments are defined:
1365function to handle the output. BUFFER may also be nil, meaning that
1366this process is not associated with any buffer.
1367 1363
1368PROGRAM is the program file name. It is searched for in `exec-path' 1364:name NAME -- NAME is name for process. It is modified if necessary
1369(which see). If nil, just associate a pty with the buffer. Remaining 1365to make it unique.
1370arguments are strings to give program as arguments. 1366
1367:buffer BUFFER -- BUFFER is the buffer (or buffer-name) to associate
1368with the process. Process output goes at end of that buffer, unless
1369you specify an output stream or filter function to handle the output.
1370BUFFER may be also nil, meaning that this process is not associated
1371with any buffer.
1371 1372
1372If you want to separate standard output from standard error, invoke 1373:command COMMAND -- COMMAND is a list starting with the program file
1373the command through a shell and redirect one of them using the shell 1374name, followed by strings to give to the program as arguments.
1374syntax. 1375
1376:coding CODING -- If CODING is a symbol, it specifies the coding
1377system used for both reading and writing for this process. If CODING
1378is a cons (DECODING . ENCODING), DECODING is used for reading, and
1379ENCODING is used for writing.
1380
1381:noquery BOOL -- When exiting Emacs, query the user if BOOL is nil and
1382the process is running. If BOOL is not given, query before exiting.
1375 1383
1376usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */) 1384:stop BOOL -- Start process in the `stopped' state if BOOL non-nil.
1385In the stopped state, a process does not accept incoming data, but you
1386can send outgoing data. The stopped state is cleared by
1387`continue-process' and set by `stop-process'.
1388
1389:connection-type TYPE -- TYPE is control type of device used to
1390communicate with subprocesses. Values are `pipe' to use a pipe, `pty'
1391to use a pty, or nil to use the default specified through
1392`process-connection-type'.
1393
1394:filter FILTER -- Install FILTER as the process filter.
1395
1396:sentinel SENTINEL -- Install SENTINEL as the process sentinel.
1397
1398usage: (make-process &rest ARGS) */)
1377 (ptrdiff_t nargs, Lisp_Object *args) 1399 (ptrdiff_t nargs, Lisp_Object *args)
1378{ 1400{
1379 Lisp_Object buffer, name, program, proc, current_dir, tem; 1401 Lisp_Object buffer, name, command, program, proc, contact, current_dir, tem;
1380 unsigned char **new_argv;
1381 ptrdiff_t i; 1402 ptrdiff_t i;
1382 ptrdiff_t count = SPECPDL_INDEX (); 1403 ptrdiff_t count = SPECPDL_INDEX ();
1404 struct gcpro gcpro1;
1383 USE_SAFE_ALLOCA; 1405 USE_SAFE_ALLOCA;
1384 1406
1385 buffer = args[1]; 1407 if (nargs == 0)
1408 return Qnil;
1409
1410 /* Save arguments for process-contact and clone-process. */
1411 contact = Flist (nargs, args);
1412 GCPRO1 (contact);
1413
1414 buffer = Fplist_get (contact, QCbuffer);
1386 if (!NILP (buffer)) 1415 if (!NILP (buffer))
1387 buffer = Fget_buffer_create (buffer); 1416 buffer = Fget_buffer_create (buffer);
1388 1417
@@ -1402,10 +1431,14 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1402 UNGCPRO; 1431 UNGCPRO;
1403 } 1432 }
1404 1433
1405 name = args[0]; 1434 name = Fplist_get (contact, QCname);
1406 CHECK_STRING (name); 1435 CHECK_STRING (name);
1407 1436
1408 program = args[2]; 1437 command = Fplist_get (contact, QCcommand);
1438 if (CONSP (command))
1439 program = XCAR (command);
1440 else
1441 program = Qnil;
1409 1442
1410 if (!NILP (program)) 1443 if (!NILP (program))
1411 CHECK_STRING (program); 1444 CHECK_STRING (program);
@@ -1423,7 +1456,22 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1423 pset_buffer (XPROCESS (proc), buffer); 1456 pset_buffer (XPROCESS (proc), buffer);
1424 pset_sentinel (XPROCESS (proc), Qinternal_default_process_sentinel); 1457 pset_sentinel (XPROCESS (proc), Qinternal_default_process_sentinel);
1425 pset_filter (XPROCESS (proc), Qinternal_default_process_filter); 1458 pset_filter (XPROCESS (proc), Qinternal_default_process_filter);
1426 pset_command (XPROCESS (proc), Flist (nargs - 2, args + 2)); 1459 pset_command (XPROCESS (proc), Fcopy_sequence (command));
1460
1461 if (tem = Fplist_get (contact, QCnoquery), !NILP (tem))
1462 XPROCESS (proc)->kill_without_query = 1;
1463 if (tem = Fplist_get (contact, QCstop), !NILP (tem))
1464 pset_command (XPROCESS (proc), Qt);
1465
1466 tem = Fplist_get (contact, QCconnection_type);
1467 if (EQ (tem, Qpty))
1468 XPROCESS (proc)->pty_flag = true;
1469 else if (EQ (tem, Qpipe))
1470 XPROCESS (proc)->pty_flag = false;
1471 else if (NILP (tem))
1472 XPROCESS (proc)->pty_flag = !NILP (Vprocess_connection_type);
1473 else
1474 report_file_error ("Unknown connection type", tem);
1427 1475
1428#ifdef HAVE_GNUTLS 1476#ifdef HAVE_GNUTLS
1429 /* AKA GNUTLS_INITSTAGE(proc). */ 1477 /* AKA GNUTLS_INITSTAGE(proc). */
@@ -1453,15 +1501,29 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1453 Lisp_Object val, *args2; 1501 Lisp_Object val, *args2;
1454 struct gcpro gcpro1, gcpro2; 1502 struct gcpro gcpro1, gcpro2;
1455 1503
1456 val = Vcoding_system_for_read; 1504 tem = Fplist_get (contact, QCcoding);
1505 if (!NILP (tem))
1506 {
1507 val = tem;
1508 if (CONSP (val))
1509 val = XCAR (val);
1510 }
1511 else
1512 val = Vcoding_system_for_read;
1457 if (NILP (val)) 1513 if (NILP (val))
1458 { 1514 {
1459 SAFE_ALLOCA_LISP (args2, nargs + 1); 1515 ptrdiff_t nargs2 = 3 + XINT (Flength (command));
1460 args2[0] = Qstart_process; 1516 Lisp_Object tem2;
1461 for (i = 0; i < nargs; i++) args2[i + 1] = args[i]; 1517 SAFE_ALLOCA_LISP (args2, nargs2);
1518 i = 0;
1519 args2[i++] = Qstart_process;
1520 args2[i++] = name;
1521 args2[i++] = buffer;
1522 for (tem2 = command; CONSP (tem2); tem2 = XCDR (tem2))
1523 args2[i++] = XCAR (tem2);
1462 GCPRO2 (proc, current_dir); 1524 GCPRO2 (proc, current_dir);
1463 if (!NILP (program)) 1525 if (!NILP (program))
1464 coding_systems = Ffind_operation_coding_system (nargs + 1, args2); 1526 coding_systems = Ffind_operation_coding_system (nargs2, args2);
1465 UNGCPRO; 1527 UNGCPRO;
1466 if (CONSP (coding_systems)) 1528 if (CONSP (coding_systems))
1467 val = XCAR (coding_systems); 1529 val = XCAR (coding_systems);
@@ -1470,17 +1532,30 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1470 } 1532 }
1471 pset_decode_coding_system (XPROCESS (proc), val); 1533 pset_decode_coding_system (XPROCESS (proc), val);
1472 1534
1473 val = Vcoding_system_for_write; 1535 if (!NILP (tem))
1536 {
1537 val = tem;
1538 if (CONSP (val))
1539 val = XCDR (val);
1540 }
1541 else
1542 val = Vcoding_system_for_write;
1474 if (NILP (val)) 1543 if (NILP (val))
1475 { 1544 {
1476 if (EQ (coding_systems, Qt)) 1545 if (EQ (coding_systems, Qt))
1477 { 1546 {
1478 SAFE_ALLOCA_LISP (args2, nargs + 1); 1547 ptrdiff_t nargs2 = 3 + XINT (Flength (command));
1479 args2[0] = Qstart_process; 1548 Lisp_Object tem2;
1480 for (i = 0; i < nargs; i++) args2[i + 1] = args[i]; 1549 SAFE_ALLOCA_LISP (args2, nargs2);
1550 i = 0;
1551 args2[i++] = Qstart_process;
1552 args2[i++] = name;
1553 args2[i++] = buffer;
1554 for (tem2 = command; CONSP (tem2); tem2 = XCDR (tem2))
1555 args2[i++] = XCAR (tem2);
1481 GCPRO2 (proc, current_dir); 1556 GCPRO2 (proc, current_dir);
1482 if (!NILP (program)) 1557 if (!NILP (program))
1483 coding_systems = Ffind_operation_coding_system (nargs + 1, args2); 1558 coding_systems = Ffind_operation_coding_system (nargs2, args2);
1484 UNGCPRO; 1559 UNGCPRO;
1485 } 1560 }
1486 if (CONSP (coding_systems)) 1561 if (CONSP (coding_systems))
@@ -1506,16 +1581,20 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1506 1581
1507 if (!NILP (program)) 1582 if (!NILP (program))
1508 { 1583 {
1584 Lisp_Object program_args = XCDR (command);
1585 unsigned char **new_argv;
1586 ptrdiff_t new_argc;
1587
1509 /* If program file name is not absolute, search our path for it. 1588 /* If program file name is not absolute, search our path for it.
1510 Put the name we will really use in TEM. */ 1589 Put the name we will really use in TEM. */
1511 if (!IS_DIRECTORY_SEP (SREF (program, 0)) 1590 if (!IS_DIRECTORY_SEP (SREF (program, 0))
1512 && !(SCHARS (program) > 1 1591 && !(SCHARS (program) > 1
1513 && IS_DEVICE_SEP (SREF (program, 1)))) 1592 && IS_DEVICE_SEP (SREF (program, 1))))
1514 { 1593 {
1515 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; 1594 struct gcpro gcpro1, gcpro2;
1516 1595
1517 tem = Qnil; 1596 tem = Qnil;
1518 GCPRO4 (name, program, buffer, current_dir); 1597 GCPRO2 (buffer, current_dir);
1519 openp (Vexec_path, program, Vexec_suffixes, &tem, 1598 openp (Vexec_path, program, Vexec_suffixes, &tem,
1520 make_number (X_OK), false); 1599 make_number (X_OK), false);
1521 UNGCPRO; 1600 UNGCPRO;
@@ -1534,7 +1613,7 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1534 tem = remove_slash_colon (tem); 1613 tem = remove_slash_colon (tem);
1535 1614
1536 { 1615 {
1537 Lisp_Object arg_encoding = Qnil; 1616 Lisp_Object arg_encoding = Qnil, tem2;
1538 struct gcpro gcpro1; 1617 struct gcpro gcpro1;
1539 GCPRO1 (tem); 1618 GCPRO1 (tem);
1540 1619
@@ -1547,9 +1626,9 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1547 systems for encoding arguments and for encoding data sent to the 1626 systems for encoding arguments and for encoding data sent to the
1548 process. */ 1627 process. */
1549 1628
1550 for (i = 3; i < nargs; i++) 1629 for (tem2 = program_args; CONSP (tem2); tem2 = XCDR (tem2))
1551 { 1630 {
1552 tem = Fcons (args[i], tem); 1631 tem = Fcons (XCAR (tem2), tem);
1553 CHECK_STRING (XCAR (tem)); 1632 CHECK_STRING (XCAR (tem));
1554 if (STRING_MULTIBYTE (XCAR (tem))) 1633 if (STRING_MULTIBYTE (XCAR (tem)))
1555 { 1634 {
@@ -1567,10 +1646,11 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1567 1646
1568 /* Now that everything is encoded we can collect the strings into 1647 /* Now that everything is encoded we can collect the strings into
1569 NEW_ARGV. */ 1648 NEW_ARGV. */
1570 SAFE_NALLOCA (new_argv, 1, nargs - 1); 1649 new_argc = XINT (Flength (tem));
1571 new_argv[nargs - 2] = 0; 1650 SAFE_NALLOCA (new_argv, 1, new_argc + 1);
1651 new_argv[new_argc] = 0;
1572 1652
1573 for (i = nargs - 2; i-- != 0; ) 1653 for (i = new_argc - 1; i >= 0; i--)
1574 { 1654 {
1575 new_argv[i] = SDATA (XCAR (tem)); 1655 new_argv[i] = SDATA (XCAR (tem));
1576 tem = XCDR (tem); 1656 tem = XCDR (tem);
@@ -1581,6 +1661,7 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1581 else 1661 else
1582 create_pty (proc); 1662 create_pty (proc);
1583 1663
1664 UNGCPRO;
1584 SAFE_FREE (); 1665 SAFE_FREE ();
1585 return unbind_to (count, proc); 1666 return unbind_to (count, proc);
1586} 1667}
@@ -1648,7 +1729,7 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
1648 1729
1649 inchannel = outchannel = -1; 1730 inchannel = outchannel = -1;
1650 1731
1651 if (!NILP (Vprocess_connection_type)) 1732 if (p->pty_flag)
1652 outchannel = inchannel = allocate_pty (pty_name); 1733 outchannel = inchannel = allocate_pty (pty_name);
1653 1734
1654 if (inchannel >= 0) 1735 if (inchannel >= 0)
@@ -1701,8 +1782,12 @@ create_process (Lisp_Object process, char **new_argv, Lisp_Object current_dir)
1701 p->pty_flag = pty_flag; 1782 p->pty_flag = pty_flag;
1702 pset_status (p, Qrun); 1783 pset_status (p, Qrun);
1703 1784
1704 FD_SET (inchannel, &input_wait_mask); 1785 if (!EQ (p->command, Qt))
1705 FD_SET (inchannel, &non_keyboard_wait_mask); 1786 {
1787 FD_SET (inchannel, &input_wait_mask);
1788 FD_SET (inchannel, &non_keyboard_wait_mask);
1789 }
1790
1706 if (inchannel > max_process_desc) 1791 if (inchannel > max_process_desc)
1707 max_process_desc = inchannel; 1792 max_process_desc = inchannel;
1708 1793
@@ -1894,7 +1979,7 @@ create_pty (Lisp_Object process)
1894{ 1979{
1895 struct Lisp_Process *p = XPROCESS (process); 1980 struct Lisp_Process *p = XPROCESS (process);
1896 char pty_name[PTY_NAME_SIZE]; 1981 char pty_name[PTY_NAME_SIZE];
1897 int pty_fd = NILP (Vprocess_connection_type) ? -1 : allocate_pty (pty_name); 1982 int pty_fd = !p->pty_flag ? -1 : allocate_pty (pty_name);
1898 1983
1899 if (pty_fd >= 0) 1984 if (pty_fd >= 0)
1900 { 1985 {
@@ -7269,6 +7354,10 @@ syms_of_process (void)
7269 DEFSYM (QCstop, ":stop"); 7354 DEFSYM (QCstop, ":stop");
7270 DEFSYM (QCoptions, ":options"); 7355 DEFSYM (QCoptions, ":options");
7271 DEFSYM (QCplist, ":plist"); 7356 DEFSYM (QCplist, ":plist");
7357 DEFSYM (QCcommand, ":command");
7358 DEFSYM (QCconnection_type, ":connection-type");
7359 DEFSYM (Qpty, "pty");
7360 DEFSYM (Qpipe, "pipe");
7272 7361
7273 DEFSYM (Qlast_nonmenu_event, "last-nonmenu-event"); 7362 DEFSYM (Qlast_nonmenu_event, "last-nonmenu-event");
7274 7363
@@ -7371,7 +7460,7 @@ The variable takes effect when `start-process' is called. */);
7371 defsubr (&Sprocess_plist); 7460 defsubr (&Sprocess_plist);
7372 defsubr (&Sset_process_plist); 7461 defsubr (&Sset_process_plist);
7373 defsubr (&Sprocess_list); 7462 defsubr (&Sprocess_list);
7374 defsubr (&Sstart_process); 7463 defsubr (&Smake_process);
7375 defsubr (&Sserial_process_configure); 7464 defsubr (&Sserial_process_configure);
7376 defsubr (&Smake_serial_process); 7465 defsubr (&Smake_serial_process);
7377 defsubr (&Sset_network_process_option); 7466 defsubr (&Sset_network_process_option);