# HG changeset patch # User Jan D. # Date 1280732592 -7200 # Node ID b7ff82b433d89c03938d3ff6842947aa8a7ce987 # Parent 85cbdb81d0e09aa46773a1dc9ffd3335dbcb1e20 Enable ICANON (Bug#6771). Any long line problem must be solved differently. There is AFAIK no bug report or test case for the long line problem. * sysdep.c (child_setup_tty): Enable ICANON in lflags and set VEOF to Control-D (Bug#6771). diff -r 85cbdb81d0e0 -r b7ff82b433d8 src/ChangeLog --- a/src/ChangeLog Mon Aug 02 08:42:03 2010 +0200 +++ b/src/ChangeLog Mon Aug 02 09:03:12 2010 +0200 @@ -1,3 +1,8 @@ +2010-08-02 Jan Djärv + + * sysdep.c (child_setup_tty): Enable ICANON in lflags and set VEOF + to Control-D (Bug#6771). + 2010-08-02 Juanma Barranquero * editfns.c (Fregion_beginning, Fregion_end): Doc fixes (bug#6493). diff -r 85cbdb81d0e0 -r b7ff82b433d8 src/sysdep.c --- a/src/sysdep.c Mon Aug 02 08:42:03 2010 +0200 +++ b/src/sysdep.c Mon Aug 02 09:03:12 2010 +0200 @@ -511,7 +511,16 @@ process.c:send_process, and instead we disable ICANON by default, so if a subsprocess sets up ICANON, it's his problem (or the Elisp package that talks to it) to deal with lines that are too long. */ - s.main.c_lflag &= ~ICANON; /* Disable line editing and eof processing */ + /* There is no more "send eof to flush" going on (which is wrong and + unportable in itself), and disabling ICANON breaks a lot of stuff + and shows literal ^D in many cases. The correct way to handle too + much output is to buffer what could not be written and then write it + again when select returns ok for writing. This has it own set of + problems. Write is now asynchronous, is that a problem? + How much do we buffer, and what do we do when that limit is reached? */ + + s.main.c_lflag |= ICANON; /* Enable line editing and eof processing */ + s.main.c_cc[VEOF] = 'D'&037; /* Control-D */ s.main.c_cc[VMIN] = 1; s.main.c_cc[VTIME] = 0;