]> git.eshelyaron.com Git - emacs.git/commitdiff
Enable ICANON (Bug#6771). Any long line problem must be solved differently.
authorJan Djärv <jan.h.d@swipnet.se>
Mon, 2 Aug 2010 07:03:12 +0000 (09:03 +0200)
committerJan Djärv <jan.h.d@swipnet.se>
Mon, 2 Aug 2010 07:03:12 +0000 (09:03 +0200)
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).

src/ChangeLog
src/sysdep.c

index 0309fe1641f149e516a3e0dfc5ea79178168cbf8..60b881b3784cc88845a6413b5d3666519b61be70 100644 (file)
@@ -1,3 +1,8 @@
+2010-08-02  Jan Djärv  <jan.h.d@swipnet.se>
+
+       * sysdep.c (child_setup_tty): Enable ICANON in lflags and set VEOF
+       to Control-D (Bug#6771).
+
 2010-08-02  Juanma Barranquero  <lekktu@gmail.com>
 
        * editfns.c (Fregion_beginning, Fregion_end): Doc fixes (bug#6493).
index c5b0cb361dba2ff1baaa119da0e821fed83ebeff..43c71ef5ea0bdddf46a48cf92db47ee878b00572 100644 (file)
@@ -511,7 +511,16 @@ child_setup_tty (int out)
      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;